Advertisement
aadddrr

pu_submit_po

Sep 25th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Function: pu_submit_po(bigint, character varying, character varying)
  2.  
  3. -- DROP FUNCTION pu_submit_po(bigint, character varying, character varying);
  4.  
  5. CREATE OR REPLACE FUNCTION pu_submit_po(bigint, character varying, character varying)
  6.   RETURNS void AS
  7. $BODY$
  8. DECLARE
  9.     pTenantId                   ALIAS FOR $1;
  10.     pSessionId                  ALIAS FOR $2;
  11.     pProcessNo                  ALIAS FOR $3;
  12.  
  13.     vProcessId                  bigint;
  14.     vPoId                       bigint;
  15.     vUserId                     bigint;
  16.     vDatetime                   character varying(14);
  17.     vStatusRelease              character varying(1);
  18.     vStatusFinal                character varying(1);
  19.     vEmptyId                    bigint;
  20.     vEmptyString                character varying;
  21.     vPurchaseOrderDocTypeId     bigint;
  22.     vRoundingModeNonTax         character varying(5);
  23.     vFlgNo                      character varying(1);
  24.     vFlgYes                     character varying(1);
  25.     vDiscountAmount             numeric;
  26.    
  27.    
  28. BEGIN
  29.    
  30.     vFlgYes := 'Y';
  31.     vFlgNo := 'N';
  32.     vStatusRelease := 'R';
  33.     vStatusFinal := 'F';
  34.     vEmptyId := -99;
  35.     vEmptyString := '';
  36.     vPurchaseOrderDocTypeId = 101;
  37.    
  38.     SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingModeNonTax;
  39.    
  40.    
  41.     SELECT A.process_message_id INTO vProcessId
  42.     FROM t_process_message A
  43.     WHERE A.tenant_id = pTenantId AND
  44.         A.process_name = 'pu_submit_po' AND
  45.         A.process_no = pProcessNo;
  46.        
  47.     SELECT CAST(A.process_parameter_value AS bigint) INTO vPoId
  48.     FROM t_process_parameter A
  49.     WHERE A.process_message_id = vProcessId AND
  50.         A.process_parameter_key = 'poId';
  51.    
  52.     SELECT CAST(A.process_parameter_value AS bigint) INTO vUserId
  53.     FROM t_process_parameter A
  54.     WHERE A.process_message_id = vProcessId AND
  55.         A.process_parameter_key = 'userId';
  56.  
  57.     SELECT CAST(A.process_parameter_value AS character varying(14)) INTO vDatetime
  58.     FROM t_process_parameter A
  59.     WHERE A.process_message_id = vProcessId AND
  60.         A.process_parameter_key = 'datetime';
  61.    
  62.        
  63.     INSERT INTO pu_po_tax
  64.     (tenant_id, po_id, tax_id, flg_amount,
  65.     tax_percentage, base_amount, tax_amount, remark,
  66.     version, create_datetime, create_user_id, update_datetime, update_user_id)
  67.     SELECT A.tenant_id, A.po_id, A.tax_id, B.flg_amount,
  68.         A.tax_percentage, (SUM(f_get_amount_before_tax(A.gross_item_amount,
  69.                                                         A.flg_tax_amount,
  70.                                                         A.tax_percentage,
  71.                                                         f_get_digit_decimal_doc_curr(vPurchaseOrderDocTypeId, A.curr_code),
  72.                                                         vRoundingModeNonTax)) - C.discount_amount),
  73.         f_tax_rounding(A.tenant_id,  (SUM(f_get_amount_before_tax(A.gross_item_amount,
  74.                                                                     A.flg_tax_amount,
  75.                                                                     A.tax_percentage,
  76.                                                                     f_get_digit_decimal_doc_curr(vPurchaseOrderDocTypeId, A.curr_code),
  77.                                                                     vRoundingModeNonTax)) - C.discount_amount), A.tax_percentage), B.tax_name,
  78.         0, vDatetime, vUserId, vDatetime, vUserId
  79.     FROM pu_po_item A, m_tax B, pu_po_discount C
  80.     WHERE A.tax_id = B.tax_id AND
  81.           A.po_id = vPoId AND
  82.           A.tax_id <> vEmptyId AND
  83.           A.po_id = C.po_id
  84.     GROUP BY A.tenant_id, A.po_id, A.tax_id, B.flg_amount,
  85.             A.tax_percentage, B.tax_name, C.discount_amount;
  86.    
  87.     INSERT INTO pu_po_balance_item
  88.     (po_item_id, tenant_id, ou_id, qty_po, qty_rcv, qty_return, qty_cancel, qty_add, po_uom_id,
  89.      qty_int_po, qty_int_rcv, qty_int_return, qty_int_cancel, qty_int_add, base_uom_id,
  90.      tolerance_rcv_qty, status_item, version, create_datetime, create_user_id, update_datetime, update_user_id)
  91.     SELECT A.po_item_id, A.tenant_id, B.ou_id, A.qty_po, 0, 0, 0, 0, A.po_uom_id,
  92.             A.qty_int, 0, 0, 0, 0, A.base_uom_id,
  93.             A.tolerance_rcv_qty, vStatusRelease, 0, vDatetime, vUserId, vDatetime, vUserId
  94.     FROM pu_po_item A, pu_po B
  95.     WHERE A.po_id = vPoId AND
  96.         A.po_id = B.po_id;
  97.      
  98.     INSERT INTO pu_log_po_balance_item
  99.     (tenant_id, po_id, po_item_id, ref_doc_type_id, ref_id, ref_item_id,
  100.      qty_trx, trx_uom_id, qty_int, base_uom_id, remark,
  101.     version, create_datetime, create_user_id, update_datetime, update_user_id)
  102.     SELECT A.tenant_id, A.po_id, A.po_item_id, vEmptyId, vEmptyId, vEmptyId,
  103.         A.qty_po, A.po_uom_id, A.qty_int, A.base_uom_id, A.remark,
  104.         0, vDatetime, vUserId, vDatetime, vUserId
  105.     FROM pu_po_item A
  106.     WHERE A.po_id = vPoId;
  107.  
  108.     -- Jika PO reference dari SO, maka update qty_int dan status table sl_so_po_balance_item
  109.     UPDATE sl_so_po_balance_item
  110.         SET qty_po_int = qty_po_int + A.qty_int, status_item = vStatusRelease,
  111.             update_datetime = vDatetime, update_user_id = vUserId, version = sl_so_po_balance_item.version + 1
  112.     FROM pu_po_item A
  113.     WHERE A.po_id = vPoId AND
  114.         A.ref_id <> -99 AND
  115.         A.ref_id = sl_so_po_balance_item.so_item_id;
  116.  
  117.     -- Update status item = F pada table sl_so_po_balance_item, jika total qty SO <= total qty PO
  118.     UPDATE sl_so_po_balance_item
  119.         SET status_item = vStatusFinal
  120.     FROM pu_po_item A, sl_so_balance_item B
  121.     WHERE A.po_id = vPoId AND
  122.         A.ref_id <> -99 AND
  123.         A.ref_id = sl_so_po_balance_item.so_item_id AND
  124.         B.so_item_id = sl_so_po_balance_item.so_item_id AND
  125.         (B.qty_so_int + B.qty_add_int - B.qty_cancel_int) <= (sl_so_po_balance_item.qty_po_int + sl_so_po_balance_item.qty_po_int_add - sl_so_po_balance_item.qty_po_int_cancel);
  126.    
  127.     UPDATE pu_po SET status_doc = vStatusRelease, update_datetime = vDatetime, update_user_id = vUserId, version = pu_po.version + 1
  128.     WHERE po_id = vPoId;
  129.    
  130.    
  131.  
  132.     -- Jika ada discount maka Insert into pu_po_balance_discount
  133.     INSERT INTO pu_po_balance_discount(tenant_id, ou_id, po_id, curr_code, discount_amount, current_amount, status,
  134.         ref_id, ref_doc_type_id, remark, version, create_datetime, create_user_id, update_datetime, update_user_id)
  135.     SELECT A.tenant_id, A.ou_id, A.po_id, A.curr_code, B.discount_amount, 0, vFlgNo,
  136.             vEmptyId, vEmptyId, vEmptyString, 0, vDatetime, vUserId, vDatetime, vUserId
  137.     FROM pu_po A
  138.     INNER JOIN pu_po_discount B ON A.po_id = B.po_id
  139.     WHERE A.po_id = vPoId AND B.discount_amount <> 0;
  140.  
  141.    
  142. END;
  143. $BODY$
  144.   LANGUAGE plpgsql VOLATILE
  145.   COST 100;
  146. ALTER FUNCTION pu_submit_po(bigint, character varying, character varying)
  147.   OWNER TO sts;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement