Advertisement
aadddrr

r_achievement_vs_target_csv_BACKUP

Apr 11th, 2018
98
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.    
  42.     vCurrentDate                character varying;
  43.     vSystemCurrentYear          character varying;
  44.     vLastYear                   character varying;
  45.     vEndDate                    character varying;
  46.     vDateTo                     character varying;
  47.     vFlgTypeSOReg               character varying;
  48.     vZero                       numeric;
  49.     vDocTypeIdSOB               bigint;
  50.     vComboGroupBrand            character varying;
  51.     vArraySeparator             character varying;
  52.     vQuote                      character varying;
  53.     vDocTypeIdReturnInvoice     bigint;
  54.     vDocTypeIdCNAR              bigint;
  55.     vDocTypeIdDNAR              bigint;
  56.     vFilterCustomer             character varying;
  57.     vSeparator                  character varying;
  58.     vDecimalNo                  int;
  59.     vFilterGroupBrand           character varying;
  60.     vConfigSeparator            character varying;
  61.     vConfigPrefix               character varying;
  62.    
  63. BEGIN
  64.    
  65.     vPartnerCodeMou := ' ';
  66.     vPartnerNameMou := ' ';
  67.     vDocTypeIdSOByBrand := 398;
  68.     vStatusReleased := 'R';
  69.     vStatusFinal := 'F';
  70.     vStatusInProgress := 'I';
  71.     vStatusDraft := 'D';
  72.     vDocTypeIdReturnNote := 502;
  73.     vDocTypeIdSalesInvoice := 321;
  74.     vDocTypeIdInvoiceTemp := 361;
  75.     vDocTypeIdRRS :=381;
  76.     vStatusMapping := 'M';
  77.     vStatusApproved := 'A';
  78.     vRaw := 'RAW';
  79.     vSummary := 'SUMMARY';
  80.     vEmptyId := -99;
  81.     vEmptyValue := '';
  82.     vEndDate := '1231';
  83.     vFlgTypeSOReg := 'REG';
  84.     vZero := 0;
  85.     vDocTypeIdSOB := 398;
  86.     vComboGroupBrand := 'GROUPBRANDPARENT';
  87.     vArraySeparator := ', ';
  88.     vQuote := '''';
  89.     vDocTypeIdReturnInvoice := 380;
  90.     vDocTypeIdCNAR := 251;
  91.     vDocTypeIdDNAR := 241;
  92.     vFilterCustomer := '';
  93.     vSeparator := ';';
  94.     vDecimalNo := 2;
  95.     vFilterGroupBrand := '';
  96.     vConfigSeparator := ';';
  97.     vConfigPrefix := 'ACTIVITY_GL_GROUP_BRAND_';
  98.    
  99.     SELECT TO_CHAR(current_timestamp, 'YYYY') INTO vSystemCurrentYear;
  100.     SELECT TO_CHAR(TO_DATE(pYear,'YYYY') - INTERVAL '1 Year','YYYY') INTO vLastYear;
  101.    
  102.     IF (pYear = vSystemCurrentYear) THEN
  103.         SELECT TO_CHAR(current_timestamp, 'YYYYMMDD') INTO vDateTo;
  104.     ELSIF (pYear < vSystemCurrentYear) THEN
  105.         SELECT pYear || vEndDate INTO vDateTo;
  106.     END IF;
  107.    
  108.     IF (pCustomerId <> vEmptyId) THEN
  109.         vFilterCustomer := ' AND D.customer_id = '|| pCustomerId ||' ';
  110.     END IF;
  111.    
  112.     IF (pGroupBrand <> vEmptyValue) THEN
  113.         vFilterGroupBrand := ' AND A.group_brand = '''|| pGroupBrand ||''' ';
  114.     END IF;
  115.    
  116.     DELETE FROM tt_salesman_from_salesman_hierarchy WHERE session_id = pSessionId;
  117.     DELETE FROM tt_salesman_customer_info_for_report_achievement_and_target WHERE session_id = pSessionId;
  118.     DELETE FROM tt_achievement_transaction_for_report_achievement_and_target WHERE session_id = pSessionId;
  119.     DELETE FROM tt_summary_for_report_achievement_and_target WHERE session_id = pSessionId;
  120.  
  121.     --Mendapatkan daftar salesman dalam hierarchy periode
  122.     PERFORM f_get_salesman_from_salesman_hierarchy(pSessionId, pTenantId, pSalesmanId, pPeriod, pUserId);
  123.    
  124.     EXECUTE
  125.         'WITH grouped_salesman AS (
  126.             SELECT DISTINCT A.tenant_id, A.sales_child_id, A.group_brand, A.level
  127.             FROM tt_salesman_from_salesman_hierarchy A
  128.             WHERE A.session_id = $1 AND
  129.                 A.tenant_id = $2 AND
  130.                 $3 BETWEEN A.period_from AND A.period_to
  131.         )
  132.         INSERT INTO tt_salesman_customer_info_for_report_achievement_and_target (
  133.             session_id, tenant_id, customer_id, customer_code, customer_name, customer_city,
  134.             salesman_id, salesman_code, salesman_name, salesman_level, group_brand,
  135.             target_sales, q1_amount, q2_amount, q3_amount  
  136.         )
  137.         SELECT DISTINCT $1, A.tenant_id, COALESCE(D.customer_id, $4), COALESCE(E.partner_code, $5), COALESCE(E.partner_name, $5), COALESCE(I.city, $5),
  138.             A.sales_child_id, C.partner_code, C.partner_name, A.level, A.group_brand,
  139.             $6, $6, $6, $6
  140.         FROM grouped_salesman A
  141.         INNER JOIN m_partner C
  142.             ON A.sales_child_id = C.partner_id
  143.                 AND A.tenant_id = C.tenant_id
  144.         LEFT JOIN m_salesman_to_customer D
  145.             ON A.tenant_id = D.tenant_id
  146.                 AND A.sales_child_id = D.salesman_id
  147.                 AND A.group_brand = D.group_brand
  148.                 AND $3 BETWEEN D.period_from AND D.period_to
  149.         LEFT JOIN m_partner E
  150.             ON D.customer_id = E.partner_id
  151.                 AND D.tenant_id = E.tenant_id
  152.         LEFT JOIN m_ctgr_partner F
  153.             ON F.tenant_id = E.tenant_id
  154.                 AND F.ctgr_partner_id = F.ctgr_partner_id
  155.         LEFT JOIN t_user_role G
  156.             ON G.user_id = $7
  157.                 AND G.role_id = $8
  158.         LEFT JOIN m_policy_partner H
  159.             ON H.ctgr_partner_id = F.ctgr_partner_id
  160.                 AND H.user_role_id = G.user_role_id
  161.         LEFT JOIN m_partner_address I
  162.             ON I.tenant_id = E.tenant_id
  163.                 AND I.partner_id = E.partner_id
  164.                 AND I.flg_default = $9
  165.         WHERE EXISTS (
  166.             SELECT 1
  167.             FROM m_partner_ou D
  168.             INNER JOIN m_ou_structure E
  169.                 ON ( E.ou_bu_id = D.ou_id
  170.                     OR E.ou_branch_id = D.ou_id
  171.                     OR E.ou_sub_bu_id = D.ou_id )
  172.             WHERE C.partner_id = D.partner_id
  173.                 AND e.ou_id = $10
  174.         ) ' || vFilterCustomer
  175.         || vFilterGroupBrand
  176.     USING pSessionId, pTenantId, pPeriod, vEmptyId, vEmptyValue, vZero, pUserId, pRoleId, vFlagYes, pOuId;
  177.                
  178.     UPDATE tt_salesman_customer_info_for_report_achievement_and_target A
  179.     SET curr_code = B.curr_code,
  180.         target_sales = B.target_sales,
  181.         q1_amount = B.q1_amount,
  182.         q2_amount = B.q2_amount,
  183.         q3_amount = B.q3_amount,
  184.         flg_target = vFlagYes
  185.     FROM m_customer_target_sales B
  186.     WHERE B.tenant_id = A.tenant_id
  187.         AND A.customer_id = B.customer_id
  188.         AND B.year = pYear
  189.         AND B.group_brand = A.group_brand;
  190.        
  191.     --Temporary Sales Invoice
  192.     EXECUTE
  193.     'INSERT INTO tt_achievement_transaction_for_report_achievement_and_target (
  194.         session_id, tenant_id, ou_id,
  195.         doc_id, doc_type_id, doc_no, doc_date, partner_id, curr_code, amount,
  196.         status_doc, workflow_status,
  197.         group_brand_parent_code
  198.     )
  199.     SELECT DISTINCT ON (D.so_id) $1, A.tenant_id, C.ou_id,
  200.         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,
  201.         C.status_doc AS status_doc_invoice_temp, C.workflow_status,
  202.         G.code
  203.     FROM tt_salesman_customer_info_for_report_achievement_and_target A
  204.     INNER JOIN fi_invoice_ar_balance B ON B.partner_id = A.customer_id
  205.     INNER JOIN sl_invoice_temp C ON C.invoice_temp_id = B.invoice_ar_id
  206.     INNER JOIN sl_so_info D ON D.so_id = C.ref_id
  207.     INNER JOIN sl_so_brand_item E ON E.so_id = D.so_id
  208.     INNER JOIN m_brand_ext F ON F.brand_id = E.brand_id
  209.     INNER JOIN t_combo_value G ON A.group_brand = G.code
  210.     WHERE A.session_id = $1 AND
  211.         C.tenant_id = $2 AND
  212.         C.ou_id = $3 AND
  213.         B.doc_type_id = $4 AND
  214.         C.ref_doc_type_id = $5 AND
  215.         D.flg_type_so = $6 AND
  216.         SUBSTR(C.doc_date, 1, 4) BETWEEN $7 AND $8 AND
  217.         G.combo_id = $9 AND
  218.         $11 || F.group_brand || $11 = ANY (string_to_array (G.prop_key, $10))'
  219.     USING pSessionId, pTenantId, pOuId, vDocTypeIdInvoiceTemp, vDocTypeIdSOB, vFlgTypeSOReg, vLastYear, pYear, vComboGroupBrand, vArraySeparator, vQuote;
  220.        
  221.     --Sales Invoice
  222.     EXECUTE
  223.     'INSERT INTO tt_achievement_transaction_for_report_achievement_and_target (
  224.         session_id, tenant_id, ou_id,
  225.         doc_id, doc_type_id, doc_no, doc_date, partner_id, curr_code, amount,
  226.         status_doc, workflow_status,
  227.         group_brand_parent_code
  228.     )
  229.     SELECT DISTINCT ON (D.so_id) $1, A.tenant_id, C.ou_id,
  230.         C.invoice_id AS doc_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id, B.curr_code, B.amount,
  231.         C.status_doc AS status_doc_invoice_temp, C.workflow_status,
  232.         G.code
  233.     FROM tt_salesman_customer_info_for_report_achievement_and_target A
  234.     INNER JOIN fi_invoice_ar_balance B ON B.partner_id = A.customer_id
  235.     INNER JOIN sl_invoice C ON C.invoice_id = B.invoice_ar_id
  236.     INNER JOIN sl_so_info D ON D.so_id = C.ref_id
  237.     INNER JOIN sl_so_brand_item E ON E.so_id = D.so_id
  238.     INNER JOIN m_brand_ext F ON F.brand_id = E.brand_id
  239.     INNER JOIN t_combo_value G ON A.group_brand = G.code
  240.     WHERE A.session_id = $1 AND
  241.         C.tenant_id = $2 AND
  242.         C.ou_id = $3 AND
  243.         B.doc_type_id = $4 AND
  244.         C.ref_doc_type_id = $5 AND
  245.         D.flg_type_so = $6 AND
  246.         SUBSTR(C.doc_date, 1, 4) BETWEEN $7 AND $8 AND
  247.         G.combo_id = $9 AND
  248.         $11 || F.group_brand || $11 = ANY (string_to_array (G.prop_key, $10))'
  249.     USING pSessionId, pTenantId, pOuId, vDocTypeIdSalesInvoice, vDocTypeIdSOB, vFlgTypeSOReg, vLastYear, pYear, vComboGroupBrand, vArraySeparator, vQuote;
  250.    
  251.     --Return
  252.     EXECUTE
  253.     'INSERT INTO tt_achievement_transaction_for_report_achievement_and_target (
  254.         session_id, tenant_id, ou_id,
  255.         doc_id, doc_type_id, doc_no, doc_date, partner_id, curr_code, amount,
  256.         status_doc, workflow_status,
  257.         group_brand_parent_code
  258.     )
  259.     SELECT DISTINCT ON (D.request_return_sales_id) $1, A.tenant_id, C.ou_id,
  260.         C.invoice_id AS doc_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id, B.curr_code, B.amount,
  261.         C.status_doc AS status_doc_invoice_temp, C.workflow_status,
  262.         G.code
  263.     FROM tt_salesman_customer_info_for_report_achievement_and_target A
  264.     INNER JOIN fi_invoice_ar_balance B ON B.partner_id = A.customer_id
  265.     INNER JOIN sl_invoice C ON C.invoice_id = B.invoice_ar_id
  266.     INNER JOIN sl_request_return_sales_brand_item D ON D.request_return_sales_id = C.ref_id
  267.     INNER JOIN m_brand_ext F ON F.brand_id = D.brand_id
  268.     INNER JOIN t_combo_value G ON A.group_brand = G.code
  269.     WHERE A.session_id = $1 AND
  270.         C.tenant_id = $2 AND
  271.         C.ou_id = $3 AND
  272.         B.doc_type_id = $4 AND
  273.         C.ref_doc_type_id = $5 AND
  274.         SUBSTR(C.doc_date, 1, 4) BETWEEN $7 AND $8 AND
  275.         G.combo_id = $9 AND
  276.         $11 || F.group_brand || $11 = ANY (string_to_array (G.prop_key, $10))'
  277.     USING pSessionId, pTenantId, pOuId, vDocTypeIdReturnInvoice, vDocTypeIdRRS, vFlgTypeSOReg, vLastYear, pYear, vComboGroupBrand, vArraySeparator, vQuote;
  278.    
  279.     --CN AR
  280.     EXECUTE
  281.     'INSERT INTO tt_achievement_transaction_for_report_achievement_and_target (
  282.         session_id, tenant_id, ou_id,
  283.         doc_id, doc_type_id, doc_no, doc_date, partner_id, curr_code, amount,
  284.         status_doc, workflow_status,
  285.         group_brand_parent_code
  286.     )
  287.     SELECT $1, A.tenant_id, C.ou_id,
  288.         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,
  289.         C.status_doc AS status_doc_invoice_temp, C.workflow_status,
  290.         G.code
  291.     FROM tt_salesman_customer_info_for_report_achievement_and_target A
  292.     INNER JOIN fi_invoice_ar_balance B ON B.partner_id = A.customer_id
  293.     INNER JOIN fi_invoice_ar C ON C.invoice_ar_id = B.invoice_ar_id
  294.     INNER JOIN t_combo_value G ON A.group_brand = G.code
  295.     WHERE A.session_id = $1 AND
  296.         C.tenant_id = $2 AND
  297.         C.ou_id = $3 AND
  298.         B.doc_type_id = $4 AND
  299.         SUBSTR(C.doc_date, 1, 4) BETWEEN $7 AND $8 AND
  300.         G.combo_id = $9 AND
  301.         EXISTS(
  302.             SELECT 1
  303.             FROM fi_invoice_ar_cost D
  304.             WHERE D.invoice_ar_id = C.invoice_ar_id AND
  305.                 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))
  306.         )'
  307.     USING pSessionId, pTenantId, pOuId, vDocTypeIdCNAR, vDocTypeIdCNAR, vFlgTypeSOReg, vLastYear, pYear, vComboGroupBrand, vArraySeparator, vQuote, vConfigSeparator, vConfigPrefix;
  308.    
  309.     --DN AR
  310.     EXECUTE
  311.     'INSERT INTO tt_achievement_transaction_for_report_achievement_and_target (
  312.         session_id, tenant_id, ou_id,
  313.         doc_id, doc_type_id, doc_no, doc_date, partner_id, curr_code, amount,
  314.         status_doc, workflow_status,
  315.         group_brand_parent_code
  316.     )
  317.     SELECT $1, A.tenant_id, C.ou_id,
  318.         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,
  319.         C.status_doc AS status_doc_invoice_temp, C.workflow_status,
  320.         G.code
  321.     FROM tt_salesman_customer_info_for_report_achievement_and_target A
  322.     INNER JOIN fi_invoice_ar_balance B ON B.partner_id = A.customer_id
  323.     INNER JOIN fi_invoice_ar C ON C.invoice_ar_id = B.invoice_ar_id
  324.     INNER JOIN t_combo_value G ON A.group_brand = G.code
  325.     WHERE A.session_id = $1 AND
  326.         C.tenant_id = $2 AND
  327.         C.ou_id = $3 AND
  328.         B.doc_type_id = $4 AND
  329.         SUBSTR(C.doc_date, 1, 4) BETWEEN $7 AND $8 AND
  330.         G.combo_id = $9 AND
  331.         EXISTS(
  332.             SELECT 1
  333.             FROM fi_invoice_ar_cost D
  334.             WHERE D.invoice_ar_id = C.invoice_ar_id AND
  335.                 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))
  336.         )'
  337.     USING pSessionId, pTenantId, pOuId, vDocTypeIdDNAR, vDocTypeIdDNAR, vFlgTypeSOReg, vLastYear, pYear, vComboGroupBrand, vArraySeparator, vQuote, vConfigSeparator, vConfigPrefix;
  338.    
  339.     Open pRefHeader FOR
  340.         SELECT 21 AS _COUNT,
  341.             'No', 'Code', 'Cust. Name', 'Kota',
  342.             'Manager', 'SPV', 'Senior Sales', 'Junior Sales',
  343.             'Last Year Achv ('|| vLastYear ||')', 'Target '|| pYear,
  344.             'Target Q1 '|| pYear, 'Target Q2 '|| pYear, 'Target Q3 '|| pYear,  
  345.             'ACHIEVEMENT Amount YTD', 'ACHIEVEMENT YTD %',
  346.             'ACHIEVEMENT Amount Q1', 'ACHIEVEMENT Q1 %',
  347.             'ACHIEVEMENT Amount Q2', 'ACHIEVEMENT Q2 %',
  348.             'ACHIEVEMENT Amount Q3', 'ACHIEVEMENT Q3 %',
  349.             vSeparator AS _separator;
  350.     RETURN NEXT pRefHeader;
  351.    
  352.     PERFORM SETVAL('r_achievement_vs_target_line_no_seq', 0);
  353.    
  354.     Open pRefDetail FOR
  355.         WITH tt_ordered_achievement AS (
  356.             SELECT B.customer_code, B.customer_name, B.customer_city,
  357.                 'Septi' AS manager_name, '-' AS supervisor_name, 'Efendi' AS senior_sales_name, B.salesman_name AS junior_sales_name,
  358.                 ROUND(SUM(
  359.                     CASE WHEN C.year_date = vLastYear THEN
  360.                         COALESCE(A.amount, 0)
  361.                     ELSE
  362.                         0
  363.                     END
  364.                 ), vDecimalNo) AS last_year_achievement_amount,
  365.                 B.target_sales AS current_year_target_amount, B.q1_amount, B.q2_amount, B.q3_amount,
  366.                 ROUND(SUM(
  367.                     CASE WHEN C.year_date = pYear THEN
  368.                         COALESCE(A.amount, 0)
  369.                     ELSE
  370.                         0
  371.                     END
  372.                 ), vDecimalNo) AS year_to_date_amount,
  373.                 ROUND(SUM(
  374.                     CASE WHEN C.q_no = 1 AND C.year_date = pYear THEN
  375.                         COALESCE(A.amount, 0)
  376.                     ELSE
  377.                         0
  378.                     END
  379.                 ), vDecimalNo) AS q1_achievement_amount,
  380.                 ROUND(SUM(
  381.                     CASE WHEN C.q_no = 2 AND C.year_date = pYear THEN
  382.                         COALESCE(A.amount, 0)
  383.                     ELSE
  384.                         0
  385.                     END
  386.                 ), vDecimalNo) AS q2_achievement_amount,
  387.                 ROUND(SUM(
  388.                     CASE WHEN C.q_no = 3 AND C.year_date = pYear THEN
  389.                         COALESCE(A.amount, 0)
  390.                     ELSE
  391.                         0
  392.                     END
  393.                 ), vDecimalNo) AS q3_achievement_amount
  394.             FROM tt_salesman_customer_info_for_report_achievement_and_target B
  395.             LEFT JOIN  tt_achievement_transaction_for_report_achievement_and_target A
  396.                 ON A.partner_id = B.customer_id AND
  397.                     A.tenant_id = B.tenant_id AND
  398.                     A.group_brand_parent_code = B.group_brand AND
  399.                     A.partner_id = B.customer_id AND
  400.                     A.session_id = B.session_id
  401.             LEFT JOIN dt_date C ON A.doc_date = C.string_date
  402.             WHERE B.session_id = pSessionId
  403.                 AND (B.customer_code <> vEmptyValue OR B.customer_name <> vEmptyValue)
  404.                 AND B.flg_target = vFlagYes
  405.             GROUP BY B.customer_code, B.customer_name, B.customer_city,
  406.                 B.salesman_name,
  407.                 B.target_sales, B.q1_amount, B.q2_amount, B.q3_amount, group_brand_parent_code
  408.             ORDER BY manager_name, supervisor_name, senior_sales_name, customer_city, year_to_date_amount
  409.         ), tt_detail AS (
  410.             SELECT CAST(NEXTVAL('r_achievement_vs_target_line_no_seq') AS character varying) AS line_no,
  411.                 A.customer_code, A.customer_name, A.customer_city,
  412.                 A.manager_name, A.supervisor_name, A.senior_sales_name, A.junior_sales_name,
  413.                 CAST(A.last_year_achievement_amount AS character varying) AS last_year_achievement_amount, CAST(A.current_year_target_amount AS character varying) AS current_year_target_amount,
  414.                 CAST(A.q1_amount AS character varying) AS q1_amount, CAST(A.q2_amount AS character varying) AS q2_amount, CAST(A.q3_amount AS character varying) AS q3_amount,
  415.                 CAST(A.year_to_date_amount AS character varying) AS year_to_date_amount,
  416.                 CAST(CASE WHEN (current_year_target_amount <> 0) THEN
  417.                     ROUND(year_to_date_amount * 100 / current_year_target_amount, 2)
  418.                 WHEN ((current_year_target_amount = 0) AND (year_to_date_amount = 0)) THEN
  419.                     0
  420.                 ELSE
  421.                     100
  422.                 END AS character varying) AS year_to_date_percentage,
  423.                 CAST(A.q1_achievement_amount AS character varying) AS q1_achievement_amount,
  424.                 CAST(CASE WHEN (q1_amount <> 0) THEN
  425.                     ROUND(q1_achievement_amount * 100 / q1_amount, 2)
  426.                 WHEN ((q1_amount = 0) AND (q1_achievement_amount = 0)) THEN
  427.                     0
  428.                 ELSE
  429.                     100
  430.                 END AS character varying) AS q1_achievement_percentage,
  431.                 CAST(A.q2_achievement_amount AS character varying) AS q2_achievement_amount,
  432.                 CAST(CASE WHEN (q2_amount <> 0) THEN
  433.                     ROUND(q2_achievement_amount * 100 / q2_amount, 2)
  434.                 WHEN ((q2_amount = 0) AND (q2_achievement_amount = 0)) THEN
  435.                     0
  436.                 ELSE
  437.                     100
  438.                 END AS character varying) AS q2_achievement_percentage,
  439.                 CAST(A.q3_achievement_amount AS character varying) AS q3_achievement_amount,
  440.                 CAST(CASE WHEN (q3_amount <> 0) THEN
  441.                     ROUND(q3_achievement_amount * 100 / q3_amount, 2)
  442.                 WHEN ((q3_amount = 0) AND (q3_achievement_amount = 0)) THEN
  443.                     0
  444.                 ELSE
  445.                     100
  446.                 END AS character varying) AS q3_achievement_percentage     
  447.             FROM tt_ordered_achievement A
  448.             ORDER BY line_no
  449.         ), tt_grand_total AS (
  450.             SELECT  
  451.                 CAST(COALESCE(SUM(A.last_year_achievement_amount), 0) AS character varying) AS last_year_achievement_amount, CAST(COALESCE(SUM(A.current_year_target_amount), 0) AS character varying) AS current_year_target_amount,
  452.                 CAST(COALESCE(SUM(A.q1_amount), 0) AS character varying) AS q1_amount, CAST(COALESCE(SUM(A.q2_amount), 0) AS character varying) AS q2_amount, CAST(COALESCE(SUM(A.q3_amount), 0) AS character varying) AS q3_amount,
  453.                 CAST(COALESCE(SUM(A.year_to_date_amount), 0) AS character varying) AS year_to_date_amount,
  454.                 CAST(CASE WHEN (SUM(current_year_target_amount) <> 0) THEN
  455.                     ROUND(SUM(year_to_date_amount) * 100 / SUM(current_year_target_amount), 2)
  456.                 WHEN ((SUM(current_year_target_amount) = 0) AND (SUM(year_to_date_amount) = 0)) THEN
  457.                     0
  458.                 ELSE
  459.                     100
  460.                 END AS character varying) AS year_to_date_percentage,
  461.                 CAST(COALESCE(SUM(A.q1_achievement_amount), 0) AS character varying) AS q1_achievement_amount,
  462.                 CAST(CASE WHEN (SUM(q1_amount) <> 0) THEN
  463.                     ROUND(SUM(q1_achievement_amount) * 100 / SUM(q1_amount), 2)
  464.                 WHEN ((SUM(q1_amount) = 0) AND (SUM(q1_achievement_amount) = 0)) THEN
  465.                     0
  466.                 ELSE
  467.                     100
  468.                 END AS character varying) AS q1_achievement_percentage,
  469.                 CAST(COALESCE(SUM(A.q2_achievement_amount), 0) AS character varying) AS q2_achievement_amount,
  470.                 CAST(CASE WHEN (SUM(q2_amount) <> 0) THEN
  471.                     ROUND(SUM(q2_achievement_amount) * 100 / SUM(q2_amount), 2)
  472.                 WHEN ((SUM(q2_amount) = 0) AND (SUM(q2_achievement_amount) = 0)) THEN
  473.                     0
  474.                 ELSE
  475.                     100
  476.                 END AS character varying) AS q2_achievement_percentage,
  477.                 CAST(COALESCE(SUM(A.q3_achievement_amount), 0) AS character varying) AS q3_achievement_amount,
  478.                 CAST(CASE WHEN (SUM(q3_amount) <> 0) THEN
  479.                     ROUND(SUM(q3_achievement_amount) * 100 / SUM(q3_amount), 2)
  480.                 WHEN ((SUM(q3_amount) = 0) AND (SUM(q3_achievement_amount) = 0)) THEN
  481.                     0
  482.                 ELSE
  483.                     100
  484.                 END AS character varying) AS q3_achievement_percentage,
  485.                 2 AS ordial
  486.             FROM tt_ordered_achievement A
  487.         )
  488.        
  489.         SELECT 21 AS _COUNT,
  490.             A.line_no,
  491.             A.customer_code, A.customer_name, A.customer_city,
  492.             A.manager_name, A.supervisor_name, A.senior_sales_name, A.junior_sales_name,
  493.             A.last_year_achievement_amount, A.current_year_target_amount,
  494.             A.q1_amount, A.q2_amount, A.q3_amount,
  495.             A.year_to_date_amount, A.year_to_date_percentage,
  496.             A.q1_achievement_amount, A.q1_achievement_percentage,
  497.             A.q2_achievement_amount, A.q2_achievement_percentage,
  498.             A.q3_achievement_amount, A.q3_achievement_percentage,
  499.             CAST(line_no AS bigint) AS ordial
  500.         FROM tt_detail A
  501.        
  502.         UNION
  503.        
  504.         SELECT 21 AS _COUNT,
  505.             'Total',
  506.             '', '', '',
  507.             '', '', '', '',
  508.             A.last_year_achievement_amount, A.current_year_target_amount,
  509.             A.q1_amount, A.q2_amount, A.q3_amount,
  510.             A.year_to_date_amount, A.year_to_date_percentage,
  511.             A.q1_achievement_amount, A.q1_achievement_percentage,
  512.             A.q2_achievement_amount, A.q2_achievement_percentage,
  513.             A.q3_achievement_amount, A.q3_achievement_percentage,
  514.             NEXTVAL('r_achievement_vs_target_line_no_seq') AS ordial
  515.         FROM tt_grand_total A
  516.        
  517.         ORDER BY ordial;
  518.        
  519.     RETURN NEXT pRefDetail;
  520.        
  521.     DELETE FROM tt_salesman_from_salesman_hierarchy WHERE session_id = pSessionId;
  522.     DELETE FROM tt_salesman_customer_info_for_report_achievement_and_target WHERE session_id = pSessionId;
  523.     DELETE FROM tt_achievement_transaction_for_report_achievement_and_target WHERE session_id = pSessionId;
  524.     DELETE FROM tt_summary_for_report_achievement_and_target WHERE session_id = pSessionId;
  525.    
  526. END;
  527. $BODY$
  528.   LANGUAGE plpgsql VOLATILE
  529.   COST 100
  530.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement