Advertisement
Evra70

RSI

Dec 28th, 2021
1,458
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION dw_insert_return_sales_invoice(character varying, character varying, bigint, bigint, character varying, bigint)
  2.   RETURNS void AS
  3. $BODY$
  4. DECLARE
  5.  
  6.     pSessionId              ALIAS FOR $1;
  7.     pDataId                 ALIAS FOR $2;
  8.     pTenantId               ALIAS FOR $3;
  9.     pOuId                   ALIAS FOR $4;
  10.     pDatetime               ALIAS FOR $5;
  11.     pUserId                 ALIAS FOR $6;
  12.    
  13.     vDocTypeReturnInvoice   bigint := 380;
  14.    
  15.     vLastId                 bigint := -99;
  16.     vRoundingModeNonTax     character varying(5);
  17.     vDigitDppRoundingTax    integer;
  18.    
  19. BEGIN
  20.    
  21.     SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingModeNonTax;
  22.     SELECT f_get_value_system_config_by_param_code(pTenantId, 'dpp.rounding.decimal.tax')::integer INTO vDigitDppRoundingTax;
  23.    
  24.     --cek last_id for Return Invoice
  25.     IF EXISTS(SELECT 1 FROM dw_last_data_log WHERE tenant_id = pTenantId AND ou_id = pOuId AND doc_type_id = vDocTypeReturnInvoice) THEN
  26.         SELECT data_log_id INTO vLastId
  27.         FROM dw_last_data_log
  28.         WHERE tenant_id = pTenantId AND
  29.             ou_id = pOuId AND
  30.             doc_type_id = vDocTypeReturnInvoice;
  31.     END IF;
  32.    
  33.     DELETE FROM tt_process_dw_sales_header WHERE session_id = pSessionId;
  34.    
  35.     --persiapan dokumen yang akan di proses item" nya
  36.     INSERT INTO tt_process_dw_sales_header (
  37.         session_id,doc_type_id, doc_id, data_log_id, doc_no, doc_date,
  38.         year_month, customer_id, salesman_id, province, city)
  39.     SELECT pSessionId,A.doc_type_id, B.invoice_id, A.invoice_ar_balance_id, B.doc_no, B.doc_date,
  40.             LEFT(B.doc_date, 6) AS year_month, B.partner_id, B.salesman_id,
  41.             f_get_province_by_partner(B.partner_id) AS province, f_get_city_by_partner(B.partner_id) AS city
  42.     FROM fi_invoice_ar_balance A
  43.     INNER JOIN sl_invoice B ON A.invoice_ar_id = B.invoice_id AND A.doc_type_id = B.doc_type_id
  44.     WHERE A.tenant_id = pTenantId
  45.     AND A.ou_id = pOuId
  46.     AND A.invoice_ar_balance_id > vLastId  
  47.     AND A.doc_type_id = vDocTypeReturnInvoice;
  48.    
  49.     --get data Return Invoice NON-FOC
  50.     INSERT INTO tt_process_dw_sales (
  51.         session_id, data_id, doc_type_id, doc_id, data_log_id, doc_no, doc_date,
  52.         year_month, customer_id, salesman_id, warehouse_id,
  53.         product_id, ctgr_product_id,
  54.         sub_ctgr_product_id,
  55.         brand_id,
  56.         province, city,
  57.         qty, price, item_amount,
  58.         discount_amount, tax_amount)
  59.     SELECT pSessionId, pDataId, A.doc_type_id,A.doc_id, A.data_log_id, A.doc_no, A.doc_date,
  60.         A.year_month, A.partner_id, A.salesman_id, F.warehouse_to_id,
  61.         G.product_id, f_get_ctgr_product_by_product_id(G.product_id) AS ctgr_product_id,
  62.         f_get_sub_ctgr_product_by_product_id(G.product_id) AS sub_ctgr_product_id,
  63.         f_get_brand_by_product_id(G.product_id) AS brand_id,
  64.         A.province, A.city,
  65.         -1 * G.qty_realization AS qty, E.nett_sell_price,
  66.         -1 * f_get_dpp_after_discount(G.qty_realization * E.gross_sell_price, E.flg_tax_amount, f_get_tax_amount_after_discount(G.qty_realization * E.gross_sell_price, E.flg_tax_amount, E.tax_percentage, f_get_digit_decimal_doc_curr(vDocTypeReturnInvoice, E.curr_code))) AS item_amount,
  67.         (G.qty_realization * 0 * -1) AS discount_amount,
  68.         -1 * f_get_tax_amount_after_discount(G.qty_realization * E.gross_sell_price, E.flg_tax_amount, E.tax_percentage, f_get_digit_decimal_doc_curr(vDocTypeReturnInvoice, E.curr_code)) AS tax_amount
  69.     FROM tt_process_dw_sales_header A
  70.         INNER JOIN sl_invoice_item C ON A.doc_id = C.invoice_id
  71.         INNER JOIN sl_so_balance_invoice D ON B.tenant_id = D.tenant_id
  72.             AND D.ou_id = B.ou_id
  73.             AND D.so_id = B.ref_id
  74.             AND D.ref_item_id = C.ref_item_id
  75.             AND D.ref_doc_type_id = C.ref_doc_type_id
  76.             AND D.ref_id = C.ref_id
  77.             AND D.do_receipt_item_id = C.do_receipt_item_id
  78.         INNER JOIN sl_request_return_sales_brand_item E ON C.ref_item_id = E.request_return_sales_brand_item_id
  79.         INNER JOIN in_inventory F ON C.ref_id = F.inventory_id AND C.ref_doc_type_id = F.doc_type_id
  80.         INNER JOIN in_inventory_item G ON F.inventory_id = G.inventory_id AND E.brand_id = f_get_brand_by_product_id(G.product_id)
  81.     WHERE A.session_id = pSessionId
  82.         AND E.nett_sell_price <> 0;
  83.        
  84.     --get data Return Invoice FOC
  85.     INSERT INTO tt_process_dw_sales (
  86.         session_id, data_id, doc_type_id, doc_id, data_log_id, doc_no, doc_date,
  87.         year_month, customer_id, salesman_id, warehouse_id,
  88.         product_id, ctgr_product_id,
  89.         sub_ctgr_product_id,
  90.         brand_id,
  91.         province, city,
  92.         qty_foc, price, item_amount,
  93.         discount_amount, tax_amount)
  94.     SELECT pSessionId, pDataId, A.doc_type_id,A.doc_id, A.data_log_id, A.doc_no, A.doc_date,
  95.         A.year_month, A.partner_id, A.salesman_id, F.warehouse_to_id,
  96.         G.product_id, f_get_ctgr_product_by_product_id(G.product_id) AS ctgr_product_id,
  97.         f_get_sub_ctgr_product_by_product_id(G.product_id) AS sub_ctgr_product_id,
  98.         f_get_brand_by_product_id(G.product_id) AS brand_id,
  99.         A.province, A.city,
  100.         -1 * G.qty_realization AS qty, E.nett_sell_price,
  101.         -1 * f_get_dpp_after_discount(G.qty_realization * E.gross_sell_price, E.flg_tax_amount, f_get_tax_amount_after_discount(G.qty_realization * E.gross_sell_price, E.flg_tax_amount, E.tax_percentage, f_get_digit_decimal_doc_curr(vDocTypeReturnInvoice, E.curr_code))) AS item_amount,
  102.         (G.qty_realization * 0 * -1) AS discount_amount,
  103.         -1 * f_get_tax_amount_after_discount(G.qty_realization * E.gross_sell_price, E.flg_tax_amount, E.tax_percentage, f_get_digit_decimal_doc_curr(vDocTypeReturnInvoice, E.curr_code)) AS tax_amount
  104.     FROM tt_process_dw_sales_header A
  105.         INNER JOIN sl_invoice_item C ON A.doc_id = C.invoice_id
  106.         INNER JOIN sl_so_balance_invoice D ON B.tenant_id = D.tenant_id
  107.             AND D.ou_id = B.ou_id
  108.             AND D.so_id = B.ref_id
  109.             AND D.ref_item_id = C.ref_item_id
  110.             AND D.ref_doc_type_id = C.ref_doc_type_id
  111.             AND D.ref_id = C.ref_id
  112.             AND D.do_receipt_item_id = C.do_receipt_item_id
  113.         INNER JOIN sl_request_return_sales_brand_item E ON C.ref_item_id = E.request_return_sales_brand_item_id
  114.         INNER JOIN in_inventory F ON C.ref_id = F.inventory_id AND C.ref_doc_type_id = F.doc_type_id
  115.         INNER JOIN in_inventory_item G ON F.inventory_id = G.inventory_id AND E.brand_id = f_get_brand_by_product_id(G.product_id)
  116.     WHERE WHERE A.session_id = pSessionId
  117.         AND E.nett_sell_price = 0;
  118.        
  119.     IF EXISTS(SELECT 1 FROM tt_process_dw_sales WHERE session_id = pSessionId AND data_id = pDataId AND doc_type_id = vDocTypeReturnInvoice) THEN
  120.         SELECT MAX(data_log_id) INTO vLastId
  121.         FROM tt_process_dw_sales
  122.         WHERE session_id = pSessionId AND
  123.             data_id = pDataId AND
  124.             doc_type_id = vDocTypeReturnInvoice;
  125.     END IF;
  126.        
  127.     IF EXISTS(SELECT 1 FROM dw_last_data_log WHERE tenant_id = pTenantId AND ou_id = pOuId AND doc_type_id = vDocTypeReturnInvoice) THEN
  128.         UPDATE dw_last_data_log
  129.         SET data_log_id = vLastId,
  130.             update_datetime = pDatetime,
  131.             update_user_id = pUserId,
  132.             version = version + 1
  133.         WHERE tenant_id = pTenantId AND
  134.             ou_id = pOuId AND
  135.             doc_type_id = vDocTypeReturnInvoice;
  136.     ELSE
  137.         INSERT INTO dw_last_data_log (
  138.             tenant_id, ou_id, doc_type_id, doc_desc, data_log_id,
  139.             create_datetime, create_user_id, update_datetime, update_user_id, version)
  140.         SELECT pTenantId, pOuId, vDocTypeReturnInvoice, doc_desc, vLastId,
  141.             pDatetime, pUserId, pDatetime, pUserId, 0 AS version
  142.         FROM m_document
  143.         WHERE doc_type_id = vDocTypeReturnInvoice; 
  144.     END IF;
  145.    
  146.     DELETE FROM tt_process_dw_sales_header WHERE session_id = pSessionId;
  147.    
  148. END;   
  149. $BODY$
  150.   LANGUAGE plpgsql VOLATILE
  151.   COST 100;
  152.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement