Advertisement
aadddrr

Untitled

Mar 14th, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --Adrian, Mar 8, 2018
  2. --! Jika terjadi perubahan, sesuaikan juga r_limit_detail_mou !
  3.  
  4. CREATE OR REPLACE FUNCTION r_limit_detail_mou_for_salesman_csv(character varying, bigint, bigint, bigint, character varying, bigint, bigint, character varying, character varying)
  5.   RETURNS SETOF refcursor AS
  6. $BODY$
  7. DECLARE
  8.     pRefHeader                  REFCURSOR := 'refHeader';
  9.     pRefDetail                  REFCURSOR := 'refDetail';
  10.     pRefDetailGrandTotal        REFCURSOR := 'refDetailGrandTotal';
  11.     pSessionId                  ALIAS FOR $1;
  12.     pTenantId                   ALIAS FOR $2;
  13.     pUserId                     ALIAS FOR $3;
  14.     pRoleId                     ALIAS FOR $4;
  15.     pDatetime                   ALIAS FOR $5;
  16.    
  17.     pOuId                       ALIAS FOR $6;
  18.     pPartnerId                  ALIAS FOR $7;
  19.     pPeriodFrom                 ALIAS FOR $8;
  20.     pPeriodTo                   ALIAS FOR $9;
  21.  
  22.     vPartnerCodeMou                 character varying(50);
  23.     vPartnerNameMou                 character varying(100);
  24.     vDocTypeIdSOByBrand             bigint;
  25.     vStatusReleased                 character varying(1);
  26.     vStatusFinal                    character varying(1);
  27.     vStatusInProgress               character varying(1);
  28.     vStatusDraft                    character varying(1);
  29.     vTagKeyMOU                  character varying(10);
  30.     vDocTypeIdReturnNote                bigint;
  31.     vDocTypeIdSalesInvoice              bigint;
  32.     vDocTypeIdInvoiceTemp               bigint;
  33.     vDocTypeIdConversionOfExchangeIn        bigint;
  34.     vDocTypeIdConversionOfExchangeOut       bigint;
  35.     vDocTypeIdRRS                   bigint;
  36.     vStatusMapping                  character varying(1);
  37.     vStatusApproved                 character varying(1);
  38.     vRaw                        character varying(20);
  39.     vSummary                    character varying(20);
  40.     vEmptyId                    bigint;
  41.     vOne                        integer := 1;
  42.     vEmptyValue                 character varying;
  43.     vParamCodeInsentif          character varying := 'INCENTIVE';
  44.     vActivityGLCodeInsentif     character varying;
  45.     vActivityGLInsentif         bigint;
  46.    
  47.     vFlagYes                    character varying(1) :='Y';
  48.    
  49.     vDocNoMou                   character varying(50);
  50.     i                           bigint;
  51.  
  52. BEGIN
  53.    
  54.     vPartnerCodeMou := ' ';
  55.     vPartnerNameMou := ' ';
  56.     vDocTypeIdSOByBrand := 398;
  57.     vStatusReleased := 'R';
  58.     vStatusFinal := 'F';
  59.     vStatusInProgress := 'I';
  60.     vStatusDraft := 'D';
  61.     vTagKeyMOU := 'MOU';
  62.     vDocTypeIdReturnNote := 502;
  63.     vDocTypeIdSalesInvoice := 321;
  64.     vDocTypeIdInvoiceTemp := 361;
  65.     vDocTypeIdConversionOfExchangeIn := 394;
  66.     vDocTypeIdConversionOfExchangeOut := 395;
  67.     vDocTypeIdRRS :=381;
  68.     vStatusMapping := 'M';
  69.     vStatusApproved := 'A';
  70.     vRaw := 'RAW';
  71.     vSummary := 'SUMMARY';
  72.     vEmptyId := -99;
  73.     vEmptyValue := '';
  74.     vDocNoMou := '';
  75.     i := 1;
  76.    
  77.     SELECT partner_code INTO vPartnerCodeMou
  78.     FROM m_partner
  79.     WHERE partner_id = pPartnerId;
  80.    
  81.     SELECT partner_name INTO vPartnerNameMou
  82.     FROM m_partner
  83.     WHERE partner_id = pPartnerId;
  84.    
  85.     -- Get data-data activity gl code incentive dari system config value
  86.     SELECT TRIM(REPLACE(f_get_value_system_config_by_param_code(pTenantId, vParamCodeInsentif), ';', ''',''')) INTO vActivityGLCodeInsentif;
  87.    
  88.     /*
  89.     --get data activity gl insentif
  90.     SELECT B.parameter_value INTO vActivityGLCodeInsentif
  91.     FROM t_parameter A
  92.         INNER JOIN t_system_config B ON A.parameter_id = B.parameter_id
  93.     WHERE A.parameter_code = vParamCodeInsentif
  94.         AND B.tenant_id = pTenantId;
  95.        
  96.     --get activity gl
  97.     SELECT activity_gl_id INTO vActivityGLInsentif
  98.     FROM m_activity_gl
  99.     WHERE tenant_id = pTenantId
  100.         AND activity_gl_code = vActivityGLCodeInsentif;
  101.     */
  102.  
  103.     --Menghapus semua table temporrer untuk mulai insert data baru
  104.     DELETE FROM tt_sl_r_limit_detail_mou_list WHERE session_id = pSessionId;
  105.     DELETE FROM tt_sl_mou_list WHERE session_id = pSessionId;
  106.     DELETE FROM tt_sl_so WHERE session_id = pSessionId;
  107.     DELETE FROM tt_sl_outstanding_so WHERE session_id = pSessionId;
  108.     DELETE FROM tt_sl_r_limit_detail_mou_list_for_csv_detail WHERE session_id = pSessionId;
  109.  
  110.     -- Mengambil data MOU sesuai dengan filter nya
  111.     INSERT INTO tt_sl_mou_list(
  112.       session_id ,mou_id,tenant_id ,ou_id ,doc_type_id ,doc_date,doc_no,period_from ,period_to ,partner_id ,
  113.       curr_code ,plafon_amount ,status_doc ,workflow_status)
  114.     SELECT pSessionId ,mou_id,tenant_id ,ou_id ,doc_type_id ,doc_date,doc_no,period_from ,period_to ,partner_id ,
  115.       curr_code ,plafon_amount ,status_doc ,workflow_status
  116.     FROM sl_mou
  117.     WHERE tenant_id = pTenantId
  118.         AND ou_id = pOuId
  119.         AND partner_id = pPartnerId
  120.         AND period_from BETWEEN pPeriodFrom AND pPeriodTo
  121.         AND status_doc IN (vStatusReleased,vStatusFinal)
  122.         AND f_authorize_user_role_policy_ou(pTenantId, pUserId, pRoleId, ou_id) = vOne
  123.         AND f_authorize_user_role_policy_partner(pTenantId, pUserId, pRoleId, partner_id) = vOne;
  124.  
  125.     -- Mengambil semua data SO By Brand yang tagging ke mou (semua status doc)
  126.     INSERT INTO tt_sl_so(
  127.       session_id ,so_id,tenant_id ,ou_id ,doc_type_id ,doc_date ,doc_no ,partner_id , mou_id, curr_code ,
  128.       amount, amount_tax, status_doc ,workflow_status)
  129.     SELECT pSessionId ,A.so_id,A.tenant_id ,A.ou_id ,A.doc_type_id ,A.doc_date,A.doc_no,A.partner_id ,C.mou_id, A.curr_code ,
  130.       SUM(D.nett_brand_amount) AS amount, SUM(D.qty*D.tax_price) AS amount_tax ,A.status_doc ,A.workflow_status
  131.     FROM sl_so A
  132.         INNER JOIN sl_so_info B ON A.so_id = B.so_id
  133.         INNER JOIN tt_sl_mou_list C ON B.mou_id = C.mou_id AND C.session_id = pSessionId
  134.         INNER JOIN sl_so_brand_item D ON A.so_id = D.so_id
  135.     WHERE A.tenant_id = pTenantId
  136.         AND A.ou_id = pOuId
  137.         AND A.doc_type_id = vDocTypeIdSOByBrand
  138.         AND A.doc_date BETWEEN pPeriodFrom AND pPeriodTo
  139.         AND f_authorize_user_role_policy_ou(pTenantId, pUserId, pRoleId, A.ou_id) = vOne
  140.         AND f_authorize_user_role_policy_partner(pTenantId, pUserId, pRoleId, A.partner_id) = vOne
  141.         AND NOT EXISTS (
  142.             SELECT 1 FROM sl_so_balance_invoice Z
  143.             WHERE Z.so_id = A.so_id
  144.             GROUP BY Z.so_id
  145.             HAVING SUM(Z.qty_dlv_so) <= 0
  146.         )
  147.     GROUP BY A.so_id,A.tenant_id ,A.ou_id ,A.doc_type_id ,A.doc_date,A.doc_no,A.partner_id ,C.mou_id,A.curr_code ,
  148.       A.status_doc ,A.workflow_status;
  149.  
  150.     -- Insert data so by brand ke table tt_sl_outstanding_so yang mana sudah tagging mou dan disubmit , status doc nya (R/F)
  151.     INSERT INTO tt_sl_outstanding_so(session_id ,data_id ,so_id ,amount_so ,amount_tax_so)
  152.     SELECT pSessionId, vRaw, A.so_id, A.amount, A.amount_tax
  153.     FROM tt_sl_so A
  154.         INNER JOIN sl_so_tagging B ON A.so_id = B.so_id AND B.tag_key = vTagKeyMOU
  155.     WHERE A.session_id = pSessionId
  156.         AND A.status_doc IN (vStatusReleased,vStatusFinal);
  157.    
  158.     -- Insert data invoice temp ke table tt_sl_outstanding_so yang ref_id (dokumen so by brand) tagging ke mou
  159.     INSERT INTO tt_sl_outstanding_so(session_id ,data_id ,so_id,invoice_temp_id ,amount_inv_temp ,amount_tax_inv_temp)
  160.     SELECT pSessionId, vRaw, B.ref_id,B.invoice_temp_id, B.total_amount, COALESCE(C.tax_amount,0)
  161.     FROM tt_sl_outstanding_so A
  162.         INNER JOIN sl_invoice_temp B ON A.so_id = B.ref_id
  163.         LEFT JOIN sl_invoice_temp_tax C ON B.invoice_temp_id = C.invoice_temp_id
  164.     WHERE A.session_id = pSessionId
  165.         AND B.tenant_id = pTenantId
  166.         AND B.ou_id = pOuId
  167.         AND B.status_doc = vStatusReleased
  168.         AND B.doc_type_id = vDocTypeIdInvoiceTemp
  169.         AND NOT EXISTS (SELECT 1 FROM sl_invoice D
  170.                     WHERE D.doc_no = B.inv_doc_no
  171.                         AND D.ref_id = B.ref_id
  172.                         AND D.doc_type_id = vDocTypeIdSalesInvoice
  173.                         AND D.status_doc = vStatusReleased);
  174.    
  175.     -- Insert data invoice ke table tt_sl_outstanding_so yang ref_id (dokumen so by brand) tagging ke mou
  176.     INSERT INTO tt_sl_outstanding_so(session_id ,data_id ,so_id,invoice_id ,amount_inv, amount_tax_inv)
  177.     SELECT pSessionId, vRaw, B.ref_id, B.invoice_id, B.total_amount, COALESCE(D.tax_amount,0)
  178.     FROM tt_sl_outstanding_so A
  179.         INNER JOIN sl_invoice B ON A.so_id = B.ref_id
  180.         INNER JOIN sl_invoice_tagging C ON B.invoice_id = C.invoice_id AND C.tag_key = vTagKeyMOU
  181.         LEFT JOIN sl_invoice_tax D ON B.invoice_id = D.invoice_id
  182.     WHERE A.session_id = pSessionId
  183.         AND A.invoice_temp_id = vEmptyId
  184.         AND B.tenant_id = pTenantId
  185.         AND B.ou_id = pOuId
  186.         AND B.status_doc = vStatusReleased
  187.         AND B.doc_type_id = vDocTypeIdSalesInvoice;
  188.  
  189.     -- Insert ke table tt_sl_outstanding_so untuk menghitung summary (untuk mengetahui outstading amount nya so by brand)
  190.     INSERT INTO tt_sl_outstanding_so(session_id ,data_id ,so_id,amount_so, amount_tax_so,
  191.         amount_inv, amount_tax_inv, amount_inv_temp,
  192.         amount_tax_inv_temp, final_so,
  193.         final_tax_so)
  194.     SELECT pSessionId, vSummary, so_id, SUM(amount_so) AS amount_so, SUM(amount_tax_so) AS amount_tax_so,
  195.         SUM(amount_inv) AS amount_inv, SUM(amount_tax_inv) AS amount_tax_inv, SUM(amount_inv_temp) AS amount_inv_temp ,
  196.         SUM(amount_tax_inv_temp) AS amount_tax_inv_temp ,(SUM(amount_so) - SUM(amount_inv) - SUM(amount_inv_temp)) AS final_so,
  197.         (SUM(amount_tax_so) - SUM(amount_tax_inv) - SUM(amount_tax_inv_temp)) AS final_tax_so
  198.     FROM tt_sl_outstanding_so
  199.     WHERE session_id = pSessionId
  200.     GROUP BY so_id;
  201.  
  202.     /*
  203.     Insert data Invoice yang di mapping(di tarik manual ,sebelum nya SO by brand belum di tagging ke mou)
  204.     dan status doc invoice = R -> ke table tt_sl_r_limit_detail_mou_list
  205.     */
  206.     INSERT INTO tt_sl_r_limit_detail_mou_list(
  207.          session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  208.          period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  209.          doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,usage_amount ,
  210.          status_doc ,workflow_status ,status_doc_mou,
  211.          usage_amount_tax, total_usage_amount)
  212.     SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  213.         A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  214.         C.invoice_id AS doc_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id, C.curr_code, C.total_amount AS usage_amount,
  215.         vStatusMapping AS status_doc_invoice, C.workflow_status, A.status_doc AS status_doc_mou,
  216.         COALESCE(D.tax_amount, 0) AS usage_amount_tax, (C.total_amount + COALESCE(D.tax_amount, 0)) AS total_usage_amount
  217.     FROM tt_sl_mou_list A
  218.         INNER JOIN sl_invoice_tagging B ON A.mou_id = B.tag_doc_id AND B.tag_key = vTagKeyMou
  219.         INNER JOIN sl_invoice C ON B.invoice_id = C.invoice_id
  220.         LEFT JOIN sl_invoice_tax D ON C.invoice_id = D.invoice_id
  221.     WHERE A.session_id = pSessionId
  222.         AND C.doc_type_id = vDocTypeIdSalesInvoice
  223.         AND C.status_doc = vStatusReleased
  224.         AND NOT EXISTS(SELECT 1 FROM tt_sl_so D WHERE D.session_id = pSessionId AND D.so_id = C.ref_id);
  225.  
  226.     -- Insert data Invoice (SO By Brand nya sudah di tagging ke MOU) dan status doc invoice = R -> ke table tt_sl_r_limit_detail_mou_list
  227.     INSERT INTO tt_sl_r_limit_detail_mou_list(
  228.          session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  229.          period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  230.          doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,usage_amount ,
  231.          status_doc ,workflow_status ,status_doc_mou,
  232.          usage_amount_tax, total_usage_amount)
  233.     SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  234.         A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  235.         C.invoice_id AS doc_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id, C.curr_code, C.total_amount AS usage_amount,
  236.         vStatusApproved AS status_doc_invoice ,C.workflow_status, A.status_doc AS status_doc_mou,
  237.         COALESCE(D.tax_amount, 0) AS usage_amount_tax, (C.total_amount + COALESCE(D.tax_amount, 0)) AS total_usage_amount
  238.     FROM tt_sl_mou_list A
  239.         INNER JOIN sl_invoice_tagging B ON A.mou_id = B.tag_doc_id AND B.tag_key = vTagKeyMou
  240.         INNER JOIN sl_invoice C ON B.invoice_id = C.invoice_id
  241.         LEFT JOIN sl_invoice_tax D ON C.invoice_id = D.invoice_id
  242.     WHERE A.session_id = pSessionId
  243.         AND C.doc_type_id = vDocTypeIdSalesInvoice
  244.         AND C.status_doc = vStatusReleased
  245.         AND EXISTS(SELECT 1 FROM tt_sl_outstanding_so D
  246.                 WHERE D.session_id = pSessionId
  247.                     AND D.data_id = vRaw AND D.invoice_id = C.invoice_id AND D.so_id = C.ref_id);
  248.                
  249.     /*
  250.     Insert data Invoice temp (SO By Brand nya sudah di tagging ke MOU) dan status doc invoice temp = R
  251.     dan belum di convert ke invoice beneran yang mana status doc invoice beneran nya = R ke table tt_sl_r_limit_detail_mou_list
  252.     */
  253.     INSERT INTO tt_sl_r_limit_detail_mou_list(
  254.          session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  255.          period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  256.          doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,usage_amount ,
  257.          status_doc ,workflow_status ,status_doc_mou,
  258.          usage_amount_tax, total_usage_amount)
  259.    SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  260.         A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  261.         D.invoice_temp_id AS doc_id, D.doc_type_id, D.doc_no, D.doc_date, D.partner_id, D.curr_code, D.total_amount AS usage_amount,
  262.         D.status_doc AS status_doc_invoice_temp ,D.workflow_status, A.status_doc AS status_doc_mou,
  263.         COALESCE(E.tax_amount, 0) AS usage_amount_tax, (D.total_amount + COALESCE(E.tax_amount, 0)) AS total_usage_amount
  264.     FROM tt_sl_mou_list A
  265.         INNER JOIN sl_so_tagging B ON A.mou_id = B.tag_doc_id AND B.tag_key = vTagKeyMou
  266.         INNER JOIN tt_sl_outstanding_so C ON B.so_id = C.so_id AND C.data_id = vRaw
  267.         INNER JOIN sl_invoice_temp D ON C.invoice_temp_id = D.invoice_temp_id
  268.         LEFT JOIN sl_invoice_temp_tax E ON D.invoice_temp_id = E.invoice_temp_id
  269.     WHERE A.session_id = pSessionId
  270.         AND C.session_id = pSessionId;
  271.  
  272.     -- Insert data SO By Brand yang sudah di tagging dan status doc( D dan I) ke table tt_sl_r_limit_detail_mou_list
  273.     INSERT INTO tt_sl_r_limit_detail_mou_list(
  274.          session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  275.          period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  276.          doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,usage_amount ,
  277.          status_doc ,workflow_status ,status_doc_mou,
  278.          usage_amount_tax, total_usage_amount)
  279.     SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  280.         A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  281.         B.so_id AS doc_id, B.doc_type_id, B.doc_no, B.doc_date, B.partner_id, B.curr_code, B.amount AS usage_amount,
  282.         B.status_doc AS status_doc_so ,B.workflow_status, A.status_doc AS status_doc_mou,
  283.         B.amount_tax AS usage_amount_tax, (B.amount + B.amount_tax) AS total_usage_amount
  284.     FROM tt_sl_mou_list A
  285.         INNER JOIN tt_sl_so B ON A.mou_id = B.mou_id AND B.session_id = pSessionId
  286.     WHERE A.session_id = pSessionId
  287.         AND B.status_doc IN (vStatusDraft,vStatusInProgress);
  288.        
  289.     /* Insert data SO By Brand yang sudah di tagging dan status doc( R/F) ke table tt_sl_r_limit_detail_mou_list
  290.      * UNTUK SO YG SUDAH SAMPAI DI INVOICE (STATUS R) TIDAK PERLU DIMUNCULKAN
  291.      */
  292.     INSERT INTO tt_sl_r_limit_detail_mou_list(
  293.          session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  294.          period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  295.          doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,usage_amount ,
  296.          status_doc ,workflow_status ,status_doc_mou,
  297.          usage_amount_tax, total_usage_amount)
  298.     SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  299.         A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  300.         B.so_id AS doc_id, B.doc_type_id, B.doc_no, B.doc_date, B.partner_id, B.curr_code, B.amount AS usage_amount,
  301.         B.status_doc AS status_doc_so ,B.workflow_status, A.status_doc AS status_doc_mou,
  302.         B.amount_tax AS usage_amount_tax, (B.amount + B.amount_tax) AS total_usage_amount
  303.     FROM tt_sl_mou_list A
  304.         INNER JOIN tt_sl_so B ON A.mou_id = B.mou_id AND B.session_id = pSessionId
  305.     WHERE A.session_id = pSessionId
  306.         AND B.status_doc IN (vStatusReleased,vStatusFinal)
  307.         AND NOT EXISTS(SELECT 1 FROM sl_invoice_temp C WHERE B.so_id = C.ref_id AND C.status_doc = vStatusReleased)
  308.         AND NOT EXISTS(SELECT 1 FROM sl_invoice D WHERE B.so_id = D.ref_id AND D.status_doc = vStatusReleased);
  309.    
  310.     /*
  311.      * TIDAK LAGI MENAMPILKAN OUTSTANDING SO -> KARENA SO YG SUDAH DI INVOICE (R) TIDAK PERLU DIMUNCULKAN
  312.      * KRN di KATAMATA 1 SO 1 INVOICE
  313.      *
  314.     -- Menghapus data dr table tt_sl_outstanding_so yang mana data_id = RAW
  315.     DELETE FROM tt_sl_outstanding_so WHERE session_id = pSessionId AND data_id = vRaw;
  316.    
  317.     -- Insert data SO By Brand yang sudah di tagging ,status doc( R/F) ke table tt_sl_r_limit_detail_mou_list
  318.     INSERT INTO tt_sl_r_limit_detail_mou_list(
  319.          session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  320.          period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  321.          doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,usage_amount ,
  322.          status_doc ,workflow_status ,status_doc_mou,
  323.          usage_amount_tax, total_usage_amount)
  324.     SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  325.         A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  326.         D.so_id AS doc_id, D.doc_type_id, D.doc_no, D.doc_date, D.partner_id, D.curr_code, C.final_so AS usage_amount,
  327.         D.status_doc AS status_doc_so ,D.workflow_status, A.status_doc AS status_doc_mou,
  328.         C.final_tax_so AS usage_amount_tax, (C.final_so + C.final_tax_so) AS total_usage_amount
  329.     FROM tt_sl_mou_list A
  330.         INNER JOIN sl_so_tagging B ON A.mou_id = B.tag_doc_id AND B.tag_key = vTagKeyMou
  331.         INNER JOIN tt_sl_outstanding_so C ON B.so_id = C.so_id AND C.data_id = vSummary
  332.         INNER JOIN tt_sl_so D ON C.so_id = D.so_id AND D.session_id = pSessionId
  333.     WHERE A.session_id = pSessionId
  334.         AND C.session_id = pSessionId;
  335.     */
  336.            
  337.     --INSERT data return yang sudah di submit (status doc R/F) ke tt_sl_r_limit_detail_mou_list
  338.     INSERT INTO tt_sl_r_limit_detail_mou_list(
  339.          session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  340.          period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  341.          doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,
  342.          usage_amount ,status_doc ,workflow_status ,status_doc_mou,
  343.          usage_amount_tax,
  344.          total_usage_amount)
  345.     SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  346.         A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  347.         C.inventory_id AS doc_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id,G.curr_code,
  348.         SUM(D.qty_realization * F.nett_sell_price) AS usage_amount,C.status_doc AS status_doc_return ,
  349.         C.workflow_status, A.status_doc AS status_doc_mou,
  350.         SUM(D.qty_realization * F.tax_price) AS usage_amount_tax,
  351.         (SUM(D.qty_realization * F.nett_sell_price) + SUM(D.qty_realization * F.tax_price)) AS total_usage_amount
  352.     FROM tt_sl_mou_list A
  353.         INNER JOIN in_return_tagging B ON A.mou_id = B.tag_doc_id AND B.tag_key = vTagKeyMOU
  354.         INNER JOIN in_inventory C ON B.inventory_id = C.inventory_id
  355.         INNER JOIN in_inventory_item D ON C.inventory_id = D.inventory_id
  356.         INNER JOIN sl_request_return_sales E ON C.ref_id = E.request_return_sales_id AND C.ref_doc_type_id = vDocTypeIdRRS
  357.         INNER JOIN sl_request_return_sales_brand_item F ON E.request_return_sales_id = F.request_return_sales_id
  358.             AND f_get_brand_by_product_id(D.product_id) = F.brand_id
  359.         INNER JOIN tt_sl_so G ON E.ref_id = G.so_id AND E.ref_doc_type_id = vDocTypeIdSOByBrand AND G.session_id = pSessionId
  360.     WHERE A.session_id = pSessionId
  361.         AND C.doc_type_id = vDocTypeIdReturnNote
  362.         AND C.status_doc IN (vStatusReleased,vStatusFinal)
  363.     GROUP BY A.tenant_id, A.ou_id, A.mou_id, A.doc_date , A.doc_no,A.period_from, A.period_to, A.partner_id , A.curr_code ,
  364.         A.plafon_amount,C.inventory_id , C.doc_type_id, C.doc_no, C.doc_date, C.partner_id,G.curr_code,
  365.         C.status_doc ,C.workflow_status, A.status_doc;
  366.  
  367.     --INSERT data return yang belum di submit (status doc D/I) ke tt_sl_r_limit_detail_mou_list
  368.     INSERT INTO tt_sl_r_limit_detail_mou_list(
  369.          session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  370.          period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  371.          doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,
  372.          usage_amount ,status_doc ,workflow_status ,status_doc_mou,
  373.          usage_amount_tax,
  374.          total_usage_amount)
  375.     SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  376.         A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  377.         C.inventory_id AS doc_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id,G.curr_code,
  378.         SUM(D.qty_realization * F.nett_sell_price) AS usage_amount,C.status_doc AS status_doc_return ,
  379.         C.workflow_status, A.status_doc AS status_doc_mou,
  380.         SUM(D.qty_realization * F.tax_price) AS usage_amount_tax,
  381.         (SUM(D.qty_realization * F.nett_sell_price) + SUM(D.qty_realization * F.tax_price)) AS total_usage_amount
  382.     FROM tt_sl_mou_list A
  383.         INNER JOIN tt_sl_r_limit_detail_mou_list B ON A.mou_id = B.mou_id AND B.doc_type_id = vDocTypeIdSOByBrand
  384.         INNER JOIN sl_request_return_sales E ON B.doc_id = E.ref_id AND E.ref_doc_type_id = vDocTypeIdSOByBrand
  385.         INNER JOIN sl_request_return_sales_brand_item F ON E.request_return_sales_id = F.request_return_sales_id
  386.         INNER JOIN in_inventory C ON C.ref_id = E.request_return_sales_id AND C.ref_doc_type_id = vDocTypeIdRRS
  387.         INNER JOIN in_inventory_item D ON C.inventory_id = D.inventory_id
  388.         INNER JOIN tt_sl_so G ON E.ref_id = G.so_id AND E.ref_doc_type_id = vDocTypeIdSOByBrand AND G.session_id = pSessionId
  389.     WHERE A.session_id = pSessionId
  390.         AND B.session_id = pSessionId
  391.         AND C.doc_type_id = vDocTypeIdReturnNote
  392.         AND C.status_doc IN (vStatusDraft,vStatusInProgress)
  393.     GROUP BY A.tenant_id, A.ou_id, A.mou_id, A.doc_date , A.doc_no,A.period_from, A.period_to, A.partner_id , A.curr_code ,
  394.         A.plafon_amount,C.inventory_id , C.doc_type_id, C.doc_no, C.doc_date, C.partner_id,G.curr_code,
  395.         C.status_doc ,C.workflow_status, A.status_doc; 
  396.        
  397.     -- Insert data MOU yang sama sekali belum digunakan ke table tt_sl_r_limit_detail_mou_list
  398.     INSERT INTO tt_sl_r_limit_detail_mou_list(
  399.         session_id, tenant_id, ou_id, mou_id, doc_date_mou, doc_no_mou,
  400.         period_from, period_to, partner_id_mou, curr_code_mou, plafon_amount,
  401.         doc_id, doc_type_id, doc_no, doc_date, partner_id, curr_code, usage_amount,
  402.         status_doc, workflow_status, status_doc_mou)
  403.     SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  404.         A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  405.         vEmptyId, vEmptyId, vEmptyValue, vEmptyValue, A.partner_id, vEmptyValue, 0 AS usage_amount,
  406.         vEmptyValue, vEmptyValue, A.status_doc AS status_doc_mou
  407.     FROM tt_sl_mou_list A
  408.     WHERE A.session_id = pSessionId
  409.         AND A.mou_id NOT IN (SELECT DISTINCT B.mou_id FROM tt_sl_r_limit_detail_mou_list B WHERE B.session_id = pSessionId);
  410.    
  411.     /* Insert data CN AR non-insentif yang dimapping ke MOU */
  412.     INSERT INTO tt_sl_r_limit_detail_mou_list(
  413.         session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  414.         period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  415.         doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,usage_amount ,
  416.         status_doc ,workflow_status ,status_doc_mou,
  417.         usage_amount_tax, total_usage_amount)
  418.     SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  419.         A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  420.         C.invoice_ar_id AS doc_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id, C.curr_code, SUM(D.add_amount)*-1 AS usage_amount,
  421.         vStatusMapping AS status_doc_so, C.workflow_status, A.status_doc AS status_doc_mou,
  422.         SUM(D.tax_amount)*-1 AS usage_amount_tax, (SUM(D.add_amount) + SUM(D.tax_amount))*-1 AS total_usage_amount
  423.     FROM tt_sl_mou_list A
  424.         INNER JOIN fi_invoice_ar_tagging B ON A.mou_id = B.tag_doc_id AND B.tag_key = vTagKeyMOU
  425.         INNER JOIN fi_invoice_ar C ON B.invoice_ar_id = C.invoice_ar_id
  426.         INNER JOIN fi_invoice_ar_cost D ON C.invoice_ar_id = D.invoice_ar_id
  427.     WHERE A.session_id = pSessionId
  428.         AND C.status_doc IN (vStatusReleased,vStatusFinal)
  429.         AND C.doc_type_id = 251
  430.         AND f_is_invoice_ar_cost_unvalid_by_activity_gl_code(C.invoice_ar_id, vActivityGLCodeInsentif, A.tenant_id) = vFlagYes
  431.     GROUP BY A.tenant_id, A.ou_id, A.mou_id, A.doc_date, A.doc_no,
  432.         A.period_from, A.period_to, A.partner_id, A.curr_code, A.plafon_amount,
  433.         C.invoice_ar_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id, C.curr_code,
  434.         C.workflow_status, A.status_doc;
  435.    
  436.     /* Insert data DN AR yang dimapping ke MOU */
  437.     INSERT INTO tt_sl_r_limit_detail_mou_list(
  438.         session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  439.         period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  440.         doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,usage_amount ,
  441.         status_doc ,workflow_status ,status_doc_mou,
  442.         usage_amount_tax, total_usage_amount)
  443.     SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  444.         A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  445.         C.invoice_ar_id AS doc_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id, C.curr_code, C.total_amount AS usage_amount,
  446.         vStatusMapping AS status_doc_so, C.workflow_status, A.status_doc AS status_doc_mou,
  447.         C.tax_amount AS usage_amount_tax, (C.total_amount + C.tax_amount) AS total_usage_amount
  448.     FROM tt_sl_mou_list A
  449.         INNER JOIN fi_invoice_ar_tagging B ON A.mou_id = B.tag_doc_id AND B.tag_key = vTagKeyMOU
  450.         INNER JOIN fi_invoice_ar C ON B.invoice_ar_id = C.invoice_ar_id
  451.     WHERE A.session_id = pSessionId
  452.         AND C.status_doc IN (vStatusReleased,vStatusFinal)
  453.         AND C.doc_type_id = 241;
  454.            
  455.     Open pRefHeader FOR
  456.         SELECT 12 AS _COUNT, 'LAPORAN LIMIT CUSTOMER (DETAIL)',
  457.             '', '', '', '', '', '',
  458.             '', '', '', '', '',
  459.             1 AS ordial
  460.            
  461.         UNION
  462.        
  463.         SELECT 12 AS _COUNT,
  464.             '', '', '', '', '', '',
  465.             '', '', '', '', '', '',
  466.             2 AS ordial
  467.            
  468.         UNION
  469.        
  470.         SELECT 12 AS _COUNT, 'OU', ': ' || f_get_ou_name(pOuId),
  471.             '', '', '', '',
  472.             '', '', '', '',
  473.             'PRINT DATE', ': ' || TO_CHAR(TO_TIMESTAMP(pDatetime, 'YYYYMMDDHH24MISS'), 'Day, DD Month, YYYY, HH:MI:SS'),
  474.             3 AS ordial
  475.            
  476.         UNION
  477.        
  478.         SELECT 12 AS _COUNT, 'PERIOD', ': ' || TO_CHAR(TO_DATE(pPeriodFrom,'YYYYMMDD'), 'DD/MM/YYYY') || ' s/d ' || TO_CHAR(TO_DATE(pPeriodTo,'YYYYMMDD'), 'DD/MM/YYYY'),
  479.             '', '', '', '',
  480.             '', '', '', '',
  481.             'USER – ROLE', ': ' || f_get_username(pUserId) || ' - ' || f_get_role_name(pRoleId),
  482.             4 AS ordial
  483.            
  484.         UNION
  485.        
  486.         SELECT 12 AS _COUNT, 'CUSTOMER', ': ' || vPartnerCodeMou || ' / ' || vPartnerNameMou,
  487.             '', '', '', '',
  488.             '', '', '', '', '', '',
  489.             5 AS ordial
  490.  
  491.         UNION
  492.        
  493.         SELECT 12 AS _COUNT,
  494.             '', '', '', '', '', '',
  495.             '', '', '', '', '', '',
  496.             6 AS ordial
  497.            
  498.         UNION
  499.        
  500.         SELECT 12 AS _COUNT,
  501.             'MOU No', 'MOU Date', 'Start Period', 'End Period',
  502.             'Nilai Paket', 'Doc No', 'Doc Date', 'Currency',
  503.             'Usage Amount', 'Sisa Plafon', 'Owner Code', 'Owner Name',
  504.             7 AS ordial
  505.            
  506.         ORDER BY ordial;
  507.     RETURN NEXT pRefHeader;
  508.      
  509.    
  510.     FOR vDocNoMou IN (
  511.         SELECT A.doc_no_mou
  512.         FROM tt_sl_r_limit_detail_mou_list A
  513.         GROUP BY A.doc_no_mou
  514.     ) LOOP
  515.        
  516.         PERFORM SETVAL('tt_sl_r_limit_detail_mou_list_for_csv_detail_line_no_seq', 0);
  517.        
  518.         INSERT INTO tt_sl_r_limit_detail_mou_list_for_csv_detail(
  519.             session_id, doc_no_mou,
  520.             doc_date_mou, period_from, period_to,
  521.             curr_code_mou, plafon_amount,
  522.             doc_no, doc_date,
  523.             curr_code,
  524.             total_usage_amount,
  525.             remaining_plafon_amount, owner_code, owner_name,
  526.             ordial, line_no)
  527.         SELECT pSessionId, A.doc_no_mou,
  528.             TO_CHAR(TO_DATE(A.doc_date_mou,'YYYYMMDD'), 'DD/MM/YYYY'), TO_CHAR(TO_DATE(A.period_from,'YYYYMMDD'), 'DD/MM/YYYY'), TO_CHAR(TO_DATE(A.period_to,'YYYYMMDD'), 'DD/MM/YYYY'),             
  529.             A.curr_code_mou, CAST(A.plafon_amount AS character varying) AS plafon_amount,
  530.             A.doc_no, TO_CHAR(TO_DATE(A.doc_date,'YYYYMMDD'), 'DD/MM/YYYY'),
  531.             A.curr_code,
  532.             CAST((CASE WHEN A.doc_type_id = vDocTypeIdReturnNote THEN (A.total_usage_amount * -1)
  533.                   ELSE A.total_usage_amount
  534.             END) AS character varying) AS total_usage_amount,
  535.             '', B.partner_code AS owner_code, B.partner_name AS owner_name,
  536.             i AS ordial, NEXTVAL('tt_sl_r_limit_detail_mou_list_for_csv_detail_line_no_seq') AS line_no
  537.         FROM tt_sl_r_limit_detail_mou_list A
  538.             INNER JOIN m_partner B ON A.partner_id = B.partner_id
  539.         WHERE A.session_id = pSessionId AND
  540.             A.doc_no_mou = vDocNoMou
  541.             --AND A.usage_amount <> 0
  542.         ORDER BY A.doc_no_mou,B.partner_code, A.doc_date_mou, A.doc_no, A.doc_type_id, A.doc_date ASC ;
  543.        
  544.         INSERT INTO tt_sl_r_limit_detail_mou_list_for_csv_detail(
  545.             session_id, doc_no_mou, doc_date_mou, period_from, period_to, curr_code_mou,
  546.             plafon_amount, doc_no, doc_date, curr_code, total_usage_amount,
  547.             remaining_plafon_amount, owner_code, owner_name, ordial, line_no)
  548.         SELECT pSessionId, '', '', '', '', '',
  549.             '', 'Sub Total', '',
  550.             A.curr_code,
  551.             CAST(SUM(A.total_usage_amount::numeric) AS character varying) AS total_usage_amount,
  552.             CAST((A.plafon_amount::numeric - SUM(A.total_usage_amount::numeric)) AS character varying) AS remaining_plafon_amount,
  553.             '', '',
  554.             i AS ordial, NEXTVAL('tt_sl_r_limit_detail_mou_list_for_csv_detail_line_no_seq') AS line_no
  555.         FROM tt_sl_r_limit_detail_mou_list_for_csv_detail A
  556.         WHERE A.session_id = pSessionId AND
  557.             A.doc_no_mou = vDocNoMou
  558.             --AND A.usage_amount <> 0
  559.         GROUP BY A.doc_no_mou, A.curr_code, A.plafon_amount;
  560.        
  561.         INSERT INTO tt_sl_r_limit_detail_mou_list_for_csv_detail(
  562.             session_id, doc_no_mou, doc_date_mou, period_from, period_to, curr_code_mou,
  563.             plafon_amount, doc_no, doc_date, curr_code, total_usage_amount,
  564.             remaining_plafon_amount, owner_code, owner_name, ordial, line_no)
  565.         VALUES (pSessionId, '', '', '', '', '',
  566.             '', '', '', '', '',
  567.             '', '', '',
  568.             i, NEXTVAL('tt_sl_r_limit_detail_mou_list_for_csv_detail_line_no_seq'));
  569.        
  570.         i := i + 1;
  571.     END LOOP;
  572.        
  573.     PERFORM SETVAL('tt_sl_r_limit_detail_mou_list_for_csv_detail_line_no_seq', 0);
  574.    
  575.     WITH tt_grouped_limit_mou AS(
  576.         SELECT A.curr_code_mou,
  577.             A.plafon_amount::numeric AS plafon_amount,
  578.             A.curr_code,
  579.             SUM(A.total_usage_amount::numeric) AS total_usage_amount
  580.         FROM tt_sl_r_limit_detail_mou_list_for_csv_detail A
  581.         WHERE A.session_id = pSessionId AND
  582.             A.plafon_amount <> '' AND
  583.             A.total_usage_amount <> ''
  584.             --AND A.usage_amount <> 0
  585.         GROUP BY A.curr_code_mou, A.curr_code, A.plafon_amount
  586.     )
  587.     INSERT INTO tt_sl_r_limit_detail_mou_list_for_csv_detail(
  588.         session_id, doc_no_mou, doc_date_mou, period_from, period_to, curr_code_mou,
  589.         plafon_amount, doc_no, doc_date, curr_code, total_usage_amount,
  590.         remaining_plafon_amount, owner_code, owner_name, ordial, line_no)
  591.     SELECT pSessionId, 'Grand Total', '', '', '', A.curr_code_mou,
  592.         CAST(SUM(A.plafon_amount) AS character varying) AS plafon_amount, '', '',
  593.         A.curr_code,
  594.         CAST(SUM(A.total_usage_amount) AS character varying) AS total_usage_amount,
  595.         CAST((SUM(A.plafon_amount) - SUM(A.total_usage_amount)) AS character varying) AS remaining_plafon_amount,
  596.         '', '',
  597.         i AS ordial, NEXTVAL('tt_sl_r_limit_detail_mou_list_for_csv_detail_line_no_seq') AS line_no
  598.     FROM tt_grouped_limit_mou A
  599.         --AND A.usage_amount <> 0
  600.     GROUP BY A.curr_code_mou, A.curr_code
  601.     ORDER BY A.curr_code_mou, A.curr_code;
  602.        
  603.     Open pRefDetail FOR
  604.    
  605.         SELECT doc_no_mou, doc_date_mou, period_from, period_to, curr_code_mou,
  606.             plafon_amount, doc_no, doc_date, curr_code, total_usage_amount,
  607.             remaining_plafon_amount, owner_code, owner_name, ordial
  608.         FROM tt_sl_r_limit_detail_mou_list_for_csv_detail A
  609.         WHERE A.session_id = pSessionId
  610.         ORDER BY A.ordial, A.line_no;
  611.    
  612.     RETURN NEXT pRefDetail;
  613.  
  614.     --Menghapus semua table temporrer
  615.     DELETE FROM tt_sl_r_limit_detail_mou_list WHERE session_id = pSessionId;
  616.     DELETE FROM tt_sl_mou_list WHERE session_id = pSessionId;
  617.     DELETE FROM tt_sl_so WHERE session_id = pSessionId;
  618.     DELETE FROM tt_sl_outstanding_so WHERE session_id = pSessionId;
  619.     DELETE FROM tt_sl_r_limit_detail_mou_list_for_csv_detail WHERE session_id = pSessionId;
  620.    
  621. END;
  622. $BODY$
  623.   LANGUAGE plpgsql VOLATILE
  624.   COST 100
  625.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement