Advertisement
aadddrr

Untitled

Feb 13th, 2017
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --Adrian, Feb 13, 2017
  2.  
  3. CREATE OR REPLACE FUNCTION sl_submit_so_from_dgb(bigint, character varying, character varying)
  4.   RETURNS void AS
  5. $BODY$
  6. DECLARE
  7.     pTenantId           ALIAS FOR $1;
  8.     pSessionId          ALIAS FOR $2;
  9.     pProcessNo          ALIAS FOR $3;
  10.  
  11.     vProcessId      bigint;
  12.     vSoId           bigint;
  13.     vUserId         bigint;
  14.     vDatetime       character varying(14);
  15.     vStatusRelease  character varying(1);
  16.     vStatusInProgress character varying(1);
  17.     vStatusFinal    character varying(1);
  18.     vEmptyId        bigint;
  19.     vNol            numeric;
  20.    
  21.     vSalesOrderDocTypeId bigint;
  22.     vRoundingModeNonTax character varying(5);
  23.    
  24.     vDeliveryBorrowDocType      bigint;
  25.     vReturnBorrowDocType        bigint;
  26.     vDeliveryOrderDocType       bigint;
  27.    
  28.     vReturnBorrowDocNo          character varying(30);
  29.     vReturnBorrowNumId          bigint;
  30.     vDeliveryOrderDocNo         character varying(30);
  31.     vDeliveryOrderNumId         bigint;
  32.    
  33.     vReturnBorrowId             bigint;
  34.     vDeliveryOrderId            bigint;
  35.    
  36.     vFlagInvoice            character varying(1);
  37.     vStatusDraft            character varying(1);
  38.     vEmptyValue             character varying(1);
  39.     vProductStatus          character varying(5);
  40.     vSignDebit              character varying(1);
  41.     vSignCredit             character varying(1);
  42.     vTypeRate               character varying(3);
  43.     vProductCOA             character varying(10);
  44.     vSystemCOA              character varying(10);
  45.     vUnfinishedItem         bigint;
  46.     vYes                    character varying(1);
  47.     vFlagNo                 character varying(1);
  48.    
  49.     vParentOuId             bigint;
  50.     vJournalTrxId           bigint;    
  51.     vJournalType            character varying(20)
  52.    
  53.     vDocJournal             DOC_JOURNAL%ROWTYPE;
  54.     vOuStructure            OU_BU_STRUCTURE%ROWTYPE;
  55.     result                  RECORD;
  56.    
  57.     vWorkflowApproved       character varying(14);
  58.    
  59.     vFlowReturnBorrowId     bigint;
  60.     vSchemeReturnBorrow     character varying;
  61.     vFlowDeliveryOrderId    bigint;
  62.     vSchemeDeliveryOrder    character varying;
  63.    
  64. BEGIN
  65.    
  66.     vStatusRelease := 'R';
  67.     vEmptyId := -99;
  68.     vNol := 0;
  69.    
  70.     vFlagNo := 'N';
  71.     vStatusInProgress := 'I';
  72.     vStatusFinal := 'F';
  73.     vEmptyValue := ' ';
  74.     vProductStatus := 'GOOD';
  75.     vSignDebit := 'D';
  76.     vSignCredit := 'C';
  77.     vTypeRate := 'COM';
  78.     vProductCOA := 'PRODUCT';
  79.     vSystemCOA := 'SYSTEM';
  80.     vUnfinishedItem := 0;
  81.     vYes = 'Y';
  82.    
  83.     vDeliveryBorrowDocType := 551;
  84.     vReturnBorrowDocType := 552;
  85.     vDeliveryOrderDocType := 311;
  86.    
  87.     vWorkflowApproved := 'APPROVED';
  88.    
  89.     vSchemeReturnBorrow := 'EA52';
  90.     vSchemeDeliveryOrder := 'FB01';
  91.    
  92.     vSalesOrderDocTypeId = 301;
  93.     SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingModeNonTax;
  94.    
  95.    
  96.     SELECT A.process_message_id INTO vProcessId
  97.     FROM t_process_message A
  98.     WHERE A.tenant_id = pTenantId AND
  99.         A.process_name = 'sl_submit_so_from_dgb' AND
  100.         A.process_no = pProcessNo;
  101.        
  102.     SELECT CAST(A.process_parameter_value AS bigint) INTO vSoId
  103.     FROM t_process_parameter A
  104.     WHERE A.process_message_id = vProcessId AND
  105.         A.process_parameter_key = 'soId';
  106.    
  107.     SELECT CAST(A.process_parameter_value AS bigint) INTO vUserId
  108.     FROM t_process_parameter A
  109.     WHERE A.process_message_id = vProcessId AND
  110.         A.process_parameter_key = 'userId';
  111.  
  112.     SELECT CAST(A.process_parameter_value AS character varying(14)) INTO vDatetime
  113.     FROM t_process_parameter A
  114.     WHERE A.process_message_id = vProcessId AND
  115.         A.process_parameter_key = 'datetime';
  116.        
  117.     SELECT CAST(A.process_parameter_value AS character varying(30)) INTO vReturnBorrowDocNo FROM t_process_parameter A
  118.     WHERE A.process_message_id = vProcessId AND A.process_parameter_key = 'RGB_NO';
  119.  
  120.     SELECT CAST(A.process_parameter_value AS bigint) INTO vReturnBorrowNumId FROM t_process_parameter A
  121.     WHERE A.process_message_id = vProcessId AND A.process_parameter_key = 'RGB_NUM_ID';
  122.  
  123.     SELECT CAST(A.process_parameter_value AS character varying(30)) INTO vDeliveryOrderDocNo FROM t_process_parameter A
  124.     WHERE A.process_message_id = vProcessId AND A.process_parameter_key = 'DO_NO';
  125.  
  126.     SELECT CAST(A.process_parameter_value AS bigint) INTO vDeliveryOrderNumId FROM t_process_parameter A
  127.     WHERE A.process_message_id = vProcessId AND A.process_parameter_key = 'DO_NUM_ID';
  128.        
  129. /*
  130.  * 1. update status doc sl_so
  131.  * 2. add sl_so_tax
  132.  * 3. add sl_so_balance_item
  133.  * 4. add sl_log_so_balance_item
  134.  */    
  135.     UPDATE sl_so SET status_doc = vStatusRelease, update_datetime = vDatetime, update_user_id = vUserId
  136.     WHERE so_id = vSoId;
  137.        
  138.     INSERT INTO sl_so_tax
  139.     (tenant_id, so_id, tax_id, flg_amount,
  140.     tax_percentage, base_amount, tax_amount, remark,
  141.     version, create_datetime, create_user_id, update_datetime, update_user_id)
  142.     SELECT A.tenant_id, A.so_id, A.tax_id, B.flg_amount,
  143.         A.tax_percentage, SUM(f_get_amount_before_tax((A.qty_so * (A.gross_sell_price - A.discount_amount)) + f_get_total_warranty_amount_for_so(A.so_item_id), A.flg_tax_amount, A.tax_percentage,f_get_digit_decimal_doc_curr(vSalesOrderDocTypeId, A.curr_code), vRoundingModeNonTax)),
  144.         f_tax_rounding(A.tenant_id, SUM(f_get_amount_before_tax((A.qty_so * (A.gross_sell_price - A.discount_amount)) + f_get_total_warranty_amount_for_so(A.so_item_id), A.flg_tax_amount, A.tax_percentage,f_get_digit_decimal_doc_curr(vSalesOrderDocTypeId, A.curr_code), vRoundingModeNonTax)), A.tax_percentage), B.tax_name,
  145.         0, vDatetime, vUserId, vDatetime, vUserId
  146.     FROM sl_so_item A, m_tax B
  147.     WHERE A.tax_id = B.tax_id AND
  148.           A.so_id = vSoId AND
  149.           A.tax_id <> vEmptyId
  150.     GROUP BY A.tenant_id, A.so_id, A.tax_id, B.flg_amount,
  151.             A.tax_percentage, B.tax_name, A.curr_code;
  152.    
  153.     INSERT INTO sl_so_balance_item
  154.     (so_item_id, tenant_id, ou_id, qty_so, qty_dlv, qty_return, qty_cancel, qty_add, so_uom_id,
  155.      qty_so_int, qty_dlv_int, qty_return_int, qty_cancel_int, qty_add_int, base_uom_id,
  156.      tolerance_dlv_qty, status_item, version, create_datetime, create_user_id, update_datetime, update_user_id)
  157.     SELECT A.so_item_id, A.tenant_id, B.ou_id, A.qty_so, 0, 0, 0, 0, A.so_uom_id,
  158.             A.qty_int, 0, 0, 0, 0, A.base_uom_id,
  159.             A.tolerance_dlv_qty, vStatusRelease, 0, vDatetime, vUserId, vDatetime, vUserId
  160.     FROM sl_so_item A, sl_so B
  161.     WHERE A.so_id = vSoId AND
  162.         A.so_id = B.so_id;
  163.    
  164.     --modified by putra soliman, 29 Februari 2016
  165.     -- menambahkan insert ke balance so warranty item
  166.     INSERT INTO sl_so_balance_warranty_item(
  167.             tenant_id, ou_id,
  168.             so_warranty_item_id, so_item_id, flg_default_warranty, def_warranty_time,
  169.             warranty_time, warranty_type_id, warranty_sell_qty, warranty_sell_price,
  170.             warranty_sell_amount, status_item, version, create_datetime, create_user_id,
  171.             update_datetime, update_user_id)
  172.     SELECT C.tenant_id, C.ou_id,
  173.         A.so_warranty_item_id, A.so_item_id, A.flg_default_warranty, A.def_warranty_time,
  174.        A.warranty_time, A.warranty_type_id, A.warranty_sell_qty, A.warranty_sell_price,
  175.        A.warranty_sell_amount, vStatusRelease, vNol, vDatetime, vUserId,
  176.        vDatetime, vUserId
  177.     FROM sl_so_warranty_item A, sl_so_item B, sl_so C
  178.     WHERE A.so_item_id = B.so_item_id
  179.         AND B.so_id = C.so_id
  180.         AND C.so_id = vSoId;
  181.            
  182.     -- WTC, 20141222, insert juga ke table saldo qty SO terhadap PO, yang akan digunakan/diupdate saat input PO dari SO
  183.     -- TODO: insert to sl_log_so_po_balance_item
  184.     INSERT INTO sl_so_po_balance_item
  185.     (so_item_id, tenant_id, ou_id, so_id, qty_po_int, qty_po_int_return, qty_po_int_cancel, qty_po_int_add, base_uom_id,   
  186.      status_item, version, create_datetime, create_user_id, update_datetime, update_user_id)
  187.     SELECT A.so_item_id, A.tenant_id, B.ou_id, B.so_id, 0, 0, 0, 0, A.base_uom_id,
  188.             vStatusRelease, 0, vDatetime, vUserId, vDatetime, vUserId
  189.     FROM sl_so_item A, sl_so B
  190.     WHERE A.so_id = vSoId AND
  191.         A.so_id = B.so_id;
  192.      
  193.     INSERT INTO sl_log_so_balance_item
  194.     (tenant_id, so_id, so_item_id, ref_doc_type_id, ref_id, ref_item_id,
  195.      qty_trx, trx_uom_id, qty_int, base_uom_id, remark,
  196.     version, create_datetime, create_user_id, update_datetime, update_user_id)
  197.     SELECT A.tenant_id, A.so_id, A.so_item_id, vEmptyId, vEmptyId, vEmptyId,
  198.         A.qty_so, A.so_uom_id, A.qty_int, A.base_uom_id, A.remark,
  199.         0, vDatetime, vUserId, vDatetime, vUserId
  200.     FROM sl_so_item A
  201.     WHERE A.so_id = vSoId;
  202.    
  203.     --modified by putra soliman, 29 Februari 2016
  204.     -- menambahkan insert ke log untuk balance so warranty item
  205.     INSERT INTO sl_log_so_balance_warranty_item(
  206.             tenant_id, ou_id, so_id,
  207.             so_warranty_item_id, so_item_id, flg_default_warranty, def_warranty_time,
  208.             warranty_time, warranty_type_id, warranty_sell_qty, warranty_sell_price,
  209.             warranty_sell_amount, version, create_datetime, create_user_id,
  210.             update_datetime, update_user_id)
  211.     SELECT C.tenant_id, C.ou_id, C.so_id,
  212.         A.so_warranty_item_id, A.so_item_id, A.flg_default_warranty, A.def_warranty_time,
  213.         A.warranty_time, A.warranty_type_id, A.warranty_sell_qty, A.warranty_sell_price,
  214.         A.warranty_sell_amount, 0, vDatetime, vUserId,
  215.         vDatetime, vUserId
  216.     FROM sl_so_warranty_item A, sl_so_item B, sl_so C
  217.     WHERE A.so_item_id = B.so_item_id
  218.         AND B.so_id = C.so_id
  219.         AND C.so_id = vSoId;
  220.        
  221.     /* GENERATE RGB AND DO */
  222.        
  223.     SELECT NEXTVAL('in_inventory_seq') INTO vReturnBorrowId;
  224.     SELECT NEXTVAL('sl_do_seq') INTO vDeliveryOrderId;
  225.        
  226.     -- INSERT ke sl_so_from_dgb_doc_no
  227.     INSERT INTO sl_so_from_dgb_doc_no(
  228.                 tenant_id, so_id,
  229.                 ref_doc_type_id, ref_doc_no, ref_id, version, create_datetime,
  230.                 create_user_id, update_datetime, update_user_id, autonum_id)
  231.         VALUES
  232.         (pTenantId, vSoId, vReturnBorrowDocType, vReturnBorrowDocNo, vReturnBorrowId, 0, vDatetime, vUserId, vDatetime, vUserId, vReturnBorrowNumId),
  233.         (pTenantId, vSoId, vDeliveryOrderDocType, vDeliveryOrderDocNo, vDeliveryOrderId, 0, vDatetime, vUserId, vDatetime, vUserId, vDeliveryOrderNumId)
  234.         ;
  235.      
  236.     /* GENERATE RGB */
  237.        
  238.     INSERT INTO in_inventory
  239.         (inventory_id, doc_type_id, doc_no, doc_date,
  240.         tenant_id, ou_from_id, ou_to_id,
  241.         partner_id, ext_doc_no, ext_doc_date,
  242.         ref_doc_type_id, ref_id, warehouse_from_id, warehouse_to_id,
  243.         transfer_date, receive_date, activity_gl_id,
  244.         segment_id, ou_rc_id, status_doc, workflow_status,
  245.         no_vehicle, flg_delivery, delivery_code,
  246.         create_datetime, create_user_id,
  247.         update_datetime, update_user_id,
  248.         version)
  249.     SELECT vReturnBorrowId, vReturnBorrowDocType, vReturnBorrowDocNo, A.doc_date,
  250.         A.tenant_id, A.ou_id, A.ou_id,
  251.         B.partner_id, vEmptyValue, vEmptyValue,
  252.         B.doc_type_id, B.inventory_id, B.warehouse_from_id, B.warehouse_from_id,
  253.         substring(vDatetime from 1 for 6), substring(vDatetime from 1 for 6), -99,
  254.         vEmptyId, vEmptyId, vStatusRelease, vWorkflowApproved,
  255.         B.no_vehicle, B.flg_delivery, B.delivery_code,
  256.         vDatetime, vUserId,
  257.         vDatetime, vUserId,
  258.         vNol
  259.     FROM sl_so A
  260.     INNER JOIN in_inventory B ON B.inventory_id = A.ref_id
  261.     WHERE A.so_id = vSoId AND A.ref_doc_type_id = vDeliveryBorrowDocType;
  262.  
  263.     INSERT INTO in_inventory_item
  264.         (inventory_id, tenant_id, line_no,
  265.         product_id, product_balance_id, product_status,
  266.         serial_number, product_expired_date, product_year_made,
  267.         lot_number,
  268.         ref_doc_type_id, ref_id, ref_item_id,
  269.         curr_code, amount, base_uom_id,
  270.         qty_request, qty_realization, remark,
  271.         create_datetime, create_user_id,
  272.         update_datetime, update_user_id,
  273.         version)
  274.     SELECT vReturnBorrowId,
  275.         A.tenant_id, A.line_no,
  276.         E.product_id, E.product_balance_id, E.product_status,
  277.         F.serial_number, F.product_expired_date, F.product_year_made,
  278.         vEmptyValue,
  279.         vDeliveryBorrowDocType, B.ref_id, C.inventory_item_id,
  280.         vEmptyValue, vNol, G.base_uom_id,
  281.         A.qty_so, A.qty_so, A.remark,
  282.         vDatetime, vUserId,
  283.         vDatetime, vUserId,
  284.         vNol
  285.     FROM sl_so_item A
  286.     INNER JOIN sl_so B ON B.so_id = A.so_id
  287.     --INNER JOIN in_inventory_item C ON C.inventory_id = B.ref_id AND C.product_id = A.product_id AND
  288.     INNER JOIN in_inventory_item C ON C.inventory_item_id = A.ref_id
  289.     INNER JOIN in_inventory_borrow_balance_item D ON D.inventory_item_id = C.inventory_item_id
  290.     INNER JOIN in_borrowed_product_balance_stock E
  291.         ON E.tenant_id = A.tenant_id AND E.ou_id = B.ou_id AND E.partner_id = D.partner_id AND E.partner_ship_address_id = D.partner_ship_address_id AND E.product_id = C.product_id AND E.product_balance_id = C.product_balance_id AND E.product_status = C.product_status
  292.     INNER JOIN in_product_balance F ON F.product_balance_id = E.product_balance_id
  293.     INNER JOIN m_product G ON G.product_id = E.product_id
  294.     WHERE B.so_id = vSoId AND B.ref_doc_type_id = vDeliveryBorrowDocType;
  295.  
  296.     UPDATE in_inventory_borrow_balance_item Z
  297.     SET qty_return = (Z.qty_return + A.qty_so),
  298.         status_item = vStatusInProgress,
  299.         update_datetime = vDatetime,
  300.         update_user_id = vUserId,
  301.         version = (Z.version + 1)
  302.     FROM sl_so_item A
  303.     INNER JOIN sl_so B ON B.so_id = A.so_id
  304.     --INNER JOIN in_inventory_item C ON C.inventory_id = B.ref_id AND C.product_id = A.product_id
  305.     INNER JOIN in_inventory_item C ON C.inventory_item_id = A.ref_id
  306.     INNER JOIN in_inventory_borrow_balance_item D ON D.inventory_item_id = C.inventory_item_id
  307.     WHERE B.so_id = vSoId AND B.ref_doc_type_id = vDeliveryBorrowDocType
  308.     AND D.inventory_item_id = Z.inventory_item_id;
  309.  
  310.     INSERT INTO in_inventory_return_borrowing
  311.         (tenant_id, inventory_id,
  312.         partner_ship_to_id, partner_ship_address_id, partner_cp_id,
  313.         flg_convert_to_sales,
  314.         cp_name, cp_phone1, cp_phone2,
  315.         ref_id, ref_doc_type_id,
  316.         create_datetime, create_user_id,
  317.         update_datetime, update_user_id,
  318.         version)
  319.     SELECT A.tenant_id, vReturnBorrowId,
  320.         B.partner_ship_to_id, B.partner_ship_address_id, B.partner_cp_id,
  321.         vYes,
  322.         C.cp_name, C.phone1, C.phone2,
  323.         vEmptyId, vEmptyId,
  324.         vDatetime, vUserId,
  325.         vDatetime, vUserId,
  326.         vNol
  327.     FROM sl_so A
  328.     INNER JOIN in_inventory_borrow B ON B.inventory_id = A.ref_id
  329.     INNER JOIN m_partner_cp C ON C.partner_cp_id = A.partner_cp_id
  330.     WHERE A.so_id = vSoId AND A.ref_doc_type_id = vDeliveryBorrowDocType;
  331.  
  332.     /*UPDATE in_product_balance_stock SET qty = qty + B.qty_realization, update_datetime = vDatetime, update_user_id = vUserId
  333.     FROM in_inventory A, in_inventory_item B
  334.     WHERE A.inventory_id = vReturnBorrowId AND
  335.         A.inventory_id = B.inventory_id AND
  336.         in_product_balance_stock.tenant_id = A.tenant_id AND
  337.         in_product_balance_stock.warehouse_id = A.warehouse_to_id AND
  338.         in_product_balance_stock.product_id = B.product_id AND
  339.         in_product_balance_stock.product_balance_id = B.product_balance_id AND
  340.         in_product_balance_stock.product_status = B.product_status;*/
  341.                        
  342.     /*
  343.      * insert data in_product_balance_stock
  344.      */
  345.     /*INSERT INTO in_product_balance_stock
  346.     (tenant_id, warehouse_id, product_id, product_balance_id, product_status, base_uom_id, qty,
  347.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  348.     SELECT A.tenant_id, A.warehouse_to_id, B.product_id, B.product_balance_id, B.product_status, B.base_uom_id, SUM(B.qty_realization),
  349.             0, vDatetime, vUserId, vDatetime, vUserId
  350.     FROM in_inventory A, in_inventory_item B
  351.     WHERE A.inventory_id = B.inventory_id AND
  352.         A.inventory_id = vReturnBorrowId AND
  353.         NOT EXISTS (SELECT 1 FROM in_product_balance_stock C
  354.                     WHERE C.tenant_id = A.tenant_id AND
  355.                         C.warehouse_id = A.warehouse_to_id AND
  356.                         C.product_id = B.product_id AND
  357.                         C.product_balance_id = B.product_balance_id AND
  358.                         C.product_status = B.product_status)
  359.     GROUP BY A.tenant_id, A.warehouse_to_id, B.product_id, B.product_balance_id, B.product_status, B.base_uom_id;*/
  360.  
  361.     INSERT INTO in_log_product_balance_stock
  362.     (tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  363.      product_id, product_balance_id, warehouse_id, product_status, base_uom_id, qty,
  364.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  365.     SELECT A.tenant_id, A.ou_to_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  366.         B.product_id, B.product_balance_id, A.warehouse_to_id, B.product_status, B.base_uom_id, SUM(B.qty_realization),
  367.         0, vDatetime, vUserId, vDatetime, vUserId
  368.     FROM in_inventory A, in_inventory_item B
  369.     WHERE A.inventory_id = vReturnBorrowId AND
  370.         A.inventory_id = B.inventory_id
  371.     GROUP BY A.tenant_id, A.ou_to_id, A.doc_type_id, A.inventory_id, A.doc_no, A.doc_date, A.partner_id,
  372.         B.product_id, B.product_balance_id, A.warehouse_to_id, B.product_status, B.base_uom_id;
  373.        
  374.     INSERT INTO in_log_borrowed_product_balance_stock
  375.     (tenant_id, ou_id, doc_type_id, ref_id,
  376.     doc_no, doc_date, partner_id, partner_ship_address_id,
  377.     product_id, product_balance_id, product_status,
  378.     base_uom_id, qty,
  379.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  380.     SELECT A.tenant_id, A.ou_to_id, A.doc_type_id, A.inventory_id,
  381.         A.doc_no, A.doc_date, C.partner_ship_to_id, C.partner_ship_address_id,
  382.         B.product_id, B.product_balance_id, B.product_status,
  383.         B.base_uom_id, B.qty_realization * -1,
  384.         0, vDatetime, vUserId, vDatetime, vUserId
  385.     FROM in_inventory A, in_inventory_item B, in_inventory_return_borrowing C
  386.     WHERE A.inventory_id = vReturnBorrowId AND
  387.         A.inventory_id = B.inventory_id AND
  388.         A.inventory_id = C.inventory_id;
  389.    
  390.     UPDATE in_inventory_borrow_balance_item A SET status_item = vStatusRelease, update_datetime = vDatetime, update_user_id = vUserId
  391.     WHERE EXISTS (
  392.         SELECT 1 FROM in_inventory_item B WHERE B.inventory_id = vReturnBorrowId AND A.inventory_item_id = B.ref_item_id
  393.     );
  394.    
  395.     UPDATE in_inventory_borrow_balance_item A SET status_item = vStatusFinal
  396.     WHERE EXISTS (
  397.         SELECT 1 FROM in_inventory_item B WHERE B.inventory_id = vReturnBorrowId AND A.inventory_item_id = B.ref_item_id
  398.     ) AND
  399.         (A.qty_do - A.qty_return - A.qty_sales) <= 0;
  400.    
  401.        
  402.     /* GENERATE DO */
  403.    
  404.     INSERT INTO sl_do
  405.         (do_id, tenant_id,
  406.         doc_type_id, doc_no, doc_date,
  407.         ou_id, ext_doc_no, ext_doc_date,
  408.         ref_doc_type_id, ref_id,
  409.         remark,
  410.         partner_ship_to_id, partner_ship_address_id,
  411.         warehouse_id, no_vehicle,
  412.         flg_delivery, delivery_code,
  413.         eta, eta_day,
  414.         status_doc, workflow_status,
  415.         create_datetime, create_user_id,
  416.         update_datetime, update_user_id,
  417.         version)
  418.     SELECT vDeliveryOrderId, A.tenant_id,
  419.         vDeliveryOrderDocType, vDeliveryOrderDocNo, A.doc_date,
  420.         A.ou_id, A.ext_doc_no, A.ext_doc_date,
  421.         A.doc_type_id, A.so_id,
  422.         A.remark,
  423.         A.partner_ship_to_id, A.partner_ship_address_id,
  424.         B.warehouse_from_id, B.no_vehicle,
  425.         B.flg_delivery, B.delivery_code,
  426.         substring(vDatetime from 1 for 6), 'AFTERLUNCH',
  427.         vStatusRelease, vWorkflowApproved,
  428.         vDatetime, vUserId,
  429.         vDatetime, vUserId,
  430.         vNol
  431.     FROM sl_so A
  432.     INNER JOIN in_inventory B ON B.inventory_id = A.ref_id
  433.     WHERE A.so_id = vSoId AND A.ref_doc_type_id = vDeliveryBorrowDocType;
  434.  
  435.     INSERT INTO sl_do_item
  436.         (tenant_id, do_id, line_no,
  437.         ref_doc_type_id, ref_id,
  438.         product_id,
  439.         qty_dlv_so, so_uom_id,
  440.         qty_dlv_int, base_uom_id,
  441.         remark, product_status,
  442.         create_datetime, create_user_id,
  443.         update_datetime, update_user_id,
  444.         version)
  445.     SELECT B.tenant_id, vDeliveryOrderId, A.line_no,
  446.     A.ref_doc_type_id, A.so_item_id,
  447.     A.product_id,
  448.     A.qty_so, A.so_uom_id,
  449.     A.qty_int, A.base_uom_id,
  450.     A.remark, C.product_status,
  451.     vDatetime, vUserId,
  452.     vDatetime, vUserId,
  453.     vNol
  454.     FROM sl_so_item A
  455.     INNER JOIN sl_so B ON B.so_id = A.so_id
  456.     INNER JOIN in_inventory_item C ON C.inventory_id = B.ref_id AND C.product_id = A.product_id
  457.     WHERE B.so_id = vSoId AND B.ref_doc_type_id = vDeliveryBorrowDocType;
  458.  
  459.     UPDATE sl_so_balance_item Z
  460.     SET status_item = vStatusInProgress,
  461.         qty_dlv = B.qty_dlv + A.qty_dlv_so,
  462.         qty_dlv_int = B.qty_dlv_int + A.qty_dlv_int,
  463.         update_datetime = vDatetime,
  464.         update_user_id = vUserId,
  465.         version = (Z.version + 1)
  466.     FROM sl_do_item A
  467.     INNER JOIN sl_so_balance_item B ON B.so_item_id = A.ref_id
  468.     INNER JOIN sl_so_item C ON C.so_item_id = B.so_item_id
  469.     INNER JOIN sl_so D ON D.so_id = C.so_id
  470.     WHERE D.so_id = vSoId AND D.ref_doc_type_id = vDeliveryBorrowDocType
  471.     AND B.so_item_id = Z.so_item_id;
  472.    
  473.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId; 
  474.  
  475.     SELECT A.ref_id, f_get_ou_bu_structure(A.ou_id) AS ou, f_get_document_journal(A.doc_type_id) as doc
  476.     FROM sl_do A
  477.     WHERE A.do_id = vDeliveryOrderId INTO result;
  478.        
  479.     vOuStructure := result.ou;
  480.     vDocJournal := result.doc;
  481.    
  482.     INSERT INTO sl_log_so_balance_item
  483.     (tenant_id, so_id, so_item_id, ref_doc_type_id, ref_id, ref_item_id,
  484.      qty_trx, trx_uom_id, qty_int, base_uom_id, remark,
  485.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  486.     SELECT A.tenant_id, C.so_id, C.so_item_id, A.doc_type_id, A.do_id, B.do_item_id,
  487.         B.qty_dlv_so * -1, B.so_uom_id, B.qty_dlv_int  *-1, B.base_uom_id, B.remark,
  488.         0, vDatetime, vUserId, vDatetime, vUserId
  489.     FROM sl_do A, sl_do_item B, sl_so_item C
  490.     WHERE A.do_id = vDeliveryOrderId AND
  491.           A.do_id = B.do_id AND
  492.           B.ref_id = C.so_item_id;
  493.          
  494.     INSERT INTO sl_so_balance_invoice
  495.     (tenant_id, ou_id, partner_id, so_id,
  496.     ref_doc_type_id, ref_id, ref_doc_no, ref_doc_date, ref_item_id, qty_dlv_so, so_uom_id,
  497.     curr_code, price_so, item_amount, flg_invoice, invoice_id,
  498.     regular_disc_amount, promo_disc_amount, adj_regular_disc_amount, adj_promo_disc_amount,
  499.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  500.     SELECT A.tenant_id, A.ou_id, D.partner_bill_to_id, A.ref_id,
  501.         A.doc_type_id, A.do_id, A.doc_no, A.doc_date, B.do_item_id, B.qty_dlv_so, B.so_uom_id,
  502.         C.curr_code, C.nett_sell_price,
  503.         f_get_amount_before_tax_and_disc(B.qty_dlv_so * C.gross_sell_price, B.qty_dlv_so * C.discount_amount, C.flg_tax_amount, C.tax_percentage, f_get_digit_decimal_doc_curr(vDeliveryOrderDocType, C.curr_code), vRoundingModeNonTax),
  504.         vFlagInvoice, vEmptyId,
  505.         C.discount_amount * B.qty_dlv_so, 0, 0, 0,
  506.         0, vDatetime, vUserId, vDatetime, vUserId
  507.     FROM sl_do A, sl_do_item B, sl_so_item C, sl_so D
  508.     WHERE A.do_id = vDeliveryOrderId AND
  509.           A.do_id = B.do_id AND
  510.           B.ref_id = C.so_item_id AND
  511.           C.so_id = D.so_id;
  512.        
  513.     INSERT INTO sl_so_balance_invoice_tax
  514.     (tenant_id, ou_id, partner_id, so_id,
  515.     ref_doc_type_id, ref_id, ref_item_id, tax_id, flg_amount,
  516.     tax_percentage, curr_code, base_amount, tax_amount, flg_invoice, invoice_id,
  517.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  518.     SELECT A.tenant_id, A.ou_id, E.partner_bill_to_id, A.ref_id,
  519.         A.doc_type_id, A.do_id, B.do_item_id, C.tax_id, D.flg_amount,
  520.         C.tax_percentage, C.curr_code,
  521.         f_get_amount_before_tax_and_disc(B.qty_dlv_so * C.gross_sell_price, B.qty_dlv_so * C.discount_amount, C.flg_tax_amount, C.tax_percentage, f_get_digit_decimal_doc_curr(vDeliveryOrderDocType, C.curr_code), vRoundingModeNonTax),
  522.         f_tax_rounding(A.tenant_id, f_get_amount_before_tax(B.qty_dlv_so * (C.gross_sell_price - C.discount_amount), C.flg_tax_amount, C.tax_percentage, f_get_digit_decimal_doc_curr(vDeliveryOrderDocType, C.curr_code), vRoundingModeNonTax), C.tax_percentage), vFlagInvoice, vEmptyId,
  523.         0, vDatetime, vUserId, vDatetime, vUserId
  524.     FROM sl_do A, sl_do_item B, sl_so_item C, m_tax D, sl_so E
  525.     WHERE A.do_id = vDeliveryOrderId AND
  526.           A.do_id = B.do_id AND
  527.           B.ref_id = C.so_item_id AND
  528.           C.tax_id = D.tax_id AND
  529.           C.so_id = E.so_id;
  530.          
  531.     /*
  532.      * buat data log product balance stock
  533.      * ref item id = do_product_id
  534.      */      
  535.     INSERT INTO in_log_product_balance_stock
  536.     (tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  537.      product_id, product_balance_id, warehouse_id, product_status, base_uom_id, qty,
  538.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  539.     SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.do_id, A.doc_no, A.doc_date, A.partner_ship_to_id,
  540.         C.product_id, C.product_balance_id, A.warehouse_id, C.product_status, C.base_uom_id, SUM(C.qty_dlv_int) * -1,
  541.         0, vDatetime, vUserId, vDatetime, vUserId      
  542.     FROM sl_do A, sl_do_item B, sl_do_product C
  543.     WHERE A.do_id = vDeliveryOrderId AND
  544.         A.do_id = B.do_id AND
  545.         B.do_item_id = C.do_item_id
  546.     GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.do_id, A.doc_no, A.doc_date, A.partner_ship_to_id,
  547.             C.product_id, C.product_balance_id, A.warehouse_id, C.product_status, C.base_uom_id;
  548.  
  549.     /*
  550.      * add data balance do item yang akan digunakan di inventory untuk pembuatan return note,
  551.      * saat akan membuat return note
  552.      */
  553.     INSERT INTO in_balance_do_item
  554.     (do_item_id, tenant_id, ou_id, do_id, doc_no, doc_date, partner_id,
  555.       so_id, so_no, so_date, so_item_id,
  556.       qty_dlv, qty_return, so_uom_id, qty_dlv_int, 
  557.       qty_return_int, base_uom_id, status_item,
  558.       "version", create_datetime, create_user_id, update_datetime, update_user_id)
  559.     SELECT B.do_item_id, A.tenant_id, A.ou_id, A.do_id, A.doc_no, A.doc_date, A.partner_ship_to_id,
  560.             A.ref_id, C.doc_no, C.doc_date, B.ref_id,
  561.             SUM(B.qty_dlv_so), 0, B.so_uom_id, SUM(B.qty_dlv_int),
  562.             0, B.base_uom_id, vStatusRelease,
  563.         0, vDatetime, vUserId, vDatetime, vUserId      
  564.     FROM sl_do A, sl_do_item B, sl_so C
  565.     WHERE A.do_id = vDeliveryOrderId AND
  566.         A.do_id = B.do_id AND
  567.         A.ref_id = C.so_id
  568.     GROUP BY B.do_item_id, A.tenant_id, A.ou_id, A.do_id, A.doc_no, A.doc_date, A.partner_ship_to_id,
  569.         A.ref_id, C.doc_no, C.doc_date, B.ref_id, B.so_uom_id, B.base_uom_id;
  570.    
  571.     UPDATE sl_so_balance_item SET status_item = vStatusRelease, update_datetime = vDatetime, update_user_id = vUserId
  572.     FROM sl_do_item A
  573.     WHERE sl_so_balance_item.so_item_id = A.ref_id AND
  574.         sl_so_balance_item.tenant_id = A.tenant_id AND
  575.         A.do_id = vDeliveryOrderId AND
  576.         sl_so_balance_item.qty_so - sl_so_balance_item.qty_cancel + sl_so_balance_item.qty_add - sl_so_balance_item.qty_dlv > 0;
  577.  
  578.     UPDATE sl_so_balance_item SET status_item = vStatusFinal, update_datetime = vDatetime, update_user_id = vUserId
  579.     FROM sl_do_item A
  580.     WHERE sl_so_balance_item.so_item_id = A.ref_id AND
  581.         sl_so_balance_item.tenant_id = A.tenant_id AND
  582.         A.do_id = vDeliveryOrderId AND
  583.         sl_so_balance_item.qty_so - sl_so_balance_item.qty_cancel + sl_so_balance_item.qty_add - sl_so_balance_item.qty_dlv <= 0;
  584.    
  585.     /*
  586.      * modified by Putra Soliman, 07 Maret 2016 untuk improvement Service RMA
  587.      * update sl_so_balance_warranty_item --> status_item F seperti di atas.. untuk item yg sama dengan balance itemnya
  588.      * INSERT ke sl_so_balance_warranty_invoice dan sl_so_balance_warranty_invoice_tax
  589.      */
  590.        
  591.     INSERT INTO sl_so_balance_warranty_invoice(
  592.             tenant_id, ou_id, partner_id, so_id,
  593.             ref_doc_type_id, ref_id, ref_doc_no, ref_doc_date, ref_item_id,
  594.             qty_dlv_so, so_uom_id, curr_code, warranty_sell_price, warranty_sell_amount, flg_default_warranty, flg_invoice,
  595.             invoice_id, warranty_type_id, flg_invoice_temp, do_receipt_item_id, def_warranty_time, warranty_time,
  596.             version, create_datetime, create_user_id,
  597.             update_datetime, update_user_id)
  598.     SELECT A.tenant_id, A.ou_id, D.partner_bill_to_id, A.ref_id,
  599.         A.doc_type_id, A.do_id, A.doc_no, A.doc_date, B.do_item_id,
  600.         B.qty_dlv_so, B.so_uom_id,
  601.         C.curr_code, E.warranty_sell_price, B.qty_dlv_so * E.warranty_sell_price, E.flg_default_warranty, vFlagInvoice,
  602.         vEmptyId, E.warranty_type_id, vFlagInvoice, vEmptyId, E.def_warranty_time, E.warranty_time,
  603.         0, vDatetime, vUserId,
  604.         vDatetime, vUserId
  605.     FROM sl_do A, sl_do_item B, sl_so_item C, sl_so D, sl_so_warranty_item E
  606.     WHERE A.do_id = vDeliveryOrderId AND
  607.           A.do_id = B.do_id AND
  608.           B.ref_id = C.so_item_id AND
  609.           C.so_id = D.so_id AND
  610.           E.so_item_id = C.so_item_id;
  611.    
  612.     INSERT INTO sl_so_balance_warranty_invoice_tax(
  613.             tenant_id, ou_id, partner_id,
  614.             so_id, ref_doc_type_id, ref_id, ref_item_id, tax_id, flg_amount,
  615.             tax_percentage, curr_code, base_amount, tax_amount,
  616.             flg_invoice, invoice_id, warranty_type_id,
  617.             version, create_datetime, create_user_id, update_datetime, update_user_id)
  618.     SELECT A.tenant_id, A.ou_id, D.partner_bill_to_id,
  619.         A.ref_id, A.doc_type_id, A.do_id, B.do_item_id, C.tax_id, F.flg_amount,
  620.         C.tax_percentage, C.curr_code,
  621.         f_get_amount_before_tax_and_disc(B.qty_dlv_so * E.warranty_sell_price, vNol, C.flg_tax_amount, C.tax_percentage, f_get_digit_decimal_doc_curr(vDeliveryOrderDocType, C.curr_code), vRoundingModeNonTax),
  622.         f_tax_rounding(A.tenant_id, f_get_amount_before_tax(B.qty_dlv_so * E.warranty_sell_price, C.flg_tax_amount, C.tax_percentage, f_get_digit_decimal_doc_curr(vDeliveryOrderDocType, C.curr_code), vRoundingModeNonTax), C.tax_percentage),
  623.         vFlagInvoice, vEmptyId, E.warranty_type_id,
  624.         0, vDatetime, vUserId, vDatetime, vUserId
  625.     FROM sl_do A, sl_do_item B, sl_so_item C, sl_so D, sl_so_warranty_item E, m_tax F
  626.     WHERE A.do_id = vDeliveryOrderId AND
  627.           A.do_id = B.do_id AND
  628.           B.ref_id = C.so_item_id AND
  629.           C.so_id = D.so_id AND
  630.           E.so_item_id = C.so_item_id AND
  631.           F.tax_id = C.tax_id;
  632.          
  633.     UPDATE sl_so_balance_warranty_item SET status_item = vStatusRelease, update_datetime = vDatetime, update_user_id = vUserId
  634.     FROM sl_do_item A, sl_so_warranty_item B, sl_so_balance_item C
  635.     WHERE B.so_item_id = A.ref_id
  636.         AND sl_so_balance_warranty_item.tenant_id = A.tenant_id
  637.         AND A.do_id = vDeliveryOrderId
  638.         AND sl_so_balance_warranty_item.so_warranty_item_id = B.so_warranty_item_id
  639.         AND sl_so_balance_warranty_item.so_item_id = C.so_item_id
  640.         AND C.qty_so - C.qty_cancel + C.qty_add - C.qty_dlv > 0;
  641.  
  642.     UPDATE sl_so_balance_warranty_item SET status_item = vStatusFinal, update_datetime = vDatetime, update_user_id = vUserId
  643.     FROM sl_do_item A, sl_so_warranty_item B, sl_so_balance_item C
  644.     WHERE sl_so_balance_warranty_item.tenant_id = A.tenant_id
  645.         AND A.do_id = vDeliveryOrderId
  646.         AND sl_so_balance_warranty_item.so_warranty_item_id = B.so_warranty_item_id
  647.         AND sl_so_balance_warranty_item.so_item_id = C.so_item_id
  648.         AND C.qty_so - C.qty_cancel + C.qty_add - C.qty_dlv <= 0;
  649.            
  650.     SELECT COUNT(1) INTO vUnfinishedItem
  651.     FROM sl_so_balance_item A, sl_so_item B
  652.     WHERE A.so_item_id = B.so_item_id AND
  653.         B.so_id = vSoId AND
  654.         A.status_item = vStatusRelease;
  655.        
  656.     IF vUnfinishedItem = 0 THEN
  657.         UPDATE sl_so SET status_doc = vStatusFinal
  658.         WHERE so_id = vSoId;
  659.     END IF;
  660.        
  661.     /*
  662.      * membuat data transaksi jurnal :
  663.      * 1. buat admin
  664.      * 2. buat temlate jurnal
  665.      */
  666.  
  667.     PERFORM gl_manage_admin_journal_trx(A.tenant_id, (vOuStructure).ou_bu_id, A.ou_id, (vDocJournal).journal_type, (vDocJournal).ledger_code, f_get_year_month_date(A.doc_date), 'MONTHLY', vDatetime, vUserId)
  668.     FROM sl_do A
  669.     WHERE A.do_id = vDeliveryOrderId;
  670.    
  671.     SELECT NEXTVAL('gl_journal_trx_seq') INTO vJournalTrxId;
  672.    
  673.     INSERT INTO gl_journal_trx
  674.     (journal_trx_id, tenant_id, journal_type, doc_type_id, doc_id, doc_no, doc_date,
  675.     ou_bu_id, ou_branch_id, ou_sub_bu_id, partner_id, cashbank_id, warehouse_id, ext_doc_no, ext_doc_date,  
  676.     ref_doc_type_id, ref_id, due_date, curr_code, remark, status_doc, workflow_status,
  677.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  678.     SELECT vJournalTrxId, A.tenant_id, (vDocJournal).journal_type, A.doc_type_id, A.do_id, A.doc_no, A.doc_date,
  679.         (vOuStructure).ou_bu_id, (vOuStructure).ou_branch_id, (vOuStructure).ou_sub_bu_id, A.partner_ship_to_id, vEmptyId, A.warehouse_id, A.ext_doc_no, A.ext_doc_date,
  680.         A.ref_doc_type_id, A.ref_id, A.doc_date, B.curr_code, A.remark, vStatusDraft, 'DRAFT',
  681.         0, vDatetime, vUserId, vDatetime, vUserId
  682.     FROM sl_do A, sl_so B
  683.     WHERE A.do_id = vDeliveryOrderId AND
  684.         A.ref_doc_type_id = B.doc_type_id AND
  685.         A.ref_id = B.so_id;
  686.    
  687.     INSERT INTO tt_journal_trx_item
  688.     (session_id, tenant_id, journal_trx_id, line_no,
  689.     ref_doc_type_id, ref_id,
  690.     partner_id, product_id, cashbank_id, ou_rc_id,
  691.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  692.     coa_id, curr_code, qty, uom_id,
  693.     amount, journal_date, type_rate,
  694.     numerator_rate, denominator_rate, journal_desc, remark)
  695.     SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  696.         A.doc_type_id, B.do_item_id,
  697.         A.partner_ship_to_id, B.product_id, vEmptyId, vEmptyId,
  698.         vEmptyId, vSignCredit, vProductCOA, vEmptyId,
  699.         f_get_product_coa_group_product(A.tenant_id, B.product_id), f_get_value_system_config_by_param_code(pTenantId, 'ValutaBuku'), B.qty_dlv_int, B.base_uom_id,
  700.         0, A.doc_date, vTypeRate,
  701.         1, 1, 'PRODUCT_STOCK', B.remark
  702.     FROM sl_do A, sl_do_item B, sl_so_item C
  703.     WHERE A.do_id = vDeliveryOrderId AND
  704.         A.do_id = B.do_id AND
  705.         B.ref_id = C.so_item_id;
  706.        
  707.     INSERT INTO gl_journal_trx_item
  708.     (tenant_id, journal_trx_id, line_no,
  709.     ref_doc_type_id, ref_id,
  710.     partner_id, product_id, cashbank_id, ou_rc_id,
  711.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  712.     coa_id, curr_code, qty, uom_id,
  713.     amount, journal_date, type_rate,
  714.     numerator_rate, denominator_rate, journal_desc, remark,
  715.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  716.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  717.         A.ref_doc_type_id, A.ref_id,
  718.         A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  719.         A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  720.         A.coa_id, A.curr_code, A.qty, A.uom_id,
  721.         A.amount, A.journal_date, A.type_rate,
  722.         A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  723.         0, vDatetime, vUserId, vDatetime, vUserId
  724.     FROM tt_journal_trx_item A
  725.     WHERE A.session_id = pSessionId;
  726.    
  727.     INSERT INTO gl_journal_trx_mapping
  728.     (tenant_id, journal_trx_id, line_no,
  729.     ref_doc_type_id, ref_id,
  730.     partner_id, product_id, cashbank_id, ou_rc_id,
  731.     segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  732.     coa_id, curr_code, qty, uom_id,
  733.     amount, journal_date, type_rate,
  734.     numerator_rate, denominator_rate, journal_desc, remark,
  735.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  736.     SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id ),
  737.         vEmptyId, vEmptyId,
  738.         vEmptyId, vEmptyId, vEmptyId, vEmptyId,
  739.         vEmptyId, vSignDebit, vSystemCOA, vEmptyId,
  740.         f_get_system_coa_by_group_coa(A.tenant_id, 'HargaPokokPenjualan'), f_get_value_system_config_by_param_code(pTenantId, 'ValutaBuku'), 0, vEmptyId,
  741.         0, A.journal_date, A.type_rate,
  742.         1, 1, 'COGS', vEmptyValue,
  743.         0, vDatetime, vUserId, vDatetime, vUserId
  744.     FROM tt_journal_trx_item A
  745.     WHERE A.session_id = pSessionId
  746.     GROUP BY A.tenant_id, A.journal_trx_id, A.journal_date, A.type_rate;
  747.        
  748.     DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;
  749.    
  750.     /* INSERT APPROVAL */
  751.    
  752.     -- Mendapatkan default approval flow ID yang dipakai dari sysconfig
  753.     SELECT awe_flow_id INTO vFlowReturnBorrowId
  754.     FROM awe_flow
  755.     WHERE scheme = vSchemeReturnBorrow AND
  756.         flg_validate = 'Y' AND
  757.         active = 'Y';
  758.    
  759.      -- Generate data awe_currdoc_status
  760.     INSERT INTO awe_currdoc_status(
  761.         req_id, tenant_id, scheme, doc_id, doc_no, doc_date, current_state,
  762.         remark, current_user_id, current_role_id, flg_user_role, label,
  763.         data, flow_id, create_datetime, create_user_id, create_role_id,
  764.         update_datetime, update_user_id, update_role_id, version)
  765.     SELECT A.inventory_id||'_'||A.doc_no, A.tenant_id, vSchemeReturnBorrow, A.inventory_id, A.doc_no, A.doc_date, vWorkflowApproved,
  766.         A.remark, A.create_user_id, vEmptyId, 'R', 'RETURN GOODS BORROWING'||A.doc_no,
  767.         '{}', vFlowReturnBorrowId, vDatetime, vUserId, vEmptyId,
  768.         vDatetime, vUserId, vEmptyId, 0
  769.     FROM in_inventory A
  770.     WHERE A.inventory_id = vReturnBorrowId;
  771.  
  772.     -- Mendapatkan default approval flow ID yang dipakai dari sysconfig
  773.     SELECT awe_flow_id INTO vFlowDeliveryOrderId
  774.     FROM awe_flow
  775.     WHERE scheme = vSchemeDeliveryOrder AND
  776.         flg_validate = 'Y' AND
  777.         active = 'Y';
  778.    
  779.      -- Generate data awe_currdoc_status
  780.     INSERT INTO awe_currdoc_status(
  781.         req_id, tenant_id, scheme, doc_id, doc_no, doc_date, current_state,
  782.         remark, current_user_id, current_role_id, flg_user_role, label,
  783.         data, flow_id, create_datetime, create_user_id, create_role_id,
  784.         update_datetime, update_user_id, update_role_id, version)
  785.     SELECT A.do_id||'_'||A.doc_no, A.tenant_id, vSchemeDeliveryOrder, A.do_id, A.doc_no, A.doc_date, vWorkflowApproved,
  786.         A.remark, A.create_user_id, vEmptyId, 'R', 'DELIVERY ORDER'||A.doc_no,
  787.         '{}', vFlowDeliveryOrderId, vDatetime, vUserId, vEmptyId,
  788.         vDatetime, vUserId, vEmptyId, 0
  789.     FROM sl_do A
  790.     WHERE A.do_id = vDeliveryOrderId;
  791.    
  792. END;
  793. $BODY$
  794.   LANGUAGE plpgsql VOLATILE
  795.   COST 100;
  796.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement