1DanielLee9

AddCashbank

Oct 21st, 2020 (edited)
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.67 KB | None | 0 0
  1. package org.jleaf.ukmappsbo.bo.customer;
  2.  
  3. import java.math.BigInteger;
  4. import java.util.List;
  5. import javax.persistence.Query;
  6. import org.jleaf.common.bo.combo.ValComboValueByCode;
  7. import org.jleaf.common.bo.role.FindRoleByName;
  8. import org.jleaf.common.dao.RoleTaskDao;
  9. import org.jleaf.core.BusinessTransaction;
  10. import org.jleaf.core.CoreException;
  11. import org.jleaf.core.DefaultBusinessTransaction;
  12. import org.jleaf.core.Dto;
  13. import org.jleaf.core.GeneralConstants;
  14. import org.jleaf.core.dao.QueryBuilder;
  15. import org.jleaf.erp.master.bo.cashbank.IsCashBankExistsByIndex;
  16. import org.jleaf.erp.master.bo.cashbank.IsCashBankOuExistsById;
  17. import org.jleaf.erp.master.bo.partner.IsPartnerExistsByIndex;
  18. import org.jleaf.erp.master.dao.CashBankDao;
  19. import org.jleaf.erp.master.dao.CashBankOuDao;
  20. import org.jleaf.erp.master.dao.CoaDao;
  21. import org.jleaf.erp.master.dao.GroupCoaDao;
  22. import org.jleaf.erp.master.dao.PartnerAddressDao;
  23. import org.jleaf.erp.master.dao.PartnerBankDao;
  24. import org.jleaf.erp.master.dao.PartnerCpDao;
  25. import org.jleaf.erp.master.dao.PartnerDao;
  26. import org.jleaf.erp.master.dao.PartnerNpwpDao;
  27. import org.jleaf.erp.master.dao.PartnerTypeDao;
  28. import org.jleaf.erp.master.dao.TypePartnerDao;
  29. import org.jleaf.erp.master.entity.CashBank;
  30. import org.jleaf.erp.master.entity.CashBankOu;
  31. import org.jleaf.erp.master.entity.Coa;
  32. import org.jleaf.erp.master.entity.GroupCoa;
  33. import org.jleaf.erp.master.entity.Partner;
  34. import org.jleaf.erp.master.entity.PartnerAddress;
  35. import org.jleaf.erp.master.entity.PartnerCp;
  36. import org.jleaf.erp.master.entity.PartnerType;
  37. import org.jleaf.ukmappsbo.UkmConstants;
  38. import org.jleaf.ukmappsbo.bo.tenant.IsTenantExistsByIndex;
  39. import org.jleaf.ukmappsbo.bo.user.IsUserExistByEmail;
  40. import org.jleaf.ukmappsbo.dao.UserPartnerDao;
  41. import org.jleaf.util.DtoUtil;
  42. import org.jleaf.util.GsonUtil;
  43. import org.jleaf.util.ValidationUtil;
  44. import org.slf4j.Logger;
  45. import org.slf4j.LoggerFactory;
  46. import org.springframework.beans.factory.annotation.Autowired;
  47. import org.springframework.stereotype.Service;
  48.  
  49. /**
  50.  * @author Fikri 20 Mei 2020
  51.  */
  52.  
  53. @Service
  54. public class AddCashbank extends DefaultBusinessTransaction implements BusinessTransaction {
  55.     Logger log = LoggerFactory.getLogger(getClass());
  56.  
  57.     @Autowired
  58.     CashBankDao cashBankDao;
  59.  
  60.     @Autowired
  61.     CashBankOuDao cashBankOuDao;
  62.    
  63.     @Autowired
  64.     CoaDao coaDao;
  65.    
  66.     @Autowired
  67.     GroupCoaDao groupCoaDao;
  68.    
  69.     @Autowired
  70.     IsCashBankExistsByIndex isCashBankExistsByIndex;
  71.    
  72.  
  73.     @Override
  74.     public String getDescription() {
  75.         return "Add Cashbank";
  76.     }
  77.  
  78.     @Override
  79.     public Dto prepare(Dto dto, Dto originalDto) throws Exception {
  80.         log.info("===Input Dto{}===",dto);
  81.        
  82.         dto.put("empty", GeneralConstants.EMPTY_VALUE);
  83.         dto.put("yes", GeneralConstants.YES);
  84.         dto.put("no", GeneralConstants.NO);
  85.         dto.put("nullLong", GeneralConstants.NULL_REF_VALUE_LONG);
  86.         dto.put("mainAcc", mainAcc(dto));
  87.        
  88.  
  89.         dto.put("cashbankDto", setCashbankDto(dto));
  90.         dto.put("cashbankOuDto", setCashbankOuDto(dto));
  91.         dto.put("coaDto", setCoaDto(dto));
  92.        
  93.         return null;
  94.     }
  95.  
  96.     @Override
  97.     public Dto process(Dto dto, Dto originalDto) throws Exception {
  98.    
  99.         Dto coaDto = dto.getDto("coaDto");
  100.         Coa coa = GsonUtil.fromDto(coaDto, Coa.class);
  101.         this.coaDao.persist(coa);
  102.         Long coaId = coa.getId();
  103.  
  104.         Dto cashbankDto = dto.getDto("cashbankDto");
  105.         CashBank cashbank = GsonUtil.fromDto(cashbankDto, CashBank.class);
  106.         cashbank.setCoaId(coaId);
  107.         this.cashBankDao.persist(cashbank);
  108.         Long cashbankId = cashbank.getId();
  109.  
  110.         Dto cashbankOuDto = dto.getDto("cashbankOuDto");
  111.         cashbankOuDto.put("cashBankId", cashbankId);
  112.         CashBankOu cashbankOu = GsonUtil.fromDto(cashbankOuDto, CashBankOu.class);
  113.         this.cashBankOuDao.persist(cashbankOu);
  114.        
  115.         Dto output = new Dto();
  116.         output.put("cashbankCode", cashbank.getCode());
  117.         output.put("cashbankName", cashbank.getName());
  118.  
  119.         return output;
  120.     }
  121.    
  122.  
  123.     // Generate DTO berdasarkan Entity
  124.    
  125.     private Dto setCoaDto(Dto dto) {
  126.         String codeName = dto.getString("cashbankCodeName").toUpperCase().trim();
  127.         Dto data = new Dto();
  128.         Long tenantId = dto.getLong("tenantLoginId");
  129.         String flgCb = dto.getString("flgCashbank"); // --> C = Cash , B = Bank
  130.         String subAcc = countSubAcc(dto);
  131.        
  132.         data.put("tenantId", dto.getLong("tenantLoginId"));
  133.         data.put("mainAcc",dto.getString("mainAcc"));
  134.         data.put("subAcc",subAcc);
  135.         data.put("groupCoaId",getGroupCoaId(tenantId,flgCb));
  136.         data.put("description",codeName.concat(" ").concat(dto.getString("accountNo")));
  137.         data.put("sign",UkmConstants.SIGN_COA_D);
  138.         this.prepareUpdateAudit(data, dto.getLong("userLoginId"), dto.getString("datetime"));
  139.         this.prepareInsertAudit(data, dto.getLong("userLoginId"), dto.getString("datetime"));
  140.         return data;
  141.     }
  142.  
  143.     private Dto setCashbankDto(Dto dto) throws Exception {
  144.         String codeName =dto.getString("cashbankCodeName").toUpperCase().trim();
  145.         Dto param = new Dto();
  146.         param.put("tenantId", dto.getLong("tenantLoginId"));
  147.         param.put("code", codeName);
  148.        
  149.         Dto checkCashbank = isCashBankExistsByIndex.execute(param);
  150.        
  151.         if(checkCashbank.getBoolean("exists")) {
  152.             throw new Exception("Cashbank '"+codeName+"' Already Exists");
  153.         }
  154.        
  155.         Dto data = new Dto();
  156.         data.put("tenantId", dto.getLong("tenantLoginId"));
  157.         data.put("code", codeName);
  158.         data.put("name", codeName);
  159.         data.put("flagCashBank", dto.getString("flgCashbank"));
  160.         data.put("bankCode", dto.getString("bankCode"));
  161.         data.put("accountNo", dto.getString("accountNo"));
  162.         data.put("accountName1", dto.getString("accountName1"));
  163.         data.put("accountName2", dto.getString("accountName2"));
  164.         data.put("address1", dto.getString("address1"));
  165.         data.put("address2", dto.getString("address2"));
  166.         data.put("address3", dto.getString("address3"));
  167.         data.put("coaId", dto.getLong("nullLong"));
  168.         data.put("currencyCode", dto.getString("currCode"));
  169.         data.put("creditLimit", UkmConstants.ZERO_QTY);
  170.         this.prepareUpdateAudit(data, dto.getLong("userLoginId"), dto.getString("datetime"));
  171.         this.prepareInsertAudit(data, dto.getLong("userLoginId"), dto.getString("datetime"));
  172.         return data;
  173.     }
  174.  
  175.     private Dto setCashbankOuDto(Dto dto) {
  176.         Dto data = new Dto();
  177.         data.put("ouId", dto.getLong("ouId"));
  178.         data.put("cashBankId", dto.getLong("nullLong"));
  179.         this.prepareUpdateAudit(data, dto.getLong("userLoginId"), dto.getString("datetime"));
  180.         this.prepareInsertAudit(data, dto.getLong("userLoginId"), dto.getString("datetime"));
  181.         return data;
  182.     }
  183.    
  184.     private Long getGroupCoaId(Long tenantId,String flgCb){
  185.        
  186.         String code = flgCb.equals(UkmConstants.FLG_CASHBANK_C) ? "Kas" :"Bank";
  187.        
  188.         Long id = -99l;
  189.         QueryBuilder countryAndProvinceQuery = new QueryBuilder();
  190.         countryAndProvinceQuery.add("SELECT group_coa_id ")
  191.                             .add("FROM m_group_coa ")
  192.                             .add("WHERE tenant_id = :tenantId AND group_coa_code = :code");
  193.         Query query = cashBankOuDao.createNativeQuery(countryAndProvinceQuery.toString());
  194.         query.setParameter("tenantId", tenantId);
  195.         query.setParameter("code", code);
  196.        
  197.         List<BigInteger> resultList = query.getResultList();
  198.         if (resultList.size() > 0) {
  199.             id = Long.valueOf(resultList.get(0).toString());
  200.         }
  201.         return id;
  202.     }
  203.    
  204.     private String countSubAcc(Dto dto){       
  205.         QueryBuilder builder = new QueryBuilder();
  206.         builder.add(" SELECT CASE ");
  207.         builder.add("           WHEN COALESCE(MAX(CAST(sub_acc AS BIGINT)), 0) = 0 ");
  208.         builder.add("           THEN LPAD(CAST(COALESCE(MAX(CAST(sub_acc AS BIGINT)), 0) +10 AS CHARACTER VARYING), 3, '0') ");
  209.         builder.add("           WHEN COALESCE(MAX(CAST(sub_acc AS BIGINT)), 0) > 0 ");
  210.         builder.add("           THEN LPAD(CAST(COALESCE(MAX(CAST(sub_acc AS BIGINT)), 0) +1 AS CHARACTER VARYING), 3, '0') ");
  211.         builder.add("           END sub_acc ");
  212.         builder.add(" FROM m_coa ");
  213.         builder.add(" WHERE main_acc = :mainAcc ");
  214.         builder.add(" AND tenant_id = :tenantId ");
  215.        
  216.         Query query = coaDao.createNativeQuery(builder.toString());
  217.         query.setParameter("mainAcc", dto.getString("mainAcc"));
  218.         query.setParameter("tenantId", dto.getLong("tenantLoginId"));
  219.        
  220.         Object result = query.getSingleResult();
  221.         String data = result.toString();           
  222.        
  223.         return data;
  224.     }
  225.    
  226.     private String mainAcc(Dto dto){
  227.         String code = dto.getString("flgCashbank").equals(UkmConstants.FLG_CASHBANK_C) ? UkmConstants.MAIN_ACC_CASH : UkmConstants.MAIN_ACC_BANK;
  228.        
  229.         QueryBuilder builder = new QueryBuilder();
  230.         builder.add(" SELECT A.parameter_value ");
  231.         builder.add(" FROM t_system_config A ");
  232.         builder.add(" JOIN t_parameter B ON A.parameter_id = B.parameter_id");
  233.         builder.add(" WHERE A.tenant_id = :tenantId ");
  234.         builder.add(" AND B.parameter_code = :code ");
  235.        
  236.         Query query = coaDao.createNativeQuery(builder.toString());
  237.         query.setParameter("tenantId", GeneralConstants.NULL_REF_VALUE_LONG);
  238.         query.setParameter("code", code);
  239.        
  240.         String result = query.getSingleResult().toString();
  241.        
  242.         return result;
  243.     }
  244.    
  245.     /*
  246.      * Goal :
  247.      *  Main Acc diisi dng : 101
  248.         Sub Acc disi dng : cari sub acc terakhir ditambah 1 , misal : 01, 02, 03
  249.         Coa Desc : Nama Cash Bank + No Rek
  250.      */
  251. }
Advertisement
Add Comment
Please, Sign In to add comment