Advertisement
Guest User

ProductUseCase

a guest
Mar 14th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.76 KB | None | 0 0
  1. package ru.cash.terminal.domain.usecases;
  2.  
  3. import java.util.List;
  4. import java.util.UUID;
  5.  
  6. import javax.inject.Inject;
  7.  
  8. import ru.cash.terminal.domain.entities.Product;
  9. import ru.cash.terminal.domain.executors.PostExecutionThread;
  10. import ru.cash.terminal.domain.executors.ThreadExecutor;
  11. import ru.cash.terminal.domain.services.ProductService;
  12. import ru.cash.terminal.domain.usecases.base.ServiceUseCase;
  13. import rx.Observable;
  14. import rx.functions.Func1;
  15.  
  16. import static ru.cash.terminal.utils.Utility.NOT_FATAL;
  17. import static ru.cash.terminal.utils.Utility.REQUIRED_FIELD;
  18.  
  19.  
  20. public class ProductUseCase extends ServiceUseCase<Product, ProductService> {
  21.  
  22.     @Inject
  23.     protected ProductUseCase(ThreadExecutor threadExecutor,
  24.                              PostExecutionThread postExecutionThread,
  25.                              ProductService service) {
  26.         super(threadExecutor, postExecutionThread, service);
  27.     }
  28.  
  29.     public Observable<Product> getBySearch(final String searchText, Product.Sorting sorting) {
  30.         return tService.getBySearch(searchText, sorting).filter(new Func1<Product, Boolean>() {
  31.             @Override
  32.             public Boolean call(Product product) {
  33.                 return (product.getName().toLowerCase().contains(searchText)
  34.                         || product.getArticle().toLowerCase().contains(searchText));
  35.  
  36.             }
  37.         });
  38.     }
  39.  
  40.     public Observable<Product> getProductByCatalog(String catalogId, Product.Sorting sorting) {
  41.         return tService.getProductByCatalogId(catalogId, sorting);
  42.     }
  43.  
  44.     public Observable<Product> getSortedByArticle(final String article, final boolean isAdd, final boolean isError) {
  45.         return super.getAll()
  46.                 .toList()
  47.                 .map(new Func1<List<Product>, Product>() {
  48.                     @Override
  49.                     public Product call(List<Product> products) {
  50.                         for (int i = 0; i < products.size(); i++) {
  51.                             Product product = products.get(i);
  52.                             if (!product.isRemoved() && product.getArticle().equals(article)) {
  53.                                 return product;
  54.                             }
  55.                         }
  56.                         return null;
  57.                     }
  58.                 })
  59.                 .flatMap(new Func1<Product, Observable<Product>>() {
  60.                     @Override
  61.                     public Observable<Product> call(Product product) {
  62.                         if (product == null) {
  63.                             if (!isAdd) {
  64.                                 addErrorMessage(NOT_FATAL + "Товар не найден");
  65.                             } else {
  66.                                 if (isError) {
  67.                                     addErrorMessage(NOT_FATAL + "Товар не найден");
  68.                                     return getObservableError();
  69.                                 } else {
  70.                                     return Observable.just(new Product());
  71.                                 }
  72.                             }
  73.  
  74.                         }
  75.                         return Observable.just(product);
  76.                     }
  77.                 });
  78.     }
  79.  
  80.     public Observable<Boolean> saveOrUpdateNewAndOldProductList(List<Product> newProducts, final List<Product> oldProducts) {
  81.  
  82.         return Observable.just(oldProducts)
  83.                 .flatMap(new Func1<List<Product>, Observable<Product>>() {
  84.                     @Override
  85.                     public Observable<Product> call(List<Product> products) {
  86.  
  87.                         return Observable.from(products);
  88.                     }
  89.                 })
  90.                 .flatMap(new Func1<Product, Observable<Boolean>>() {
  91.                     @Override
  92.                     public Observable<Boolean> call(Product oldProduct) {
  93.                         oldProduct.setRemoved(true);
  94.                         oldProduct.getCatalog().setRemoved(true);
  95.                         return tService.saveOrUpdate(oldProduct);
  96.                     }
  97.                 })
  98.                 .concatWith(
  99.                         Observable.from(newProducts)
  100.                                 .flatMap(new Func1<Product, Observable<Boolean>>() {
  101.                                     @Override
  102.                                     public Observable<Boolean> call(Product newProduct) {
  103.                                         newProduct.setId(UUID.randomUUID().toString().toUpperCase());
  104.                                         return tService.saveOrUpdate(newProduct);
  105.                                     }
  106.                                 }));
  107.  
  108.     }
  109.  
  110.     public Observable<Boolean> saveOrUpdateProduct(final Product product, final String firstArticle, final boolean isNew) {
  111.         if (!product.isRemoved()) {
  112.             validateProduct(product);
  113.             if (parametersIncorrect())
  114.                 return getObservableError();
  115.         }
  116.         return getAll()
  117.                 .toList()
  118.                 .map(new Func1<List<Product>, Boolean>() {
  119.                     @Override
  120.                     public Boolean call(List<Product> products) {
  121.                         for (Product p : products) {
  122.                             if (((!p.isRemoved()) && p.getArticle().equals(product.getArticle())) // true, если такой баркод есть в базе
  123.                                     && !product.getArticle().equals(firstArticle)) {//true, если баркод изменился
  124.                                 return true;
  125.                             }
  126.                         }
  127.                         return false;
  128.                     }
  129.                 })
  130.                 .flatMap(new Func1<Boolean, Observable<Boolean>>() {
  131.                     @Override
  132.                     public Observable<Boolean> call(Boolean isExist) {
  133.                         if (isExist) {
  134.                             addErrorMessage(NOT_FATAL + "Товар с таким штрихкодом уже есть в базе номенклатур");
  135.                             return getObservableError();
  136.                         }
  137.                         return saveOrUpdate(product.setRemoved(!isNew));
  138.                     }
  139.                 });
  140.     }
  141.  
  142.     private void validateProduct(Product product) {
  143.         if (product.getPrice() == null) {
  144.             addErrorMessage(NOT_FATAL + "Цена" + REQUIRED_FIELD);
  145.         }
  146.         if (product.getPrice() != null && product.getPrice() == 0.0d) {
  147.             addErrorMessage(NOT_FATAL + "Цена товара должна быть больше нуля");
  148.         }
  149.         if (product.getArticle() == null || product.getArticle().equals("")) {
  150.             addErrorMessage(NOT_FATAL + "Штрихкод" + REQUIRED_FIELD);
  151.         }
  152.         if (product.getRemainder() == -1) {
  153.             addErrorMessage(NOT_FATAL + "Остаток" + REQUIRED_FIELD);
  154.         }
  155.         if (product.getName() == null || product.getName().equals("")) {
  156.             addErrorMessage(NOT_FATAL + "Наименование" + REQUIRED_FIELD);
  157.         }
  158.         if (product.getProductUnit() == null) {
  159.             addErrorMessage(NOT_FATAL + "Необходимо выбрать единицу измерения");
  160.         }
  161.  
  162.         if (product.getCatalog() == null) {
  163.             addErrorMessage(NOT_FATAL + "Необходимо выбрать родительскую категорию");
  164.         }
  165.  
  166.         if (product.getTaxComplexParam() == null) {
  167.             addErrorMessage(NOT_FATAL + "Необходимо выбрать НДС продукта");
  168.         }
  169.  
  170.         if (product.getProductUnit() != null && !product.getProductUnit().isFractional()
  171. //                && (String.valueOf(product.getRemainder()).isContainsInParameters(".") || String.valueOf(product.getRemainder()).isContainsInParameters(","))
  172.                 && !isZeroFraction(product.getRemainder())) {
  173.             addErrorMessage(NOT_FATAL + "Введено неверное количество товара");
  174.         }
  175.     }
  176.  
  177.     private boolean isZeroFraction(Double value) {
  178.         return value % 1 == 0.0;
  179.     }
  180.  
  181.     public Observable<Boolean> saveOrUpdateProductList(List<Product> productList) {
  182.  
  183.         return Observable.from(productList)
  184.                 .flatMap(new Func1<Product, Observable<Boolean>>() {
  185.                     @Override
  186.                     public Observable<Boolean> call(Product product) {
  187.                         return tService.saveOrUpdate(product);
  188.                     }
  189.                 }).toList().flatMap(new Func1<List<Boolean>, Observable<Boolean>>() {
  190.                     @Override
  191.                     public Observable<Boolean> call(List<Boolean> booleen) {
  192.                         return Observable.just(true);
  193.                     }
  194.                 });
  195.  
  196.     }
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement