Advertisement
congky

sl_get_sales_order_list_for_inquiry_so_rabat

Jul 23rd, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION sl_get_sales_order_list_for_inquiry_so_rabat(CHARACTER VARYING, BIGINT, BIGINT, BIGINT, CHARACTER VARYING,
  2.     BIGINT, CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING, BIGINT,
  3.     CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING,
  4.     CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING,
  5.     CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING)
  6.   RETURNS SETOF refcursor AS
  7. $BODY$
  8. DECLARE
  9.  
  10.     pRefDetail                      REFCURSOR := 'refDetail';
  11.    
  12.     pSessionId                      ALIAS FOR $1;
  13.     pTenantId                       ALIAS FOR $2;
  14.     pUserId                         ALIAS FOR $3;
  15.     pRoleId                         ALIAS FOR $4;
  16.     pDatetime                       ALIAS FOR $5;
  17.    
  18.     pOuId                           ALIAS FOR $6;
  19.     pSoDateFrom                     ALIAS FOR $7;
  20.     pSoDateTo                       ALIAS FOR $8;
  21.     pSoNo                           ALIAS FOR $9;
  22.     pSalesmanCodeOrName             ALIAS FOR $10;
  23.     pCustomerCodeOrName             ALIAS FOR $11;
  24.     pWarehouseId                    ALIAS FOR $12;
  25.     pProductCodeOrName              ALIAS FOR $13;
  26.     pRgtoNo                         ALIAS FOR $14;
  27.     pDoDateFrom                     ALIAS FOR $15;
  28.     pDoDateTo                       ALIAS FOR $16;
  29.     pDoNo                           ALIAS FOR $17;
  30.     pDkbNo                          ALIAS FOR $18;
  31.     pResiNo                         ALIAS FOR $19;
  32.     pSalesInvoiceNo                 ALIAS FOR $20;
  33.     pDorNo                          ALIAS FOR $21;
  34.     pStatusSo                       ALIAS FOR $22;
  35.     pStatusCetakSo                  ALIAS FOR $23;
  36.     pStatusRgto                     ALIAS FOR $24;
  37.     pStatusDo                       ALIAS FOR $25;
  38.     pStatusDkb                      ALIAS FOR $26;
  39.     pStatusInvoice                  ALIAS FOR $27;
  40.     pStatusDor                      ALIAS FOR $28;
  41.    
  42.     vYes                            character varying(1) := 'Y';
  43.     vNo                             character varying(1) := 'N';
  44.     vEmptyString                    character varying(1) := '';
  45.     vWorkflowApproved               character varying(8) := 'APPROVED';
  46.     vReportCodeSo                   character varying(10) := 'SalesOrder';
  47.     vSchemeSo                       character varying(4) := 'FA01';
  48.     vStatusRelease                  character varying(1) := 'R';
  49.     vAll                            character varying(3) := 'ALL';
  50.     vDataTypeRaw1                   character varying(4) := 'RAW1';
  51.     vDataTypeRaw2                   character varying(4) := 'RAW2';
  52.     vDataTypeRaw3                   character varying(4) := 'RAW3';
  53.     vDataTypeGood                   character varying(4) := 'GOOD';
  54.     vDocTypeSo                      bigint := 301;
  55.     vDocTypeDo                      bigint := 311;
  56.     vDocTypeRgto                    bigint := 538;
  57.     vEmptyId                        bigint := -99;
  58.    
  59.     vFilterOu                       text := '';
  60.     vFilterSoNo                     text := '';
  61.     vFilterDoNo                     text := '';
  62.     vFilterRgtoNo                   text := '';
  63.     vFilterSiNo                     text := '';
  64.     vFilterDkbNo                    text := '';
  65.     vFilterDorNo                    text := '';
  66.     vFilterCetakSo                  text := '';
  67.     vFilterResiNo                   text := '';
  68.     vFilterSalesman                 text := '';
  69.     vFilterCustomer                 text := '';
  70.     vFilterProduct                  text := '';
  71.     vFilterWarehouse                text := '';
  72.     vQuery                          text := '';
  73.     vFilterSoDate                   text := '';
  74.  
  75. BEGIN
  76.    
  77.     -- RESET TEMP TABLE
  78.     DELETE FROM tt_so_for_inquiry_so WHERE session_id = pSessionId;
  79.     DELETE FROM tt_inquiry_so_rabat WHERE session_id = pSessionId;
  80.    
  81.     /**
  82.      * Create filter for OU
  83.      */
  84.     IF (pOuId <> vEmptyId) THEN
  85.         vFilterOu := ' AND A.ou_id = '||pOuId||' ';
  86.     END IF;
  87.    
  88.     /**
  89.      * Create filter for Salesman
  90.      */
  91.     IF (pSalesmanCodeOrName <> vEmptyString) THEN
  92.         vFilterSalesman := ' AND (UPPER(A.salesman_name) LIKE UPPER(''%'||pSalesmanCodeOrName||'%'')
  93.                                     OR
  94.                                     UPPER(A.salesman_code) LIKE UPPER(''%'||pSalesmanCodeOrName||'%'')) ';
  95.     END IF;
  96.    
  97.     /**
  98.      * Create filter for Customer
  99.      */
  100.     IF (pCustomerCodeOrName <> vEmptyString) THEN
  101.         vFilterCustomer := ' AND (UPPER(A.customer_name) LIKE UPPER(''%'||pCustomerCodeOrName||'%'')
  102.                                     OR
  103.                                     UPPER(A.customer_code) LIKE UPPER(''%'||pCustomerCodeOrName||'%'')) ';
  104.     END IF;
  105.    
  106.     /**
  107.      * Create filter for Sales order
  108.      */
  109.     IF (pSoDateFrom <> vEmptyString AND pSoDateTo<>vEmptyString) THEN
  110.         vFilterSoDate := ' AND A.doc_date BETWEEN '''||pSoDateFrom||''' AND '''||pSoDateTo||''' ';
  111.     END IF;
  112.    
  113.     IF (pStatusCetakSo = vYes) THEN
  114.         vFilterCetakSo := ' AND f_get_status_cetak_report(A.so_id, '||vDocTypeSo||', '''||vReportCodeSo||''') = '''||vYes||''' ';
  115.     ELSIF (pStatusCetakSo = vNo) THEN
  116.         vFilterCetakSo := ' AND f_get_status_cetak_report(A.so_id, '||vDocTypeSo||', '''||vReportCodeSo||''') = '''||vNo||''' ';
  117.     END IF;
  118.    
  119.     /**
  120.      * Create filter for warehouse
  121.      */
  122.     IF (pWarehouseId <> vEmptyId) THEN
  123.         vFilterWarehouse := ' AND B.warehouse_id = '||pWarehouseId||' ';
  124.     END IF;
  125.    
  126.     /**
  127.      * Create filter for RGTO
  128.      */
  129.     IF (pRgtoNo <> vEmptyString) THEN
  130.         vFilterRgtoNo := ' AND UPPER(C.doc_no) LIKE UPPER(''%'||pRgtoNo||'%'') ';
  131.     END IF;
  132.    
  133.     IF (pStatusRgto = vYes) THEN
  134.         vFilterRgtoNo := vFilterRgtoNo||' AND C.inventory_id IS NOT NULL ';
  135.     ELSIF (pStatusRgto = vNo) THEN
  136.         vFilterRgtoNo := vFilterRgtoNo||' AND C.inventory_id IS NULL ';
  137.     END IF;
  138.    
  139.     /**
  140.      * Create filter for Sales invoice
  141.      */
  142.     IF (pSalesInvoiceNo <> vEmptyString) THEN
  143.         vFilterSiNo := ' AND UPPER(D.doc_no) LIKE UPPER(''%'||pSalesInvoiceNo||'%'') ';
  144.     END IF;
  145.    
  146.     IF (pStatusInvoice = vYes) THEN
  147.         vFilterSiNo := vFilterSiNo||' AND D.invoice_id IS NOT NULL ';
  148.     ELSIF (pStatusInvoice = vNo) THEN
  149.         vFilterSiNo := vFilterSiNo||' AND D.invoice_id IS NULL ';
  150.     END IF;
  151.    
  152.     /**
  153.      * Create filter for DO
  154.      */
  155.     IF (pDoNo <> vEmptyString) THEN
  156.         vFilterDoNo := ' AND UPPER(E.doc_no) LIKE UPPER(''%'||pDoNo||'%'') ';
  157.     END IF;
  158.    
  159.     IF (pStatusDo = vYes) THEN
  160.         vFilterDoNo := vFilterDoNo||' AND E.do_id IS NOT NULL ';
  161.     ELSIF (pStatusDo = vNo) THEN
  162.         vFilterDoNo := vFilterDoNo||' AND E.do_id IS NULL ';
  163.     END IF;
  164.    
  165.     /**
  166.      * Create filter for DOR
  167.      */
  168.     IF (pDorNo <> vEmptyString) THEN
  169.         vFilterDorNo := ' AND UPPER(F.doc_no) LIKE UPPER(''%'||pDorNo||'%'') ';
  170.     END IF;
  171.    
  172.     IF (pStatusDor = vYes) THEN
  173.         vFilterDorNo := vFilterDorNo||' AND F.do_receipt_id IS NOT NULL ';
  174.     ELSIF (pStatusDor = vNo) THEN
  175.         vFilterDorNo := vFilterDorNo||' AND F.do_receipt_id IS NULL ';
  176.     END IF;
  177.    
  178.     /**
  179.      * Create filter for DKB
  180.      */
  181.     IF (pDkbNo <> vEmptyString) THEN
  182.         vFilterDkbNo := ' AND UPPER(C.doc_no) LIKE UPPER(''%'||pDkbNo||'%'') ';
  183.     END IF;
  184.    
  185.     IF (pStatusDkb = vYes) THEN
  186.         vFilterDkbNo := vFilterDkbNo||' AND C.dkb_id IS NOT NULL ';
  187.     ELSIF (pStatusDkb = vNo) THEN
  188.         vFilterDkbNo := vFilterDkbNo||' AND C.dkb_id IS NULL ';
  189.     END IF;
  190.    
  191.     -- INIT DATA SO
  192.     EXECUTE '
  193.     WITH raw_so AS (
  194.         SELECT A.so_id, A.tenant_id, A.doc_type_id, A.doc_no, A.doc_date,
  195.            A.ou_id, A.ext_doc_no, A.ext_doc_date, A.ref_doc_type_id, A.ref_id, B.warehouse_id, A.remark,
  196.            A.partner_id, A.salesman_id, A.curr_code, A.regular_discount_percentage,
  197.            A.status_doc, A.workflow_status
  198.         FROM sl_so A
  199.         INNER JOIN sl_so_additional_for_dlg B ON A.so_id = B.so_id
  200.         WHERE A.tenant_id = $2 '
  201.         || vFilterOu
  202.         || vFilterSoDate  
  203.         || vFilterCetakSo  
  204.         || vFilterWarehouse ||'
  205.     )
  206.    INSERT INTO tt_so_for_inquiry_so(
  207.            session_id, so_id, tenant_id, doc_type_id, doc_no, doc_date,
  208.            ou_id, ext_doc_no, ext_doc_date, ref_doc_type_id, ref_id, warehouse_id, remark,
  209.            partner_id, salesman_id, curr_code, regular_discount_percentage,
  210.            status_doc, workflow_status)
  211.    SELECT $1, A.so_id, A.tenant_id, A.doc_type_id, A.doc_no, A.doc_date,
  212.             A.ou_id, A.ext_doc_no, A.ext_doc_date, A.ref_doc_type_id, A.ref_id, A.warehouse_id, A.remark,
  213.             A.partner_id, A.salesman_id, A.curr_code, A.regular_discount_percentage,
  214.             A.status_doc, A.workflow_status
  215.     FROM raw_so A
  216.     WHERE f_authorize_user_role_policy_ou($2, $3, $4, A.ou_id) = 1
  217.     AND f_authorize_user_role_policy_warehouse($2, $3, $4, A.warehouse_id) = 1
  218.     ' USING pSessionId, pTenantId, pUserId, pRoleId;
  219.  
  220.     /**
  221.      * MELENGKAPI INFORMASI :
  222.      * - customer code, name
  223.      * - salesman code, name
  224.      * - so amount
  225.      * - so release date
  226.      * - next role
  227.      * - partner address id
  228.      * - city
  229.      */
  230.     EXECUTE '
  231.     WITH exisiting_data_so AS (
  232.         SELECT A.tenant_id, A.so_id, A.doc_no AS so_no, A.doc_date AS so_date,
  233.                 A.ext_doc_no, f_get_partner_code(A.salesman_id) AS salesman_code, f_get_partner_name(A.salesman_id) AS salesman_name,
  234.                 A.partner_id, f_get_partner_code(A.partner_id) AS customer_code, f_get_partner_name(A.partner_id) AS customer_name,
  235.                 ROUND (SUM(B.nett_item_amount + B.tax_amount) - (SUM(B.nett_item_amount + B.tax_amount) * A.regular_discount_percentage / 100.0 )) AS total_amount_so,
  236.                 A.status_doc AS status_so
  237.         FROM tt_so_for_inquiry_so A
  238.         INNER JOIN sl_so_item B ON A.so_id = B.so_id
  239.         WHERE A.session_id = $1
  240.         GROUP BY A.tenant_id, A.so_id, A.doc_no, A.doc_date, A.ext_doc_no, A.salesman_id, A.partner_id, A.status_doc, A.regular_discount_percentage
  241.     ), data_so_with_other_information AS (
  242.         SELECT A.so_id, A.so_no, A.so_date,
  243.                 A.ext_doc_no, A.salesman_code, A.salesman_name,
  244.                 A.customer_code, A.customer_name, A.total_amount_so, A.status_so,
  245.                 CASE WHEN B.current_state = $5
  246.                     THEN to_char(to_timestamp(B.update_datetime, ''YYYYMMDDHH24MISS''), ''YYYYMMDD'')
  247.                     ELSE $6
  248.                 END AS so_release_date, f_get_role_name(B.current_role_id) AS next_role,
  249.                 C.partner_address_id, C.city
  250.         FROM exisiting_data_so A
  251.         INNER JOIN awe_currdoc_status B ON A.tenant_id = B.tenant_id AND B.scheme = $3 AND B.doc_id = A.so_id
  252.         INNER JOIN m_partner_address C ON A.partner_id = C.partner_id AND C.flg_official = $4 '
  253.         || vFilterCustomer
  254.         || vFilterSalesman ||
  255.         '
  256.     )
  257.     INSERT INTO tt_inquiry_so_rabat(
  258.            session_id, type_data, so_id, so_no, so_date, so_release_date,
  259.            customer_doc_no, salesman_code, salesman_name, customer_code,
  260.            customer_name, total_amount_so, status_so, next_role,
  261.             partner_address_official_id, city)
  262.     SELECT $1 AS session_id, $2 AS type_data, A.so_id, A.so_no, A.so_date, A.so_release_date,
  263.             A.ext_doc_no, A.salesman_code, A.salesman_name, A.customer_code,
  264.             A.customer_name, A.total_amount_so, A.status_so, A.next_role,
  265.             A.partner_address_id, A.city
  266.     FROM data_so_with_other_information A
  267.     ' USING pSessionId, vDataTypeRaw1, vSchemeSo, vYes, vWorkflowApproved, vEmptyString;
  268.    
  269.     /**
  270.      * MELENGKAPI INFORMASI :
  271.      * - rgto id
  272.      * - rgto no
  273.      * - rgto date
  274.      * - invoice id
  275.      * - invoice no
  276.      * - invoice date
  277.      * - do id
  278.      * - do no
  279.      * - do date
  280.      * - dor id
  281.      * - dor no
  282.      * - dor date
  283.      */
  284.     EXECUTE '
  285.     WITH exisiting_data_so AS(
  286.         SELECT A.so_id, A.so_no, A.so_date, A.so_release_date,
  287.            A.customer_doc_no, A.salesman_code, A.salesman_name, A.customer_code,
  288.            A.customer_name, A.total_amount_so, A.status_so, A.next_role,
  289.             A.partner_address_official_id, A.city
  290.         FROM tt_inquiry_so_rabat A
  291.         WHERE A.session_id = $1
  292.         AND A.type_data = $2
  293.     ), data_so_with_other_information AS (
  294.         SELECT A.so_id, A.so_no, A.so_date, A.so_release_date,
  295.            A.customer_doc_no, A.salesman_code, A.salesman_name, A.customer_code,
  296.            A.customer_name, A.total_amount_so, A.status_so, A.next_role,
  297.             A.partner_address_official_id, A.city,
  298.            COALESCE(C.inventory_id, $3) AS rgto_id,
  299.            COALESCE(C.doc_no, $4) AS rgto_no,
  300.            COALESCE(C.doc_date, $4) AS rgto_date,
  301.            COALESCE(D.invoice_id, $3) AS invoice_id,
  302.            COALESCE(D.doc_no, $4) AS invoice_no,
  303.            COALESCE(D.doc_date, $4) AS invoice_date,
  304.            COALESCE(E.do_id, $3) AS do_id,
  305.            COALESCE(E.doc_no, $4) AS do_no,
  306.            COALESCE(E.doc_date, $4) AS do_date,
  307.             sl_get_total_amount_do_for_inquiry_so(E.do_id) AS do_amount,
  308.             COALESCE(F.do_receipt_id, $3) AS dor_id,
  309.            COALESCE(F.doc_no, $4) AS dor_no,
  310.            COALESCE(F.doc_date, $4) AS dor_date
  311.         FROM exisiting_data_so A
  312.         LEFT JOIN in_inventory_so B ON A.so_id = B.so_id
  313.         LEFT JOIN in_inventory C ON B.inventory_id = C.inventory_id AND C.ref_doc_type_id = $6 AND C.doc_type_id = $9 AND C.status_doc = $7
  314.         LEFT JOIN sl_invoice D ON A.so_id = D.ref_id AND D.ref_doc_type_id = $6 AND D.status_doc = $7
  315.         LEFT JOIN sl_do E ON A.so_id = E.ref_id AND E.ref_doc_type_id = $6 AND E.status_doc = $7
  316.         LEFT JOIN in_do_receipt F ON E.do_id = F.ref_id AND F.ref_doc_type_id = $8 AND F.status_doc = $7
  317.         WHERE ((E.doc_date BETWEEN $10 AND $11) OR E.doc_date IS NULL ) '
  318.         || vFilterRgtoNo
  319.         || vFilterSiNo
  320.         || vFilterDoNo
  321.         || vFilterDorNo ||'
  322.     )
  323.     INSERT INTO tt_inquiry_so_rabat(
  324.            session_id, type_data, so_id, so_no, so_date, so_release_date,
  325.            customer_doc_no, salesman_code, salesman_name, customer_code,
  326.            customer_name, total_amount_so, status_so, next_role,
  327.             rgto_id, rgto_no, rgto_date,
  328.             do_id, do_no, do_date, do_amount,
  329.             dor_id, dor_no, dor_date,
  330.             invoice_id, invoice_no, invoice_date,
  331.             partner_address_official_id, city)
  332.     SELECT $1 AS session_id, $5 AS type_data, A.so_id, A.so_no, A.so_date, A.so_release_date,
  333.            A.customer_doc_no, A.salesman_code, A.salesman_name, A.customer_code,
  334.            A.customer_name, A.total_amount_so, A.status_so, A.next_role,
  335.             A.rgto_id, A.rgto_no, A.rgto_date,
  336.             A.do_id, A.do_no, A.do_date, A.do_amount,
  337.             A.dor_id, A.dor_no, A.dor_date,
  338.             A.invoice_id, A.invoice_no, A.invoice_date,
  339.             A.partner_address_official_id, A.city
  340.     FROM data_so_with_other_information A
  341.     ' USING pSessionId, vDataTypeRaw1, vEmptyId, vEmptyString, vDataTypeRaw2, vDocTypeSo, vStatusRelease, vDocTypeDo, vDocTypeRgto, pDoDateFrom, pDoDateTo;
  342.    
  343.     DELETE FROM tt_inquiry_so_rabat WHERE type_data = vDataTypeRaw1;
  344.    
  345.     /**
  346.      * MELENGKAPI INFORMASI :
  347.      * - dkb id
  348.      * - dkb no
  349.      * - dkb date
  350.      * - resi id
  351.      * - resi no
  352.      * - resi date
  353.      * - resi amount
  354.      */
  355.     EXECUTE '
  356.     WITH exisiting_data_so AS(
  357.         SELECT A.so_id, A.so_no, A.so_date, A.so_release_date,
  358.            A.customer_doc_no, A.salesman_code, A.salesman_name, A.customer_code,
  359.            A.customer_name, A.total_amount_so, A.status_so, A.next_role,
  360.             A.rgto_id, A.rgto_no, A.rgto_date,
  361.             A.do_id, A.do_no, A.do_date, A.do_amount,
  362.             A.dor_id, A.dor_no, A.dor_date,
  363.             A.invoice_id, A.invoice_no, A.invoice_date,
  364.             A.partner_address_official_id, A.city
  365.         FROM tt_inquiry_so_rabat A
  366.         WHERE A.session_id = $1
  367.         AND A.type_data = $2
  368.     ), data_so_with_dkb_information AS (
  369.         SELECT A.so_id, A.so_no, A.so_date, A.so_release_date,
  370.            A.customer_doc_no, A.salesman_code, A.salesman_name, A.customer_code,
  371.            A.customer_name, A.total_amount_so, A.status_so, A.next_role,
  372.             A.rgto_id, A.rgto_no, A.rgto_date,
  373.             A.do_id, A.do_no, A.do_date, A.do_amount,
  374.             A.dor_id, A.dor_no, A.dor_date,
  375.             A.invoice_id, A.invoice_no, A.invoice_date,
  376.             A.partner_address_official_id, A.city,
  377.            COALESCE(C.dkb_id, $3) AS dkb_id_alias,
  378.            COALESCE(C.doc_no, $4) AS dkb_no,
  379.            COALESCE(C.doc_date, $4) AS dkb_date,
  380.             COALESCE(C.expedition_id, $3) AS expedition_id_alias
  381.         FROM exisiting_data_so A
  382.         LEFT JOIN sl_dkb_item B ON A.do_id = B.ref_id AND B.ref_doc_type_id = $8
  383.         LEFT JOIN sl_dkb C ON B.dkb_id = C.dkb_id AND C.status_doc = $7
  384.         WHERE true '
  385.         || vFilterDkbNo ||'
  386.         GROUP BY A.so_id, A.so_no, A.so_date, A.so_release_date,
  387.            A.customer_doc_no, A.salesman_code, A.salesman_name, A.customer_code,
  388.            A.customer_name, A.total_amount_so, A.status_so, A.next_role,
  389.             A.rgto_id, A.rgto_no, A.rgto_date,
  390.             A.do_id, A.do_no, A.do_date, A.do_amount,
  391.             A.dor_id, A.dor_no, A.dor_date,
  392.             A.invoice_id, A.invoice_no, A.invoice_date,
  393.             A.partner_address_official_id, A.city, dkb_id_alias, dkb_no, dkb_date, expedition_id_alias
  394.     ), data_so_with_expedition_information AS (
  395.         SELECT A.so_id, A.so_no, A.so_date, A.so_release_date,
  396.            A.customer_doc_no, A.salesman_code, A.salesman_name, A.customer_code,
  397.            A.customer_name, A.total_amount_so, A.status_so, A.next_role,
  398.             A.rgto_id, A.rgto_no, A.rgto_date,
  399.             A.do_id, A.do_no, A.do_date, A.do_amount,
  400.             A.dor_id, A.dor_no, A.dor_date,
  401.             A.invoice_id, A.invoice_no, A.invoice_date,
  402.             A.partner_address_official_id, A.city,
  403.            A.dkb_id_alias AS dkb_id, A.dkb_no, A.dkb_date,
  404.             COALESCE(B.expedition_id, $3) AS expedition_id,
  405.             COALESCE(B.expedition_code, $4) AS expedition_code,
  406.             COALESCE(B.expedition_name, $4) AS expedition_name
  407.         FROM data_so_with_dkb_information A
  408.         LEFT JOIN m_expedition B ON A.expedition_id_alias = B.expedition_id
  409.     )
  410.     INSERT INTO tt_inquiry_so_rabat(
  411.            session_id, type_data, so_id, so_no, so_date, so_release_date,
  412.            customer_doc_no, salesman_code, salesman_name, customer_code,
  413.            customer_name, total_amount_so, status_so, next_role,
  414.             rgto_id, rgto_no, rgto_date,
  415.             do_id, do_no, do_date, do_amount,  
  416.             dor_id, dor_no, dor_date,
  417.             invoice_id, invoice_no, invoice_date,
  418.             dkb_id, dkb_no, dkb_date,
  419.             partner_address_official_id, city,
  420.             expedition_id, expedition_code, expedition_name)
  421.     SELECT $1 AS session_id, $5 AS type_data, A.so_id, A.so_no, A.so_date, A.so_release_date,
  422.            A.customer_doc_no, A.salesman_code, A.salesman_name, A.customer_code,
  423.            A.customer_name, A.total_amount_so, A.status_so, A.next_role,
  424.             A.rgto_id, A.rgto_no, A.rgto_date,
  425.             A.do_id, A.do_no, A.do_date, A.do_amount,
  426.             A.dor_id, A.dor_no, A.dor_date,
  427.             A.invoice_id, A.invoice_no, A.invoice_date,
  428.             A.dkb_id, A.dkb_no, A.dkb_date,
  429.             A.partner_address_official_id, A.city,
  430.             A.expedition_id, A.expedition_code, A.expedition_name
  431.     FROM data_so_with_expedition_information A
  432.     ' USING pSessionId, vDataTypeRaw2, vEmptyId, vEmptyString, vDataTypeRaw3, vDocTypeSo, vStatusRelease, vDocTypeDo;
  433.    
  434.     DELETE FROM tt_inquiry_so_rabat WHERE type_data = vDataTypeRaw2;
  435.    
  436.     /**
  437.      * MELENGKAPI INFORMASI :
  438.      * - dkb id
  439.      * - dkb no
  440.      * - dkb date
  441.      * - resi id
  442.      * - resi no
  443.      * - resi date
  444.      * - resi amount
  445.      */
  446.     EXECUTE '
  447.     WITH exisiting_data_so AS(
  448.         SELECT A.so_id, A.so_no, A.so_date, A.so_release_date,
  449.            A.customer_doc_no, A.salesman_code, A.salesman_name, A.customer_code,
  450.            A.customer_name, A.total_amount_so, A.status_so, A.next_role,
  451.             A.rgto_id, A.rgto_no, A.rgto_date,
  452.             A.do_id, A.do_no, A.do_date, A.do_amount,
  453.             A.dor_id, A.dor_no, A.dor_date,
  454.             A.invoice_id, A.invoice_no, A.invoice_date,
  455.             A.dkb_id, A.dkb_no, A.dkb_date,
  456.             A.partner_address_official_id, A.city,
  457.             A.expedition_id, A.expedition_code, A.expedition_name
  458.         FROM tt_inquiry_so_rabat A
  459.         WHERE A.session_id = $1
  460.         AND A.type_data = $2
  461.     ), data_so_with_resi_information AS (
  462.         SELECT A.so_id, A.so_no, A.so_date, A.so_release_date,
  463.            A.customer_doc_no, A.salesman_code, A.salesman_name, A.customer_code,
  464.            A.customer_name, A.total_amount_so, A.status_so, A.next_role,
  465.             A.rgto_id, A.rgto_no, A.rgto_date,
  466.             A.do_id, A.do_no, A.do_date, A.do_amount,
  467.             A.dor_id, A.dor_no, A.dor_date,
  468.             A.invoice_id, A.invoice_no, A.invoice_date,
  469.             A.dkb_id, A.dkb_no, A.dkb_date,
  470.             A.partner_address_official_id, A.city,
  471.             A.expedition_id, A.expedition_code, A.expedition_name,
  472.            COALESCE(C.resi_id, $3) AS resi_id_alias,
  473.            COALESCE(C.receipt_no, $4) AS resi_no,
  474.            COALESCE(C.receipt_date, $4) AS resi_date,
  475.             COALESCE(C.cost_amount, 0) AS resi_amount
  476.         FROM exisiting_data_so A
  477.         LEFT JOIN sl_resi_item B ON A.do_id = B.ref_id AND B.ref_doc_type_id = $8
  478.         LEFT JOIN sl_resi C ON B.resi_id = C.resi_id
  479.         WHERE true '
  480.         || vFilterResiNo ||'
  481.         GROUP BY A.so_id, A.so_no, A.so_date, A.so_release_date,
  482.            A.customer_doc_no, A.salesman_code, A.salesman_name, A.customer_code,
  483.            A.customer_name, A.total_amount_so, A.status_so, A.next_role,
  484.             A.rgto_id, A.rgto_no, A.rgto_date,
  485.             A.do_id, A.do_no, A.do_date, A.do_amount,
  486.             A.dor_id, A.dor_no, A.dor_date,
  487.             A.invoice_id, A.invoice_no, A.invoice_date,
  488.             A.dkb_id, A.dkb_no, A.dkb_date,
  489.             A.partner_address_official_id, A.city,
  490.             A.expedition_id, A.expedition_code, A.expedition_name,
  491.             resi_id_alias, resi_no, resi_date, resi_amount
  492.     )
  493.     INSERT INTO tt_inquiry_so_rabat(
  494.            session_id, type_data, so_id, so_no, so_date, so_release_date,
  495.            customer_doc_no, salesman_code, salesman_name, customer_code,
  496.            customer_name, total_amount_so, status_so, next_role,
  497.             rgto_id, rgto_no, rgto_date,
  498.             do_id, do_no, do_date, do_amount,
  499.             dor_id, dor_no, dor_date,
  500.             resi_id, resi_no, resi_date, resi_amount,
  501.             invoice_id, invoice_no, invoice_date,
  502.             dkb_id, dkb_no, dkb_date,
  503.             partner_address_official_id, city,
  504.             expedition_id, expedition_code, expedition_name)
  505.     SELECT $1 AS session_id, $5 AS type_data, A.so_id, A.so_no, A.so_date, A.so_release_date,
  506.            A.customer_doc_no, A.salesman_code, A.salesman_name, A.customer_code,
  507.            A.customer_name, A.total_amount_so, A.status_so, A.next_role,
  508.             A.rgto_id, A.rgto_no, A.rgto_date,
  509.             A.do_id, A.do_no, A.do_date, A.do_amount,
  510.             A.dor_id, A.dor_no, A.dor_date,
  511.             A.resi_id_alias, A.resi_no, A.resi_date, A.resi_amount,
  512.             A.invoice_id, A.invoice_no, A.invoice_date,
  513.             A.dkb_id, A.dkb_no, A.dkb_date,
  514.             A.partner_address_official_id, A.city,
  515.             A.expedition_id, A.expedition_code, A.expedition_name
  516.     FROM data_so_with_resi_information A
  517.     ' USING pSessionId, vDataTypeRaw3, vEmptyId, vEmptyString, vDataTypeGood, vDocTypeSo, vStatusRelease, vDocTypeDo;
  518.    
  519.     DELETE FROM tt_inquiry_so_rabat WHERE type_data = vDataTypeRaw3;
  520.    
  521.     Open pRefDetail FOR
  522.         SELECT so_no, so_date, so_release_date AS release_so_date,
  523.             do_no, do_date, do_amount, dkb_no, dkb_date, resi_no AS receipt_no,
  524.             resi_date AS receipt_date, resi_amount AS nilai_resi, city, expedition_name
  525.           FROM tt_inquiry_so_rabat
  526.           WHERE session_id = pSessionId
  527.           AND type_data = vDataTypeGood
  528.           ORDER BY so_no;
  529.     RETURN NEXT pRefDetail;
  530.    
  531.     -- RESET TEMP TABLE
  532.     DELETE FROM tt_so_for_inquiry_so WHERE session_id = pSessionId;
  533.     DELETE FROM tt_inquiry_so_rabat WHERE session_id = pSessionId;
  534.    
  535. END;
  536. $BODY$
  537.   LANGUAGE plpgsql VOLATILE
  538.   COST 100;
  539. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement