Evra70

Untitled

Apr 30th, 2020
307
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.94 KB | None | 0 0
  1. package org.jleaf.erp.sls.bo.tasksales;
  2.  
  3. import java.util.List;
  4.  
  5. import javax.persistence.Query;
  6.  
  7. import org.jleaf.common.entity.User;
  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.Info;
  13. import org.jleaf.core.annotation.InfoIn;
  14. import org.jleaf.core.annotation.InfoOut;
  15. import org.jleaf.core.dao.CriteriaHelper;
  16. import org.jleaf.core.dao.QueryBuilder;
  17. import org.jleaf.erp.master.dao.PartnerDao;
  18. import org.jleaf.erp.master.entity.Partner;
  19. import org.jleaf.erp.master.entity.PartnerAddress;
  20. import org.jleaf.erp.master.entity.PartnerCp;
  21. import org.jleaf.erp.master.entity.PartnerType;
  22. import org.jleaf.erp.sls.SalesConstants;
  23. import org.jleaf.erp.sls.dao.OrderDao;
  24. import org.jleaf.erp.sls.entity.PolicyCustomerGroupBrand;
  25. import org.jleaf.erp.sls.entity.UserPartner;
  26. import org.jleaf.util.DtoUtil;
  27. import org.jleaf.util.ValidationUtil;
  28. import org.slf4j.Logger;
  29. import org.slf4j.LoggerFactory;
  30. import org.springframework.beans.factory.annotation.Autowired;
  31. import org.springframework.stereotype.Service;
  32.  
  33. /**
  34. *
  35. * @author Ephraim Jehudah, April 09, 2020
  36. *
  37. **/
  38.  
  39. //@formatter:off
  40. @Service
  41. @InfoIn(value = {
  42. @Info(name = "apiKey", description = "api Key", type = String.class),
  43. @Info(name = "salesmanId", description = "salesmanId", type = Long.class),
  44. @Info(name = "datetime", description = "datetime", type = String.class),
  45. @Info(name = "userLoginId", description = "user Login Id", type = Long.class),
  46. @Info(name = "tenantLoginId", description = "tenant Login Id", type = Long.class),
  47. @Info(name = "roleLoginId", description = "roleLoginId", type = Long.class),
  48. })
  49. @InfoOut(value = {
  50. @Info(name = "customerWithSaldoPiutangList", description = "customerWithSaldoPiutangList (customerId, customerCode, customerName, totalSaldoPiutang, totalSaldoPiutangJatuhTempo, totalSaldoPiutangBelumJatuhTempo)", type = List.class)
  51. })
  52. //@formatter:on
  53. public class GetCustomerListWithSaldoPiutangBySalesman extends AbstractBusinessFunction implements BusinessFunction {
  54. private static final Logger log = LoggerFactory.getLogger(GetCustomerListWithSaldoPiutangBySalesman.class);
  55.  
  56. @Autowired
  57. OrderDao orderDao;
  58.  
  59. @Override
  60. public String getDescription() {
  61. return "Get Customer List With Saldo Piutang By Salesman";
  62. }
  63.  
  64. @SuppressWarnings("unchecked")
  65. @Override
  66. public Dto execute(Dto inputDto) throws Exception {
  67. log.info("Input BF {} -. {} ", inputDto);
  68.  
  69. ValidationUtil.valDtoContainsKey(inputDto, "apiKey");
  70. ValidationUtil.valDtoContainsKey(inputDto, "salesmanId");
  71. ValidationUtil.valDtoContainsKey(inputDto, "datetime");
  72. ValidationUtil.valDtoContainsKey(inputDto, "userLoginId");
  73. ValidationUtil.valDtoContainsKey(inputDto, "tenantLoginId");
  74. ValidationUtil.valDtoContainsKey(inputDto, "roleLoginId");
  75.  
  76. Long salesmanId = inputDto.getLong("salesmanId");
  77. Long userLoginId = inputDto.getLong("userLoginId");
  78. Long tenantLoginId = inputDto.getLong("tenantLoginId");
  79. Long roleLoginId = inputDto.getLong("roleLoginId");
  80. String datetime = inputDto.getString("datetime");
  81. String yearMonthDate = datetime.substring(0,8);
  82.  
  83. Dto outputDto = new Dto();
  84. List<Object[]> result = null;
  85.  
  86. QueryBuilder builder = new QueryBuilder();
  87. builder.add("WITH data_piutang_jatuh_tempo AS (")
  88. .add(" SELECT A.partner_id,A.tenant_id,COALESCE(SUM(A.amount-A.payment_amount),0) as amount")
  89. .add(" FROM vw_fi_os_all_invoice_ar A")
  90. .add(" INNER JOIN vw_mapping_salesman_customer B ON A.tenant_id =B.tenant_id")
  91. .add(" AND A.partner_id = B.salesman_id")
  92. .add(" WHERE A.tenant_id = :tenantId AND B.salesman_id = :salesmanId")
  93. .add(" AND A.due_date <= :yearMonthDate")
  94. .add(" GROUP BY A.partner_id,A.tenant_id")
  95. .add(" ),data_piutang_belum_jatuh_tempo AS (")
  96. .add(" SELECT A.partner_id,A.tenant_id,COALESCE(SUM(A.amount-A.payment_amount),0) as amount")
  97. .add(" FROM vw_fi_os_all_invoice_ar A")
  98. .add(" INNER JOIN vw_mapping_salesman_customer B ON A.tenant_id =B.tenant_id")
  99. .add(" AND A.partner_id = B.salesman_id")
  100. .add(" WHERE A.tenant_id = :tenantId")
  101. .add(" AND B.salesman_id = :salesmanId")
  102. .add(" AND A.due_date > :yearMonthDate")
  103. .add(" GROUP BY A.partner_id,A.tenant_id")
  104. .add(" ) SELECT A.partner_id,f_get_partner_code(A.partner_id) AS partner_code,")
  105. .add(" f_get_partner_name(A.partner_id) AS partner_name,")
  106. .add(" COALESCE(SUM(A.amount+B.amount),0) as seluruh_saldo,")
  107. .add(" COALESCE(SUM(A.amount),0) AS jatuh_tempo, COALESCE(SUM(B.amount),0) AS belum_jatuh_tempo")
  108. .add(" FROM data_piutang_jatuh_tempo A")
  109. .add(" INNER JOIN data_piutang_belum_jatuh_tempo B ON A.partner_id = B.partner_id")
  110. .add(" AND A.tenant_id = B.tenant_id")
  111. .add(" WHERE A.tenant_id = :tenantId")
  112. .add(" GROUP BY A.partner_id");
  113.  
  114. log.info("Query BF {} --> {} " , this.getClass(), builder.toString());
  115.  
  116. Query query = orderDao.createNativeQuery(builder.toString());
  117. query.setParameter("salesmanId",salesmanId);
  118. query.setParameter("tenantId",tenantLoginId);
  119. query.setParameter("yearMonthDate",yearMonthDate);
  120.  
  121. result = query.getResultList();
  122.  
  123. // jumlah key list = jumlah kolom
  124. outputDto = new Dto();
  125. outputDto.putList("customerWithSaldoPiutangList",DtoUtil.createDtoListFromArray(result,
  126. "customerId", "customerCode", "customerName",
  127. "totalSaldoPiutang", "totalSaldoPiutangJatuhTempo", "totalSaldoPiutangBelumJatuhTempo"));
  128.  
  129. log.debug("Output BF {} -. {} ", this.getClass(), outputDto);
  130.  
  131. return outputDto;
  132. }
  133.  
  134. }
Add Comment
Please, Sign In to add comment