Advertisement
aadddrr

Untitled

Mar 7th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION r_sls_commission_for_igs(character varying, bigint, bigint, bigint, character varying, bigint, bigint, bigint, character varying, character varying, bigint, bigint, bigint)
  2.   RETURNS SETOF refcursor AS
  3. $BODY$
  4. DECLARE
  5.     pRefHeader              REFCURSOR := 'refHeader';
  6.     pRefDetail              REFCURSOR := 'refDetail';
  7.     pSessionId              ALIAS FOR $1;
  8.     pTenantId               ALIAS FOR $2;
  9.     pUserId                 ALIAS FOR $3;
  10.     pRoleId                 ALIAS FOR $4;
  11.     pDatetime               ALIAS FOR $5;
  12.     pOuId                   ALIAS FOR $6;
  13.     pSalesId                ALIAS FOR $7;
  14.     pYear                   ALIAS FOR $8;
  15.     pQuarterCode            ALIAS FOR $9;
  16.     pLineOfBusinessCode     ALIAS FOR $10;
  17.     pBrandId                ALIAS FOR $11;
  18.     pCtgrProductId          ALIAS FOR $12;
  19.     pSubCtgrProductId       ALIAS FOR $13;
  20.    
  21.     result                      RECORD;
  22.     vMonthFrom                  character varying(4);
  23.     vMonthTo                    character varying(4);
  24.     vDateFrom                   character varying(8);
  25.     vDateTo                     character varying(8);
  26.     vMainCoaExtCommission       character varying(10);
  27.     vSubCoaExtCommission        character varying(10);
  28.     vCurrGL                     character varying(5);
  29.     vOneMonthAfterDateTo        character varying(6);
  30.     vOneMonthBeforeDateTo       character varying(6);
  31.     vOneMonthBeforeDateFrom     character varying(6);
  32.     vComboId                    character varying := 'DIGITCURRENCY';
  33.     vCurrCodeUSD                character varying := 'USD';
  34.     vCurrCodeIDR                character varying := 'IDR';
  35.     vRoundingDigitUSD           integer;
  36.     vRoundingDigitIDR           integer;
  37.     vEmptyId                    bigint := -99;
  38.     vNol                        numeric := 0;
  39.     vOne                        numeric := 1;
  40.     vDefault                    character varying := 'DEFAULT';
  41.     vEmptyString                character varying := '';
  42.     vSpace                      character varying := ' ';
  43.    
  44.     vNo                         character varying := 'N';
  45.     vYes                        character varying := 'Y';
  46.     vStatusDocDraft             character varying := 'D';
  47.     vStatusDocRelease           character varying := 'R';
  48.     vGroupSegmentOthers         character varying := 'OTHERS';
  49.     vGroupSegmentSo             character varying := 'SO';
  50.     vTypeExcRateCom             character varying := 'COM';
  51.     vTypeExcRateTax             character varying := 'TAX';
  52.     vDocTypeSalesInvoice        bigint := 321;
  53.     vDocTypeReturnSalesInvoice  bigint := 331;
  54.     vDocTypeRg                  bigint := 111;
  55.     vPrevClosingYearMonth       character varying(6);
  56.    
  57.    
  58.     vCoaIdExtCommission         bigint;
  59.     vTwoMonthsFromDateTo        character varying(6);
  60. BEGIN
  61.     /*
  62.      * ambil nilai date from dan date to
  63.      * ambil nilai pembulatan
  64.      * ambil nilai valuta buku
  65.      * ambil coa id
  66.      * ambil 1 bulan setelah date to dan 1 bulan sebelum date from
  67.      * delete fi_temp_summary_monthly_ar date_year_month des-apr
  68.      * insert dari fi_summary_monthly_ar
  69.      * ambil bulan terakhir tutup bulan
  70.      * menjalankan function tutup bulan sementara
  71.      * ambil data hasil tutup bulan sementara dan join ke tabel so (invoice yg pelunasannya sampe sebulan setelahnya)
  72.      * ambil data yg doc_datenya sebulan sebelum dateFrom dan pelunasannya sebulan sebelum dateTo
  73.      * update nilai price_idr
  74.      * update table temporary for numerator_rate, denominator_rate, price_idr
  75.      * update item_amount menjadi IDR
  76.      * ambil others cost
  77.      * update table cost tr_data_so_sales_for_commission non ext commission
  78.      * update table cost tr_data_so_sales_for_commission ext commission
  79.      */
  80.    
  81.     DELETE FROM tr_data_so_sales_commission_for_igs WHERE session_id = pSessionId;
  82.    
  83.     --ambil nilai dateFrom dan dateTo
  84.     SELECT month_from, month_to
  85.     FROM dt_period_quarter
  86.     WHERE quarter = pQuarterCode INTO result;
  87.     vMonthFrom := result.month_from;
  88.     vMonthTo := result.month_to;
  89.    
  90.     vDateFrom := pYear || vMonthFrom;
  91.     vDateTo := pYear || vMonthTo;
  92.    
  93.     /* ambil nilai pembulatan*/
  94.     vRoundingDigitUSD := CAST(f_get_digit_decimal_currency(vComboId,vCurrCodeUSD) AS integer);
  95.     vRoundingDigitIDR := CAST(f_get_digit_decimal_currency(vComboId,vCurrCodeIDR) AS integer);
  96.    
  97.     /* ambil valuta buku */
  98.     vCurrGL := f_get_value_system_config_by_param_code(pTenantId,'ValutaBuku');
  99.    
  100.     /* ambil coa id */
  101.     vMainCoaExtCommission := f_get_value_system_config_by_param_code(pTenantId,'MainCoaExtCommission');
  102.     vSubCoaExtCommission := f_get_value_system_config_by_param_code(pTenantId,'SubCoaExtCommission');
  103.    
  104.     SELECT coa_id INTO vCoaIdExtCommission
  105.     FROM m_coa
  106.     WHERE main_acc = vMainCoaExtCommission
  107.         AND sub_acc = vSubCoaExtCommission;
  108.        
  109.     /* ambil 1 bulan setelah date to dan 1 bulan sebelum date from*/
  110.     SELECT TO_CHAR(TO_DATE(vDateTo,'YYYYMMDD') + interval '1 Month','YYYYMM') INTO vOneMonthAfterDateTo;
  111.     SELECT TO_CHAR(TO_DATE(vDateTo,'YYYYMMDD') - interval '1 Month','YYYYMM') INTO vOneMonthBeforeDateTo;
  112.     SELECT TO_CHAR(TO_DATE(vDateFrom,'YYYYMMDD') - interval '1 Month','YYYYMM') INTO vOneMonthBeforeDateFrom;
  113.    
  114.     -- delete fi_temp_summary_monthly_ar
  115.     DELETE FROM fi_temp_summary_monthly_ar
  116.     WHERE date_year_month BETWEEN vOneMonthBeforeDateFrom AND vOneMonthAfterDateTo;
  117.    
  118.     --insert dari fi_summary_monthly_ar
  119.     INSERT INTO fi_temp_summary_monthly_ar(date_year_month, tenant_id, ou_id, doc_type_id, invoice_id,
  120.         invoice_amount, balance_amount, payment_amount, curr_code, version,
  121.         create_datetime, create_user_id, update_datetime, update_user_id)
  122.     SELECT A.date_year_month, A.tenant_id, A.ou_id, A.doc_type_id, A.invoice_id,
  123.         A.invoice_amount, A.balance_amount, A.payment_amount, A.curr_code, vNol,
  124.         pDatetime, pUserId, pDatetime, pUserId
  125.     FROM fi_summary_monthly_ar A
  126.     INNER JOIN m_ou_structure B ON A.ou_id = B.ou_id
  127.     WHERE A.date_year_month BETWEEN vOneMonthBeforeDateFrom AND vOneMonthAfterDateTo
  128.     AND B.ou_bu_id = pOuId;
  129.    
  130.     /* ambil bulan terakhir tutup bulan */
  131.     SELECT MAX(date_year_month) INTO vPrevClosingYearMonth
  132.     FROM m_admin_process_ledger
  133.     WHERE ou_id = pOuId
  134.         AND ledger_code = 'FIN.AR'
  135.         AND status_ledger = '1';
  136.        
  137.     /* menjalankan function tutup bulan sementara */
  138.     WHILE vPrevClosingYearMonth < vOneMonthAfterDateTo LOOP
  139.         SELECT TO_CHAR(TO_DATE(vPrevClosingYearMonth,'YYYYMM') + interval '1 Month','YYYYMM') INTO vPrevClosingYearMonth;
  140.         PERFORM fi_temp_summary_ar(pTenantId,pSessionId,pOuId,vPrevClosingYearMonth,pDatetime,pUserId);
  141.     END LOOP;
  142.    
  143.     --ambil data hasil tutup bulan sementara dan join ke tabel so (invoice yg pelunasannya sampe sebulan setelahnya)
  144.     WITH vw_fi_all_invoice_ar_for_commission AS (
  145.         SELECT A.invoice_ar_balance_id AS id, A.doc_type_id, A.invoice_ar_id
  146.         FROM fi_invoice_ar_balance A
  147.         INNER JOIN m_ou_structure C ON A.ou_id = C.ou_id
  148.         WHERE A.tenant_id = pTenantId
  149.         AND C.ou_bu_id = pOuId
  150.        
  151.         UNION ALL
  152.        
  153.         SELECT a.invoice_tax_ar_balance_id AS id, a.doc_type_id, b.invoice_ar_id
  154.         FROM fi_invoice_tax_ar_balance a
  155.         INNER JOIN fi_invoice_ar_balance b on a.invoice_ar_balance_id = b.invoice_ar_balance_id
  156.         INNER JOIN m_ou_structure D ON A.ou_id = D.ou_id
  157.         AND A.tenant_id = pTenantId
  158.         AND D.ou_bu_id = pOuId
  159.     )
  160.     --ambil data hasil tutup bulan sementara dan join ke tabel so (invoice yg pelunasannya sampe sebulan setelahnya)
  161.     INSERT INTO tr_data_so_sales_commission_for_igs(
  162.             session_id, tenant_id, date_year_month, invoice_id, doc_type_id,
  163.             inv_curr_code, inv_doc_no, inv_doc_date, ou_id, so_id,
  164.             so_doc_no, so_doc_date, do_id, do_item_id, original_total_amount,
  165.             so_item_id, product_id, qty_dlv_int, base_uom_id, partner_id,
  166.             salesman_id, brand_id, line_of_business, numerator_rate, denominator_rate,
  167.             original_price, total_amount_idr, total_amount_usd, other_costs, other_costs_idr,
  168.             other_costs_usd, other_costs_curr_code, other_cost_ext_commission, warranty_sell_amount)
  169.     SELECT pSessionId, pTenantId, ' ', A.invoice_id, A.doc_type_id,
  170.         A.curr_code, B.doc_no, B.doc_date, A.ou_id, B.ref_id,
  171.         G.doc_no, G.doc_date, C.ref_id, C.ref_item_id, CASE WHEN A.doc_type_id = vDocTypeReturnSalesInvoice THEN -1 * SUM(C.ref_item_amount) ELSE SUM(C.ref_item_amount) END,
  172.         F.so_item_id, F.product_id, CASE WHEN A.doc_type_id = vDocTypeReturnSalesInvoice THEN SUM(-1*(F.qty_int * D.qty_dlv_so)/F.qty_so) ELSE SUM((F.qty_int * D.qty_dlv_so)/F.qty_so) END, F.base_uom_id, G.partner_id,
  173.         G.salesman_id, I.brand_id, J.line_of_business, vOne, vOne,
  174.         vNol, vNol, vNol, vNol, vNol,
  175.         vNol, vCurrCodeIdr, vNol, vNol
  176.     FROM fi_temp_summary_monthly_ar A
  177.     INNER JOIN vw_fi_all_invoice_ar_for_commission H ON A.doc_type_id = H.doc_type_id AND A.invoice_id = H.id
  178.     INNER JOIN sl_invoice B ON H.invoice_ar_id = B.invoice_id AND B.doc_type_id = H.doc_type_id
  179.     INNER JOIN sl_invoice_item C ON B.invoice_id = C.invoice_id
  180.     INNER JOIN sl_so_balance_invoice D ON B.tenant_id = D.tenant_id AND B.ou_id = D.ou_id AND B.partner_id = D.partner_id
  181.         AND C.ref_doc_type_id = D.ref_doc_type_id AND C.ref_id = D.ref_id AND C.ref_item_id = D.ref_item_id
  182.         AND C.do_receipt_item_id = D.do_receipt_item_id
  183.     INNER JOIN sl_do_item E ON C.ref_item_id = E.do_item_id
  184.     INNER JOIN sl_so_item F ON E.ref_id = F.so_item_id
  185.     INNER JOIN sl_so G ON F.so_id = G.so_id
  186.     INNER JOIN m_product I ON F.product_id = I.product_id
  187.     INNER JOIN m_partner J ON J.partner_id = G.partner_id
  188.     /*LEFT JOIN sl_so_balance_warranty_invoice L ON B.tenant_id = L.tenant_id AND L.ou_id = B.ou_id AND L.partner_id = B.partner_id
  189.         AND L.ref_doc_type_id = C.ref_doc_type_id AND L.ref_id = C.ref_id AND L.ref_item_id = C.ref_item_id
  190.         AND L.do_receipt_item_id = C.do_receipt_item_id*/
  191.     WHERE A.doc_type_id IN (vDocTypeSalesInvoice, vDocTypeReturnSalesInvoice)
  192.         AND A.date_year_month BETWEEN SUBSTRING(vDateFrom, 1, 6) AND vOneMonthAfterDateTo
  193.         AND (pSalesId = vEmptyId OR G.salesman_id = pSalesId)
  194.         AND (pBrandId = vEmptyId OR I.brand_id = pBrandId)
  195.         AND (pCtgrProductId = vEmptyId OR I.ctgr_product_id = pCtgrProductId)
  196.         AND (pSubCtgrProductId = vEmptyId OR I.sub_ctgr_product_id = pSubCtgrProductId)
  197.         AND (pLineOfBusinessCode = vEmptyString OR J.line_of_business = pLineOfBusinessCode)
  198.         AND B.doc_date BETWEEN vDateFrom and vDateTo
  199.         AND F.qty_so > 0
  200.         AND A.date_year_month = (
  201.             SELECT MAX(Z.date_year_month)
  202.             FROM fi_temp_summary_monthly_ar Z
  203.             WHERE A.invoice_id = Z.invoice_id
  204.             AND A.doc_type_id = Z.doc_type_id
  205.             AND A.ou_id = Z.ou_id
  206.             AND A.tenant_id = Z.tenant_id
  207.         )
  208.     GROUP BY A.invoice_id, A.doc_type_id, J.line_of_business, A.ou_id, A.curr_code, B.doc_no, B.doc_date, B.ref_id, C.ref_id, C.ref_item_id,
  209.         F.so_item_id, F.product_id, I.product_code, I.product_name, F.base_uom_id, G.partner_id, I.brand_id, G.salesman_id, G.doc_no, G.doc_date;
  210.        
  211.     WITH vw_fi_all_invoice_ar_for_commission AS (
  212.         SELECT A.invoice_ar_balance_id AS id, A.doc_type_id, A.invoice_ar_id
  213.         FROM fi_invoice_ar_balance A
  214.         INNER JOIN m_ou_structure D ON A.ou_id = D.ou_id
  215.         WHERE A.tenant_id = pTenantId
  216.         AND D.ou_bu_id = pOuId
  217.        
  218.         UNION ALL
  219.        
  220.         SELECT a.invoice_tax_ar_balance_id AS id, a.doc_type_id, b.invoice_ar_id
  221.         FROM fi_invoice_tax_ar_balance a
  222.         INNER JOIN fi_invoice_ar_balance b on a.invoice_ar_balance_id = b.invoice_ar_balance_id
  223.         INNER JOIN m_ou_structure D ON A.ou_id = D.ou_id
  224.         AND A.tenant_id = pTenantId
  225.         AND D.ou_bu_id = pOuId
  226.     )
  227.    
  228.     --ambil data yg doc_datenya sebulan sebelum dateFrom dan pelunasannya satu bulan sebelum date to
  229.     INSERT INTO tr_data_so_sales_commission_for_igs(
  230.             session_id, tenant_id, date_year_month, invoice_id, doc_type_id,
  231.             inv_curr_code, inv_doc_no, inv_doc_date, ou_id, so_id,
  232.             so_doc_no, so_doc_date, do_id, do_item_id, original_total_amount,
  233.             so_item_id, product_id, qty_dlv_int, base_uom_id, partner_id,
  234.             salesman_id, brand_id, line_of_business, numerator_rate, denominator_rate,
  235.             original_price, total_amount_idr, total_amount_usd, other_costs, other_costs_idr,
  236.             other_costs_usd, other_costs_curr_code,other_cost_ext_commission, warranty_sell_amount)
  237.     SELECT pSessionId, pTenantId, ' ', A.invoice_id, A.doc_type_id,
  238.         A.curr_code, B.doc_no, B.doc_date, A.ou_id, B.ref_id,
  239.         G.doc_no, G.doc_date, C.ref_id, C.ref_item_id, CASE WHEN A.doc_type_id = vDocTypeReturnSalesInvoice THEN -1 * SUM(C.ref_item_amount) ELSE SUM(C.ref_item_amount) END,
  240.         F.so_item_id, F.product_id, CASE WHEN A.doc_type_id = vDocTypeReturnSalesInvoice THEN SUM(-1*(F.qty_int * D.qty_dlv_so)/F.qty_so) ELSE SUM((F.qty_int * D.qty_dlv_so)/F.qty_so) END, F.base_uom_id, G.partner_id,
  241.         G.salesman_id, I.brand_id, J.line_of_business, vOne, vOne,
  242.         vNol, vNol, vNol, vNol, vNol,
  243.         vNol, vCurrCodeIdr, vNol, vNol
  244.     FROM fi_temp_summary_monthly_ar A
  245.     INNER JOIN vw_fi_all_invoice_ar_for_commission H ON A.doc_type_id = H.doc_type_id AND A.invoice_id = H.id
  246.     INNER JOIN sl_invoice B ON H.invoice_ar_id = B.invoice_id AND B.doc_type_id = H.doc_type_id
  247.     INNER JOIN sl_invoice_item C ON B.invoice_id = C.invoice_id
  248.     INNER JOIN sl_so_balance_invoice D ON B.tenant_id = D.tenant_id AND B.ou_id = D.ou_id AND B.partner_id = D.partner_id
  249.         AND C.ref_doc_type_id = D.ref_doc_type_id AND C.ref_id = D.ref_id AND C.ref_item_id = D.ref_item_id
  250.         AND C.do_receipt_item_id = D.do_receipt_item_id
  251.     INNER JOIN sl_do_item E ON C.ref_item_id = E.do_item_id
  252.     INNER JOIN sl_so_item F ON E.ref_id = F.so_item_id
  253.     INNER JOIN sl_so G ON F.so_id = G.so_id
  254.     INNER JOIN m_product I ON F.product_id = I.product_id
  255.     INNER JOIN m_partner J ON J.partner_id = G.partner_id
  256.     /*LEFT JOIN sl_so_balance_warranty_invoice L ON B.tenant_id = L.tenant_id AND L.ou_id = B.ou_id AND L.partner_id = B.partner_id
  257.         AND L.ref_doc_type_id = C.ref_doc_type_id AND L.ref_id = C.ref_id AND L.ref_item_id = C.ref_item_id
  258.         AND L.do_receipt_item_id = C.do_receipt_item_id*/
  259.     WHERE A.doc_type_id IN (vDocTypeSalesInvoice, vDocTypeReturnSalesInvoice)
  260.         AND A.date_year_month = vOneMonthBeforeDateTo
  261.         AND (pSalesId = vEmptyId OR G.salesman_id = pSalesId)
  262.         AND (pBrandId = vEmptyId OR I.brand_id = pBrandId)
  263.         AND (pCtgrProductId = vEmptyId OR I.ctgr_product_id = pCtgrProductId)
  264.         AND (pSubCtgrProductId = vEmptyId OR I.sub_ctgr_product_id = pSubCtgrProductId)
  265.         AND (pLineOfBusinessCode = vEmptyString OR J.line_of_business = pLineOfBusinessCode)
  266.         AND SUBSTRING(B.doc_date, 1, 6) = vOneMonthBeforeDateFrom
  267.         AND F.qty_so > 0
  268.         AND A.date_year_month = (
  269.             SELECT MAX(Z.date_year_month)
  270.             FROM fi_temp_summary_monthly_ar Z
  271.             WHERE A.invoice_id = Z.invoice_id
  272.             AND A.doc_type_id = Z.doc_type_id
  273.             AND A.ou_id = Z.ou_id
  274.             AND A.tenant_id = Z.tenant_id
  275.         )
  276.     GROUP BY A.invoice_id, A.doc_type_id, J.line_of_business, A.ou_id, A.curr_code, B.doc_no, B.doc_date, B.ref_id, C.ref_id, C.ref_item_id,
  277.         F.so_item_id, F.product_id, I.product_code, I.product_name, F.base_uom_id, G.partner_id, I.brand_id, G.salesman_id, G.doc_no, G.doc_date;
  278.  
  279.        
  280.     /*
  281.      * Adrian, Mar 7 2017
  282.      * Mennganti LEFT JOIN ke sl_so_balance_warranty_invoice menjadi update
  283.      */
  284.     WITH vw_warranty_sell_amount AS (
  285.         SELECT A.invoice_id, B.do_item_id, SUM(COALESCE(L.warranty_sell_amount, vNol)) AS sum_warranty_sell_amount
  286.         FROM tr_data_so_sales_commission_for_igs A
  287.         INNER JOIN sl_do_item B ON B.do_item_id = A.do_item_id
  288.         INNER JOIN sl_invoice_item C ON C.ref_item_id = B.do_item_id
  289.         INNER JOIN sl_invoice D ON D.invoice_id = C.invoice_id
  290.         INNER JOIN sl_so_balance_warranty_invoice L ON L.ou_id = D.ou_id AND L.partner_id = D.partner_id
  291.             AND L.ref_doc_type_id = C.ref_doc_type_id AND L.ref_id = C.ref_id AND L.ref_item_id = C.ref_item_id
  292.             AND L.do_receipt_item_id = C.do_receipt_item_id
  293.         WHERE A.session_id = pSessionId
  294.         GROUP BY A.invoice_id, B.do_item_id
  295.     )
  296.     UPDATE tr_data_so_sales_commission_for_igs A
  297.     SET warranty_sell_amount =
  298.         CASE WHEN A.doc_type_id = vDocTypeReturnSalesInvoice
  299.             THEN -1 * B.sum_warranty_sell_amount
  300.         ELSE
  301.             B.sum_warranty_sell_amount
  302.         END
  303.     FROM vw_warranty_sell_amount B
  304.     WHERE A.session_id = pSessionId
  305.         AND A.invoice_id = B.invoice_id
  306.         AND A.do_item_id = B.do_item_id;
  307.    
  308.        
  309.        
  310.     /* update nilai original_price and original total_amount */
  311.     UPDATE tr_data_so_sales_commission_for_igs A
  312.     SET original_price = A.original_total_amount / A.qty_dlv_int
  313.     WHERE A.qty_dlv_int <> 0;
  314.        
  315.     /* update table temporary for numerator_rate, denominator_rate */
  316.     UPDATE tr_data_so_sales_commission_for_igs A
  317.     SET numerator_rate = B.amount_to,
  318.         denominator_rate = B.amount_from
  319.     FROM m_exchange_rate B
  320.     WHERE A.session_id = pSessionId
  321.         AND A.inv_doc_date = B.date_from
  322.         AND B.type_exchange_rate = vTypeExcRateCom;
  323.        
  324.     /* others cost */
  325.     INSERT INTO tr_data_costs_sales_commission_for_igs(
  326.             session_id, tenant_id, ou_id, segment_id, so_id, gl_curr_code, gl_amount,
  327.             coa_id)
  328.     SELECT pSessionId, pTenantId, A.ou_bu_id, B.segmen_id, D.so_id, B.gl_curr_code, B.gl_amount,
  329.         B.coa_id
  330.     FROM gl_journal_trx A
  331.         INNER JOIN vw_gl_journal_trx_details B ON A.journal_trx_id = B.journal_trx_id
  332.         INNER JOIN m_segment_coa C ON B.segmen_id = C.segment_coa_id
  333.         INNER JOIN tr_data_so_sales_commission_for_igs D ON C.segment_coa_code = D.so_doc_no
  334.     WHERE A.status_doc = vStatusDocRelease
  335.         AND (C.group_segment = vGroupSegmentOthers OR C.group_segment = vGroupSegmentSo)
  336.     GROUP BY  A.ou_bu_id, B.segmen_id, D.so_id, B.gl_curr_code, B.gl_amount, B.coa_id
  337.     UNION ALL
  338.     SELECT pSessionId, pTenantId, A.ou_bu_id, B.segmen_id, D.so_id, B.gl_curr_code, ROUND(B.amount * B.numerator_rate / B.denominator_rate, vRoundingDigitUSD),
  339.         B.coa_id
  340.     FROM gl_journal_trx A
  341.         INNER JOIN vw_gl_journal_trx_details B ON A.journal_trx_id = B.journal_trx_id
  342.         INNER JOIN m_segment_coa C ON B.segmen_id = C.segment_coa_id
  343.         INNER JOIN tr_data_so_sales_commission_for_igs D ON C.segment_coa_code = D.so_doc_no
  344.     WHERE A.status_doc = vStatusDocDraft
  345.         AND (C.group_segment = vGroupSegmentOthers OR C.group_segment = vGroupSegmentSo)
  346.     GROUP BY A.ou_bu_id, B.segmen_id, D.so_id, B.gl_curr_code, B.amount, B.numerator_rate, B.denominator_rate, B.coa_id;
  347.        
  348.    
  349.     /* update table cost tr_data_so_sales_for_commission non ext commission */
  350.     UPDATE tr_data_so_sales_commission_for_igs B
  351.     SET other_costs = (SELECT CASE WHEN B.doc_type_id = vDocTypeReturnSalesInvoice THEN 0 ELSE COALESCE(SUM(A.gl_amount),0) END
  352.     FROM tr_data_costs_sales_commission_for_igs A WHERE A.so_id = B.so_id AND A.coa_id <> vCoaIdExtCommission AND A.session_id = B.session_id)
  353.     WHERE B.session_id = pSessionId
  354.         AND B.so_item_id = (SELECT MIN(K.so_item_id) FROM sl_so_item K WHERE K.so_id = B.so_id AND K.qty_so > 0);
  355.    
  356.     /* update table cost tr_data_so_sales_for_commission ext commission */
  357.     UPDATE tr_data_so_sales_commission_for_igs B
  358.     SET other_cost_ext_commission = (SELECT COALESCE(SUM(A.gl_amount),0) FROM tr_data_costs_sales_commission_for_igs A WHERE A.so_id = B.so_id AND A.coa_id = vCoaIdExtCommission AND A.session_id = B.session_id)
  359.     WHERE B.session_id = pSessionId
  360.         AND B.so_item_id = (SELECT MIN(K.so_item_id) FROM sl_so_item K WHERE K.so_id = B.so_id AND K.qty_so > 0);
  361.  
  362.     --update total_amount_usd
  363.     UPDATE tr_data_so_sales_commission_for_igs
  364.     SET total_amount_usd =
  365.         CASE WHEN inv_curr_code = 'IDR'
  366.                 THEN  (original_total_amount * denominator_rate)/numerator_rate
  367.             WHEN inv_curr_code = 'USD'
  368.                 THEN original_total_amount
  369.             ELSE vNol
  370.         END
  371.     WHERE qty_dlv_int <> 0;
  372.    
  373.     --update total_amount_idr
  374.     UPDATE tr_data_so_sales_commission_for_igs
  375.     SET total_amount_idr = CASE WHEN inv_curr_code = 'USD'
  376.                 THEN (original_total_amount * numerator_rate)/denominator_rate
  377.              WHEN inv_curr_code = 'IDR'
  378.                 THEN original_total_amount
  379.             ELSE vNol
  380.         END
  381.     WHERE qty_dlv_int <> 0;
  382.    
  383.     --update other_costs_usd
  384.     UPDATE tr_data_so_sales_commission_for_igs
  385.     SET other_costs_usd = (other_costs * denominator_rate)/numerator_rate
  386.     WHERE qty_dlv_int <> 0;
  387.    
  388.     -- update line_of_business yang kosong menjadi DEFAULT
  389.     UPDATE tr_data_so_sales_commission_for_igs
  390.     SET line_of_business = vDefault
  391.     WHERE line_of_business IN (vEmptyString,vSpace);
  392.    
  393.     /* update bulan pelunasan */
  394.     UPDATE tr_data_so_sales_commission_for_igs B
  395.     SET date_year_month = A.date_year_month
  396.     FROM fi_temp_summary_monthly_ar A
  397.     WHERE A.balance_amount = A.payment_amount
  398.     AND B.invoice_id = A.invoice_id
  399.     AND B.doc_type_id = A.doc_type_id
  400.     AND B.session_id = pSessionId
  401.     AND B.tenant_id = pTenantId;
  402.    
  403.     Open pRefHeader FOR
  404.     SELECT pOuId AS ou_id, f_get_ou_name(pOuId) AS ou_name, vDateFrom AS date_from, vDateTo AS date_to, pDatetime AS datetime, f_get_username(pUserId) AS username;
  405.     RETURN NEXT pRefHeader;
  406.        
  407.     Open pRefDetail FOR
  408.     SELECT A.line_of_business, f_get_partner_name(A.salesman_id) AS sales_name, f_get_partner_code(A.partner_id) AS partner_code, f_get_partner_name(A.partner_id) AS partner_name,
  409.         A.so_doc_date AS so_date, A.so_doc_no AS so_no, A.doc_type_id, A.inv_doc_date AS inv_date, A.inv_doc_no AS inv_no, f_get_brand_name(A.brand_id) as brand_name, f_get_product_code(A.product_id) AS product_code,
  410.         f_get_product_name(A.product_id) AS product_name, A.qty_dlv_int AS qty, A.inv_curr_code, (A.original_total_amount / A.qty_dlv_int) AS original_price,
  411.         A.denominator_rate/A.numerator_rate AS rate_to_usd, A.numerator_rate AS rate_to_idr, original_total_amount,
  412.         A.total_amount_usd, A.total_amount_idr, A.other_costs_curr_code, A.other_costs, A.other_costs_usd, A.other_costs_idr, A.date_year_month,
  413.         A.warranty_sell_amount
  414.     FROM tr_data_so_sales_commission_for_igs A
  415.     LEFT OUTER JOIN sl_so_external_commission B ON A.so_id = B.so_id AND A.so_item_id = (SELECT MIN(K.so_item_id) FROM sl_so_item K WHERE K.so_id = B.so_id AND K.qty_so > 0)
  416.     WHERE A.session_id = pSessionId
  417.         AND A.qty_dlv_int <> 0
  418.     ORDER BY line_of_business, sales_name, partner_name, A.so_doc_no, A.doc_type_id, product_code;
  419.     RETURN NEXT pRefDetail;
  420.        
  421.  
  422.     DELETE FROM tr_data_so_sales_commission_for_igs WHERE session_id = pSessionId;
  423. END;
  424. $BODY$
  425.   LANGUAGE plpgsql VOLATILE
  426.   COST 100
  427.   ROWS 1000;
  428. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement