Advertisement
aadddrr

Untitled

Apr 3rd, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.88 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 = "tenantId", description = "tenant id", type = Long.class),
  41.         @Info(name = "ouId", description = "ou id", type = Long.class),
  42.         @Info(name = "partnerId", description = "partner id", type = Long.class)
  43. })
  44. @InfoOut(value = {
  45.         @Info(name = "amount", description = "amount of not yet paid due invoice", type = Double.class),
  46.         @Info(name = "tax amount", description = "tax amount of not yet paid due invoice", type = Double.class) })
  47. @ErrorList(errorKeys = {
  48.  
  49. })
  50. //@formatter:on
  51. public class GetNotYetPaidDueInvoiceAmountForSoApproval extends AbstractBusinessFunction implements BusinessFunction {
  52.  
  53.     @Autowired
  54.     SalesOrderDao salesOrderDao;
  55.  
  56.     public String getDescription() {
  57.         // write description of this business function here
  58.         return "get amount of not yet paid due invoice for SO approval";
  59.     }
  60.  
  61.     @SuppressWarnings("unchecked")
  62.     public Dto execute(Dto inputDto) throws Exception {
  63.         // validate inputDto have key in @InfoIn
  64.         ValidationUtil.valDtoContainsKey(inputDto, "tenantId");
  65.         ValidationUtil.valDtoContainsKey(inputDto, "ouId");
  66.         ValidationUtil.valDtoContainsKey(inputDto, "partnerId");
  67.  
  68.         String dueDate;
  69.         Calendar calendar = Calendar.getInstance();
  70.         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
  71.        
  72.         calendar.add(Calendar.DATE, -1);
  73.         dueDate = dateFormat.format(calendar.getTime());
  74.  
  75.         // @formatter:off
  76.         // create native sql
  77.         QueryBuilder builder = new QueryBuilder();
  78.         builder.add(" SELECT COALESCE(SUM(A.amount - A.payment_amount), 0) AS due_amount FROM ")
  79.         .add(SalesConstantsForXcom.INVOICE_AR_BALANCE_TABLE_NAME)
  80.         .add(" A LEFT OUTER JOIN ")
  81.         .add(SalesOrder.TABLE_NAME)
  82.         .add(" B ON A.ref_doc_type_id = B.doc_type_id AND A.ref_id = B.so_id ")  
  83.         .add(" WHERE A.tenant_id = :tenantId ")
  84.         .add(" AND A.ou_id = :ouId ")
  85.         .add(" AND A.partner_id = :partnerId ")
  86.         .add(" AND 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("tenantId", inputDto.getLong("tenantId"));
  95.         q.setParameter("ouId", inputDto.getLong("ouId"));
  96.         q.setParameter("partnerId", inputDto.getLong("partnerId"));
  97.         q.setParameter("startDate", GeneralConstants.START_DATE);
  98.         q.setParameter("endDate", dueDate);
  99.         q.setParameter("NO", GeneralConstants.NO);
  100.        
  101.         Object amount = q.getSingleResult();
  102.        
  103.         // @formatter:off
  104.         // create native sql
  105.         QueryBuilder builderTax = new QueryBuilder();
  106.         builderTax.add(" SELECT COALESCE(SUM(A.gov_tax_amount - A.payment_amount), 0) AS due_amount FROM ")
  107.                 .add(SalesConstantsForXcom.INVOICE_TAX_AR_BALANCE_TABLE_NAME)
  108.                 .add(" A INNER JOIN ")
  109.                 .add(SalesConstantsForXcom.INVOICE_AR_BALANCE_TABLE_NAME)
  110.                 .add(" B ON A.invoice_ar_balance_id = B.invoice_ar_balance_id ")  
  111.                 .add(" WHERE A.tenant_id = :tenantId ")
  112.                 .add(" AND A.ou_id = :ouId ")
  113.                 .add(" AND A.partner_id = :partnerId ")
  114.                 .add(" AND A.due_date BETWEEN :startDate AND :endDate ")
  115.                 .add(" AND A.flg_payment = :NO ");
  116.         // @formatter:on
  117.  
  118.         // create native query
  119.         Query qTax = salesOrderDao.createNativeQuery(builderTax.toString());
  120.  
  121.         // set query parameter (if any)
  122.         qTax.setParameter("tenantId", inputDto.getLong("tenantId"));
  123.         qTax.setParameter("ouId", inputDto.getLong("ouId"));
  124.         qTax.setParameter("partnerId", inputDto.getLong("partnerId"));
  125.         qTax.setParameter("startDate", GeneralConstants.START_DATE);
  126.         qTax.setParameter("endDate", dueDate);
  127.         qTax.setParameter("NO", GeneralConstants.NO);
  128.        
  129.         Object taxAmount = qTax.getSingleResult();
  130.        
  131.         // return query result
  132.         return new Dto().put("amount", amount).put("taxAmount", taxAmount);
  133.     }
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement