Advertisement
aadddrr

GetNotYetPaidDueInvoiceAmountForSoApproval

Apr 3rd, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.52 KB | None | 0 0
  1. package org.jleaf.erp.sls.bo.salesorder;
  2.  
  3. import java.text.SimpleDateFormat;
  4. import java.util.Calendar;
  5. import java.util.List;
  6.  
  7. import javax.persistence.Query;
  8.  
  9. import org.jleaf.common.CommonExceptionConstants;
  10. import org.jleaf.core.AbstractBusinessFunction;
  11. import org.jleaf.core.BusinessFunction;
  12. import org.jleaf.core.Dto;
  13. import org.jleaf.core.GeneralConstants;
  14. import org.jleaf.core.annotation.ErrorList;
  15. import org.jleaf.core.annotation.Info;
  16. import org.jleaf.core.annotation.InfoIn;
  17. import org.jleaf.core.annotation.InfoOut;
  18. import org.jleaf.core.dao.CriteriaHelper;
  19. import org.jleaf.core.dao.QueryBuilder;
  20. import org.jleaf.erp.master.entity.Partner;
  21. import org.jleaf.erp.sls.SalesConstants;
  22. import org.jleaf.erp.sls.SalesConstantsForXcom;
  23. import org.jleaf.erp.sls.SalesExceptionConstants;
  24. import org.jleaf.erp.sls.dao.SalesOrderDao;
  25. import org.jleaf.erp.sls.entity.SalesOrder;
  26. import org.jleaf.util.DtoUtil;
  27. import org.jleaf.util.ValidationUtil;
  28. import org.springframework.beans.factory.annotation.Autowired;
  29. import org.springframework.stereotype.Service;
  30.  
  31. /**
  32.  *
  33.  * @author Adrian
  34.  * Apr 3, 2017
  35.  */
  36.  
  37. //@formatter:off
  38. @Service
  39. @InfoIn(value = {
  40.         @Info(name = "soId", description = "SO id", type = Long.class)
  41. })
  42. @InfoOut(value = {
  43.         @Info(name = "amount", description = "amount of not yet paid due invoice", type = Long.class) })
  44. @ErrorList(errorKeys = {
  45.  
  46. })
  47. //@formatter:on
  48. public class GetNotYetPaidDueInvoiceAmountForSoApproval extends AbstractBusinessFunction implements BusinessFunction {
  49.  
  50.     @Autowired
  51.     SalesOrderDao salesOrderDao;
  52.  
  53.     public String getDescription() {
  54.         // write description of this business function here
  55.         return "get amount of not yet paid due invoice for SO approval";
  56.     }
  57.  
  58.     @SuppressWarnings("unchecked")
  59.     public Dto execute(Dto inputDto) throws Exception {
  60.         // validate inputDto have key in @InfoIn
  61.         ValidationUtil.valDtoContainsKey(inputDto, "soId");
  62.  
  63.         String dueDate;
  64.         Calendar calendar = Calendar.getInstance();
  65.         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
  66.        
  67.         calendar.add(Calendar.DATE, -1);
  68.         dueDate = dateFormat.format(calendar.getTime());
  69.  
  70.         // @formatter:off
  71.         // create native sql
  72.         QueryBuilder builder = new QueryBuilder();
  73.         builder.add(" WITH current_so AS ( ")
  74.                 .add(" SELECT tenant_id, ou_id, partner_id FROM ")
  75.                 .add(SalesOrder.TABLE_NAME)
  76.                 .add(" A WHERE A.so_id = :soId ) ")
  77.                 .add(" SELECT COALESCE(SUM(A.amount - A.payment_amount), 0) AS due_amount FROM ")
  78.                 .add(SalesConstantsForXcom.INVOICE_AR_BALANCE_TABLE_NAME)
  79.                 .add(" A LEFT OUTER JOIN ")
  80.                 .add(SalesOrder.TABLE_NAME)
  81.                 .add(" B ON A.ref_doc_type_id = B.doc_type_id AND A.ref_id = B.so_id ")  
  82.                 .add(" LEFT OUTER JOIN ")
  83.                 .add(SalesConstantsForXcom.INVOICE_TAX_AR_BALANCE_TABLE_NAME)
  84.                 .add(" C ON C.invoice_ar_balance_id = A.invoice_ar_balance_id ")
  85.                 .add(" INNER JOIN current_so D ON A.tenant_id = D.tenant_id AND A.ou_id = D.ou_id AND A.partner_id = D.partner_id ")
  86.                 .add(" WHERE A.due_date BETWEEN :startDate AND :endDate ")
  87.                 .add(" AND A.flg_payment = :NO ");
  88.         // @formatter:on
  89.  
  90.         // create native query
  91.         Query q = salesOrderDao.createNativeQuery(builder.toString());
  92.  
  93.         // set query parameter (if any)
  94.         q.setParameter("soId", inputDto.getLong("soId"));
  95.         q.setParameter("startDate", GeneralConstants.START_DATE);
  96.         q.setParameter("endDate", dueDate);
  97.         q.setParameter("NO", GeneralConstants.NO);
  98.        
  99.         Object amount = q.getSingleResult();
  100.        
  101.         // return query result
  102.         return new Dto().put("amount", amount);
  103.     }
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement