widana

Untitled

Jun 4th, 2020
338
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Function: i_ho_process_pos_shop_spk(bigint, character varying, character varying)
  2.  
  3. -- DROP FUNCTION i_ho_process_pos_shop_spk(bigint, character varying, character varying);
  4.  
  5. CREATE OR REPLACE FUNCTION i_ho_process_pos_shop_spk(
  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_spk' 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.     /*    
  284.     INSERT INTO p_log_nempil_barang_balance_stock
  285.     (tenant_id, ou_id, doc_type_id, doc_no, doc_date,
  286.      partner_name, product_code, product_name, qty, VERSION, create_datetime, create_user_id, update_datetime, update_user_id)
  287.     SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.doc_date,
  288.         A.partner_name, A.product_code, A.product_name, SUM(A.qty), 0, pDatetime, pUserId, pDatetime, pUserId
  289.     FROM i_tt_nempil_barang_balance_stock A
  290.     WHERE A.session_id = pSessionId
  291.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.doc_date,
  292.         A.partner_name, A.product_code, A.product_name;
  293.       */
  294.  
  295.     INSERT INTO in_log_nempil_barang_balance_stock
  296.         (tenant_id, ou_id, doc_type_id, doc_no, doc_date,
  297.          partner_name, product_code, product_name, qty, VERSION, create_datetime, create_user_id, update_datetime, update_user_id)
  298.     SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.doc_date,
  299.         A.partner_name, A.product_code, A.product_name, SUM(A.qty), 0, pDatetime, pUserId, pDatetime, pUserId
  300.     FROM i_tt_nempil_barang_balance_stock A
  301.     WHERE A.session_id = pSessionId
  302.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.doc_date,
  303.         A.partner_name, A.product_code, A.product_name;
  304.  
  305.        
  306.     /*
  307.      * mengolah data pos untuk :
  308.      * 1.insert cb_trx_cashbank_balance  
  309.      *
  310.      * journal :
  311.      * 1.journal DO POS Shop
  312.      * 2.journal POS Shop
  313.      */
  314.    
  315.     /*
  316.      * tampung data pos cash payment untuk update ke data cb_cashbank_balance
  317.      * dan cb_trx_cashbank_balance
  318.      */
  319.     INSERT INTO i_tt_pos_cash_balance
  320.     (session_id, tenant_id, ou_id, doc_type_id, doc_no, payment_id,
  321.     partner_id, curr_code, amount,
  322.     cashbank_id, cash_bank_date, ref_doc_type_id, ref_id)
  323.     SELECT pSessionId, A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.trx_pos_id,
  324.         A.partner_id, B.curr_payment_code, SUM(B.payment_amount),
  325.         C.cashbank_id, A.doc_date, A.doc_type_id, A.trx_pos_id
  326.     FROM i_trx_pos A, i_trx_pos_cash_payment B, i_cash_bank_data_outlet C, m_cashbank D
  327.     WHERE A.tenant_id = pTenantId AND
  328.         A.ou_id = pOuId AND
  329.         A.process_no = pProcessNo AND
  330.         A.status = vStatusPos AND      
  331.         A.process_no = B.process_no AND
  332.         A.trx_pos_id = B.trx_pos_id AND
  333.         A.tenant_id = B.tenant_id AND
  334.         C.outlet_id = pOutletId AND
  335.         C.cashbank_id = D.cashbank_id AND
  336.         B.curr_payment_code = D.curr_code AND
  337.         D.flg_cash_bank = vFlagCash
  338.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.trx_pos_id,
  339.         A.partner_id, B.curr_payment_code, C.cashbank_id, A.doc_date;
  340.  
  341.     /*
  342.      * tampung data pos total refund untuk update ke data cb_cashbank_balance
  343.      * dan cb_trx_cashbank_balance
  344.      */
  345.     INSERT INTO i_tt_pos_cash_balance
  346.     (session_id, tenant_id, ou_id, doc_type_id, doc_no, payment_id,
  347.     partner_id, curr_code, amount,
  348.     cashbank_id, cash_bank_date, ref_doc_type_id, ref_id)
  349.     SELECT pSessionId, A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.trx_pos_id,
  350.         A.partner_id, A.curr_code, SUM(A.total_refund) * -1,
  351.         B.cashbank_id, A.doc_date, A.doc_type_id, A.trx_pos_id
  352.     FROM i_trx_pos A, i_cash_bank_data_outlet B, m_cashbank C
  353.     WHERE A.tenant_id = pTenantId AND
  354.         A.ou_id = pOuId AND
  355.         A.process_no = pProcessNo AND
  356.         A.status = vStatusPos AND
  357.         B.outlet_id = pOutletId AND
  358.         B.cashbank_id = C.cashbank_id AND
  359.         A.curr_code = C.curr_code AND
  360.         C.flg_cash_bank = vFlagCash
  361.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.trx_pos_id,
  362.         A.partner_id, A.curr_code, B.cashbank_id, A.doc_date;
  363.        
  364.     /*
  365.      * insert ke data cb_trx_cashbank_balance
  366.      */
  367.     INSERT INTO cb_trx_cashbank_balance
  368.     (tenant_id, ou_id, doc_type_id, payment_id,
  369.     payment_doc_no, payment_doc_date, payment_remark,
  370.     partner_id, partner_bank_id, curr_code, amount,
  371.     due_date, flg_payment, ref_doc_type_id, ref_id,
  372.     version, create_datetime, create_user_id, update_datetime, update_user_id)
  373.     SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.payment_id,
  374.         A.doc_no, A.cash_bank_date, vEmptyValue,
  375.         A.partner_id, vEmptyId, A.curr_code, SUM(A.amount),
  376.         A.cash_bank_date, vFlagYes, A.ref_doc_type_id, A.ref_id,
  377.         0, pDatetime, pUserId, pDatetime, pUserId
  378.     FROM i_tt_pos_cash_balance A
  379.     WHERE A.session_id = pSessionId
  380.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.payment_id, A.doc_no, A.partner_id, A.curr_code,
  381.         A.cashbank_id, A.cash_bank_date, A.ref_doc_type_id, A.ref_id;
  382.    
  383.     /*
  384.      * insert cb_cashbank_balance yang data belum ada
  385.      */    
  386.     INSERT INTO cb_cashbank_balance
  387.     (tenant_id, ou_id, cashbank_id, cash_bank_date,
  388.     rec_type, curr_code, amount,
  389.     VERSION, create_datetime, create_user_id, update_datetime, update_user_id)
  390.     SELECT A.tenant_id, D.ou_id, A.cashbank_id, A.cash_bank_date,
  391.         vDebitType, A.curr_code, 0,
  392.         0, pDatetime, pUserId, pDatetime, pUserId
  393.     FROM i_tt_pos_cash_balance A, m_cashbank_ou D
  394.     WHERE A.session_id = pSessionId AND
  395.         D.cashbank_id = A.cashbank_id AND
  396.         NOT EXISTS (SELECT 1 FROM cb_cashbank_balance B
  397.                     WHERE A.tenant_id = B.tenant_id AND
  398.                         D.ou_id = B.ou_id AND
  399.                         A.cashbank_id = B.cashbank_id AND
  400.                         A.cash_bank_date = B.cash_bank_date AND
  401.                         B.rec_type = vDebitType)
  402.     GROUP BY A.tenant_id, A.cashbank_id, A.cash_bank_date, A.curr_code, D.ou_id;
  403.  
  404.     /*
  405.      * update cb_cashbank_balance yang sudah ada
  406.      */    
  407.     UPDATE cb_cashbank_balance SET amount = cb_cashbank_balance.amount + B.amount
  408.     FROM (SELECT A.tenant_id, D.ou_id, A.cashbank_id, A.cash_bank_date, A.curr_code,
  409.                 SUM(A.amount) AS amount
  410.         FROM i_tt_pos_cash_balance A, m_cashbank_ou D
  411.         WHERE A.session_id = pSessionId AND
  412.             D.cashbank_id = A.cashbank_id
  413.         GROUP BY A.tenant_id, A.cashbank_id, A.cash_bank_date, A.curr_code, D.ou_id) B
  414.     WHERE B.tenant_id = cb_cashbank_balance.tenant_id AND
  415.         B.ou_id = cb_cashbank_balance.ou_id AND
  416.         B.cashbank_id = cb_cashbank_balance.cashbank_id AND
  417.         B.cash_bank_date = cb_cashbank_balance.cash_bank_date AND
  418.         B.curr_code = cb_cashbank_balance.curr_code AND
  419.         cb_cashbank_balance.rec_type = vDebitType;
  420.        
  421.     /*
  422.      * buat saldo payment non cash, menggunakan EDC
  423.      */    
  424.     INSERT INTO cb_balance_settlement
  425.     (tenant_id, ou_id, doc_type_id, doc_no, doc_date,
  426.     device_merchant_id, card_type, bank_card_code, card_no,
  427.     curr_payment_code, amount_payment, flg_settle, cashbank_id, cash_bank_date,
  428.     ref_doc_type_id, ref_id,
  429.     VERSION, create_datetime, create_user_id, update_datetime, update_user_id)
  430.     SELECT 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, SUM(B.payment_amount), vFlagNo, vEmptyId, vEmptyValue,
  433.         vEmptyId, vEmptyId,
  434.         0, pDatetime, pUserId, pDatetime, pUserId
  435.     FROM i_trx_pos A, i_trx_pos_non_cash_payment B
  436.     WHERE A.tenant_id = pTenantId AND
  437.         A.ou_id = pOuId AND
  438.         A.process_no = pProcessNo AND
  439.         A.status = vStatusPos AND
  440.         A.trx_pos_id = B.trx_pos_id AND
  441.         A.process_no = B.process_no AND
  442.         A.tenant_id = B.tenant_id
  443.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.doc_date,
  444.         B.device_merchant_id, B.card_type, B.bank_card_code, B.card_no,
  445.         B.curr_payment_code;
  446.        
  447.     /*
  448.      * journal DO POS di group by product
  449.      * Credit Inventory
  450.      * Debit COGS
  451.      */
  452.     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)
  453.     FROM i_trx_pos A
  454.     WHERE A.tenant_id = pTenantId AND
  455.         A.ou_id = pOuId AND
  456.         A.process_no = pProcessNo AND
  457.         A.status = vStatusPos;
  458.        
  459.     INSERT INTO gl_journal_trx
  460.     (tenant_id, journal_type, doc_type_id, doc_id, doc_no, doc_date,
  461.     ou_bu_id, ou_branch_id, ou_sub_bu_id, partner_id, cashbank_id, warehouse_id, ext_doc_no, ext_doc_date,  
  462.     ref_doc_type_id, ref_id, due_date, curr_code, remark, status_doc, workflow_status,
  463.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  464.     SELECT A.tenant_id, (vDocJournalDoPos).journal_type, vDocTypeDoPos, A.trx_pos_id, A.doc_no, A.doc_date,
  465.         (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,
  466.         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',
  467.         0, pDatetime, pUserId, pDatetime, pUserId
  468.     FROM i_trx_pos A
  469.     WHERE A.tenant_id = pTenantId AND
  470.         A.ou_id = pOuId AND
  471.         A.process_no = pProcessNo AND
  472.         A.status = vStatusPos AND
  473.         EXISTS( -- added by Didit, 25 Juni 2018. Transaksi POS yang hanya produk nempil saja / service saja tidak perlu dibuatkan jurnal stock
  474.             SELECT 1 FROM i_trx_pos_item B
  475.             WHERE A.trx_pos_id = B.trx_pos_id AND
  476.                 A.process_no = B.process_no AND
  477.                 A.tenant_id = B.tenant_id
  478.         );
  479.    
  480.     INSERT INTO tt_journal_trx_item
  481.     (session_id, tenant_id, journal_trx_id, line_no,
  482.     ref_doc_type_id, ref_id,
  483.     partner_id, product_id, cashbank_id, ou_rc_id,
  484.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  485.     coa_id, curr_code, qty, uom_id,
  486.     amount, journal_date, type_rate,
  487.     numerator_rate, denominator_rate, journal_desc, remark)
  488.     SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  489.         A.doc_type_id, vEmptyId,
  490.         A.partner_id, B.product_id, vEmptyId, vEmptyId,
  491.         vEmptyId, vSignCredit, vProductCOA, vEmptyId,
  492.         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,
  493.         0 , A.doc_date, vTypeRate,
  494.         1, 1, 'PRODUCT_STOCK', vEmptyValue
  495.     FROM i_trx_pos A, i_trx_pos_item B, gl_journal_trx C
  496.     WHERE A.tenant_id = pTenantId AND
  497.         A.ou_id = pOuId AND
  498.         A.process_no = pProcessNo AND
  499.         A.status = vStatusPos AND
  500.         A.trx_pos_id = B.trx_pos_id AND
  501.         A.process_no = B.process_no AND
  502.         A.tenant_id = B.tenant_id AND
  503.         A.trx_pos_id = C.doc_id AND
  504.         A.tenant_id = C.tenant_id AND
  505.         C.doc_type_id = vDocTypeDoPos AND
  506.         C.journal_type = (vDocJournalDoPos).journal_type AND
  507.         C.ou_bu_id = (vOuStructure).ou_bu_id AND
  508.         C.ou_branch_id = (vOuStructure).ou_branch_id AND
  509.         C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  510. --      A.ou_id = C.sub_ou_id AND
  511.         A.doc_no = C.doc_no
  512.     GROUP BY A.tenant_id, C.journal_trx_id, A.doc_type_id,
  513.         A.partner_id, B.product_id, B.base_uom_id, A.doc_date;
  514.        
  515.     INSERT INTO gl_journal_trx_item
  516.     (tenant_id, journal_trx_id, line_no,
  517.     ref_doc_type_id, ref_id,
  518.     partner_id, product_id, cashbank_id, ou_rc_id,
  519.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  520.     coa_id, curr_code, qty, uom_id,
  521.     amount, journal_date, type_rate,
  522.     numerator_rate, denominator_rate, journal_desc, remark,
  523.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  524.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  525.         A.ref_doc_type_id, A.ref_id,
  526.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  527.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  528.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  529.         A.amount, A.journal_date, A.type_rate,
  530.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  531.         0, pDatetime, pUserId, pDatetime, pUserId
  532.     FROM tt_journal_trx_item A
  533.     WHERE A.session_id = pSessionId;
  534.        
  535. /*
  536.  * NK, 1 Feb 2014
  537.  * journal COGS tidak perlu breakdown per product, karena nilainya akan merupakan summary dari PRODUCT_STOCK
  538.  * (sebelumnya breakdown per product)
  539.  */        
  540.     INSERT INTO gl_journal_trx_mapping
  541.     (tenant_id, journal_trx_id, line_no,
  542.     ref_doc_type_id, ref_id,
  543.     partner_id, product_id, cashbank_id, ou_rc_id,
  544.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  545.     coa_id, curr_code, qty, uom_id,
  546.     amount, journal_date, type_rate,
  547.     numerator_rate, denominator_rate, journal_desc, remark, -- DanieL : penambahan journal_desc
  548.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  549.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id ),
  550.         vEmptyId, vEmptyId,
  551.         vEmptyId, vEmptyId, vEmptyId, vEmptyId,
  552.         vEmptyId, vSignDebit, vSystemCOA, vEmptyId,
  553.         f_get_system_coa_by_group_coa(A.tenant_id, 'HargaPokokPenjualan'), A.curr_code, 0, vEmptyId,
  554.         0, A.journal_date, A.type_rate,
  555.         1, 1, 'COGS', vEmptyValue,
  556.         0, pDatetime, pUserId, pDatetime, pUserId
  557.     FROM tt_journal_trx_item A
  558.     WHERE A.session_id = pSessionId
  559.     GROUP BY A.tenant_id, A.journal_trx_id, A.journal_date, A.type_rate, A.curr_code;
  560.    
  561.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;
  562.    
  563.     /*
  564.      * journal POS
  565.      * Credit Sales           nett price * qty, without tax
  566.      * Credit BankCharges     add amount
  567.      * Credit Tax Amount      tax amount ( sudah nett price )
  568.      * Credit Rounding         rouding
  569.      * Credit Refund Cash       refund amount
  570.      * Debit Cash             cash payment          
  571.      * Debit AccSettlement    non cash payment  
  572.      */
  573.     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)
  574.     FROM i_trx_pos A
  575.     WHERE A.tenant_id = pTenantId AND
  576.         A.ou_id = pOuId AND
  577.         A.process_no = pProcessNo AND
  578.         A.status = vStatusPos;
  579.    
  580.     INSERT INTO gl_journal_trx
  581.     (tenant_id, journal_type, doc_type_id, doc_id, doc_no, doc_date,
  582.     ou_bu_id, ou_branch_id, ou_sub_bu_id, partner_id, cashbank_id, warehouse_id, ext_doc_no, ext_doc_date,  
  583.     ref_doc_type_id, ref_id, due_date, curr_code, remark, status_doc, workflow_status,
  584.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  585.     SELECT A.tenant_id, vJournalType, A.doc_type_id, A.trx_pos_id, A.doc_no, A.doc_date,
  586.         (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,
  587.         A.ref_doc_type_id, A.ref_id, A.doc_date, A.curr_code, A.remark, vStatusDraft, 'DRAFT',
  588.         0, pDatetime, pUserId, pDatetime, pUserId
  589.     FROM i_trx_pos A
  590.     WHERE A.tenant_id = pTenantId AND
  591.         A.ou_id = pOuId AND
  592.         A.process_no = pProcessNo AND
  593.         A.status = vStatusPos;
  594.    
  595.     INSERT INTO tt_journal_trx_item
  596.     (session_id, tenant_id, journal_trx_id, line_no,
  597.     ref_doc_type_id, ref_id,
  598.     partner_id, product_id, cashbank_id, ou_rc_id,
  599.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  600.     coa_id, curr_code, qty, uom_id,
  601.     amount, journal_date, type_rate,
  602.     numerator_rate, denominator_rate, journal_desc, remark)
  603.     SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  604.         A.doc_type_id, vEmptyId,
  605.         A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  606.         vEmptyId, vSignCredit, vSystemCOA, vEmptyId,
  607.         f_get_system_coa_by_group_coa(A.tenant_id, 'PendapatanPenjualan'), B.curr_code, SUM(B.qty), B.base_uom_id,
  608.         --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,
  609.         CASE WHEN vFlgPkp = vFlagYes THEN
  610.         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
  611.         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')
  612.         --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)
  613.         END
  614.         , A.doc_date, vTypeRate,
  615.         1, 1, 'SALES_POS', vEmptyValue
  616.     FROM i_trx_pos A, i_trx_pos_item B, gl_journal_trx C
  617.     WHERE A.tenant_id = pTenantId AND
  618.         A.ou_id = pOuId AND
  619.         A.process_no = pProcessNo AND
  620.         A.status = vStatusPos AND
  621.         A.trx_pos_id = B.trx_pos_id AND
  622.         A.process_no = B.process_no AND
  623.         A.tenant_id = B.tenant_id AND
  624.         A.trx_pos_id = C.doc_id AND
  625.         A.tenant_id = C.tenant_id AND
  626.         A.doc_type_id = C.doc_type_id AND
  627.         C.journal_type = vJournalType AND
  628.         C.ou_bu_id = (vOuStructure).ou_bu_id AND
  629.         C.ou_branch_id = (vOuStructure).ou_branch_id AND
  630.         C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  631. --      A.ou_id = C.sub_ou_id AND
  632.         A.doc_no = C.doc_no
  633.     GROUP BY A.tenant_id, C.journal_trx_id, A.doc_type_id,
  634.         A.partner_id, B.curr_code, B.base_uom_id, B.flg_tax_amount, B.tax_percentage, A.doc_date;
  635.  
  636.        
  637.     IF vFlgPkp = vFlagYes THEN
  638.     -- hitung total tax item  
  639.     SELECT SUM(B.tax_amount) INTO vTotalTaxItem
  640.     FROM i_trx_pos A, i_trx_pos_item B
  641.     WHERE A.tenant_id = pTenantId AND
  642.         A.ou_id = pOuId AND
  643.         A.process_no = pProcessNo AND
  644.         A.status = vStatusPos AND
  645.         A.trx_pos_id = B.trx_pos_id AND
  646.         A.process_no = B.process_no AND
  647.         A.tenant_id = B.tenant_id;
  648.                
  649.     IF vTotalTaxItem > 0 THEN
  650.    
  651.     SELECT SUM(B.tax_amount)-vTotalTaxItem INTO vTotalTaxItemNempil
  652.     FROM i_trx_pos A, i_trx_pos_tax B
  653.     WHERE A.tenant_id = pTenantId AND
  654.         A.ou_id = pOuId AND
  655.         A.process_no = pProcessNo AND
  656.         A.status = vStatusPos AND
  657.         A.trx_pos_id = B.trx_pos_id AND
  658.         A.process_no = B.process_no AND
  659.         A.tenant_id = B.tenant_id;
  660.    
  661.     END IF;
  662.     END IF;
  663.    
  664.    
  665. -- jurnal penjualan dari produk nempil, 6 Nov 2015
  666.     WITH data_tax_pos AS(
  667.         SELECT A.trx_pos_id, A.process_no, A.tenant_id,
  668.             A.doc_type_id, SUM(B.tax_amount) AS tax_amount
  669.         FROM i_trx_pos A, i_trx_pos_item B
  670.         WHERE A.tenant_id = pTenantId AND
  671.             A.ou_id = pOuId AND
  672.             A.process_no = pProcessNo AND
  673.             A.status = vStatusPos AND
  674.             A.trx_pos_id = B.trx_pos_id AND
  675.             A.process_no = B.process_no AND
  676.             A.tenant_id = B.tenant_id
  677.         GROUP BY A.trx_pos_id, A.tenant_id, A.process_no, A.doc_type_id
  678.     ),
  679.     data_tax_total AS(
  680.         SELECT A.trx_pos_id, A.process_no, A.tenant_id,
  681.             A.doc_type_id, SUM(B.tax_amount) AS tax_amount
  682.         FROM i_trx_pos A, i_trx_pos_tax B
  683.         WHERE A.tenant_id = pTenantId AND
  684.             A.ou_id = pOuId AND
  685.             A.process_no = pProcessNo AND
  686.             A.status = vStatusPos AND
  687.             A.trx_pos_id = B.trx_pos_id AND
  688.             A.process_no = B.process_no AND
  689.             A.tenant_id = B.tenant_id
  690.         GROUP BY A.trx_pos_id, A.tenant_id, A.process_no, A.doc_type_id
  691.     ),
  692.     data_tax_nempil AS(
  693.         SELECT A.trx_pos_id, A.process_no, A.tenant_id,
  694.             A.doc_type_id, A.tax_amount - COALESCE(B.tax_amount,0) AS tax_amount
  695.         FROM data_tax_total A
  696.         LEFT JOIN data_tax_pos B ON A.trx_pos_id = B.trx_pos_id AND
  697.                                        A.tenant_id = B.tenant_id AND
  698.                                        A.process_no = B.process_no AND
  699.                                        A.doc_type_id = B.doc_type_id
  700.     )
  701.     INSERT INTO tt_journal_trx_item
  702.     (session_id, tenant_id, journal_trx_id, line_no,
  703.     ref_doc_type_id, ref_id,
  704.     partner_id, product_id, cashbank_id, ou_rc_id,
  705.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  706.     coa_id, curr_code, qty, uom_id,
  707.     amount, journal_date, type_rate,
  708.     numerator_rate, denominator_rate, journal_desc, remark)
  709.     SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  710.         A.doc_type_id, vEmptyId,
  711.         A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  712.         vEmptyId, vSignCredit, vSystemCOA, vEmptyId,
  713.         f_get_system_coa_by_group_coa(A.tenant_id, 'PendapatanPenjualan'), B.curr_code, SUM(B.qty), vEmptyId,
  714.         CASE WHEN vFlgPkp = vFlagYes THEN
  715.         SUM(B.sell_price) - COALESCE(D.tax_amount, 0) ELSE -- sell price = gross sell price * qty
  716.         SUM(B.sell_price)
  717.         END,
  718.         A.doc_date, vTypeRate,
  719.         1, 1, 'SALES_POS', vEmptyValue
  720.     FROM i_trx_pos A
  721.     INNER JOIN i_trx_pos_item_nempil_barang B ON A.trx_pos_id = B.trx_pos_id AND
  722.                                                  A.process_no = B.process_no AND
  723.                                                  A.tenant_id = B.tenant_id
  724.     INNER JOIN gl_journal_trx C ON A.trx_pos_id = C.doc_id AND
  725.                                    A.tenant_id = C.tenant_id AND
  726.                                    A.doc_type_id = C.doc_type_id AND
  727.                                    A.doc_no = C.doc_no
  728.     LEFT JOIN data_tax_nempil D ON A.trx_pos_id = D.trx_pos_id AND
  729.                                    A.tenant_id = D.tenant_id AND
  730.                                    A.doc_type_id = D.doc_type_id AND A.process_no = D.process_no
  731.     WHERE A.tenant_id = pTenantId AND
  732.         A.ou_id = pOuId AND
  733.         A.process_no = pProcessNo AND
  734.         A.status = vStatusPos AND
  735.         C.journal_type = vJournalType AND
  736.         C.ou_bu_id = (vOuStructure).ou_bu_id AND
  737.         C.ou_branch_id = (vOuStructure).ou_branch_id AND
  738.         C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id
  739. --      A.ou_id = C.sub_ou_id AND
  740.     GROUP BY A.tenant_id, C.journal_trx_id, A.doc_type_id,
  741.         A.partner_id, B.curr_code, A.doc_date, D.tax_amount;
  742.        
  743.     INSERT INTO tt_journal_trx_item
  744.     (session_id, tenant_id, journal_trx_id, line_no,
  745.     ref_doc_type_id, ref_id,
  746.     partner_id, product_id, cashbank_id, ou_rc_id,
  747.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  748.     coa_id, curr_code, qty, uom_id,
  749.     amount, journal_date, type_rate,
  750.     numerator_rate, denominator_rate, journal_desc, remark)
  751.     SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  752.         A.doc_type_id, B.trx_pos_add_cost_id,
  753.         A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  754.         vEmptyId, vSignCredit, vSystemCOA, vEmptyId,
  755.         f_get_system_coa_by_group_coa(A.tenant_id, 'BiayaKartuKredit'), B.curr_code, 0, vEmptyId,
  756.         B.add_amount, A.doc_date, vTypeRate,
  757.         1, 1, 'CHARGES_POS', B.remark
  758.     FROM i_trx_pos A, i_trx_pos_add_cost B, gl_journal_trx C
  759.     WHERE A.tenant_id = pTenantId AND
  760.         A.ou_id = pOuId AND
  761.         A.process_no = pProcessNo AND
  762.         A.status = vStatusPos AND
  763.         A.trx_pos_id = B.trx_pos_id AND
  764.         A.process_no = B.process_no AND
  765.         A.tenant_id = B.tenant_id AND
  766.         A.trx_pos_id = C.doc_id AND
  767.         A.tenant_id = C.tenant_id AND
  768.         A.doc_type_id = C.doc_type_id AND
  769.         C.journal_type = vJournalType AND
  770.         C.ou_bu_id = (vOuStructure).ou_bu_id AND
  771.         C.ou_branch_id = (vOuStructure).ou_branch_id AND
  772.         C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  773. --      A.ou_id = C.sub_ou_id AND
  774.         A.doc_no = C.doc_no AND
  775.         B.activity_gl_id = vActivityChargesId;
  776.    
  777.         -- add if By: Ping An , 27 Nov 2015
  778.     -- Jurnal VAT Hanya untuk yang PKP saja , kalo non PKP gak perlu dijurnal PPN karena non PKP tidak memungut dan melaporkan PPN
  779.     IF vFlgPkp = vFlagYes THEN
  780.    
  781.         INSERT INTO tt_journal_trx_item
  782.         (session_id, tenant_id, journal_trx_id, line_no,
  783.         ref_doc_type_id, ref_id,
  784.         partner_id, product_id, cashbank_id, ou_rc_id,
  785.         segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  786.         coa_id, curr_code, qty, uom_id,
  787.         amount, journal_date, type_rate,
  788.         numerator_rate, denominator_rate, journal_desc, remark)
  789.         SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  790.             A.doc_type_id, vEmptyId,
  791.             A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  792.             vEmptyId, vSignCredit, vTaxCOA, vEmptyId,
  793.             D.create_coa_id, D.tax_curr_code, 0, vEmptyId,
  794.             B.tax_amount , A.doc_date, vTypeRate,
  795.             1, 1, 'VAT_OUT_POS', vEmptyValue
  796.         FROM i_trx_pos A, i_trx_pos_tax B, gl_journal_trx C, m_tax D
  797.         WHERE A.tenant_id = pTenantId AND
  798.             A.ou_id = pOuId AND
  799.             A.process_no = pProcessNo AND
  800.             A.status = vStatusPos AND
  801.             A.trx_pos_id = B.trx_pos_id AND
  802.             A.process_no = B.process_no AND
  803.             A.tenant_id = B.tenant_id AND
  804.             B.tax_id = D.tax_id AND
  805.             A.trx_pos_id = C.doc_id AND
  806.             A.tenant_id = C.tenant_id AND
  807.             A.doc_type_id = C.doc_type_id AND
  808.             C.journal_type = vJournalType AND
  809.             C.ou_bu_id = (vOuStructure).ou_bu_id AND
  810.             C.ou_branch_id = (vOuStructure).ou_branch_id AND
  811.             C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  812.     --      A.ou_id = C.sub_ou_id AND
  813.             A.doc_no = C.doc_no;
  814.        
  815.        
  816.     END IF;
  817.      
  818.      
  819.     INSERT INTO tt_journal_trx_item
  820.     (session_id, tenant_id, journal_trx_id, line_no,
  821.     ref_doc_type_id, ref_id,
  822.     partner_id, product_id, cashbank_id, ou_rc_id,
  823.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  824.     coa_id, curr_code, qty, uom_id,
  825.     amount, journal_date, type_rate,
  826.     numerator_rate, denominator_rate, journal_desc, remark)
  827.     SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  828.         A.doc_type_id, vEmptyId,
  829.         A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  830.         vEmptyId, vSignCredit, vSystemCOA, vEmptyId,
  831.         f_get_system_coa_by_group_coa(A.tenant_id, 'BiayaPembulatanNilai'), A.curr_code, 0, vEmptyId,
  832.         A.rounding_amount, A.doc_date, vTypeRate,
  833.         1, 1, 'ROUNDING_POS', C.remark
  834.     FROM i_trx_pos A, gl_journal_trx C
  835.     WHERE A.tenant_id = pTenantId AND
  836.         A.ou_id = pOuId AND
  837.         A.process_no = pProcessNo AND
  838.         A.status = vStatusPos AND
  839.         A.trx_pos_id = C.doc_id AND
  840.         A.tenant_id = C.tenant_id AND
  841.         A.doc_type_id = C.doc_type_id AND
  842.         C.journal_type = vJournalType AND
  843.         C.ou_bu_id = (vOuStructure).ou_bu_id AND
  844.         C.ou_branch_id = (vOuStructure).ou_branch_id AND
  845.         C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  846. --      A.ou_id = C.sub_ou_id AND
  847.         A.doc_no = C.doc_no;      
  848.        
  849.     INSERT INTO tt_journal_trx_item
  850.     (session_id, tenant_id, journal_trx_id, line_no,
  851.     ref_doc_type_id, ref_id,
  852.     partner_id, product_id, cashbank_id, ou_rc_id,
  853.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  854.     coa_id, curr_code, qty, uom_id,
  855.     amount, journal_date, type_rate,
  856.     numerator_rate, denominator_rate, journal_desc, remark)
  857.     SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  858.         A.doc_type_id, vEmptyId,
  859.         A.partner_id, vEmptyId, E.cashbank_id, vEmptyId,
  860.         vEmptyId, vSignCredit, vCashBankCOA, vEmptyId,
  861.         E.coa_id, A.curr_code, 0, vEmptyId,
  862.         A.total_refund, A.doc_date, vTypeRate,
  863.         1, 1, 'REFUND_POS', A.remark
  864.     FROM i_trx_pos A, gl_journal_trx C, i_cash_bank_data_outlet D, m_cashbank E
  865.     WHERE A.tenant_id = pTenantId AND
  866.         A.ou_id = pOuId AND
  867.         A.process_no = pProcessNo AND
  868.         A.status = vStatusPos AND
  869.         A.trx_pos_id = C.doc_id AND
  870.         A.tenant_id = C.tenant_id AND
  871.         A.doc_type_id = C.doc_type_id AND
  872.         D.outlet_id = pOutletId AND
  873.         D.cashbank_id = E.cashbank_id AND
  874.         A.curr_code = E.curr_code AND
  875.         E.flg_cash_bank = vFlagCash AND    
  876.         C.journal_type = vJournalType AND
  877.         C.ou_bu_id = (vOuStructure).ou_bu_id AND
  878.         C.ou_branch_id = (vOuStructure).ou_branch_id AND
  879.         C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  880. --      A.ou_id = C.sub_ou_id AND
  881.         A.doc_no = C.doc_no AND
  882.         A.total_refund > 0;    
  883.  
  884.     INSERT INTO tt_journal_trx_item
  885.     (session_id, tenant_id, journal_trx_id, line_no,
  886.     ref_doc_type_id, ref_id,
  887.     partner_id, product_id, cashbank_id, ou_rc_id,
  888.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  889.     coa_id, curr_code, qty, uom_id,
  890.     amount, journal_date, type_rate,
  891.     numerator_rate, denominator_rate, journal_desc, remark)
  892.     SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  893.         A.doc_type_id, B.trx_pos_cash_payment_id,
  894.         A.partner_id, vEmptyId, E.cashbank_id, vEmptyId,
  895.         vEmptyId, vSignDebit, vCashBankCOA, vEmptyId,
  896.         E.coa_id, B.curr_payment_code, 0, vEmptyId,
  897.         B.payment_amount, A.doc_date, vTypeRate,
  898.         1, 1, 'CASH_PAYMENT_POS', B.remark
  899.     FROM i_trx_pos A, i_trx_pos_cash_payment B, gl_journal_trx C, i_cash_bank_data_outlet D, m_cashbank E
  900.     WHERE A.tenant_id = pTenantId AND
  901.         A.ou_id = pOuId AND
  902.         A.process_no = pProcessNo AND
  903.         A.status = vStatusPos AND
  904.         A.process_no = B.process_no AND
  905.         A.trx_pos_id = B.trx_pos_id AND
  906.         A.tenant_id = B.tenant_id AND
  907.         D.outlet_id = pOutletId AND
  908.         D.cashbank_id = E.cashbank_id AND
  909.         B.curr_payment_code = E.curr_code AND
  910.         E.flg_cash_bank = vFlagCash AND
  911.         A.trx_pos_id = C.doc_id AND
  912.         A.tenant_id = C.tenant_id AND
  913.         A.doc_type_id = C.doc_type_id AND
  914.         C.journal_type = vJournalType AND
  915.         C.ou_bu_id = (vOuStructure).ou_bu_id AND
  916.         C.ou_branch_id = (vOuStructure).ou_branch_id AND
  917.         C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  918. --      A.ou_id = C.sub_ou_id AND
  919.         A.doc_no = C.doc_no AND
  920.         B.payment_amount > 0; -- add by: Ping An 30 Nov 2015, ditambah filter kalau tidak ada pembayaran tidak perlu dijurnal
  921.  
  922.     INSERT INTO tt_journal_trx_item
  923.     (session_id, tenant_id, journal_trx_id, line_no,
  924.     ref_doc_type_id, ref_id,
  925.     partner_id, product_id, cashbank_id, ou_rc_id,
  926.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  927.     coa_id, curr_code, qty, uom_id,
  928.     amount, journal_date, type_rate,
  929.     numerator_rate, denominator_rate, journal_desc, remark)
  930.     SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  931.         A.doc_type_id, B.trx_pos_non_cash_payment_id,
  932.         A.partner_id, vEmptyId, E.cashbank_id, vEmptyId,
  933.         vEmptyId, vSignDebit, vCashBankCOA, vEmptyId,
  934.         E.settle_coa_id, B.curr_payment_code, 0, vEmptyId,
  935.         B.payment_amount, A.doc_date, vTypeRate,
  936.         1, 1, 'NON_CASH_PAYMENT_POS', B.remark
  937.     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
  938.     WHERE A.tenant_id = pTenantId AND
  939.         A.ou_id = pOuId AND
  940.         A.process_no = pProcessNo AND
  941.         A.status = vStatusPos AND
  942.         A.process_no = B.process_no AND
  943.         A.trx_pos_id = B.trx_pos_id AND
  944.         A.tenant_id = B.tenant_id AND
  945.         D.outlet_id = pOutletId AND
  946.         B.device_merchant_id = D.device_merchant_id AND
  947.         D.device_merchant_id = E.device_merchant_id AND
  948.         A.trx_pos_id = C.doc_id AND
  949.         A.tenant_id = C.tenant_id AND
  950.         A.doc_type_id = C.doc_type_id AND
  951.         C.journal_type = vJournalType AND
  952.         C.ou_bu_id = (vOuStructure).ou_bu_id AND
  953.         C.ou_branch_id = (vOuStructure).ou_branch_id AND
  954.         C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  955. --      A.ou_id = C.sub_ou_id AND
  956.         A.doc_no = C.doc_no AND
  957.         B.payment_amount > 0; -- add by: Ping An 30 Nov 2015, ditambah filter kalau tidak ada pembayaran tidak perlu dijurnal
  958.  
  959.        
  960.  
  961.     -- hanya dijalankan jika ada kurang bayar(BELUM LUNAS PEMBAYARANNYA ), kalau sudah lunas tidak perlu dijurnal DP  
  962.     IF vCountBelumDiBayar > 0 THEN
  963.         -- sisa pembayaran dipindahkan ke AR      
  964.             INSERT INTO tt_journal_trx_item
  965.             (session_id, tenant_id, journal_trx_id, line_no,
  966.             ref_doc_type_id, ref_id,
  967.             partner_id, product_id, cashbank_id, ou_rc_id,
  968.             segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  969.             coa_id, curr_code, qty, uom_id,
  970.             amount, journal_date, type_rate,
  971.             numerator_rate, denominator_rate, journal_desc, remark)
  972.             SELECT pSessionId, A.tenant_id, C.journal_trx_id, 1,
  973.                 A.doc_type_id, A.ref_id,
  974.                 A.partner_id, vEmptyId, vEmptyId, vEmptyId,
  975.                 vEmptyId, vSignDebit, vSystemCOA, vEmptyId,
  976.                 f_get_ar_coa_partner(A.tenant_id, D.partner_id), A.curr_code, 0, vEmptyId,
  977.                 -- rev by Ping An 17 Nov 2015, ambil nilai utuhnya karena nnti di submit invoice debt note ar yg dari POS dijaga tidak akan dijurnal
  978.                 -- B.under_payment_amount, A.doc_date, vTypeRate,
  979.                 A.total_amount, A.doc_date, vTypeRate,
  980.                 1, 1, 'AR_POS', 'NILAI DEBIT NOTE AR'
  981.             FROM i_trx_pos A, gl_journal_trx C, i_trx_pos_ext D, i_trx_pos_termin_payment E
  982.             WHERE A.tenant_id = pTenantId AND
  983.                 A.ou_id = pOuId AND
  984.                 A.process_no = pProcessNo AND
  985.                 A.status = vStatusPos AND
  986.                 A.trx_pos_id = D.trx_pos_id AND
  987.                 -- rev by: Ping An , 28 Jan 2016 joinnya kurang process_no dan tenant_id
  988.                 A.process_no = D.process_no AND
  989.                 A.tenant_id = D.tenant_id AND
  990.                 A.tenant_id = E.tenant_id AND
  991.                 A.process_no = E.process_no AND
  992.                 A.trx_pos_id = E.trx_pos_id AND
  993.                 E.under_payment_amount > 0 AND
  994.                
  995.                 A.trx_pos_id = C.doc_id AND
  996.                 A.tenant_id = C.tenant_id AND
  997.                 A.doc_type_id = C.doc_type_id AND
  998.                 C.journal_type = vJournalType AND
  999.                 C.ou_bu_id = (vOuStructure).ou_bu_id AND
  1000.                 C.ou_branch_id = (vOuStructure).ou_branch_id AND
  1001.                 C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  1002.         --      A.ou_id = C.sub_ou_id AND
  1003.                 A.doc_no = C.doc_no;      
  1004.                
  1005.  
  1006.      END IF;
  1007.            
  1008.        
  1009.        
  1010. -- TAMBAHKAN JURNAL DP add by Ping An 18 Nov 2015
  1011. -- karena nantinya di function submit invoice AR, debt note ar yang tercreate dari POS tidak akan di jurnal, jadi perlu dijurnal disini DP ARnya
  1012. -- jika ada bayar termin dari customer corporate
  1013.         --      K   m_activity_gl                   SYSTEM  DP_AR_POS
  1014. INSERT INTO tt_journal_trx_item
  1015.             (   session_id, tenant_id, journal_trx_id, line_no,
  1016.                 ref_doc_type_id, ref_id,
  1017.                 partner_id, product_id, cashbank_id, ou_rc_id,
  1018.                 segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  1019.                 coa_id, curr_code, qty, uom_id,
  1020.                 amount, journal_date, type_rate,
  1021.                 numerator_rate, denominator_rate, journal_desc, remark)
  1022.         SELECT  pSessionId, A.tenant_id, C.journal_trx_id, 1,
  1023.                 A.trx_pos_id, B.trx_pos_termin_payment_id,
  1024.                 A.partner_id, vEmptyId, vEmptyId, vEmptyId,            
  1025.                 vEmptyId, vSignCredit, vSystemCOA, D.activity_gl_id,
  1026.                 D.coa_id, B.curr_payment_code, 0, vEmptyId,            
  1027.                 B.payment_amount, A.doc_date, vTypeRate,
  1028.                 1, 1, 'DP_AR_POS', 'NILAI DP AR'
  1029.         FROM i_trx_pos A, i_trx_pos_termin_payment B, gl_journal_trx C, m_activity_gl D
  1030.     WHERE A.tenant_id = pTenantId AND
  1031.         A.ou_id = pOuId AND
  1032.         A.process_no = pProcessNo AND
  1033.         A.status = vStatusPos AND
  1034.         A.process_no = B.process_no AND
  1035.         A.trx_pos_id = B.trx_pos_id AND
  1036.         A.tenant_id = B.tenant_id AND
  1037.         A.trx_pos_id = C.doc_id AND
  1038.         A.tenant_id = C.tenant_id AND
  1039.         A.doc_type_id = C.doc_type_id AND
  1040.         C.journal_type = vJournalType AND
  1041.         C.ou_bu_id = (vOuStructure).ou_bu_id AND
  1042.         C.ou_branch_id = (vOuStructure).ou_branch_id AND
  1043.         C.ou_sub_bu_id = (vOuStructure).ou_sub_bu_id AND
  1044. --      A.ou_id = C.sub_ou_id AND
  1045.         A.doc_no = C.doc_no AND
  1046.         B.under_payment_amount > 0 AND -- ditambah filter: jika LUNAS tidak perlu di jurnal DP    
  1047.         B.payment_amount > 0 AND -- ditambah filter : jika tidak ada pembayaran juga tidak perlu di jurnal DP
  1048.         D.activity_gl_id = f_get_activity_gl_id_for_downpayment(A.tenant_id);          
  1049.            
  1050. -- END PENAMBAHKAN JURNAL DP add by Ping An 18 Nov 2015        
  1051.                            
  1052.     INSERT INTO gl_journal_trx_item
  1053.     (tenant_id, journal_trx_id, line_no,
  1054.     ref_doc_type_id, ref_id,
  1055.     partner_id, product_id, cashbank_id, ou_rc_id,
  1056.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  1057.     coa_id, curr_code, qty, uom_id,
  1058.     amount, journal_date, type_rate,
  1059.     numerator_rate, denominator_rate, journal_desc, remark,
  1060.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  1061.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  1062.         A.ref_doc_type_id, A.ref_id,
  1063.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  1064.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  1065.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  1066.         A.amount, A.journal_date, A.type_rate,
  1067.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  1068.         0, pDatetime, pUserId, pDatetime, pUserId
  1069.     FROM tt_journal_trx_item A
  1070.     WHERE A.session_id = pSessionId AND
  1071.         A.journal_desc IN ('SALES_POS','CHARGES_POS','VAT_OUT_POS', 'ROUNDING_POS', 'REFUND_POS', 'DP_AR_POS');
  1072.        
  1073.     INSERT INTO gl_journal_trx_mapping
  1074.     (tenant_id, journal_trx_id, line_no,
  1075.     ref_doc_type_id, ref_id,
  1076.     partner_id, product_id, cashbank_id, ou_rc_id,
  1077.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  1078.     coa_id, curr_code, qty, uom_id,
  1079.     amount, journal_date, type_rate,
  1080.     numerator_rate, denominator_rate, journal_desc, remark,
  1081.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  1082.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  1083.         A.ref_doc_type_id, A.ref_id,
  1084.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  1085.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  1086.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  1087.         A.amount, A.journal_date, A.type_rate,
  1088.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  1089.         0, pDatetime, pUserId, pDatetime, pUserId
  1090.     FROM tt_journal_trx_item A
  1091.     WHERE A.session_id = pSessionId AND
  1092.          -- rev by Ping An 18nov2015 A.journal_desc IN ('CASH_PAYMENT_POS','NON_CASH_PAYMENT_POS');
  1093.          A.journal_desc IN ('CASH_PAYMENT_POS','NON_CASH_PAYMENT_POS','AR_POS');
  1094.    
  1095.    
  1096.     -- buat nota debit ar untuk transaksi pos yg masih hutang
  1097.     -- added by didit, 25 September 2015
  1098.     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)
  1099.     FROM i_trx_pos A
  1100.     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
  1101.     WHERE A.tenant_id = pTenantId
  1102.         AND A.process_no = pProcessNo
  1103.         AND A.ou_id = pOuId;
  1104.    
  1105.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;
  1106.    
  1107.     DELETE FROM i_tt_pos_cash_balance WHERE session_id = pSessionId;
  1108.    
  1109.     DELETE FROM i_tt_pos_product_balance_stock WHERE session_id = pSessionId;
  1110.    
  1111.     DELETE FROM i_tt_nempil_barang_balance_stock WHERE session_id = pSessionId;
  1112.  
  1113.        
  1114. END;   
  1115. $BODY$
  1116.   LANGUAGE plpgsql VOLATILE
  1117.   COST 100;
  1118. /
Add Comment
Please, Sign In to add comment