Advertisement
dchrissandy

Untitled

Apr 23rd, 2020
1,747
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 48.39 KB | None | 0 0
  1. -- Function: public.i_ho_process_pos_shop(bigint, character varying, character varying)
  2.  
  3. -- DROP FUNCTION public.i_ho_process_pos_shop(bigint, character varying, character varying);
  4.  
  5. CREATE OR REPLACE FUNCTION public.i_ho_process_pos_shop(
  6.     BIGINT,
  7.     CHARACTER VARYING,
  8.     CHARACTER VARYING)
  9.   RETURNS void AS
  10. $BODY$
  11. DECLARE
  12.     pTenantId           ALIAS FOR $1;
  13.     pSessionId          ALIAS FOR $2;
  14.     pProcessNo          ALIAS FOR $3;
  15.  
  16. /*
  17.     pTenantId           ALIAS FOR $1;
  18.     pSessionId          ALIAS FOR $2;
  19.     pProcessNo          ALIAS FOR $3;
  20.     pOutletId           ALIAS FOR $4;
  21.     pOuId               ALIAS FOR $5;
  22.     pWarehouseId        ALIAS FOR $6;
  23.     pDatetime           ALIAS FOR $7;
  24.     pUserId             ALIAS FOR $8;
  25. */
  26.     vFlagNo             CHARACTER VARYING(1);
  27.     vProductStatus      CHARACTER VARYING(5);
  28.     vEmptyId            BIGINT;
  29.     vDocTypeAdjStock    BIGINT;
  30.     vFlagCash           CHARACTER VARYING(1);
  31.     vDebitType          CHARACTER VARYING(1);
  32.     vFlagYes            CHARACTER VARYING(1);
  33.     vEmptyValue     CHARACTER VARYING(1);  
  34.     vJournalType        CHARACTER VARYING(20);
  35.     vJournalTypeDoPos       CHARACTER VARYING(20);
  36.     vJournalTypeAdjStock    CHARACTER VARYING(20);     
  37.     vSignDebit          CHARACTER VARYING(1);
  38.     vSignCredit         CHARACTER VARYING(1);
  39.     vTypeRate           CHARACTER VARYING(3);
  40.     vProductCOA         CHARACTER VARYING(10);
  41.     vSystemCOA          CHARACTER VARYING(10);
  42.     vTaxCOA             CHARACTER VARYING(10);
  43.     vCashBankCOA        CHARACTER VARYING(10);
  44.     vDocTypeDoPos           BIGINT;
  45.     vRounding           INTEGER;
  46.     vParentOuId         BIGINT;
  47.     vActivityCOA        CHARACTER VARYING(10);
  48.     vStatusPos          CHARACTER VARYING(1);
  49.     vStatusDraft        CHARACTER VARYING(1);  
  50.     vActivityChargesId  BIGINT;
  51.    
  52.     vProcessId          BIGINT;
  53.     pOutletId           BIGINT;
  54.     pOuId               BIGINT;
  55.     pWarehouseId        BIGINT;
  56.     pDatetime           CHARACTER VARYING(14);
  57.     pUserId             BIGINT;
  58.    
  59.     vDocJournalDoPos        DOC_JOURNAL%ROWTYPE;
  60.     vDocJournalAdjStock     DOC_JOURNAL%ROWTYPE;   
  61.     vOuStructure            OU_BU_STRUCTURE%ROWTYPE;
  62.     RESULT                  RECORD;
  63.     vLedgerCode             CHARACTER VARYING(10)
  64.    
  65.     vPosDocTypeId BIGINT;
  66.     vRoundingModeNonTax CHARACTER VARYING(5);
  67.    
  68.     vFlgPkp                 CHARACTER VARYING;
  69.     vCountBelumDiBayar      NUMERIC;
  70.     vDefaultRoleId          BIGINT;
  71.     vFlowArDebtNoteId       BIGINT;
  72.     vDebtNoteARDocScheme    CHARACTER VARYING(10);
  73.     vStateDraft             CHARACTER VARYING(10);
  74.     vFlagRole               CHARACTER VARYING(1);
  75.     vDocTypeDebtNoteAr      BIGINT;
  76.     vCount                  CHARACTER VARYING;
  77.     vTotalTaxItem           NUMERIC;
  78.     vTotalTaxItemNempil     NUMERIC;
  79.  
  80. BEGIN
  81.    
  82.     vDocTypeDebtNoteAr := 241;
  83.     vFlagRole := 'R';
  84.     vStateDraft := 'DRAFT';
  85.     vDebtNoteARDocScheme := 'DF01';
  86.     vCountBelumDiBayar := 0;
  87.     vTotalTaxItem := 0;
  88.     vTotalTaxItemNempil := 0;
  89.     vFlgPkp := 'N';
  90.     vStatusPos := 'S';
  91.     vFlagNo := 'N';
  92.     vProductStatus := 'GOOD';
  93.     vEmptyId := -99;
  94.     vDocTypeAdjStock := 413;
  95.     vFlagCash := 'C';
  96.     vDebitType := 'D';
  97.     vFlagYes := 'Y';
  98.     vEmptyValue := ' ';
  99.     vJournalType := 'POS.SHOP';
  100.     vSignDebit := 'D';
  101.     vSignCredit := 'C';
  102.     vTypeRate := 'COM';
  103.     vProductCOA := 'PRODUCT';
  104.     vSystemCOA := 'SYSTEM';
  105.     vTaxCOA := 'TAX';
  106.     vCashBankCOA := 'CASHBANK';
  107.     vParentOuId := -99;
  108.     vActivityCOA := 'ACTIVITY'; -- DanieL : tambahan sementara agar tidak error
  109.     --vActivityChargesId := 2;
  110.     vActivityChargesId := f_get_value_system_config_by_param_code(pTenantId, 'CHARGES');   
  111.    
  112.     vPosDocTypeId := 401;
  113.     SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingModeNonTax;
  114.    
  115.    
  116.     SELECT A.process_message_id INTO vProcessId
  117.     FROM t_process_message A
  118.     WHERE A.tenant_id = pTenantId AND
  119.         A.process_name = 'i_ho_process_pos_shop' AND
  120.         A.process_no = pProcessNo;
  121.        
  122.     SELECT CAST(A.process_parameter_value AS BIGINT) INTO pOutletId
  123.     FROM t_process_parameter A
  124.     WHERE A.process_message_id = vProcessId AND
  125.         A.process_parameter_key = 'outletId';
  126.    
  127.     SELECT CAST(A.process_parameter_value AS BIGINT) INTO pOuId
  128.     FROM t_process_parameter A
  129.     WHERE A.process_message_id = vProcessId AND
  130.         A.process_parameter_key = 'ouId';
  131.        
  132.     SELECT CAST(A.process_parameter_value AS BIGINT) INTO pWarehouseId
  133.     FROM t_process_parameter A
  134.     WHERE A.process_message_id = vProcessId AND
  135.         A.process_parameter_key = 'warehouseId';
  136.        
  137.     SELECT CAST(A.process_parameter_value AS BIGINT) INTO pUserId
  138.     FROM t_process_parameter A
  139.     WHERE A.process_message_id = vProcessId AND
  140.         A.process_parameter_key = 'userId';
  141.  
  142.     SELECT CAST(A.process_parameter_value AS CHARACTER VARYING(14)) INTO pDatetime
  143.     FROM t_process_parameter A
  144.     WHERE A.process_message_id = vProcessId AND
  145.         A.process_parameter_key = 'datetime';
  146.    
  147.     /*
  148.      * jenis transaksi bayangan untuk Delivery Order POS untuk kepentingan jurnal inventory POS
  149.      */
  150.     vDocTypeDoPos := 431;
  151.     vStatusDraft := 'D';
  152.     vLedgerCode := 'SALES';
  153.  
  154.     SELECT f_get_ou_bu_structure(pOuId) AS ou, f_get_document_journal(vDocTypeDoPos) AS doc_do_pos, f_get_document_journal(vDocTypeAdjStock) AS doc_adj_stock
  155.         INTO RESULT;
  156.  
  157.     vOuStructure := RESULT.ou;
  158.     vDocJournalDoPos := RESULT.doc_do_pos;
  159.     vDocJournalAdjStock := RESULT.doc_adj_stock;   
  160.    
  161.     /*
  162.      * rounding nilai tax
  163.      */
  164.     vRounding := 0;
  165.    
  166.     -- get flag_pkp
  167.     SELECT C.flg_pkp INTO vFlgPkp
  168.     FROM m_ou_structure A
  169.     INNER JOIN t_ou B ON A.ou_bu_id = B.ou_id
  170.     INNER JOIN t_ou_legal C ON B.ou_id = C.ou_id AND B.tenant_id = C.tenant_id
  171.     WHERE A.ou_id = pOuId AND B.tenant_id = pTenantId;
  172.    
  173.     -- cek LUNAS , jika count = 0 berarti LUNAS
  174.     -- lUNAS = guest atau corporate bayar lunas    
  175.     -- get Lunas
  176.     SELECT COUNT(1) INTO vCountBelumDiBayar
  177.     FROM
  178.     i_trx_pos A
  179.     INNER JOIN i_trx_pos_termin_payment B ON A.tenant_id = B.tenant_id AND A.process_no = B.process_no AND A.trx_pos_id = B.trx_pos_id
  180.     INNER JOIN t_ou C ON A.ou_id = C.ou_id AND A.tenant_id = C.tenant_id
  181.     WHERE A.tenant_id = pTenantId
  182.         AND A.process_no = pProcessNo
  183.         AND A.ou_id = pOuId
  184.         AND B.under_payment_amount > 0;
  185.    
  186.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;
  187.        
  188.     DELETE FROM i_tt_pos_cash_balance WHERE session_id = pSessionId;
  189.    
  190.     DELETE FROM i_tt_pos_product_balance_stock WHERE session_id = pSessionId;
  191.    
  192.     DELETE FROM i_tt_nempil_barang_balance_stock WHERE session_id = pSessionId;
  193.    
  194.     /*
  195.      * buat data product pos yang akan digunakan untuk buat log product balance stock dan
  196.      * update product balance stock
  197.      * 1.product yang bukan product assembly ( product balance id <> -99 ) -- Didit : bukan service (product balance id <> -99)  
  198.      * 2.product assembly ( dari i_trx_pos_assembly_product )
  199.      */
  200.     INSERT INTO i_tt_pos_product_balance_stock
  201.     (session_id, tenant_id, ou_id, doc_type_id, ref_id, partner_id,
  202.     doc_no, doc_date, product_id, warehouse_id,
  203.     product_balance_id, product_status, base_uom_id, qty)
  204.     SELECT pSessionId, A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id, vEmptyId,
  205.         A.doc_no, A.doc_date, B.product_id, pWarehouseId,
  206.         B.product_balance_id, vProductStatus, B.base_uom_id, SUM(B.qty)
  207.     FROM i_trx_pos A, i_trx_pos_item B
  208.     WHERE A.tenant_id = pTenantId AND
  209.         A.ou_id = pOuId AND
  210.         A.process_no = pProcessNo AND
  211.         A.STATUS = vStatusPos AND
  212.         A.process_no = B.process_no AND
  213.         A.trx_pos_id = B.trx_pos_id AND
  214.         A.tenant_id = B.tenant_id AND
  215.         B.product_balance_id <> vEmptyId
  216.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id,
  217.         A.doc_no, A.doc_date, B.product_id, B.product_balance_id, B.base_uom_id;
  218.    
  219.     /*
  220.      * insert log product balance stock berdasarkan data tampung di i_tt_pos_product_balance_stock
  221.      */    
  222.     INSERT INTO in_log_product_balance_stock
  223.     (tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date,
  224.      partner_id, product_id, warehouse_id, product_balance_id, product_status,
  225.      base_uom_id, qty, VERSION, create_datetime, create_user_id, update_datetime, update_user_id)
  226.     SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  227.         A.partner_id, A.product_id, A.warehouse_id, A.product_balance_id, A.product_status,
  228.         A.base_uom_id, SUM(A.qty) * -1, 0, pDatetime, pUserId, pDatetime, pUserId
  229.     FROM i_tt_pos_product_balance_stock A
  230.     WHERE A.session_id = pSessionId
  231.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  232.         A.partner_id, A.product_id, A.warehouse_id, A.product_balance_id, A.product_status, A.base_uom_id ;
  233.    
  234.     /*
  235.      * update product balance stock berdasarkan data tampung di i_tt_pos_product_balance_stock
  236.      */
  237.     WITH i_tt_pos_product_balance_stock_for_update_current AS (
  238.         SELECT pSessionId AS session_id, A.tenant_id, A.warehouse_id, A.product_id, A.product_balance_id, A.product_status, SUM(A.qty) AS qty
  239.         FROM i_tt_pos_product_balance_stock A
  240.         WHERE A.tenant_id = pTenantId
  241.         AND A.session_id = pSessionId
  242.         GROUP BY A.tenant_id, A.warehouse_id, A.product_id, A.product_balance_id, A.product_status
  243.     )      
  244.     UPDATE in_product_balance_stock SET qty = in_product_balance_stock.qty - A.qty, update_datetime = pDatetime , update_user_id = pUserId,
  245.         VERSION = in_product_balance_stock.VERSION + 1
  246.     FROM i_tt_pos_product_balance_stock_for_update_current A
  247.     WHERE A.session_id = pSessionId AND
  248.         A.tenant_id = in_product_balance_stock.tenant_id AND
  249.         A.warehouse_id = in_product_balance_stock.warehouse_id AND
  250.         A.product_id = in_product_balance_stock.product_id AND
  251.         A.product_balance_id = in_product_balance_stock.product_balance_id AND
  252.         A.product_status = in_product_balance_stock.product_status;
  253.    
  254.     /*
  255.      * update stock nempil barang
  256.      */
  257.     INSERT INTO i_tt_nempil_barang_balance_stock
  258.     (session_id, tenant_id, ou_id, doc_type_id,
  259.     doc_no, doc_date, partner_name, product_code, product_name, qty)
  260.     SELECT pSessionId, A.tenant_id, A.ou_id, A.doc_type_id,
  261.         A.doc_no, A.doc_date, f_get_partner_name(A.partner_id), B.product_code, B.product_name, SUM(B.qty) * -1
  262.     FROM i_trx_pos A, i_trx_pos_item_nempil_barang B
  263.     WHERE  A.tenant_id = pTenantId AND
  264.            A.ou_id = pOuId AND
  265.            A.process_no = pProcessNo AND
  266.            A.STATUS = vStatusPos AND                  
  267.            A.process_no = B.process_no AND
  268.            A.trx_pos_id = B.trx_pos_id AND
  269.            A.tenant_id = B.tenant_id
  270.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.partner_id,
  271.         A.doc_no, A.doc_date, B.product_code, B.product_name;  
  272.        
  273.    UPDATE p_nempil_barang_balance_stock SET qty = p_nempil_barang_balance_stock.qty + B.qty
  274.     FROM (SELECT A.tenant_id, A.ou_id, A.product_code,
  275.                 SUM(A.qty) AS qty
  276.         FROM i_tt_nempil_barang_balance_stock A
  277.         WHERE A.session_id = pSessionId
  278.         GROUP BY A.tenant_id, A.ou_id, A.product_code) B
  279.     WHERE B.tenant_id = p_nempil_barang_balance_stock.tenant_id AND
  280.         B.ou_id = p_nempil_barang_balance_stock.ou_id AND
  281.         B.product_code = p_nempil_barang_balance_stock.product_code;
  282.        
  283.     INSERT INTO p_log_nempil_barang_balance_stock
  284.     (tenant_id, ou_id, doc_type_id, doc_no, doc_date,
  285.      partner_name, product_code, product_name, qty, VERSION, create_datetime, create_user_id, update_datetime, update_user_id)
  286.     SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.doc_date,
  287.         A.partner_name, A.product_code, A.product_name, SUM(A.qty), 0, pDatetime, pUserId, pDatetime, pUserId
  288.     FROM i_tt_nempil_barang_balance_stock A
  289.     WHERE A.session_id = pSessionId
  290.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.doc_date,
  291.         A.partner_name, A.product_code, A.product_name;
  292.        
  293.     /*
  294.      * mengolah data pos untuk :
  295.      * 1.insert cb_trx_cashbank_balance  
  296.      *
  297.      * journal :
  298.      * 1.journal DO POS Shop
  299.      * 2.journal POS Shop
  300.      */
  301.    
  302.     /*
  303.      * tampung data pos cash payment untuk update ke data cb_cashbank_balance
  304.      * dan cb_trx_cashbank_balance
  305.      */
  306.     INSERT INTO i_tt_pos_cash_balance
  307.     (session_id, tenant_id, ou_id, doc_type_id, doc_no, payment_id,
  308.     partner_id, curr_code, amount,
  309.     cashbank_id, cash_bank_date, ref_doc_type_id, ref_id)
  310.     SELECT pSessionId, A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.trx_pos_id,
  311.         A.partner_id, B.curr_payment_code, SUM(B.payment_amount),
  312.         C.cashbank_id, A.doc_date, A.doc_type_id, A.trx_pos_id
  313.     FROM i_trx_pos A, i_trx_pos_cash_payment B, i_cash_bank_data_outlet C, m_cashbank D
  314.     WHERE A.tenant_id = pTenantId AND
  315.         A.ou_id = pOuId AND
  316.         A.process_no = pProcessNo AND
  317.         A.STATUS = vStatusPos AND      
  318.         A.process_no = B.process_no AND
  319.         A.trx_pos_id = B.trx_pos_id AND
  320.         A.tenant_id = B.tenant_id AND
  321.         C.outlet_id = pOutletId AND
  322.         C.cashbank_id = D.cashbank_id AND
  323.         B.curr_payment_code = D.curr_code AND
  324.         D.flg_cash_bank = vFlagCash
  325.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.trx_pos_id,
  326.         A.partner_id, B.curr_payment_code, C.cashbank_id, A.doc_date;
  327.  
  328.     /*
  329.      * tampung data pos total refund untuk update ke data cb_cashbank_balance
  330.      * dan cb_trx_cashbank_balance
  331.      */
  332.     INSERT INTO i_tt_pos_cash_balance
  333.     (session_id, tenant_id, ou_id, doc_type_id, doc_no, payment_id,
  334.     partner_id, curr_code, amount,
  335.     cashbank_id, cash_bank_date, ref_doc_type_id, ref_id)
  336.     SELECT pSessionId, A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.trx_pos_id,
  337.         A.partner_id, A.curr_code, SUM(A.total_refund) * -1,
  338.         B.cashbank_id, A.doc_date, A.doc_type_id, A.trx_pos_id
  339.     FROM i_trx_pos A, i_cash_bank_data_outlet B, m_cashbank C
  340.     WHERE A.tenant_id = pTenantId AND
  341.         A.ou_id = pOuId AND
  342.         A.process_no = pProcessNo AND
  343.         A.STATUS = vStatusPos AND
  344.         B.outlet_id = pOutletId AND
  345.         B.cashbank_id = C.cashbank_id AND
  346.         A.curr_code = C.curr_code AND
  347.         C.flg_cash_bank = vFlagCash
  348.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.trx_pos_id,
  349.         A.partner_id, A.curr_code, B.cashbank_id, A.doc_date;
  350.        
  351.     /*
  352.      * insert ke data cb_trx_cashbank_balance
  353.      */
  354.     INSERT INTO cb_trx_cashbank_balance
  355.     (tenant_id, ou_id, doc_type_id, payment_id,
  356.     payment_doc_no, payment_doc_date, payment_remark,
  357.     partner_id, partner_bank_id, curr_code, amount,
  358.     due_date, flg_payment, ref_doc_type_id, ref_id,
  359.     version, create_datetime, create_user_id, update_datetime, update_user_id)
  360.     SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.payment_id,
  361.         A.doc_no, A.cash_bank_date, vEmptyValue,
  362.         A.partner_id, vEmptyId, A.curr_code, SUM(A.amount),
  363.         A.cash_bank_date, vFlagYes, A.ref_doc_type_id, A.ref_id,
  364.         0, pDatetime, pUserId, pDatetime, pUserId
  365.     FROM i_tt_pos_cash_balance A
  366.     WHERE A.session_id = pSessionId
  367.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.payment_id, A.doc_no, A.partner_id, A.curr_code,
  368.         A.cashbank_id, A.cash_bank_date, A.ref_doc_type_id, A.ref_id;
  369.    
  370.     /*
  371.      * insert cb_cashbank_balance yang data belum ada
  372.      */    
  373.     INSERT INTO cb_cashbank_balance
  374.     (tenant_id, ou_id, cashbank_id, cash_bank_date,
  375.     rec_type, curr_code, amount,
  376.     VERSION, create_datetime, create_user_id, update_datetime, update_user_id)
  377.     SELECT A.tenant_id, D.ou_id, A.cashbank_id, A.cash_bank_date,
  378.         vDebitType, A.curr_code, 0,
  379.         0, pDatetime, pUserId, pDatetime, pUserId
  380.     FROM i_tt_pos_cash_balance A, m_cashbank_ou D
  381.     WHERE A.session_id = pSessionId AND
  382.         D.cashbank_id = A.cashbank_id AND
  383.         NOT EXISTS (SELECT 1 FROM cb_cashbank_balance B
  384.                     WHERE A.tenant_id = B.tenant_id AND
  385.                         D.ou_id = B.ou_id AND
  386.                         A.cashbank_id = B.cashbank_id AND
  387.                         A.cash_bank_date = B.cash_bank_date AND
  388.                         B.rec_type = vDebitType)
  389.     GROUP BY A.tenant_id, A.cashbank_id, A.cash_bank_date, A.curr_code, D.ou_id;
  390.  
  391.     /*
  392.      * update cb_cashbank_balance yang sudah ada
  393.      */    
  394.     UPDATE cb_cashbank_balance SET amount = cb_cashbank_balance.amount + B.amount
  395.     FROM (SELECT A.tenant_id, D.ou_id, A.cashbank_id, A.cash_bank_date, A.curr_code,
  396.                 SUM(A.amount) AS amount
  397.         FROM i_tt_pos_cash_balance A, m_cashbank_ou D
  398.         WHERE A.session_id = pSessionId AND
  399.             D.cashbank_id = A.cashbank_id
  400.         GROUP BY A.tenant_id, A.cashbank_id, A.cash_bank_date, A.curr_code, D.ou_id) B
  401.     WHERE B.tenant_id = cb_cashbank_balance.tenant_id AND
  402.         B.ou_id = cb_cashbank_balance.ou_id AND
  403.         B.cashbank_id = cb_cashbank_balance.cashbank_id AND
  404.         B.cash_bank_date = cb_cashbank_balance.cash_bank_date AND
  405.         B.curr_code = cb_cashbank_balance.curr_code AND
  406.         cb_cashbank_balance.rec_type = vDebitType;
  407.        
  408.     /*
  409.      * buat saldo payment non cash, menggunakan EDC
  410.      */    
  411.     INSERT INTO cb_balance_settlement
  412.     (tenant_id, ou_id, doc_type_id, doc_no, doc_date,
  413.     device_merchant_id, card_type, bank_card_code, card_no,
  414.     curr_payment_code, amount_payment, flg_settle, cashbank_id, cash_bank_date,
  415.     ref_doc_type_id, ref_id,
  416.     VERSION, create_datetime, create_user_id, update_datetime, update_user_id)
  417.     SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.doc_date,
  418.         B.device_merchant_id, B.card_type, B.bank_card_code, B.card_no,
  419.         B.curr_payment_code, SUM(B.payment_amount), vFlagNo, vEmptyId, vEmptyValue,
  420.         vEmptyId, vEmptyId,
  421.         0, pDatetime, pUserId, pDatetime, pUserId
  422.     FROM i_trx_pos A, i_trx_pos_non_cash_payment B
  423.     WHERE A.tenant_id = pTenantId AND
  424.         A.ou_id = pOuId AND
  425.         A.process_no = pProcessNo AND
  426.         A.STATUS = vStatusPos AND
  427.         A.trx_pos_id = B.trx_pos_id AND
  428.         A.process_no = B.process_no AND
  429.         A.tenant_id = B.tenant_id
  430.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.doc_date,
  431.         B.device_merchant_id, B.card_type, B.bank_card_code, B.card_no,
  432.         B.curr_payment_code;
  433.        
  434.     /*
  435.      * journal DO POS di group by product
  436.      * Credit Inventory
  437.      * Debit COGS
  438.      */
  439.     PERFORM gl_manage_admin_journal_trx(A.tenant_id, (vOuStructure).ou_bu_id, A.ou_id, (vDocJournalDoPos).journal_type, (vDocJournalDoPos).ledger_code, f_get_year_month_date(A.doc_date), 'MONTHLY', pDatetime, pUserId)
  440.     FROM i_trx_pos A
  441.     WHERE A.tenant_id = pTenantId AND
  442.         A.ou_id = pOuId AND
  443.         A.process_no = pProcessNo AND
  444.         A.STATUS = vStatusPos;
  445.        
  446.     INSERT INTO gl_journal_trx
  447.     (tenant_id, journal_type, doc_type_id, doc_id, doc_no, doc_date,
  448.     ou_bu_id, ou_branch_id, ou_sub_bu_id, partner_id, cashbank_id, warehouse_id, ext_doc_no, ext_doc_date,  
  449.     ref_doc_type_id, ref_id, due_date, curr_code, remark, status_doc, workflow_status,
  450.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  451.     SELECT A.tenant_id, (vDocJournalDoPos).journal_type, vDocTypeDoPos, A.trx_pos_id, A.doc_no, A.doc_date,
  452.         (vOuStructure).ou_bu_id, (vOuStructure).ou_branch_id, (vOuStructure).ou_sub_bu_id, A.partner_id, vEmptyId, pWarehouseId, A.ext_doc_no, A.ext_doc_date,
  453.         A.ref_doc_type_id, A.ref_id, A.doc_date, f_get_value_system_config_by_param_code(A.tenant_id, 'ValutaBuku'), A.remark, vStatusDraft, 'DRAFT',
  454.         0, pDatetime, pUserId, pDatetime, pUserId
  455.     FROM i_trx_pos A
  456.     WHERE A.tenant_id = pTenantId AND
  457.         A.ou_id = pOuId AND
  458.         A.process_no = pProcessNo AND
  459.         A.STATUS = vStatusPos AND
  460.         EXISTS( -- added by Didit, 25 Juni 2018. Transaksi POS yang hanya produk nempil saja / service saja tidak perlu dibuatkan jurnal stock
  461.             SELECT 1 FROM i_trx_pos_item B
  462.             WHERE A.trx_pos_id = B.trx_pos_id AND
  463.                 A.process_no = B.process_no AND
  464.                 A.tenant_id = B.tenant_id
  465.         );
  466.    
  467.     INSERT INTO tt_journal_trx_item
  468.     (session_id, tenant_id, journal_trx_id, line_no,
  469.     ref_doc_type_id, ref_id,
  470.     partner_id, product_id, cashbank_id, ou_rc_id,
  471.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  472.     coa_id, curr_code, qty, uom_id,
  473.     amount, journal_date, type_rate,
  474.     numerator_rate, denominator_rate, journal_desc, remark)
  475.     SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  476.         A.doc_type_id, vEmptyId,
  477.         A.partner_id, B.product_id, vEmptyId, vEmptyId,
  478.         vEmptyId, vSignCredit, vProductCOA, vEmptyId,
  479.         f_get_product_coa_group_product(A.tenant_id, B.product_id), f_get_value_system_config_by_param_code(A.tenant_id, 'ValutaBuku'), SUM(B.qty), B.base_uom_id,
  480.         0 , A.doc_date, vTypeRate,
  481.         1, 1, 'PRODUCT_STOCK', vEmptyValue
  482.     FROM i_trx_pos A, i_trx_pos_item B, gl_journal_trx C
  483.     WHERE A.tenant_id = pTenantId AND
  484.         A.ou_id = pOuId AND
  485.         A.process_no = pProcessNo AND
  486.         A.STATUS = vStatusPos AND
  487.         A.trx_pos_id = B.trx_pos_id AND
  488.         A.process_no = B.process_no AND
  489.         A.tenant_id = B.tenant_id AND
  490.         A.trx_pos_id = C.doc_id AND
  491.         A.tenant_id = C.tenant_id AND
  492.         C.doc_type_id = vDocTypeDoPos AND
  493.         C.journal_type = (vDocJournalDoPos).journal_type AND
  494.         C.ou_bu_id = (vOuStructure).ou_bu_id AND
  495.         C.ou_branch_id = (vOuStructure).ou_branch_id AND
  496.         C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  497. --      A.ou_id = C.sub_ou_id AND
  498.         A.doc_no = C.doc_no
  499.     GROUP BY A.tenant_id, C.journal_trx_id, A.doc_type_id,
  500.         A.partner_id, B.product_id, B.base_uom_id, A.doc_date;
  501.        
  502.     INSERT INTO gl_journal_trx_item
  503.     (tenant_id, journal_trx_id, line_no,
  504.     ref_doc_type_id, ref_id,
  505.     partner_id, product_id, cashbank_id, ou_rc_id,
  506.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  507.     coa_id, curr_code, qty, uom_id,
  508.     amount, journal_date, type_rate,
  509.     numerator_rate, denominator_rate, journal_desc, remark,
  510.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  511.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  512.         A.ref_doc_type_id, A.ref_id,
  513.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  514.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  515.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  516.         A.amount, A.journal_date, A.type_rate,
  517.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  518.         0, pDatetime, pUserId, pDatetime, pUserId
  519.     FROM tt_journal_trx_item A
  520.     WHERE A.session_id = pSessionId;
  521.        
  522. /*
  523.  * NK, 1 Feb 2014
  524.  * journal COGS tidak perlu breakdown per product, karena nilainya akan merupakan summary dari PRODUCT_STOCK
  525.  * (sebelumnya breakdown per product)
  526.  */        
  527.     INSERT INTO gl_journal_trx_mapping
  528.     (tenant_id, journal_trx_id, line_no,
  529.     ref_doc_type_id, ref_id,
  530.     partner_id, product_id, cashbank_id, ou_rc_id,
  531.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  532.     coa_id, curr_code, qty, uom_id,
  533.     amount, journal_date, type_rate,
  534.     numerator_rate, denominator_rate, journal_desc, remark, -- DanieL : penambahan journal_desc
  535.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  536.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id ),
  537.         vEmptyId, vEmptyId,
  538.         vEmptyId, vEmptyId, vEmptyId, vEmptyId,
  539.         vEmptyId, vSignDebit, vSystemCOA, vEmptyId,
  540.         f_get_system_coa_by_group_coa(A.tenant_id, 'HargaPokokPenjualan'), A.curr_code, 0, vEmptyId,
  541.         0, A.journal_date, A.type_rate,
  542.         1, 1, 'COGS', vEmptyValue,
  543.         0, pDatetime, pUserId, pDatetime, pUserId
  544.     FROM tt_journal_trx_item A
  545.     WHERE A.session_id = pSessionId
  546.     GROUP BY A.tenant_id, A.journal_trx_id, A.journal_date, A.type_rate, A.curr_code;
  547.    
  548.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;
  549.    
  550.     /*
  551.      * journal POS
  552.      * Credit Sales           nett price * qty, without tax
  553.      * Credit BankCharges     add amount
  554.      * Credit Tax Amount      tax amount ( sudah nett price )
  555.      * Credit Rounding         rouding
  556.      * Credit Refund Cash       refund amount
  557.      * Debit Cash             cash payment          
  558.      * Debit AccSettlement    non cash payment  
  559.      */
  560.     PERFORM gl_manage_admin_journal_trx(A.tenant_id, (vOuStructure).ou_bu_id, A.ou_id, vJournalType, vLedgerCode, f_get_year_month_date(A.doc_date), 'DAILY', pDatetime, pUserId)
  561.     FROM i_trx_pos A
  562.     WHERE A.tenant_id = pTenantId AND
  563.         A.ou_id = pOuId AND
  564.         A.process_no = pProcessNo AND
  565.         A.STATUS = vStatusPos;
  566.    
  567.     INSERT INTO gl_journal_trx
  568.     (tenant_id, journal_type, doc_type_id, doc_id, doc_no, doc_date,
  569.     ou_bu_id, ou_branch_id, ou_sub_bu_id, partner_id, cashbank_id, warehouse_id, ext_doc_no, ext_doc_date,  
  570.     ref_doc_type_id, ref_id, due_date, curr_code, remark, status_doc, workflow_status,
  571.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  572.     SELECT A.tenant_id, vJournalType, A.doc_type_id, A.trx_pos_id, A.doc_no, A.doc_date,
  573.         (vOuStructure).ou_bu_id, (vOuStructure).ou_branch_id, (vOuStructure).ou_sub_bu_id, A.partner_id, vEmptyId, pWarehouseId, A.ext_doc_no, A.ext_doc_date,
  574.         A.ref_doc_type_id, A.ref_id, A.doc_date, A.curr_code, A.remark, vStatusDraft, 'DRAFT',
  575.         0, pDatetime, pUserId, pDatetime, pUserId
  576.     FROM i_trx_pos A
  577.     WHERE A.tenant_id = pTenantId AND
  578.         A.ou_id = pOuId AND
  579.         A.process_no = pProcessNo AND
  580.         A.STATUS = vStatusPos;
  581.    
  582.     INSERT INTO tt_journal_trx_item
  583.     (session_id, tenant_id, journal_trx_id, line_no,
  584.     ref_doc_type_id, ref_id,
  585.     partner_id, product_id, cashbank_id, ou_rc_id,
  586.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  587.     coa_id, curr_code, qty, uom_id,
  588.     amount, journal_date, type_rate,
  589.     numerator_rate, denominator_rate, journal_desc, remark)
  590.     SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  591.         A.doc_type_id, vEmptyId,
  592.         A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  593.         vEmptyId, vSignCredit, vSystemCOA, vEmptyId,
  594.         f_get_system_coa_by_group_coa(A.tenant_id, 'PendapatanPenjualan'), B.curr_code, SUM(B.qty), B.base_uom_id,
  595.         --f_get_amount_before_tax(SUM(B.nett_sell_price * B.qty),B.flg_tax_amount,B.tax_percentage,f_get_digit_decimal_doc_curr(vPosDocTypeId, B.curr_code),vRoundingModeNonTax) , A.doc_date, vTypeRate,
  596.         CASE WHEN vFlgPkp = vFlagYes THEN
  597.         f_get_amount_before_tax(SUM(B.nett_sell_price * B.qty),B.flg_tax_amount,B.tax_percentage,f_get_digit_decimal_doc_curr(vPosDocTypeId, B.curr_code),vRoundingModeNonTax) ELSE
  598.         f_calculate_dpp_amount_from_gross_price(SUM(B.nett_sell_price * B.qty),1,0,B.flg_tax_amount,B.tax_percentage,f_get_digit_decimal_doc_curr(vPosDocTypeId, B.curr_code),'RHU') + f_calculate_tax_amount_from_gross_price(SUM(B.nett_sell_price * B.qty),1,0,B.flg_tax_amount,B.tax_percentage,f_get_digit_decimal_doc_curr(vPosDocTypeId, B.curr_code),'RHU')
  599.         --f_get_amount_before_tax(SUM(B.nett_sell_price * B.qty),B.flg_tax_amount,B.tax_percentage,f_get_digit_decimal_doc_curr(vPosDocTypeId, B.curr_code),vRoundingModeNonTax) + SUM(B.tax_amount)
  600.         END
  601.         , A.doc_date, vTypeRate,
  602.         1, 1, 'SALES_POS', vEmptyValue
  603.     FROM i_trx_pos A, i_trx_pos_item B, gl_journal_trx C
  604.     WHERE A.tenant_id = pTenantId AND
  605.         A.ou_id = pOuId AND
  606.         A.process_no = pProcessNo AND
  607.         A.STATUS = vStatusPos AND
  608.         A.trx_pos_id = B.trx_pos_id AND
  609.         A.process_no = B.process_no AND
  610.         A.tenant_id = B.tenant_id AND
  611.         A.trx_pos_id = C.doc_id AND
  612.         A.tenant_id = C.tenant_id AND
  613.         A.doc_type_id = C.doc_type_id AND
  614.         C.journal_type = vJournalType AND
  615.         C.ou_bu_id = (vOuStructure).ou_bu_id AND
  616.         C.ou_branch_id = (vOuStructure).ou_branch_id AND
  617.         C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  618. --      A.ou_id = C.sub_ou_id AND
  619.         A.doc_no = C.doc_no
  620.     GROUP BY A.tenant_id, C.journal_trx_id, A.doc_type_id,
  621.         A.partner_id, B.curr_code, B.base_uom_id, B.flg_tax_amount, B.tax_percentage, A.doc_date;
  622.  
  623.        
  624.     IF vFlgPkp = vFlagYes THEN
  625.     -- hitung total tax item  
  626.     SELECT SUM(B.tax_amount) INTO vTotalTaxItem
  627.     FROM i_trx_pos A, i_trx_pos_item B
  628.     WHERE A.tenant_id = pTenantId AND
  629.         A.ou_id = pOuId AND
  630.         A.process_no = pProcessNo AND
  631.         A.STATUS = vStatusPos AND
  632.         A.trx_pos_id = B.trx_pos_id AND
  633.         A.process_no = B.process_no AND
  634.         A.tenant_id = B.tenant_id;
  635.                
  636.     IF vTotalTaxItem > 0 THEN
  637.    
  638.     SELECT SUM(B.tax_amount)-vTotalTaxItem INTO vTotalTaxItemNempil
  639.     FROM i_trx_pos A, i_trx_pos_tax B
  640.     WHERE A.tenant_id = pTenantId AND
  641.         A.ou_id = pOuId AND
  642.         A.process_no = pProcessNo AND
  643.         A.STATUS = vStatusPos AND
  644.         A.trx_pos_id = B.trx_pos_id AND
  645.         A.process_no = B.process_no AND
  646.         A.tenant_id = B.tenant_id;
  647.    
  648.     END IF;
  649.     END IF;
  650.    
  651.    
  652. -- jurnal penjualan dari produk nempil, 6 Nov 2015
  653.     WITH data_tax_pos AS(
  654.         SELECT A.trx_pos_id, A.tenant_id,
  655.             A.doc_type_id, SUM(B.tax_amount) AS tax_amount
  656.         FROM i_trx_pos A, i_trx_pos_item B
  657.         WHERE A.tenant_id = pTenantId AND
  658.             A.ou_id = pOuId AND
  659.             A.process_no = pProcessNo AND
  660.             A.STATUS = vStatusPos AND
  661.             A.trx_pos_id = B.trx_pos_id AND
  662.             A.process_no = B.process_no AND
  663.             A.tenant_id = B.tenant_id
  664.         GROUP BY A.trx_pos_id, A.tenant_id,
  665.             A.doc_type_id
  666.     ),
  667.     data_tax_total AS(
  668.         SELECT A.trx_pos_id, A.tenant_id,
  669.             A.doc_type_id, SUM(B.tax_amount) AS tax_amount
  670.         FROM i_trx_pos A, i_trx_pos_tax B
  671.         WHERE A.tenant_id = pTenantId AND
  672.             A.ou_id = pOuId AND
  673.             A.process_no = pProcessNo AND
  674.             A.STATUS = vStatusPos AND
  675.             A.trx_pos_id = B.trx_pos_id AND
  676.             A.process_no = B.process_no AND
  677.             A.tenant_id = B.tenant_id
  678.         GROUP BY A.trx_pos_id, A.tenant_id,
  679.             A.doc_type_id
  680.     ),
  681.     data_tax_nempil AS(
  682.         SELECT A.trx_pos_id, A.tenant_id,
  683.             A.doc_type_id, A.tax_amount - COALESCE(B.tax_amount,0) AS tax_amount
  684.         FROM data_tax_total A
  685.         LEFT JOIN data_tax_pos B ON A.trx_pos_id = B.trx_pos_id AND
  686.                                        A.tenant_id = B.tenant_id AND
  687.                                        A.doc_type_id = B.doc_type_id
  688.     )
  689.     INSERT INTO tt_journal_trx_item
  690.     (session_id, tenant_id, journal_trx_id, line_no,
  691.     ref_doc_type_id, ref_id,
  692.     partner_id, product_id, cashbank_id, ou_rc_id,
  693.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  694.     coa_id, curr_code, qty, uom_id,
  695.     amount, journal_date, type_rate,
  696.     numerator_rate, denominator_rate, journal_desc, remark)
  697.     SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  698.         A.doc_type_id, vEmptyId,
  699.         A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  700.         vEmptyId, vSignCredit, vSystemCOA, vEmptyId,
  701.         f_get_system_coa_by_group_coa(A.tenant_id, 'PendapatanPenjualan'), B.curr_code, SUM(B.qty), vEmptyId,
  702.         CASE WHEN vFlgPkp = vFlagYes THEN
  703.         SUM(B.sell_price) - COALESCE(D.tax_amount, 0) ELSE -- sell price = gross sell price * qty
  704.         SUM(B.sell_price)
  705.         END,
  706.         A.doc_date, vTypeRate,
  707.         1, 1, 'SALES_POS', vEmptyValue
  708.     FROM i_trx_pos A
  709.     INNER JOIN i_trx_pos_item_nempil_barang B ON A.trx_pos_id = B.trx_pos_id AND
  710.                                                  A.process_no = B.process_no AND
  711.                                                  A.tenant_id = B.tenant_id
  712.     INNER JOIN gl_journal_trx C ON A.trx_pos_id = C.doc_id AND
  713.                                    A.tenant_id = C.tenant_id AND
  714.                                    A.doc_type_id = C.doc_type_id AND
  715.                                    A.doc_no = C.doc_no
  716.     LEFT JOIN data_tax_nempil D ON A.trx_pos_id = D.trx_pos_id AND
  717.                                    A.tenant_id = D.tenant_id AND
  718.                                    A.doc_type_id = D.doc_type_id
  719.     WHERE A.tenant_id = pTenantId AND
  720.         A.ou_id = pOuId AND
  721.         A.process_no = pProcessNo AND
  722.         A.STATUS = vStatusPos AND
  723.         C.journal_type = vJournalType AND
  724.         C.ou_bu_id = (vOuStructure).ou_bu_id AND
  725.         C.ou_branch_id = (vOuStructure).ou_branch_id AND
  726.         C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id
  727. --      A.ou_id = C.sub_ou_id AND
  728.     GROUP BY A.tenant_id, C.journal_trx_id, A.doc_type_id,
  729.         A.partner_id, B.curr_code, A.doc_date, D.tax_amount;
  730.        
  731.     INSERT INTO tt_journal_trx_item
  732.     (session_id, tenant_id, journal_trx_id, line_no,
  733.     ref_doc_type_id, ref_id,
  734.     partner_id, product_id, cashbank_id, ou_rc_id,
  735.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  736.     coa_id, curr_code, qty, uom_id,
  737.     amount, journal_date, type_rate,
  738.     numerator_rate, denominator_rate, journal_desc, remark)
  739.     SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  740.         A.doc_type_id, B.trx_pos_add_cost_id,
  741.         A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  742.         vEmptyId, vSignCredit, vSystemCOA, vEmptyId,
  743.         f_get_system_coa_by_group_coa(A.tenant_id, 'BiayaKartuKredit'), B.curr_code, 0, vEmptyId,
  744.         B.add_amount, A.doc_date, vTypeRate,
  745.         1, 1, 'CHARGES_POS', B.remark
  746.     FROM i_trx_pos A, i_trx_pos_add_cost B, gl_journal_trx C
  747.     WHERE A.tenant_id = pTenantId AND
  748.         A.ou_id = pOuId AND
  749.         A.process_no = pProcessNo AND
  750.         A.STATUS = vStatusPos AND
  751.         A.trx_pos_id = B.trx_pos_id AND
  752.         A.process_no = B.process_no AND
  753.         A.tenant_id = B.tenant_id AND
  754.         A.trx_pos_id = C.doc_id AND
  755.         A.tenant_id = C.tenant_id AND
  756.         A.doc_type_id = C.doc_type_id AND
  757.         C.journal_type = vJournalType AND
  758.         C.ou_bu_id = (vOuStructure).ou_bu_id AND
  759.         C.ou_branch_id = (vOuStructure).ou_branch_id AND
  760.         C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  761. --      A.ou_id = C.sub_ou_id AND
  762.         A.doc_no = C.doc_no AND
  763.         B.activity_gl_id = vActivityChargesId;
  764.    
  765.         -- add if By: Ping An , 27 Nov 2015
  766.     -- Jurnal VAT Hanya untuk yang PKP saja , kalo non PKP gak perlu dijurnal PPN karena non PKP tidak memungut dan melaporkan PPN
  767.     IF vFlgPkp = vFlagYes THEN
  768.    
  769.         INSERT INTO tt_journal_trx_item
  770.         (session_id, tenant_id, journal_trx_id, line_no,
  771.         ref_doc_type_id, ref_id,
  772.         partner_id, product_id, cashbank_id, ou_rc_id,
  773.         segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  774.         coa_id, curr_code, qty, uom_id,
  775.         amount, journal_date, type_rate,
  776.         numerator_rate, denominator_rate, journal_desc, remark)
  777.         SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  778.             A.doc_type_id, vEmptyId,
  779.             A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  780.             vEmptyId, vSignCredit, vTaxCOA, vEmptyId,
  781.             D.create_coa_id, D.tax_curr_code, 0, vEmptyId,
  782.             B.tax_amount , A.doc_date, vTypeRate,
  783.             1, 1, 'VAT_OUT_POS', vEmptyValue
  784.         FROM i_trx_pos A, i_trx_pos_tax B, gl_journal_trx C, m_tax D
  785.         WHERE A.tenant_id = pTenantId AND
  786.             A.ou_id = pOuId AND
  787.             A.process_no = pProcessNo AND
  788.             A.STATUS = vStatusPos AND
  789.             A.trx_pos_id = B.trx_pos_id AND
  790.             A.process_no = B.process_no AND
  791.             A.tenant_id = B.tenant_id AND
  792.             B.tax_id = D.tax_id AND
  793.             A.trx_pos_id = C.doc_id AND
  794.             A.tenant_id = C.tenant_id AND
  795.             A.doc_type_id = C.doc_type_id AND
  796.             C.journal_type = vJournalType AND
  797.             C.ou_bu_id = (vOuStructure).ou_bu_id AND
  798.             C.ou_branch_id = (vOuStructure).ou_branch_id AND
  799.             C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  800.     --      A.ou_id = C.sub_ou_id AND
  801.             A.doc_no = C.doc_no;
  802.        
  803.        
  804.     END IF;
  805.      
  806.      
  807.     INSERT INTO tt_journal_trx_item
  808.     (session_id, tenant_id, journal_trx_id, line_no,
  809.     ref_doc_type_id, ref_id,
  810.     partner_id, product_id, cashbank_id, ou_rc_id,
  811.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  812.     coa_id, curr_code, qty, uom_id,
  813.     amount, journal_date, type_rate,
  814.     numerator_rate, denominator_rate, journal_desc, remark)
  815.     SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  816.         A.doc_type_id, vEmptyId,
  817.         A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  818.         vEmptyId, vSignCredit, vSystemCOA, vEmptyId,
  819.         f_get_system_coa_by_group_coa(A.tenant_id, 'BiayaPembulatanNilai'), A.curr_code, 0, vEmptyId,
  820.         A.rounding_amount, A.doc_date, vTypeRate,
  821.         1, 1, 'ROUNDING_POS', C.remark
  822.     FROM i_trx_pos A, gl_journal_trx C
  823.     WHERE A.tenant_id = pTenantId AND
  824.         A.ou_id = pOuId AND
  825.         A.process_no = pProcessNo AND
  826.         A.STATUS = vStatusPos AND
  827.         A.trx_pos_id = C.doc_id AND
  828.         A.tenant_id = C.tenant_id AND
  829.         A.doc_type_id = C.doc_type_id AND
  830.         C.journal_type = vJournalType AND
  831.         C.ou_bu_id = (vOuStructure).ou_bu_id AND
  832.         C.ou_branch_id = (vOuStructure).ou_branch_id AND
  833.         C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  834. --      A.ou_id = C.sub_ou_id AND
  835.         A.doc_no = C.doc_no;      
  836.        
  837.     INSERT INTO tt_journal_trx_item
  838.     (session_id, tenant_id, journal_trx_id, line_no,
  839.     ref_doc_type_id, ref_id,
  840.     partner_id, product_id, cashbank_id, ou_rc_id,
  841.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  842.     coa_id, curr_code, qty, uom_id,
  843.     amount, journal_date, type_rate,
  844.     numerator_rate, denominator_rate, journal_desc, remark)
  845.     SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  846.         A.doc_type_id, vEmptyId,
  847.         A.partner_id, vEmptyId, E.cashbank_id, vEmptyId,
  848.         vEmptyId, vSignCredit, vCashBankCOA, vEmptyId,
  849.         E.coa_id, A.curr_code, 0, vEmptyId,
  850.         A.total_refund, A.doc_date, vTypeRate,
  851.         1, 1, 'REFUND_POS', A.remark
  852.     FROM i_trx_pos A, gl_journal_trx C, i_cash_bank_data_outlet D, m_cashbank E
  853.     WHERE A.tenant_id = pTenantId AND
  854.         A.ou_id = pOuId AND
  855.         A.process_no = pProcessNo AND
  856.         A.STATUS = vStatusPos AND
  857.         A.trx_pos_id = C.doc_id AND
  858.         A.tenant_id = C.tenant_id AND
  859.         A.doc_type_id = C.doc_type_id AND
  860.         D.outlet_id = pOutletId AND
  861.         D.cashbank_id = E.cashbank_id AND
  862.         A.curr_code = E.curr_code AND
  863.         E.flg_cash_bank = vFlagCash AND    
  864.         C.journal_type = vJournalType AND
  865.         C.ou_bu_id = (vOuStructure).ou_bu_id AND
  866.         C.ou_branch_id = (vOuStructure).ou_branch_id AND
  867.         C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  868. --      A.ou_id = C.sub_ou_id AND
  869.         A.doc_no = C.doc_no AND
  870.         A.total_refund > 0;    
  871.  
  872.     INSERT INTO tt_journal_trx_item
  873.     (session_id, tenant_id, journal_trx_id, line_no,
  874.     ref_doc_type_id, ref_id,
  875.     partner_id, product_id, cashbank_id, ou_rc_id,
  876.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  877.     coa_id, curr_code, qty, uom_id,
  878.     amount, journal_date, type_rate,
  879.     numerator_rate, denominator_rate, journal_desc, remark)
  880.     SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  881.         A.doc_type_id, B.trx_pos_cash_payment_id,
  882.         A.partner_id, vEmptyId, E.cashbank_id, vEmptyId,
  883.         vEmptyId, vSignDebit, vCashBankCOA, vEmptyId,
  884.         E.coa_id, B.curr_payment_code, 0, vEmptyId,
  885.         B.payment_amount, A.doc_date, vTypeRate,
  886.         1, 1, 'CASH_PAYMENT_POS', B.remark
  887.     FROM i_trx_pos A, i_trx_pos_cash_payment B, gl_journal_trx C, i_cash_bank_data_outlet D, m_cashbank E
  888.     WHERE A.tenant_id = pTenantId AND
  889.         A.ou_id = pOuId AND
  890.         A.process_no = pProcessNo AND
  891.         A.STATUS = vStatusPos AND
  892.         A.process_no = B.process_no AND
  893.         A.trx_pos_id = B.trx_pos_id AND
  894.         A.tenant_id = B.tenant_id AND
  895.         D.outlet_id = pOutletId AND
  896.         D.cashbank_id = E.cashbank_id AND
  897.         B.curr_payment_code = E.curr_code AND
  898.         E.flg_cash_bank = vFlagCash AND
  899.         A.trx_pos_id = C.doc_id AND
  900.         A.tenant_id = C.tenant_id AND
  901.         A.doc_type_id = C.doc_type_id AND
  902.         C.journal_type = vJournalType AND
  903.         C.ou_bu_id = (vOuStructure).ou_bu_id AND
  904.         C.ou_branch_id = (vOuStructure).ou_branch_id AND
  905.         C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  906. --      A.ou_id = C.sub_ou_id AND
  907.         A.doc_no = C.doc_no AND
  908.         B.payment_amount > 0; -- add by: Ping An 30 Nov 2015, ditambah filter kalau tidak ada pembayaran tidak perlu dijurnal
  909.  
  910.     INSERT INTO tt_journal_trx_item
  911.     (session_id, tenant_id, journal_trx_id, line_no,
  912.     ref_doc_type_id, ref_id,
  913.     partner_id, product_id, cashbank_id, ou_rc_id,
  914.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  915.     coa_id, curr_code, qty, uom_id,
  916.     amount, journal_date, type_rate,
  917.     numerator_rate, denominator_rate, journal_desc, remark)
  918.     SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  919.         A.doc_type_id, B.trx_pos_non_cash_payment_id,
  920.         A.partner_id, vEmptyId, E.cashbank_id, vEmptyId,
  921.         vEmptyId, vSignDebit, vCashBankCOA, vEmptyId,
  922.         E.settle_coa_id, B.curr_payment_code, 0, vEmptyId,
  923.         B.payment_amount, A.doc_date, vTypeRate,
  924.         1, 1, 'NON_CASH_PAYMENT_POS', B.remark
  925.     FROM i_trx_pos A, i_trx_pos_non_cash_payment B, gl_journal_trx C, i_device_merchant_data_outlet D, m_device_merchant E
  926.     WHERE A.tenant_id = pTenantId AND
  927.         A.ou_id = pOuId AND
  928.         A.process_no = pProcessNo AND
  929.         A.STATUS = vStatusPos AND
  930.         A.process_no = B.process_no AND
  931.         A.trx_pos_id = B.trx_pos_id AND
  932.         A.tenant_id = B.tenant_id AND
  933.         D.outlet_id = pOutletId AND
  934.         B.device_merchant_id = D.device_merchant_id AND
  935.         D.device_merchant_id = E.device_merchant_id AND
  936.         A.trx_pos_id = C.doc_id AND
  937.         A.tenant_id = C.tenant_id AND
  938.         A.doc_type_id = C.doc_type_id AND
  939.         C.journal_type = vJournalType AND
  940.         C.ou_bu_id = (vOuStructure).ou_bu_id AND
  941.         C.ou_branch_id = (vOuStructure).ou_branch_id AND
  942.         C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  943. --      A.ou_id = C.sub_ou_id AND
  944.         A.doc_no = C.doc_no AND
  945.         B.payment_amount > 0; -- add by: Ping An 30 Nov 2015, ditambah filter kalau tidak ada pembayaran tidak perlu dijurnal
  946.  
  947.        
  948.  
  949.     -- hanya dijalankan jika ada kurang bayar(BELUM LUNAS PEMBAYARANNYA ), kalau sudah lunas tidak perlu dijurnal DP  
  950.     IF vCountBelumDiBayar > 0 THEN
  951.         -- sisa pembayaran dipindahkan ke AR      
  952.             INSERT INTO tt_journal_trx_item
  953.             (session_id, tenant_id, journal_trx_id, line_no,
  954.             ref_doc_type_id, ref_id,
  955.             partner_id, product_id, cashbank_id, ou_rc_id,
  956.             segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  957.             coa_id, curr_code, qty, uom_id,
  958.             amount, journal_date, type_rate,
  959.             numerator_rate, denominator_rate, journal_desc, remark)
  960.             SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  961.                 A.doc_type_id, A.ref_id,
  962.                 A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  963.                 vEmptyId, vSignDebit, vSystemCOA, vEmptyId,
  964.                 f_get_ar_coa_partner(A.tenant_id, A.partner_id), A.curr_code, 0, vEmptyId,
  965.                 A.total_amount, A.doc_date, vTypeRate,
  966.                 1, 1, 'AR_POS', 'NILAI DEBIT NOTE AR'
  967.             FROM i_trx_pos A, gl_journal_trx C, i_trx_pos_termin_payment E
  968.             WHERE A.tenant_id = pTenantId AND
  969.                 A.ou_id = pOuId AND
  970.                 A.process_no = pProcessNo AND
  971.                 A.STATUS = vStatusPos AND
  972.                 A.tenant_id = E.tenant_id AND
  973.                 A.process_no = E.process_no AND
  974.                 A.trx_pos_id = E.trx_pos_id AND
  975.                 E.under_payment_amount > 0 AND
  976.                 A.trx_pos_id = C.doc_id AND
  977.                 A.tenant_id = C.tenant_id AND
  978.                 A.doc_type_id = C.doc_type_id AND
  979.                 C.journal_type = vJournalType AND
  980.                 C.ou_bu_id = (vOuStructure).ou_bu_id AND
  981.                 C.ou_branch_id = (vOuStructure).ou_branch_id AND
  982.                 C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  983.                 A.doc_no = C.doc_no;      
  984.                
  985.  
  986.      END IF;
  987.            
  988.        
  989.        
  990. -- TAMBAHKAN JURNAL DP add by Ping An 18 Nov 2015
  991. -- karena nantinya di function submit invoice AR, debt note ar yang tercreate dari POS tidak akan di jurnal, jadi perlu dijurnal disini DP ARnya
  992. -- jika ada bayar termin dari customer corporate
  993.         --      K   m_activity_gl                   SYSTEM  DP_AR_POS
  994. INSERT INTO tt_journal_trx_item
  995.             (   session_id, tenant_id, journal_trx_id, line_no,
  996.                 ref_doc_type_id, ref_id,
  997.                 partner_id, product_id, cashbank_id, ou_rc_id,
  998.                 segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  999.                 coa_id, curr_code, qty, uom_id,
  1000.                 amount, journal_date, type_rate,
  1001.                 numerator_rate, denominator_rate, journal_desc, remark)
  1002.         SELECT  pSessionId, A.tenant_id, C.journal_trx_id, 1,
  1003.                 A.trx_pos_id, B.trx_pos_termin_payment_id,
  1004.                 A.partner_id, vEmptyId, vEmptyId, vEmptyId,            
  1005.                 vEmptyId, vSignCredit, vSystemCOA, D.activity_gl_id,
  1006.                 D.coa_id, B.curr_payment_code, 0, vEmptyId,            
  1007.                 B.payment_amount, A.doc_date, vTypeRate,
  1008.                 1, 1, 'DP_AR_POS', 'NILAI DP AR'
  1009.         FROM i_trx_pos A, i_trx_pos_termin_payment B, gl_journal_trx C, m_activity_gl D
  1010.     WHERE A.tenant_id = pTenantId AND
  1011.         A.ou_id = pOuId AND
  1012.         A.process_no = pProcessNo AND
  1013.         A.STATUS = vStatusPos AND
  1014.         A.process_no = B.process_no AND
  1015.         A.trx_pos_id = B.trx_pos_id AND
  1016.         A.tenant_id = B.tenant_id AND
  1017.         A.trx_pos_id = C.doc_id AND
  1018.         A.tenant_id = C.tenant_id AND
  1019.         A.doc_type_id = C.doc_type_id AND
  1020.         C.journal_type = vJournalType AND
  1021.         C.ou_bu_id = (vOuStructure).ou_bu_id AND
  1022.         C.ou_branch_id = (vOuStructure).ou_branch_id AND
  1023.         C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  1024. --      A.ou_id = C.sub_ou_id AND
  1025.         A.doc_no = C.doc_no AND
  1026.         B.under_payment_amount > 0 AND -- ditambah filter: jika LUNAS tidak perlu di jurnal DP    
  1027.         B.payment_amount > 0 AND -- ditambah filter : jika tidak ada pembayaran juga tidak perlu di jurnal DP
  1028.         D.activity_gl_id = f_get_activity_gl_id_for_downpayment(A.tenant_id);          
  1029.            
  1030. -- END PENAMBAHKAN JURNAL DP add by Ping An 18 Nov 2015        
  1031.                            
  1032.     INSERT INTO gl_journal_trx_item
  1033.     (tenant_id, journal_trx_id, line_no,
  1034.     ref_doc_type_id, ref_id,
  1035.     partner_id, product_id, cashbank_id, ou_rc_id,
  1036.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  1037.     coa_id, curr_code, qty, uom_id,
  1038.     amount, journal_date, type_rate,
  1039.     numerator_rate, denominator_rate, journal_desc, remark,
  1040.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  1041.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  1042.         A.ref_doc_type_id, A.ref_id,
  1043.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  1044.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  1045.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  1046.         A.amount, A.journal_date, A.type_rate,
  1047.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  1048.         0, pDatetime, pUserId, pDatetime, pUserId
  1049.     FROM tt_journal_trx_item A
  1050.     WHERE A.session_id = pSessionId AND
  1051.         A.journal_desc IN ('SALES_POS','CHARGES_POS','VAT_OUT_POS', 'ROUNDING_POS', 'REFUND_POS', 'DP_AR_POS');
  1052.        
  1053.     INSERT INTO gl_journal_trx_mapping
  1054.     (tenant_id, journal_trx_id, line_no,
  1055.     ref_doc_type_id, ref_id,
  1056.     partner_id, product_id, cashbank_id, ou_rc_id,
  1057.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  1058.     coa_id, curr_code, qty, uom_id,
  1059.     amount, journal_date, type_rate,
  1060.     numerator_rate, denominator_rate, journal_desc, remark,
  1061.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  1062.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  1063.         A.ref_doc_type_id, A.ref_id,
  1064.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  1065.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  1066.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  1067.         A.amount, A.journal_date, A.type_rate,
  1068.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  1069.         0, pDatetime, pUserId, pDatetime, pUserId
  1070.     FROM tt_journal_trx_item A
  1071.     WHERE A.session_id = pSessionId AND
  1072.          -- rev by Ping An 18nov2015 A.journal_desc IN ('CASH_PAYMENT_POS','NON_CASH_PAYMENT_POS');
  1073.          A.journal_desc IN ('CASH_PAYMENT_POS','NON_CASH_PAYMENT_POS','AR_POS');
  1074.    
  1075.    
  1076.     -- buat nota debit ar untuk transaksi pos yg masih hutang
  1077.     -- added by didit, 25 September 2015
  1078.     PERFORM f_migrate_data_trx_pos_to_debt_note_ar(pSessionId, A.tenant_id, A.process_no, A.ou_id, pUserId, pDatetime, vFlgPkp, CASE WHEN COALESCE(B.under_payment_amount, -1) < 0 THEN 0 ELSE 1 END, A.trx_pos_id)
  1079.     FROM i_trx_pos A
  1080.     LEFT JOIN i_trx_pos_termin_payment B ON A.tenant_id = B.tenant_id AND A.process_no = B.process_no AND A.trx_pos_id = B.trx_pos_id
  1081.     WHERE A.tenant_id = pTenantId
  1082.         AND A.process_no = pProcessNo
  1083.         AND A.ou_id = pOuId;
  1084.    
  1085.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;
  1086.    
  1087.     DELETE FROM i_tt_pos_cash_balance WHERE session_id = pSessionId;
  1088.    
  1089.     DELETE FROM i_tt_pos_product_balance_stock WHERE session_id = pSessionId;
  1090.    
  1091.     DELETE FROM i_tt_nempil_barang_balance_stock WHERE session_id = pSessionId;
  1092.  
  1093.        
  1094. END;   
  1095. $BODY$
  1096.   LANGUAGE plpgsql VOLATILE
  1097.   COST 100;
  1098. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement