aadddrr

r_report_daily_cashbank_20170920_1

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