Advertisement
samuel025

IsInvoiceAlreadyPaidByMappingCashBankInOthersToSo

Aug 16th, 2021
1,161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package org.jleaf.erp.sls.bo.invoice;
  2.  
  3. import org.jleaf.core.AbstractBusinessFunction;
  4. import org.jleaf.core.BusinessFunction;
  5. import org.jleaf.core.Dto;
  6. import org.jleaf.core.annotation.ErrorList;
  7. import org.jleaf.core.annotation.Info;
  8. import org.jleaf.core.annotation.InfoIn;
  9. import org.jleaf.core.annotation.InfoOut;
  10. import org.jleaf.core.dao.QueryBuilder;
  11. import org.jleaf.erp.cb.entity.MappingCashBankInSoBalanceItem;
  12. import org.jleaf.erp.sls.SalesConstants;
  13. import org.jleaf.erp.sls.dao.SalesInvoiceDao;
  14. import org.jleaf.erp.sls.dao.SalesInvoiceItemDao;
  15. import org.jleaf.erp.sls.entity.*;
  16. import org.jleaf.util.ValidationUtil;
  17. import org.slf4j.Logger;
  18. import org.slf4j.LoggerFactory;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.stereotype.Service;
  21.  
  22. import javax.persistence.Query;
  23. import java.util.List;
  24.  
  25.  
  26. /**
  27.  * Is InvoiceAdvance exists by id
  28.  * @author Fredi, Sep 19, 2014
  29.  * @version 1.0
  30.  */
  31.  
  32. //@ formatter:off
  33. @Service
  34. @InfoIn(value = {
  35.     @Info(name = "invoiceId", description = "invoiceId", type = Long.class, required = true)
  36. })
  37. @InfoOut(value = {
  38.     @Info(name = "exists", description = "exists", type = Boolean.class, required = true),
  39.  
  40. })
  41. @ErrorList(errorKeys = {
  42.  
  43. })
  44. //@ formatter:on
  45. public class IsInvoiceAlreadyPaidByMappingCashBankInOthersToSo extends AbstractBusinessFunction implements BusinessFunction {
  46.     private static Logger log = LoggerFactory.getLogger(IsInvoiceAlreadyPaidByMappingCashBankInOthersToSo.class);
  47.    
  48.     @Autowired
  49.     private SalesInvoiceDao salesInvoiceDao;
  50.  
  51.     @Autowired
  52.     private SalesInvoiceItemDao salesInvoiceItemDao;
  53.  
  54.     @Override
  55.     public Dto execute(Dto inputDto) throws Exception {    
  56.         ValidationUtil.valDtoContainsKey(inputDto, "invoiceId");
  57.  
  58.         Dto outputDto = new Dto();
  59.  
  60.         List<Object[]> result = null;
  61.  
  62.         // Ambil Total Payment
  63.         QueryBuilder builderTotalPayment = new QueryBuilder();
  64.         builderTotalPayment.add(" SELECT CASE WHEN COALESCE(C.amount, 0) = 0 THEN 0 ELSE A.gross_amount END AS payment" )
  65.                             .add(" FROM ") .add(SalesInvoice.TABLE_NAME) .add(" A ")
  66.                             .add(" INNER JOIN ") .add(SalesOrder.TABLE_NAME) .add(" B ON A.ref_id = B.so_id ")
  67.                             .add(" LEFT JOIN ") .add(MappingCashBankInSoBalanceItem.TABLE_NAME) .add("C ON B.so_id = C.so_id AND B.doc_no = C.doc_no")
  68.                             .add(" WHERE A.invoice_id = pInvoiceId ");
  69.  
  70.         Query queryTotalPayment = salesInvoiceDao.createNativeQuery(builderTotalPayment.toString());
  71.         queryTotalPayment.setParameter("invoiceId", inputDto.getLong("invoiceId"));
  72.  
  73.         Double totalPayment = (Double) queryTotalPayment.getSingleResult();
  74.  
  75.         // Ambil Total Tax
  76.         QueryBuilder builderTotalTax = new QueryBuilder();
  77.         builderTotalTax.add(" SELECT SUM(L.tax_amount) AS total_amount " )
  78.                 .add(" FROM ") .add(SalesInvoiceItem.TABLE_NAME) .add(" Z ")
  79.                 .add(" INNER JOIN ") .add(SalesInvoice.TABLE_NAME) .add(" A ON Z.invoice_id = A.invoice_id ")
  80.                 .add(" INNER JOIN ") .add(SalesOrder.TABLE_NAME) .add(" B ON A.ref_id = B.so_id AND A.ref_doc_type_id = B.doc_type_id ")
  81.                 .add(" INNER JOIN ") .add(DeliveryOrder.TABLE_NAME) .add(" C ON B.so_id = C.ref_id ")
  82.                 .add(" INNER JOIN ") .add(SalesOrderBalanceInvoice.TABLE_NAME) .add(" F ON A.tenant_id = F.tenant_id AND F.ou_id = A.ou_id AND F.ref_doc_type_id = :DoDocTypeId ")
  83.                 .add("              AND F.ref_id = C.do_id AND F.so_id = C.ref_id AND F.ref_item_id = Z.ref_item_id ")
  84.                 .add("              AND F.do_receipt_item_id = Z.do_receipt_item_id ")
  85.                 .add(" INNER JOIN ") .add(SalesOrderBalanceInvoiceTax.TABLE_NAME) .add(" L ON L.tenant_id = F.tenant_id ")
  86.                 .add("              AND L.ou_id = F.ou_id AND L.partner_id = F.partner_id AND L.ref_doc_type_id = F.ref_doc_type_id ")
  87.                 .add("              AND L.ref_id = F.ref_id AND L.ref_item_id = F.ref_item_id AND L.do_receipt_item_id = F.do_receipt_item_id ")
  88.                 .add(" WHERE A.invoice_id = :invoiceId ");
  89.  
  90.         Query queryTotalTax = salesInvoiceItemDao.createNativeQuery(builderTotalTax.toString());
  91.         queryTotalTax.setParameter("invoiceId", inputDto.getLong("invoiceId"));
  92.         queryTotalTax.setParameter("DoDocTypeId", SalesConstants.DOCUMENT_DELIVERY_ORDER);
  93.  
  94.         Double totalTax = (Double) queryTotalTax.getSingleResult();
  95.  
  96.         // Ambil Total Amount
  97.         QueryBuilder builderTotalAmount = new QueryBuilder();
  98.         builderTotalAmount.add(" SELECT SUM(L.tax_amount) AS total_amount " )
  99.                 .add(" FROM ") .add(SalesInvoiceItem.TABLE_NAME) .add(" Z ")
  100.                 .add(" INNER JOIN ") .add(SalesInvoice.TABLE_NAME) .add(" A ON Z.invoice_id = A.invoice_id ")
  101.                 .add(" INNER JOIN ") .add(SalesOrder.TABLE_NAME) .add(" B ON A.ref_id = B.so_id AND A.ref_doc_type_id = B.doc_type_id ")
  102.                 .add(" INNER JOIN ") .add(DeliveryOrder.TABLE_NAME) .add(" C ON B.so_id = C.ref_id ")
  103.                 .add(" INNER JOIN ") .add(SalesOrderBalanceInvoice.TABLE_NAME) .add(" F ON A.tenant_id = F.tenant_id AND F.ou_id = A.ou_id AND F.ref_doc_type_id = :DoDocTypeId ")
  104.                 .add("              AND F.ref_id = C.do_id AND F.so_id = C.ref_id AND F.ref_item_id = Z.ref_item_id ")
  105.                 .add("              AND F.do_receipt_item_id = Z.do_receipt_item_id ")
  106.                 .add(" WHERE A.invoice_id = :invoiceId ");
  107.  
  108.         Query queryTotalAmount = salesInvoiceItemDao.createNativeQuery(builderTotalAmount.toString());
  109.         queryTotalAmount.setParameter("invoiceId", inputDto.getLong("invoiceId"));
  110.         queryTotalAmount.setParameter("DoDocTypeId", SalesConstants.DOCUMENT_DELIVERY_ORDER);
  111.  
  112.         Double totalAmount = (Double) queryTotalAmount.getSingleResult();
  113.  
  114.         Double totalDue = totalAmount + totalTax - totalPayment;
  115.  
  116.         boolean isExists = false;
  117.         if (totalDue == 0 && totalDue != null) {
  118.             isExists = true;
  119.         }
  120.        
  121.         outputDto.put("exists", isExists);
  122.         log.debug("outputDtoEmailTemplate >> "+outputDto);
  123.         log.info("outputDtoEmailTemplate >> "+outputDto);
  124.        
  125.         return outputDto;
  126.     }
  127.  
  128.     @Override
  129.     public String getDescription() {
  130.         return "Is Invoice Already Paid By Mapping CashBank In Others To So";
  131.     }
  132.  
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement