Advertisement
aadddrr

r_achievement_vs_target_csv_20180424

Apr 23rd, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION r_achievement_vs_target_csv(character varying, bigint, bigint, bigint, character varying, bigint, bigint, bigint, character varying, character varying, character varying)
  2.   RETURNS SETOF refcursor AS
  3. $BODY$
  4. DECLARE
  5.     pRefHeader                  REFCURSOR := 'refHeader';
  6.     pRefDetailSummary           REFCURSOR := 'refDetailSummary';
  7.     pRefDetail                  REFCURSOR := 'refDetail';
  8.     pSessionId                  ALIAS FOR $1;
  9.     pTenantId                   ALIAS FOR $2;
  10.     pUserId                     ALIAS FOR $3;
  11.     pRoleId                     ALIAS FOR $4;
  12.     pDatetime                   ALIAS FOR $5;
  13.    
  14.     pOuId                       ALIAS FOR $6;
  15.     pSalesmanId                 ALIAS FOR $7;
  16.     pCustomerId                 ALIAS FOR $8;
  17.     pYear                       ALIAS FOR $9;
  18.     pPeriod                     ALIAS FOR $10;
  19.     pGroupBrand                 ALIAS FOR $11;
  20.  
  21.     vPartnerCodeMou                 character varying(50);
  22.     vPartnerNameMou                 character varying(100);
  23.     vDocTypeIdSOByBrand             bigint;
  24.     vStatusReleased                 character varying(1);
  25.     vStatusFinal                    character varying(1);
  26.     vStatusInProgress               character varying(1);
  27.     vStatusDraft                    character varying(1);
  28.     vDocTypeIdReturnNote                bigint;
  29.     vDocTypeIdSalesInvoice              bigint;
  30.     vDocTypeIdInvoiceTemp               bigint;
  31.     vDocTypeIdRRS                   bigint;
  32.     vStatusMapping                  character varying(1);
  33.     vStatusApproved                 character varying(1);
  34.     vRaw                        character varying(20);
  35.     vSummary                    character varying(20);
  36.     vEmptyId                    bigint;
  37.     vOne                        integer := 1;
  38.     vEmptyValue                 character varying;
  39.    
  40.     vFlagYes                    character varying(1) :='Y';
  41.     vFlagNo                     character varying(1) :='N';
  42.    
  43.     vCurrentDate                character varying;
  44.     vSystemCurrentYear          character varying;
  45.     vLastYear                   character varying;
  46.     vEndDate                    character varying;
  47.     vDateTo                     character varying;
  48.     vFlgTypeSOReg               character varying;
  49.     vZero                       numeric;
  50.     vDocTypeIdSOB               bigint;
  51.     vComboGroupBrand            character varying;
  52.     vArraySeparator             character varying;
  53.     vQuote                      character varying;
  54.     vDocTypeIdReturnInvoice     bigint;
  55.     vDocTypeIdCNAR              bigint;
  56.     vDocTypeIdDNAR              bigint;
  57.     i                           bigint;
  58.     vFilterCustomer             character varying;
  59.     vDecimalNo                  int;
  60.     vFilterGroupBrand           character varying;
  61.     vConfigSeparator            character varying;
  62.     vConfigPrefix               character varying;
  63.     vSalesmanLevel              bigint;
  64.     vFilterSalesman             character varying;
  65.     vSpaceValue                 character varying;
  66.     vDash                       character varying;
  67.     vPositionLevelManager       bigint;        
  68.    
  69. BEGIN
  70.    
  71.     vPartnerCodeMou := ' ';
  72.     vPartnerNameMou := ' ';
  73.     vDocTypeIdSOByBrand := 398;
  74.     vStatusReleased := 'R';
  75.     vStatusFinal := 'F';
  76.     vStatusInProgress := 'I';
  77.     vStatusDraft := 'D';
  78.     vDocTypeIdReturnNote := 502;
  79.     vDocTypeIdSalesInvoice := 321;
  80.     vDocTypeIdInvoiceTemp := 361;
  81.     vDocTypeIdRRS :=381;
  82.     vStatusMapping := 'M';
  83.     vStatusApproved := 'A';
  84.     vRaw := 'RAW';
  85.     vSummary := 'SUMMARY';
  86.     vEmptyId := -99;
  87.     vEmptyValue := '';
  88.     vEndDate := '1231';
  89.     vFlgTypeSOReg := 'REG';
  90.     vZero := 0;
  91.     vDocTypeIdSOB := 398;
  92.     vComboGroupBrand := 'GROUPBRANDPARENT';
  93.     vArraySeparator := ', ';
  94.     vQuote := '''';
  95.     vDocTypeIdReturnInvoice := 380;
  96.     vDocTypeIdCNAR := 251;
  97.     vDocTypeIdDNAR := 241;
  98.     i := 5; --Level salesman senior
  99.     vFilterCustomer := '';
  100.     vDecimalNo := 2;
  101.     vFilterGroupBrand := '';
  102.     vConfigSeparator := ';';
  103.     vConfigPrefix := 'ACTIVITY_GL_GROUP_BRAND_';
  104.     vSalesmanLevel := -99;
  105.     vFilterSalesman := '';
  106.     vSpaceValue := ' ';
  107.     vDash := '-';
  108.     vPositionLevelManager := 3;
  109.    
  110.     SELECT TO_CHAR(current_timestamp, 'YYYY') INTO vSystemCurrentYear;
  111.     SELECT TO_CHAR(TO_DATE(pYear,'YYYY') - INTERVAL '1 Year','YYYY') INTO vLastYear;
  112.    
  113.     IF (pYear >= vSystemCurrentYear) THEN
  114.         SELECT TO_CHAR(current_timestamp, 'YYYYMMDD') INTO vDateTo;
  115.     ELSIF (pYear < vSystemCurrentYear) THEN
  116.         SELECT pYear || vEndDate INTO vDateTo;
  117.     END IF;
  118.    
  119.     SELECT f_get_salesman_level(pSalesmanId) INTO vSalesmanLevel;
  120.    
  121.     IF(vSalesmanLevel = 1) THEN
  122.         vFilterSalesman := ' AND A.bod_id = '||pSalesmanId||' ';
  123.     ELSIF (vSalesmanLevel = 2) THEN
  124.         vFilterSalesman := ' AND A.saso_id = '||pSalesmanId||' ';
  125.     ELSIF (vSalesmanLevel = 3) THEN
  126.         vFilterSalesman := ' AND A.sales_manager_id = '||pSalesmanId||' ';
  127.     ELSIF (vSalesmanLevel = 4) THEN
  128.         vFilterSalesman := ' AND A.sales_supervisor_id = '||pSalesmanId||' ';
  129.     ELSIF (vSalesmanLevel = 5) THEN
  130.         vFilterSalesman := ' AND A.salesman_id = '||pSalesmanId||' ';
  131.     ELSIF (vSalesmanLevel = 6) THEN
  132.         vFilterSalesman := ' AND A.salesman_junior_id = '||pSalesmanId||' ';
  133.     END IF;
  134.    
  135.     IF (pCustomerId <> vEmptyId) THEN
  136.         vFilterCustomer := ' AND A.customer_id = '|| pCustomerId ||' ';
  137.     END IF;
  138.    
  139.     IF (pGroupBrand <> vEmptyValue) THEN
  140.         vFilterGroupBrand := ' AND A.group_brand = '''|| pGroupBrand ||''' ';
  141.     END IF;
  142.    
  143.     DELETE FROM tt_salesman_customer_info_for_report_achievement_and_target WHERE session_id = pSessionId;
  144.     DELETE FROM tt_achievement_transaction_for_report_achievement_and_target WHERE session_id = pSessionId;
  145.     DELETE FROM tt_summary_for_report_achievement_and_target WHERE session_id = pSessionId;
  146.    
  147.     EXECUTE
  148.         'WITH tt_salesman_customer AS(
  149.             SELECT A.tenant_id, A.customer_id, B.partner_code AS customer_code,
  150.                 B.partner_name AS customer_name, G.city AS customer_city,
  151.                 A.salesman_junior_id, A.salesman_id, A.sales_supervisor_id,
  152.                 A.sales_manager_id, A.saso_id, A.bod_id,
  153.                 CASE WHEN (salesman_junior_id <> $4) THEN
  154.                     salesman_junior_id
  155.                 WHEN (salesman_id <> $4) THEN
  156.                     salesman_id
  157.                 WHEN (sales_supervisor_id <> $4) THEN
  158.                     sales_supervisor_id
  159.                 WHEN (sales_manager_id <> $4) THEN
  160.                     sales_manager_id
  161.                 WHEN (saso_id <> $4) THEN
  162.                     saso_id
  163.                 ELSE
  164.                     bod_id
  165.                 END AS salesman_handle_id, A.group_brand,
  166.                 $6, $6, $6, $6, $11
  167.             FROM m_mapping_salesman_hierarchy_customer A
  168.             INNER JOIN m_partner B ON A.customer_id = B.partner_id
  169.             INNER JOIN m_ctgr_partner C ON A.tenant_id = C.tenant_id AND B.ctgr_partner_id = C.ctgr_partner_id
  170.             INNER JOIN t_user_role D ON D.user_id = $7 AND D.role_id = $8
  171.             INNER JOIN m_policy_partner E ON B.ctgr_partner_id = E.ctgr_partner_id AND D.user_role_id = E.user_role_id
  172.             INNER JOIN m_partner_address G ON A.tenant_id = G.tenant_id AND A.customer_id = G.partner_id AND G.flg_default = $9
  173.             WHERE A.tenant_id = 10
  174.                 AND $3 BETWEEN A.date_from AND A.date_to
  175.                 AND $12 <> $4 '
  176.                 || vFilterSalesman
  177.                 || vFilterCustomer
  178.                 || vFilterGroupBrand ||
  179.         ')
  180.         INSERT INTO tt_salesman_customer_info_for_report_achievement_and_target(
  181.            session_id, tenant_id, customer_id, customer_code, customer_name,
  182.            customer_city, salesman_junior_id, salesman_id, sales_supervisor_id,
  183.            sales_manager_id, saso_id, bod_id, salesman_handle_id, salesman_handle_code,
  184.            salesman_handle_name, salesman_handle_level, group_brand, curr_code,
  185.            target_sales, q1_amount, q2_amount, q3_amount, flg_target
  186.         )
  187.         SELECT $1, A.tenant_id, A.customer_id, A.customer_code, A.customer_name,
  188.            A.customer_city, A.salesman_junior_id, A.salesman_id, A.sales_supervisor_id,
  189.            A.sales_manager_id, A.saso_id, A.bod_id, A.salesman_handle_id, f_get_partner_code(A.salesman_handle_id) AS salesman_handle_code,
  190.            f_get_partner_name(A.salesman_handle_id) AS salesman_handle_name, f_get_salesman_level(A.salesman_handle_id) AS salesman_handle_level, A.group_brand, $4,
  191.            $6, $6, $6, $6, $11
  192.         FROM tt_salesman_customer A
  193.         WHERE EXISTS (
  194.             SELECT 1
  195.             FROM m_partner_ou D
  196.             INNER JOIN m_ou_structure E
  197.                 ON ( E.ou_bu_id = D.ou_id
  198.                     OR E.ou_branch_id = D.ou_id
  199.                     OR E.ou_sub_bu_id = D.ou_id )
  200.             WHERE A.salesman_handle_id = D.partner_id
  201.                 AND e.ou_id = $10
  202.         ) AND f_get_salesman_level(A.salesman_handle_id) >= $13'
  203.     USING pSessionId, pTenantId, pPeriod, vEmptyId, vEmptyValue, vZero, pUserId, pRoleId, vFlagYes, pOuId, vFlagNo, vSalesmanLevel, vPositionLevelManager;
  204.                
  205.     UPDATE tt_salesman_customer_info_for_report_achievement_and_target A
  206.     SET curr_code = B.curr_code,
  207.         target_sales = B.target_sales,
  208.         q1_amount = B.q1_amount,
  209.         q2_amount = B.q2_amount,
  210.         q3_amount = B.q3_amount,
  211.         flg_target = vFlagYes
  212.     FROM m_customer_target_sales B
  213.     WHERE B.tenant_id = A.tenant_id
  214.         AND A.customer_id = B.customer_id
  215.         AND B.year = pYear
  216.         AND B.group_brand = A.group_brand;
  217.        
  218.     --Temporary Sales Invoice
  219.     EXECUTE
  220.     'INSERT INTO tt_achievement_transaction_for_report_achievement_and_target (
  221.         session_id, tenant_id, ou_id,
  222.         doc_id, doc_type_id, doc_no, doc_date, partner_id, curr_code, amount,
  223.         status_doc, workflow_status,
  224.         group_brand_parent_code
  225.     )
  226.     SELECT DISTINCT ON (D.so_id) $1, A.tenant_id, C.ou_id,
  227.         C.invoice_temp_id AS doc_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id, B.curr_code, B.amount,
  228.         C.status_doc AS status_doc_invoice_temp, C.workflow_status,
  229.         G.code
  230.     FROM tt_salesman_customer_info_for_report_achievement_and_target A
  231.     INNER JOIN fi_invoice_ar_balance B ON B.partner_id = A.customer_id
  232.     INNER JOIN sl_invoice_temp C ON C.invoice_temp_id = B.invoice_ar_id
  233.     INNER JOIN sl_so_info D ON D.so_id = C.ref_id
  234.     INNER JOIN sl_so_brand_item E ON E.so_id = D.so_id
  235.     INNER JOIN m_brand_ext F ON F.brand_id = E.brand_id
  236.     INNER JOIN t_combo_value G ON A.group_brand = G.code
  237.     WHERE A.session_id = $1 AND
  238.         C.tenant_id = $2 AND
  239.         C.ou_id = $3 AND
  240.         B.doc_type_id = $4 AND
  241.         C.ref_doc_type_id = $5 AND
  242.         D.flg_type_so = $6 AND
  243.         SUBSTR(C.doc_date, 1, 4) BETWEEN $7 AND $8 AND
  244.         G.combo_id = $9 AND
  245.         $11 || F.group_brand || $11 = ANY (string_to_array (G.prop_key, $10))'
  246.     USING pSessionId, pTenantId, pOuId, vDocTypeIdInvoiceTemp, vDocTypeIdSOB, vFlgTypeSOReg, vLastYear, pYear, vComboGroupBrand, vArraySeparator, vQuote;
  247.        
  248.     --Sales Invoice
  249.     EXECUTE
  250.     'INSERT INTO tt_achievement_transaction_for_report_achievement_and_target (
  251.         session_id, tenant_id, ou_id,
  252.         doc_id, doc_type_id, doc_no, doc_date, partner_id, curr_code, amount,
  253.         status_doc, workflow_status,
  254.         group_brand_parent_code
  255.     )
  256.     SELECT DISTINCT ON (D.so_id) $1, A.tenant_id, C.ou_id,
  257.         C.invoice_id AS doc_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id, B.curr_code, B.amount,
  258.         C.status_doc AS status_doc_invoice_temp, C.workflow_status,
  259.         G.code
  260.     FROM tt_salesman_customer_info_for_report_achievement_and_target A
  261.     INNER JOIN fi_invoice_ar_balance B ON B.partner_id = A.customer_id
  262.     INNER JOIN sl_invoice C ON C.invoice_id = B.invoice_ar_id
  263.     INNER JOIN sl_so_info D ON D.so_id = C.ref_id
  264.     INNER JOIN sl_so_brand_item E ON E.so_id = D.so_id
  265.     INNER JOIN m_brand_ext F ON F.brand_id = E.brand_id
  266.     INNER JOIN t_combo_value G ON A.group_brand = G.code
  267.     WHERE A.session_id = $1 AND
  268.         C.tenant_id = $2 AND
  269.         C.ou_id = $3 AND
  270.         B.doc_type_id = $4 AND
  271.         C.ref_doc_type_id = $5 AND
  272.         D.flg_type_so = $6 AND
  273.         SUBSTR(C.doc_date, 1, 4) BETWEEN $7 AND $8 AND
  274.         G.combo_id = $9 AND
  275.         $11 || F.group_brand || $11 = ANY (string_to_array (G.prop_key, $10))'
  276.     USING pSessionId, pTenantId, pOuId, vDocTypeIdSalesInvoice, vDocTypeIdSOB, vFlgTypeSOReg, vLastYear, pYear, vComboGroupBrand, vArraySeparator, vQuote;
  277.    
  278.     --Return
  279.     EXECUTE
  280.     'INSERT INTO tt_achievement_transaction_for_report_achievement_and_target (
  281.         session_id, tenant_id, ou_id,
  282.         doc_id, doc_type_id, doc_no, doc_date, partner_id, curr_code, amount,
  283.         status_doc, workflow_status,
  284.         group_brand_parent_code
  285.     )
  286.     SELECT DISTINCT ON (D.request_return_sales_id) $1, A.tenant_id, C.ou_id,
  287.         C.invoice_id AS doc_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id, B.curr_code, B.amount,
  288.         C.status_doc AS status_doc_invoice_temp, C.workflow_status,
  289.         G.code
  290.     FROM tt_salesman_customer_info_for_report_achievement_and_target A
  291.     INNER JOIN fi_invoice_ar_balance B ON B.partner_id = A.customer_id
  292.     INNER JOIN sl_invoice C ON C.invoice_id = B.invoice_ar_id
  293.     INNER JOIN sl_request_return_sales_brand_item D ON D.request_return_sales_id = C.ref_id
  294.     INNER JOIN m_brand_ext F ON F.brand_id = D.brand_id
  295.     INNER JOIN t_combo_value G ON A.group_brand = G.code
  296.     WHERE A.session_id = $1 AND
  297.         C.tenant_id = $2 AND
  298.         C.ou_id = $3 AND
  299.         B.doc_type_id = $4 AND
  300.         C.ref_doc_type_id = $5 AND
  301.         SUBSTR(C.doc_date, 1, 4) BETWEEN $7 AND $8 AND
  302.         G.combo_id = $9 AND
  303.         $11 || F.group_brand || $11 = ANY (string_to_array (G.prop_key, $10))'
  304.     USING pSessionId, pTenantId, pOuId, vDocTypeIdReturnInvoice, vDocTypeIdRRS, vFlgTypeSOReg, vLastYear, pYear, vComboGroupBrand, vArraySeparator, vQuote;
  305.    
  306.     --CN AR
  307.     EXECUTE
  308.     'INSERT INTO tt_achievement_transaction_for_report_achievement_and_target (
  309.         session_id, tenant_id, ou_id,
  310.         doc_id, doc_type_id, doc_no, doc_date, partner_id, curr_code, amount,
  311.         status_doc, workflow_status,
  312.         group_brand_parent_code
  313.     )
  314.     SELECT $1, A.tenant_id, C.ou_id,
  315.         C.invoice_ar_id AS doc_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id, B.curr_code, B.amount,
  316.         C.status_doc AS status_doc_invoice_temp, C.workflow_status,
  317.         G.code
  318.     FROM tt_salesman_customer_info_for_report_achievement_and_target A
  319.     INNER JOIN fi_invoice_ar_balance B ON B.partner_id = A.customer_id
  320.     INNER JOIN fi_invoice_ar C ON C.invoice_ar_id = B.invoice_ar_id
  321.     INNER JOIN t_combo_value G ON A.group_brand = G.code
  322.     WHERE A.session_id = $1 AND
  323.         C.tenant_id = $2 AND
  324.         C.ou_id = $3 AND
  325.         B.doc_type_id = $4 AND
  326.         SUBSTR(C.doc_date, 1, 4) BETWEEN $7 AND $8 AND
  327.         G.combo_id = $9 AND
  328.         EXISTS(
  329.             SELECT 1
  330.             FROM fi_invoice_ar_cost D
  331.             WHERE D.invoice_ar_id = C.invoice_ar_id AND
  332.                 f_get_activity_gl_code(D.activity_gl_id) = ANY (string_to_array (f_get_value_system_config_by_param_code($2, $13 || G.code), $12))
  333.         )'
  334.     USING pSessionId, pTenantId, pOuId, vDocTypeIdCNAR, vDocTypeIdCNAR, vFlgTypeSOReg, vLastYear, pYear, vComboGroupBrand, vArraySeparator, vQuote, vConfigSeparator, vConfigPrefix;
  335.    
  336.     --DN AR
  337.     EXECUTE
  338.     'INSERT INTO tt_achievement_transaction_for_report_achievement_and_target (
  339.         session_id, tenant_id, ou_id,
  340.         doc_id, doc_type_id, doc_no, doc_date, partner_id, curr_code, amount,
  341.         status_doc, workflow_status,
  342.         group_brand_parent_code
  343.     )
  344.     SELECT $1, A.tenant_id, C.ou_id,
  345.         C.invoice_ar_id AS doc_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id, B.curr_code, B.amount,
  346.         C.status_doc AS status_doc_invoice_temp, C.workflow_status,
  347.         G.code
  348.     FROM tt_salesman_customer_info_for_report_achievement_and_target A
  349.     INNER JOIN fi_invoice_ar_balance B ON B.partner_id = A.customer_id
  350.     INNER JOIN fi_invoice_ar C ON C.invoice_ar_id = B.invoice_ar_id
  351.     INNER JOIN t_combo_value G ON A.group_brand = G.code
  352.     WHERE A.session_id = $1 AND
  353.         C.tenant_id = $2 AND
  354.         C.ou_id = $3 AND
  355.         B.doc_type_id = $4 AND
  356.         SUBSTR(C.doc_date, 1, 4) BETWEEN $7 AND $8 AND
  357.         G.combo_id = $9 AND
  358.         EXISTS(
  359.             SELECT 1
  360.             FROM fi_invoice_ar_cost D
  361.             WHERE D.invoice_ar_id = C.invoice_ar_id AND
  362.                 f_get_activity_gl_code(D.activity_gl_id) = ANY (string_to_array (f_get_value_system_config_by_param_code($2, $13 || G.code), $12))
  363.         )'
  364.     USING pSessionId, pTenantId, pOuId, vDocTypeIdDNAR, vDocTypeIdDNAR, vFlgTypeSOReg, vLastYear, pYear, vComboGroupBrand, vArraySeparator, vQuote, vConfigSeparator, vConfigPrefix;
  365.    
  366.     WITH tt_grouped_summary AS (
  367.         SELECT A.tenant_id, A.salesman_handle_id AS salesman_id,  
  368.             A.target_sales AS target,
  369.             SUM(COALESCE(B.amount, 0)) AS year_to_date_accumulative_amount,
  370.             A.salesman_handle_level AS salesman_level,
  371.             A.group_brand AS group_brand_parent_code
  372.         FROM tt_salesman_customer_info_for_report_achievement_and_target A
  373.         LEFT JOIN tt_achievement_transaction_for_report_achievement_and_target B
  374.             ON B.partner_id = A.customer_id AND
  375.                 B.tenant_id = A.tenant_id AND
  376.                 SUBSTR(B.doc_date, 1, 4) = pYear AND
  377.                 B.group_brand_parent_code = A.group_brand
  378.         WHERE A.session_id = pSessionId AND
  379.             A.tenant_id = pTenantId AND
  380.             A.flg_target = vFlagYes
  381.         GROUP BY A.tenant_id, A.salesman_handle_id, A.target_sales, A.salesman_handle_level, A.group_brand, B.partner_id
  382.     )
  383.     INSERT INTO tt_summary_for_report_achievement_and_target (
  384.         session_id, tenant_id,
  385.         salesman_id,
  386.         original_target_amount,
  387.         target_amount,
  388.         original_year_to_date_accumulative_amount,
  389.         year_to_date_accumulative_amount,
  390.         salesman_level, group_brand_parent_code,
  391.         salesman_handle_id, salesman_handle_level
  392.     )
  393.     SELECT pSessionId, A.tenant_id,
  394.         A.salesman_id,  
  395.         SUM(A.target) AS target,
  396.         SUM(A.target) AS target,
  397.         SUM(A.year_to_date_accumulative_amount) AS year_to_date_accumulative_amount,
  398.         SUM(A.year_to_date_accumulative_amount) AS year_to_date_accumulative_amount,
  399.         A.salesman_level,
  400.         A.group_brand_parent_code,
  401.         A.salesman_id, A.salesman_level
  402.     FROM tt_grouped_summary A
  403.     GROUP BY A.tenant_id, A.salesman_id, A.salesman_level, A.group_brand_parent_code;
  404.    
  405.     --Insert atasan dari salesman_handle yang belum ada pada table
  406.     PERFORM f_insert_leader_summary_for_report_achievment_vs_target(pSessionId, pTenantId, A.salesman_id, A.group_brand_parent_code)
  407.     FROM tt_summary_for_report_achievement_and_target A
  408.     WHERE A.session_id = pSessionId AND
  409.         A.tenant_id = pTenantId;
  410.    
  411.     WHILE i >= vPositionLevelManager LOOP
  412.         PERFORM f_get_total_achievement_for_report_achievement_vs_target(pSessionId, pTenantId, A.salesman_id, A.salesman_level, A.group_brand_parent_code, A.salesman_handle_id, A.salesman_handle_level)
  413.         FROM tt_summary_for_report_achievement_and_target A
  414.         WHERE A.session_id = pSessionId AND
  415.             A.tenant_id = pTenantId AND
  416.             A.salesman_level = i;
  417.         i := i - 1 ;
  418.     END LOOP ;
  419.    
  420.     Open pRefHeader FOR
  421.         SELECT 21 AS _COUNT,
  422.             'Nama', 'Target', 'YTD Acv', '% YTD Acv', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
  423.             ';' AS _separator;
  424.     RETURN NEXT pRefHeader;
  425.    
  426.     PERFORM SETVAL('r_achievement_vs_target_line_no_seq', 0);
  427.    
  428.     Open pRefDetail FOR
  429.         WITH tt_ordered_achievement AS (
  430.             SELECT B.customer_code, B.customer_name, B.customer_city,
  431.                 CASE WHEN f_get_partner_name(B.sales_manager_id) <> vSpaceValue THEN f_get_partner_name(B.sales_manager_id) ELSE vDash END AS manager_name,
  432.                 CASE WHEN f_get_partner_name(B.sales_supervisor_id) <> vSpaceValue THEN f_get_partner_name(B.sales_supervisor_id) ELSE vDash END AS supervisor_name,
  433.                 CASE WHEN f_get_partner_name(B.salesman_id) <> vSpaceValue THEN f_get_partner_name(B.salesman_id) ELSE vDash END AS senior_sales_name,
  434.                 CASE WHEN f_get_partner_name(B.salesman_junior_id) <> vSpaceValue THEN f_get_partner_name(B.salesman_junior_id) ELSE vDash END AS junior_sales_name,
  435.                 ROUND(SUM(
  436.                     CASE WHEN C.year_date = vLastYear THEN
  437.                         COALESCE(A.amount, 0)
  438.                     ELSE
  439.                         0
  440.                     END
  441.                 ), vDecimalNo) AS last_year_achievement_amount,
  442.                 B.target_sales AS current_year_target_amount, B.q1_amount, B.q2_amount, B.q3_amount,
  443.                 ROUND(SUM(
  444.                     CASE WHEN C.year_date = pYear THEN
  445.                         COALESCE(A.amount, 0)
  446.                     ELSE
  447.                         0
  448.                     END
  449.                 ), vDecimalNo) AS year_to_date_amount,
  450.                 ROUND(SUM(
  451.                     CASE WHEN C.q_no = 1 AND C.year_date = pYear THEN
  452.                         COALESCE(A.amount, 0)
  453.                     ELSE
  454.                         0
  455.                     END
  456.                 ), vDecimalNo) AS q1_achievement_amount,
  457.                 ROUND(SUM(
  458.                     CASE WHEN C.q_no = 2 AND C.year_date = pYear THEN
  459.                         COALESCE(A.amount, 0)
  460.                     ELSE
  461.                         0
  462.                     END
  463.                 ), vDecimalNo) AS q2_achievement_amount,
  464.                 ROUND(SUM(
  465.                     CASE WHEN C.q_no = 3 AND C.year_date = pYear THEN
  466.                         COALESCE(A.amount, 0)
  467.                     ELSE
  468.                         0
  469.                     END
  470.                 ), vDecimalNo) AS q3_achievement_amount
  471.             FROM tt_salesman_customer_info_for_report_achievement_and_target B
  472.             LEFT JOIN tt_achievement_transaction_for_report_achievement_and_target A
  473.                 ON A.partner_id = B.customer_id AND
  474.                     A.tenant_id = B.tenant_id AND
  475.                     A.group_brand_parent_code = B.group_brand AND
  476.                     A.partner_id = B.customer_id AND
  477.                     A.session_id = B.session_id
  478.             LEFT JOIN dt_date C ON A.doc_date = C.string_date
  479.             WHERE B.session_id = pSessionId
  480.                 AND (B.customer_code <> vEmptyValue OR B.customer_name <> vEmptyValue)
  481.                 AND B.flg_target = vFlagYes
  482.             GROUP BY B.customer_code, B.customer_name, B.customer_city,
  483.                 B.sales_manager_id, B.sales_supervisor_id, B.salesman_id, B.salesman_junior_id,
  484.                 B.target_sales, B.q1_amount, B.q2_amount, B.q3_amount, group_brand_parent_code
  485.             ORDER BY manager_name, supervisor_name, senior_sales_name, customer_city, year_to_date_amount DESC
  486.         ), data_detail AS (
  487.        
  488.             SELECT f_get_partner_name(A.salesman_id) AS no, ROUND(SUM(A.target_amount), vDecimalNo)::character varying AS code,
  489.                 ROUND(SUM(A.year_to_date_accumulative_amount), vDecimalNo)::character varying AS cust_name,
  490.                 (CASE WHEN SUM(A.target_amount) > 0 THEN ROUND(SUM(A.year_to_date_accumulative_amount) * 100 / SUM(A.target_amount), vDecimalNo) ELSE 100 END)::character varying AS kota,
  491.                 vEmptyValue AS manager, vEmptyValue AS spv, vEmptyValue AS senior_sales, vEmptyValue AS junior_sales,
  492.                 vEmptyValue AS last_year_achv, vEmptyValue AS target_current_year, vEmptyValue AS target_q1,
  493.                 vEmptyValue AS target_q2, vEmptyValue AS target_q3, vEmptyValue AS achievment_amount_ytd,
  494.                 vEmptyValue AS achievment_ytd_percentage, vEmptyValue AS achievment_amount_q1,
  495.                 vEmptyValue AS achievment_q1_percentage, vEmptyValue AS achievment_amount_q2,
  496.                 vEmptyValue AS achievment_q2_percentage, vEmptyValue AS achievment_amount_q3,
  497.                 vEmptyValue AS achievment_q3_percentage, 1 AS ordial
  498.             FROM tt_summary_for_report_achievement_and_target A
  499.             WHERE A.session_id = pSessionId AND
  500.                 A.tenant_id = pTenantId AND
  501.                 A.salesman_id <> vEmptyId
  502.             GROUP BY A.tenant_id, A.salesman_id, A.salesman_level
  503.            
  504.             UNION ALL
  505.            
  506.             SELECT vEmptyValue,vEmptyValue,vEmptyValue,vEmptyValue,vEmptyValue,vEmptyValue,vEmptyValue,vEmptyValue,vEmptyValue,vEmptyValue,
  507.             vEmptyValue,vEmptyValue,vEmptyValue,vEmptyValue,vEmptyValue,vEmptyValue,vEmptyValue,vEmptyValue,vEmptyValue,vEmptyValue,vEmptyValue, 2 AS ordial
  508.            
  509.             UNION ALL
  510.            
  511.             SELECT 'No', 'Code', 'Cust. Name', 'Kota',
  512.                 'Manager', 'SPV', 'Senior Sales', 'Junior Sales',
  513.                 'Last Year Achv ('||vLastYear||')', 'Target '||pYear,
  514.                 'Target Q1 '||pYear, 'Target Q2 '||pYear, 'Target Q3 '||pYear,
  515.                 'ACHIEVEMENT Amount YTD', 'ACHIEVEMENT YTD %',
  516.                 'ACHIEVEMENT Amount Q1', 'ACHIEVEMENT Q1 %', 'ACHIEVEMENT Amount Q2', 'ACHIEVEMENT Q2 %', 'ACHIEVEMENT Amount Q3', 'ACHIEVEMENT Q3 %', 3 AS ordial
  517.            
  518.             UNION ALL
  519.            
  520.             SELECT (row_number() OVER ())::character varying AS no, A.customer_code, A.customer_name, A.customer_city,
  521.                 A.manager_name, A.supervisor_name, A.senior_sales_name, A.junior_sales_name,
  522.                 A.last_year_achievement_amount::character varying, A.current_year_target_amount::character varying,
  523.                 ROUND(A.q1_amount, vDecimalNo)::character varying, ROUND(A.q2_amount, vDecimalNo)::character varying, ROUND(A.q3_amount, vDecimalNo)::character varying,
  524.                 A.year_to_date_amount::character varying, (CASE WHEN A.current_year_target_amount > 0 THEN ROUND(A.year_to_date_amount * 100 / A.current_year_target_amount, vDecimalNo) ELSE 100 END)::character varying,
  525.                 A.q1_achievement_amount::character varying, (CASE WHEN A.q1_amount > 0 THEN ROUND(A.q1_achievement_amount * 100 / A.q1_amount, vDecimalNo) ELSE 100 END)::character varying,
  526.                 A.q2_achievement_amount::character varying, (CASE WHEN A.q2_amount > 0 THEN ROUND(A.q2_achievement_amount * 100 / A.q2_amount, vDecimalNo) ELSE 100 END)::character varying,
  527.                 A.q3_achievement_amount::character varying, (CASE WHEN A.q3_amount > 0 THEN ROUND(A.q3_achievement_amount * 100 / A.q3_amount, vDecimalNo) ELSE 100 END)::character varying,
  528.                 row_number() OVER () + 3 AS ordial
  529.             FROM tt_ordered_achievement A
  530.            
  531.             ORDER BY ordial, no
  532.        
  533.         ), summary_detail AS (
  534.             SELECT ROUND(SUM(A.last_year_achievement_amount), vDecimalNo)::character varying AS last_year_achv,
  535.                     ROUND(SUM(A.current_year_target_amount), vDecimalNo)::character varying AS target_current_year,
  536.                     ROUND(SUM(A.q1_amount), vDecimalNo)::character varying AS target_q1,
  537.                     ROUND(SUM(A.q2_amount), vDecimalNo)::character varying AS target_q2,
  538.                     ROUND(SUM(A.q3_amount), vDecimalNo)::character varying AS target_q3,
  539.                     ROUND(SUM(A.year_to_date_amount), vDecimalNo)::character varying AS achievment_amount_ytd,
  540.                     (CASE WHEN SUM(A.current_year_target_amount) > 0 THEN ROUND(SUM(A.year_to_date_amount) * 100 / SUM(A.current_year_target_amount), vDecimalNo) ELSE 100 END)::character varying AS achievment_ytd_percentage,
  541.                     ROUND(SUM(A.q1_achievement_amount), vDecimalNo)::character varying AS achievment_amount_q1,
  542.                     (CASE WHEN SUM(A.q1_amount) > 0 THEN ROUND(SUM(A.q1_achievement_amount) * 100 / SUM(A.q1_amount), vDecimalNo) ELSE 100 END)::character varying AS achievment_q1_percentage,
  543.                     ROUND(SUM(A.q2_achievement_amount), vDecimalNo)::character varying AS achievment_amount_q2,
  544.                     (CASE WHEN SUM(A.q2_amount) > 0 THEN ROUND(SUM(A.q2_achievement_amount) * 100 / SUM(A.q2_amount), vDecimalNo) ELSE 100 END)::character varying AS achievment_q2_percentage,
  545.                     ROUND(SUM(A.q3_achievement_amount), vDecimalNo)::character varying AS achievment_amount_q3,
  546.                     (CASE WHEN SUM(A.q3_amount) > 0 THEN ROUND(SUM(A.q3_achievement_amount) * 100 / SUM(A.q3_amount), vDecimalNo) ELSE 100 END)::character varying AS achievment_q3_percentage
  547.             FROM tt_ordered_achievement A
  548.         )
  549.        
  550.         SELECT A.no, A.code, A.cust_name, A.kota, A.manager, A.spv, A.senior_sales, A.junior_sales,
  551.             A.last_year_achv, A.target_current_year, A.target_q1, A.target_q2, A.target_q3,
  552.             A.achievment_amount_ytd, A.achievment_ytd_percentage, A.achievment_amount_q1,
  553.             A.achievment_q1_percentage, A.achievment_amount_q2, A.achievment_q2_percentage,
  554.             A.achievment_amount_q3, A.achievment_q3_percentage
  555.         FROM data_detail A
  556.         UNION ALL
  557.         SELECT 'Total', vEmptyValue, vEmptyValue, vEmptyValue, vEmptyValue, vEmptyValue, vEmptyValue, vEmptyValue,
  558.             COALESCE(A.last_year_achv, '0'), COALESCE(A.target_current_year, '0'), COALESCE(A.target_q1, '0'), COALESCE(A.target_q2, '0'), COALESCE(A.target_q3, '0'),
  559.             COALESCE(A.achievment_amount_ytd, '0'),
  560.             CASE WHEN (A.target_current_year IS NULL AND A.achievment_amount_ytd IS NULL) THEN '0' ELSE A.achievment_ytd_percentage END AS achievment_ytd_percentage,
  561.             COALESCE(A.achievment_amount_q1, '0'),
  562.             CASE WHEN (A.target_q1 IS NULL AND A.achievment_amount_q1 IS NULL) THEN '0' ELSE A.achievment_q1_percentage END AS achievment_q1_percentage,
  563.             COALESCE(A.achievment_amount_q2, '0'),
  564.             CASE WHEN (A.target_q2 IS NULL AND A.achievment_amount_q2 IS NULL) THEN '0' ELSE A.achievment_q2_percentage END AS achievment_q2_percentage,
  565.             COALESCE(A.achievment_amount_q3, '0'),
  566.             CASE WHEN (A.target_q3 IS NULL AND A.achievment_amount_q3 IS NULL) THEN '0' ELSE A.achievment_q3_percentage END AS achievment_q3_percentage
  567.         FROM summary_detail A;
  568.        
  569.     RETURN NEXT pRefDetail;
  570.        
  571.     DELETE FROM tt_salesman_customer_info_for_report_achievement_and_target WHERE session_id = pSessionId;
  572.     DELETE FROM tt_achievement_transaction_for_report_achievement_and_target WHERE session_id = pSessionId;
  573.     DELETE FROM tt_summary_for_report_achievement_and_target WHERE session_id = pSessionId;
  574.    
  575. END;
  576. $BODY$
  577.   LANGUAGE plpgsql VOLATILE
  578.   COST 100
  579.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement