Advertisement
Guest User

i_process_pos_from_outlet

a guest
Jan 16th, 2019
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --Fitra 2018 Des 14
  2. --NOTE : type payment di web clinic memakai camel case
  3. CREATE OR REPLACE FUNCTION i_process_pos_from_outlet(character varying,character varying)
  4.   RETURNS bigint AS
  5. $BODY$
  6. DECLARE
  7.     pSessionId          ALIAS FOR $1;
  8.     pDatetime           ALIAS FOR $2;
  9.    
  10.     vFlgInprogress            character varying := 'I';
  11.     vFlgNo                    character varying := 'N';
  12.     vFlgYes                   character varying := 'Y';
  13.     vFlgSkip                  character varying := 'S';
  14.     vDocTypeIdSalesRetailShop bigint := 401;
  15.     vEmptyString              character varying := '';
  16.     vSpaceString              character varying := ' ';
  17.     vNullRefId                bigint := -99;
  18.     vStatusSubmit             character varying(1) := 'S';
  19.    
  20.     --vDatetime               character varying(14);
  21.     vUserId                   bigint := -1;
  22.     vUserName                 character varying;
  23.     vStatusDocRelease         character varying := 'R';
  24.    
  25.     vTaxId                    bigint := -99;
  26.     vTaxPercentage            numeric := 0;
  27.     vSessionId                character varying;
  28.     --vRoundingModeNonTax         character varying(5);
  29.     vCash                     character varying :='CASH';
  30.     vProductStatusGood        character varying :='GOOD';
  31.     vModeLogAdd               character varying :='A';
  32.     vFlgCashBankCASH          character varying :='C';
  33.     vRecTypeKredit            character varying :='K';
  34.     vRecTypeDebit             character varying :='D';
  35.     vProcessName              character varying :='i_ho_process_pos_shop';
  36.    
  37.     vCardTypeDebit            character varying :='DEBIT';
  38.     vCardTypeCredit           character varying :='CREDIT';
  39.    
  40.     vTotalPos                 bigint :=0;
  41. BEGIN  
  42.    
  43.     --vDatetime := to_char(pTimestamp,'yyyyMMddHH24mmss');
  44.     vUserName := f_get_username(vUserId);
  45.     vSessionId := pSessionId;
  46.     DELETE FROM tt_i_trx_pos WHERE session_id = vSessionId;
  47.     DELETE FROM tt_i_trx_pos_item WHERE session_id = vSessionId;
  48.     --SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingModeNonTax;
  49.    
  50.     --beri tanda transaksi NFO untuk diskip
  51.     UPDATE pj.trx_pos A
  52.     SET flg_process = vFlgSkip,
  53.         process_datetime = pDatetime,
  54.         end_process_datetime = pDatetime
  55.     FROM i_clinic_registration_mapping B
  56.     INNER JOIN i_clinic_registration C ON B.clinic_registration_id = C.clinic_registration_id
  57.     WHERE A.flg_process = vFlgNo AND
  58.           A.status_doc = vStatusDocRelease AND
  59.           A.doc_date < SUBSTRING(pDatetime, 1,8) AND
  60.           B.ou_id = A.record_owner_id AND
  61.           C.flg_full_owned = vFlgNo;
  62.          
  63.     --update flg data yg diproses
  64.     --data yg diproses merupakan transaksi FO
  65.     UPDATE pj.trx_pos A
  66.     SET flg_process = vFlgInprogress,
  67.         process_datetime = pDatetime
  68.     FROM i_clinic_registration_mapping B
  69.     INNER JOIN i_clinic_registration C ON B.clinic_registration_id = C.clinic_registration_id
  70.     WHERE A.flg_process = vFlgNo AND
  71.           A.status_doc = vStatusDocRelease AND
  72.           A.doc_date < SUBSTRING(pDatetime, 1,8) AND
  73.           B.ou_id = A.record_owner_id AND
  74.           C.flg_full_owned = vFlgYes;
  75.    
  76.     --insert ke header pos temporary
  77.     INSERT INTO tt_i_trx_pos(
  78.             session_id, trx_pos_id, process_no, tenant_id, doc_type_id, doc_no, doc_date,
  79.             ou_id, ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id, remark,
  80.             partner_id, partner_bill_to_id, partner_ship_to_id, salesman_id,
  81.             curr_code, add_discount_percentage, add_discount_amount, gross_amount,
  82.             nett_amount, tax_amount, add_amount, total_amount, rounding_amount,
  83.             total_payment, total_refund, status, version, create_datetime,
  84.             create_user_id, create_user_name, update_datetime, update_user_id,
  85.             update_user_name, return_amount, warehouse_id, outlet_id)
  86.     SELECT vSessionId, A.pos_id, A.pos_id||'_'||A.doc_no, B.tenant_id, vDocTypeIdSalesRetailShop, A.doc_no, A.doc_date,
  87.            A.record_owner_id,vEmptyString, vEmptyString, A.doc_type_id, A.pos_id, A.remark,
  88.            vNullRefId, B.partner_id, vNullRefId,  vNullRefId,
  89.            A.curr_code, 0, 0, 0,
  90.            0, 0, 0, 0, 0,
  91.            0, 0, vStatusSubmit, 0, pDatetime,
  92.            vUserId, vUserName, pDatetime, vUserId,
  93.            vUserName, 0, A.warehouse_id, B.outlet_id
  94.     FROM pj.trx_pos A
  95.     INNER JOIN i_clinic_registration_mapping B ON B.ou_id = A.record_owner_id
  96.     WHERE A.flg_process = vFlgInprogress;
  97.    
  98.     --insert header ke pos item temporary
  99.     INSERT INTO tt_i_trx_pos_item(
  100.             session_id, process_no, tenant_id, trx_pos_id, line_no,
  101.             product_id, product_balance_id,
  102.             base_uom_id, qty, curr_code,
  103.             gross_sell_price, flg_tax_amount, tax_id,
  104.             tax_percentage, tax_price,
  105.             promo_code, discount_percentage, discount_amount, nett_sell_price,
  106.             tax_amount, nett_amount_item, remark, version, group_product_ou_id,
  107.             create_datetime, create_user_id, update_datetime, update_user_id,
  108.             ref_item_id, ref_assembly_product_id)
  109.     SELECT  vSessionId, A.process_no, B.tenant_id, A.trx_pos_id, C.line_no,
  110.             C.product_id, f_get_product_balance_non_serialnumber_by_product_id(C.product_id, B.tenant_id),
  111.             f_get_product_base_uom_id(C.product_id), C.qty, A.curr_code,
  112.             C.unit_sell_price , COALESCE(E.flg_pkp, vFlgNo), CASE WHEN COALESCE(E.flg_pkp, vFlgNo) = vFlgYes THEN f_get_tax_by_tenant_id(B.tenant_id) ELSE vNullRefId END,
  113.             CASE WHEN COALESCE(E.flg_pkp, vFlgNo) = vFlgYes THEN f_get_tax_percentage_by_tenant_id(B.tenant_id) ELSE 0 END, 0,
  114.             vEmptyString, 0, (C.item_discount_amount + C.discount_header_on_item)/C.qty, 0,
  115.             0, C.item_amount_after_discount - C.discount_header_on_item, C.item_remark, 0, f_get_group_product_ou(B.ou_id, C.product_id),
  116.             pDatetime, vUserId, pDatetime, vUserId,
  117.             vNullRefId, vNullRefId
  118.     FROM tt_i_trx_pos A
  119.     INNER JOIN i_clinic_registration_mapping B ON B.ou_id = A.ou_id
  120.     INNER JOIN pj.trx_pos_item C ON C.pos_id = A.trx_pos_id
  121.     INNER JOIN m_ou_structure D ON A.ou_id = D.ou_id
  122.     LEFT JOIN t_ou_legal E ON D.ou_bu_id = E.ou_id
  123.     --INNER JOIN in_product_balance D ON D.product_id = C.product_id AND D.lot_number = vSpaceString AND D.serial_number = vSpaceString
  124.     WHERE A.session_id = vSessionId;
  125.    
  126.     --menghitung tax price,  tax_amount
  127.     --ini ikut perhitungan di submit SO    
  128.     UPDATE tt_i_trx_pos_item
  129.     SET nett_sell_price = gross_sell_price - discount_amount,
  130.         tax_price = f_tax_rounding(tenant_id, f_get_amount_before_tax((gross_sell_price - discount_amount), flg_tax_amount, tax_percentage,f_get_digit_decimal_doc_curr(vDocTypeIdSalesRetailShop, curr_code), f_get_value_system_config_by_param_code(tenant_id, 'rounding.mode.non.tax')), tax_percentage),
  131.         tax_amount = f_tax_rounding(tenant_id, f_get_amount_before_tax((qty * (gross_sell_price - discount_amount)), flg_tax_amount, tax_percentage,f_get_digit_decimal_doc_curr(vDocTypeIdSalesRetailShop, curr_code), f_get_value_system_config_by_param_code(tenant_id, 'rounding.mode.non.tax')), tax_percentage)
  132.     WHERE session_id = vSessionId;
  133.    
  134.     --menghitung nett_sell_price, nett_amount_item
  135.     --ini ikut perhitungan BFnya addrian    
  136.     --UPDATE tt_i_trx_pos_item
  137.     --SET nett_sell_price = gross_sell_price -tax_price,
  138.     --  nett_amount_item = (gross_sell_price * qty) - tax_amount
  139.     --WHERE A.session_id = vSessionId;
  140.    
  141.     --insert ke trx pos tax
  142.     INSERT INTO i_trx_pos_tax(
  143.             process_no, tenant_id, trx_pos_id, tax_id, flg_amount,
  144.             tax_percentage, base_amount, tax_amount, remark, version, create_datetime,
  145.             create_user_id, update_datetime, update_user_id)
  146.     SELECT A.process_no, A.tenant_id, A.trx_pos_id, A.tax_id, B.flg_amount,
  147.            A.tax_percentage, SUM(A.nett_amount_item - A.tax_amount), SUM(A.tax_amount), vEmptyString, 0,pDatetime,
  148.            vUserId, pDatetime, vUserId
  149.     FROM tt_i_trx_pos_item A
  150.     INNER JOIN m_tax B ON B.tax_id = A.tax_id
  151.     WHERE A.session_id = vSessionId AND A.flg_tax_amount = vFlgYes
  152.     GROUP BY A.process_no, A.tenant_id, A.trx_pos_id, A.tax_id, B.flg_amount,
  153.            A.tax_percentage;
  154.    
  155.            
  156.     --===============INSERT TERKAIT PAYMENT=========================
  157.     -- buat paymentnya CASH
  158.     -- karena currencynya cuma ada IDR, tidak perlu carikan nilai exchange
  159.     INSERT INTO i_trx_pos_cash_payment(
  160.             process_no, tenant_id, trx_pos_id, curr_payment_code,
  161.             payment_amount, date_exchange_rate, numerator_rate, denominator_rate,
  162.             conversion_amount, remark, version, create_datetime, create_user_id,
  163.             update_datetime, update_user_id)
  164.     SELECT  A.process_no, A.tenant_id, A.trx_pos_id, B.curr_code,
  165.             SUM(B.payment_amount), A.doc_date, 1, 1,
  166.             SUM(B.payment_amount), vEmptyString, 0, pDatetime, vUserId,
  167.             pDatetime, vUserId
  168.     FROM tt_i_trx_pos A
  169.     INNER JOIN pj.trx_pos_payment B ON B.pos_id = A.trx_pos_id
  170.     WHERE A.session_id = vSessionId AND
  171.           B.payment_type = vCash
  172.     GROUP BY A.process_no, A.tenant_id, A.trx_pos_id, B.curr_code, A.doc_date;
  173.    
  174.     -- buat paymentnya selain CASH (EDC)
  175.     -- karena currencynya cuma ada IDR, tidak perlu carikan nilai exchange
  176.     INSERT INTO i_trx_pos_non_cash_payment(
  177.             process_no, tenant_id, trx_pos_id,
  178.             line_no, device_merchant_id, card_type,
  179.             bank_card_code, card_no,
  180.             curr_payment_code, payment_amount, date_exchange_rate, numerator_rate,
  181.             denominator_rate, conversion_amount, remark, version, create_datetime,
  182.             create_user_id, update_datetime, update_user_id)
  183.     SELECT  A.process_no, A.tenant_id, A.trx_pos_id,
  184.             ROW_NUMBER () OVER (ORDER BY B.device_merchant_id), B.device_merchant_id, f_get_card_type_for_pos_intgr(B.payment_type),
  185.             vEmptyString, B.payment_ref_no,
  186.             B.curr_code, SUM(B.payment_amount), vEmptyString, 1,
  187.             1, SUM(B.payment_amount), B.payment_remark, 0, pDatetime,
  188.             vUserId, pDatetime, vUserId
  189.     FROM tt_i_trx_pos A
  190.     INNER JOIN pj.trx_pos_payment B ON B.pos_id = A.trx_pos_id
  191.     WHERE A.session_id = vSessionId AND
  192.           B.payment_type <> vCash
  193.     GROUP BY A.process_no, A.tenant_id, A.trx_pos_id, B.device_merchant_id, B.payment_type, B.payment_ref_no, B.curr_code, B.payment_remark;    
  194.  
  195.     --update data product balance stock
  196.     WITH summary_qty AS(
  197.         SELECT SUM(B.qty) AS qty,
  198.                B.product_id,
  199.                B.product_balance_id,
  200.                vProductStatusGood AS product_status,
  201.                A.warehouse_id,
  202.                B.tenant_id
  203.         FROM pj.trx_pos A
  204.         INNER JOIN tt_i_trx_pos_item B ON A.pos_id = B.trx_pos_id
  205.         WHERE B.session_id = vSessionId
  206.         GROUP BY B.product_id, B.product_balance_id, A.warehouse_id, B.tenant_id  
  207.     )
  208.     UPDATE in_product_balance_stock Z
  209.     SET qty = Z.qty - A.qty,
  210.         version = Z.version + 1,
  211.         update_datetime = pDatetime,
  212.         update_user_id = vUserId
  213.     FROM summary_qty A
  214.     WHERE Z.product_id = A.product_id AND
  215.           Z.warehouse_id = A.warehouse_id AND
  216.           Z.product_balance_id = A.product_balance_id AND
  217.           Z.product_status = A.product_status AND
  218.           Z.tenant_id = A.tenant_id;
  219.    
  220.     --insert data log balance stock
  221.     INSERT INTO in_log_product_balance_stock(
  222.             tenant_id, ou_id, doc_type_id,
  223.             ref_id, doc_no, doc_date, partner_id, product_id, warehouse_id,
  224.             product_balance_id, product_status, base_uom_id, qty, version,
  225.             create_datetime, create_user_id, update_datetime, update_user_id)
  226.     SELECT  A.tenant_id, A.ou_id, A.doc_type_id,
  227.             A.trx_pos_id, A.doc_no, A.doc_date, vNullRefId, B.product_id, C.warehouse_id,
  228.             B.product_balance_id, vProductStatusGood, B.base_uom_id, -1 * SUM(B.qty), 0,
  229.             pDatetime, vUserId, pDatetime, vUserId
  230.     FROM tt_i_trx_pos A
  231.     INNER JOIN tt_i_trx_pos_item B ON A.trx_pos_id = B.trx_pos_id AND
  232.                                       A.process_no = B.process_no AND A.tenant_id = B.tenant_id AND
  233.                                       A.session_id = B.session_id
  234.     INNER JOIN pj.trx_pos C ON C.pos_id = A.trx_pos_id
  235.     WHERE A.session_id = vSessionId
  236.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id, A.doc_no, A.doc_date,
  237.              B.product_id, C.warehouse_id, B.product_balance_id, B.base_uom_id;
  238.    
  239.     --insert data i_trx_data_log
  240.     INSERT INTO i_trx_data_log(
  241.             tenant_id, ou_id, doc_date, db_version, type_data,
  242.             mode_log, data_log, version, create_datetime, create_user_id,
  243.             update_datetime, update_user_id)
  244.     SELECT  A.tenant_id, A.ou_id, A.doc_date , '1.0', 'in_log_product_balance_stock',
  245.             vModeLogAdd, row_to_json(B)::TEXT, 0, pDatetime, vUserId,
  246.             pDatetime, vUserId
  247.     FROM    tt_i_trx_pos A
  248.     INNER JOIN in_log_product_balance_stock B ON A.tenant_id = B.tenant_id AND A.ou_id = B.ou_id AND
  249.                                                  A.doc_type_id = B.doc_type_id AND A.trx_pos_id = B.ref_id
  250.     WHERE A.session_id = vSessionId
  251.     GROUP BY B.log_product_balance_stock_id, A.tenant_id, A.ou_id, A.doc_date;
  252.    
  253.     --insert ke cash bank balance degan amount 0
  254.     WITH cashbank_balance_grouped AS (
  255.         SELECT  A.tenant_id, A.ou_id, f_get_cash_oulet_by_ou_id_and_currcode(A.ou_id, A.curr_code) AS cashbank_id,
  256.                 A.doc_date AS cash_bank_date, B.curr_payment_code AS curr_code
  257.         FROM tt_i_trx_pos A
  258.         INNER JOIN i_trx_pos_cash_payment B ON B.process_no = A.process_no AND B.tenant_id = A.tenant_id AND
  259.                                                B.trx_pos_id = A.trx_pos_id
  260.         WHERE A.session_id = vSessionId
  261.         GROUP BY A.tenant_id, A.ou_id, f_get_cash_oulet_by_ou_id_and_currcode(A.ou_id, A.curr_code), A.doc_date,
  262.                  B.curr_payment_code
  263.     )
  264.    
  265.     INSERT INTO cb_cashbank_balance(
  266.             tenant_id, ou_id, cashbank_id, cash_bank_date,
  267.             rec_type, curr_code, amount, version, create_datetime, create_user_id,
  268.             update_datetime, update_user_id)
  269.     SELECT  A.tenant_id, A.ou_id, A.cashbank_id, A.cash_bank_date,
  270.             vRecTypeDebit, A.curr_code, 0, 0, pDatetime, vUserId,
  271.             pDatetime, vUserId
  272.     FROM cashbank_balance_grouped A
  273.     WHERE NOT EXISTS(
  274.             SELECT 1
  275.             FROM cb_cashbank_balance B
  276.             WHERE B.tenant_id = A.tenant_id AND
  277.                   B.ou_id = A.ou_id AND
  278.                   B.cashbank_id = A.cashbank_id AND
  279.                   B.cash_bank_date = A.cash_bank_date AND
  280.                   B.rec_type = vRecTypeDebit );
  281.    
  282.     --update cash bank balance untuk semua payment cash
  283.     WITH cashbank_balance_grouped AS (
  284.         SELECT  A.tenant_id, A.ou_id, f_get_cash_oulet_by_ou_id_and_currcode(A.ou_id, A.curr_code) AS cashbank_id,
  285.                 A.doc_date AS cash_bank_date, B.curr_payment_code AS curr_code, sum(B.conversion_amount) AS amount
  286.         FROM tt_i_trx_pos A
  287.         INNER JOIN i_trx_pos_cash_payment B ON B.process_no = A.process_no AND B.tenant_id = A.tenant_id AND
  288.                                                B.trx_pos_id = A.trx_pos_id
  289.         WHERE A.session_id = vSessionId
  290.         GROUP BY A.tenant_id, A.ou_id, f_get_cash_oulet_by_ou_id_and_currcode(A.ou_id, A.curr_code), A.doc_date,
  291.                  B.curr_payment_code
  292.     )
  293.     UPDATE cb_cashbank_balance Z
  294.     SET amount = Z.amount + A.amount,
  295.         version = Z.version + 1,
  296.         update_datetime = pDatetime,
  297.         update_user_id = vUserId
  298.     FROM cashbank_balance_grouped A
  299.     WHERE Z.tenant_id = A.tenant_id AND
  300.           Z.ou_id = A.ou_id AND
  301.           Z.cashbank_id = A.cashbank_id AND
  302.           Z.cash_bank_date = A.cash_bank_date AND
  303.           Z.rec_type = vRecTypeDebit;
  304.    
  305.     --INSERT cb_balance_settlement
  306.     WITH balance_settlement_grouped AS (
  307.         SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.doc_date,
  308.                B.device_merchant_id, B.card_type, B.bank_card_code, B.card_no,
  309.                B.curr_payment_code AS curr_code
  310.         FROM tt_i_trx_pos A
  311.         INNER JOIN i_trx_pos_non_cash_payment B ON B.process_no = A.process_no AND B.tenant_id = A.tenant_id AND
  312.                                                B.trx_pos_id = A.trx_pos_id
  313.         WHERE A.session_id = vSessionId
  314.         GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.doc_date,
  315.                  B.device_merchant_id, B.card_type, B.bank_card_code, B.card_no, B.curr_payment_code )
  316.     INSERT INTO cb_balance_settlement(
  317.             tenant_id, ou_id, doc_type_id, doc_no,
  318.             doc_date, device_merchant_id, card_type, bank_card_code, card_no,
  319.             curr_payment_code, amount_payment, flg_settle, cashbank_id, cash_bank_date,
  320.             ref_doc_type_id, ref_id, version, create_datetime, create_user_id,
  321.             update_datetime, update_user_id, remark)
  322.    
  323.     SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no,
  324.            A.doc_date, A.device_merchant_id, A.card_type, A.bank_card_code, A.card_no,
  325.            A.curr_code, 0, vFlgNo, vNullRefId, vEmptyString,
  326.            vNullRefId, vNullRefId, 0, pDatetime, vUserId,
  327.            pDatetime, vUserId, vEmptyString
  328.     FROM balance_settlement_grouped A
  329.     WHERE NOT EXISTS (
  330.         SELECT 1 FROM cb_balance_settlement B
  331.         WHERE A.tenant_id = B.tenant_id AND
  332.               A.ou_id = B.ou_id AND
  333.               A.doc_type_id = B.doc_type_id AND
  334.               A.doc_no =  B.doc_no AND
  335.               A.doc_date = B.doc_date AND
  336.               A.device_merchant_id = B.device_merchant_id AND
  337.               A.card_type = B.card_type AND
  338.               A.bank_card_code = B.bank_card_code AND
  339.               A.card_no = B.card_no AND
  340.               A.curr_code = B.curr_payment_code);
  341.              
  342.      WITH balance_settlement_grouped AS (
  343.         SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.doc_date,
  344.                B.device_merchant_id, B.card_type, B.bank_card_code, B.card_no,
  345.                B.curr_payment_code AS curr_code, SUM(B.payment_amount) AS amount_payment
  346.         FROM tt_i_trx_pos A
  347.         INNER JOIN i_trx_pos_non_cash_payment B ON B.process_no = A.process_no AND B.tenant_id = A.tenant_id AND
  348.                                                B.trx_pos_id = A.trx_pos_id
  349.         WHERE A.session_id = vSessionId
  350.         GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.doc_no, A.doc_date,
  351.                  B.device_merchant_id, B.card_type, B.bank_card_code, B.card_no, B.curr_payment_code )       
  352.     UPDATE cb_balance_settlement B
  353.     SET amount_payment = B.amount_payment + A.amount_payment,
  354.         version = B.version + 1,
  355.         update_datetime = pDatetime,
  356.         update_user_id = vUserId
  357.     FROM balance_settlement_grouped A
  358.     WHERE A.tenant_id = B.tenant_id AND
  359.           A.ou_id = B.ou_id AND
  360.           A.doc_type_id = B.doc_type_id AND
  361.           A.doc_no =  B.doc_no AND
  362.           A.doc_date = B.doc_date AND
  363.           A.device_merchant_id = B.device_merchant_id AND
  364.           A.card_type = B.card_type AND
  365.           A.bank_card_code = B.bank_card_code AND
  366.           A.card_no = B.card_no AND
  367.           A.curr_code = B.curr_payment_code;
  368.    
  369.          
  370.       --update gross_amount, nett_amount, total_amount
  371.       WITH item_grouped AS (
  372.             SELECT SUM(A.qty * A.discount_amount) AS discount_amount,
  373.                    SUM(A.qty * A.gross_sell_price) AS gross_amount,
  374.                    SUM(A.nett_amount_item) AS nett_amount,
  375.                    SUM(A.tax_amount) AS tax_amount,
  376.                    A.process_no,
  377.                    A.tenant_id,
  378.                    A.trx_pos_id
  379.             FROM tt_i_trx_pos_item A
  380.             WHERE A.session_id = vSessionId
  381.             GROUP BY A.process_no, A.tenant_id, A.trx_pos_id
  382.       )
  383.       UPDATE tt_i_trx_pos Z
  384.       SET gross_amount = Z.gross_amount + A.gross_amount,
  385.           nett_amount = Z.nett_amount + A.nett_amount,
  386.           total_amount = Z.total_amount + A.nett_amount
  387.       FROM item_grouped A
  388.       WHERE Z.session_id = vSessionId AND
  389.             A.process_no = Z.process_no AND
  390.             A.tenant_id = Z.tenant_id AND
  391.             A.trx_pos_id = Z.trx_pos_id;
  392.            
  393.       --update payment amount untuk pembayaran CASH
  394.       WITH payment_cash_grouped AS (
  395.             SELECT SUM(A.conversion_amount) AS payment_amount,
  396.                    B.process_no,
  397.                    B.tenant_id,
  398.                    B.trx_pos_id
  399.             FROM i_trx_pos_cash_payment A
  400.             INNER JOIN tt_i_trx_pos B ON A.process_no = B.process_no AND A.tenant_id = B.tenant_id AND A.trx_pos_id = B.trx_pos_id
  401.             WHERE B.session_id = vSessionId
  402.             GROUP BY B.process_no, B.tenant_id, B.trx_pos_id
  403.       )
  404.       UPDATE tt_i_trx_pos Z
  405.       SET total_payment = Z.total_payment + A.payment_amount
  406.       FROM payment_cash_grouped A
  407.       WHERE Z.session_id = vSessionId AND
  408.             A.process_no = Z.process_no AND
  409.             A.tenant_id = Z.tenant_id AND
  410.             A.trx_pos_id = Z.trx_pos_id;
  411.            
  412.       --update payment amount untuk pembayaran EDC
  413.       WITH payment_non_cash_grouped AS (
  414.             SELECT SUM(A.conversion_amount) AS payment_amount,
  415.                    B.process_no,
  416.                    B.tenant_id,
  417.                    B.trx_pos_id
  418.             FROM i_trx_pos_non_cash_payment A
  419.             INNER JOIN tt_i_trx_pos B ON A.process_no = B.process_no AND A.tenant_id = B.tenant_id AND A.trx_pos_id = B.trx_pos_id
  420.             WHERE B.session_id = vSessionId
  421.             GROUP BY B.process_no, B.tenant_id, B.trx_pos_id
  422.       )
  423.       UPDATE tt_i_trx_pos Z
  424.       SET total_payment = Z.total_payment + A.payment_amount
  425.       FROM payment_non_cash_grouped A
  426.       WHERE Z.session_id = vSessionId AND
  427.             A.process_no = Z.process_no AND
  428.             A.tenant_id = Z.tenant_id AND
  429.             A.trx_pos_id = Z.trx_pos_id;
  430.            
  431.       --buat data header POS
  432.       INSERT INTO i_trx_pos(
  433.             trx_pos_id, process_no, tenant_id, doc_type_id, doc_no, doc_date,
  434.             ou_id, ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id, remark,
  435.             partner_id, partner_bill_to_id, partner_ship_to_id, salesman_id,
  436.             curr_code, add_discount_percentage, add_discount_amount, gross_amount,
  437.             nett_amount, tax_amount, add_amount, total_amount, rounding_amount,
  438.             total_payment, total_refund, status, version, create_datetime,
  439.             create_user_id, create_user_name, update_datetime, update_user_id,
  440.             update_user_name, return_amount)
  441.     SELECT trx_pos_id, process_no, tenant_id, doc_type_id, doc_no, doc_date,
  442.             ou_id, ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id, remark,
  443.             partner_id, partner_bill_to_id, partner_ship_to_id, salesman_id,
  444.             curr_code, add_discount_percentage, add_discount_amount, gross_amount,
  445.             nett_amount, tax_amount, add_amount, total_amount, rounding_amount,
  446.             total_payment, total_refund, status, version, create_datetime,
  447.             create_user_id, create_user_name, update_datetime, update_user_id,
  448.             update_user_name, return_amount
  449.     FROM tt_i_trx_pos WHERE session_id = vSessionId;
  450.    
  451.     --buat data item POS
  452.     INSERT INTO i_trx_pos_item(
  453.             process_no, tenant_id, trx_pos_id, line_no,
  454.             product_id, product_balance_id, base_uom_id, qty, curr_code,
  455.             gross_sell_price, flg_tax_amount, tax_id, tax_percentage, tax_price,
  456.             promo_code, discount_percentage, discount_amount, nett_sell_price,
  457.             tax_amount, nett_amount_item, remark, version, group_product_ou_id,
  458.             create_datetime, create_user_id, update_datetime, update_user_id,
  459.             ref_item_id, ref_assembly_product_id)
  460.     SELECT  process_no, tenant_id, trx_pos_id, line_no,
  461.             product_id, product_balance_id, base_uom_id, qty, curr_code,
  462.             gross_sell_price, flg_tax_amount, tax_id, tax_percentage, tax_price,
  463.             promo_code, discount_percentage, discount_amount, nett_sell_price,
  464.             tax_amount, nett_amount_item, remark, version, group_product_ou_id,
  465.             create_datetime, create_user_id, update_datetime, update_user_id,
  466.             ref_item_id, ref_assembly_product_id
  467.     FROM tt_i_trx_pos_item
  468.     WHERE session_id = vSessionId;
  469.    
  470.     --panggil function submit
  471.     PERFORM generate_process_message_for_submit_pos_shop(vSessionId, A.tenant_id, vProcessName, A.process_no,
  472.                                                         pDatetime, A.outlet_id, A.ou_id, A.warehouse_id, vUserId)
  473.     FROM tt_i_trx_pos A
  474.     WHERE A.session_id = vSessionId;
  475.    
  476.     --update trx_pos flg_process = Y  
  477.     UPDATE pj.trx_pos A
  478.     SET flg_process = vFlgYes,
  479.         end_process_datetime = to_char(current_timestamp,'yyyyMMddHH24mmss')
  480.     FROM tt_i_trx_pos B
  481.     WHERE A.pos_id = B.trx_pos_id;
  482.    
  483.     SElECT count(1) INTO vTotalPos
  484.     FROM tt_i_trx_pos A
  485.     WHERE A.session_id = vSessionId;
  486.    
  487.     DELETE FROM tt_i_trx_pos WHERE session_id = vSessionId;
  488.     DELETE FROM tt_i_trx_pos_item WHERE session_id = vSessionId;
  489.    
  490.     return vTotalPos;
  491.    
  492. END;
  493. $BODY$
  494.   LANGUAGE plpgsql VOLATILE
  495.   COST 100;
  496.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement