samuel025

Function Create Purchase Invoice

Dec 27th, 2021
1,720
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION f_create_pi_for_submit_goods_purchasing(bigint, bigint, bigint, character varying)
  2.   RETURNS void AS  
  3. $BODY$
  4. DECLARE
  5.     pTenantId                   ALIAS FOR $1;
  6.     pGoodsPurchasingDocTypeId   ALIAS FOR $2;
  7.     pUserId                     ALIAS FOR $3;
  8.     pDatetime                   ALIAS FOR $4;
  9.  
  10.     vPurchaseInvoiceDocTypeId   bigint := 131;
  11.     vGpDocTypeId                bigint := 160;
  12.     vEmptyString                character varying:='';
  13.     vEmptyId                    bigint:=-99;
  14.     vStatusDocDraft             character varying(1):='D';
  15.     vWorkflowStatusDraft        character varying:='DRAFT';
  16.     vWorkflowStatusApproved     character varying:='APPROVED';
  17.     vPiId                       bigint;
  18.    
  19. BEGIN
  20.    
  21.     SELECT NEXTVAL('pu_invoice_seq ') INTO vPiId;
  22.    
  23.     INSERT INTO pu_invoice(
  24.                 invoice_id, tenant_id, doc_type_id, doc_no, doc_date, ou_id,
  25.                 ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id, remark, partner_id,
  26.                 ou_legal_id, due_date, purchaser_id, curr_code, gross_amount,
  27.                 advance_amount, tax_amount, add_amount, total_amount, status_doc,
  28.                 workflow_status,
  29.                 version, create_datetime, create_user_id, update_datetime, update_user_id)
  30.     SELECT vPiId, pTenantId, vPurchaseInvoiceDocTypeId, A.doc_no, A.doc_date, A.ou_id,
  31.             A.ext_doc_no, A.ext_doc_date, A.doc_type_id, A.po_id, A.remark, A.partner_id,
  32.             vEmptyId, A.doc_date, A.purchaser_id, A.curr_code, 0,
  33.             0, 0, 0, 0, vStatusDocDraft,
  34.             vWorkflowStatusApproved,
  35.             0, pDatetime, pUserId, pDatetime, pUserId
  36.     FROM pu_po A
  37.     WHERE A.po_id = pGoodsPurchasingDocTypeId;
  38.  
  39.     INSERT INTO pu_invoice_item(
  40.             tenant_id, invoice_id, line_no, ref_doc_type_id,
  41.             ref_id, ref_item_id, ref_item_amount, remark,
  42.             version, create_datetime, create_user_id, update_datetime, update_user_id)
  43.     SELECT pTenantId, vPiId, A.line_no, B.doc_type_id,
  44.             B.receive_goods_id, A.receive_goods_item_id, C.item_amount, A.remark,
  45.             0, pDatetime, pUserId, pDatetime, pUserId
  46.     FROM pu_receive_goods_item A
  47.     JOIN pu_receive_goods B ON A.receive_goods_id = B.receive_goods_id
  48.     JOIN pu_po_balance_invoice C ON B.ref_id = C.po_id
  49.                     AND B.doc_type_id = C.ref_doc_type_id
  50.                     AND B.receive_goods_id = C.ref_id
  51.                     AND A.receive_goods_item_id = C.ref_item_id
  52.     WHERE B.ref_id = pGoodsPurchasingDocTypeId
  53.     AND B.ref_doc_type_id = vGpDocTypeId;
  54.  
  55.     INSERT INTO pu_invoice_tax(
  56.                 tenant_id, invoice_id, tax_id, flg_amount, tax_percentage,
  57.                 base_amount, tax_amount, tax_no, tax_date, tax_curr_code, gov_tax_amount,
  58.                 remark,
  59.                 version, create_datetime, create_user_id, update_datetime, update_user_id)
  60.     SELECT pTenantId, vPiId, A.tax_id, A.flg_amount, A.tax_percentage,
  61.             A.base_amount, A.tax_amount, B.tax_no, B.tax_date, B.tax_curr_code, B.gov_tax_amount,
  62.             A.remark,
  63.             0, pDatetime, pUserId, pDatetime, pUserId
  64.     FROM pu_po_tax A
  65.     JOIN pu_po_tax_custom B ON A.po_id = B.po_id
  66.     WHERE A.po_id = pGoodsPurchasingDocTypeId;
  67.    
  68.     WITH calc_nilai_item AS(
  69.         SELECT A.invoice_id, SUM(A.ref_item_amount) AS item_amount
  70.         FROM pu_invoice_item A
  71.         WHERE A.invoice_id = vPiId
  72.         GROUP BY A.invoice_id
  73.     )
  74.     UPDATE pu_invoice A
  75.     SET gross_amount = B.item_amount + COALESCE(C.tax_amount, 0),
  76.         tax_amount = COALESCE(C.tax_amount, 0),
  77.         total_amount = B.item_amount
  78.     FROM calc_nilai_item B
  79.     LEFT JOIN pu_invoice_tax C ON B.invoice_id = C.invoice_id
  80.     WHERE A.invoice_id = B.invoice_id
  81.     AND A.invoice_id = vPiId;
  82.    
  83. END;
  84. $BODY$
  85.   LANGUAGE plpgsql VOLATILE
  86.   COST 100;
  87.   /
Advertisement
Add Comment
Please, Sign In to add comment