Evra70

INI

May 17th, 2020
334
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.79 KB | None | 0 0
  1. /**
  2.  *
  3.  */
  4. package org.jleaf.erp.sls.bo.tasksales;
  5.  
  6. import java.text.SimpleDateFormat;
  7. import java.util.ArrayList;
  8. import java.util.Date;
  9. import java.util.List;
  10.  
  11. import javax.persistence.Query;
  12.  
  13. import org.jleaf.common.CommonExceptionConstants;
  14. import org.jleaf.common.entity.User;
  15. import org.jleaf.core.BusinessFunction;
  16. import org.jleaf.core.BusinessTransaction;
  17. import org.jleaf.core.CoreException;
  18. import org.jleaf.core.DefaultBusinessTransaction;
  19. import org.jleaf.core.Dto;
  20. import org.jleaf.core.GeneralConstants;
  21. import org.jleaf.core.annotation.ErrorList;
  22. import org.jleaf.core.annotation.Info;
  23. import org.jleaf.core.annotation.InfoIn;
  24. import org.jleaf.core.annotation.InfoOut;
  25. import org.jleaf.core.dao.QueryBuilder;
  26. import org.jleaf.erp.master.MasterExceptionConstants;
  27. import org.jleaf.erp.master.bo.partner.FindPartnerByIndex;
  28. import org.jleaf.erp.sls.SalesConstants;
  29. import org.jleaf.erp.sls.SalesExceptionConstants;
  30. import org.jleaf.erp.sls.bo.tasksales.utils.DecodedImageFile;
  31. import org.jleaf.erp.sls.dao.InvoiceBalanceVisitPlanDetailDao;
  32. import org.jleaf.erp.sls.dao.InvoiceExchangeDao;
  33. import org.jleaf.erp.sls.dao.InvoiceVisitPlanDao;
  34. import org.jleaf.erp.sls.dao.SalesmanVisitPlanDao;
  35. import org.jleaf.erp.sls.dao.SalesmanVisitRealizationDao;
  36. import org.jleaf.erp.sls.dao.UserPartnerDao;
  37. import org.jleaf.erp.sls.entity.InvoiceBalanceVisitPlanDetail;
  38. import org.jleaf.erp.sls.entity.InvoiceExchange;
  39. import org.jleaf.erp.sls.entity.InvoiceVisitPlan;
  40. import org.jleaf.erp.sls.entity.SalesmanVisitPlan;
  41. import org.jleaf.erp.sls.entity.SalesmanVisitRealization;
  42. import org.jleaf.erp.sls.entity.UserPartner;
  43. import org.jleaf.util.DateUtil;
  44. import org.jleaf.util.GsonUtil;
  45. import org.jleaf.util.ValidationUtil;
  46. import org.slf4j.Logger;
  47. import org.slf4j.LoggerFactory;
  48. import org.springframework.beans.factory.annotation.Autowired;
  49. import org.springframework.beans.factory.annotation.Qualifier;
  50. import org.springframework.core.env.Environment;
  51. import org.springframework.stereotype.Service;
  52.  
  53.  
  54. /**
  55.  *
  56.  * @author WTC, Jul 4, 2013
  57.  *
  58.  */
  59. //@formatter:off
  60. @Service
  61. @InfoIn(value = {
  62.         @Info(name = "userLoginId", description = "user Login Id", type = Long.class),
  63.         @Info(name = "roleLoginId", description = "role Login Id", type = Long.class),
  64.         @Info(name = "tenantLoginId", description = "tenant Login Id", type = Long.class),
  65.         @Info(name = "datetime", description = "datetime", type = String.class),
  66.         @Info(name = "apiKey", description = "apiKey", type = String.class),
  67.         @Info(name = "visitDate", description = "visit Date", type = String.class),
  68.         @Info(name = "userId", description = "user Id", type = Long.class),
  69.         @Info(name = "salesmanVisitPlanId", description = "salesman Visit Plan Id", type = Long.class),
  70.         @Info(name = "salesmanVisitRealizationId", description = "salesman Visit Realization Id", type = Long.class),
  71.         @Info(name = "dueDate", description = "due Date", type = String.class),
  72.         @Info(name = "extDocNo", description = "ext Doc No", type = String.class),
  73.         @Info(name = "extDocName", description = "ext Doc Name", type = String.class),
  74.         @Info(name = "remark", description = "remark", type = String.class),
  75.         @Info(name = "invoiceItem", description = "strategy", type = List.class),
  76. })
  77. @InfoOut(value = {
  78.         @Info(name = "invoiceExchange", description = "invoiceExchange", type = Object.class),
  79.        
  80. })
  81. @ErrorList(errorKeys = {
  82.         CommonExceptionConstants.TENANT_LOGIN_CANT_USED,
  83.         CommonExceptionConstants.OU_ID_NOT_FOUND,
  84.         CommonExceptionConstants.OU_NOT_LEGAL_ENTITY,
  85.         CommonExceptionConstants.OULEGAL_ID_NOT_FOUND,
  86.         MasterExceptionConstants.PARTNER_ID_NOT_FOUND,
  87.         MasterExceptionConstants.POLICY_PARTNER_AUTHORIZATION_FAILED,
  88. })
  89. //@formatter:on
  90. public class UpdateInvoiceVisitPlanForExchange extends DefaultBusinessTransaction implements BusinessTransaction {
  91.  
  92.     private static final Logger log = LoggerFactory.getLogger(UpdateInvoiceVisitPlanForExchange.class);
  93.    
  94.    
  95.     @Autowired
  96.     private UserPartnerDao userPartnerDao;
  97.    
  98.     @Autowired
  99.     private InvoiceBalanceVisitPlanDetailDao invoiceBalanceVisitPlanDetailDao;
  100.    
  101.     @Autowired
  102.     private InvoiceExchangeDao invoiceExchangeDao;
  103.    
  104.     @Autowired
  105.     private InvoiceVisitPlanDao invoiceVisitPlanDao;
  106.    
  107.     @Autowired
  108.     Environment env;
  109.    
  110.     @Autowired
  111.     @Qualifier("findSalesmanVisitPlanById")
  112.     private BusinessFunction findSalesmanVisitPlanById;
  113.    
  114.     @Autowired
  115.     @Qualifier("findAdminProcessVisitPlanByIndex")
  116.     private BusinessFunction findAdminProcessVisitPlanByIndex;
  117.    
  118.     @Autowired
  119.     @Qualifier("isInvoiceExchangeExistsByIndex")
  120.     private BusinessFunction isInvoiceExchangeExistsByIndex;
  121.    
  122.     @Autowired
  123.     @Qualifier("findPartnerById")
  124.     private BusinessFunction findPartnerById;
  125.    
  126.     @Autowired
  127.     @Qualifier("findInvoiceVisitPlanById")
  128.     private BusinessFunction findInvoiceVisitPlanById;
  129.    
  130.     @Override
  131.     public String getDescription() {
  132.         return "Update Invoice Visit Plan For Exchange";
  133.     }
  134.  
  135.     @SuppressWarnings("unchecked")
  136.     @Override
  137.     public Dto prepare(Dto inputDto, Dto originalDto) throws Exception {
  138. //      log.info("INPUT DTO prepare {} --> {}", inputDto);
  139.  
  140.         ValidationUtil.valDtoContainsKey(inputDto, "userLoginId");
  141.         ValidationUtil.valDtoContainsKey(inputDto, "tenantLoginId");
  142.         ValidationUtil.valDtoContainsKey(inputDto, "roleLoginId");
  143.         ValidationUtil.valDtoContainsKey(inputDto, "datetime");
  144.        
  145.         Long userLoginId = inputDto.getLong("userLoginId");
  146.         Long tenantLoginId = inputDto.getLong("tenantLoginId");
  147.         Long roleLoginId = inputDto.getLong("roleLoginId");
  148.         String datetime = inputDto.getString("datetime");
  149.        
  150.         List<Dto> invoiceItemList = inputDto.getList("invoiceItem");
  151.         Long salesmanVisitPlanId  = inputDto.getLong("salesmanVisitPlanId");
  152.         Long userId  = inputDto.getLong("userId");
  153.         Long salesmanVisitRealizationId  = inputDto.getLong("salesmanVisitRealizationId");
  154.         String visitDate = inputDto.getString("visitDate");
  155.         String extDocNo = inputDto.getString("extDocNo");
  156.         String extDocDate = inputDto.getString("extDocDate");
  157.         String dueDate = inputDto.getString("dueDate");
  158.         String remark = inputDto.getString("remark");
  159.        
  160.         Dto inputFindSalesmanVistPlanById = new Dto();
  161.         inputFindSalesmanVistPlanById.put("id", salesmanVisitPlanId);
  162.         Dto salesmanVisitPlanDto = findSalesmanVisitPlanById.execute(inputFindSalesmanVistPlanById);
  163.         Long customerId = salesmanVisitPlanDto.getLong("customerId");
  164.        
  165.         Dto inputFindCustomerByIdDto = new Dto();
  166.         inputFindCustomerByIdDto.put("id", customerId);
  167.        
  168.         Dto customerDto = findPartnerById.execute(inputFindCustomerByIdDto);
  169.         String customerCode = customerDto.getString("code");
  170.        
  171.         if (!GeneralConstants.YES.equals(customerDto.getString("active"))) {
  172.             throw new CoreException(SalesExceptionConstants.DATA_NOT_ACTIVE,customerCode);
  173.         }
  174.        
  175.         String docNo = SalesConstants.PREFIX_DOC_NO_INVOICE_EXCHANGE.concat(customerCode).concat("-").concat(DateUtil.dateTimeNow());
  176.        
  177.         Dto inputIsInvoiceExchangeExistsByIndex = new Dto();
  178.         inputIsInvoiceExchangeExistsByIndex.put("tenantId", tenantLoginId);
  179.         inputIsInvoiceExchangeExistsByIndex.put("docNo", docNo);
  180.         inputIsInvoiceExchangeExistsByIndex.put("docDate", visitDate);
  181.        
  182.         Dto outputIsInvoiceExchangeExistsByIndex = isInvoiceExchangeExistsByIndex.execute(inputIsInvoiceExchangeExistsByIndex);
  183.         log.info("OUTPUT DTO outputIsInvoiceExchangeExistsByIndex PREPARE {} --> {}", outputIsInvoiceExchangeExistsByIndex);
  184.         if (outputIsInvoiceExchangeExistsByIndex.getBoolean("exists")) {
  185.             throw new CoreException(SalesExceptionConstants.INVOICE_EXCHANGE_IS_EXISTS, DateUtil.convertToDate(DateUtil.dateTimeNow()));
  186.         }
  187.        
  188.         QueryBuilder builderUserPartner = new QueryBuilder();
  189.         builderUserPartner.add("SELECT A.partner_id ")
  190.                     .add(" FROM ").add(UserPartner.TABLE_NAME).add(" A ")
  191.                     .add(" INNER JOIN ").add(User.TABLE_NAME).add(" B ON A.user_id = B.user_id AND A.tenant_id =B.tenant_id")
  192.                     .add(" WHERE B.user_id = :userId AND B.tenant_id = :tenantId");
  193.                
  194.                 Query qUserPartner = userPartnerDao.createNativeQuery(builderUserPartner.toString());
  195.                
  196.                 qUserPartner.setParameter("tenantId", tenantLoginId);
  197.                 qUserPartner.setParameter("userId", userId);
  198.                
  199.                 Object userPartner = qUserPartner.getSingleResult();
  200.                 Long employeeId = Long.valueOf(userPartner.toString());
  201.  
  202.         Dto inputFindAdminProcessVisitPlanByIndex = new Dto();
  203.         inputFindAdminProcessVisitPlanByIndex.put("tenantId", tenantLoginId);
  204.         inputFindAdminProcessVisitPlanByIndex.put("employeeId", employeeId);
  205.         inputFindAdminProcessVisitPlanByIndex.put("startDate", visitDate);
  206.        
  207.         Dto adminProcessVisitPlan = findAdminProcessVisitPlanByIndex.execute(inputFindAdminProcessVisitPlanByIndex);
  208.         if(!adminProcessVisitPlan.getString("statusVisit").equals(SalesConstants.IN_PROGRESS_TRANSACTION)) {
  209.             throw new CoreException(SalesExceptionConstants.INVOICE_EXCHANGE_IS_EXISTS);
  210.         }
  211.         Long adminProcessVisitPlanId = adminProcessVisitPlan.getLong("id");
  212.         Long registerId = adminProcessVisitPlan.getLong("registerId");
  213.        
  214.        
  215.         Dto invoiceExchangeDto = new Dto();
  216.         invoiceExchangeDto.put("tenantId", tenantLoginId);
  217.         invoiceExchangeDto.put("adminProcessVisitPlanId", adminProcessVisitPlanId);
  218.         invoiceExchangeDto.put("registerId", registerId);
  219.         invoiceExchangeDto.put("customerId", customerId);
  220.         invoiceExchangeDto.put("employeeId", employeeId);
  221.         invoiceExchangeDto.put("salesmanVisitPlanId", salesmanVisitPlanId);
  222.         invoiceExchangeDto.put("salesmanVisitRealizationId", salesmanVisitRealizationId);
  223.         invoiceExchangeDto.put("docNo", docNo);
  224.         invoiceExchangeDto.put("docDate", visitDate);
  225.         invoiceExchangeDto.put("currCode", SalesConstants.IDR);
  226.         invoiceExchangeDto.put("extDocNo", extDocNo);
  227.         invoiceExchangeDto.put("extDocDate", extDocDate);
  228.         invoiceExchangeDto.put("dueDate", dueDate);
  229.         invoiceExchangeDto.put("remark", remark);
  230.         invoiceExchangeDto.put("statusDoc", SalesConstants.RELEASED_TRANSACTION);
  231.         this.prepareInsertAudit(invoiceExchangeDto, userLoginId, datetime);
  232.         this.prepareUpdateAudit(invoiceExchangeDto, userLoginId, datetime);
  233.        
  234.         inputDto.put("invoiceExchangeDto", invoiceExchangeDto);
  235.         List<Dto> inputInvoiceVisitPlanList = new ArrayList<Dto>();
  236.         List<Dto> inputBalanceVisitPlanDetailList = new ArrayList<Dto>();
  237.        
  238.         for(Dto item : invoiceItemList) {
  239.             Dto inputInvoiceVisitPlan = new Dto();
  240.             inputInvoiceVisitPlan.put("id", item.get("invoiceVisitPlanId"));
  241.             Dto invoiceVisitPlan = findInvoiceVisitPlanById.execute(inputInvoiceVisitPlan);
  242.            
  243.             if(invoiceVisitPlan.getString("status").equals(SalesConstants.EXCHANGE_INVOICE)) {
  244.                 throw new CoreException(SalesExceptionConstants.INVOICE_EXCHANGE_IS_EXCHANGED,docNo);
  245.             }
  246.            
  247.             invoiceVisitPlan.put("status", SalesConstants.EXCHANGE_INVOICE);
  248.             this.prepareUpdateAudit(invoiceVisitPlan, userLoginId, datetime);
  249.             inputInvoiceVisitPlanList.add(invoiceVisitPlan);
  250.            
  251.             Dto invoiceBalanceVisitPlanDetail = new Dto();
  252.             invoiceBalanceVisitPlanDetail.put("tenantId", tenantLoginId);
  253.             invoiceBalanceVisitPlanDetail.put("adminProcessVisitPlanId", adminProcessVisitPlanId);
  254.             invoiceBalanceVisitPlanDetail.put("registerId", registerId);
  255.             invoiceBalanceVisitPlanDetail.put("salesmanVisitPlanId", salesmanVisitPlanId);
  256.             invoiceBalanceVisitPlanDetail.put("salesmanVisitRealizationId", salesmanVisitRealizationId);
  257.             invoiceBalanceVisitPlanDetail.put("customerId", customerId);
  258.             invoiceBalanceVisitPlanDetail.put("employeeId", employeeId);
  259.             invoiceBalanceVisitPlanDetail.put("refId", GeneralConstants.NULL_REF_VALUE_LONG);
  260.             invoiceBalanceVisitPlanDetail.put("refInvoiceId", invoiceVisitPlan.getLong("id"));
  261.             invoiceBalanceVisitPlanDetail.put("invoiceExtId", invoiceVisitPlan.getLong("invoiceExtId"));
  262.             invoiceBalanceVisitPlanDetail.put("docNo", invoiceExchangeDto.getString("docNo"));
  263.             invoiceBalanceVisitPlanDetail.put("docDate", invoiceExchangeDto.getString("docDate"));
  264.             invoiceBalanceVisitPlanDetail.put("invoiceDocNo", invoiceVisitPlan.getString("docNo"));
  265.             invoiceBalanceVisitPlanDetail.put("invoiceDocDate", invoiceVisitPlan.getString("docDate"));
  266.             invoiceBalanceVisitPlanDetail.put("flgInvoice", SalesConstants.EXCHANGE_INVOICE);
  267.             this.prepareInsertAudit(invoiceBalanceVisitPlanDetail, userId, datetime);
  268.             this.prepareUpdateAudit(invoiceBalanceVisitPlanDetail, userId, datetime);
  269.             inputBalanceVisitPlanDetailList.add(invoiceBalanceVisitPlanDetail);
  270.            
  271.         }
  272.        
  273.         inputDto.put("inputInvoiceVisitPlanList", inputInvoiceVisitPlanList);
  274.         inputDto.put("inputBalanceVisitPlanDetailList", inputBalanceVisitPlanDetailList);
  275.        
  276.         return null;
  277.     }
  278.  
  279.     @SuppressWarnings("unchecked")
  280.     @Override
  281.     public Dto process(Dto inputDto, Dto originalDto) throws Exception {
  282. //      log.info("INPUT DTO proses {} --> {}", inputDto);
  283.        
  284.         Dto outputDto = new Dto();
  285.  
  286.         Dto invoiceExchangeDto = inputDto.getDto("invoiceExchangeDto");
  287.         InvoiceExchange invoiceExchange = GsonUtil.fromDto(invoiceExchangeDto, InvoiceExchange.class);
  288.         invoiceExchangeDao.persist(invoiceExchange);
  289.         Long refId = invoiceExchange.getId();
  290.        
  291.         List<Dto> inputInvoiceVisitPlanList = inputDto.getList("inputInvoiceVisitPlanList");
  292.         for(Dto itemDto : inputInvoiceVisitPlanList) {
  293.             InvoiceVisitPlan invoiceVisitPlan = GsonUtil.fromDto(itemDto, InvoiceVisitPlan.class);
  294.             invoiceVisitPlanDao.merge(invoiceVisitPlan.getId(), invoiceVisitPlan);
  295.         }
  296.        
  297.         List<Dto> inputBalanceVisitPlanDetailList = inputDto.getList("inputBalanceVisitPlanDetailList");
  298.         for(Dto itemDto : inputBalanceVisitPlanDetailList) {
  299.             itemDto.put("refId", refId);
  300.             InvoiceBalanceVisitPlanDetail invoiceBalanceVisitPlanDetail = GsonUtil.fromDto(itemDto, InvoiceBalanceVisitPlanDetail.class);
  301.             invoiceBalanceVisitPlanDetailDao.persist(invoiceBalanceVisitPlanDetail);
  302.         }
  303.        
  304.                
  305.         outputDto = new Dto(invoiceExchange);
  306.         return outputDto;
  307.     }
  308. }
Add Comment
Please, Sign In to add comment