Advertisement
Guest User

Untitled

a guest
Mar 31st, 2020
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.88 KB | None | 0 0
  1. -- modified by PS, 09 March 2015 delete approval_name
  2. -- modified by PS, 13 July 2015 add ou_name in refHeader
  3. CREATE OR REPLACE FUNCTION r_print_sales_invoice_temporary(character varying, bigint, bigint, bigint, character varying, bigint)
  4. RETURNS SETOF refcursor AS
  5. $BODY$
  6. DECLARE
  7. pRefHeader REFCURSOR := 'refHeader';
  8. pRefDetail REFCURSOR := 'refDetail';
  9. pSessionId ALIAS FOR $1;
  10. pTenantId ALIAS FOR $2;
  11. pUserId ALIAS FOR $3;
  12. pRoleId ALIAS FOR $4;
  13. pDatetime ALIAS FOR $5;
  14. pInvoiceTempId ALIAS FOR $6;
  15.  
  16. vFormTemporarySalesInvoice character varying := 'FormTemporarySalesInvoice';
  17. vTermsAndConditions character varying := 'terms_and_conditions';
  18. vBankAcc1 character varying := 'bank_acc_1';
  19. vBankAcc2 character varying := 'bank_acc_2';
  20. vDoDocTypeId bigint;
  21. vReportName character varying;
  22. vDoNo character varying;
  23. vAdditionalCost numeric;
  24. vDownPaymentAmount numeric;
  25. vDownPaymentAmountWithTax numeric;
  26. vTaxDownPaymentAmount numeric;
  27. vFlgShowPpn character varying := 'Y';
  28. vOuBuInfoReport OU_INFO_REPORT%ROWTYPE;
  29. result record;
  30. vAll character varying(5);
  31. vSubTotal numeric;
  32. vCurrCode character varying(50);
  33.  
  34. vRoundingModeTax character varying(5);
  35. vRoundingModeNonTax character varying(5);
  36. vRoundingScalePrintTotal integer;
  37. vGroupDataAsli character varying := 'ASLI';
  38. vGroupDataCopy character varying := 'COPY';
  39. vReceipt numeric;
  40.  
  41. BEGIN
  42. vDoDocTypeId := 311;
  43. vReportName := 'FormTemporarySalesInvoice';
  44. vAll := 'ALL';
  45. vReceipt := -99;
  46.  
  47. SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.tax') INTO vRoundingModeTax;
  48. SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingModeNonTax;
  49. SELECT CAST(f_get_value_system_config_by_param_code(pTenantId, 'rounding.scale.print.total') AS integer) INTO vRoundingScalePrintTotal;
  50.  
  51. SELECT f_get_ou_bu_info_report(pTenantId, A.ou_id) AS info
  52. FROM sl_invoice_temp A
  53. WHERE A.invoice_temp_id = pInvoiceTempId INTO result ;
  54. vOuBuInfoReport := result.info;
  55.  
  56. DELETE FROM tr_sl_invoice_item WHERE session_id = pSessionId;
  57.  
  58.  
  59. /* insert into table tr_sl_invoice_item*/
  60. INSERT INTO tr_sl_invoice_item(
  61. session_id, tenant_id, product_code, product_name, qty_so, uom_name,
  62. nett_sell_price, gross_sell_price, nett_item_amount, gross_item_amount,
  63. tax_price, tax_amount, warranty, line_no)
  64. SELECT pSessionId, pTenantId, f_get_product_code(D.product_id) AS product_code, f_get_product_name(D.product_id) AS product_name, G.qty_dlv_so,
  65. f_get_uom_name(G.so_uom_id) AS uom_name, G.price_so AS nett_sell_price,
  66. E.gross_sell_price AS gross_sell_price,
  67. (G.item_amount + COALESCE(I.tax_amount,0)) - (G.regular_disc_amount + G.promo_disc_amount + G.adj_regular_disc_amount + G.adj_promo_disc_amount) AS nett_item_amount,
  68. (G.item_amount + COALESCE(I.tax_amount,0)) AS gross_item_amount,
  69. E.tax_price AS tax_price,
  70. COALESCE(I.tax_amount,0) AS tax_amount,
  71. (f_get_product_warranty_service(D.product_id) :: integer) AS warranty, ROW_NUMBER() OVER (PARTITION BY B.invoice_temp_id ORDER BY B.invoice_temp_id, A.line_no) AS line_no
  72. FROM sl_invoice_temp_item A
  73. INNER JOIN sl_invoice_temp B ON A.invoice_temp_id = B.invoice_temp_id
  74. INNER JOIN sl_do C ON A.ref_id = C.do_id AND C.doc_type_id = A.ref_doc_type_id
  75. INNER JOIN sl_do_item D ON A.ref_item_id = D.do_item_id AND C.do_id = D.do_id
  76. INNER JOIN sl_so_item E ON E.so_item_id = D.ref_id AND E.so_id = C.ref_id
  77. INNER JOIN sl_so_balance_invoice G ON A.tenant_id = G.tenant_id AND G.ou_id = B.ou_id AND G.ref_doc_type_id = vDoDocTypeId AND G.ref_id = D.do_id AND G.so_id = C.ref_id AND G.ref_item_id = A.ref_item_id
  78. LEFT JOIN sl_so_balance_invoice_tax I ON A.tenant_id = I.tenant_id AND I.ou_id = B.ou_id AND I.ref_doc_type_id = vDoDocTypeId AND I.ref_id = D.do_id AND I.so_id = C.ref_id AND I.ref_item_id = A.ref_item_id AND I.do_receipt_item_id = A.do_receipt_item_id
  79. WHERE A.tenant_id = pTenantId
  80. AND A.invoice_temp_id = pInvoiceTempId
  81. AND A.do_receipt_item_id = vReceipt;
  82.  
  83.  
  84. SELECT SUM(nett_item_amount) FROM tr_sl_invoice_item WHERE session_id = pSessionId INTO vSubTotal;
  85.  
  86. SELECT curr_code FROM sl_invoice_temp WHERE invoice_temp_id = pInvoiceTempId INTO vCurrCode;
  87.  
  88.  
  89. Open pRefHeader FOR
  90. SELECT f_get_report_parameter_config_value(pTenantId,vFormTemporarySalesInvoice,A.ou_id,vTermsAndConditions) AS terms_and_conditions,
  91. f_get_report_parameter_config_value(pTenantId,vFormTemporarySalesInvoice,A.ou_id,vBankAcc1) AS bank_acc_1,
  92. f_get_report_parameter_config_value(pTenantId,vFormTemporarySalesInvoice,A.ou_id,vBankAcc2) AS bank_acc_2,
  93. f_get_partner_code(A.partner_id) AS customer_code, f_get_partner_name(A.partner_id) AS customer_name, B.address1, B.address2, B.address3,
  94. A.doc_no, A.doc_date, D.doc_no AS do_no, D.doc_date AS do_date, C.doc_no AS so_no, C.doc_date AS so_date,
  95. f_get_username(pUserId) AS username, pDatetime AS datetime, vSubTotal AS sub_total, vCurrCode AS curr_code
  96. FROM sl_invoice_temp A INNER JOIN m_partner_address B ON A.partner_id = B.partner_id
  97. INNER JOIN sl_so C ON A.ref_id = C.so_id
  98. INNER JOIN sl_do D ON D.ref_id = C.so_id AND D.doc_type_id = vDoDocTypeId
  99. WHERE A.tenant_id = pTenantId
  100. AND A.invoice_temp_id = pInvoiceTempId;
  101. RETURN NEXT pRefHeader;
  102.  
  103. Open pRefDetail FOR
  104. SELECT vGroupDataAsli AS origin, A.line_no AS row_number, A.product_code, A.product_name, SUM(A.qty_so) AS qty, A.uom_name,
  105. A.nett_sell_price AS unit_price, (A.nett_sell_price * A.qty_so) AS amount, SUM(A.nett_sell_price * A.qty_so) AS sub_total, A.warranty
  106. FROM tr_sl_invoice_item A
  107. INNER JOIN sl_invoice_temp_item B ON A.tenant_id = B.tenant_id AND B.invoice_temp_id = pInvoiceTempId AND B.ref_doc_type_id = vDoDocTypeId
  108. WHERE A.session_id = pSessionId
  109. AND A.tenant_id = pTenantId
  110. AND B.do_receipt_item_id = vReceipt
  111. GROUP BY line_no, product_code, product_name, uom_name, nett_sell_price, warranty,qty_so
  112.  
  113. UNION ALL
  114.  
  115. SELECT vGroupDataCopy AS origin, A.line_no AS row_number, A.product_code, A.product_name, SUM(A.qty_so) AS qty, A.uom_name,
  116. A.nett_sell_price AS unit_price, (A.nett_sell_price * A.qty_so) AS amount, SUM(A.nett_sell_price * A.qty_so) AS sub_total, A.warranty
  117. FROM tr_sl_invoice_item A
  118. INNER JOIN sl_invoice_temp_item B ON A.tenant_id = B.tenant_id AND B.invoice_temp_id = pInvoiceTempId AND B.ref_doc_type_id = vDoDocTypeId
  119. WHERE A.session_id = pSessionId
  120. AND A.tenant_id = pTenantId
  121. AND B.do_receipt_item_id = vReceipt
  122. GROUP BY line_no, product_code, product_name, uom_name, nett_sell_price, warranty,qty_so
  123. ORDER BY origin, row_number, product_code, product_name;
  124. RETURN NEXT pRefDetail;
  125.  
  126.  
  127. DELETE FROM tr_sl_invoice_item WHERE session_id = pSessionId;
  128.  
  129. END;
  130. $BODY$
  131. LANGUAGE plpgsql VOLATILE
  132. COST 100
  133. ROWS 1000;
  134. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement