Advertisement
aadddrr

Untitled

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