Advertisement
samuel025

Function Submit Goods Purchasing

Dec 27th, 2021
1,257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --pu_submit_goods_purchasing
  2.  
  3. -- DROP FUNCTION pu_submit_goods_purchasing(bigint, character varying, character varying);
  4.  
  5. CREATE OR REPLACE FUNCTION pu_submit_goods_purchasing(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.     vGoodsPurchasingId      bigint;
  16.     vUserId                 bigint;
  17.     vDatetime               character varying(14);
  18.     vStatusRelease          character varying(1);
  19.     vStatusFinal            character varying(1);
  20.     vEmptyValue             character varying(1);
  21.     vFlagInvoice            character varying(1);
  22.     vFlagInvoiceY           character varying(1);
  23.     vStatusDraft            character varying(1);
  24.     vSignJournalD           character varying(1);
  25.     vSignJournalC           character varying(1);
  26.     vFlagPayment            character varying(1);
  27.     vFlgSourceCoa           character varying(7);
  28.     vTypeRate               character varying(3);
  29.     vEmptyId                bigint;
  30.     vPurchaseOrderDocTypeId bigint;
  31.     vJournalTrxId           bigint;
  32.     vJournalTrxIdNew        bigint;
  33.     vReceiveGoodsDocTypeId  bigint;
  34.     vInvoiceApBalanceId     bigint;
  35.     vRoundingModeNonTax     character varying(5);
  36.     vProductStatus          character varying(50);
  37.     vGoodsPurchasingDocTypeId   bigint;
  38.     vJournalReceiveGoodsId      bigint;
  39.     vTypeDocumentJournal        bigint;
  40.     vJointDppPpn            character varying(1);
  41.  
  42.     vDocJournalRg                   DOC_JOURNAL%ROWTYPE;
  43.     vDocJournalPi                   DOC_JOURNAL%ROWTYPE;
  44.     vOuStructure                OU_BU_STRUCTURE%ROWTYPE;
  45.     result                      RECORD;
  46.     vDocTypeReceiveGoodsId      bigint;
  47.     vDocTypePurchaseInvoiceId   bigint;
  48.  
  49.     vYes                    character varying:='Y';
  50.     vWorkFlowStatus         character varying:='APPROVED';
  51.     vFlgRole                character varying:='R';
  52.     vProcessNameRg          character varying:='pu_submit_receive_goods';
  53.     vParamKeyRg             character varying:='receiveGoodsId';
  54.     vSchemeRg               character varying:='CB01';
  55.     vFlowRgId               bigint;
  56.     vProcessNamePi          character varying:='pu_submit_purch_invoice';
  57.     vParamKeyPi             character varying:='purchInvoiceId';
  58.     vSchemePi               character varying:='CD01';
  59.     vSchemeGp               character varying:='CF01';
  60.     vFlowPiId               bigint;
  61.     vRoleId                 bigint;
  62.     vActivity               character varying := 'AUTO GENERATE';
  63.    
  64. BEGIN
  65.    
  66.     vFlagInvoice := 'N';
  67.     vFlagInvoiceY := 'Y';
  68.     vFlagPayment := 'N';
  69.     vStatusRelease := 'R';
  70.     vStatusFinal := 'F';
  71.     vStatusDraft := 'D';
  72.     vSignJournalD := 'D';
  73.     vSignJournalC := 'C';
  74.     vFlgSourceCoa := 'PRODUCT';
  75.     vTypeRate := 'COM';
  76.     vEmptyId := -99;
  77.     vEmptyValue := ' ';
  78.     vDocTypeReceiveGoodsId := 111;
  79.     vDocTypePurchaseInvoiceId := 131;
  80.  
  81.     --vJournalReceiveGoodsId := 111;
  82.     vReceiveGoodsDocTypeId := 111;
  83.     vGoodsPurchasingDocTypeId := 160;
  84.     vTypeDocumentJournal := 131;
  85.    
  86.     vJointDppPpn := f_get_value_system_config_by_param_code(pTenantId, 'joint.dpp.ppn.balance');
  87.    
  88.     vProductStatus := 'GOOD';
  89.  
  90.    
  91.     /*
  92.     SELECT product_status_code INTO vProductStatus
  93.     FROM m_product_status
  94.     WHERE tenant_id = pTenantId AND flg_buy = 'Y';
  95.     */
  96.    
  97.     SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingModeNonTax;
  98.    
  99.     SELECT A.process_message_id INTO vProcessId
  100.     FROM t_process_message A
  101.     WHERE A.tenant_id = pTenantId AND
  102.         A.process_name = 'pu_submit_goods_purchasing' AND
  103.         A.process_no = pProcessNo;
  104.        
  105.     SELECT CAST(A.process_parameter_value AS bigint) INTO vGoodsPurchasingId
  106.     FROM t_process_parameter A
  107.     WHERE A.process_message_id = vProcessId AND
  108.         A.process_parameter_key = 'goodsPurchasingId';
  109.    
  110.     SELECT CAST(A.process_parameter_value AS bigint) INTO vUserId
  111.     FROM t_process_parameter A
  112.     WHERE A.process_message_id = vProcessId AND
  113.         A.process_parameter_key = 'userId';
  114.  
  115.     SELECT CAST(A.process_parameter_value AS character varying(14)) INTO vDatetime
  116.     FROM t_process_parameter A
  117.     WHERE A.process_message_id = vProcessId AND
  118.         A.process_parameter_key = 'datetime';
  119.  
  120.     SELECT role_id INTO vRoleId
  121.     FROM awe_historydoc
  122.     WHERE scheme = vSchemeGp
  123.     AND doc_id = vGoodsPurchasingId
  124.     AND activity = 'SUBMIT';   
  125.    
  126.     DELETE FROM tt_pu_product_balance WHERE session_id = pSessionId;
  127.    
  128.     UPDATE pu_po SET status_doc = vStatusRelease, update_datetime = vDatetime, update_user_id = vUserId
  129.     WHERE po_id = vGoodsPurchasingId;
  130.    
  131.     -- insert balance item po
  132.     INSERT INTO pu_po_balance_item
  133.         (po_item_id, tenant_id, ou_id, qty_po, qty_rcv, qty_return, qty_cancel, qty_add, po_uom_id,
  134.          qty_int_po, qty_int_rcv, qty_int_return, qty_int_cancel, qty_int_add, base_uom_id,
  135.          tolerance_rcv_qty, status_item, version, create_datetime, create_user_id, update_datetime, update_user_id)
  136.     SELECT A.po_item_id, A.tenant_id, B.ou_id, A.qty_po, A.qty_po, 0, 0, 0, A.po_uom_id,
  137.             A.qty_int, 0, 0, 0, 0, A.base_uom_id,
  138.             A.tolerance_rcv_qty, vStatusRelease, 0, vDatetime, vUserId, vDatetime, vUserId
  139.     FROM pu_po_item A, pu_po B
  140.     WHERE A.po_id = vGoodsPurchasingId
  141.     AND A.po_id = B.po_id;
  142.      
  143.     -- insert log balance item po
  144.     INSERT INTO pu_log_po_balance_item
  145.     (tenant_id, po_id, po_item_id, ref_doc_type_id, ref_id, ref_item_id,
  146.      qty_trx, trx_uom_id, qty_int, base_uom_id, remark,
  147.     version, create_datetime, create_user_id, update_datetime, update_user_id)
  148.     SELECT A.tenant_id, A.po_id, A.po_item_id, vEmptyId, vEmptyId, vEmptyId,
  149.         A.qty_po, A.po_uom_id, A.qty_int, A.base_uom_id, A.remark,
  150.         0, vDatetime, vUserId, vDatetime, vUserId
  151.     FROM pu_po_item A
  152.     WHERE A.po_id = vGoodsPurchasingId;
  153.    
  154.     -- pemanggilan function create RG
  155.     PERFORM f_create_rg_for_submit_goods_purchasing(pTenantId, vGoodsPurchasingId, vUserId, vDatetime);
  156.    
  157.     -- process submit RG
  158.     --insert process message
  159.     PERFORM generate_process_message_for_submit_doc(pSessionId, pTenantId, vProcessNameRg, A.receive_goods_id ||'_'||A.doc_no,
  160.                 vDatetime, vParamKeyRg, A.receive_goods_id::character varying, vUserId)
  161.     FROM pu_receive_goods A
  162.     WHERE A.ref_id = vGoodsPurchasingId
  163.     AND A.ref_doc_type_id = vGoodsPurchasingDocTypeId;
  164.    
  165.     -- Mendapatkan default approval flow ID yang dipakai dari sysconfig
  166.     SELECT awe_flow_id INTO vFlowRgId
  167.     FROM awe_flow
  168.     WHERE scheme = vSchemeRg
  169.     AND flg_validate = vYes
  170.     AND active = vYes;
  171.    
  172.      -- Generate data awe_currdoc_status
  173.     INSERT INTO awe_currdoc_status(
  174.         req_id, tenant_id, scheme, doc_id, doc_no, doc_date, current_state,
  175.         remark, current_user_id, current_role_id, flg_user_role, label,
  176.         data, flow_id, create_datetime, create_user_id, create_role_id,
  177.         update_datetime, update_user_id, update_role_id, version)
  178.     SELECT A.receive_goods_id||'_'||A.doc_no, A.tenant_id, vSchemeRg, A.receive_goods_id, A.doc_no, A.doc_date, vWorkFlowStatus,
  179.         A.remark, A.create_user_id, vEmptyId, vFlgRole, 'RECEIVE GOODS'||A.doc_no,
  180.         '{}', vFlowRgId, vDatetime, vUserId, vEmptyId,
  181.         vDatetime, vUserId, vEmptyId, 0
  182.     FROM pu_receive_goods A
  183.     WHERE A.ref_id = vGoodsPurchasingId
  184.     AND A.ref_doc_type_id = vGoodsPurchasingDocTypeId;
  185.    
  186.     INSERT INTO awe_worklist(
  187.             req_id, user_id, role_id, no_item, tenant_id, scheme, doc_id,
  188.             doc_no, doc_date, status, remark, flg_user_role, flg_to_do,
  189.             create_datetime, create_user_id, update_datetime, update_user_id, version)
  190.     SELECT A.receive_goods_id||'_'||A.doc_no, vUserId, vEmptyId, 1, A.tenant_id, vSchemeRg, A.receive_goods_id,
  191.         A.doc_no, A.doc_date, vWorkFlowStatus, A.remark, vFlgRole ,vYes,
  192.         vDatetime, vUserId, vDatetime, vUserId, 0
  193.     FROM pu_receive_goods A
  194.     WHERE A.ref_id = vGoodsPurchasingId
  195.     AND A.ref_doc_type_id = vGoodsPurchasingDocTypeId;
  196.  
  197.     INSERT INTO awe_historydoc(
  198.                 tenant_id, req_id, doc_id, scheme, user_id, role_id,
  199.                 activity, previous_state, next_state, remark, next_user_id, next_role_id,
  200.                 flg_user_role, activity_datetime, version)
  201.     SELECT A.tenant_id, A.receive_goods_id||'_'||A.doc_no, A.receive_goods_id, vSchemeRg, vUserId, vRoleId,
  202.             vActivity, '', vWorkFlowStatus, A.remark, vEmptyId, vEmptyId,
  203.             vFlgRole, vDatetime,0
  204.     FROM pu_receive_goods A
  205.     WHERE A.ref_id = vGoodsPurchasingId
  206.     AND A.ref_doc_type_id = vGoodsPurchasingDocTypeId;
  207.    
  208.     -- pemanggilan function create PI
  209.     PERFORM f_create_pi_for_submit_goods_purchasing(pTenantId, vGoodsPurchasingId, vUserId, vDatetime);
  210.    
  211.     -- UPDATE balance invoice
  212.     UPDATE pu_po_balance_invoice B
  213.     SET invoice_id = A.invoice_id
  214.     FROM pu_invoice A
  215.     WHERE A.ref_id = vGoodsPurchasingId
  216.     AND A.ref_doc_type_id = vGoodsPurchasingDocTypeId
  217.     AND B.po_id = A.ref_id;
  218.    
  219.     -- UPDATE balance invoice tax
  220.     UPDATE pu_po_balance_invoice_tax B
  221.     SET invoice_id = A.invoice_id
  222.     FROM pu_invoice A
  223.     WHERE A.ref_id = vGoodsPurchasingId
  224.     AND A.ref_doc_type_id = vGoodsPurchasingDocTypeId
  225.     AND B.po_id = A.ref_id;
  226.    
  227.    
  228.     -- process submit PI
  229.     --insert process message
  230.     PERFORM generate_process_message_for_submit_doc(pSessionId, pTenantId, vProcessNamePi, A.invoice_id ||'_'||A.doc_no,
  231.                 vDatetime, vParamKeyPi, A.invoice_id::character varying, vUserId)
  232.     FROM pu_invoice A
  233.     WHERE A.ref_id = vGoodsPurchasingId
  234.     AND A.ref_doc_type_id = vGoodsPurchasingDocTypeId;
  235.    
  236.     -- Mendapatkan default approval flow ID yang dipakai dari sysconfig
  237.     SELECT awe_flow_id INTO vFlowPiId
  238.     FROM awe_flow
  239.     WHERE scheme = vSchemePi
  240.     AND flg_validate = vYes
  241.     AND active = vYes;
  242.    
  243.      -- Generate data awe_currdoc_status
  244.     INSERT INTO awe_currdoc_status(
  245.         req_id, tenant_id, scheme, doc_id, doc_no, doc_date, current_state,
  246.         remark, current_user_id, current_role_id, flg_user_role, label,
  247.         data, flow_id, create_datetime, create_user_id, create_role_id,
  248.         update_datetime, update_user_id, update_role_id, version)
  249.     SELECT A.invoice_id||'_'||A.doc_no, A.tenant_id, vSchemePi, A.invoice_id, A.doc_no, A.doc_date, vWorkFlowStatus,
  250.         A.remark, A.create_user_id, vEmptyId, vFlgRole, 'PURCHASE INVOICE'||A.doc_no,
  251.         '{}', vFlowPiId, vDatetime, vUserId, vEmptyId,
  252.         vDatetime, vUserId, vEmptyId, 0
  253.     FROM pu_invoice A
  254.     WHERE A.ref_id = vGoodsPurchasingId
  255.     AND A.ref_doc_type_id = vGoodsPurchasingDocTypeId;
  256.    
  257.     INSERT INTO awe_worklist(
  258.             req_id, user_id, role_id, no_item, tenant_id, scheme, doc_id,
  259.             doc_no, doc_date, status, remark, flg_user_role, flg_to_do,
  260.             create_datetime, create_user_id, update_datetime, update_user_id, version)
  261.     SELECT A.invoice_id||'_'||A.doc_no, vUserId, vEmptyId, 1, A.tenant_id, vSchemePi, A.invoice_id,
  262.         A.doc_no, A.doc_date, vWorkFlowStatus, A.remark, vFlgRole ,vYes,
  263.         vDatetime, vUserId, vDatetime, vUserId, 0
  264.     FROM pu_invoice A
  265.     WHERE A.ref_id = vGoodsPurchasingId
  266.     AND A.ref_doc_type_id = vGoodsPurchasingDocTypeId;
  267.  
  268.     INSERT INTO awe_historydoc(
  269.                 tenant_id, req_id, doc_id, scheme, user_id, role_id,
  270.                 activity, previous_state, next_state, remark, next_user_id, next_role_id,
  271.                 flg_user_role, activity_datetime, version)
  272.     SELECT A.tenant_id, A.invoice_id||'_'||A.doc_no, A.invoice_id, vSchemePi, vUserId, vRoleId,
  273.             vActivity, '', vWorkFlowStatus, A.remark, vEmptyId, vEmptyId,
  274.             vFlgRole, vDatetime,0
  275.     FROM pu_invoice A
  276.     WHERE A.ref_id = vGoodsPurchasingId
  277.     AND A.ref_doc_type_id = vGoodsPurchasingDocTypeId;
  278.        
  279. END;
  280. $BODY$
  281.   LANGUAGE plpgsql VOLATILE
  282.   COST 100;
  283.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement