Advertisement
Guest User

versi excel

a guest
Jul 5th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * nilai yang di pakai adalah sell price nya
  3.  */
  4.  
  5. CREATE OR REPLACE FUNCTION r_sales_detail(character varying, bigint, bigint, bigint, bigint, character varying, character varying, character varying, character varying, character varying)
  6.   RETURNS SETOF refcursor AS
  7. $BODY$
  8. DECLARE
  9.     pRefHeader                          REFCURSOR := 'refHeader';
  10.     pRefDetail                          REFCURSOR := 'refDetail';
  11.     pSessionId                          ALIAS FOR $1;
  12.     pTenantId                           ALIAS FOR $2;
  13.     pOuId                               ALIAS FOR $3;
  14.     pUserId                             ALIAS FOR $4;
  15.     pRoleId                             ALIAS FOR $5;
  16.     pDatetime                           ALIAS FOR $6;
  17.    
  18.     pCustomerCodeFrom                   ALIAS FOR $7;
  19.     pCustomerCodeTo                     ALIAS FOR $8;
  20.     pDateFrom                           ALIAS FOR $9;
  21.     pDateTo                             ALIAS FOR $10;
  22.    
  23.     vCustomerFrom                       character varying(1024) := '';
  24.     vCustomerTo                         character varying(1024) := '';
  25.     vRawData                            character varying(10) := 'RAW-DATA';
  26.     vSumData                            character varying(10) := 'SUM-DATA';
  27.     vDocTypeSalesInvoice                bigint := 321;
  28.     vDocTypeSalesInvoiceTemp            bigint := 361;
  29.     vDocTypeReturnSalesInvoiceByBrand   bigint := 380;
  30.     vDocTypeSoByBrand                   bigint := 398;
  31.     vDocTypeDo                          bigint := 311;
  32.     vDocTypeDoReceipt                   bigint := 526;
  33.     --vDocTypeConvExcOut                    bigint := 395;
  34.     vDocTypeRRS                         bigint := 381;--Request Return Sales
  35.     vDocTypeReturnNote                  bigint := 502;
  36.    
  37.     vEmpty                              character varying := '';
  38.     vReportName                         character varying := 'FormDeliveryOrderFromInvoiceEscp';
  39.     vSudahCetak                         character varying := 'Already Printed';
  40.     vBelumCetak                         character varying := 'Not Yet';
  41.     vYes                                character varying := 'Y';
  42.     vNo                                 character varying := 'N';
  43.     vStatusDocVoid                      character varying := 'V';
  44.     vEmptyPrice                 numeric := 0;
  45.     vStatusDocReleased                  character varying := 'R';
  46. BEGIN
  47.  
  48.     -- DELETE TEMP DATA --
  49.     DELETE FROM tt_sl_invoice WHERE session_id = pSessionId;
  50.     DELETE FROM tt_report_sales_journal WHERE session_id = pSessionId;
  51.     DELETE FROM tt_sl_invoice_item WHERE session_id = pSessionId;
  52.    
  53.     SELECT partner_name INTO vCustomerFrom
  54.     FROM m_partner
  55.     WHERE tenant_id = pTenantId AND partner_code = pCustomerCodeFrom;
  56.    
  57.     SELECT partner_name INTO vCustomerTo
  58.     FROM m_partner
  59.     WHERE tenant_id = pTenantId AND partner_code = pCustomerCodeTo;
  60.    
  61.     -- HEADER --
  62.     Open pRefHeader FOR
  63.     SELECT pDatetime AS datetime, f_get_ou_name(pOuId) AS ou_name, f_get_username(pUserId) AS username,
  64.         pDateFrom AS date_from, pDateTo AS date_to, pCustomerCodeFrom AS partner_code_from,
  65.         vCustomerFrom AS partner_name_from, pCustomerCodeTo AS partner_code_to,
  66.         vCustomerTo AS partner_name_to, f_get_role_name(pRoleId) AS rolename, pDatetime AS datetime,
  67.         CASE WHEN (pCustomerCodeFrom !='ALL' AND pCustomerCodeTo !='ALL')
  68.             THEN pCustomerCodeFrom||'/'||vCustomerFrom||' - '||pCustomerCodeTo||'/'||vCustomerTo
  69.             ELSE 'ALL'
  70.         END AS partner;
  71.     RETURN NEXT pRefHeader;
  72.  
  73.     -- MASUKAN SL INVOICE BERDASARKAN FILTER YANG DI PILIH KE TABLE TEMP --
  74.     IF (pCustomerCodeFrom!='ALL' AND pCustomerCodeTo!='ALL') THEN
  75.         INSERT INTO tt_sl_invoice(
  76.             session_id, invoice_id, tenant_id, doc_type_id, doc_no, doc_date,
  77.             ou_id, ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id, remark,
  78.             partner_id, salesman_id, status_doc, workflow_status, version,
  79.             ref_inv_temp_id, mou_id, promo_id, product_launching_id,
  80.             city, province)
  81.         SELECT pSessionId, A.invoice_id, A.tenant_id, A.doc_type_id, A.doc_no, A.doc_date,
  82.             A.ou_id, A.ext_doc_no, A.ext_doc_date, A.ref_doc_type_id, A.ref_id, A.remark,
  83.             A.partner_id, A.salesman_id, A.status_doc, A.workflow_status, A.version,
  84.             A.ref_inv_temp_id, C.mou_id, C.promo_id, C.product_launching_id,
  85.             f_get_city_by_partner(B.partner_id) AS city, f_get_province_by_partner(B.partner_id) AS province
  86.         FROM fi_invoice_ar_balance D
  87.             INNER JOIN sl_invoice A ON D.invoice_ar_id = A.invoice_id AND D.doc_type_id = A.doc_type_id
  88.             INNER JOIN sl_so B ON A.ref_id = B.so_id AND A.ref_doc_type_id = vDocTypeSoByBrand
  89.             INNER JOIN sl_so_info C ON B.so_id = C.so_id
  90.         WHERE D.tenant_id = pTenantId
  91.             AND D.ou_id = pOuId
  92.             AND D.doc_type_id IN (vDocTypeSalesInvoice)
  93.             AND A.doc_date BETWEEN pDateFrom AND pDateTo
  94.             AND f_get_partner_code(A.partner_id) BETWEEN pCustomerCodeFrom AND pCustomerCodeTo;
  95.     ELSIF(pCustomerCodeFrom='ALL' AND pCustomerCodeTo='ALL') THEN
  96.         INSERT INTO tt_sl_invoice(
  97.             session_id, invoice_id, tenant_id, doc_type_id, doc_no, doc_date,
  98.             ou_id, ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id, remark,
  99.             partner_id, salesman_id, status_doc, workflow_status, version,
  100.             ref_inv_temp_id, mou_id, promo_id, product_launching_id,
  101.             city, province)
  102.         SELECT pSessionId, A.invoice_id, A.tenant_id, A.doc_type_id, A.doc_no, A.doc_date,
  103.             A.ou_id, A.ext_doc_no, A.ext_doc_date, A.ref_doc_type_id, A.ref_id, A.remark,
  104.             A.partner_id, A.salesman_id, A.status_doc, A.workflow_status, A.version,
  105.             A.ref_inv_temp_id, C.mou_id, C.promo_id, C.product_launching_id,
  106.             f_get_city_by_partner(B.partner_id) AS city, f_get_province_by_partner(B.partner_id) AS province
  107.         FROM fi_invoice_ar_balance D
  108.             INNER JOIN sl_invoice A ON D.invoice_ar_id = A.invoice_id AND D.doc_type_id = A.doc_type_id
  109.             INNER JOIN sl_so B ON A.ref_id = B.so_id AND A.ref_doc_type_id = vDocTypeSoByBrand
  110.             INNER JOIN sl_so_info C ON B.so_id = C.so_id
  111.         WHERE D.tenant_id = pTenantId
  112.             AND D.ou_id = pOuId
  113.             AND D.doc_type_id IN (vDocTypeSalesInvoice)
  114.             AND A.doc_date BETWEEN pDateFrom AND pDateTo;
  115.     END IF;
  116.  
  117.     -- MASUKAN SL INVOICE TEMP YANG DI PILIH BERDASARKAN FILTER KE TABLE TEMP --
  118.     -- Mod by WTC, 20161006, ambil SL Invoice Temp yang statusnya tidak void, dan perbaiki join tuk mengecek apakah sudah diubah menjadi sales invoice
  119.     IF (pCustomerCodeFrom!='ALL' AND pCustomerCodeTo!='ALL') THEN
  120.         INSERT INTO tt_sl_invoice(
  121.             session_id, invoice_id, tenant_id, doc_type_id, doc_no, doc_date,
  122.             ou_id, ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id, remark,
  123.             partner_id, salesman_id, status_doc, workflow_status, version,
  124.             ref_inv_temp_id, mou_id, promo_id, product_launching_id,
  125.             city, province)
  126.         SELECT pSessionId, A.invoice_temp_id, A.tenant_id, A.doc_type_id, A.doc_no, A.doc_date,
  127.             A.ou_id, A.ext_doc_no, A.ext_doc_date, A.ref_doc_type_id, A.ref_id, A.remark,
  128.             A.partner_id, A.salesman_id, A.status_doc, A.workflow_status, A.version,
  129.             -99, C.mou_id, C.promo_id, C.product_launching_id,
  130.             f_get_city_by_partner(B.partner_id) AS city, f_get_province_by_partner(B.partner_id) AS province
  131.         FROM fi_invoice_ar_balance D
  132.             INNER JOIN sl_invoice_temp A ON D.invoice_ar_id = A.invoice_temp_id AND D.doc_type_id = A.doc_type_id
  133.             INNER JOIN sl_so B ON A.ref_id = B.so_id AND A.ref_doc_type_id = vDocTypeSoByBrand
  134.             INNER JOIN sl_so_info C ON B.so_id = C.so_id
  135.         WHERE D.tenant_id = pTenantId
  136.             AND D.ou_id = pOuId
  137.             AND D.doc_type_id = vDocTypeSalesInvoiceTemp
  138.             AND A.doc_date BETWEEN pDateFrom AND pDateTo
  139.             AND f_get_partner_code(A.partner_id) BETWEEN pCustomerCodeFrom AND pCustomerCodeTo
  140.             AND A.status_doc <> vStatusDocVoid;
  141.                    
  142.     ELSIF(pCustomerCodeFrom='ALL' AND pCustomerCodeTo='ALL') THEN
  143.         INSERT INTO tt_sl_invoice(
  144.             session_id, invoice_id, tenant_id, doc_type_id, doc_no, doc_date,
  145.             ou_id, ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id, remark,
  146.             partner_id, salesman_id, status_doc, workflow_status, version,
  147.             ref_inv_temp_id, mou_id, promo_id, product_launching_id,
  148.             city, province)
  149.         SELECT pSessionId, A.invoice_temp_id, A.tenant_id, A.doc_type_id, A.doc_no, A.doc_date,
  150.             A.ou_id, A.ext_doc_no, A.ext_doc_date, A.ref_doc_type_id, A.ref_id, A.remark,
  151.             A.partner_id, A.salesman_id, A.status_doc, A.workflow_status, A.version,
  152.             -99, C.mou_id, C.promo_id, C.product_launching_id,
  153.             f_get_city_by_partner(B.partner_id) AS city, f_get_province_by_partner(B.partner_id) AS province
  154.         FROM fi_invoice_ar_balance D
  155.             INNER JOIN sl_invoice_temp A ON D.invoice_ar_id = A.invoice_temp_id AND D.doc_type_id = A.doc_type_id
  156.             INNER JOIN sl_so B ON A.ref_id = B.so_id AND A.ref_doc_type_id = vDocTypeSoByBrand
  157.             INNER JOIN sl_so_info C ON B.so_id = C.so_id
  158.         WHERE D.tenant_id = pTenantId
  159.             AND D.ou_id = pOuId
  160.             AND D.doc_type_id = vDocTypeSalesInvoiceTemp
  161.             AND A.doc_date BETWEEN pDateFrom AND pDateTo
  162.             AND A.status_doc <> vStatusDocVoid;
  163.     END IF;
  164.    
  165.     -- MASUKAN RETURN SALES INVOICE BY BRAND (RSIB)
  166.     IF (pCustomerCodeFrom!='ALL' AND pCustomerCodeTo!='ALL') THEN
  167.         INSERT INTO tt_sl_invoice(
  168.             session_id, invoice_id, tenant_id, doc_type_id, doc_no, doc_date,
  169.             ou_id, ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id, remark,
  170.             partner_id, salesman_id, status_doc, workflow_status, version,
  171.             ref_inv_temp_id, mou_id, promo_id, product_launching_id,
  172.             city, province)
  173.         SELECT pSessionId, A.invoice_id, A.tenant_id, A.doc_type_id, A.doc_no, A.doc_date,
  174.             A.ou_id, A.ext_doc_no, A.ext_doc_date, A.ref_doc_type_id, A.ref_id, A.remark,
  175.             A.partner_id, A.salesman_id, A.status_doc, A.workflow_status, A.version,
  176.             -99, COALESCE(C.mou_id, -99), COALESCE(C.promo_id, -99), COALESCE(C.product_launching_id, -99),
  177.             f_get_city_by_partner(D.partner_id) AS city, f_get_province_by_partner(D.partner_id) AS province
  178.         FROM fi_invoice_ar_balance E
  179.             INNER JOIN sl_invoice A ON E.invoice_ar_id = A.invoice_id AND E.doc_type_id = A.doc_type_id
  180.             INNER JOIN sl_request_return_sales D ON A.ref_id = D.request_return_sales_id AND A.ref_doc_type_id = vDocTypeRRS
  181.             LEFT OUTER JOIN sl_so B ON D.ref_id = B.so_id AND D.ref_doc_type_id = vDocTypeSoByBrand
  182.             LEFT OUTER JOIN sl_so_info C ON B.so_id = C.so_id
  183.         WHERE E.tenant_id = pTenantId
  184.             AND E.ou_id = pOuId
  185.             AND E.doc_type_id = vDocTypeReturnSalesInvoiceByBrand
  186.             AND A.doc_date BETWEEN pDateFrom AND pDateTo
  187.             AND f_get_partner_code(A.partner_id) BETWEEN pCustomerCodeFrom AND pCustomerCodeTo;
  188.     ELSIF(pCustomerCodeFrom='ALL' AND pCustomerCodeTo='ALL') THEN
  189.         INSERT INTO tt_sl_invoice(
  190.             session_id, invoice_id, tenant_id, doc_type_id, doc_no, doc_date,
  191.             ou_id, ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id, remark,
  192.             partner_id, salesman_id, status_doc, workflow_status, version,
  193.             ref_inv_temp_id, mou_id, promo_id, product_launching_id,
  194.             city, province)
  195.         SELECT pSessionId, A.invoice_id, A.tenant_id, A.doc_type_id, A.doc_no, A.doc_date,
  196.             A.ou_id, A.ext_doc_no, A.ext_doc_date, A.ref_doc_type_id, A.ref_id, A.remark,
  197.             A.partner_id, A.salesman_id, A.status_doc, A.workflow_status, A.version,
  198.             -99, COALESCE(C.mou_id, -99), COALESCE(C.promo_id, -99), COALESCE(C.product_launching_id, -99),
  199.             f_get_city_by_partner(D.partner_id) AS city, f_get_province_by_partner(D.partner_id) AS province
  200.         FROM fi_invoice_ar_balance E
  201.             INNER JOIN sl_invoice A ON E.invoice_ar_id = A.invoice_id AND E.doc_type_id = A.doc_type_id
  202.             INNER JOIN sl_request_return_sales D ON A.ref_id = D.request_return_sales_id AND A.ref_doc_type_id = vDocTypeRRS
  203.             LEFT OUTER JOIN sl_so B ON D.ref_id = B.so_id AND D.ref_doc_type_id = vDocTypeSoByBrand
  204.             LEFT OUTER JOIN sl_so_info C ON B.so_id = C.so_id
  205.         WHERE E.tenant_id = pTenantId
  206.             AND E.ou_id = pOuId
  207.             AND E.doc_type_id = vDocTypeReturnSalesInvoiceByBrand
  208.             AND A.doc_date BETWEEN pDateFrom AND pDateTo;
  209.     END IF;
  210.  
  211.     -- MASUKAN RETURN NOTE yang belum dibuat RSIB(approved)
  212.     IF (pCustomerCodeFrom!='ALL' AND pCustomerCodeTo!='ALL') THEN
  213.         INSERT INTO tt_sl_invoice(
  214.             session_id, invoice_id, tenant_id, doc_type_id, doc_no, doc_date,
  215.             ou_id, ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id, remark,
  216.             partner_id, salesman_id, status_doc, workflow_status, version,
  217.             ref_inv_temp_id, mou_id, promo_id, product_launching_id,
  218.             city, province)
  219.         SELECT pSessionId, A.inventory_id, A.tenant_id, A.doc_type_id, A.doc_no, A.doc_date,
  220.             A.ou_from_id, A.ext_doc_no, A.ext_doc_date, A.ref_doc_type_id, A.ref_id, A.remark,
  221.             A.partner_id, -99 AS salesman_id, A.status_doc, A.workflow_status, A.version,
  222.             -99, COALESCE(D.mou_id, -99), COALESCE(D.promo_id, -99), COALESCE(D.product_launching_id, -99),
  223.             f_get_city_by_partner(A.partner_id) AS city, f_get_province_by_partner(A.partner_id) AS province
  224.         FROM in_inventory A
  225.             INNER JOIN sl_request_return_sales B ON A.ref_id = B.request_return_sales_id AND A.ref_doc_type_id = vDocTypeRRS
  226.             LEFT OUTER JOIN sl_so C ON B.ref_id = C.so_id AND B.ref_doc_type_id = vDocTypeSoByBrand
  227.             LEFT OUTER JOIN sl_so_info D ON C.so_id = D.so_id
  228.         WHERE A.tenant_id = pTenantId
  229.             AND A.ou_from_id = pOuId
  230.             AND A.doc_type_id = vDocTypeReturnNote
  231.             AND A.doc_date BETWEEN pDateFrom AND pDateTo
  232.             AND f_get_partner_code(A.partner_id) BETWEEN pCustomerCodeFrom AND pCustomerCodeTo
  233.             AND A.status_doc = vStatusDocReleased
  234.             AND NOT EXISTS(SELECT 1 FROM sl_invoice X
  235.                            WHERE X.doc_type_id = vDocTypeReturnSalesInvoiceByBrand
  236.                                 AND B.request_return_sales_id = X.ref_id
  237.                                 AND B.doc_type_id = X.ref_doc_type_id
  238.                                 AND X.status_doc = vStatusDocReleased);
  239.                                
  240.     ELSIF(pCustomerCodeFrom='ALL' AND pCustomerCodeTo='ALL') THEN
  241.         INSERT INTO tt_sl_invoice(
  242.             session_id, invoice_id, tenant_id, doc_type_id, doc_no, doc_date,
  243.             ou_id, ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id, remark,
  244.             partner_id, salesman_id, status_doc, workflow_status, version,
  245.             ref_inv_temp_id, mou_id, promo_id, product_launching_id,
  246.             city, province)
  247.         SELECT pSessionId, A.inventory_id, A.tenant_id, A.doc_type_id, A.doc_no, A.doc_date,
  248.             A.ou_from_id, A.ext_doc_no, A.ext_doc_date, A.ref_doc_type_id, A.ref_id, A.remark,
  249.             A.partner_id, -99 AS salesman_id, A.status_doc, A.workflow_status, A.version,
  250.             -99, COALESCE(D.mou_id, -99), COALESCE(D.promo_id, -99), COALESCE(D.product_launching_id, -99),
  251.             f_get_city_by_partner(A.partner_id) AS city, f_get_province_by_partner(A.partner_id) AS province
  252.         FROM in_inventory A
  253.             INNER JOIN sl_request_return_sales B ON A.ref_id = B.request_return_sales_id AND A.ref_doc_type_id = vDocTypeRRS
  254.             LEFT OUTER JOIN sl_so C ON B.ref_id = C.so_id AND B.ref_doc_type_id = vDocTypeSoByBrand
  255.             LEFT OUTER JOIN sl_so_info D ON C.so_id = D.so_id
  256.         WHERE A.tenant_id = pTenantId
  257.             AND A.ou_from_id = pOuId
  258.             AND A.doc_type_id = vDocTypeReturnNote
  259.             AND A.doc_date BETWEEN pDateFrom AND pDateTo
  260.             AND A.status_doc = vStatusDocReleased
  261.             AND NOT EXISTS(SELECT 1 FROM sl_invoice X
  262.                            WHERE X.doc_type_id = vDocTypeReturnSalesInvoiceByBrand
  263.                                 AND B.request_return_sales_id = X.ref_id
  264.                                 AND B.doc_type_id = X.ref_doc_type_id
  265.                                 AND X.status_doc = vStatusDocReleased);
  266.     END IF;
  267.    
  268.     --Insert item masing-masing invoice yang sudah diinsert (SI,TSI)
  269.     INSERT INTO tt_sl_invoice_item (
  270.         session_id, invoice_id, doc_type_id, product_balance_id, product_id,
  271.         brand_id, sub_ctgr_product_id,
  272.         serial_number, lot_number, product_expired_date,
  273.         qty, uom_id, curr_code, gross_amount,
  274.         tax_amount, discount_amount, nett_amount,
  275.         so_item_id, remark)
  276.     SELECT A.session_id, A.invoice_id, A.doc_type_id, E.product_balance_id, E.product_id,
  277.         f_get_brand_by_product_id(E.product_id), f_get_sub_ctgr_product_by_product_id(E.product_id),
  278.         F.serial_number, F.lot_number, F.product_expired_date,
  279.         E.qty_dlv_int, E.base_uom_id, C.curr_code, C.gross_sell_price,
  280.         C.tax_price, C.discount_amount, C.nett_sell_price,
  281.         C.so_item_id, E.remark
  282.     FROM tt_sl_invoice A
  283.         INNER JOIN sl_so B ON A.ref_id = B.so_id AND A.ref_doc_type_id = vDocTypeSoByBrand
  284.         INNER JOIN sl_so_item C ON B.so_id = C.so_id
  285.         INNER JOIN sl_do_item D ON C.so_item_id = D.ref_id
  286.         INNER JOIN sl_do_product E ON D.do_item_id = E.do_item_id
  287.         INNER JOIN in_product_balance F ON E.product_balance_id = F.product_balance_id
  288.     WHERE A.session_id = pSessionId
  289.         AND A.doc_type_id IN (vDocTypeSalesInvoice, vDocTypeSalesInvoiceTemp);
  290.    
  291.     --insert item dari RSI By Brand
  292.     INSERT INTO tt_sl_invoice_item (
  293.         session_id, invoice_id, doc_type_id, product_balance_id, product_id,
  294.         brand_id, sub_ctgr_product_id,
  295.         serial_number, lot_number, product_expired_date,
  296.         qty, uom_id, curr_code, gross_amount,
  297.         tax_amount, discount_amount, nett_amount,
  298.         so_item_id, remark)
  299.     SELECT A.session_id, A.invoice_id, A.doc_type_id, C.product_balance_id, C.product_id,
  300.         f_get_brand_by_product_id(C.product_id), f_get_sub_ctgr_product_by_product_id(C.product_id),
  301.         COALESCE(D.serial_number, vEmpty), COALESCE(D.lot_number, vEmpty), COALESCE(D.product_expired_date, vEmpty),
  302.         C.qty_realization * -1, C.base_uom_id, E.curr_code, E.gross_sell_price,
  303.         E.tax_price, vEmptyPrice, E.nett_sell_price,
  304.         C.inventory_item_id, C.remark
  305.     FROM tt_sl_invoice A
  306.     INNER JOIN sl_request_return_sales_brand_item E ON A.ref_id = E.request_return_sales_id
  307.     INNER JOIN in_inventory B ON A.ref_id = B.ref_id AND A.ref_doc_type_id = B.ref_doc_type_id AND A.ref_doc_type_id = vDocTypeRRS
  308.     INNER JOIN in_inventory_item C ON B.inventory_id = C.inventory_id AND E.brand_id = f_get_brand_by_product_id(C.product_id)
  309.     LEFT OUTER JOIN in_product_balance D ON C.product_balance_id = D.product_balance_id
  310.     WHERE A.session_id = pSessionId
  311.         AND A.doc_type_id = vDocTypeReturnSalesInvoiceByBrand;
  312.        
  313.     --insert item dari Return Note
  314.     INSERT INTO tt_sl_invoice_item (
  315.         session_id, invoice_id, doc_type_id, product_balance_id, product_id,
  316.         brand_id, sub_ctgr_product_id,
  317.         serial_number, lot_number, product_expired_date,
  318.         qty, uom_id, curr_code, gross_amount,
  319.         tax_amount, discount_amount, nett_amount,
  320.         so_item_id, remark)
  321.     SELECT A.session_id, A.invoice_id, A.doc_type_id, B.product_balance_id, B.product_id,
  322.         f_get_brand_by_product_id(B.product_id), f_get_sub_ctgr_product_by_product_id(B.product_id),
  323.         COALESCE(D.serial_number, vEmpty), COALESCE(D.lot_number, vEmpty), COALESCE(D.product_expired_date, vEmpty),
  324.         B.qty_realization * -1, B.base_uom_id, C.curr_code, C.gross_sell_price,
  325.         C.tax_price, vEmptyPrice, C.nett_sell_price,
  326.         B.inventory_item_id, B.remark
  327.     FROM tt_sl_invoice A
  328.     INNER JOIN in_inventory_item B ON A.invoice_id = B.inventory_id
  329.     INNER JOIN sl_request_return_sales_brand_item C ON A.ref_id = C.request_return_sales_id AND f_get_brand_by_product_id(B.product_id) = C.brand_id
  330.     LEFT OUTER JOIN in_product_balance D ON B.product_balance_id = D.product_balance_id
  331.     WHERE A.session_id = pSessionId
  332.         AND A.doc_type_id = vDocTypeReturnNote;
  333.    
  334.     -- Add by David, 20161006, ambil juga data item DO Receipt
  335.     --insert item dari Do Receipt
  336.     INSERT INTO tt_sl_invoice_item (
  337.         session_id, invoice_id, doc_type_id, product_balance_id, product_id,
  338.         brand_id, sub_ctgr_product_id,
  339.         serial_number, lot_number, product_expired_date,
  340.         qty, uom_id, curr_code, gross_amount,
  341.         tax_amount, discount_amount, nett_amount,
  342.         so_item_id, remark)
  343.     SELECT A.session_id, A.invoice_id, A.doc_type_id, H.product_balance_id, H.product_id,
  344.         f_get_brand_by_product_id(H.product_id), f_get_sub_ctgr_product_by_product_id(H.product_id),
  345.         F.serial_number, F.lot_number, F.product_expired_date,
  346.         H.qty_return * -1, H.uom_id, C.curr_code, C.gross_sell_price,
  347.         C.tax_price, C.discount_amount, C.nett_sell_price,
  348.         C.so_item_id, H.remark
  349.     FROM tt_sl_invoice A
  350.         INNER JOIN sl_so B ON A.ref_id = B.so_id AND A.ref_doc_type_id = vDocTypeSoByBrand
  351.         INNER JOIN sl_so_item C ON B.so_id = C.so_id
  352.         INNER JOIN sl_do_item D ON C.so_item_id = D.ref_id
  353.         INNER JOIN in_do_receipt_item G ON G.ref_doc_type_id = vDocTypeDo AND G.ref_id = D.do_item_id
  354.         INNER JOIN in_do_receipt I ON G.do_receipt_id = I.do_receipt_id AND I.status_doc = vStatusDocReleased
  355.         INNER JOIN in_do_receipt_product H ON H.do_receipt_item_id = G.do_receipt_item_id
  356.         INNER JOIN in_product_balance F ON F.product_balance_id = H.product_balance_id
  357.     WHERE A.session_id = pSessionId
  358.         AND A.doc_type_id IN (vDocTypeSalesInvoice, vDocTypeSalesInvoiceTemp);
  359.    
  360.     -- DETAIL --
  361.     Open pRefDetail FOR
  362.    
  363.     WITH data_from_inv_and_temp_inv AS (
  364.         -- Data dari Sales Invoice dan Temporary Sales Invoice
  365.         SELECT A.invoice_id, A.doc_no AS invoice_no, A.doc_date AS invoice_date, f_get_partner_code(A.salesman_id) AS salesman_code,  
  366.             f_get_partner_code(A.partner_id) AS partner_code, f_get_partner_name(A.partner_id) AS partner_name, A.city, A.province,
  367.             COALESCE(C.doc_no, vEmpty) AS mou_no, COALESCE(D.promo_code, vEmpty) AS promo_code,
  368.             f_get_sub_ctgr_product_name(B.sub_ctgr_product_id) AS sub_ctgr_product_name, f_get_brand_code(B.brand_id) AS brand_code, f_get_brand_name(B.brand_id) AS brand_name,
  369.             f_get_product_name(B.product_id) AS product_code, B.lot_number, B.product_expired_date,
  370.             SUM(B.qty) AS qty, B.gross_amount * SUM(B.qty) AS gross_amount, B.discount_amount * SUM(B.qty) AS discount_amount, B.nett_amount * SUM(B.qty) AS nett_amount, B.tax_amount  * SUM(B.qty) AS tax_amount, A.remark, --COALESCE(B.remark, A.remark) AS remark,
  371.             (CASE WHEN A.doc_type_id = vDocTypeSalesInvoiceTemp THEN vNo ELSE vYes END) AS flg_invoice,
  372.             COALESCE(E.promo_code, vEmpty) AS product_launching_code,
  373.             ((B.nett_amount+B.tax_amount) * SUM(B.qty)) AS total_amount, B.gross_amount AS harga_satuan,
  374.             (CASE WHEN f_get_status_cetak_report(A.ref_id, A.ref_doc_type_id, vReportName) = 'Y' THEN vSudahCetak ELSE vBelumCetak END) AS status_cetak, B.serial_number
  375.         FROM tt_sl_invoice A
  376.             INNER JOIN tt_sl_invoice_item B ON A.session_id = B.session_id AND A.invoice_id = B.invoice_id AND A.doc_type_id = B.doc_type_id
  377.             LEFT OUTER JOIN sl_mou C ON A.mou_id = C.mou_id
  378.             LEFT OUTER JOIN m_promo D ON A.promo_id = D.promo_id
  379.             LEFT OUTER JOIN m_promo E ON A.product_launching_id = E.promo_id
  380.         WHERE A.session_id = pSessionId
  381.             AND A.doc_type_id IN (vDocTypeSalesInvoice, vDocTypeSalesInvoiceTemp)
  382.         GROUP BY A.invoice_id, A.doc_no, A.doc_date, A.salesman_id, A.partner_id, A.city, A.province, C.doc_no, D.promo_code,
  383.                  B.sub_ctgr_product_id, B.brand_id, B.product_id, B.lot_number, B.product_expired_date,
  384.                  B.gross_amount, B.discount_amount, B.nett_amount, B.tax_amount, B.remark, A.remark, A.doc_type_id, E.promo_code, A.ref_id, A.ref_doc_type_id, B.serial_number
  385.    
  386.     ), data_from_rsib_and_rn AS (
  387.         -- Data RSIB dan Return Note yg belum dibuat RSIB(approved)
  388.         SELECT A.invoice_id, A.doc_no AS invoice_no, A.doc_date AS invoice_date, f_get_partner_code(A.salesman_id) AS salesman_code,  
  389.             f_get_partner_code(A.partner_id) AS partner_code, f_get_partner_name(A.partner_id) AS partner_name, A.city, A.province,
  390.             COALESCE(C.doc_no, vEmpty) AS mou_no, COALESCE(D.promo_code, vEmpty) AS promo_code,
  391.             f_get_sub_ctgr_product_name(B.sub_ctgr_product_id) AS sub_ctgr_product_name, f_get_brand_code(B.brand_id) AS brand_code, f_get_brand_name(B.brand_id) AS brand_name,
  392.             f_get_product_name(B.product_id) AS product_code, B.lot_number, B.product_expired_date,
  393.             SUM(B.qty) AS qty, B.gross_amount * SUM(B.qty) AS gross_amount, B.discount_amount * SUM(B.qty) AS discount_amount, B.nett_amount * SUM(B.qty) AS nett_amount, B.tax_amount * SUM(B.qty) AS tax_amount, A.remark, --COALESCE(B.remark, A.remark) AS remark,
  394.             CASE WHEN A.doc_type_id = vDocTypeReturnSalesInvoiceByBrand THEN CAST(vYes AS text)
  395.                  ELSE CAST(vNo AS text) END AS flg_invoice,
  396.             COALESCE(E.promo_code, vEmpty) AS product_launching_code,
  397.             ((B.nett_amount+B.tax_amount) * SUM(B.qty)) AS total_amount, B.gross_amount AS harga_satuan,
  398.             CAST('-'  AS text) AS status_cetak, B.serial_number
  399.         FROM tt_sl_invoice A
  400.             INNER JOIN tt_sl_invoice_item B ON A.session_id = B.session_id AND A.invoice_id = B.invoice_id AND A.doc_type_id = B.doc_type_id
  401.             LEFT OUTER JOIN sl_mou C ON A.mou_id = C.mou_id
  402.             LEFT OUTER JOIN m_promo D ON A.promo_id = D.promo_id
  403.             LEFT OUTER JOIN m_promo E ON A.product_launching_id = E.promo_id
  404.         WHERE A.session_id = pSessionId
  405.             AND A.doc_type_id IN (vDocTypeReturnSalesInvoiceByBrand, vDocTypeReturnNote)
  406.         GROUP BY A.invoice_id, A.doc_no, A.doc_date, A.salesman_id, A.partner_id, A.city, A.province,
  407.                  C.doc_no, D.promo_code, B.sub_ctgr_product_id, B.brand_id, B.product_id, B.lot_number, B.product_expired_date,
  408.                  B.gross_amount, B.discount_amount, B.nett_amount, B.tax_amount, B.remark, A.remark, E.promo_code, B.serial_number, A.doc_type_id
  409.     )
  410.         SELECT * FROM data_from_inv_and_temp_inv WHERE qty <> 0
  411.         UNION ALL
  412.         SELECT * FROM data_from_rsib_and_rn WHERE qty <> 0
  413.         ORDER BY province, city, salesman_code, partner_code, invoice_no, product_code, lot_number;
  414.    
  415.     RETURN NEXT pRefDetail;
  416.  
  417.     -- DELETE TEMP DATA --
  418.     DELETE FROM tt_sl_invoice WHERE session_id = pSessionId;
  419.     DELETE FROM tt_report_sales_journal WHERE session_id = pSessionId;
  420.     DELETE FROM tt_sl_invoice_item WHERE session_id = pSessionId;
  421.    
  422. END;
  423. $BODY$
  424.   LANGUAGE plpgsql VOLATILE
  425.   COST 100
  426.   ROWS 1000;
  427. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement