Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.47 KB | None | 0 0
  1. CREATE OR REPLACE FUNCTION r_report_realization_visit_plan_for_all_salesman(
  2. character varying,
  3. bigint,
  4. bigint,
  5. character varying,
  6. character varying,
  7. bigint,
  8. bigint,
  9. character varying)
  10. RETURNS SETOF refcursor AS
  11. $BODY$
  12. DECLARE
  13. pRefHeader REFCURSOR := 'refHeader';
  14. pRefDetail REFCURSOR := 'refDetail';
  15.  
  16. pSessionId ALIAS FOR $1;
  17. pTenantId ALIAS FOR $2;
  18. pOuId ALIAS FOR $3;
  19. pDateFrom ALIAS FOR $4;
  20. pDateTo ALIAS FOR $5;
  21. pUserId ALIAS FOR $6;
  22. pRoleId ALIAS FOR $7;
  23. pDatetime ALIAS FOR $8;
  24.  
  25. vEmptyId bigint := -99;
  26. vEmptyValue character varying := '';
  27.  
  28. vFilterDateFrom character varying := '';
  29. vFilterDateTo character varying := '';
  30.  
  31.  
  32. BEGIN
  33.  
  34. IF pDateFrom <> vEmptyValue THEN
  35. vFilterDateFrom := ' AND A.visit_date >= '''|| pDateFrom ||'''';
  36. END IF;
  37.  
  38. IF pDateTo <> vEmptyValue THEN
  39. vFilterDateTo := ' AND A.visit_date <= '''|| pDateTo ||'''';
  40. END IF;
  41.  
  42. OPEN pRefHeader FOR
  43. SELECT pDateFrom AS date_from, pDateTo AS date_to, f_get_ou_name(pOuId) AS ou_name, f_get_ou_code(pOuId) AS ou_code,
  44. pDatetime AS datetime, f_get_role_name(pRoleId) AS role_name, f_get_user_fullname(pUserId) AS fullname;
  45. RETURN NEXT pRefHeader;
  46.  
  47. OPEN pRefDetail FOR
  48. EXECUTE '
  49. SELECT
  50. C.partner_code as salesman_code,
  51. A.visit_date,
  52. A.check_in_time_server,
  53. A.check_out_time_server,
  54. COALESCE(TRUNC((A.check_out_time_server - A.check_in_time_server)/60), 0) as visit_duration,
  55. E.partner_code as customer_code,
  56. E.partner_name as customer_name,
  57. F.address_desc as customer_address,
  58. F.city,
  59. G.idwil,
  60. E.price_level,
  61. CASE
  62. WHEN (COUNT(A) = 0) THEN $1
  63. WHEN (A.check_in_time_server is not null) AND (A.check_out_time_server is null) THEN $2
  64. WHEN (A.check_in_time_server is not null) AND (A.check_out_time_server is not null) THEN A.check_out_status
  65. END AS status_visit,
  66. CASE
  67. WHEN (A.check_in_time_server is not null) AND (A.check_out_time_server is not null) THEN A.check_out_remark
  68. ELSE ''
  69. END AS remark,
  70. CASE
  71. WHEN (B.flg_adhoc = $3) AND (COUNT(A) != 0) THEN $4
  72. ELSE $5
  73. END AS flg_adjusment_visit_plan,
  74. CASE
  75. WHEN (I.flg_input_by_salesman = $6) AND (I.status != $7) AND (J.status_doc != $7) THEN SUM(I.grand_total_order)
  76. ELSE 0
  77. END AS order_amount,
  78. CASE
  79. WHEN (I.flg_input_by_salesman = $6) AND (I.status != $7) AND (J.status_doc != $7)
  80. AND (K.doc_date = A.visit_date) THEN SUM(K.total_gross_amount)
  81. ELSE 0
  82. END AS pi_amount
  83. FROM sl_salesman_visit_realization A
  84. JOIN sl_salesman_visit_plan B
  85. ON A.salesman_visit_plan_id = B.salesman_visit_plan_id
  86. JOIN m_partner C
  87. ON A.salesman_id = C.partner_id AND A.tenant_id = C.tenant_id
  88. JOIN m_partner_ou D
  89. ON C.partner_id = D.partner_id
  90. JOIN m_partner E
  91. ON A.customer_id = E.partner_id AND A.tenant_id = E.tenant_id
  92. JOIN m_partner_address F
  93. ON E.partner_id = F.partner_id
  94. JOIN m_customer_ext_for_sas G
  95. ON E.partner_id = G.partner_id AND A.tenant_id = G.tenant_id
  96. JOIN m_user_partner H
  97. ON A.salesman_id = H.partner_id AND A.tenant_id = H.tenant_id
  98. LEFT JOIN sl_order I
  99. ON A.visit_date = I.doc_date AND A.tenant_id = I.tenant_id
  100. AND H.user_id = I.salesman_user_id
  101. AND A.customer_id = I.toko_partner_id
  102.  
  103. LEFT JOIN sl_order_external J
  104. ON I.order_id = J.ref_id
  105. LEFT JOIN sl_pro_invoice_external K
  106. ON J.order_external_id = K.ref_id
  107. WHERE EXISTS(
  108. SELECT 1
  109. FROM t_user X, t_user_role Y, t_policy_ou Z
  110. WHERE X.tenant_id = A.tenant_id AND
  111. X.user_id = $8 AND
  112. X.user_id = Y.user_id AND
  113. X.policy_default_id = Z.policy_id AND
  114. D.ou_id = Z.ou_id
  115. ) AND A.tenant_id = $9 AND B.active = $6 '|| vFilterDateFrom || vFilterDateTo ||'
  116. ORDER BY salesman_code, customer_name, A.visit_date
  117. GROUP BY
  118. C.partner_code,
  119. A.visit_date,
  120. A.check_in_time_server,
  121. A.check_out_time_server,
  122. A.check_out_status,
  123. A.check_out_remark,
  124. B.flg_adhoc,
  125. E.partner_code,
  126. E.partner_name,
  127. F.address_desc,
  128. F.city,
  129. G.idwil,
  130. E.price_level,
  131. I.flg_input_by_salesman,
  132. I.status,
  133. J.status_doc,
  134. K.doc_date'
  135. USING 'TIDAK DIKUNJUNGI', 'SEDANG DIKUNJUNGI', 'N', 'YA', 'TIDAK', 'Y', 'C', pUserId, pTenantId;
  136. RETURN NEXT pRefDetail;
  137.  
  138. END;
  139. $BODY$
  140. LANGUAGE plpgsql VOLATILE
  141. COST 1000
  142. ROWS 1000;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement