migration.sql 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. -- Create the cintas_calculate_summary stored procedure
  2. CREATE OR REPLACE PROCEDURE cintas_calculate_summary(IN provided_import_id bigint)
  3. LANGUAGE plpgsql
  4. AS
  5. $$
  6. BEGIN
  7. CREATE TEMP TABLE weekSums
  8. (
  9. week int not null,
  10. amount decimal not null,
  11. amountType varchar(100) not null
  12. );
  13. -- current week
  14. insert into weekSums (week, amount, amountType)
  15. select aw.week,
  16. sum(aw.week_sum),
  17. 'trr4wk'
  18. from cintas_install_calendar i
  19. inner join lateral (
  20. select case when i.install_date <> '' then i.install_date::date else null end,
  21. case
  22. when i.install_date <> '' then date_part('week', i.install_date::date)
  23. when i.opportunity_status = 'Pending - Install Not Scheduled' then 99 + 22
  24. else null end,
  25. case when i.trr <> '' then i.trr::decimal else 0 end,
  26. case when i.paper_chem_wk1 <> '' then i.paper_chem_wk1::decimal else 0 end,
  27. case when i.paper_chem_wk2 <> '' then i.paper_chem_wk2::decimal else 0 end,
  28. case when i.paper_chem_wk3 <> '' then i.paper_chem_wk3::decimal else 0 end,
  29. case when i.paper_chem_wk4 <> '' then i.paper_chem_wk4::decimal else 0 end,
  30. case when i.power_add <> '' then i.power_add::decimal else 0 end
  31. ) w (install_date, week, trr, paper_chem_wk1, paper_chem_wk2, paper_chem_wk3, paper_chem_wk4, power_add) on true
  32. inner join lateral (
  33. select case when w.week is null then null when w.week >= 23 then w.week - 22 else w.week + 30 end,
  34. w.trr + w.paper_chem_wk1
  35. ) aw (week, week_sum) on true
  36. inner join lateral (
  37. select case when aw.week > 1 then aw.week + 1 else null end,
  38. case when aw.week > 2 then aw.week + 2 else null end,
  39. case when aw.week > 3 then aw.week + 3 else null end
  40. ) ow (week_minus_1, week_minus_2, week_minus_3) on true
  41. where i.import_id = provided_import_id
  42. and rtrim(opportunity_status) <> ''
  43. and w.week is not null
  44. group by aw.week
  45. ;
  46. -- week - 1
  47. insert into weekSums (week, amount, amountType)
  48. select ow.week_minus_1,
  49. sum(w.paper_chem_wk2),
  50. 'week-1'
  51. from cintas_install_calendar i
  52. inner join lateral (
  53. select case when i.install_date <> '' then i.install_date::date else null end,
  54. case
  55. when i.install_date <> '' then date_part('week', i.install_date::date)
  56. when i.opportunity_status = 'Pending - Install Not Scheduled' then 99 + 22
  57. else null end,
  58. case when i.trr <> '' then i.trr::decimal else 0 end,
  59. case when i.paper_chem_wk1 <> '' then i.paper_chem_wk1::decimal else 0 end,
  60. case when i.paper_chem_wk2 <> '' then i.paper_chem_wk2::decimal else 0 end,
  61. case when i.paper_chem_wk3 <> '' then i.paper_chem_wk3::decimal else 0 end,
  62. case when i.paper_chem_wk4 <> '' then i.paper_chem_wk4::decimal else 0 end,
  63. case when i.power_add <> '' then i.power_add::decimal else 0 end
  64. ) w (install_date, week, trr, paper_chem_wk1, paper_chem_wk2, paper_chem_wk3, paper_chem_wk4, power_add) on true
  65. inner join lateral (
  66. select case when w.week is null then null when w.week >= 23 then w.week - 22 else w.week + 30 end,
  67. w.trr + w.paper_chem_wk1
  68. ) aw (week, week_sum) on true
  69. inner join lateral (
  70. select case when aw.week > 1 then aw.week + 1 else null end,
  71. case when aw.week > 2 then aw.week + 2 else null end,
  72. case when aw.week > 3 then aw.week + 3 else null end
  73. ) ow (week_minus_1, week_minus_2, week_minus_3) on true
  74. where i.import_id = provided_import_id
  75. and rtrim(opportunity_status) <> ''
  76. and ow.week_minus_1 is not null
  77. and aw.week <> 99
  78. group by ow.week_minus_1
  79. ;
  80. -- week - 2
  81. insert into weekSums (week, amount, amountType)
  82. select ow.week_minus_2,
  83. sum(w.paper_chem_wk3),
  84. 'week-2'
  85. from cintas_install_calendar i
  86. inner join lateral (
  87. select case when i.install_date <> '' then i.install_date::date else null end,
  88. case
  89. when i.install_date <> '' then date_part('week', i.install_date::date)
  90. when i.opportunity_status = 'Pending - Install Not Scheduled' then 99 + 22
  91. else null end,
  92. case when i.trr <> '' then i.trr::decimal else 0 end,
  93. case when i.paper_chem_wk1 <> '' then i.paper_chem_wk1::decimal else 0 end,
  94. case when i.paper_chem_wk2 <> '' then i.paper_chem_wk2::decimal else 0 end,
  95. case when i.paper_chem_wk3 <> '' then i.paper_chem_wk3::decimal else 0 end,
  96. case when i.paper_chem_wk4 <> '' then i.paper_chem_wk4::decimal else 0 end,
  97. case when i.power_add <> '' then i.power_add::decimal else 0 end
  98. ) w (install_date, week, trr, paper_chem_wk1, paper_chem_wk2, paper_chem_wk3, paper_chem_wk4, power_add) on true
  99. inner join lateral (
  100. select case when w.week is null then null when w.week >= 23 then w.week - 22 else w.week + 30 end,
  101. w.trr + w.paper_chem_wk1
  102. ) aw (week, week_sum) on true
  103. inner join lateral (
  104. select case when aw.week > 1 then aw.week + 1 else null end,
  105. case when aw.week > 2 then aw.week + 2 else null end,
  106. case when aw.week > 3 then aw.week + 3 else null end
  107. ) ow (week_minus_1, week_minus_2, week_minus_3) on true
  108. where i.import_id = provided_import_id
  109. and rtrim(opportunity_status) <> ''
  110. and ow.week_minus_2 is not null
  111. and aw.week <> 99
  112. group by ow.week_minus_2
  113. ;
  114. -- week - 3
  115. insert into weekSums (week, amount, amountType)
  116. select ow.week_minus_3,
  117. sum(w.paper_chem_wk4),
  118. 'week-3'
  119. from cintas_install_calendar i
  120. inner join lateral (
  121. select case when i.install_date <> '' then i.install_date::date else null end,
  122. case
  123. when i.install_date <> '' then date_part('week', i.install_date::date)
  124. when i.opportunity_status = 'Pending - Install Not Scheduled' then 99 + 22
  125. else null end,
  126. case when i.trr <> '' then i.trr::decimal else 0 end,
  127. case when i.paper_chem_wk1 <> '' then i.paper_chem_wk1::decimal else 0 end,
  128. case when i.paper_chem_wk2 <> '' then i.paper_chem_wk2::decimal else 0 end,
  129. case when i.paper_chem_wk3 <> '' then i.paper_chem_wk3::decimal else 0 end,
  130. case when i.paper_chem_wk4 <> '' then i.paper_chem_wk4::decimal else 0 end,
  131. case when i.power_add <> '' then i.power_add::decimal else 0 end
  132. ) w (install_date, week, trr, paper_chem_wk1, paper_chem_wk2, paper_chem_wk3, paper_chem_wk4, power_add) on true
  133. inner join lateral (
  134. select case when w.week is null then null when w.week >= 23 then w.week - 22 else w.week + 30 end,
  135. w.trr + w.paper_chem_wk1
  136. ) aw (week, week_sum) on true
  137. inner join lateral (
  138. select case when aw.week > 1 then aw.week + 1 else null end,
  139. case when aw.week > 2 then aw.week + 2 else null end,
  140. case when aw.week > 3 then aw.week + 3 else null end
  141. ) ow (week_minus_1, week_minus_2, week_minus_3) on true
  142. where i.import_id = provided_import_id
  143. and rtrim(opportunity_status) <> ''
  144. and ow.week_minus_3 is not null
  145. and aw.week <> 99
  146. group by ow.week_minus_3
  147. ;
  148. -- power adds
  149. insert into weekSums (week, amount, amountType)
  150. select aw.week,
  151. sum(w.power_add),
  152. 'poweradd'
  153. from cintas_install_calendar i
  154. inner join lateral (
  155. select case when i.install_date <> '' then i.install_date::date else null end,
  156. case
  157. when i.install_date <> '' then date_part('week', i.install_date::date)
  158. when i.opportunity_status = 'Pending - Install Not Scheduled' then 99 + 22
  159. else null end,
  160. case when i.trr <> '' then i.trr::decimal else 0 end,
  161. case when i.paper_chem_wk1 <> '' then i.paper_chem_wk1::decimal else 0 end,
  162. case when i.paper_chem_wk2 <> '' then i.paper_chem_wk2::decimal else 0 end,
  163. case when i.paper_chem_wk3 <> '' then i.paper_chem_wk3::decimal else 0 end,
  164. case when i.paper_chem_wk4 <> '' then i.paper_chem_wk4::decimal else 0 end,
  165. case when i.power_add <> '' then i.power_add::decimal else 0 end
  166. ) w (install_date, week, trr, paper_chem_wk1, paper_chem_wk2, paper_chem_wk3, paper_chem_wk4, power_add) on true
  167. inner join lateral (
  168. select case when w.week is null then null when w.week >= 23 then w.week - 22 else w.week + 30 end,
  169. w.trr + w.paper_chem_wk1
  170. ) aw (week, week_sum) on true
  171. inner join lateral (
  172. select case when aw.week > 1 then aw.week + 1 else null end,
  173. case when aw.week > 2 then aw.week + 2 else null end,
  174. case when aw.week > 3 then aw.week + 3 else null end
  175. ) ow (week_minus_1, week_minus_2, week_minus_3) on true
  176. where i.import_id = provided_import_id
  177. and rtrim(opportunity_status) <> ''
  178. and aw.week is not null
  179. and aw.week <> 99
  180. group by aw.week
  181. ;
  182. insert into cintas_intall_calendar_summary (import_id, week, trr_total, fourwk_averages, trr_plus_4wk, power_adds, week_id)
  183. select distinct
  184. provided_import_id,
  185. case when t.week = 99 then 'Pending - Install Not Scheduled' else concat('Week ', t.week::varchar(100)) end "Week",
  186. cast(sum(case when t.amountType <> 'poweradd' and t.amountType = 'trr4wk' then t.amount else 0 end) over (partition by t.week) as decimal(9,0)) "TRR Total",
  187. cast(sum(case when t.amountType <> 'poweradd' and t.amountType <> 'trr4wk' then t.amount else 0 end) over (partition by t.week) as decimal(9,0)) "4WK Averages",
  188. cast(sum(case when t.amountType <> 'poweradd' then t.amount else 0 end) over (partition by t.week) as decimal(9,0)) "TRR + 4WK",
  189. cast(sum(case when t.amountType = 'poweradd' then t.amount else 0 end) over (partition by t.week) as decimal(9,0)) "Power Adds",
  190. t.week "WeekId"
  191. from weekSums t
  192. order by t.week desc
  193. ;
  194. drop table weekSums;
  195. END;
  196. $$;