Advertisement
tercnem

Untitled

Jul 17th, 2019
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ```
  2. -- Modified Fitra, 2017-11-29
  3. -- perubahan di header :tgl SO baru disamakan dengan tgl SO lama
  4.  
  5. CREATE OR REPLACE FUNCTION sl_automatic_so(character varying, bigint, bigint, bigint, character varying, character varying, bigint, bigint, character varying, character varying, bigint)
  6.     RETURNS void AS
  7. $BODY$
  8. DECLARE
  9.     pSessionId              alias for $1;
  10.     pTenantId               alias for $2;
  11.     pUserId                 alias for $3;
  12.     pRoleId                 alias for $4;
  13.     pFlgUserRole            alias for $5;
  14.     pDatetime               alias for $6;
  15.     pOldSoId                alias for $7;
  16.     pAutonumId              alias for $8;
  17.     pDocNo                  alias for $9;
  18.     pDocDate                alias for $10;
  19.     pCancelSoId             alias for $11;
  20.    
  21.     vNewSoId                bigint;
  22.     vFlowSo                 bigint;
  23.     vYes                    character varying(1) := 'Y';
  24.     vStatusInprogress       character varying(1) := 'I';
  25.     vWorkflowApproved       character varying(8) := 'APPROVED';
  26.     vProcessName            character varying    := 'sl_submit_so';
  27.     vParamKey               character varying    := 'soId';
  28.     vSchemeSo               character varying    := 'FA01';
  29.     vDocTypeSo              bigint := 301;
  30.     vFlagDiscountAmount    character varying     := 'AMOUNT';
  31.  
  32. BEGIN
  33.    
  34.     -- ambil id manage cancel so
  35.     SELECT nextval('sl_so_seq') INTO vNewSoId;
  36.    
  37.     -- insert ke table header so
  38.     INSERT INTO sl_so(
  39.            so_id, tenant_id, doc_type_id, doc_no, doc_date, ou_id, ext_doc_no,
  40.            ext_doc_date, ref_doc_type_id, ref_id, remark, partner_id, partner_cp_id,
  41.            partner_bill_to_id, partner_ship_to_id, partner_ship_address_id,
  42.            due_date, salesman_id, flg_delivery, curr_code, add_discount_percentage,
  43.            add_discount_amount, status_doc, workflow_status, version, create_datetime,
  44.            create_user_id, update_datetime, update_user_id, flg_work_order,
  45.            flg_top_type, partner_ship_cp_id, partner_ship_cp_name, partner_ship_cp_phone1,
  46.            partner_ship_cp_phone2, flg_show_inv_tax, flg_old_status, regular_discount_percentage)
  47.    SELECT  vNewSoId, pTenantId, vDocTypeSo, pDocNo, A.doc_date, A.ou_id, A.doc_no,
  48.            A.doc_date, vDocTypeSo, pOldSoId, A.remark, A.partner_id, A.partner_cp_id,
  49.            A.partner_bill_to_id, A.partner_ship_to_id, A.partner_ship_address_id,
  50.            A.due_date, A.salesman_id, A.flg_delivery, A.curr_code, A.add_discount_percentage,
  51.            A.add_discount_amount, vStatusInprogress, vWorkflowApproved, 0, pDatetime,
  52.            pUserId, pDatetime, pUserId, A.flg_work_order,
  53.            A.flg_top_type, A.partner_ship_cp_id, A.partner_ship_cp_name, A.partner_ship_cp_phone1,
  54.            A.partner_ship_cp_phone2, A.flg_show_inv_tax, A.flg_old_status, A.regular_discount_percentage
  55.     FROM    sl_so A
  56.    WHERE A.so_id = pOldSoId;
  57.    
  58.    -- insert ke table additional header so
  59.    INSERT INTO sl_so_additional_for_dlg(
  60.            so_id, tenant_id, group_brand_product, promo_sales_id, create_datetime,
  61.            create_user_id, update_datetime, update_user_id, version, region_id,
  62.            warehouse_id, flg_add_discount)
  63.    SELECT  vNewSoId, pTenantId, group_brand_product, promo_sales_id, pDatetime,
  64.            pUserId, pDatetime, pUserId, 0, region_id,
  65.            warehouse_id, flg_add_discount
  66.     FROM    sl_so_additional_for_dlg A
  67.    WHERE A.so_id = pOldSoId;
  68.    
  69.    UPDATE sl_so A
  70.    SET add_discount_amount = 0
  71.    FROM sl_so_additional_for_dlg B
  72.    WHERE A.so_id = vNewSoId AND
  73.           A.so_id = B.so_id AND
  74.           B.flg_add_discount = vFlagDiscountAmount;
  75.            
  76.    -- insert ke table so item
  77.   WITH prepare_insert_data_so_item AS(        
  78.         SELECT  C.so_item_id, C.partner_ship_to_id, C.partner_ship_address_id, C.product_id,
  79.                 D.qty_add * -1 AS qty_so, C.so_uom_id, D.qty_add_int * -1 AS qty_int, C.base_uom_id,
  80.                 C.curr_code, C.gross_sell_price, C.flg_tax_amount, C.tax_id,
  81.                 C.tax_percentage, C.promo_code, C.discount_percentage, C.discount_amount,
  82.                 C.eta, C.tolerance_dlv_qty, C.remark, C.eta_day, C.flg_disc,
  83.                 f_get_gross_amount_after_promo_discount(((D.qty_add_int * -1) * C.gross_sell_price), E.promo_percentage, f_get_digit_decimal_doc_curr(vDocTypeSo, C.curr_code)) AS gross_amount_after_disc
  84.         FROM    sl_manage_so A
  85.         INNER JOIN sl_manage_so_item B ON A.manage_so_id = B.manage_so_id
  86.         INNER JOIN sl_so_item C ON B.so_item_id = C.so_item_id AND A.so_id = C.so_id
  87.         INNER JOIN sl_so_balance_item D ON C.so_item_id = D.so_item_id
  88.         INNER JOIN sl_so_item_additional_for_dlg E ON C.so_item_id = E.so_item_id
  89.         WHERE A.manage_so_id = pCancelSoId
  90.     )
  91.     INSERT INTO sl_so_item(
  92.            tenant_id, so_id, line_no, ref_doc_type_id, ref_id,
  93.            partner_ship_to_id, partner_ship_address_id, product_id, qty_so,
  94.            so_uom_id, qty_int, base_uom_id, curr_code, gross_sell_price,
  95.            flg_tax_amount, tax_id, tax_percentage,
  96.            tax_price,
  97.            promo_code, discount_percentage, discount_amount,
  98.            nett_sell_price,
  99.            tax_amount,
  100.            nett_item_amount,
  101.            eta, tolerance_dlv_qty, remark, version, create_datetime,
  102.            create_user_id, update_datetime, update_user_id, eta_day, flg_disc)            
  103.    SELECT  pTenantId, vNewSoId AS so_id, row_number() over() AS line_no, vDocTypeSo, A.so_item_id,
  104.            A.partner_ship_to_id, A.partner_ship_address_id, A.product_id, A.qty_so,
  105.            A.so_uom_id, A.qty_int, A.base_uom_id, A.curr_code, A.gross_sell_price,
  106.            A.flg_tax_amount, A.tax_id, A.tax_percentage,
  107.            f_get_tax_amount_after_discount(A.gross_amount_after_disc, A.flg_tax_amount, A.tax_percentage, f_get_digit_decimal_doc_curr(vDocTypeSo, A.curr_code)) / A.qty_int,
  108.            A.promo_code, A.discount_percentage, A.discount_amount,
  109.            f_get_dpp_after_discount(A.gross_amount_after_disc, A.flg_tax_amount, f_get_tax_amount_after_discount(A.gross_amount_after_disc, A.flg_tax_amount, A.tax_percentage, f_get_digit_decimal_doc_curr(vDocTypeSo, A.curr_code))) / A.qty_int,  
  110.            f_get_tax_amount_after_discount(A.gross_amount_after_disc, A.flg_tax_amount, A.tax_percentage, f_get_digit_decimal_doc_curr(vDocTypeSo, A.curr_code)),
  111.            f_get_dpp_after_discount(A.gross_amount_after_disc, A.flg_tax_amount, f_get_tax_amount_after_discount(A.gross_amount_after_disc, A.flg_tax_amount, A.tax_percentage, f_get_digit_decimal_doc_curr(vDocTypeSo, A.curr_code))),
  112.            A.eta, A.tolerance_dlv_qty, A.remark, 0, pDatetime,
  113.            pUserId, pDatetime, pUserId, A.eta_day, A.flg_disc
  114.     FROM    prepare_insert_data_so_item A;
  115.  
  116.     -- insert ke table additional so item
  117.     INSERT INTO sl_so_item_additional_for_dlg(
  118.             so_item_id, tenant_id, so_id, promo_percentage,
  119.            promo_amount,
  120.            total_promo_disc_amount,
  121.            create_datetime, create_user_id, update_datetime,
  122.            update_user_id, version)
  123.    SELECT  A.so_item_id, A.tenant_id, A.so_id, B.promo_percentage,
  124.             ( (A.qty_int*A.gross_sell_price) - f_get_gross_amount_after_promo_discount((A.qty_int * A.gross_sell_price), B.promo_percentage, f_get_digit_decimal_doc_curr(vDocTypeSo, A.curr_code)) ) /A.qty_int,
  125.             (A.qty_int*A.gross_sell_price) - f_get_gross_amount_after_promo_discount((A.qty_int * A.gross_sell_price), B.promo_percentage, f_get_digit_decimal_doc_curr(vDocTypeSo, A.curr_code)),
  126.            pDatetime, pUserId, pDatetime,
  127.            pUserId, 0
  128.     FROM    sl_so_item A
  129.    INNER JOIN sl_so_item_additional_for_dlg B ON A.ref_id = B.so_item_id AND A.ref_doc_type_id = vDocTypeSo
  130.    WHERE A.so_id = vNewSoId;    
  131.  
  132.    -- insert ke table formula assembly
  133.    INSERT INTO sl_so_assembly_formula(
  134.            so_item_id, parent_product_id, child_product_id,
  135.            qty_base_uom, base_uom_id, version, create_datetime, create_user_id,
  136.            update_datetime, update_user_id)
  137.    SELECT  c.so_item_id, c.product_id, a.child_product_id,
  138.             a.qty_base_uom, b.base_uom_id, 0, pDatetime, pUserId,
  139.             pDatetime, pUserId
  140.     FROM m_product_assembly a
  141.     INNER JOIN m_product b ON b.tenant_id = a.tenant_id AND b.product_id = a.child_product_id
  142.     INNER JOIN sl_so_item c ON a.parent_product_id = c.product_id
  143.     WHERE a.tenant_id = pTenantId
  144.     AND c.so_id = vNewSoId;
  145.    
  146.    -- insert ke table finance
  147.    INSERT INTO sl_so_finance(
  148.            so_id, line_no, tenant_id, flg_collection, due_date,
  149.            curr_code, amount, trx_curr_code, trx_amount, remark, version,
  150.            create_datetime, create_user_id, update_datetime, update_user_id)
  151.    SELECT  vNewSoId, A.line_no, A.tenant_id, A.flg_collection, A.due_date,
  152.            A.curr_code, A.amount, A.trx_curr_code, A.trx_amount, A.remark, 0,
  153.            pDatetime, pUserId, pDatetime, pUserId
  154.     FROM    sl_so_finance A
  155.    WHERE A.so_id = pOldSoId;
  156.    
  157.     --insert process message
  158.     PERFORM generate_process_message_for_submit_doc_dlg(pSessionId, pTenantId, vProcessName,
  159.         A.so_id ||'_'||A.doc_no, pDatetime, vParamKey, A.so_id::character varying, pUserId)
  160.     FROM sl_so A
  161.     WHERE A.so_id = vNewSoId;
  162.  
  163.     -- Mendapatkan default approval flow ID yang dipakai dari sysconfig
  164.     SELECT awe_flow_id INTO vFlowSo
  165.     FROM awe_flow
  166.     WHERE scheme = vSchemeSo AND
  167.         flg_validate = vYes AND
  168.         active = vYes;
  169.    
  170.     -- Generate data awe_currdoc_status
  171.     INSERT INTO awe_currdoc_status(
  172.         req_id, tenant_id, scheme, doc_id, doc_no, doc_date,
  173.         current_state, remark, current_user_id, current_role_id, flg_user_role, label,
  174.         data, flow_id, create_datetime, create_user_id, create_role_id,
  175.         update_datetime, update_user_id, update_role_id, version)
  176.     SELECT A.so_id||'_'||A.doc_no, A.tenant_id, vSchemeSo, A.so_id, A.doc_no, A.doc_date,
  177.         vWorkflowApproved, A.remark, pUserId, pRoleId, pFlgUserRole, 'SALES ORDER'||A.doc_no,
  178.         '{}', vFlowSo, pDatetime, pUserId, pRoleId,
  179.         pDatetime, pUserId, pRoleId, 0
  180.     FROM sl_so A
  181.     WHERE A.so_id = vNewSoId;
  182.    
  183.     -- Insert autonum ref mapping
  184.     INSERT INTO autonum_ref_mapping(
  185.         autonum_generated_id, ref_id
  186.     )
  187.     VALUES (pAutonumId, vNewSoId);
  188.    
  189. END
  190. $BODY$
  191.  LANGUAGE plpgsql VOLATILE
  192.  COST 100;
  193. /
  194. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement