aadddrr

r_report_daily_cashbank_20170920

Sep 19th, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --edit, Putra 28 April 2015 -> tambah kolom ref_doc_type_id, ref_id, ref_doc_no, ref_doc_date, remark, partner_name pada tr_daily_cashbank
  2. --edit, Citrahadi 1 Okt 2015 -> tambah mutasi dari dokumen follow up cash advance settlement
  3. --edit, Thea 20 Mei 2016 -> perhitungan untuk beginning balance
  4. --Modified by Adrian, Sep 19, 2017,  menambahkan filter status doc
  5. CREATE OR REPLACE FUNCTION r_report_daily_cashbank(character varying, bigint, bigint, bigint, character varying, bigint, bigint, character varying, character varying, character varying)
  6.   RETURNS SETOF refcursor AS
  7. $BODY$
  8. DECLARE
  9.     pRefHeader          REFCURSOR := 'refHeader';
  10.     pRefDetail          REFCURSOR := 'refDetail';
  11.     pSessionId          ALIAS FOR $1;
  12.     pTenantId           ALIAS FOR $2;
  13.     pUserId             ALIAS FOR $3;
  14.     pRoleId             ALIAS FOR $4;
  15.     pDatetime           ALIAS FOR $5;
  16.     pOuId               ALIAS FOR $6;
  17.     pCashbankId         ALIAS FOR $7;
  18.     pDateStart          ALIAS FOR $8;
  19.     pDateEnd            ALIAS FOR $9;
  20.     pStatusDoc          ALIAS FOR $10;
  21.    
  22.     vEmptyId                bigint;
  23.     vEmpty                  character varying(1);
  24.     vCashBankInType         character varying(1);
  25.     vCashBankOutType        character varying(1);
  26.     vStatusReleased         character varying(1);
  27.     vStatusVoid             character varying(1);
  28.     vRecordTypeSaldoAwal    character varying(1);
  29.     vRecordTypeKredit       character varying(1);
  30.     vRecordTypeDebet        character varying(1);
  31.     vTglAwalCashbankBalance character varying(8);
  32.     vDocTypePosShop             bigint;
  33.     vDocTypeReturnPosShop       bigint;
  34.     vDocTypePosShopInshop       bigint;
  35.     vDocTypeReturnPosShopInShop bigint;
  36.     vDocTypeCashBankOut         bigint;
  37.     vDocTypeCashBankInOther     bigint;
  38.     vDocTypeCashBankInAr        bigint;
  39.     vDocTypeEdcSettlement       bigint;
  40.     vDocTypeFollowUpCashAdvanceSettlement       bigint;
  41.     vCount                      bigint;
  42.    
  43.     vStatusApprovedDoc                      character varying;
  44.     vStatusApprovedDocAndOsCbOut            character varying;
  45.     vStatusApprovedDocAndOsCbIn             character varying
  46.     vAllStatusDoc                           character varying;
  47.     vStatusInProgress                       character varying;
  48.     vStatusDraft                            character varying;
  49.     vInProgress                             character varying;
  50.     vApproved                               character varying;
  51.     vDraft                                  character varying;
  52.     vNewLine                                character varying;
  53.    
  54. BEGIN
  55.    
  56.     vEmptyId := -99;
  57.     vEmpty   := ' ';
  58.     vCashBankInType := 'I';
  59.     vCashBankOutType := 'O';
  60.     vStatusReleased := 'R';
  61.     vStatusVoid := 'V';
  62.     vRecordTypeSaldoAwal := 'A';
  63.     vRecordTypeKredit := 'K';
  64.     vRecordTypeDebet := 'D';
  65.     vTglAwalCashbankBalance := ' ';
  66.     vDocTypePosShop := 401;
  67.     vDocTypeReturnPosShop := 402;
  68.     vDocTypePosShopInShop := 403;
  69.     vDocTypeReturnPosShopInShop := 404;
  70.     vDocTypeCashBankOut := 611;
  71.     vDocTypeCashBankInOther := 623;
  72.     vDocTypeCashBankInAr := 621;
  73.     vDocTypeEdcSettlement := 622;
  74.     vDocTypeFollowUpCashAdvanceSettlement := 641;
  75.    
  76.     vStatusApprovedDoc := 'approvedDoc';
  77.     vStatusApprovedDocAndOsCbOut := 'approvedDocAndOutstandingCBOutOnly';
  78.     vStatusApprovedDocAndOsCbIn := 'approvedDocAndOutstandingCBInOnly';
  79.     vAllStatusDoc := 'allStatusDoc';
  80.     vStatusInProgress := 'I';
  81.     vStatusDraft := 'D';
  82.     vInProgress := 'IN PROGRESS';
  83.     vDraft := 'DRAFT';
  84.     vApproved := 'APPROVED';
  85.     vNewLine := E'\n';
  86.    
  87.     DELETE FROM tr_daily_cashbank WHERE session_id = pSessionId;
  88.     DELETE FROM tr_kartu_kas_by_doc_type WHERE session_id = pSessionId;
  89.    
  90.     SELECT MAX(A.cash_bank_date) INTO vTglAwalCashbankBalance
  91.     FROM cb_cashbank_balance A
  92.     WHERE A.tenant_id = pTenantId
  93.     AND A.cashbank_id = pCashbankId
  94.     AND A.rec_type = vRecordTypeSaldoAwal
  95.     AND A.cash_bank_date <= pDateStart;
  96.  
  97.     IF vTglAwalCashbankBalance IS null OR vTglAwalCashbankBalance IN ('', ' ') THEN
  98.        
  99.         INSERT INTO tr_daily_cashbank
  100.         (session_id, tenant_id, cashbank_id, order_type_data,
  101.         doc_type_id, doc_type_desc, doc_no, doc_date,
  102.         mode_payment, bank_payment, no_payment, date_payment,
  103.         amount)
  104.         SELECT pSessionId, pTenantId, A.cashbank_id, 1, -99, 'Beginning Balance', 'Beginning Balance', pDateStart,
  105.         ' ', ' ', ' ', ' ',
  106.         SUM(CASE WHEN rec_type = vRecordTypeKredit THEN A.amount * -1 ELSE A.amount END) AS sum_amount
  107.         FROM cb_cashbank_balance A
  108.         WHERE A.tenant_id = pTenantId
  109.         AND A.cashbank_id = pCashbankId
  110.         AND A.cash_bank_date < pDateStart
  111.         GROUP BY A.cashbank_id;
  112.            
  113.     ELSE
  114.    
  115.         INSERT INTO tr_daily_cashbank
  116.         (session_id, tenant_id, cashbank_id, order_type_data,
  117.         doc_type_id, doc_type_desc, doc_no, doc_date,
  118.         mode_payment, bank_payment, no_payment, date_payment,
  119.         amount)
  120.         SELECT pSessionId, pTenantId, A.cashbank_id, -1, -99,
  121.         'Beginning Balance', 'Beginning Balance', pDateStart,
  122.         ' ', ' ', ' ', ' ',
  123.         SUM(A.amount) AS sum_amount
  124.         FROM cb_cashbank_balance A
  125.         WHERE A.tenant_id = pTenantId
  126.         AND A.cashbank_id = pCashbankId
  127.         AND A.cash_bank_date = vTglAwalCashbankBalance
  128.         AND A.rec_type = vRecordTypeSaldoAwal
  129.         GROUP BY A.cashbank_id;
  130.    
  131.         INSERT INTO tr_daily_cashbank
  132.         (session_id, tenant_id, cashbank_id, order_type_data,
  133.         doc_type_id, doc_type_desc, doc_no, doc_date,
  134.         mode_payment, bank_payment, no_payment, date_payment,
  135.         amount)
  136.         SELECT pSessionId, pTenantId, A.cashbank_id, -1, -99,
  137.         'Beginning Balance', 'Beginning Balance', pDateStart,
  138.         ' ', ' ', ' ', ' ',
  139.         SUM(CASE WHEN rec_type = vRecordTypeKredit THEN A.amount * -1 ELSE A.amount END) AS sum_amount
  140.         FROM cb_cashbank_balance A
  141.         WHERE A.tenant_id = pTenantId
  142.         AND A.cashbank_id = pCashbankId
  143.         AND A.cash_bank_date >= vTglAwalCashbankBalance
  144.         AND A.cash_bank_date < pDateStart
  145.         AND A.rec_type <> vRecordTypeSaldoAwal
  146.         GROUP BY A.cashbank_id;
  147.        
  148.         --ambil nilai untuk CB trf
  149.         INSERT INTO tr_daily_cashbank
  150.         (session_id, tenant_id, cashbank_id, order_type_data,
  151.         doc_type_id, doc_type_desc, doc_no, doc_date,
  152.         mode_payment, bank_payment, no_payment, date_payment,
  153.         amount)
  154.         SELECT pSessionId, pTenantId, A.cashbank_id, -1, -99,
  155.         'Beginning Balance', 'Beginning Balance', pDateStart,
  156.         ' ', ' ', ' ', ' ',
  157.         SUM(A.transfer_amount)
  158.         FROM cb_transfer_cashbank A
  159.         WHERE A.tenant_id = pTenantId
  160.         AND A.cashbank_id = pCashbankId
  161.         AND A.status_doc <> vStatusReleased
  162.         AND A.doc_date >= vTglAwalCashbankBalance
  163.         AND A.doc_date < pDateStart
  164.         GROUP BY A.cashbank_id;
  165.        
  166.         INSERT INTO tr_daily_cashbank
  167.         (session_id, tenant_id, cashbank_id, order_type_data,
  168.         doc_type_id, doc_type_desc, doc_no, doc_date,
  169.         mode_payment, bank_payment, no_payment, date_payment,
  170.         amount)
  171.         SELECT pSessionId, pTenantId, A.cashbank_id, -1, -99,
  172.         'Beginning Balance', 'Beginning Balance', pDateStart,
  173.         ' ', ' ', ' ', ' ',
  174.         SUM(B.payment_amount)
  175.         FROM cb_transfer_cashbank A
  176.         RIGHT JOIN cb_transfer_cashbank_cost B ON A.transfer_cashbank_id = B.transfer_cashbank_id
  177.         WHERE A.tenant_id = pTenantId
  178.         AND A.cashbank_id = pCashbankId
  179.         AND A.status_doc <> vStatusReleased
  180.         AND A.doc_date >= vTglAwalCashbankBalance
  181.         AND A.doc_date < pDateStart
  182.         GROUP BY A.cashbank_id;
  183.        
  184.         --ambil nilai untuk CB out
  185.         INSERT INTO tr_daily_cashbank
  186.         (session_id, tenant_id, cashbank_id, order_type_data,
  187.         doc_type_id, doc_type_desc, doc_no, doc_date,
  188.         mode_payment, bank_payment, no_payment, date_payment,
  189.         amount)
  190.         SELECT pSessionId, pTenantId, B.cashbank_id, -1,
  191.         -99, 'Beginning Balance', 'Beginning Balance', pDateStart,
  192.         ' ', ' ', ' ', ' ',
  193.         SUM(B.cashbank_amount)
  194.         FROM cb_in_out_cashbank A
  195.         INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  196.         WHERE A.tenant_id = pTenantId
  197.         AND B.cashbank_id = pCashbankId
  198.         AND A.doc_date >= vTglAwalCashbankBalance
  199.         AND A.doc_date < pDateStart
  200.         AND A.status_doc <> vStatusReleased
  201.         AND A.doc_type_id = vDocTypeCashBankOut
  202.         GROUP BY B.cashbank_id;
  203.        
  204.         --ambil nilai untuk FU CAS
  205.         INSERT INTO tr_daily_cashbank
  206.         (session_id, tenant_id, cashbank_id, order_type_data,
  207.         doc_type_id, doc_type_desc, doc_no, doc_date,
  208.         mode_payment, bank_payment, no_payment, date_payment,
  209.         amount)
  210.         SELECT pSessionId, pTenantId, B.cashbank_id, -1,
  211.         -99, 'Beginning Balance', 'Beginning Balance', pDateStart,
  212.         ' ', ' ', ' ', ' ',
  213.         SUM(B.cashbank_amount)
  214.         FROM cb_in_out_cashbank A
  215.         INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  216.         WHERE A.tenant_id = pTenantId
  217.         AND B.cashbank_id = pCashbankId
  218.         AND A.doc_date >= vTglAwalCashbankBalance
  219.         AND A.doc_date < pDateStart
  220.         AND A.status_doc <> vStatusReleased
  221.         AND A.doc_type_id = vDocTypeFollowUpCashAdvanceSettlement
  222.         AND A.ref_amount > 0
  223.         GROUP BY B.cashbank_id;
  224.        
  225.         --Adrian, Sep 19, 2017, ambil nilai untuk O/S CB out
  226.         IF (pStatusDoc = vStatusApprovedDocAndOsCbOut)
  227.             OR (pStatusDoc = vAllStatusDoc) THEN
  228.            
  229.             --ambil nilai untuk O/S CB trf
  230.             INSERT INTO tr_daily_cashbank
  231.             (session_id, tenant_id, cashbank_id, order_type_data,
  232.             doc_type_id, doc_type_desc, doc_no, doc_date,
  233.             mode_payment, bank_payment, no_payment, date_payment,
  234.             amount)
  235.             SELECT pSessionId, pTenantId, A.cashbank_id, -1, -99,
  236.             'Beginning Balance', 'Beginning Balance', pDateStart,
  237.             ' ', ' ', ' ', ' ',
  238.             SUM(-1 * A.transfer_amount)
  239.             FROM cb_transfer_cashbank A
  240.             WHERE A.tenant_id = pTenantId
  241.             AND A.cashbank_id = pCashbankId
  242.             AND A.status_doc IN (vStatusDraft, vStatusInProgress)
  243.             AND A.doc_date >= vTglAwalCashbankBalance
  244.             AND A.doc_date < pDateStart
  245.             GROUP BY A.cashbank_id;
  246.            
  247.             INSERT INTO tr_daily_cashbank
  248.             (session_id, tenant_id, cashbank_id, order_type_data,
  249.             doc_type_id, doc_type_desc, doc_no, doc_date,
  250.             mode_payment, bank_payment, no_payment, date_payment,
  251.             amount)
  252.             SELECT pSessionId, pTenantId, A.cashbank_id, -1, -99,
  253.             'Beginning Balance', 'Beginning Balance', pDateStart,
  254.             ' ', ' ', ' ', ' ',
  255.             SUM(-1 * B.payment_amount)
  256.             FROM cb_transfer_cashbank A
  257.             RIGHT JOIN cb_transfer_cashbank_cost B ON A.transfer_cashbank_id = B.transfer_cashbank_id
  258.             WHERE A.tenant_id = pTenantId
  259.             AND A.cashbank_id = pCashbankId
  260.             AND A.status_doc IN (vStatusDraft, vStatusInProgress)
  261.             AND A.doc_date >= vTglAwalCashbankBalance
  262.             AND A.doc_date < pDateStart
  263.             GROUP BY A.cashbank_id;
  264.            
  265.             --ambil nilai untuk O/S CB out
  266.             INSERT INTO tr_daily_cashbank
  267.             (session_id, tenant_id, cashbank_id, order_type_data,
  268.             doc_type_id, doc_type_desc, doc_no, doc_date,
  269.             mode_payment, bank_payment, no_payment, date_payment,
  270.             amount)
  271.             SELECT pSessionId, pTenantId, B.cashbank_id, -1,
  272.             -99, 'Beginning Balance', 'Beginning Balance', pDateStart,
  273.             ' ', ' ', ' ', ' ',
  274.             SUM(-1 * B.cashbank_amount)
  275.             FROM cb_in_out_cashbank A
  276.             INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  277.             WHERE A.tenant_id = pTenantId
  278.             AND B.cashbank_id = pCashbankId
  279.             AND A.doc_date >= vTglAwalCashbankBalance
  280.             AND A.doc_date < pDateStart
  281.             AND A.status_doc IN (vStatusDraft, vStatusInProgress)
  282.             AND A.doc_type_id = vDocTypeCashBankOut
  283.             GROUP BY B.cashbank_id;
  284.            
  285.             --ambil nilai untuk O/S FU CAS
  286.             INSERT INTO tr_daily_cashbank
  287.             (session_id, tenant_id, cashbank_id, order_type_data,
  288.             doc_type_id, doc_type_desc, doc_no, doc_date,
  289.             mode_payment, bank_payment, no_payment, date_payment,
  290.             amount)
  291.             SELECT pSessionId, pTenantId, B.cashbank_id, -1,
  292.             -99, 'Beginning Balance', 'Beginning Balance', pDateStart,
  293.             ' ', ' ', ' ', ' ',
  294.             SUM(-1 * B.cashbank_amount)
  295.             FROM cb_in_out_cashbank A
  296.             INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  297.             WHERE A.tenant_id = pTenantId
  298.             AND B.cashbank_id = pCashbankId
  299.             AND A.doc_date >= vTglAwalCashbankBalance
  300.             AND A.doc_date < pDateStart
  301.             AND A.status_doc IN (vStatusDraft, vStatusInProgress)
  302.             AND A.doc_type_id = vDocTypeFollowUpCashAdvanceSettlement
  303.             AND A.ref_amount > 0
  304.             GROUP BY B.cashbank_id;
  305.            
  306.         END IF;
  307.        
  308.         --Adrian, Sep 19, 2017, ambil nilai untuk O/S CB in
  309.         IF (pStatusDoc = vStatusApprovedDocAndOsCbIn)
  310.             OR (pStatusDoc = vAllStatusDoc) THEN
  311.    
  312.             --ambil nilai untuk O/S CB trf
  313.             INSERT INTO tr_daily_cashbank
  314.             (session_id, tenant_id, cashbank_id, order_type_data,
  315.             doc_type_id, doc_type_desc, doc_no, doc_date,
  316.             mode_payment, bank_payment, no_payment, date_payment,
  317.             amount)
  318.             SELECT pSessionId, pTenantId, B.cashbank_id, -1,
  319.             -99, 'Beginning Balance', 'Beginning Balance', pDateStart,
  320.             ' ', ' ', ' ', ' ',
  321.             SUM(A.receive_amount)
  322.             FROM cb_transfer_cashbank_receive A
  323.             INNER JOIN cb_transfer_cashbank B ON A.transfer_cashbank_id = B.transfer_cashbank_id
  324.             WHERE B.tenant_id = pTenantId
  325.             AND A.cashbank_to_id = pCashbankId
  326.             AND B.status_doc IN (vStatusDraft, vStatusInProgress)
  327.             AND B.doc_date >= vTglAwalCashbankBalance
  328.             AND B.doc_date < pDateStart
  329.             GROUP BY B.cashbank_id;
  330.            
  331.             --ambil nilai untuk O/S CB in AR
  332.             INSERT INTO tr_daily_cashbank
  333.             (session_id, tenant_id, cashbank_id, order_type_data,
  334.             doc_type_id, doc_type_desc, doc_no, doc_date,
  335.             mode_payment, bank_payment, no_payment, date_payment,
  336.             amount)
  337.             SELECT pSessionId, pTenantId, B.cashbank_id, -1,
  338.             -99, 'Beginning Balance', 'Beginning Balance', pDateStart,
  339.             ' ', ' ', ' ', ' ',
  340.             SUM(B.cashbank_amount) - SUM(COALESCE(C.cost_amount, 0))
  341.             FROM cb_in_out_cashbank A
  342.             INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  343.             LEFT OUTER JOIN cb_in_out_cashbank_cost C ON A.in_out_cashbank_id = C.in_out_cashbank_id
  344.             WHERE A.tenant_id = pTenantId
  345.             AND B.cashbank_id = pCashbankId
  346.             AND A.doc_date >= vTglAwalCashbankBalance
  347.             AND A.doc_date < pDateStart
  348.             AND A.status_doc IN (vStatusDraft, vStatusInProgress)
  349.             AND A.doc_type_id = vDocTypeCashBankInAr
  350.             GROUP BY B.cashbank_id;
  351.            
  352.             --ambil nilai untuk O/S CB in other
  353.             INSERT INTO tr_daily_cashbank
  354.             (session_id, tenant_id, cashbank_id, order_type_data,
  355.             doc_type_id, doc_type_desc, doc_no, doc_date,
  356.             mode_payment, bank_payment, no_payment, date_payment,
  357.             amount)
  358.             SELECT pSessionId, pTenantId, B.cashbank_id, -1,
  359.             -99, 'Beginning Balance', 'Beginning Balance', pDateStart,
  360.             ' ', ' ', ' ', ' ',
  361.             SUM(B.cashbank_amount) - SUM(COALESCE(C.cost_amount, 0))
  362.             FROM cb_in_out_cashbank A
  363.             INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  364.             LEFT OUTER JOIN cb_in_out_cashbank_cost C ON A.in_out_cashbank_id = C.in_out_cashbank_id
  365.             WHERE A.tenant_id = pTenantId
  366.             AND B.cashbank_id = pCashbankId
  367.             AND A.doc_date >= vTglAwalCashbankBalance
  368.             AND A.doc_date < pDateStart
  369.             AND A.status_doc IN (vStatusDraft, vStatusInProgress)
  370.             AND A.doc_type_id = vDocTypeCashBankInOther
  371.             GROUP BY B.cashbank_id;
  372.            
  373.             --ambil nilai untuk O/S EDC Settlement
  374.             INSERT INTO tr_daily_cashbank
  375.             (session_id, tenant_id, cashbank_id, order_type_data,
  376.             doc_type_id, doc_type_desc, doc_no, doc_date,
  377.             mode_payment, bank_payment, no_payment, date_payment,
  378.             amount)
  379.             SELECT pSessionId, pTenantId, B.cashbank_id, -1,
  380.             -99, 'Beginning Balance', 'Beginning Balance', pDateStart,
  381.             ' ', ' ', ' ', ' ',
  382.             SUM(B.cashbank_amount)
  383.             FROM cb_in_out_cashbank A
  384.             INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  385.             LEFT OUTER JOIN cb_in_out_cashbank_cost C ON A.in_out_cashbank_id = C.in_out_cashbank_id
  386.             LEFT OUTER JOIN cb_trx_cashbank_balance D ON A.ref_doc_type_id = D.doc_type_id AND A.ref_id = D.trx_cashbank_balance_id
  387.             WHERE A.tenant_id = pTenantId
  388.             AND B.cashbank_id = pCashbankId
  389.             AND A.doc_date >= vTglAwalCashbankBalance
  390.             AND A.doc_date < pDateStart
  391.             AND A.status_doc IN (vStatusDraft, vStatusInProgress)
  392.             AND A.doc_type_id = vDocTypeEdcSettlement
  393.             GROUP BY B.cashbank_id;
  394.                    
  395.             --ambil nilai untuk O/S FU CAS
  396.             INSERT INTO tr_daily_cashbank
  397.             (session_id, tenant_id, cashbank_id, order_type_data,
  398.             doc_type_id, doc_type_desc, doc_no, doc_date,
  399.             mode_payment, bank_payment, no_payment, date_payment,
  400.             amount)
  401.             SELECT pSessionId, pTenantId, B.cashbank_id, -1,
  402.             -99, 'Beginning Balance', 'Beginning Balance', pDateStart,
  403.             ' ', ' ', ' ', ' ',
  404.             SUM(B.cashbank_amount)
  405.             FROM cb_in_out_cashbank A
  406.             INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  407.             WHERE A.tenant_id = pTenantId
  408.             AND B.cashbank_id = pCashbankId
  409.             AND A.doc_date >= vTglAwalCashbankBalance
  410.             AND A.doc_date < pDateStart
  411.             AND A.status_doc IN (vStatusDraft, vStatusInProgress)
  412.             AND A.doc_type_id = vDocTypeFollowUpCashAdvanceSettlement
  413.             AND A.ref_amount < 0
  414.             GROUP BY B.cashbank_id;
  415.            
  416.         END IF;
  417.        
  418.         INSERT INTO tr_daily_cashbank
  419.         (session_id, tenant_id, cashbank_id, order_type_data,
  420.         doc_type_id, doc_type_desc, doc_no, doc_date,
  421.         mode_payment, bank_payment, no_payment, date_payment,
  422.         amount)
  423.         SELECT pSessionId, pTenantId, cashbank_id, 1,
  424.         doc_type_id, doc_type_desc, doc_no, doc_date,
  425.         mode_payment, bank_payment, no_payment, date_payment,
  426.         SUM(amount)
  427.         FROM tr_daily_cashbank
  428.         WHERE session_id = pSessionId
  429.         AND tenant_id = pTenantId
  430.         AND order_type_data = -1
  431.         GROUP BY cashbank_id, order_type_data, doc_type_id, doc_type_desc, doc_no, doc_date, mode_payment, bank_payment, no_payment, date_payment;
  432.        
  433.         DELETE FROM tr_daily_cashbank WHERE session_id = pSessionId AND order_type_data = -1;
  434.        
  435.     END IF;
  436.    
  437.     -- cb trf
  438.     INSERT INTO tr_daily_cashbank
  439.     (session_id, tenant_id, cashbank_id, order_type_data,
  440.     doc_type_id, doc_type_desc, doc_no, doc_date,
  441.     mode_payment, bank_payment, no_payment, date_payment,
  442.     amount, remark)
  443.     SELECT pSessionId, pTenantId, pCashbankId, 2,
  444.     A.doc_type_id, f_get_doc_desc(A.doc_type_id), A.doc_no, A.doc_date,
  445.     A.mode_payment, A.bank_payment, A.no_payment, A.date_payment,
  446.     -1 * A.transfer_amount, vApproved || vNewLine || A.remark
  447.     FROM cb_transfer_cashbank A
  448.     WHERE A.tenant_id = pTenantId
  449.     AND A.cashbank_id = pCashbankId
  450.     AND A.status_doc = vStatusReleased
  451.     AND A.doc_date BETWEEN pDateStart AND pDateEnd;
  452.    
  453.     /*
  454.      * PS, 27 Maret 2015
  455.      * update amount pada tr_daily_cashbank, dikurangi dengan cost_amount dari cb_transfer_cashbank_cost
  456.      * memakai RIGHT JOIN karena transaksi di cb_transfer_cashbank_cost bisa kosong untuk sebuah transfer cashbank
  457.      */
  458. --  UPDATE tr_daily_cashbank C
  459. --  SET amount = C.amount - B.cost_amount
  460. --  FROM cb_transfer_cashbank A
  461. --  RIGHT JOIN cb_transfer_cashbank_cost B ON A.transfer_cashbank_id=B.transfer_cashbank_id
  462. --  WHERE A.tenant_id = pTenantId
  463. --  AND A.cashbank_id = pCashbankId
  464. --  AND A.status_doc = vStatusReleased
  465. --  AND A.doc_date BETWEEN pDateStart AND pDateEnd;
  466.  
  467.     UPDATE tr_daily_cashbank C
  468.     SET amount = C.amount - B.payment_amount
  469.     FROM cb_transfer_cashbank A
  470.     RIGHT JOIN cb_transfer_cashbank_cost B ON A.transfer_cashbank_id=B.transfer_cashbank_id
  471.     WHERE A.tenant_id = pTenantId
  472.     AND A.cashbank_id = pCashbankId
  473.     AND A.doc_no = C.doc_no
  474.     AND A.doc_date = C.doc_date
  475.     AND A.doc_type_id = C.doc_type_id
  476.     AND A.status_doc = vStatusReleased
  477.     AND A.doc_date BETWEEN pDateStart AND pDateEnd;
  478.    
  479.     INSERT INTO tr_daily_cashbank
  480.     (session_id, tenant_id, cashbank_id, order_type_data,
  481.     doc_type_id, doc_type_desc, doc_no, doc_date,
  482.     mode_payment, bank_payment, no_payment, date_payment,
  483.     amount, remark)
  484.     SELECT pSessionId, pTenantId, pCashbankId, 2,
  485.     B.doc_type_id, f_get_doc_desc(B.doc_type_id), B.doc_no, B.doc_date,
  486.     A.mode_payment, A.bank_payment, A.no_payment, A.date_payment,
  487.     A.receive_amount, vApproved || vNewLine || A.remark
  488.     FROM cb_transfer_cashbank_receive A
  489.     INNER JOIN cb_transfer_cashbank B ON A.transfer_cashbank_id = B.transfer_cashbank_id
  490.     WHERE B.tenant_id = pTenantId
  491.     AND A.cashbank_to_id = pCashbankId
  492.     AND B.status_doc = vStatusReleased
  493.     AND B.doc_date BETWEEN pDateStart AND pDateEnd;
  494.    
  495.     -- cash bank out
  496.     /* Note : WTC & TKP 24 Mei 2016
  497.      * tidak perlu join ke cb_in_out_cashbank_cost
  498.      * dan untuk join ke cb_trx_cashbank_balance langsung di inner join aja
  499.      */
  500.     INSERT INTO tr_daily_cashbank
  501.     (session_id, tenant_id, cashbank_id, order_type_data,
  502.     doc_type_id, doc_type_desc, doc_no, doc_date,
  503.     mode_payment, bank_payment, no_payment, date_payment,
  504.     amount, remark, ref_id, ref_doc_type_id, ref_doc_no, ref_doc_date,
  505.     partner_name)
  506.     SELECT pSessionId, pTenantId, B.cashbank_id, 2,
  507.     A.doc_type_id, f_get_doc_desc(A.doc_type_id), A.doc_no, A.doc_date,
  508.     B.mode_payment, B.bank_payment, B.no_payment, B.date_payment,
  509.     (-1 * B.cashbank_amount), vApproved || vNewLine || A.remark, A.ref_id, A.ref_doc_type_id, D.payment_doc_no, D.payment_doc_date,
  510.     f_get_partner_name(A.partner_id) AS partner_name
  511.     FROM cb_in_out_cashbank A
  512.     INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  513.     LEFT OUTER JOIN cb_in_out_cashbank_cost C ON A.in_out_cashbank_id = C.in_out_cashbank_id
  514.     LEFT OUTER JOIN cb_trx_cashbank_balance D ON A.ref_doc_type_id = D.doc_type_id AND A.ref_id = D.trx_cashbank_balance_id
  515.     WHERE A.tenant_id = pTenantId
  516.     AND B.cashbank_id = pCashbankId
  517.     AND A.doc_date BETWEEN pDateStart AND pDateEnd
  518.     AND A.status_doc = vStatusReleased
  519.     AND A.doc_type_id = vDocTypeCashBankOut
  520.     GROUP BY B.cashbank_id, A.doc_type_id, A.doc_no, A.doc_date, B.mode_payment, B.bank_payment, B.no_payment, B.date_payment, A.type_in_out_cashbank, B.cashbank_amount, A.remark, A.ref_id, A.ref_doc_type_id, D.payment_doc_no, D.payment_doc_date, A.partner_id;
  521.    
  522.     -- cash bank in AR
  523.     /* Note : WTC & TKP 24 Mei 2016
  524.      * tidak perlu join ke cb_trx_cashbank_balance
  525.      */
  526.     INSERT INTO tr_daily_cashbank
  527.     (session_id, tenant_id, cashbank_id, order_type_data,
  528.     doc_type_id, doc_type_desc, doc_no, doc_date,
  529.     mode_payment, bank_payment, no_payment, date_payment,
  530.     amount, remark, ref_id, ref_doc_type_id, ref_doc_no, ref_doc_date,
  531.     partner_name)
  532.     SELECT pSessionId, pTenantId, B.cashbank_id, 2,
  533.     A.doc_type_id, f_get_doc_desc(A.doc_type_id), A.doc_no, A.doc_date,
  534.     B.mode_payment, B.bank_payment, B.no_payment, B.date_payment,
  535.     B.cashbank_amount - SUM(COALESCE(C.cost_amount, 0)),
  536.     vApproved || vNewLine || A.remark, A.ref_id, A.ref_doc_type_id, D.payment_doc_no, D.payment_doc_date, f_get_partner_name(A.partner_id)
  537.     FROM cb_in_out_cashbank A
  538.     INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  539.     LEFT OUTER JOIN cb_in_out_cashbank_cost C ON A.in_out_cashbank_id = C.in_out_cashbank_id
  540.     LEFT OUTER JOIN cb_trx_cashbank_balance D ON A.ref_doc_type_id = D.doc_type_id AND A.ref_id = D.trx_cashbank_balance_id
  541.     WHERE A.tenant_id = pTenantId
  542.     AND B.cashbank_id = pCashbankId
  543.     AND A.doc_date BETWEEN pDateStart AND pDateEnd
  544.     AND A.status_doc = vStatusReleased
  545.     AND A.doc_type_id = vDocTypeCashBankInAr
  546.     GROUP BY B.cashbank_id, A.doc_type_id, A.doc_no, A.doc_date, B.mode_payment, B.bank_payment, B.no_payment, B.date_payment, A.type_in_out_cashbank, B.cashbank_amount, A.remark, A.ref_id, A.ref_doc_type_id, D.payment_doc_no, D.payment_doc_date, A.partner_id;
  547.    
  548.     -- cash bank in other
  549.     /* Note : WTC & TKP 24 Mei 2016
  550.      * tidak perlu join ke cb_trx_cashbank_balance
  551.      *
  552.      * Note : Didit 24 Agustus 2016
  553.      * Perhitungkan juga dokumen yang statusnya void karena hasil konversi
  554.      */
  555.     INSERT INTO tr_daily_cashbank
  556.     (session_id, tenant_id, cashbank_id, order_type_data,
  557.     doc_type_id, doc_type_desc, doc_no, doc_date,
  558.     mode_payment, bank_payment, no_payment, date_payment,
  559.     amount, remark, ref_id, ref_doc_type_id, ref_doc_no, ref_doc_date,
  560.     partner_name)
  561.     SELECT pSessionId, pTenantId, B.cashbank_id, 2,
  562.     A.doc_type_id, f_get_doc_desc(A.doc_type_id), A.doc_no, A.doc_date,
  563.     B.mode_payment, B.bank_payment, B.no_payment, B.date_payment,
  564.     B.cashbank_amount, vApproved || vNewLine || A.remark, A.ref_id, A.ref_doc_type_id, D.payment_doc_no, D.payment_doc_date,   
  565.     f_get_partner_name(A.partner_id)
  566.     FROM cb_in_out_cashbank A
  567.     INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  568.     LEFT OUTER JOIN cb_in_out_cashbank_cost C ON A.in_out_cashbank_id = C.in_out_cashbank_id
  569.     LEFT OUTER JOIN cb_trx_cashbank_balance D ON A.ref_doc_type_id = D.doc_type_id AND A.ref_id = D.trx_cashbank_balance_id
  570.     WHERE A.tenant_id = pTenantId
  571.     AND B.cashbank_id = pCashbankId
  572.     AND A.doc_date BETWEEN pDateStart AND pDateEnd
  573.     AND A.status_doc IN (vStatusReleased, vStatusVoid)
  574.     AND A.doc_type_id = vDocTypeCashBankInOther
  575.     GROUP BY B.cashbank_id, A.doc_type_id, A.doc_no, A.doc_date, B.mode_payment, B.bank_payment, B.no_payment, B.date_payment, A.type_in_out_cashbank, B.cashbank_amount, A.remark, A.ref_id, A.ref_doc_type_id, D.payment_doc_no, D.payment_doc_date, A.partner_id;
  576.    
  577.     -- edc settlement
  578.     INSERT INTO tr_daily_cashbank
  579.     (session_id, tenant_id, cashbank_id, order_type_data,
  580.     doc_type_desc, doc_no, doc_date,
  581.     mode_payment, bank_payment, no_payment, date_payment,
  582.     amount, remark, ref_id, ref_doc_type_id, ref_doc_no, ref_doc_date,
  583.     partner_name)
  584.     SELECT pSessionId, pTenantId, B.cashbank_id, 2,
  585.     f_get_doc_desc(A.doc_type_id), A.doc_no, A.doc_date,
  586.     B.mode_payment, B.bank_payment, A.doc_no, A.doc_date,
  587.     B.cashbank_amount, vApproved || vNewLine || A.remark, A.ref_id, A.ref_doc_type_id, D.payment_doc_no, D.payment_doc_date,   
  588.     f_get_partner_name(A.partner_id)
  589.     FROM cb_in_out_cashbank A
  590.     INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  591.     LEFT OUTER JOIN cb_in_out_cashbank_cost C ON A.in_out_cashbank_id = C.in_out_cashbank_id
  592.     LEFT OUTER JOIN cb_trx_cashbank_balance D ON A.ref_doc_type_id = D.doc_type_id AND A.ref_id = D.trx_cashbank_balance_id
  593.     WHERE A.tenant_id = pTenantId
  594.     AND B.cashbank_id = pCashbankId
  595.     AND A.doc_date BETWEEN pDateStart AND pDateEnd
  596.     AND A.status_doc = vStatusReleased
  597.     AND A.doc_type_id = vDocTypeEdcSettlement
  598.     GROUP BY B.cashbank_id, A.doc_type_id, A.doc_no, A.doc_date, B.mode_payment, B.bank_payment, B.no_payment, B.date_payment, A.type_in_out_cashbank, B.cashbank_amount, A.remark, A.ref_id, A.ref_doc_type_id, D.payment_doc_no, D.payment_doc_date, A.partner_id;
  599.    
  600.     -- Added by Citrahadi, 2015-10-01
  601.     -- follow up cash advance settlement
  602.     -- ref_amount minus artinya follow up dgn cashbank in
  603.     INSERT INTO tr_daily_cashbank
  604.     (session_id, tenant_id, cashbank_id, order_type_data,
  605.     doc_type_id, doc_type_desc, doc_no, doc_date,
  606.     mode_payment, bank_payment, no_payment, date_payment,
  607.     amount, remark, ref_id, ref_doc_type_id, ref_doc_no,
  608.     ref_doc_date, partner_name)
  609.     SELECT pSessionId, pTenantId, B.cashbank_id, 2,
  610.     A.doc_type_id, f_get_doc_desc(A.doc_type_id), A.doc_no, A.doc_date,
  611.     B.mode_payment, B.bank_payment, B.no_payment, B.date_payment,
  612.     CASE WHEN A.ref_amount < 0  THEN B.cashbank_amount ELSE (-1 * B.cashbank_amount) END, A.remark, A.ref_id, A.ref_doc_type_id, D.payment_doc_no,
  613.     D.payment_doc_date, f_get_partner_name(A.partner_id) AS partner_name
  614.     FROM cb_in_out_cashbank A
  615.     INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  616.     LEFT OUTER JOIN cb_in_out_cashbank_cost C ON A.in_out_cashbank_id = C.in_out_cashbank_id
  617.     LEFT OUTER JOIN cb_trx_cashbank_balance D ON A.ref_doc_type_id = D.doc_type_id AND A.ref_id = D.trx_cashbank_balance_id
  618.     WHERE A.tenant_id = pTenantId
  619.     AND B.cashbank_id = pCashbankId
  620.     AND A.doc_date BETWEEN pDateStart AND pDateEnd
  621.     AND A.status_doc = vStatusReleased
  622.     AND A.doc_type_id = vDocTypeFollowUpCashAdvanceSettlement
  623.     GROUP BY B.cashbank_id, A.doc_type_id, A.doc_no, A.doc_date, B.mode_payment, B.bank_payment, B.no_payment, B.date_payment, A.type_in_out_cashbank,
  624.         B.cashbank_amount, A.remark, A.ref_id, A.ref_doc_type_id, D.payment_doc_no, D.payment_doc_date, A.partner_id, A.ref_amount;
  625.    
  626.     --Adrian, Sep 19, 2017, O/S cash bank out
  627.     IF (pStatusDoc = vStatusApprovedDocAndOsCbOut)
  628.         OR (pStatusDoc = vAllStatusDoc) THEN
  629.        
  630.         -- O/S cb trf
  631.         INSERT INTO tr_daily_cashbank
  632.         (session_id, tenant_id, cashbank_id, order_type_data,
  633.         doc_type_id, doc_type_desc, doc_no, doc_date,
  634.         mode_payment, bank_payment, no_payment, date_payment,
  635.         amount, remark)
  636.         SELECT pSessionId, pTenantId, pCashbankId, 2,
  637.         A.doc_type_id, f_get_doc_desc(A.doc_type_id), A.doc_no, A.doc_date,
  638.         A.mode_payment, A.bank_payment, A.no_payment, A.date_payment,
  639.         -1 * A.transfer_amount,
  640.         CASE WHEN (A.status_doc = vStatusDraft) THEN
  641.             vDraft
  642.         ELSE
  643.             vInProgress
  644.         END
  645.         || vNewLine || A.remark AS remark
  646.         FROM cb_transfer_cashbank A
  647.         WHERE A.tenant_id = pTenantId
  648.         AND A.cashbank_id = pCashbankId
  649.         AND A.status_doc IN (vStatusDraft, vStatusInProgress)
  650.         AND A.doc_date BETWEEN pDateStart AND pDateEnd;
  651.        
  652.         UPDATE tr_daily_cashbank C
  653.         SET amount = C.amount - B.payment_amount
  654.         FROM cb_transfer_cashbank A
  655.         RIGHT JOIN cb_transfer_cashbank_cost B ON A.transfer_cashbank_id=B.transfer_cashbank_id
  656.         WHERE A.tenant_id = pTenantId
  657.         AND A.cashbank_id = pCashbankId
  658.         AND A.doc_no = C.doc_no
  659.         AND A.doc_date = C.doc_date
  660.         AND A.doc_type_id = C.doc_type_id
  661.         AND A.status_doc IN (vStatusDraft, vStatusInProgress)
  662.         AND A.doc_date BETWEEN pDateStart AND pDateEnd;
  663.        
  664.         --O/S cash bank out
  665.         INSERT INTO tr_daily_cashbank
  666.         (session_id, tenant_id, cashbank_id, order_type_data,
  667.         doc_type_id, doc_type_desc, doc_no, doc_date,
  668.         mode_payment, bank_payment, no_payment, date_payment,
  669.         amount, remark, ref_id, ref_doc_type_id, ref_doc_no, ref_doc_date,
  670.         partner_name)
  671.         SELECT pSessionId, pTenantId, B.cashbank_id, 2,
  672.         A.doc_type_id, f_get_doc_desc(A.doc_type_id), A.doc_no, A.doc_date,
  673.         B.mode_payment, B.bank_payment, B.no_payment, B.date_payment,
  674.         (-1 * B.cashbank_amount),
  675.         CASE WHEN (A.status_doc = vStatusDraft) THEN
  676.             vDraft
  677.         ELSE
  678.             vInProgress
  679.         END
  680.         || vNewLine || A.remark AS remark,
  681.         A.ref_id, A.ref_doc_type_id, D.payment_doc_no, D.payment_doc_date,
  682.         f_get_partner_name(A.partner_id) AS partner_name
  683.         FROM cb_in_out_cashbank A
  684.         INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  685.         LEFT OUTER JOIN cb_in_out_cashbank_cost C ON A.in_out_cashbank_id = C.in_out_cashbank_id
  686.         LEFT OUTER JOIN cb_trx_cashbank_balance D ON A.ref_doc_type_id = D.doc_type_id AND A.ref_id = D.trx_cashbank_balance_id
  687.         WHERE A.tenant_id = pTenantId
  688.         AND B.cashbank_id = pCashbankId
  689.         AND A.doc_date BETWEEN pDateStart AND pDateEnd
  690.         AND A.status_doc IN (vStatusDraft, vStatusInProgress)
  691.         AND A.doc_type_id = vDocTypeCashBankOut
  692.         GROUP BY B.cashbank_id, A.doc_type_id, A.doc_no, A.doc_date, B.mode_payment, B.bank_payment, B.no_payment, B.date_payment, A.type_in_out_cashbank, B.cashbank_amount, A.remark, A.ref_id, A.ref_doc_type_id, D.payment_doc_no, D.payment_doc_date, A.partner_id, A.status_doc;
  693.        
  694.         --O/S follow up cash advance settlement
  695.         INSERT INTO tr_daily_cashbank
  696.         (session_id, tenant_id, cashbank_id, order_type_data,
  697.         doc_type_id, doc_type_desc, doc_no, doc_date,
  698.         mode_payment, bank_payment, no_payment, date_payment,
  699.         amount, remark, ref_id, ref_doc_type_id, ref_doc_no,
  700.         ref_doc_date, partner_name)
  701.         SELECT pSessionId, pTenantId, B.cashbank_id, 2,
  702.         A.doc_type_id, f_get_doc_desc(A.doc_type_id), A.doc_no, A.doc_date,
  703.         B.mode_payment, B.bank_payment, B.no_payment, B.date_payment,
  704.         (-1 * B.cashbank_amount),
  705.         CASE WHEN (A.status_doc = vStatusDraft) THEN
  706.             vDraft
  707.         ELSE
  708.             vInProgress
  709.         END
  710.         || vNewLine || A.remark AS remark,
  711.         A.ref_id, A.ref_doc_type_id, D.payment_doc_no,
  712.         D.payment_doc_date, f_get_partner_name(A.partner_id) AS partner_name
  713.         FROM cb_in_out_cashbank A
  714.         INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  715.         LEFT OUTER JOIN cb_in_out_cashbank_cost C ON A.in_out_cashbank_id = C.in_out_cashbank_id
  716.         LEFT OUTER JOIN cb_trx_cashbank_balance D ON A.ref_doc_type_id = D.doc_type_id AND A.ref_id = D.trx_cashbank_balance_id
  717.         WHERE A.tenant_id = pTenantId
  718.         AND B.cashbank_id = pCashbankId
  719.         AND A.doc_date BETWEEN pDateStart AND pDateEnd
  720.         AND A.status_doc IN (vStatusDraft, vStatusInProgress)
  721.         AND A.doc_type_id = vDocTypeFollowUpCashAdvanceSettlement
  722.         AND A.ref_amount > 0
  723.         GROUP BY B.cashbank_id, A.doc_type_id, A.doc_no, A.doc_date, B.mode_payment, B.bank_payment, B.no_payment, B.date_payment, A.type_in_out_cashbank,
  724.             B.cashbank_amount, A.remark, A.ref_id, A.ref_doc_type_id, D.payment_doc_no, D.payment_doc_date, A.partner_id, A.ref_amount, A.status_doc;
  725.        
  726.     END IF;
  727.    
  728.     --Adrian, Sep 19, 2017, O/S cash bank in
  729.     IF (pStatusDoc = vStatusApprovedDocAndOsCbIn)
  730.         OR (pStatusDoc = vAllStatusDoc) THEN
  731.        
  732.         --O/S cb trf
  733.         INSERT INTO tr_daily_cashbank
  734.         (session_id, tenant_id, cashbank_id, order_type_data,
  735.         doc_type_id, doc_type_desc, doc_no, doc_date,
  736.         mode_payment, bank_payment, no_payment, date_payment,
  737.         amount, remark)
  738.         SELECT pSessionId, pTenantId, pCashbankId, 2,
  739.         B.doc_type_id, f_get_doc_desc(B.doc_type_id), B.doc_no, B.doc_date,
  740.         A.mode_payment, A.bank_payment, A.no_payment, A.date_payment,
  741.         A.receive_amount,
  742.         CASE WHEN (B.status_doc = vStatusDraft) THEN
  743.             vDraft
  744.         ELSE
  745.             vInProgress
  746.         END
  747.         || vNewLine || A.remark AS remark
  748.         FROM cb_transfer_cashbank_receive A
  749.         INNER JOIN cb_transfer_cashbank B ON A.transfer_cashbank_id = B.transfer_cashbank_id
  750.         WHERE B.tenant_id = pTenantId
  751.         AND A.cashbank_to_id = pCashbankId
  752.         AND B.status_doc IN (vStatusDraft, vStatusInProgress)
  753.         AND B.doc_date BETWEEN pDateStart AND pDateEnd;
  754.        
  755.         --O/S cash bank in AR
  756.         INSERT INTO tr_daily_cashbank
  757.         (session_id, tenant_id, cashbank_id, order_type_data,
  758.         doc_type_id, doc_type_desc, doc_no, doc_date,
  759.         mode_payment, bank_payment, no_payment, date_payment,
  760.         amount, remark, ref_id, ref_doc_type_id, ref_doc_no, ref_doc_date,
  761.         partner_name)
  762.         SELECT pSessionId, pTenantId, B.cashbank_id, 2,
  763.         A.doc_type_id, f_get_doc_desc(A.doc_type_id), A.doc_no, A.doc_date,
  764.         B.mode_payment, B.bank_payment, B.no_payment, B.date_payment,
  765.         B.cashbank_amount - SUM(COALESCE(C.cost_amount, 0)),
  766.         CASE WHEN (A.status_doc = vStatusDraft) THEN
  767.             vDraft
  768.         ELSE
  769.             vInProgress
  770.         END
  771.         || vNewLine || A.remark AS remark,
  772.         A.ref_id, A.ref_doc_type_id, D.payment_doc_no, D.payment_doc_date, f_get_partner_name(A.partner_id)
  773.         FROM cb_in_out_cashbank A
  774.         INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  775.         LEFT OUTER JOIN cb_in_out_cashbank_cost C ON A.in_out_cashbank_id = C.in_out_cashbank_id
  776.         LEFT OUTER JOIN cb_trx_cashbank_balance D ON A.ref_doc_type_id = D.doc_type_id AND A.ref_id = D.trx_cashbank_balance_id
  777.         WHERE A.tenant_id = pTenantId
  778.         AND B.cashbank_id = pCashbankId
  779.         AND A.doc_date BETWEEN pDateStart AND pDateEnd
  780.         AND A.status_doc IN (vStatusDraft, vStatusInProgress)
  781.         AND A.doc_type_id = vDocTypeCashBankInAr
  782.         GROUP BY B.cashbank_id, A.doc_type_id, A.doc_no, A.doc_date, B.mode_payment, B.bank_payment, B.no_payment, B.date_payment, A.type_in_out_cashbank, B.cashbank_amount, A.remark, A.ref_id, A.ref_doc_type_id, D.payment_doc_no, D.payment_doc_date, A.partner_id, A.status_doc;
  783.        
  784.         --O/S cash bank in other
  785.         INSERT INTO tr_daily_cashbank
  786.         (session_id, tenant_id, cashbank_id, order_type_data,
  787.         doc_type_id, doc_type_desc, doc_no, doc_date,
  788.         mode_payment, bank_payment, no_payment, date_payment,
  789.         amount, remark, ref_id, ref_doc_type_id, ref_doc_no, ref_doc_date,
  790.         partner_name)
  791.         SELECT pSessionId, pTenantId, B.cashbank_id, 2,
  792.         A.doc_type_id, f_get_doc_desc(A.doc_type_id), A.doc_no, A.doc_date,
  793.         B.mode_payment, B.bank_payment, B.no_payment, B.date_payment,
  794.         B.cashbank_amount,
  795.         CASE WHEN (A.status_doc = vStatusDraft) THEN
  796.             vDraft
  797.         ELSE
  798.             vInProgress
  799.         END
  800.         || vNewLine || A.remark AS remark,
  801.         A.ref_id, A.ref_doc_type_id, D.payment_doc_no, D.payment_doc_date, 
  802.         f_get_partner_name(A.partner_id)
  803.         FROM cb_in_out_cashbank A
  804.         INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  805.         LEFT OUTER JOIN cb_in_out_cashbank_cost C ON A.in_out_cashbank_id = C.in_out_cashbank_id
  806.         LEFT OUTER JOIN cb_trx_cashbank_balance D ON A.ref_doc_type_id = D.doc_type_id AND A.ref_id = D.trx_cashbank_balance_id
  807.         WHERE A.tenant_id = pTenantId
  808.         AND B.cashbank_id = pCashbankId
  809.         AND A.doc_date BETWEEN pDateStart AND pDateEnd
  810.         AND A.status_doc IN (vStatusDraft, vStatusInProgress)
  811.         AND A.doc_type_id = vDocTypeCashBankInOther
  812.         GROUP BY B.cashbank_id, A.doc_type_id, A.doc_no, A.doc_date, B.mode_payment, B.bank_payment, B.no_payment, B.date_payment, A.type_in_out_cashbank, B.cashbank_amount, A.remark, A.ref_id, A.ref_doc_type_id, D.payment_doc_no, D.payment_doc_date, A.partner_id, A.status_doc;
  813.        
  814.         -- edc settlement
  815.         INSERT INTO tr_daily_cashbank
  816.         (session_id, tenant_id, cashbank_id, order_type_data,
  817.         doc_type_desc, doc_no, doc_date,
  818.         mode_payment, bank_payment, no_payment, date_payment,
  819.         amount, remark, ref_id, ref_doc_type_id, ref_doc_no, ref_doc_date,
  820.         partner_name)
  821.         SELECT pSessionId, pTenantId, B.cashbank_id, 2,
  822.         f_get_doc_desc(A.doc_type_id), A.doc_no, A.doc_date,
  823.         B.mode_payment, B.bank_payment, A.doc_no, A.doc_date,
  824.         B.cashbank_amount,
  825.         CASE WHEN (A.status_doc = vStatusDraft) THEN
  826.             vDraft
  827.         ELSE
  828.             vInProgress
  829.         END
  830.         || vNewLine || A.remark AS remark,
  831.         A.ref_id, A.ref_doc_type_id, D.payment_doc_no, D.payment_doc_date, 
  832.         f_get_partner_name(A.partner_id)
  833.         FROM cb_in_out_cashbank A
  834.         INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  835.         LEFT OUTER JOIN cb_in_out_cashbank_cost C ON A.in_out_cashbank_id = C.in_out_cashbank_id
  836.         LEFT OUTER JOIN cb_trx_cashbank_balance D ON A.ref_doc_type_id = D.doc_type_id AND A.ref_id = D.trx_cashbank_balance_id
  837.         WHERE A.tenant_id = pTenantId
  838.         AND B.cashbank_id = pCashbankId
  839.         AND A.doc_date BETWEEN pDateStart AND pDateEnd
  840.         AND A.status_doc IN (vStatusDraft, vStatusInProgress)
  841.         AND A.doc_type_id = vDocTypeEdcSettlement
  842.         GROUP BY B.cashbank_id, A.doc_type_id, A.doc_no, A.doc_date, B.mode_payment, B.bank_payment, B.no_payment, B.date_payment, A.type_in_out_cashbank, B.cashbank_amount, A.remark, A.ref_id, A.ref_doc_type_id, D.payment_doc_no, D.payment_doc_date, A.partner_id, A.status_doc;
  843.        
  844.         --O/S follow up cash advance settlement
  845.         INSERT INTO tr_daily_cashbank
  846.         (session_id, tenant_id, cashbank_id, order_type_data,
  847.         doc_type_id, doc_type_desc, doc_no, doc_date,
  848.         mode_payment, bank_payment, no_payment, date_payment,
  849.         amount, remark, ref_id, ref_doc_type_id, ref_doc_no,
  850.         ref_doc_date, partner_name)
  851.         SELECT pSessionId, pTenantId, B.cashbank_id, 2,
  852.         A.doc_type_id, f_get_doc_desc(A.doc_type_id), A.doc_no, A.doc_date,
  853.         B.mode_payment, B.bank_payment, B.no_payment, B.date_payment,
  854.         B.cashbank_amount,
  855.         CASE WHEN (A.status_doc = vStatusDraft) THEN
  856.             vDraft
  857.         ELSE
  858.             vInProgress
  859.         END
  860.         || vNewLine || A.remark AS remark,
  861.         A.ref_id, A.ref_doc_type_id, D.payment_doc_no,
  862.         D.payment_doc_date, f_get_partner_name(A.partner_id) AS partner_name
  863.         FROM cb_in_out_cashbank A
  864.         INNER JOIN cb_in_out_cashbank_payment B ON A.in_out_cashbank_id = B.in_out_cashbank_id
  865.         LEFT OUTER JOIN cb_in_out_cashbank_cost C ON A.in_out_cashbank_id = C.in_out_cashbank_id
  866.         LEFT OUTER JOIN cb_trx_cashbank_balance D ON A.ref_doc_type_id = D.doc_type_id AND A.ref_id = D.trx_cashbank_balance_id
  867.         WHERE A.tenant_id = pTenantId
  868.         AND B.cashbank_id = pCashbankId
  869.         AND A.doc_date BETWEEN pDateStart AND pDateEnd
  870.         AND A.status_doc IN (vStatusDraft, vStatusInProgress)
  871.         AND A.doc_type_id = vDocTypeFollowUpCashAdvanceSettlement
  872.         AND A.ref_amount < 0
  873.         GROUP BY B.cashbank_id, A.doc_type_id, A.doc_no, A.doc_date, B.mode_payment, B.bank_payment, B.no_payment, B.date_payment, A.type_in_out_cashbank,
  874.             B.cashbank_amount, A.remark, A.ref_id, A.ref_doc_type_id, D.payment_doc_no, D.payment_doc_date, A.partner_id, A.ref_amount, A.status_doc;
  875.        
  876.     END IF;
  877.        
  878.     /*
  879.      * ambil data transaksi penjualan pos dan return pos untuk cash payment
  880.      */
  881.     INSERT INTO tr_kartu_kas_by_doc_type
  882.     (session_id, sort_no, tenant_id, ou_id, doc_type_id, doc_desc, ref_id,
  883.     doc_no, doc_date, partner_id, cashbank_id, cashbank_target_id, curr_code,
  884.     amount_debit, amount_credit)
  885.     SELECT pSessionId, 2, A.tenant_id, A.ou_id, A.doc_type_id, C.doc_desc, A.trx_pos_id,
  886.         A.doc_no, A.doc_date, A.partner_id, D.cashbank_id, D.cashbank_id, D.curr_code,
  887.         SUM(B.conversion_amount), 0
  888.     FROM i_trx_pos A, i_trx_pos_cash_payment B, m_document C, m_cashbank D, m_cashbank_ou E
  889.     WHERE A.tenant_id = pTenantId AND
  890.         --A.ou_id = pOuId AND
  891.         A.doc_date BETWEEN pDateStart AND pDateEnd AND
  892.         A.doc_type_id IN (vDocTypePosShop, vDocTypePosShopInShop) AND
  893.         A.trx_pos_id = B.trx_pos_id AND
  894.         A.tenant_id = B.tenant_id AND
  895.         A.process_no = B.process_no AND
  896.         B.curr_payment_code = D.curr_code AND
  897.         D.flg_cash_bank = 'C' AND
  898.         D.cashbank_id = E.cashbank_id AND
  899.         A.ou_id = E.ou_id AND
  900.         A.doc_type_id = C.doc_type_id AND
  901.         D.cashbank_id = pCashbankId
  902.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, C.doc_desc, A.trx_pos_id, A.doc_no, A.doc_date, A.partner_id, D.cashbank_id, D.curr_code;
  903.  
  904.     INSERT INTO tr_kartu_kas_by_doc_type
  905.     (session_id, sort_no, tenant_id, ou_id, doc_type_id, doc_desc, ref_id,
  906.     doc_no, doc_date, partner_id, cashbank_id, cashbank_target_id, curr_code,
  907.     amount_debit, amount_credit)
  908.     SELECT pSessionId, 2, A.tenant_id, A.ou_id, A.doc_type_id, C.doc_desc, A.trx_pos_id,
  909.         A.doc_no, A.doc_date, A.partner_id, D.cashbank_id, D.cashbank_id, D.curr_code,
  910.         SUM(B.conversion_amount), 0
  911.     FROM i_trx_pos A, i_trx_pos_cash_payment B, m_document C, m_cashbank D, m_cashbank_ou E
  912.     WHERE A.tenant_id = pTenantId AND
  913.         --A.ou_id = pOuId AND
  914.         A.doc_date BETWEEN pDateStart AND pDateEnd AND
  915.         A.doc_type_id IN (vDocTypeReturnPosShop, vDocTypeReturnPosShopInShop) AND
  916.         A.trx_pos_id = B.trx_pos_id AND
  917.         A.tenant_id = B.tenant_id AND
  918.         A.process_no = B.process_no AND
  919.         B.curr_payment_code = D.curr_code AND
  920.         D.flg_cash_bank = 'C' AND
  921.         D.cashbank_id = E.cashbank_id AND
  922.         A.ou_id = E.ou_id AND
  923.         A.doc_type_id = C.doc_type_id AND
  924.         D.cashbank_id = pCashbankId
  925.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, C.doc_desc, A.trx_pos_id, A.doc_no, A.doc_date, A.partner_id, D.cashbank_id, D.curr_code;
  926.  
  927.     /*
  928.      * ambil data transaksi penjualan pos dan return pos untuk pengembalian cash
  929.      */
  930.     INSERT INTO tr_kartu_kas_by_doc_type
  931.     (session_id, sort_no, tenant_id, ou_id, doc_type_id, doc_desc, ref_id,
  932.     doc_no, doc_date, partner_id, cashbank_id, cashbank_target_id, curr_code,
  933.     amount_debit, amount_credit)
  934.     SELECT pSessionId, 2, A.tenant_id, A.ou_id, A.doc_type_id, C.doc_desc, A.trx_pos_id,
  935.         A.doc_no, A.doc_date, A.partner_id, D.cashbank_id, D.cashbank_id, D.curr_code,
  936.         0, SUM(A.total_refund)
  937.     FROM i_trx_pos A, m_document C, m_cashbank D, m_cashbank_ou E
  938.     WHERE A.tenant_id = pTenantId AND
  939.         --A.ou_id = pOuId AND
  940.         A.doc_date BETWEEN pDateStart AND pDateEnd AND
  941.         A.doc_type_id IN (vDocTypePosShop, vDocTypePosShopInShop) AND
  942.         A.curr_code = D.curr_code AND
  943.         D.flg_cash_bank = 'C' AND
  944.         D.cashbank_id = E.cashbank_id AND
  945.         A.ou_id = E.ou_id AND
  946.         A.doc_type_id = C.doc_type_id AND
  947.         D.cashbank_id = pCashbankId
  948.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, C.doc_desc, A.trx_pos_id, A.doc_no, A.doc_date, A.partner_id, D.cashbank_id, D.curr_code;
  949.  
  950.     INSERT INTO tr_kartu_kas_by_doc_type
  951.     (session_id, sort_no, tenant_id, ou_id, doc_type_id, doc_desc, ref_id,
  952.     doc_no, doc_date, partner_id, cashbank_id, cashbank_target_id, curr_code,
  953.     amount_debit, amount_credit)
  954.     SELECT pSessionId, 2, A.tenant_id, A.ou_id, A.doc_type_id, C.doc_desc, A.trx_pos_id,
  955.         A.doc_no, A.doc_date, A.partner_id, D.cashbank_id, D.cashbank_id, D.curr_code,
  956.         0, SUM(A.total_refund)
  957.     FROM i_trx_pos A, m_document C, m_cashbank D, m_cashbank_ou E
  958.     WHERE A.tenant_id = pTenantId AND
  959.         --A.ou_id = pOuId AND
  960.         A.doc_date BETWEEN pDateStart AND pDateEnd AND
  961.         A.doc_type_id IN (vDocTypeReturnPosShop, vDocTypeReturnPosShopInShop) AND
  962.         A.curr_code = D.curr_code AND
  963.         D.flg_cash_bank = 'C' AND
  964.         D.cashbank_id = E.cashbank_id AND
  965.         A.ou_id = E.ou_id AND
  966.         A.doc_type_id = C.doc_type_id AND
  967.         D.cashbank_id = pCashbankId
  968.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, C.doc_desc, A.trx_pos_id, A.doc_no, A.doc_date, A.partner_id, D.cashbank_id, D.curr_code;
  969.    
  970.     INSERT INTO tr_daily_cashbank
  971.         (session_id, tenant_id, cashbank_id, order_type_data,
  972.         doc_type_id, doc_type_desc, doc_no, doc_date,
  973.         mode_payment, bank_payment, no_payment, date_payment,
  974.         amount)
  975.     SELECT pSessionId, pTenantId, A.cashbank_id, 2,
  976.            A.doc_type_id, f_get_doc_desc(A.doc_type_id), A.doc_no, A.doc_date,
  977.            'CASH', ' ', ' ', ' ',
  978.            SUM(A.amount_debit) - SUM(A.amount_credit)
  979.     FROM tr_kartu_kas_by_doc_type A
  980.     WHERE A.session_id = pSessionId
  981.     GROUP BY A.cashbank_id, A.doc_type_id, A.doc_no, A.doc_date;
  982.    
  983.     INSERT INTO tr_daily_cashbank
  984.         (session_id, tenant_id, cashbank_id, order_type_data,
  985.         doc_type_id, doc_type_desc, doc_no, doc_date,
  986.         mode_payment, bank_payment, no_payment, date_payment,
  987.         amount)
  988.     SELECT pSessionId, pTenantId, A.cashbank_id, 2,
  989.            A.doc_type_id, f_get_doc_desc(A.doc_type_id), 'VOID ' || A.doc_no, A.doc_date,
  990.            'CASH', ' ', ' ', ' ',
  991.            -1 * (SUM(A.amount_debit) - SUM(A.amount_credit))
  992.     FROM tr_kartu_kas_by_doc_type A
  993.     WHERE A.session_id = pSessionId
  994.     AND EXISTS (SELECT 1 FROM i_trx_log_voided_pos B
  995.                     WHERE A.tenant_id = B.tenant_id AND
  996.                     A.doc_no = B.doc_no AND
  997.                     A.doc_date = B.doc_date AND
  998.                     A.ou_id = B.ou_id)
  999.     GROUP BY A.cashbank_id, A.doc_type_id, A.doc_no, A.doc_date;
  1000.  
  1001.     SELECT COUNT(1) INTO vCount
  1002.     FROM tr_daily_cashbank
  1003.     WHERE session_id = pSessionId AND order_type_data = 1;
  1004.  
  1005.     IF vCount = 0 THEN
  1006.         INSERT INTO tr_daily_cashbank
  1007.         (session_id, tenant_id, cashbank_id, order_type_data,
  1008.         doc_type_desc, doc_no, doc_date,
  1009.         mode_payment, bank_payment, no_payment, date_payment,
  1010.         amount)
  1011.         SELECT pSessionId, pTenantId, pCashbankId, 1, 'Beginning Balance', 'Beginning Balance', pDateStart,
  1012.         ' ', ' ', ' ', ' ',
  1013.         0;
  1014.     END IF;
  1015.                    
  1016.     Open pRefHeader FOR
  1017.     SELECT pOuId AS ou_id, f_get_ou_code(pOuId) AS ou_code, f_get_ou_name(pOuId) AS ou_name, pDateStart AS date_start, pDateEnd AS date_end,
  1018.            pDateStart AS date_trx, f_get_username(pUserId) AS username, pDatetime AS datetime,
  1019.            pCashbankId AS cashbank_id, A.cashbank_code AS cashbank_code, A.cashbank_name AS cashbank_name,
  1020.            A.bank_code AS bank_code, A.account_no AS account_no, A.account_name1 AS account_name1, A.account_name2 AS account_name2,
  1021.            A.curr_code AS curr_code
  1022.     FROM m_cashbank A WHERE A.cashbank_id = pCashBankId;
  1023.            
  1024.     RETURN NEXT pRefHeader;
  1025.  
  1026.     Open pRefDetail FOR
  1027.     SELECT A.doc_type_desc AS doc_type_desc, A.doc_date AS doc_date, A.doc_no AS doc_no,
  1028.            A.mode_payment AS mode_payment, A.bank_payment AS bank_payment,
  1029.            A.ref_doc_date AS ref_doc_date, A.ref_doc_no AS ref_doc_no,
  1030.            CASE WHEN (A.no_payment = '-') THEN '' ELSE A.no_payment END AS no_payment,
  1031.            CASE WHEN (A.amount > 0 ) THEN A.amount ELSE 0 END AS debit,
  1032.            CASE WHEN (A.amount < 0 ) THEN -1 * A.amount ELSE 0 END AS credit,
  1033.            SUM(A.amount) OVER (ORDER BY A.order_type_data, A.doc_date, A.doc_no) AS amount,
  1034.            A.remark, A.partner_name,
  1035.            (CASE WHEN length(TRIM(A.remark)) = 0 THEN (CEIL(1/36.0))*21 ELSE ((CEIL(length(SPLIT_PART(TRIM(A.remark), vNewLine, 2))/36.0))*21)+21 END) AS height
  1036.     FROM tr_daily_cashbank A
  1037.     WHERE A.session_id = pSessionId
  1038.     AND A.tenant_id = pTenantId
  1039.     GROUP BY A.doc_type_desc, A.doc_date, A.doc_no, A.mode_payment, A.bank_payment, A.ref_doc_date, A.ref_doc_no, A.order_type_data, A.amount, A.remark, A.partner_name, A.no_payment
  1040.     ORDER BY A.order_type_data, A.doc_date, A.doc_no;
  1041.    
  1042.     RETURN NEXT pRefDetail;
  1043.    
  1044.     DELETE FROM tr_daily_cashbank WHERE session_id = pSessionId;
  1045.     DELETE FROM tr_kartu_kas_by_doc_type WHERE session_id = pSessionId;
  1046.    
  1047. END;
  1048. $BODY$
  1049.   LANGUAGE plpgsql VOLATILE
  1050.   COST 100;
  1051.   /
Add Comment
Please, Sign In to add comment