Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.jleaf.ukmappsbo.bo.journal;
- import java.security.SecureRandom;
- import java.util.ArrayList;
- import java.util.List;
- import javax.persistence.Query;
- import org.jleaf.core.BusinessFunction;
- import org.jleaf.core.BusinessTransaction;
- import org.jleaf.core.CoreException;
- import org.jleaf.core.DefaultBusinessTransaction;
- import org.jleaf.core.Dto;
- import org.jleaf.core.GeneralConstants;
- import org.jleaf.core.annotation.Info;
- import org.jleaf.core.annotation.InfoIn;
- import org.jleaf.core.annotation.InfoOut;
- import org.jleaf.core.dao.QueryBuilder;
- import org.jleaf.erp.master.bo.partner.IsPartnerExistsByIndex;
- import org.jleaf.ukmappsbo.UkmConstants;
- import org.jleaf.ukmappsbo.UkmExceptionConstants;
- import org.jleaf.ukmappsbo.dao.CashbankBalanceDao;
- import org.jleaf.ukmappsbo.dao.JournalTrxDao;
- import org.jleaf.ukmappsbo.dao.JournalTrxItemDao;
- import org.jleaf.ukmappsbo.entity.CashbankBalance;
- import org.jleaf.ukmappsbo.entity.JournalTrx;
- import org.jleaf.ukmappsbo.entity.JournalTrxItem;
- import org.jleaf.util.DtoUtil;
- import org.jleaf.util.GsonUtil;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Qualifier;
- import org.springframework.stereotype.Service;
- import ch.qos.logback.core.CoreConstants;
- /**
- * @author Ephraim 5 juni 2020
- */
- @Service
- @InfoIn(value = { @Info(name = "userLoginId", description = "user Login Id", type = Long.class),
- @Info(name = "roleLoginId", description = "roleLoginId", type = Long.class),
- @Info(name = "tenantLoginId", description = "tenantLoginId", type = Long.class),
- @Info(name = "datetime", description = "datetime", type = String.class),
- @Info(name = "docNo", description = "doc No", type = String.class),
- @Info(name = "docDate", description = "doc Date", type = String.class),
- @Info(name = "ouBuId", description = "ouBu Id", type = Long.class),
- @Info(name = "partnerId", description = "partner Id", type = Long.class),
- @Info(name = "partnerCode", description = "partner Code", type = String.class),
- @Info(name = "partnerName", description = "partner Name", type = String.class),
- @Info(name = "cashbankId", description = "cashbank Id", type = Long.class),
- @Info(name = "cashbankCode", description = "cashbank Code", type = String.class),
- @Info(name = "cashbankName", description = "cashbank Name", type = String.class),
- @Info(name = "remark", description = "remark", type = String.class),
- @Info(name = "amount", description = "amount", type = Double.class),
- @Info(name = "arDocNo", description = "ar Doc No", type = String.class),
- @Info(name = "arDocDate", description = "ar Doc Date", type = String.class),
- @Info(name = "currCode", description = "curr Code", type = String.class),
- @Info(name = "arAmount", description = "ar Amount", type = Double.class),
- @Info(name = "activityId", description = "activity Id", type = Long.class),
- @Info(name = "activityCode", description = "activity Code", type = String.class),
- @Info(name = "activityName", description = "activity Name", type = String.class),
- @Info(name = "flgPayment", description = "flg Payment", type = String.class),
- })
- @InfoOut(value = { @Info(name = "summaryCashbankIn", description = "summary Cashbank In", type = Object.class), })
- public class AddCashBankIn extends DefaultBusinessTransaction implements BusinessTransaction {
- Logger log = LoggerFactory.getLogger(getClass());
- @Autowired
- JournalTrxDao journalTrxDao;
- @Autowired
- JournalTrxItemDao journalTrxItemDao;
- @Autowired
- CashbankBalanceDao cashbankBalanceDao;
- @Autowired
- @Qualifier("findCashBankById")
- private BusinessFunction findCashBankById;
- @Autowired
- @Qualifier("findPartnerById")
- private BusinessFunction findPartnerById;
- @Autowired
- @Qualifier("findActivityById")
- private BusinessFunction findActivityById;
- @Autowired
- @Qualifier("isPartnerExistsByIndex")
- private BusinessFunction isPartnerExistsByIndex;
- @Autowired
- @Qualifier("isCashBankExistsByIndex")
- private BusinessFunction isCashbankExistsByIndex;
- @Autowired
- @Qualifier("isActivityExistsByIndex")
- private BusinessFunction isActivityExistsByIndex;
- @Autowired
- private IsJournalTrxExistsByIndex isJournalTrxExistsByIndex;
- private static volatile SecureRandom numberGenerator = null;
- private static final long MSB = 0x8000000000000000L;
- @Override
- public String getDescription() {
- return "Add Product";
- }
- @Override
- public Dto prepare(Dto dto, Dto originalDto) throws Exception {
- log.info("============Input{}===============", dto);
- Long userLoginId = dto.getLong("userLoginId");
- Long roleLoginId = dto.getLong("roleLoginId");
- Long tenantLoginId = dto.getLong("tenantLoginId");
- String datetime = dto.getString("datetime");
- String flgPayment = dto.getString("flgPayment");
- String docNo = dto.getString("docNo");
- String docDate = dto.getString("docDate");
- Long ouBuId = dto.getLong("ouBuId");
- Long partnerId = dto.getLong("partnerId");
- String partnerCode = dto.getString("partnerCode");
- String partnerName = dto.getString("partnerName");
- Long cashbankId = dto.getLong("cashbankId");
- String cashbankCode = dto.getString("cashbankCode");
- String cashbankName = dto.getString("cashbankName");
- String remark = dto.getString("remark");
- Double amount = dto.getDouble("amount");
- String arDocNo = dto.getString("arDocNo");
- String arDocDate = dto.getString("arDocDate");
- String currCode = dto.getString("currCode");
- Double arAmount = dto.getDouble("arAmount");
- Long activityId = dto.getLong("activityId");
- String activityCode = dto.getString("activityCode");
- String activityName = dto.getString("activityName");
- Dto inputIsPartnerExistsByIndex = new Dto();
- inputIsPartnerExistsByIndex.put("tenantId", tenantLoginId);
- inputIsPartnerExistsByIndex.put("code", partnerCode);
- Dto outputIsPartnerExistsByIndex = isPartnerExistsByIndex.execute(inputIsPartnerExistsByIndex);
- log.info("=========outputIsPartnerExistsByIndex{}==================", outputIsPartnerExistsByIndex);
- if (!outputIsPartnerExistsByIndex.getBoolean("exists")) {
- throw new CoreException(UkmExceptionConstants.PARTNER_NOT_EXISTS, partnerCode, partnerName);
- }
- Dto inputIsCashBankExistsByIndex = new Dto();
- inputIsCashBankExistsByIndex.put("tenantId", tenantLoginId);
- inputIsCashBankExistsByIndex.put("code", cashbankCode);
- Dto outputIsCashBankExistsByIndex = isCashbankExistsByIndex.execute(inputIsCashBankExistsByIndex);
- log.info("=========outputIsCashBankExistsByIndex{}==================", outputIsCashBankExistsByIndex);
- if (!outputIsCashBankExistsByIndex.getBoolean("exists") && cashbankId != -99) {
- throw new CoreException(UkmExceptionConstants.CASHBANK_NOT_EXISTS, cashbankCode, cashbankName);
- }
- Dto inputIsActivityExistsByIndex = new Dto();
- inputIsActivityExistsByIndex.put("tenantId", tenantLoginId);
- inputIsActivityExistsByIndex.put("code", activityCode);
- Dto outputIsActivityExistsByIndex = isActivityExistsByIndex.execute(inputIsActivityExistsByIndex);
- log.info("=========outputIsActivityExistsByIndex{}==================", outputIsActivityExistsByIndex);
- if (!outputIsActivityExistsByIndex.getBoolean("exists") && activityId != -99) {
- throw new CoreException(UkmExceptionConstants.ACTIVITY_NOT_EXISTS, activityCode, activityName);
- }
- Dto inputFindCashbankByIdDebit = new Dto();
- inputFindCashbankByIdDebit.put("id", cashbankId);
- Dto outputFindCashbankByIdDebit = findCashBankById.execute(inputFindCashbankByIdDebit);
- Long coaIdDebit = outputFindCashbankByIdDebit.getLong("coaId");
- String cashbankCurrCode = outputFindCashbankByIdDebit.getString("currencyCode");
- Dto journalTrxDto = new Dto();
- journalTrxDto.put("tenantId", tenantLoginId);
- journalTrxDto.put("journalType", UkmConstants.TYPE_CASHBANK_IN);
- journalTrxDto.put("docTypeId", UkmConstants.DOC_TYPE_CASH_IN);
- journalTrxDto.put("docId", UkmConstants.EMPTY_ID);
- journalTrxDto.put("docNo", docNo);
- journalTrxDto.put("docDate", docDate);
- journalTrxDto.put("ouBuId", ouBuId);
- journalTrxDto.put("ouSubBuId", UkmConstants.EMPTY_ID);
- journalTrxDto.put("ouBranchId", UkmConstants.EMPTY_ID);
- journalTrxDto.put("partnerId", partnerId);
- journalTrxDto.put("cashbankId", cashbankId);
- journalTrxDto.put("warehouseId", UkmConstants.EMPTY_ID);
- journalTrxDto.put("extDocNo", CoreConstants.EMPTY_STRING);
- journalTrxDto.put("extDocDate", CoreConstants.EMPTY_STRING);
- journalTrxDto.put("refDocTypeId", UkmConstants.EMPTY_ID);
- journalTrxDto.put("refId", UkmConstants.EMPTY_ID);
- journalTrxDto.put("refDocNo", CoreConstants.EMPTY_STRING);
- journalTrxDto.put("refDocDate", CoreConstants.EMPTY_STRING);
- journalTrxDto.put("dueDate", CoreConstants.EMPTY_STRING);
- journalTrxDto.put("currCode", currCode);
- journalTrxDto.put("remark", remark);
- journalTrxDto.put("statusDoc", UkmConstants.DRAFT);
- journalTrxDto.put("workflowStatus", CoreConstants.EMPTY_STRING);
- journalTrxDto.put("flgFix", UkmConstants.NO);
- journalTrxDto.put("flgValidate", UkmConstants.YES);
- this.prepareInsertAudit(journalTrxDto, userLoginId, datetime);
- this.prepareUpdateAudit(journalTrxDto, userLoginId, datetime);
- Long refDocTypeId = GeneralConstants.NULL_REF_VALUE_LONG;
- Long refId = GeneralConstants.NULL_REF_VALUE_LONG;
- Dto journalTrxItemDebit = new Dto();
- journalTrxItemDebit.put("tenantId", tenantLoginId);
- journalTrxItemDebit.put("journalTrxId", UkmConstants.EMPTY_ID);
- journalTrxItemDebit.put("lineNo", 1L);//
- journalTrxItemDebit.put("partnerId", partnerId);
- journalTrxItemDebit.put("productId", UkmConstants.EMPTY_ID);
- journalTrxItemDebit.put("cashbankId", cashbankId);
- journalTrxItemDebit.put("ouRcId", UkmConstants.EMPTY_ID);
- journalTrxItemDebit.put("segmenId", UkmConstants.EMPTY_ID);
- journalTrxItemDebit.put("signJournal", UkmConstants.SIGN_JOURNAL_DEBIT);
- journalTrxItemDebit.put("flgSourceCoa", UkmConstants.FLG_SOURCE_COA_CASHBANK);
- journalTrxItemDebit.put("activityGlId", UkmConstants.EMPTY_ID);
- journalTrxItemDebit.put("coaId", coaIdDebit);
- journalTrxItemDebit.put("glCurrCode", currCode);
- if (flgPayment.equals(UkmConstants.YES)) {
- Dto param = new Dto();
- param.put("docNo", arDocNo);
- param.put("docDate", arDocDate);
- param.put("tenantId", tenantLoginId);
- param.put("docTypeId", UkmConstants.DOC_TYPE_ID_POS);
- param.put("ouSubBuId", UkmConstants.EMPTY_ID);
- param.put("ouBuId", ouBuId);
- param.put("ouBranchId", UkmConstants.EMPTY_ID);
- Dto checkRefDto = isJournalTrxExistsByIndex.execute(param);
- log.info("==checkRefDto{}==",checkRefDto);
- if(checkRefDto.getBoolean("exists")) {
- refDocTypeId = checkRefDto.getDto("journalTrxDto").getLong("docTypeId");
- refId = checkRefDto.getDto("journalTrxDto").getLong("id");
- }else {
- throw new Exception("Dokumen Piutang Tidak Ditemukan");
- }
- journalTrxItemDebit.put("refDocTypeId", refDocTypeId);
- journalTrxItemDebit.put("refId", refId);
- } else {
- journalTrxItemDebit.put("refDocTypeId", UkmConstants.EMPTY_ID);
- journalTrxItemDebit.put("refId", UkmConstants.EMPTY_ID);
- }
- journalTrxItemDebit.put("currCode", currCode);
- journalTrxItemDebit.put("qty", UkmConstants.ZERO_QTY);
- journalTrxItemDebit.put("uomId", UkmConstants.EMPTY_ID);
- journalTrxItemDebit.put("amount", amount);
- journalTrxItemDebit.put("journalDate", docDate);
- journalTrxItemDebit.put("typeRate", UkmConstants.TYPE_RATE_COMMERCIAL);
- journalTrxItemDebit.put("numeratorRate", 1);
- journalTrxItemDebit.put("denominatorRate", 1);
- journalTrxItemDebit.put("glCurrCode", currCode);
- journalTrxItemDebit.put("glAmount", amount);
- journalTrxItemDebit.put("journalDesc", UkmConstants.DESC_CASHBANK_IN);
- journalTrxItemDebit.put("remark", remark);
- journalTrxItemDebit.put("flgChange", UkmConstants.NO);
- journalTrxItemDebit.put("ouBranchId", UkmConstants.EMPTY_ID);
- journalTrxItemDebit.put("ouSubBuId", UkmConstants.EMPTY_ID);
- journalTrxItemDebit.put("price", UkmConstants.ZERO_QTY);
- journalTrxItemDebit.put("discountPrice", UkmConstants.ZERO_QTY);
- this.prepareInsertAudit(journalTrxItemDebit, userLoginId, datetime);
- this.prepareUpdateAudit(journalTrxItemDebit, userLoginId, datetime);
- Dto journalTrxItemCredit = new Dto();
- journalTrxItemCredit.put("tenantId", tenantLoginId);
- journalTrxItemCredit.put("journalTrxId", UkmConstants.EMPTY_ID);
- journalTrxItemCredit.put("lineNo", 2L);
- journalTrxItemCredit.put("partnerId", partnerId);
- journalTrxItemCredit.put("productId", UkmConstants.EMPTY_ID);
- journalTrxItemCredit.put("cashbankId", UkmConstants.EMPTY_ID);
- journalTrxItemCredit.put("ouRcId", UkmConstants.EMPTY_ID);
- journalTrxItemCredit.put("segmenId", UkmConstants.EMPTY_ID);
- journalTrxItemCredit.put("signJournal", UkmConstants.SIGN_JOURNAL_CREDIT);
- journalTrxItemCredit.put("currCode", currCode);
- journalTrxItemCredit.put("qty", UkmConstants.ZERO_QTY);
- journalTrxItemCredit.put("uomId", UkmConstants.EMPTY_ID);
- journalTrxItemCredit.put("journalDate", docDate);
- journalTrxItemCredit.put("typeRate", UkmConstants.TYPE_RATE_COMMERCIAL);
- journalTrxItemCredit.put("ouBranchId", UkmConstants.EMPTY_ID);
- journalTrxItemCredit.put("ouSubBuId", UkmConstants.EMPTY_ID);
- journalTrxItemCredit.put("price", UkmConstants.ZERO_QTY);
- journalTrxItemCredit.put("discountPrice", UkmConstants.ZERO_QTY);
- journalTrxItemCredit.put("numeratorRate", 1);
- journalTrxItemCredit.put("denominatorRate", 1);
- journalTrxItemCredit.put("glCurrCode", currCode);
- journalTrxItemCredit.put("remark", remark);
- journalTrxItemCredit.put("flgChange", UkmConstants.NO);
- journalTrxItemCredit.put("amount", arAmount);
- journalTrxItemCredit.put("glAmount", arAmount);
- this.prepareInsertAudit(journalTrxItemCredit, userLoginId, datetime);
- this.prepareUpdateAudit(journalTrxItemCredit, userLoginId, datetime);
- if (flgPayment.equals(UkmConstants.YES)) {
- if(amount > arAmount){
- throw new Exception("Uang Yang Dibayarkan Tidak Boleh Lebih Besar Dari Jumlah Piutang.");
- }
- journalTrxItemCredit.put("flgSourceCoa", UkmConstants.FLG_SOURCE_COA_SYSTEM);
- journalTrxItemCredit.put("activityGlId", UkmConstants.EMPTY_ID);
- journalTrxItemCredit.put("coaId", getCoaIdByPartner(partnerId, tenantLoginId));
- journalTrxItemCredit.put("journalDesc", UkmConstants.DESC_AR);
- journalTrxItemCredit.put("refDocTypeId", refDocTypeId);
- journalTrxItemCredit.put("refId", refId);
- } else {
- Dto inputFindActivityByIdCredit = new Dto();
- inputFindActivityByIdCredit.put("id", activityId);
- Dto outputFindActivityByIdCredit = findActivityById.execute(inputFindActivityByIdCredit);
- Long coaIdActivity = outputFindActivityByIdCredit.getLong("coaId");
- journalTrxItemCredit.put("flgSourceCoa", UkmConstants.FLG_SOURCE_COA_ACTIVITY);
- journalTrxItemCredit.put("activityGlId", activityId);
- journalTrxItemCredit.put("coaId", coaIdActivity);
- journalTrxItemCredit.put("journalDesc", UkmConstants.DESC_AR_OTHER_REVENUE);
- journalTrxItemCredit.put("refDocTypeId", UkmConstants.EMPTY_ID);
- journalTrxItemCredit.put("refId", UkmConstants.EMPTY_ID);
- }
- Dto summaryCashbankIn = new Dto();
- summaryCashbankIn.put("partnerId", partnerId);
- summaryCashbankIn.put("partnerCode", partnerCode);
- summaryCashbankIn.put("partnerName", partnerName);
- summaryCashbankIn.put("cashbankId", cashbankId);
- summaryCashbankIn.put("cashbankCode", cashbankCode);
- summaryCashbankIn.put("cashbankName", cashbankName);
- summaryCashbankIn.put("amount", amount);
- dto.put("journalTrxDto", journalTrxDto);
- dto.put("journalTrxItemDebitDto", journalTrxItemDebit);
- dto.put("journalTrxItemCreditDto", journalTrxItemCredit);
- dto.put("summaryCashbankInDto", summaryCashbankIn);
- return null;
- }
- @Override
- public Dto process(Dto dto, Dto originalDto) throws Exception {
- Dto journalTrxDto = dto.getDto("journalTrxDto");
- Dto journalTrxItemDebitDto = dto.getDto("journalTrxItemDebitDto");
- Dto journalTrxItemCreditDto = dto.getDto("journalTrxItemCreditDto");
- Dto summaryCashbankInDto = dto.getDto("summaryCashbankInDto");
- JournalTrx journalTrx = GsonUtil.fromDto(journalTrxDto, JournalTrx.class);
- journalTrxDao.persist(journalTrx);
- Long journalTrxId = journalTrx.getId();
- journalTrxItemDebitDto.put("journalTrxId", journalTrxId);
- JournalTrxItem journalTrxItemDebit = GsonUtil.fromDto(journalTrxItemDebitDto, JournalTrxItem.class);
- journalTrxItemDao.persist(journalTrxItemDebit);
- journalTrxItemCreditDto.put("journalTrxId", journalTrxId);
- JournalTrxItem journalTrxItemCredit = GsonUtil.fromDto(journalTrxItemCreditDto, JournalTrxItem.class);
- journalTrxItemDao.persist(journalTrxItemCredit);
- initCashbankIn(dto);
- summaryCashbankInDto.put("docNo", journalTrx.getDocNo());
- summaryCashbankInDto.put("createDatetime", journalTrx.getCreateDateTime());
- return new Dto().put("summaryCashbankIn", summaryCashbankInDto);
- }
- private Long getCoaIdByPartner(Long partnerId, Long tenantId) {
- QueryBuilder builder = new QueryBuilder();
- builder.add("SELECT C.coa_id ").add(" FROM m_partner A")
- .add(" INNER JOIN m_partner_type B ON A.partner_id = B.partner_id AND B.group_partner='C'")
- .add(" INNER JOIN m_type_partner C ON B.type_partner_id = C.type_partner_id")
- .add(" WHERE A.partner_id = :partnerId AND A.tenant_id=:tenantId");
- Query q = journalTrxDao.createNativeQuery(builder.toString());
- q.setParameter("tenantId", tenantId);
- q.setParameter("partnerId", partnerId);
- Long coaId = UkmConstants.EMPTY_ID;
- try {
- Object typeParter = q.getSingleResult();
- coaId = Long.valueOf(typeParter.toString());
- } catch (Exception e) {
- return coaId;
- }
- return coaId;
- }
- private Dto checkCashbankBalance(Long tenantId, Long ouId,Long cashbankId,String docDate) {
- Dto output = new Dto();
- List<Object[]> rBalance = new ArrayList<Object[]>();
- QueryBuilder builder = new QueryBuilder();
- builder.add("SELECT")
- .add(" cashbank_balance_id,tenant_id,ou_id,cashbank_id,cash_bank_date,")
- .add(" rec_type,curr_code,amount,version,create_datetime,create_user_id,")
- .add(" update_datetime,update_user_id")
- .add(" FROM ").add(CashbankBalance.TABLE_NAME)
- .add(" WHERE tenant_id = :tenantId AND ou_id =:ouId")
- .add(" AND cash_bank_date = :date AND rec_type = :recType")
- .add(" AND cashbank_id = :cashbankId");
- Query q = journalTrxDao.createNativeQuery(builder.toString());
- q.setParameter("tenantId", tenantId);
- q.setParameter("ouId", ouId);
- q.setParameter("date", docDate);
- q.setParameter("recType", UkmConstants.REC_TYPE_DEBIT);
- q.setParameter("cashbankId", cashbankId);
- rBalance = q.getResultList();
- List<Dto> cashbankBalance = new ArrayList<Dto>();
- boolean existing = false;
- if(0 < rBalance.size()) {
- existing=true;
- cashbankBalance = DtoUtil.createDtoListFromArray(rBalance,
- "id","tenantId","ouId","cashbankId","cashBankDate",
- "recType","currCode","amount","version","createDatetime",
- "createUserId","updateDatetime","updateUserId");
- output.put("cashbankBalanceDto", cashbankBalance.get(0));
- }
- output.put("exists", existing);
- return output;
- }
- private void initCashbankIn(Dto dto){
- QueryBuilder builder = new QueryBuilder();
- builder.add(" SELECT cb_calculate_cashbank_balance( ");
- builder.add(" :tenantId, ");
- builder.add(" :sessionId, ");
- builder.add(" :userId, ");
- builder.add(" :ouId, ");
- builder.add(" :cashbankId, ");
- builder.add(" :flgCashbank, ");
- builder.add(" :amount, ");
- builder.add(" :datetime) ");
- Query query = journalTrxDao.createNativeQuery(builder.toString());
- query.setParameter("tenantId", dto.getLong("tenantLoginId"));
- query.setParameter("sessionId", unique());
- query.setParameter("userId", dto.getLong("userLoginId"));
- query.setParameter("ouId", dto.getLong("ouBuId"));
- query.setParameter("cashbankId", dto.getLong("cashbankId"));
- query.setParameter("flgCashbank", UkmConstants.REC_TYPE_DEBIT);
- query.setParameter("amount", dto.getDouble("amount"));
- query.setParameter("datetime", dto.getString("datetime"));
- query.executeUpdate();
- }
- private static String unique() {
- SecureRandom ng = numberGenerator;
- if (ng == null) {
- numberGenerator = ng = new SecureRandom();
- }
- return Long.toHexString(MSB | ng.nextLong()) + Long.toHexString(MSB | ng.nextLong());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment