Evra70

Untitled

Apr 30th, 2020
504
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.30 KB | None | 0 0
  1. package org.jleaf.erp.sls.bo.salesman;
  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.bo.partner.FindPartnerByIndex;
  18. import org.jleaf.erp.master.dao.PartnerDao;
  19. import org.jleaf.erp.master.entity.Partner;
  20. import org.jleaf.erp.master.entity.PartnerAddress;
  21. import org.jleaf.erp.master.entity.PartnerCp;
  22. import org.jleaf.erp.master.entity.PartnerType;
  23. import org.jleaf.erp.sls.SalesConstants;
  24. import org.jleaf.erp.sls.dao.SalesmanVisitPlanDao;
  25. import org.jleaf.erp.sls.entity.Order;
  26. import org.jleaf.erp.sls.entity.PolicyCustomerGroupBrand;
  27. import org.jleaf.erp.sls.entity.SalesmanDate;
  28. import org.jleaf.erp.sls.entity.SalesmanVisitPlan;
  29. import org.jleaf.erp.sls.entity.So;
  30. import org.jleaf.erp.sls.entity.UserPartner;
  31. import org.jleaf.util.DateUtil;
  32. import org.jleaf.util.DtoUtil;
  33. import org.jleaf.util.ValidationUtil;
  34. import org.slf4j.Logger;
  35. import org.slf4j.LoggerFactory;
  36. import org.springframework.beans.factory.annotation.Autowired;
  37. import org.springframework.stereotype.Service;
  38.  
  39. /**
  40.  *
  41.  * @author Ephraim Jehudah, April 09, 2020
  42.  *
  43.  **/
  44.  
  45. //@formatter:off
  46. @Service
  47. @InfoIn(value = {
  48.     @Info(name = "userLoginId", description = "user Login Id", type = Long.class),
  49.     @Info(name = "tenantLoginId", description = "tenant Login Id", type = Long.class),
  50.     @Info(name = "roleLoginId", description = "roleLoginId", type = Long.class),
  51.     @Info(name = "datetime", description = "datetime", type = String.class),
  52.     @Info(name = "apiKey", description = "apiKey", type = String.class),
  53.     @Info(name = "salesmanId", description = "salesman Id", type = Long.class),
  54.     @Info(name = "date", description = "date", type = String.class),
  55. })
  56. @InfoOut(value = {
  57.     @Info(name = "salesmanVisitSummary", description = "salesmanVisitSummary {targetCall, realCall, callLeft, daysLeft, omzetRealization}", type = Object.class)
  58. })
  59. //@formatter:on
  60. public class GetTodaySalesmanVisitSummaryBySalesman extends AbstractBusinessFunction implements BusinessFunction {
  61.     private static final Logger log = LoggerFactory.getLogger(GetTodaySalesmanVisitSummaryBySalesman.class);
  62.    
  63.     @Autowired
  64.     PartnerDao partnerDao;
  65.  
  66.     @Autowired
  67.     SalesmanVisitPlanDao salesmanVisitPlanDao;
  68.  
  69.     @Override
  70.     public String getDescription() {
  71.         return "Get Today Salesman Visit Summary By Salesman";
  72.     }
  73.  
  74.     @SuppressWarnings("unchecked")
  75.     @Override
  76.     public Dto execute(Dto inputDto) throws Exception {
  77.         log.info("Input YANG MASUK BF {} -. {} ", inputDto);
  78.  
  79.         ValidationUtil.valDtoContainsKey(inputDto, "userLoginId");
  80.         ValidationUtil.valDtoContainsKey(inputDto, "tenantLoginId");
  81.         ValidationUtil.valDtoContainsKey(inputDto, "roleLoginId");
  82.         ValidationUtil.valDtoContainsKey(inputDto, "datetime");
  83.         ValidationUtil.valDtoContainsKey(inputDto, "salesmanId");
  84.         ValidationUtil.valDtoContainsKey(inputDto, "date");
  85.  
  86.         Long userLoginId = inputDto.getLong("userLoginId");
  87.         Long tenantLoginId = inputDto.getLong("tenantLoginId");
  88.         Long roleLoginId = inputDto.getLong("roleLoginId");
  89.         String datetime = inputDto.getString("datetime");
  90.         String date = inputDto.getString("date").substring(0,8);
  91.         String yearMonthDate = date.substring(0,6);
  92.         String yearMonth = date.substring(0,6).concat("%");
  93.         Long salesmanId = inputDto.getLong("salesmanId");
  94.        
  95.         Dto outputDto = new Dto();
  96.         Object resultObject = null;
  97.         Dto outputSummary = new Dto();
  98.        
  99.         Long realCall = new Long(0);
  100.         Long targetCall = new Long(0);
  101.         Long callLeft = new Long(0);
  102.         Long daysLeft = new Long(0);
  103.         Double omzetRealization = new Double(0);
  104.        
  105.       //realCall
  106.       QueryBuilder realCallBuilder = new QueryBuilder();
  107.       realCallBuilder.add("SELECT COALESCE(COUNT(1), 0) AS real_call")
  108.       .add(" FROM ").add(SalesmanVisitPlan.TABLE_NAME)
  109.       .add(" WHERE salesman_id = :salesmanId AND active = 'Y'")
  110.       .add(" AND status_visit = 'Y' AND visit_date LIKE :yearMonth");    
  111.       log.info("Query realCall BF {} --> {} " , this.getClass(), realCallBuilder.toString());
  112.    
  113.       Query realCallQuery = salesmanVisitPlanDao.createNativeQuery(realCallBuilder.toString());
  114.       realCallQuery.setParameter("salesmanId",salesmanId);
  115.       realCallQuery.setParameter("yearMonth",yearMonth);
  116.      
  117.       resultObject = realCallQuery.getSingleResult();
  118.       if(resultObject != null) {
  119.          realCall = Long.valueOf(resultObject.toString());
  120.       }
  121.         outputSummary.put("realCall", realCall);
  122.          
  123.      
  124.       //targetCall
  125.       QueryBuilder targetCallBuilder = new QueryBuilder();
  126.       targetCallBuilder.add("SELECT COALESCE(COUNT(1), 0) AS target_call")
  127.       .add(" FROM ").add(SalesmanVisitPlan.TABLE_NAME)
  128.       .add(" WHERE salesman_id = :salesmanId AND active = 'Y'")
  129.       .add(" AND status_visit <> 'C' AND visit_date LIKE :yearMonth");
  130.       log.info("Query BF targetCallBuilder {} --> {} " , this.getClass(), targetCallBuilder.toString());
  131.  
  132.       Query targetCallQuery = salesmanVisitPlanDao.createNativeQuery(targetCallBuilder.toString());
  133.       targetCallQuery.setParameter("salesmanId",salesmanId);
  134.       targetCallQuery.setParameter("yearMonth",yearMonth);
  135.      
  136.       resultObject = targetCallQuery.getSingleResult();
  137.       if(resultObject != null) {
  138.           targetCall = Long.valueOf(resultObject.toString());
  139.       }
  140.       outputSummary.put("targetCall", targetCall);
  141.      
  142.       //callLeft
  143.       QueryBuilder callLeftBuilder = new QueryBuilder();
  144.       callLeftBuilder.add("SELECT COALESCE(COUNT(1), 0) AS call_left")
  145.       .add(" FROM ").add(SalesmanVisitPlan.TABLE_NAME)
  146.       .add(" WHERE salesman_id = :salesmanId AND active = 'Y'")
  147.       .add(" AND status_visit <> 'C' AND status_visit <> 'Y' AND visit_date LIKE :yearMonth")
  148.       .add(" AND visit_date >= :visitDate");
  149.       log.info("Query BF callLeftBuilder {} --> {} " , this.getClass(), callLeftBuilder.toString());
  150.  
  151.       Query callLeftQuery = salesmanVisitPlanDao.createNativeQuery(callLeftBuilder.toString());
  152.       callLeftQuery.setParameter("salesmanId",salesmanId);
  153.       callLeftQuery.setParameter("yearMonth",yearMonth);
  154.       callLeftQuery.setParameter("visitDate",date);
  155.      
  156.       resultObject = targetCallQuery.getSingleResult();
  157.       if(resultObject != null) {
  158.           callLeft = Long.valueOf(resultObject.toString());
  159.       }
  160.       outputSummary.put("callLeft", callLeft);
  161.      
  162.       //daysLeft  
  163.       if(date != "") {
  164.       String dateEnd =DateUtil.getEndOfMonth(yearMonthDate);
  165.       daysLeft = Long.valueOf(dateEnd.substring(6)) - Long.valueOf(yearMonthDate);
  166.       }
  167.       outputSummary.put("daysLeft", daysLeft);
  168.  
  169.       //omzetRealization
  170.       QueryBuilder omzetRealizationBuilder = new QueryBuilder();
  171.       omzetRealizationBuilder.add("SELECT COALESCE(SUM(B.gross_sell_price), 0) AS omzetRealization")
  172.       .add(" FROM ").add(So.TABLE_NAME).add(" A ")
  173.       .add(" INNER JOIN sl_so_item B ON A.so_id = B.so_id")
  174.       .add(" WHERE A.salesman_id =:salesmanId AND A.tenant_id =:tenantId")
  175.       .add(" AND A.doc_date LIKE :yearMonth");
  176.       log.info("Query BF omzetRealizationBuilder {} --> {} " , this.getClass(), omzetRealizationBuilder.toString());
  177.  
  178.       Query omzetRealizationQuery = salesmanVisitPlanDao.createNativeQuery(omzetRealizationBuilder.toString());
  179.       omzetRealizationQuery.setParameter("salesmanId",salesmanId);
  180.       omzetRealizationQuery.setParameter("tenantId",tenantLoginId);
  181.       omzetRealizationQuery.setParameter("yearMonth",yearMonth);
  182.      
  183.       resultObject = targetCallQuery.getSingleResult();
  184.       if(resultObject != null) {
  185.           omzetRealization = Double.valueOf(resultObject.toString());
  186.       }
  187.       outputSummary.put("omzetRealization", omzetRealization);
  188.  
  189.        
  190.         //all result
  191.         outputDto.put("salesmanVisitSummary", outputSummary);
  192.         log.debug("Output BF {} -. {} ", this.getClass(), outputDto);
  193.  
  194.         return outputDto;
  195.     }
  196.  
  197. }
Advertisement
Add Comment
Please, Sign In to add comment