Advertisement
Guest User

i_process_pos_from_so_online

a guest
Jan 16th, 2019
136
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_so_online(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.     vStatusDocShipped         character varying := 'S';
  25.    
  26.     vTaxId                    bigint := -99;
  27.     vTaxPercentage            numeric := 0;
  28.     vSessionId                character varying;
  29.     --vRoundingModeNonTax         character varying(5);
  30.     vCash                     character varying :='CASH';
  31.     vProductStatusGood        character varying :='GOOD';
  32.     vModeLogAdd               character varying :='A';
  33.     vFlgCashBankCASH          character varying :='C';
  34.     vRecTypeKredit            character varying :='K';
  35.     vRecTypeDebit             character varying :='D';
  36.     vProcessName              character varying :='i_ho_process_pos_shop';
  37.    
  38.     vCardTypeDebit            character varying :='DEBIT';
  39.     vCardTypeCredit           character varying :='CREDIT';
  40.    
  41.     vTotalPos                 bigint :=0;
  42.     vParamCodeWarehouseId     character varying :='pos.from.so.online.default.warehouse.id';
  43.    
  44.     vTenantId                 bigint;
  45.     vOuId                     bigint;
  46.     vOutletId                 bigint;
  47.     vFlgOuBuPkp               character varying;
  48. BEGIN  
  49.    
  50.     --vDatetime := to_char(pTimestamp,'yyyyMMddHH24mmss');
  51.     vUserName := f_get_username(vUserId);
  52.     vSessionId := pSessionId;
  53.     DELETE FROM tt_i_trx_pos WHERE session_id = vSessionId;
  54.     DELETE FROM tt_i_trx_pos_item WHERE session_id = vSessionId;
  55.    
  56.     --SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingModeNonTax;
  57.    
  58.     --beri tanda untuk so online yg akan diproses (status S, dan ada resinya
  59.     UPDATE sl_order A
  60.     SET flg_process = vFlgInprogress,
  61.         process_intgr_datetime = pDatetime
  62.     WHERE A.flg_process = vFlgNo AND
  63.           A.status = vStatusDocShipped AND
  64.           A.delivery_datetime < pDatetime AND
  65.           NOT (A.delivery_datetime IS NULL) AND
  66.           TRIM(A.delivery_datetime) != vEmptyString AND
  67.           EXISTS( SELECT 1 FROM sl_order_address B WHERE A.order_id=B.order_id AND TRIM(B.waybill_number) <> vEmptyString);
  68.          
  69.     --ambil informasi tenant, ouId, outletId dan flg pkp
  70.     SELECT tenant_id, ou_id, outlet_id INTO vTenantId, vOuId, vOutletId
  71.     FROM i_clinic_registration_mapping
  72.     WHERE flg_online = vFlgYes
  73.     ORDER BY clinic_code
  74.     LIMIT 1;
  75.    
  76.     vTenantId := COALESCE(vTenantId, vNullRefId);
  77.     vOuId := COALESCE(vOuId, vNullRefId);
  78.     vOutletId := COALESCE(vOutletId, vNullRefId);
  79.    
  80.     SELECT COALESCE(B.flg_pkp, vFlgNo) INTO vFlgOuBuPkp
  81.     FROM m_ou_structure A
  82.     LEFT JOIN t_ou_legal B ON A.ou_bu_id = B.ou_id
  83.     WHERE A.ou_id = vOuId;
  84.    
  85.     vFlgOuBuPkp := COALESCE(vFlgOuBuPkp, vFlgNo);
  86.    
  87.     --insert ke header pos temporary
  88.     -- tenantnya patut diperhatikan  
  89.     INSERT INTO tt_i_trx_pos(
  90.             session_id, trx_pos_id, process_no, tenant_id, doc_type_id, doc_no, doc_date,
  91.             ou_id, ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id, remark,
  92.             partner_id, partner_bill_to_id, partner_ship_to_id, salesman_id,
  93.             curr_code, add_discount_percentage, add_discount_amount, gross_amount,
  94.             nett_amount, tax_amount, add_amount, total_amount, rounding_amount,
  95.             total_payment, total_refund, status, version, create_datetime,
  96.             create_user_id, create_user_name, update_datetime, update_user_id,
  97.             update_user_name, return_amount, warehouse_id, outlet_id)
  98.     SELECT vSessionId, A.order_id, A.order_id||'_'||A.doc_no||'_'||vSessionId, vTenantId, vDocTypeIdSalesRetailShop, A.doc_no, SUBSTRING(A.delivery_datetime, 1,8),
  99.            vOuId,vEmptyString, vEmptyString, A.doc_type_id, A.order_id, A.remark,
  100.            vNullRefId, vNullRefId, vNullRefId,  vNullRefId,
  101.            A.curr_code, 0, 0, 0,
  102.            0, 0, (CASE WHEN C.shipping_fee - C.shipping_fee_discount < 0 THEN 0 ELSE C.shipping_fee - C.shipping_fee_discount END) + A.handling_fee, 0, 0,
  103.            0, 0, vStatusSubmit, 0, pDatetime,
  104.            vUserId, vUserName, pDatetime, vUserId,
  105.            vUserName, 0, f_get_value_system_config_by_param_code(vTenantId, vParamCodeWarehouseId)::bigint, vOutletId
  106.     FROM sl_order A
  107.     INNER JOIN sl_order_address C ON C.order_id = A.order_id
  108.     WHERE A.flg_process = vFlgInprogress;
  109.    
  110.     --insert header ke pos item temporary
  111.     INSERT INTO tt_i_trx_pos_item(
  112.             session_id, process_no, tenant_id, trx_pos_id, line_no,
  113.             product_id, product_balance_id,
  114.             base_uom_id, qty, curr_code,
  115.             gross_sell_price, flg_tax_amount, tax_id,
  116.             tax_percentage, tax_price,
  117.             promo_code, discount_percentage, discount_amount, nett_sell_price,
  118.             tax_amount, nett_amount_item, remark, version, group_product_ou_id,
  119.             create_datetime, create_user_id, update_datetime, update_user_id,
  120.             ref_item_id, ref_assembly_product_id)
  121.     SELECT  vSessionId, A.process_no, A.tenant_id, A.trx_pos_id, ROW_NUMBER () OVER(ORDER BY C.product_id),
  122.             C.product_id, f_get_product_balance_non_serialnumber_by_product_id(C.product_id, A.tenant_id),
  123.             f_get_product_base_uom_id(C.product_id), C.qty_order, A.curr_code,
  124.             C.unit_price, vFlgOuBuPkp, CASE WHEN vFlgOuBuPkp = vFlgYes THEN f_get_tax_by_tenant_id(A.tenant_id) ELSE vNullRefId END,
  125.             CASE WHEN vFlgOuBuPkp = vFlgYes THEN f_get_tax_percentage_by_tenant_id(A.tenant_id) ELSE 0 END, 0,
  126.             vEmptyString, 0, (C.item_discount_order + C.discount_header_on_item)/C.qty_order, 0,
  127.             0, C.sub_grand_total_order_amount - C.discount_header_on_item, vEmptyString, 0, f_get_group_product_ou(A.ou_id, C.product_id),
  128.             pDatetime, vUserId, pDatetime, vUserId,
  129.             vNullRefId, vNullRefId
  130.     FROM tt_i_trx_pos A
  131.     INNER JOIN sl_order_item C ON C.order_id = A.trx_pos_id
  132.     WHERE A.session_id = vSessionId;
  133.    
  134.     --buatkan product balance untuk yg belum ada product balance nya
  135.     UPDATE tt_i_trx_pos_item A
  136.     SET product_balance_id = nextval('in_product_balance_seq')
  137.     WHERE A.session_id = vSessionId AND
  138.           A.product_balance_id = vNullRefId AND
  139.           NOT EXISTS (
  140.             SELECT 1 FROM in_product_balance B
  141.             WHERE B.product_id = A.product_id AND
  142.                   B.lot_number = vSpaceString AND
  143.                   B.serial_number = vSpaceString AND
  144.                   B.tenant_id = A.tenant_id
  145.           );
  146.          
  147.     INSERT INTO public.in_product_balance(
  148.             product_balance_id, tenant_id, product_id, serial_number, lot_number,
  149.             product_expired_date, product_year_made, version, create_datetime,
  150.             create_user_id, update_datetime, update_user_id)
  151.     SELECT  product_balance_id, tenant_id, product_id, vSpaceString, vSpaceString,
  152.             vSpaceString, vSpaceString, 0, pDatetime,
  153.             vUserId, pDatetime, vUserId
  154.     FROM tt_i_trx_pos_item A
  155.     WHERE A.session_id = vSessionId AND
  156.           NOT EXISTS ( SELECT 1
  157.                        FROM in_product_balance B
  158.                        WHERE B.product_balance_id = A.product_balance_id);
  159.    
  160.     --menghitung tax price,  tax_amount
  161.     --ini ikut perhitungan di submit SO    
  162.     UPDATE tt_i_trx_pos_item
  163.     SET nett_sell_price = gross_sell_price - discount_amount,
  164.         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),
  165.         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)
  166.     WHERE session_id = vSessionId;
  167.    
  168.     --menghitung nett_sell_price, nett_amount_item
  169.     --ini ikut perhitungan BFnya addrian    
  170.     --UPDATE tt_i_trx_pos_item
  171.     --SET nett_sell_price = gross_sell_price -tax_price,
  172.     --  nett_amount_item = (gross_sell_price * qty) - tax_amount
  173.     --WHERE A.session_id = vSessionId;
  174.    
  175.     --insert ke trx pos tax
  176.     IF vFlgOuBuPkp = vFlgYes THEN
  177.         INSERT INTO i_trx_pos_tax(
  178.                 process_no, tenant_id, trx_pos_id, tax_id, flg_amount,
  179.                 tax_percentage, base_amount, tax_amount, remark, version, create_datetime,
  180.                 create_user_id, update_datetime, update_user_id)
  181.         SELECT A.process_no, A.tenant_id, A.trx_pos_id, A.tax_id, B.flg_amount,
  182.                A.tax_percentage, SUM(A.nett_amount_item - A.tax_amount), SUM(A.tax_amount), vEmptyString, 0,pDatetime,
  183.                vUserId, pDatetime, vUserId
  184.         FROM tt_i_trx_pos_item A
  185.         INNER JOIN m_tax B ON B.tax_id = A.tax_id
  186.         WHERE A.session_id = vSessionId
  187.         GROUP BY A.process_no, A.tenant_id, A.trx_pos_id, A.tax_id, B.flg_amount,
  188.                A.tax_percentage;
  189.     END IF;
  190.    
  191.     --buatkan product balance stock jika tidak ada product balance stocknya
  192.     WITH summary_qty AS(
  193.         SELECT SUM(B.qty) AS qty,
  194.                B.product_id,
  195.                B.product_balance_id,
  196.                vProductStatusGood AS product_status,
  197.                A.warehouse_id,
  198.                B.tenant_id
  199.         FROM tt_i_trx_pos A
  200.         INNER JOIN tt_i_trx_pos_item B ON A.trx_pos_id = B.trx_pos_id AND A.process_no = B.process_no AND A.tenant_id = B.tenant_id
  201.         WHERE B.session_id = vSessionId
  202.         GROUP BY B.product_id, B.product_balance_id, A.warehouse_id, B.tenant_id  
  203.     )
  204.     INSERT INTO in_product_balance_stock(
  205.             tenant_id, warehouse_id, product_id,
  206.             product_balance_id, product_status, base_uom_id, qty, version,
  207.             create_datetime, create_user_id, update_datetime, update_user_id)
  208.     SELECT A.tenant_id, A.warehouse_id, A.product_id,
  209.            A.product_balance_id, A.product_status, f_get_product_base_uom_id(A.product_id), 0, 0,
  210.            pDatetime, vUserId, pDatetime, vUserId
  211.     FROM summary_qty A
  212.     WHERE NOT EXISTS (
  213.             SELECT 1 FROM in_product_balance_stock B
  214.             WHERE B.product_id = A.product_id AND
  215.                   B.product_balance_id = A.product_balance_id AND
  216.                   B.product_status = A.product_status AND
  217.                   B.tenant_id = A.tenant_id AND
  218.                   B.warehouse_id = A.warehouse_id);
  219.  
  220.     --update data product balance stock
  221.     WITH summary_qty AS(
  222.         SELECT SUM(B.qty) AS qty,
  223.                B.product_id,
  224.                B.product_balance_id,
  225.                vProductStatusGood AS product_status,
  226.                A.warehouse_id,
  227.                B.tenant_id
  228.         FROM tt_i_trx_pos A
  229.         INNER JOIN tt_i_trx_pos_item B ON A.trx_pos_id = B.trx_pos_id AND A.process_no = B.process_no AND A.tenant_id = B.tenant_id
  230.         WHERE B.session_id = vSessionId
  231.         GROUP BY B.product_id, B.product_balance_id, A.warehouse_id, B.tenant_id  
  232.     )
  233.     UPDATE in_product_balance_stock Z
  234.     SET qty = Z.qty - A.qty,
  235.         version = Z.version + 1,
  236.         update_datetime = pDatetime,
  237.         update_user_id = vUserId
  238.     FROM summary_qty A
  239.     WHERE Z.product_id = A.product_id AND
  240.           Z.warehouse_id = A.warehouse_id AND
  241.           Z.product_balance_id = A.product_balance_id AND
  242.           Z.product_status = A.product_status AND
  243.           Z.tenant_id = A.tenant_id;
  244.    
  245.     --insert data log balance stock
  246.     INSERT INTO in_log_product_balance_stock(
  247.             tenant_id, ou_id, doc_type_id,
  248.             ref_id, doc_no, doc_date, partner_id, product_id, warehouse_id,
  249.             product_balance_id, product_status, base_uom_id, qty, version,
  250.             create_datetime, create_user_id, update_datetime, update_user_id)
  251.     SELECT  A.tenant_id, A.ou_id, A.doc_type_id,
  252.             A.trx_pos_id, A.doc_no, A.doc_date, vNullRefId, B.product_id, A.warehouse_id,
  253.             B.product_balance_id, vProductStatusGood, B.base_uom_id, -1 * SUM(B.qty), 0,
  254.             pDatetime, vUserId, pDatetime, vUserId
  255.     FROM tt_i_trx_pos A
  256.     INNER JOIN tt_i_trx_pos_item B ON A.trx_pos_id = B.trx_pos_id AND
  257.                                       A.process_no = B.process_no AND A.tenant_id = B.tenant_id AND
  258.                                       A.session_id = B.session_id
  259.     WHERE A.session_id = vSessionId
  260.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.trx_pos_id, A.doc_no, A.doc_date,
  261.              B.product_id, B.product_balance_id, B.base_uom_id, A.warehouse_id;
  262.    
  263.     --insert data i_trx_data_log
  264.     INSERT INTO i_trx_data_log(
  265.             tenant_id, ou_id, doc_date, db_version, type_data,
  266.             mode_log, data_log, version, create_datetime, create_user_id,
  267.             update_datetime, update_user_id)
  268.     SELECT  A.tenant_id, A.ou_id, A.doc_date , '1.0', 'in_log_product_balance_stock',
  269.             vModeLogAdd, row_to_json(B)::TEXT, 0, pDatetime, vUserId,
  270.             pDatetime, vUserId
  271.     FROM    tt_i_trx_pos A
  272.     INNER JOIN in_log_product_balance_stock B ON A.tenant_id = B.tenant_id AND A.ou_id = B.ou_id AND
  273.                                                  A.doc_type_id = B.doc_type_id AND A.trx_pos_id = B.ref_id
  274.     WHERE A.session_id = vSessionId
  275.     GROUP BY B.log_product_balance_stock_id, A.tenant_id, A.ou_id, A.doc_date;
  276.          
  277.       --update gross_amount, nett_amount, total_amount
  278.       WITH item_grouped AS (
  279.             SELECT SUM(A.qty * A.discount_amount) AS discount_amount,
  280.                    SUM(A.qty * A.gross_sell_price) AS gross_amount,
  281.                    SUM(A.nett_amount_item) AS nett_amount,
  282.                    SUM(A.tax_amount) AS tax_amount,
  283.                    A.process_no,
  284.                    A.tenant_id,
  285.                    A.trx_pos_id
  286.             FROM tt_i_trx_pos_item A
  287.             WHERE A.session_id = vSessionId
  288.             GROUP BY A.process_no, A.tenant_id, A.trx_pos_id
  289.       )
  290.       UPDATE tt_i_trx_pos Z
  291.       SET gross_amount = Z.gross_amount + A.gross_amount,
  292.           nett_amount = Z.nett_amount + A.nett_amount,
  293.           total_amount = Z.total_amount + A.nett_amount + Z.add_amount
  294.       FROM item_grouped A
  295.       WHERE Z.session_id = vSessionId AND
  296.             A.process_no = Z.process_no AND
  297.             A.tenant_id = Z.tenant_id AND
  298.             A.trx_pos_id = Z.trx_pos_id;
  299.            
  300.       --===============INSERT TERKAIT PAYMENT=========================
  301.     -- buat paymentnya CASH
  302.     -- karena currencynya cuma ada IDR, tidak perlu carikan nilai exchange
  303.     INSERT INTO i_trx_pos_cash_payment(
  304.             process_no, tenant_id, trx_pos_id, curr_payment_code,
  305.             payment_amount, date_exchange_rate, numerator_rate, denominator_rate,
  306.             conversion_amount, remark, version, create_datetime, create_user_id,
  307.             update_datetime, update_user_id)
  308.     SELECT  A.process_no, A.tenant_id, A.trx_pos_id, A.curr_code,
  309.             A.total_amount, A.doc_date, 1, 1,
  310.             A.total_amount, vEmptyString, 0, pDatetime, vUserId,
  311.             pDatetime, vUserId
  312.     FROM tt_i_trx_pos A
  313.     WHERE A.session_id = vSessionId;
  314.    
  315.     --insert ke cash bank balance degan amount 0
  316.     WITH cashbank_balance_grouped AS (
  317.         SELECT  A.tenant_id, A.ou_id, f_get_bank_oulet_by_ou_id_and_currcode(A.ou_id, A.curr_code) AS cashbank_id,
  318.                 A.doc_date AS cash_bank_date, B.curr_payment_code AS curr_code
  319.         FROM tt_i_trx_pos A
  320.         INNER JOIN i_trx_pos_cash_payment B ON B.process_no = A.process_no AND B.tenant_id = A.tenant_id AND
  321.                                                B.trx_pos_id = A.trx_pos_id
  322.         WHERE A.session_id = vSessionId
  323.         GROUP BY A.tenant_id, A.ou_id, f_get_bank_oulet_by_ou_id_and_currcode(A.ou_id, A.curr_code), A.doc_date,
  324.                  B.curr_payment_code
  325.     )
  326.    
  327.     INSERT INTO cb_cashbank_balance(
  328.             tenant_id, ou_id, cashbank_id, cash_bank_date,
  329.             rec_type, curr_code, amount, version, create_datetime, create_user_id,
  330.             update_datetime, update_user_id)
  331.     SELECT  A.tenant_id, A.ou_id, A.cashbank_id, A.cash_bank_date,
  332.             vRecTypeDebit, A.curr_code, 0, 0, pDatetime, vUserId,
  333.             pDatetime, vUserId
  334.     FROM cashbank_balance_grouped A
  335.     WHERE NOT EXISTS(
  336.             SELECT 1
  337.             FROM cb_cashbank_balance B
  338.             WHERE B.tenant_id = A.tenant_id AND
  339.                   B.ou_id = A.ou_id AND
  340.                   B.cashbank_id = A.cashbank_id AND
  341.                   B.cash_bank_date = A.cash_bank_date AND
  342.                   B.rec_type = vRecTypeDebit );
  343.    
  344.     --update cash bank balance untuk semua payment cash
  345.     WITH cashbank_balance_grouped AS (
  346.         SELECT  A.tenant_id, A.ou_id, f_get_bank_oulet_by_ou_id_and_currcode(A.ou_id, A.curr_code) AS cashbank_id,
  347.                 A.doc_date AS cash_bank_date, B.curr_payment_code AS curr_code, sum(B.conversion_amount) AS amount
  348.         FROM tt_i_trx_pos A
  349.         INNER JOIN i_trx_pos_cash_payment B ON B.process_no = A.process_no AND B.tenant_id = A.tenant_id AND
  350.                                                B.trx_pos_id = A.trx_pos_id
  351.         WHERE A.session_id = vSessionId
  352.         GROUP BY A.tenant_id, A.ou_id, f_get_bank_oulet_by_ou_id_and_currcode(A.ou_id, A.curr_code), A.doc_date,
  353.                  B.curr_payment_code
  354.     )
  355.     UPDATE cb_cashbank_balance Z
  356.     SET amount = Z.amount + A.amount,
  357.         version = Z.version + 1,
  358.         update_datetime = pDatetime,
  359.         update_user_id = vUserId
  360.     FROM cashbank_balance_grouped A
  361.     WHERE Z.tenant_id = A.tenant_id AND
  362.           Z.ou_id = A.ou_id AND
  363.           Z.cashbank_id = A.cashbank_id AND
  364.           Z.cash_bank_date = A.cash_bank_date AND
  365.           Z.rec_type = vRecTypeDebit;
  366.            
  367.       --update payment amount untuk pembayaran CASH
  368.       WITH payment_cash_grouped AS (
  369.             SELECT SUM(A.conversion_amount) AS payment_amount,
  370.                    B.process_no,
  371.                    B.tenant_id,
  372.                    B.trx_pos_id
  373.             FROM i_trx_pos_cash_payment A
  374.             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
  375.             WHERE B.session_id = vSessionId
  376.             GROUP BY B.process_no, B.tenant_id, B.trx_pos_id
  377.       )
  378.       UPDATE tt_i_trx_pos Z
  379.       SET total_payment = Z.total_payment + A.payment_amount
  380.       FROM payment_cash_grouped A
  381.       WHERE Z.session_id = vSessionId AND
  382.             A.process_no = Z.process_no AND
  383.             A.tenant_id = Z.tenant_id AND
  384.             A.trx_pos_id = Z.trx_pos_id;
  385.            
  386.       --buat data header POS
  387.       INSERT INTO i_trx_pos(
  388.             trx_pos_id, process_no, tenant_id, doc_type_id, doc_no, doc_date,
  389.             ou_id, ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id, remark,
  390.             partner_id, partner_bill_to_id, partner_ship_to_id, salesman_id,
  391.             curr_code, add_discount_percentage, add_discount_amount, gross_amount,
  392.             nett_amount, tax_amount, add_amount, total_amount, rounding_amount,
  393.             total_payment, total_refund, status, version, create_datetime,
  394.             create_user_id, create_user_name, update_datetime, update_user_id,
  395.             update_user_name, return_amount)
  396.     SELECT trx_pos_id, process_no, tenant_id, doc_type_id, doc_no, doc_date,
  397.             ou_id, ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id, remark,
  398.             partner_id, partner_bill_to_id, partner_ship_to_id, salesman_id,
  399.             curr_code, add_discount_percentage, add_discount_amount, gross_amount,
  400.             nett_amount, tax_amount, add_amount, total_amount, rounding_amount,
  401.             total_payment, total_refund, status, version, create_datetime,
  402.             create_user_id, create_user_name, update_datetime, update_user_id,
  403.             update_user_name, return_amount
  404.     FROM tt_i_trx_pos WHERE session_id = vSessionId;
  405.    
  406.     --buat data item POS
  407.     INSERT INTO i_trx_pos_item(
  408.             process_no, tenant_id, trx_pos_id, line_no,
  409.             product_id, product_balance_id, base_uom_id, qty, curr_code,
  410.             gross_sell_price, flg_tax_amount, tax_id, tax_percentage, tax_price,
  411.             promo_code, discount_percentage, discount_amount, nett_sell_price,
  412.             tax_amount, nett_amount_item, remark, version, group_product_ou_id,
  413.             create_datetime, create_user_id, update_datetime, update_user_id,
  414.             ref_item_id, ref_assembly_product_id)
  415.     SELECT  process_no, tenant_id, trx_pos_id, line_no,
  416.             product_id, product_balance_id, base_uom_id, qty, curr_code,
  417.             gross_sell_price, flg_tax_amount, tax_id, tax_percentage, tax_price,
  418.             promo_code, discount_percentage, discount_amount, nett_sell_price,
  419.             tax_amount, nett_amount_item, remark, version, group_product_ou_id,
  420.             create_datetime, create_user_id, update_datetime, update_user_id,
  421.             ref_item_id, ref_assembly_product_id
  422.     FROM tt_i_trx_pos_item
  423.     WHERE session_id = vSessionId;
  424.    
  425.     --panggil function submit
  426.     PERFORM generate_process_message_for_submit_pos_shop(vSessionId, A.tenant_id, vProcessName, A.process_no,
  427.                                                         pDatetime, A.outlet_id, A.ou_id, A.warehouse_id, vUserId)
  428.     FROM tt_i_trx_pos A
  429.     WHERE A.session_id = vSessionId;
  430.    
  431.     --update trx_pos flg_process = Y  
  432.     UPDATE sl_order A
  433.     SET flg_process = vFlgYes,
  434.         end_process_intgr_datetime = to_char(current_timestamp,'yyyyMMddHH24mmss')
  435.     FROM tt_i_trx_pos B
  436.     WHERE A.order_id = B.ref_id AND
  437.           A.doc_type_id = B.ref_doc_type_id;
  438.    
  439.     SElECT count(1) INTO vTotalPos
  440.     FROM tt_i_trx_pos A
  441.     WHERE A.session_id = vSessionId;
  442.    
  443.     DELETE FROM tt_i_trx_pos WHERE session_id = vSessionId;
  444.     DELETE FROM tt_i_trx_pos_item WHERE session_id = vSessionId;
  445.    
  446.     return vTotalPos;
  447.    
  448. END;
  449. $BODY$
  450.   LANGUAGE plpgsql VOLATILE
  451.   COST 100;
  452.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement