Advertisement
aadddrr

GetRemainingCreditAmountForSoApproval

Apr 3rd, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.08 KB | None | 0 0
  1. package org.jleaf.erp.sls.bo.salesorder;
  2.  
  3. import java.text.SimpleDateFormat;
  4. import java.util.Calendar;
  5.  
  6. import javax.persistence.Query;
  7.  
  8. import org.jleaf.core.AbstractBusinessFunction;
  9. import org.jleaf.core.BusinessFunction;
  10. import org.jleaf.core.Dto;
  11. import org.jleaf.core.GeneralConstants;
  12. import org.jleaf.core.annotation.ErrorList;
  13. import org.jleaf.core.annotation.Info;
  14. import org.jleaf.core.annotation.InfoIn;
  15. import org.jleaf.core.annotation.InfoOut;
  16. import org.jleaf.core.dao.QueryBuilder;
  17. import org.jleaf.erp.master.entity.PartnerType;
  18. import org.jleaf.erp.sls.SalesConstantsForXcom;
  19. import org.jleaf.erp.sls.dao.SalesOrderDao;
  20. import org.jleaf.erp.sls.entity.SalesOrder;
  21. import org.jleaf.util.Calc;
  22. import org.jleaf.util.ValidationUtil;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.stereotype.Service;
  25.  
  26. /**
  27.  *
  28.  * @author Adrian
  29.  * Apr 3, 2017
  30.  */
  31.  
  32. //@formatter:off
  33. @Service
  34. @InfoIn(value = {
  35.         @Info(name = "tenantId", description = "tenant id", type = Long.class),
  36.         @Info(name = "ouId", description = "ou id", type = Long.class),
  37.         @Info(name = "partnerId", description = "partner id", type = Long.class)
  38. })
  39. @InfoOut(value = {
  40.         @Info(name = "amount", description = "remaining credit amount", type = Double.class) })
  41. @ErrorList(errorKeys = {
  42.  
  43. })
  44. //@formatter:on
  45. public class GetRemainingCreditAmountForSoApproval extends AbstractBusinessFunction implements BusinessFunction {
  46.  
  47.     @Autowired
  48.     SalesOrderDao salesOrderDao;
  49.  
  50.     public String getDescription() {
  51.         // write description of this business function here
  52.         return "get remaining credit amount";
  53.     }
  54.  
  55.     @SuppressWarnings("unchecked")
  56.     public Dto execute(Dto inputDto) throws Exception {
  57.         // validate inputDto have key in @InfoIn
  58.         ValidationUtil.valDtoContainsKey(inputDto, "tenantId");
  59.         ValidationUtil.valDtoContainsKey(inputDto, "ouId");
  60.         ValidationUtil.valDtoContainsKey(inputDto, "partnerId");
  61.  
  62.         // @formatter:off
  63.         // create native sql
  64.         QueryBuilder builder = new QueryBuilder();
  65.         builder.add(" WITH os_invoice AS ( ")
  66.                 .add(" SELECT COALESCE(SUM(A.amount - A.payment_amount), 0) AS os_amount FROM ")
  67.                 .add(SalesConstantsForXcom.INVOICE_AR_BALANCE_TABLE_NAME)
  68.                 .add(" A LEFT OUTER JOIN ")
  69.                 .add(SalesOrder.TABLE_NAME)
  70.                 .add(" B ON A.ref_doc_type_id = B.doc_type_id AND A.ref_id = B.so_id ")  
  71.                 .add(" WHERE A.tenant_id = :tenantId ")
  72.                 .add(" AND A.ou_id = :ouId ")
  73.                 .add(" AND A.partner_id = :partnerId ")
  74.                 .add(" AND A.due_date BETWEEN :startDate AND :endDate ")
  75.                 .add(" AND A.flg_payment = :NO )")
  76.                 .add(" SELECT (A.amount_limit - B.os_amount) FROM ")
  77.                 .add(PartnerType.TABLE_NAME)
  78.                 .add(" A, os_invoice B ")
  79.                 .add(" WHERE A.partner_id = :partnerId ")
  80.                 .add(" AND A.group_partner = :CUSTOMER ");
  81.         // @formatter:on
  82.        
  83.         // create native query
  84.         Query q = salesOrderDao.createNativeQuery(builder.toString());
  85.        
  86.         // set query parameter (if any)
  87.         q.setParameter("tenantId", inputDto.getLong("tenantId"));
  88.         q.setParameter("ouId", inputDto.getLong("ouId"));
  89.         q.setParameter("partnerId", inputDto.getLong("partnerId"));
  90.         q.setParameter("startDate", GeneralConstants.START_DATE);
  91.         q.setParameter("endDate", GeneralConstants.END_DATE);
  92.         q.setParameter("NO", GeneralConstants.NO);
  93.         q.setParameter("CUSTOMER", SalesConstantsForXcom.GROUP_PARTNER_CUSTOMER);
  94.        
  95.         Object amount = q.getSingleResult();
  96.        
  97.         // @formatter:off
  98.         // create native sql
  99.         QueryBuilder builderTax = new QueryBuilder();
  100.         builderTax.add(" WITH os_invoice AS ( ")
  101.                 .add(" SELECT COALESCE(SUM(A.gov_tax_amount - A.payment_amount), 0) AS os_amount FROM ")
  102.                 .add(SalesConstantsForXcom.INVOICE_TAX_AR_BALANCE_TABLE_NAME)
  103.                 .add(" A INNER JOIN ")
  104.                 .add(SalesConstantsForXcom.INVOICE_AR_BALANCE_TABLE_NAME)
  105.                 .add(" B ON A.invoice_ar_balance_id = B.invoice_ar_balance_id ")  
  106.                 .add(" WHERE A.tenant_id = :tenantId ")
  107.                 .add(" AND A.ou_id = :ouId ")
  108.                 .add(" AND A.partner_id = :partnerId ")
  109.                 .add(" AND A.due_date BETWEEN :startDate AND :endDate ")
  110.                 .add(" AND A.flg_payment = :NO )")
  111.                 .add(" SELECT (A.amount_limit - B.os_amount) FROM ")
  112.                 .add(PartnerType.TABLE_NAME)
  113.                 .add(" A, os_invoice B ")
  114.                 .add(" WHERE A.partner_id = :partnerId ")
  115.                 .add(" AND A.group_partner = :CUSTOMER ");
  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", GeneralConstants.END_DATE);
  127.         qTax.setParameter("NO", GeneralConstants.NO);
  128.         qTax.setParameter("CUSTOMER", SalesConstantsForXcom.GROUP_PARTNER_CUSTOMER);
  129.        
  130.         Object taxAmount = qTax.getSingleResult();
  131.        
  132.         // return query result
  133.         return new Dto().put("amount", new Calc(Double.valueOf(amount.toString())).add(Double.valueOf(taxAmount.toString())).doubleValue());
  134.     }
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement