Advertisement
aadddrr

FindOverCreditLimitAmountForSoApproval

Dec 7th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 33.37 KB | None | 0 0
  1. package org.jleaf.erp.sls.bo.salesorder;
  2.  
  3. import javax.persistence.Query;
  4.  
  5. import org.jleaf.core.AbstractBusinessFunction;
  6. import org.jleaf.core.BusinessFunction;
  7. import org.jleaf.core.Dto;
  8. import org.jleaf.core.GeneralConstants;
  9. import org.jleaf.core.annotation.ErrorList;
  10. import org.jleaf.core.annotation.Info;
  11. import org.jleaf.core.annotation.InfoIn;
  12. import org.jleaf.core.annotation.InfoOut;
  13. import org.jleaf.core.dao.QueryBuilder;
  14. import org.jleaf.erp.inv.InventoryConstants;
  15. import org.jleaf.erp.inv.dao.DeliveryOrderReceiptDao;
  16. import org.jleaf.erp.inv.dao.InventoryDao;
  17. import org.jleaf.erp.inv.entity.BalanceDeliveryOrderItem;
  18. import org.jleaf.erp.inv.entity.DeliveryOrderReceipt;
  19. import org.jleaf.erp.inv.entity.DeliveryOrderReceiptItem;
  20. import org.jleaf.erp.inv.entity.Inventory;
  21. import org.jleaf.erp.inv.entity.InventoryItem;
  22. import org.jleaf.erp.master.entity.PartnerType;
  23. import org.jleaf.erp.master.entity.Tax;
  24. import org.jleaf.erp.sls.SalesConstants;
  25. import org.jleaf.erp.sls.SalesConstantsForXcom;
  26. import org.jleaf.erp.sls.dao.DeliveryOrderDao;
  27. import org.jleaf.erp.sls.dao.ManageSalesOrderItemDao;
  28. import org.jleaf.erp.sls.dao.SalesOrderBalanceInvoiceDao;
  29. import org.jleaf.erp.sls.dao.SalesOrderBalanceInvoiceTaxDao;
  30. import org.jleaf.erp.sls.dao.SalesOrderBalanceItemDao;
  31. import org.jleaf.erp.sls.dao.SalesOrderDao;
  32. import org.jleaf.erp.sls.dao.SalesOrderItemDao;
  33. import org.jleaf.erp.sls.entity.DeliveryOrder;
  34. import org.jleaf.erp.sls.entity.DeliveryOrderItem;
  35. import org.jleaf.erp.sls.entity.ManageSalesOrder;
  36. import org.jleaf.erp.sls.entity.ManageSalesOrderHeader;
  37. import org.jleaf.erp.sls.entity.ManageSalesOrderItem;
  38. import org.jleaf.erp.sls.entity.SalesOrder;
  39. import org.jleaf.erp.sls.entity.SalesOrderBalanceInvoice;
  40. import org.jleaf.erp.sls.entity.SalesOrderBalanceInvoiceTax;
  41. import org.jleaf.erp.sls.entity.SalesOrderBalanceItem;
  42. import org.jleaf.erp.sls.entity.SalesOrderItem;
  43. import org.jleaf.util.Calc;
  44. import org.jleaf.util.ValidationUtil;
  45. import org.springframework.beans.factory.annotation.Autowired;
  46. import org.springframework.stereotype.Service;
  47.  
  48. /**
  49.  *
  50.  * @author Adrian
  51.  * Apr 3, 2017
  52.  */
  53. /**
  54.  * Menambahkan perhitungan:
  55.  * - nilai AR saat ini
  56.  * - nilai outstanding AR
  57.  * - nilai SO yang belum di-DO
  58.  * - nilai SO yang sedang dibuat saat ini
  59.  * modified by Adrian
  60.  * Dec 6, 2017
  61.  */
  62.  
  63. //@formatter:off
  64. @Service
  65. @InfoIn(value = {
  66.         @Info(name = "tenantId", description = "tenant id", type = Long.class),
  67.         @Info(name = "ouId", description = "ou id", type = Long.class),
  68.         @Info(name = "partnerId", description = "partner id", type = Long.class),
  69.         @Info(name = "manageSoId", description = "manage so id", type = Long.class),
  70.         @Info(name = "manageSoDocTypeId", description = "manage so doc type id", type = Long.class)
  71. })
  72. @InfoOut(value = {
  73.         @Info(name = "overCreditLimitAmount", description = "over credit limit amount", type = Double.class) })
  74. @ErrorList(errorKeys = {
  75.  
  76. })
  77. //@formatter:on
  78. public class FindOverCreditLimitAmountForSoApproval extends AbstractBusinessFunction implements BusinessFunction {
  79.    
  80.     @Autowired
  81.     SalesOrderDao salesOrderDao;
  82.    
  83.     @Autowired
  84.     SalesOrderBalanceInvoiceDao salesOrderBalanceInvoiceDao;
  85.    
  86.     @Autowired
  87.     SalesOrderBalanceInvoiceTaxDao salesOrderBalanceInvoiceTaxDao;
  88.    
  89.     @Autowired
  90.     DeliveryOrderDao deliveryOrderDao;
  91.    
  92.     @Autowired
  93.     DeliveryOrderReceiptDao deliveryOrderReceiptDao;
  94.    
  95.     @Autowired
  96.     InventoryDao inventoryDao;
  97.    
  98.     @Autowired
  99.     SalesOrderBalanceItemDao salesOrderBalanceItemDao;
  100.    
  101.     @Autowired
  102.     SalesOrderItemDao salesOrderItemDao;
  103.  
  104.     @Autowired
  105.     ManageSalesOrderItemDao manageSalesOrderItemDao;
  106.  
  107.     public String getDescription() {
  108.         // write description of this business function here
  109.         return "find over credit limit amount";
  110.     }
  111.  
  112.     @SuppressWarnings("unchecked")
  113.     public Dto execute(Dto inputDto) throws Exception {
  114.         // validate inputDto have key in @InfoIn
  115.         ValidationUtil.valDtoContainsKey(inputDto, "tenantId");
  116.         ValidationUtil.valDtoContainsKey(inputDto, "ouId");
  117.         ValidationUtil.valDtoContainsKey(inputDto, "partnerId");
  118.         ValidationUtil.valDtoContainsKey(inputDto, "manageSoId");
  119.         ValidationUtil.valDtoContainsKey(inputDto, "manageSoDocTypeId");
  120.        
  121.         Long manageSoId = inputDto.getLong("manageSoId");
  122.         Long manageSoDocTypeId = inputDto.getLong("manageSoDocTypeId");
  123.  
  124.         // @formatter:off
  125.         // create native sql
  126.         // Mendapatkan limit customer
  127.         // dan mengurangkannya dengan nilai AR saat ini
  128.         QueryBuilder builder = new QueryBuilder();
  129.         builder.add(" WITH os_invoice AS ( ")
  130.                 .add(" SELECT COALESCE(SUM(A.amount - A.payment_amount), 0) AS os_amount FROM ")
  131.                 .add(SalesConstantsForXcom.INVOICE_AR_BALANCE_TABLE_NAME)
  132.                 .add(" A LEFT OUTER JOIN ")
  133.                 .add(SalesOrder.TABLE_NAME)
  134.                 .add(" B ON A.ref_doc_type_id = B.doc_type_id AND A.ref_id = B.so_id ")  
  135.                 .add(" WHERE A.tenant_id = :tenantId ")
  136.                 .add(" AND A.ou_id = :ouId ")
  137.                 .add(" AND A.partner_id = :partnerId ")
  138.                 .add(" AND A.due_date BETWEEN :startDate AND :endDate ")
  139.                 .add(" AND A.flg_payment = :NO )")
  140.                 .add(" SELECT (A.amount_limit - B.os_amount) FROM ")
  141.                 .add(PartnerType.TABLE_NAME)
  142.                 .add(" A, os_invoice B ")
  143.                 .add(" WHERE A.partner_id = :partnerId ")
  144.                 .add(" AND A.group_partner = :CUSTOMER ");
  145.         // @formatter:on
  146.        
  147.         // create native query
  148.         Query q = salesOrderDao.createNativeQuery(builder.toString());
  149.        
  150.         // set query parameter (if any)
  151.         q.setParameter("tenantId", inputDto.getLong("tenantId"));
  152.         q.setParameter("ouId", inputDto.getLong("ouId"));
  153.         q.setParameter("partnerId", inputDto.getLong("partnerId"));
  154.         q.setParameter("startDate", GeneralConstants.START_DATE);
  155.         q.setParameter("endDate", GeneralConstants.END_DATE);
  156.         q.setParameter("NO", GeneralConstants.NO);
  157.         q.setParameter("CUSTOMER", SalesConstantsForXcom.GROUP_PARTNER_CUSTOMER);
  158.        
  159.         Object amount = q.getSingleResult();
  160.        
  161.         // @formatter:off
  162.         // create native sql
  163.         // Mendapatkan nilai tax AR saat ini
  164.         QueryBuilder builderTax = new QueryBuilder();
  165.         builderTax.add(" SELECT COALESCE(SUM(A.gov_tax_amount - A.payment_amount), 0) AS os_amount FROM ")
  166.                 .add(SalesConstantsForXcom.INVOICE_TAX_AR_BALANCE_TABLE_NAME)
  167.                 .add(" A INNER JOIN ")
  168.                 .add(SalesConstantsForXcom.INVOICE_AR_BALANCE_TABLE_NAME)
  169.                 .add(" B ON A.invoice_ar_balance_id = B.invoice_ar_balance_id ")  
  170.                 .add(" WHERE A.tenant_id = :tenantId ")
  171.                 .add(" AND A.ou_id = :ouId ")
  172.                 .add(" AND A.partner_id = :partnerId ")
  173.                 .add(" AND A.due_date BETWEEN :startDate AND :endDate ")
  174.                 .add(" AND A.flg_payment = :NO ");
  175.         // @formatter:on
  176.        
  177.         // create native query
  178.         Query qTax = salesOrderDao.createNativeQuery(builderTax.toString());
  179.        
  180.         // set query parameter (if any)
  181.         qTax.setParameter("tenantId", inputDto.getLong("tenantId"));
  182.         qTax.setParameter("ouId", inputDto.getLong("ouId"));
  183.         qTax.setParameter("partnerId", inputDto.getLong("partnerId"));
  184.         qTax.setParameter("startDate", GeneralConstants.START_DATE);
  185.         qTax.setParameter("endDate", GeneralConstants.END_DATE);
  186.         qTax.setParameter("NO", GeneralConstants.NO);
  187.        
  188.         Object taxAmount = qTax.getSingleResult();
  189.        
  190.         // limit customer - nilai AR saat ini - nilai tax AR saat ini
  191.         Calc overCreditLimitAmount = new Calc(Double.valueOf(amount.toString())).subtract(Double.valueOf(taxAmount.toString()));
  192.  
  193.        
  194.         //Mendapatkan nilai outstanding AR (DO yang belum jadi invoice)
  195.         QueryBuilder builderOsAr = new QueryBuilder();
  196.         builderOsAr.add(" SELECT COALESCE(SUM( ")
  197.                     .add(" CASE WHEN A.ref_doc_type_id = :RETURN_NOTE_DOC_TYPE_ID THEN ")
  198.                         .add(" -1 * A.item_amount ")
  199.                     .add(" ELSE ")
  200.                         .add(" A.item_amount ")
  201.                     .add(" END ")
  202.                     .add(" ), 0) FROM ")
  203.                 .add(SalesOrderBalanceInvoice.TABLE_NAME)
  204.                 .add(" A ")
  205.                 .add(" WHERE A.tenant_id = :tenantId ")
  206.                 .add(" AND A.ou_id = :ouId ")
  207.                 .add(" AND A.partner_id = :partnerId ")
  208.                 .add(" AND A.flg_invoice IN (:NO, :IN_PROGRESS) ")
  209.                 .add(" AND A.invoice_id = :EMPTY_ID ");
  210.        
  211.         Query queryOsAr = salesOrderBalanceInvoiceDao.createNativeQuery(builderOsAr.toString());
  212.        
  213.         queryOsAr.setParameter("tenantId", inputDto.getLong("tenantId"));
  214.         queryOsAr.setParameter("ouId", inputDto.getLong("ouId"));
  215.         queryOsAr.setParameter("partnerId", inputDto.getLong("partnerId"));
  216.         queryOsAr.setParameter("NO", GeneralConstants.NO);
  217.         queryOsAr.setParameter("IN_PROGRESS", SalesConstants.IN_PROGRESS_TRANSACTION);
  218.         queryOsAr.setParameter("EMPTY_ID", GeneralConstants.NULL_REF_VALUE_LONG);
  219.         queryOsAr.setParameter("RETURN_NOTE_DOC_TYPE_ID", InventoryConstants.DOCUMENT_RETURN_NOTE);
  220.        
  221.         Object osArAmount = queryOsAr.getSingleResult();
  222.        
  223.         //over credit limit amount dikurangi dengan nilai outstanding AR
  224.         overCreditLimitAmount = overCreditLimitAmount.subtract(Double.valueOf(osArAmount.toString()));
  225.        
  226.        
  227.         //Mendapatkan nilai tax outstanding AR (DO yang belum jadi invoice)
  228.         QueryBuilder builderOsArTax = new QueryBuilder();
  229.         builderOsArTax.add(" SELECT COALESCE(SUM( ")
  230.                     .add(" CASE WHEN A.ref_doc_type_id = :RETURN_NOTE_DOC_TYPE_ID THEN ")
  231.                         .add(" -1 * A.tax_amount ")
  232.                     .add(" ELSE ")
  233.                         .add(" A.tax_amount ")
  234.                     .add(" END ")
  235.                 .add(" ), 0) FROM ")
  236.                 .add(SalesOrderBalanceInvoiceTax.TABLE_NAME)
  237.                 .add(" A ")
  238.                 .add(" WHERE A.tenant_id = :tenantId ")
  239.                 .add(" AND A.ou_id = :ouId ")
  240.                 .add(" AND A.partner_id = :partnerId ")
  241.                 .add(" AND A.flg_invoice IN (:NO, :IN_PROGRESS) ")
  242.                 .add(" AND A.invoice_id = :EMPTY_ID ");
  243.        
  244.         Query queryOsArTax = salesOrderBalanceInvoiceTaxDao.createNativeQuery(builderOsArTax.toString());
  245.        
  246.         queryOsArTax.setParameter("tenantId", inputDto.getLong("tenantId"));
  247.         queryOsArTax.setParameter("ouId", inputDto.getLong("ouId"));
  248.         queryOsArTax.setParameter("partnerId", inputDto.getLong("partnerId"));
  249.         queryOsArTax.setParameter("NO", GeneralConstants.NO);
  250.         queryOsArTax.setParameter("IN_PROGRESS", SalesConstants.IN_PROGRESS_TRANSACTION);
  251.         queryOsArTax.setParameter("EMPTY_ID", GeneralConstants.NULL_REF_VALUE_LONG);
  252.         queryOsArTax.setParameter("RETURN_NOTE_DOC_TYPE_ID", InventoryConstants.DOCUMENT_RETURN_NOTE);
  253.        
  254.         Object osArTaxAmount = queryOsArTax.getSingleResult();
  255.        
  256.         //over credit limit amount dikurangi dengan nilai tax outstanding AR
  257.         overCreditLimitAmount = overCreditLimitAmount.subtract(Double.valueOf(osArTaxAmount.toString()));
  258.        
  259.        
  260.         //Mendapatkan nilai outstanding AR (DO yang belum APPROVED)
  261.         QueryBuilder builderOsArNotApprovedDo = new QueryBuilder();
  262.         builderOsArNotApprovedDo.add(" SELECT COALESCE(SUM( ")
  263.                     .add(" f_get_amount_before_tax_and_disc( ")
  264.                         .add(" B.qty_dlv_so * C.gross_sell_price, ")
  265.                         .add(" B.qty_dlv_so * C.discount_amount, ")
  266.                         .add(" C.flg_tax_amount, ")
  267.                         .add(" C.tax_percentage, ")
  268.                         .add(" f_get_digit_decimal_doc_curr(:DO_DOC_TYPE_ID, C.curr_code), ")
  269.                         .add(" f_get_value_system_config_by_param_code(:tenantId, :ROUNDING_MODE_NON_TAX))), 0) ")
  270.                 .add(" FROM ")
  271.                 .add(DeliveryOrder.TABLE_NAME)
  272.                 .add(" A ")
  273.                 .add(" INNER JOIN ")
  274.                 .add(DeliveryOrderItem.TABLE_NAME)
  275.                 .add(" B ON A.do_id = B.do_id ")
  276.                 .add(" INNER JOIN ")
  277.                 .add(SalesOrderItem.TABLE_NAME)
  278.                 .add(" C ON B.ref_id = C.so_item_id ")
  279.                 .add(" INNER JOIN ")
  280.                 .add(SalesOrder.TABLE_NAME)
  281.                 .add(" D ON C.so_id = D.so_id ")
  282.                 .add(" WHERE A.tenant_id = :tenantId ")
  283.                 .add(" AND A.ou_id = :ouId ")
  284.                 .add(" AND D.partner_bill_to_id = :partnerId ")
  285.                 .add(" AND A.status_doc IN (:DRAFT, :IN_PROGRESS) ");
  286.        
  287.         Query queryOsArNotApprovedDo = deliveryOrderDao.createNativeQuery(builderOsArNotApprovedDo.toString());
  288.        
  289.         queryOsArNotApprovedDo.setParameter("tenantId", inputDto.getLong("tenantId"));
  290.         queryOsArNotApprovedDo.setParameter("ouId", inputDto.getLong("ouId"));
  291.         queryOsArNotApprovedDo.setParameter("partnerId", inputDto.getLong("partnerId"));
  292.         queryOsArNotApprovedDo.setParameter("DO_DOC_TYPE_ID", SalesConstants.DOCUMENT_DELIVERY_ORDER);
  293.         queryOsArNotApprovedDo.setParameter("ROUNDING_MODE_NON_TAX", "rounding.mode.non.tax");
  294.         queryOsArNotApprovedDo.setParameter("DRAFT", SalesConstants.DRAFT_TRANSACTION);
  295.         queryOsArNotApprovedDo.setParameter("IN_PROGRESS", SalesConstants.IN_PROGRESS_TRANSACTION);
  296.        
  297.         Object osArNotApprovedDoAmount = queryOsArNotApprovedDo.getSingleResult();
  298.        
  299.         //over credit limit amount dikurangi dengan nilai outstanding AR (DO yang belum APPROVED)
  300.         overCreditLimitAmount = overCreditLimitAmount.subtract(Double.valueOf(osArNotApprovedDoAmount.toString()));
  301.        
  302.        
  303.         //Mendapatkan nilai tax outstanding AR (DO yang belum APPROVED)
  304.         QueryBuilder builderOsArTaxNotApprovedDo = new QueryBuilder();
  305.         builderOsArTaxNotApprovedDo.add(" SELECT COALESCE(SUM( ")
  306.                 .add(" f_tax_rounding( ")
  307.                         .add(" A.tenant_id, ")
  308.                         .add(" f_get_amount_before_tax( ")
  309.                                 .add(" B.qty_dlv_so * (C.gross_sell_price - C.discount_amount), ")
  310.                                 .add(" C.flg_tax_amount, ")
  311.                                 .add(" C.tax_percentage, ")
  312.                                 .add(" f_get_digit_decimal_doc_curr(:DO_DOC_TYPE_ID, C.curr_code), ")
  313.                                 .add(" f_get_value_system_config_by_param_code(:tenantId, :ROUNDING_MODE_NON_TAX)), ")
  314.                         .add(" C.tax_percentage)), 0) ")
  315.                 .add(" FROM ")
  316.                 .add(DeliveryOrder.TABLE_NAME)
  317.                 .add(" A ")
  318.                 .add(" INNER JOIN ")
  319.                 .add(DeliveryOrderItem.TABLE_NAME)
  320.                 .add(" B ON A.do_id = B.do_id ")
  321.                 .add(" INNER JOIN ")
  322.                 .add(SalesOrderItem.TABLE_NAME)
  323.                 .add(" C ON B.ref_id = C.so_item_id ")
  324.                 .add(" INNER JOIN ")
  325.                 .add(Tax.TABLE_NAME)
  326.                 .add(" D ON C.tax_id = D.tax_id ")
  327.                 .add(" INNER JOIN ")
  328.                 .add(SalesOrder.TABLE_NAME)
  329.                 .add(" E ON C.so_id = E.so_id ")
  330.                 .add(" WHERE A.tenant_id = :tenantId ")
  331.                 .add(" AND A.ou_id = :ouId ")
  332.                 .add(" AND E.partner_bill_to_id = :partnerId ")
  333.                 .add(" AND A.status_doc IN (:DRAFT, :IN_PROGRESS) ");
  334.        
  335.         Query queryOsArTaxNotApprovedDo = deliveryOrderDao.createNativeQuery(builderOsArTaxNotApprovedDo.toString());
  336.        
  337.         queryOsArTaxNotApprovedDo.setParameter("tenantId", inputDto.getLong("tenantId"));
  338.         queryOsArTaxNotApprovedDo.setParameter("ouId", inputDto.getLong("ouId"));
  339.         queryOsArTaxNotApprovedDo.setParameter("partnerId", inputDto.getLong("partnerId"));
  340.         queryOsArTaxNotApprovedDo.setParameter("DO_DOC_TYPE_ID", SalesConstants.DOCUMENT_DELIVERY_ORDER);
  341.         queryOsArTaxNotApprovedDo.setParameter("ROUNDING_MODE_NON_TAX", "rounding.mode.non.tax");
  342.         queryOsArTaxNotApprovedDo.setParameter("DRAFT", SalesConstants.DRAFT_TRANSACTION);
  343.         queryOsArTaxNotApprovedDo.setParameter("IN_PROGRESS", SalesConstants.IN_PROGRESS_TRANSACTION);
  344.        
  345.         Object osArTaxNotApprovedDoAmount = queryOsArTaxNotApprovedDo.getSingleResult();
  346.        
  347.         //over credit limit amount dikurangi dengan nilai tax outstanding AR (DO yang belum APPROVED)
  348.         overCreditLimitAmount = overCreditLimitAmount.subtract(Double.valueOf(osArTaxNotApprovedDoAmount.toString()));
  349.        
  350.        
  351.         //Mendapatkan nilai outstanding AR (DO Receipt yang belum APPROVED)
  352.         QueryBuilder builderOsArNotApprovedDoReceipt = new QueryBuilder();
  353.         builderOsArNotApprovedDoReceipt.add(" SELECT COALESCE(SUM( ")
  354.                     .add(" -1 * f_get_amount_before_tax_and_disc( ")
  355.                             .add(" (B.qty_return * D.qty_so / D.qty_int) * D.gross_sell_price, ")
  356.                             .add(" (G.regular_disc_amount + G.promo_disc_amount) * (B.qty_return * D.qty_so / D.qty_int) / G.qty_dlv_so, ")
  357.                             .add(" D.flg_tax_amount, ")
  358.                             .add(" D.tax_percentage, ")
  359.                             .add(" f_get_digit_decimal_doc_curr(:DO_RECEIPT_DOC_TYPE_ID, D.curr_code), ")
  360.                             .add(" f_get_value_system_config_by_param_code(:tenantId, :ROUNDING_MODE_NON_TAX))), 0) ")
  361.                 .add(" FROM ")
  362.                 .add(DeliveryOrderReceipt.TABLE_NAME)
  363.                 .add(" A ")
  364.                 .add(" INNER JOIN ")
  365.                 .add(DeliveryOrderReceiptItem.TABLE_NAME)
  366.                 .add(" B ON A.do_receipt_id = B.do_receipt_id ")
  367.                 .add(" INNER JOIN ")
  368.                 .add(BalanceDeliveryOrderItem.TABLE_NAME)
  369.                 .add(" C ON B.ref_id = C.do_item_id ")
  370.                 .add(" INNER JOIN ")
  371.                 .add(SalesOrderItem.TABLE_NAME)
  372.                 .add(" D ON C.so_item_id = D.so_item_id ")
  373.                 .add(" INNER JOIN ")
  374.                 .add(SalesOrder.TABLE_NAME)
  375.                 .add(" E ON D.so_id = E.so_id ")
  376.                 .add(" INNER JOIN ")
  377.                 .add(DeliveryOrder.TABLE_NAME)
  378.                 .add(" F ON A.ref_id = F.do_id ")
  379.                 .add(" INNER JOIN ")
  380.                 .add(SalesOrderBalanceInvoice.TABLE_NAME)
  381.                 .add(" G ON G.ref_id = F.do_id AND G.ref_item_id = C.do_item_id ")
  382.                 .add(" WHERE A.tenant_id = :tenantId ")
  383.                 .add(" AND A.ou_id = :ouId ")
  384.                 .add(" AND E.partner_bill_to_id = :partnerId ")
  385.                 .add(" AND A.status_doc IN (:DRAFT, :IN_PROGRESS) ")
  386.                 .add(" AND B.qty_return > 0 ")
  387.                 .add(" AND G.do_receipt_item_id = :EMPTY_ID ");
  388.        
  389.         Query queryOsArNotApprovedDoReceipt = deliveryOrderReceiptDao.createNativeQuery(builderOsArNotApprovedDoReceipt.toString());
  390.        
  391.         queryOsArNotApprovedDoReceipt.setParameter("tenantId", inputDto.getLong("tenantId"));
  392.         queryOsArNotApprovedDoReceipt.setParameter("ouId", inputDto.getLong("ouId"));
  393.         queryOsArNotApprovedDoReceipt.setParameter("partnerId", inputDto.getLong("partnerId"));
  394.         queryOsArNotApprovedDoReceipt.setParameter("DO_RECEIPT_DOC_TYPE_ID", InventoryConstants.DOCUMENT_DELIVERY_ORDER_RECEIPT);
  395.         queryOsArNotApprovedDoReceipt.setParameter("ROUNDING_MODE_NON_TAX", "rounding.mode.non.tax");
  396.         queryOsArNotApprovedDoReceipt.setParameter("DRAFT", SalesConstants.DRAFT_TRANSACTION);
  397.         queryOsArNotApprovedDoReceipt.setParameter("IN_PROGRESS", SalesConstants.IN_PROGRESS_TRANSACTION);
  398.         queryOsArNotApprovedDoReceipt.setParameter("EMPTY_ID", GeneralConstants.NULL_REF_VALUE_LONG);
  399.        
  400.         Object osArNotApprovedDoReceiptAmount = queryOsArNotApprovedDoReceipt.getSingleResult();
  401.        
  402.         //over credit limit amount dikurangi dengan nilai outstanding AR (DO Receipt yang belum APPROVED)
  403.         overCreditLimitAmount = overCreditLimitAmount.subtract(Double.valueOf(osArNotApprovedDoReceiptAmount.toString()));
  404.        
  405.  
  406.         //Mendapatkan nilai tax outstanding AR (DO Receipt yang belum APPROVED)
  407.         QueryBuilder builderOsArTaxNotApprovedDoReceipt = new QueryBuilder();
  408.         builderOsArTaxNotApprovedDoReceipt.add(" SELECT COALESCE(SUM( ")
  409.                     .add(" -1 * f_tax_rounding( ")
  410.                             .add(" A.tenant_id, ")
  411.                             .add(" f_get_amount_before_tax( ")
  412.                                 .add(" (B.qty_return * D.qty_so / D.qty_int) * (D.gross_sell_price - D.discount_amount), ")
  413.                                 .add(" D.flg_tax_amount, ")
  414.                                 .add(" D.tax_percentage, ")
  415.                                 .add(" f_get_digit_decimal_doc_curr(:DO_RECEIPT_DOC_TYPE_ID, D.curr_code), ")
  416.                                 .add(" f_get_value_system_config_by_param_code(:tenantId, :ROUNDING_MODE_NON_TAX)), ")
  417.                             .add(" D.tax_percentage)), 0) ")
  418.                 .add(" FROM ")
  419.                 .add(DeliveryOrderReceipt.TABLE_NAME)
  420.                 .add(" A ")
  421.                 .add(" INNER JOIN ")
  422.                 .add(DeliveryOrderReceiptItem.TABLE_NAME)
  423.                 .add(" B ON A.do_receipt_id = B.do_receipt_id ")
  424.                 .add(" INNER JOIN ")
  425.                 .add(BalanceDeliveryOrderItem.TABLE_NAME)
  426.                 .add(" C ON B.ref_id = C.do_item_id ")
  427.                 .add(" INNER JOIN ")
  428.                 .add(SalesOrderItem.TABLE_NAME)
  429.                 .add(" D ON C.so_item_id = D.so_item_id ")
  430.                 .add(" INNER JOIN ")
  431.                 .add(Tax.TABLE_NAME)
  432.                 .add(" E ON D.tax_id = E.tax_id ")
  433.                 .add(" INNER JOIN ")
  434.                 .add(SalesOrder.TABLE_NAME)
  435.                 .add(" F ON  D.so_id = F.so_id ")
  436.                 .add(" WHERE A.tenant_id = :tenantId ")
  437.                 .add(" AND A.ou_id = :ouId ")
  438.                 .add(" AND F.partner_bill_to_id = :partnerId ")
  439.                 .add(" AND A.status_doc IN (:DRAFT, :IN_PROGRESS) ")
  440.                 .add(" AND B.qty_return > 0 ");
  441.        
  442.         Query queryOsArTaxNotApprovedDoReceipt = deliveryOrderReceiptDao.createNativeQuery(builderOsArTaxNotApprovedDoReceipt.toString());
  443.        
  444.         queryOsArTaxNotApprovedDoReceipt.setParameter("tenantId", inputDto.getLong("tenantId"));
  445.         queryOsArTaxNotApprovedDoReceipt.setParameter("ouId", inputDto.getLong("ouId"));
  446.         queryOsArTaxNotApprovedDoReceipt.setParameter("partnerId", inputDto.getLong("partnerId"));
  447.         queryOsArTaxNotApprovedDoReceipt.setParameter("DO_RECEIPT_DOC_TYPE_ID", InventoryConstants.DOCUMENT_DELIVERY_ORDER_RECEIPT);
  448.         queryOsArTaxNotApprovedDoReceipt.setParameter("ROUNDING_MODE_NON_TAX", "rounding.mode.non.tax");
  449.         queryOsArTaxNotApprovedDoReceipt.setParameter("DRAFT", SalesConstants.DRAFT_TRANSACTION);
  450.         queryOsArTaxNotApprovedDoReceipt.setParameter("IN_PROGRESS", SalesConstants.IN_PROGRESS_TRANSACTION);
  451.        
  452.         Object osArTaxNotApprovedDoReceiptAmount = queryOsArTaxNotApprovedDoReceipt.getSingleResult();
  453.        
  454.         //over credit limit amount dikurangi dengan nilai tax outstanding AR (DO Receipt yang belum APPROVED)
  455.         overCreditLimitAmount = overCreditLimitAmount.subtract(Double.valueOf(osArTaxNotApprovedDoReceiptAmount.toString()));
  456.  
  457.        
  458.         //Mendapatkan nilai outstanding AR (Return Note yang belum APPROVED)
  459.         QueryBuilder builderOsArNotApprovedReturnNote = new QueryBuilder();
  460.         builderOsArNotApprovedReturnNote.add(" SELECT COALESCE(SUM( ")
  461.                     .add(" -1 * f_get_amount_before_tax_and_disc( ")
  462.                         .add(" (B.qty_realization * D.qty_so * D.gross_sell_price) / D.qty_int, ")
  463.                         .add(" (F.regular_disc_amount + F.promo_disc_amount) * (B.qty_realization * D.qty_so) / (D.qty_int / F.qty_dlv_so), ")
  464.                         .add(" D.flg_tax_amount, ")
  465.                         .add(" D.tax_percentage, ")
  466.                         .add(" f_get_digit_decimal_doc_curr(:RETURN_NOTE_DOC_TYPE_ID, D.curr_code), ")
  467.                         .add(" f_get_value_system_config_by_param_code(:tenantId, :ROUNDING_MODE_NON_TAX))), 0) ")
  468.                 .add(" FROM ")
  469.                 .add(Inventory.TABLE_NAME)
  470.                 .add(" A ")
  471.                 .add(" INNER JOIN ")
  472.                 .add(InventoryItem.TABLE_NAME)
  473.                 .add(" B ON A.inventory_id = B.inventory_id ")
  474.                 .add(" INNER JOIN ")
  475.                 .add(BalanceDeliveryOrderItem.TABLE_NAME)
  476.                 .add(" C ON B.ref_id = C.do_item_id ")
  477.                 .add(" INNER JOIN ")
  478.                 .add(SalesOrderItem.TABLE_NAME)
  479.                 .add(" D ON C.so_item_id = D.so_item_id ")
  480.                 .add(" INNER JOIN ")
  481.                 .add(SalesOrder.TABLE_NAME)
  482.                 .add(" E ON D.so_id = E.so_id ")
  483.                 .add(" INNER JOIN ")
  484.                 .add(SalesOrderBalanceInvoice.TABLE_NAME)
  485.                 .add(" F ON F.ref_id = B.ref_id AND F.ref_item_id = B.ref_item_id AND F.do_receipt_item_id = :EMPTY_ID ")
  486.                 .add(" WHERE A.tenant_id = :tenantId ")
  487.                 .add(" AND A.ou_from_id = :ouId ")
  488.                 .add(" AND E.partner_bill_to_id = :partnerId ")
  489.                 .add(" AND A.status_doc IN (:DRAFT, :IN_PROGRESS) ");
  490.        
  491.         Query queryOsArNotApprovedReturnNote = inventoryDao.createNativeQuery(builderOsArNotApprovedReturnNote.toString());
  492.        
  493.         queryOsArNotApprovedReturnNote.setParameter("tenantId", inputDto.getLong("tenantId"));
  494.         queryOsArNotApprovedReturnNote.setParameter("ouId", inputDto.getLong("ouId"));
  495.         queryOsArNotApprovedReturnNote.setParameter("partnerId", inputDto.getLong("partnerId"));
  496.         queryOsArNotApprovedReturnNote.setParameter("RETURN_NOTE_DOC_TYPE_ID", InventoryConstants.DOCUMENT_RETURN_NOTE);
  497.         queryOsArNotApprovedReturnNote.setParameter("ROUNDING_MODE_NON_TAX", "rounding.mode.non.tax");
  498.         queryOsArNotApprovedReturnNote.setParameter("DRAFT", SalesConstants.DRAFT_TRANSACTION);
  499.         queryOsArNotApprovedReturnNote.setParameter("IN_PROGRESS", SalesConstants.IN_PROGRESS_TRANSACTION);
  500.         queryOsArNotApprovedReturnNote.setParameter("EMPTY_ID", GeneralConstants.NULL_REF_VALUE_LONG);
  501.        
  502.         Object osArNotApprovedReturnNoteAmount = queryOsArNotApprovedReturnNote.getSingleResult();
  503.        
  504.         //over credit limit amount dikurangi dengan nilai outstanding AR (Return Note yang belum APPROVED)
  505.         overCreditLimitAmount = overCreditLimitAmount.subtract(Double.valueOf(osArNotApprovedReturnNoteAmount.toString()));
  506.  
  507.        
  508.         //Mendapatkan nilai tax outstanding AR (Return Note yang belum APPROVED)
  509.         QueryBuilder builderOsArTaxNotApprovedReturnNote = new QueryBuilder();
  510.         builderOsArTaxNotApprovedReturnNote.add(" SELECT COALESCE(SUM( ")
  511.                     .add(" -1 * f_tax_rounding( ")
  512.                         .add(" A.tenant_id, ")
  513.                         .add(" f_get_amount_before_tax( ")
  514.                             .add(" (B.qty_realization * D.qty_so * (D.gross_sell_price - G.discount_amount)) / D.qty_int, ")
  515.                             .add(" D.flg_tax_amount, ")
  516.                             .add(" D.tax_percentage, ")
  517.                             .add(" f_get_digit_decimal_doc_curr(:RETURN_NOTE_DOC_TYPE_ID, D.curr_code), ")
  518.                             .add(" f_get_value_system_config_by_param_code(:tenantId, :ROUNDING_MODE_NON_TAX)), ")
  519.                         .add(" D.tax_percentage)), 0) ")
  520.                 .add(" FROM ")
  521.                 .add(Inventory.TABLE_NAME)
  522.                 .add(" A ")
  523.                 .add(" INNER JOIN ")
  524.                 .add(InventoryItem.TABLE_NAME)
  525.                 .add(" B ON A.inventory_id = B.inventory_id ")
  526.                 .add(" INNER JOIN ")
  527.                 .add(BalanceDeliveryOrderItem.TABLE_NAME)
  528.                 .add(" C ON B.ref_id = C.do_item_id ")
  529.                 .add(" INNER JOIN ")
  530.                 .add(SalesOrderItem.TABLE_NAME)
  531.                 .add(" D ON C.so_item_id = D.so_item_id ")
  532.                 .add(" INNER JOIN ")
  533.                 .add(SalesOrder.TABLE_NAME)
  534.                 .add(" E ON D.so_id = E.so_id ")
  535.                 .add(" INNER JOIN ")
  536.                 .add(Tax.TABLE_NAME)
  537.                 .add(" F ON D.tax_id = F.tax_id ")
  538.                 .add(" INNER JOIN ")
  539.                 .add(SalesOrderItem.TABLE_NAME)
  540.                 .add(" G ON D.so_item_id = G.so_item_id ")
  541.                 .add(" WHERE A.tenant_id = :tenantId ")
  542.                 .add(" AND A.ou_from_id = :ouId ")
  543.                 .add(" AND E.partner_bill_to_id = :partnerId ")
  544.                 .add(" AND A.status_doc IN (:DRAFT, :IN_PROGRESS) ");
  545.        
  546.         Query queryOsArTaxNotApprovedReturnNote = inventoryDao.createNativeQuery(builderOsArTaxNotApprovedReturnNote.toString());
  547.        
  548.         queryOsArTaxNotApprovedReturnNote.setParameter("tenantId", inputDto.getLong("tenantId"));
  549.         queryOsArTaxNotApprovedReturnNote.setParameter("ouId", inputDto.getLong("ouId"));
  550.         queryOsArTaxNotApprovedReturnNote.setParameter("partnerId", inputDto.getLong("partnerId"));
  551.         queryOsArTaxNotApprovedReturnNote.setParameter("RETURN_NOTE_DOC_TYPE_ID", InventoryConstants.DOCUMENT_RETURN_NOTE);
  552.         queryOsArTaxNotApprovedReturnNote.setParameter("ROUNDING_MODE_NON_TAX", "rounding.mode.non.tax");
  553.         queryOsArTaxNotApprovedReturnNote.setParameter("DRAFT", SalesConstants.DRAFT_TRANSACTION);
  554.         queryOsArTaxNotApprovedReturnNote.setParameter("IN_PROGRESS", SalesConstants.IN_PROGRESS_TRANSACTION);
  555.        
  556.         Object osArTaxNotApprovedReturnNoteAmount = queryOsArTaxNotApprovedReturnNote.getSingleResult();
  557.        
  558.         //over credit limit amount dikurangi dengan nilai tax outstanding AR (Return Note yang belum APPROVED)
  559.         overCreditLimitAmount = overCreditLimitAmount.subtract(Double.valueOf(osArTaxNotApprovedReturnNoteAmount.toString()));
  560.        
  561.        
  562.         //Mendapatkan nilai SO yang belum di-DO
  563.         QueryBuilder builderOsSo = new QueryBuilder();
  564.         builderOsSo.add(" SELECT COALESCE(SUM((A.qty_so - A.qty_cancel + A.qty_add - A.qty_dlv) * (B.gross_sell_price - B.discount_amount)), 0)")
  565.                 .add(" FROM ")
  566.                 .add(SalesOrderBalanceItem.TABLE_NAME)
  567.                 .add(" A ")
  568.                 .add(" INNER JOIN ")
  569.                 .add(SalesOrderItem.TABLE_NAME)
  570.                 .add(" B ON A.so_item_id = B.so_item_id ")
  571.                 .add(" INNER JOIN ")
  572.                 .add(SalesOrder.TABLE_NAME)
  573.                 .add(" C ON B.so_id = C.so_id ")
  574.                 .add(" WHERE A.tenant_id = :tenantId ")
  575.                 .add(" AND A.ou_id = :ouId ")
  576.                 .add(" AND C.partner_bill_to_id = :partnerId ")
  577.                 .add(" AND A.status_item = :RELEASED ");
  578.        
  579.         Query queryOsSo = salesOrderBalanceItemDao.createNativeQuery(builderOsSo.toString());
  580.        
  581.         queryOsSo.setParameter("tenantId", inputDto.getLong("tenantId"));
  582.         queryOsSo.setParameter("ouId", inputDto.getLong("ouId"));
  583.         queryOsSo.setParameter("partnerId", inputDto.getLong("partnerId"));
  584.         queryOsSo.setParameter("RELEASED", SalesConstantsForXcom.STATUS_DOC_RELEASED);
  585.        
  586.         Object osSoAmount = queryOsSo.getSingleResult();
  587.        
  588.         //over credit limit amount dikurangi dengan nilai SO yang belum di-DO
  589.         overCreditLimitAmount = overCreditLimitAmount.subtract(Double.valueOf(osSoAmount.toString()));
  590.  
  591.        
  592.         //Mendapatkan nilai SO yang belum APPROVED atau sedang di-manage
  593.         if(GeneralConstants.NULL_REF_VALUE_LONG.equals(manageSoId)){
  594.             //Semua SO yang belum APPROVED, termasuk SO yang sedang dibuat
  595.             QueryBuilder builderNotApprovedSo = new QueryBuilder();
  596.             builderNotApprovedSo.add(" SELECT COALESCE(SUM(A.qty_so * (A.gross_sell_price - A.discount_amount)), 0)")
  597.                     .add(" FROM ")
  598.                     .add(SalesOrderItem.TABLE_NAME)
  599.                     .add(" A ")
  600.                     .add(" INNER JOIN ")
  601.                     .add(SalesOrder.TABLE_NAME)
  602.                     .add(" B ON A.so_id = B.so_id ")
  603.                     .add(" WHERE B.tenant_id = :tenantId ")
  604.                     .add(" AND B.ou_id = :ouId ")
  605.                     .add(" AND B.partner_bill_to_id = :partnerId ")
  606.                     .add(" AND B.status_doc IN (:DRAFT, :IN_PROGRESS) ");
  607.            
  608.             Query queryNotApprovedSo = salesOrderItemDao.createNativeQuery(builderNotApprovedSo.toString());
  609.            
  610.             queryNotApprovedSo.setParameter("tenantId", inputDto.getLong("tenantId"));
  611.             queryNotApprovedSo.setParameter("ouId", inputDto.getLong("ouId"));
  612.             queryNotApprovedSo.setParameter("partnerId", inputDto.getLong("partnerId"));
  613.             queryNotApprovedSo.setParameter("DRAFT", SalesConstants.DRAFT_TRANSACTION);
  614.             queryNotApprovedSo.setParameter("IN_PROGRESS", SalesConstants.IN_PROGRESS_TRANSACTION);
  615.            
  616.             Object notApprovedSoAmount = queryNotApprovedSo.getSingleResult();
  617.            
  618.             //over credit limit amount dikurangi dengan nilai SO yang belum APPROVED
  619.             overCreditLimitAmount = overCreditLimitAmount.subtract(Double.valueOf(notApprovedSoAmount.toString()));
  620.         } else {
  621.             //Semua SO yang belum APPROVED, kecuali SO yang sedang di-manage
  622.             QueryBuilder builderNotApprovedSoOther = new QueryBuilder();
  623.             builderNotApprovedSoOther.add(" SELECT COALESCE(SUM(A.qty_so * (A.gross_sell_price - A.discount_amount)), 0)")
  624.                     .add(" FROM ")
  625.                     .add(SalesOrderItem.TABLE_NAME)
  626.                     .add(" A ")
  627.                     .add(" INNER JOIN ")
  628.                     .add(SalesOrder.TABLE_NAME)
  629.                     .add(" B ON A.so_id = B.so_id ")
  630.                     .add(" WHERE B.tenant_id = :tenantId ")
  631.                     .add(" AND B.ou_id = :ouId ")
  632.                     .add(" AND B.partner_bill_to_id = :partnerId ")
  633.                     .add(" AND B.status_doc IN (:DRAFT, :IN_PROGRESS) ")
  634.                     .add(" AND B.so_id NOT IN( ")
  635.                         .add(" SELECT C.so_id FROM ")
  636.                         .add(ManageSalesOrder.TABLE_NAME)
  637.                         .add(" C ")
  638.                         .add(" WHERE C.manage_so_id = :manageSoId ")
  639.                     .add(" ) ");
  640.            
  641.             Query queryNotApprovedSoOther = salesOrderItemDao.createNativeQuery(builderNotApprovedSoOther.toString());
  642.            
  643.             queryNotApprovedSoOther.setParameter("tenantId", inputDto.getLong("tenantId"));
  644.             queryNotApprovedSoOther.setParameter("ouId", inputDto.getLong("ouId"));
  645.             queryNotApprovedSoOther.setParameter("partnerId", inputDto.getLong("partnerId"));
  646.             queryNotApprovedSoOther.setParameter("DRAFT", SalesConstants.DRAFT_TRANSACTION);
  647.             queryNotApprovedSoOther.setParameter("IN_PROGRESS", SalesConstants.IN_PROGRESS_TRANSACTION);
  648.             queryNotApprovedSoOther.setParameter("manageSoId", manageSoId);
  649.            
  650.             Object notApprovedSoOtherAmount = queryNotApprovedSoOther.getSingleResult();
  651.            
  652.             //over credit limit amount dikurangi dengan nilai SO yang belum APPROVED
  653.             overCreditLimitAmount = overCreditLimitAmount.subtract(Double.valueOf(notApprovedSoOtherAmount.toString()));
  654.            
  655.             if(SalesConstants.DOCUMENT_MODIFY_HEADER_SALES_ORDER.equals(manageSoDocTypeId)){
  656.                 //SO yang sedang di-manage header
  657.                 QueryBuilder builderManageHeaderSo = new QueryBuilder();
  658.                 builderManageHeaderSo.add(" SELECT COALESCE(SUM(A.qty_so * (A.gross_sell_price - A.discount_amount)), 0)")
  659.                         .add(" FROM ")
  660.                         .add(SalesOrderItem.TABLE_NAME)
  661.                         .add(" A ")
  662.                         .add(" INNER JOIN ")
  663.                         .add(ManageSalesOrder.TABLE_NAME)
  664.                         .add(" B ON A.so_id = B.so_id ")
  665.                         .add(" INNER JOIN ")
  666.                         .add(ManageSalesOrderHeader.TABLE_NAME)
  667.                         .add(" C ON B.manage_so_id = C.manage_so_id ")
  668.                         .add(" WHERE C.tenant_id = :tenantId ")
  669.                         .add(" AND B.ou_id = :ouId ")
  670.                         .add(" AND C.partner_bill_to_id = :partnerId ")
  671.                         .add(" AND B.manage_so_id = :manageSoId ");
  672.                
  673.                 Query queryManageHeaderSo = salesOrderItemDao.createNativeQuery(builderManageHeaderSo.toString());
  674.                
  675.                 queryManageHeaderSo.setParameter("tenantId", inputDto.getLong("tenantId"));
  676.                 queryManageHeaderSo.setParameter("ouId", inputDto.getLong("ouId"));
  677.                 queryManageHeaderSo.setParameter("partnerId", inputDto.getLong("partnerId"));
  678.                 queryManageHeaderSo.setParameter("manageSoId", manageSoId);
  679.                
  680.                 Object manageHeaderSoAmount = queryManageHeaderSo.getSingleResult();
  681.                
  682.                 //over credit limit amount dikurangi dengan nilai SO yang sedang di-manage header
  683.                 overCreditLimitAmount = overCreditLimitAmount.subtract(Double.valueOf(manageHeaderSoAmount.toString()));
  684.             } else if(SalesConstants.DOCUMENT_MODIFY_ITEM_SALES_ORDER.equals(manageSoDocTypeId)){
  685.                 //SO yang sedang di-manage item
  686.                 QueryBuilder builderManageItemSo = new QueryBuilder();
  687.                 builderManageItemSo.add(" SELECT COALESCE(SUM(A.qty_so * (A.gross_sell_price - A.discount_amount)), 0)")
  688.                         .add(" FROM ")
  689.                         .add(ManageSalesOrderItem.TABLE_NAME)
  690.                         .add(" A ")
  691.                         .add(" INNER JOIN ")
  692.                         .add(ManageSalesOrder.TABLE_NAME)
  693.                         .add(" B ON A.manage_so_id = B.manage_so_id ")
  694.                         .add(" INNER JOIN ")
  695.                         .add(SalesOrder.TABLE_NAME)
  696.                         .add(" C ON B.so_id = C.so_id ")
  697.                         .add(" WHERE C.tenant_id = :tenantId ")
  698.                         .add(" AND C.ou_id = :ouId ")
  699.                         .add(" AND C.partner_bill_to_id = :partnerId ")
  700.                         .add(" AND B.manage_so_id = :manageSoId ");
  701.                
  702.                 Query queryManageItemSo = manageSalesOrderItemDao.createNativeQuery(builderManageItemSo.toString());
  703.                
  704.                 queryManageItemSo.setParameter("tenantId", inputDto.getLong("tenantId"));
  705.                 queryManageItemSo.setParameter("ouId", inputDto.getLong("ouId"));
  706.                 queryManageItemSo.setParameter("partnerId", inputDto.getLong("partnerId"));
  707.                 queryManageItemSo.setParameter("manageSoId", manageSoId);
  708.                
  709.                 Object manageItemSoAmount = queryManageItemSo.getSingleResult();
  710.                
  711.                 //over credit limit amount dikurangi dengan nilai SO yang sedang di-manage item
  712.                 overCreditLimitAmount = overCreditLimitAmount.subtract(Double.valueOf(manageItemSoAmount.toString()));
  713.             }
  714.         }
  715.        
  716.        
  717.         // return query result
  718.         return new Dto().put("overCreditLimitAmount", overCreditLimitAmount.doubleValue());
  719.     }
  720.    
  721. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement