Search in sources :

Example 1 with PurchaseOrderInvoiceService

use of com.axelor.apps.supplychain.service.PurchaseOrderInvoiceService in project axelor-open-suite by axelor.

the class BatchOrderInvoicingPurchase method process.

@Override
protected void process() {
    SupplychainBatch supplychainBatch = batch.getSupplychainBatch();
    List<String> filterList = new ArrayList<>();
    Query<PurchaseOrder> query = Beans.get(PurchaseOrderRepository.class).all();
    if (supplychainBatch.getCompany() != null) {
        filterList.add("self.company = :company");
        query.bind("company", supplychainBatch.getCompany());
    }
    if (supplychainBatch.getSalespersonOrBuyerSet() != null && !supplychainBatch.getSalespersonOrBuyerSet().isEmpty()) {
        filterList.add("self.buyerUser IN (:buyerSet)");
        query.bind("buyerSet", supplychainBatch.getSalespersonOrBuyerSet());
    }
    if (supplychainBatch.getTeam() != null) {
        filterList.add("self.buyerUser IS NOT NULL AND self.buyerUser.activeTeam = :team");
        query.bind("team", supplychainBatch.getTeam());
    }
    if (!Strings.isNullOrEmpty(supplychainBatch.getDeliveryOrReceiptState())) {
        List<Integer> receiptStateList = StringTool.getIntegerList(supplychainBatch.getDeliveryOrReceiptState());
        filterList.add("self.receiptState IN (:receiptStateList)");
        query.bind("receiptStateList", receiptStateList);
    }
    if (!Strings.isNullOrEmpty(supplychainBatch.getStatusSelect())) {
        List<Integer> statusSelectList = StringTool.getIntegerList(supplychainBatch.getStatusSelect());
        filterList.add("self.statusSelect IN (:statusSelectList)");
        query.bind("statusSelectList", statusSelectList);
    }
    if (supplychainBatch.getOrderUpToDate() != null) {
        filterList.add("self.orderDate <= :orderUpToDate");
        query.bind("orderUpToDate", supplychainBatch.getOrderUpToDate());
    }
    filterList.add("self.amountInvoiced < self.exTaxTotal");
    filterList.add("NOT EXISTS (SELECT 1 FROM Invoice invoice WHERE invoice.statusSelect != :invoiceStatusSelect " + "AND (invoice.purchaseOrder = self " + "OR invoice.purchaseOrder IS NULL AND EXISTS (SELECT 1 FROM invoice.invoiceLineList invoiceLine " + "WHERE invoiceLine.purchaseOrderLine MEMBER OF self.purchaseOrderLineList)))");
    filterList.add("self.supplierPartner.id NOT IN (" + Beans.get(BlockingService.class).listOfBlockedPartner(supplychainBatch.getCompany(), BlockingRepository.INVOICING_BLOCKING) + ")");
    query.bind("invoiceStatusSelect", InvoiceRepository.STATUS_CANCELED);
    List<Long> anomalyList = Lists.newArrayList(0L);
    filterList.add("self.id NOT IN (:anomalyList)");
    query.bind("anomalyList", anomalyList);
    String filter = filterList.stream().map(item -> String.format("(%s)", item)).collect(Collectors.joining(" AND "));
    query.filter(filter);
    PurchaseOrderInvoiceService purchaseOrderInvoiceService = Beans.get(PurchaseOrderInvoiceService.class);
    Set<Long> treatedSet = new HashSet<>();
    for (List<PurchaseOrder> purchaseOrderList; !(purchaseOrderList = query.fetch(FETCH_LIMIT)).isEmpty(); JPA.clear()) {
        for (PurchaseOrder purchaseOrder : purchaseOrderList) {
            if (treatedSet.contains(purchaseOrder.getId())) {
                throw new IllegalArgumentException("Invoice generation error");
            }
            treatedSet.add(purchaseOrder.getId());
            try {
                purchaseOrderInvoiceService.generateInvoice(purchaseOrder);
                incrementDone();
            } catch (Exception e) {
                incrementAnomaly();
                anomalyList.add(purchaseOrder.getId());
                query.bind("anomalyList", anomalyList);
                TraceBackService.trace(e, ExceptionOriginRepository.INVOICE_ORIGIN, batch.getId());
                e.printStackTrace();
                break;
            }
        }
    }
}
Also used : Query(com.axelor.db.Query) StringTool(com.axelor.apps.tool.StringTool) JPA(com.axelor.db.JPA) PurchaseOrderRepository(com.axelor.apps.purchase.db.repo.PurchaseOrderRepository) TraceBackService(com.axelor.exception.service.TraceBackService) Set(java.util.Set) PurchaseOrderInvoiceService(com.axelor.apps.supplychain.service.PurchaseOrderInvoiceService) Collectors(java.util.stream.Collectors) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Strings(com.google.common.base.Strings) BlockingRepository(com.axelor.apps.base.db.repo.BlockingRepository) List(java.util.List) Lists(com.google.common.collect.Lists) InvoiceRepository(com.axelor.apps.account.db.repo.InvoiceRepository) Beans(com.axelor.inject.Beans) BlockingService(com.axelor.apps.base.service.BlockingService) ExceptionOriginRepository(com.axelor.exception.db.repo.ExceptionOriginRepository) PurchaseOrder(com.axelor.apps.purchase.db.PurchaseOrder) SupplychainBatch(com.axelor.apps.supplychain.db.SupplychainBatch) ArrayList(java.util.ArrayList) PurchaseOrderRepository(com.axelor.apps.purchase.db.repo.PurchaseOrderRepository) SupplychainBatch(com.axelor.apps.supplychain.db.SupplychainBatch) PurchaseOrder(com.axelor.apps.purchase.db.PurchaseOrder) PurchaseOrderInvoiceService(com.axelor.apps.supplychain.service.PurchaseOrderInvoiceService) HashSet(java.util.HashSet)

Aggregations

InvoiceRepository (com.axelor.apps.account.db.repo.InvoiceRepository)1 BlockingRepository (com.axelor.apps.base.db.repo.BlockingRepository)1 BlockingService (com.axelor.apps.base.service.BlockingService)1 PurchaseOrder (com.axelor.apps.purchase.db.PurchaseOrder)1 PurchaseOrderRepository (com.axelor.apps.purchase.db.repo.PurchaseOrderRepository)1 SupplychainBatch (com.axelor.apps.supplychain.db.SupplychainBatch)1 PurchaseOrderInvoiceService (com.axelor.apps.supplychain.service.PurchaseOrderInvoiceService)1 StringTool (com.axelor.apps.tool.StringTool)1 JPA (com.axelor.db.JPA)1 Query (com.axelor.db.Query)1 ExceptionOriginRepository (com.axelor.exception.db.repo.ExceptionOriginRepository)1 TraceBackService (com.axelor.exception.service.TraceBackService)1 Beans (com.axelor.inject.Beans)1 Strings (com.google.common.base.Strings)1 Lists (com.google.common.collect.Lists)1 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Set (java.util.Set)1 Collectors (java.util.stream.Collectors)1