Advertisement
aadddrr

f_get_total_achievement_for_report_achievement_vs_target_201

Apr 24th, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.47 KB | None | 0 0
  1. --Adrian, Mar 12, 2018
  2. --Untuk mendapatkan total summary dari atasan + bawahan
  3.  
  4. CREATE OR REPLACE FUNCTION f_get_total_achievement_for_report_achievement_vs_target(character varying, bigint, bigint, bigint, character varying, bigint, bigint)
  5. RETURNS void AS
  6. $BODY$
  7. DECLARE
  8. pSessionId ALIAS FOR $1;
  9. pTenantId ALIAS FOR $2;
  10. pSalesmanId ALIAS FOR $3;
  11. pSalesmanLevel ALIAS FOR $4;
  12. pGroupBrand ALIAS FOR $5;
  13. pSalesmanHandleId ALIAS FOR $6;
  14. pSalesmanHandleLevel ALIAS FOR $7;
  15.  
  16. vJoinSalesman character varying;
  17. vFilterSalesman character varying;
  18.  
  19. BEGIN
  20.  
  21. vJoinSalesman := '';
  22. vFilterSalesman := '';
  23.  
  24. IF(pSalesmanLevel = 1) THEN
  25. vJoinSalesman := ' AND C.bod_id = '||pSalesmanId||' ';
  26. ELSIF (pSalesmanLevel = 2) THEN
  27. vJoinSalesman := ' AND C.saso_id = '||pSalesmanId||' ';
  28. ELSIF (pSalesmanLevel = 3) THEN
  29. vJoinSalesman := ' AND C.sales_manager_id = '||pSalesmanId||' ';
  30. ELSIF (pSalesmanLevel = 4) THEN
  31. vJoinSalesman := ' AND C.sales_supervisor_id = '||pSalesmanId||' ';
  32. ELSIF (pSalesmanLevel = 5) THEN
  33. vJoinSalesman := ' AND C.salesman_id = '||pSalesmanId||' ';
  34. ELSIF (pSalesmanLevel = 6) THEN
  35. vJoinSalesman := ' AND C.salesman_junior_id = '||pSalesmanId||' ';
  36. END IF;
  37.  
  38. IF(pSalesmanLevel + 1 = 1) THEN
  39. vFilterSalesman := ' AND C.bod_id = B.salesman_id ';
  40. ELSIF (pSalesmanLevel + 1 = 2) THEN
  41. vFilterSalesman := ' AND C.saso_id = B.salesman_id ';
  42. ELSIF (pSalesmanLevel + 1 = 3) THEN
  43. vFilterSalesman := ' AND C.sales_manager_id = B.salesman_id ';
  44. ELSIF (pSalesmanLevel + 1 = 4) THEN
  45. vFilterSalesman := ' AND C.sales_supervisor_id = B.salesman_id ';
  46. ELSIF (pSalesmanLevel + 1 = 5) THEN
  47. vFilterSalesman := ' AND C.salesman_id = B.salesman_id ';
  48. ELSIF (pSalesmanLevel + 1 = 6) THEN
  49. vFilterSalesman := ' AND C.salesman_junior_id = B.salesman_id ';
  50. END IF;
  51.  
  52. EXECUTE '
  53. WITH tt_grouped_achievement_from_member AS(
  54. SELECT B.target_amount, B.year_to_date_accumulative_amount
  55. FROM tt_summary_for_report_achievement_and_target B
  56. INNER JOIN tt_salesman_customer_info_for_report_achievement_and_target C
  57. ON C.session_id = B.session_id AND
  58. C.tenant_id = B.tenant_id AND
  59. C.group_brand = B.group_brand_parent_code '
  60. || vJoinSalesman || '
  61. WHERE B.session_id = $1 AND
  62. B.tenant_id = $2 AND
  63. B.salesman_level = $6 AND
  64. B.group_brand_parent_code = $5 AND
  65. B.salesman_handle_id = $7 AND
  66. B.salesman_handle_level = $8 '
  67. || vFilterSalesman || '
  68. GROUP BY B.salesman_id, B.salesman_level, B.target_amount,
  69. B.year_to_date_accumulative_amount, B.group_brand_parent_code
  70. ), tt_grouped_achievement AS(
  71. SELECT SUM(B.target_amount) AS target_amount, SUM(B.year_to_date_accumulative_amount) AS year_to_date_accumulative_amount
  72. FROM tt_grouped_achievement_from_member B
  73. )
  74. UPDATE tt_summary_for_report_achievement_and_target Z
  75. SET target_amount = Z.target_amount + COALESCE(A.target_amount, 0),
  76. year_to_date_accumulative_amount = Z.year_to_date_accumulative_amount + COALESCE(A.year_to_date_accumulative_amount, 0)
  77. FROM tt_grouped_achievement A
  78. WHERE Z.session_id = $1 AND
  79. Z.tenant_id = $2 AND
  80. Z.salesman_id = $3 AND
  81. Z.salesman_level = $4 AND
  82. Z.group_brand_parent_code = $5 AND
  83. Z.salesman_handle_id = $7 AND
  84. Z.salesman_handle_level = $8 '
  85. USING pSessionId, pTenantId, pSalesmanId, pSalesmanLevel, pGroupBrand, pSalesmanLevel + 1, pSalesmanHandleId, pSalesmanHandleLevel;
  86.  
  87. END;
  88. $BODY$
  89. LANGUAGE plpgsql VOLATILE
  90. COST 200;
  91. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement