use of com.axelor.apps.supplychain.db.SupplychainBatch in project axelor-open-suite by axelor.
the class SupplychainBatchController method invoiceOrders.
public void invoiceOrders(ActionRequest request, ActionResponse response) {
try {
SupplychainBatch supplychainBatch = request.getContext().asType(SupplychainBatch.class);
supplychainBatch = Beans.get(SupplychainBatchRepository.class).find(supplychainBatch.getId());
Batch batch = Beans.get(SupplychainBatchService.class).invoiceOrders(supplychainBatch);
response.setFlash(batch.getComments());
response.setReload(true);
} catch (Exception e) {
TraceBackService.trace(response, e);
}
}
use of com.axelor.apps.supplychain.db.SupplychainBatch in project axelor-open-suite by axelor.
the class SupplychainBatchController method invoiceOutgoingStockMoves.
public void invoiceOutgoingStockMoves(ActionRequest request, ActionResponse response) {
try {
SupplychainBatch supplychainBatch = request.getContext().asType(SupplychainBatch.class);
supplychainBatch = Beans.get(SupplychainBatchRepository.class).find(supplychainBatch.getId());
Batch batch = Beans.get(SupplychainBatchService.class).invoiceOutgoingStockMoves(supplychainBatch);
response.setFlash(batch.getComments());
response.setReload(true);
} catch (Exception e) {
TraceBackService.trace(response, e);
}
}
use of com.axelor.apps.supplychain.db.SupplychainBatch 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;
}
}
}
}
use of com.axelor.apps.supplychain.db.SupplychainBatch in project axelor-open-suite by axelor.
the class BatchOutgoingStockMoveInvoicing method process.
@Override
protected void process() {
SupplychainBatch supplychainBatch = batch.getSupplychainBatch();
List<Long> anomalyList = Lists.newArrayList(0L);
SaleOrderRepository saleRepo = Beans.get(SaleOrderRepository.class);
TypedQuery<StockMove> query = JPA.em().createQuery("SELECT self FROM StockMove self " + "WHERE self.statusSelect = :statusSelect " + "AND self.originTypeSelect LIKE :typeSaleOrder " + "AND self.invoicingStatusSelect != :invoicingStatusSelect " + "AND (SELECT count(invoice.id) FROM Invoice invoice WHERE invoice.statusSelect != :invoiceStatusCanceled AND invoice MEMBER OF self.invoiceSet) = 0" + "AND self.id NOT IN (:anomalyList) " + "AND self.partner.id NOT IN (" + Beans.get(BlockingService.class).listOfBlockedPartner(supplychainBatch.getCompany(), BlockingRepository.INVOICING_BLOCKING) + ") " + "AND :batch NOT MEMBER OF self.batchSet " + "ORDER BY self.id", StockMove.class).setParameter("statusSelect", StockMoveRepository.STATUS_REALIZED).setParameter("typeSaleOrder", StockMoveRepository.ORIGIN_SALE_ORDER).setParameter("invoiceStatusCanceled", InvoiceRepository.STATUS_CANCELED).setParameter("invoicingStatusSelect", StockMoveRepository.STATUS_DELAYED_INVOICE).setParameter("anomalyList", anomalyList).setParameter("batch", batch).setMaxResults(FETCH_LIMIT);
List<StockMove> stockMoveList;
while (!(stockMoveList = query.getResultList()).isEmpty()) {
for (StockMove stockMove : stockMoveList) {
try {
stockMoveInvoiceService.createInvoiceFromSaleOrder(stockMove, saleRepo.find(stockMove.getOriginId()), null);
updateStockMove(stockMove);
} catch (Exception e) {
incrementAnomaly();
anomalyList.add(stockMove.getId());
query.setParameter("anomalyList", anomalyList);
TraceBackService.trace(e, ExceptionOriginRepository.INVOICE_ORIGIN, batch.getId());
break;
}
}
JPA.clear();
}
}
Aggregations