migration.sql 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  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 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. 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 end,
  38. case when aw.week > 2 then aw.week + 2 end,
  39. case when aw.week > 3 then aw.week + 3 end
  40. ) ow (week_minus_1, week_minus_2, week_minus_3) on true
  41. where i."importId" = 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 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 end,
  57. case when i.trr <> '' then i.trr::decimal else 0 end,
  58. case when i.paper_chem_wk1 <> '' then i.paper_chem_wk1::decimal else 0 end,
  59. case when i.paper_chem_wk2 <> '' then i.paper_chem_wk2::decimal else 0 end,
  60. case when i.paper_chem_wk3 <> '' then i.paper_chem_wk3::decimal else 0 end,
  61. case when i.paper_chem_wk4 <> '' then i.paper_chem_wk4::decimal else 0 end,
  62. case when i.power_add <> '' then i.power_add::decimal else 0 end
  63. ) w (install_date, week, trr, paper_chem_wk1, paper_chem_wk2, paper_chem_wk3, paper_chem_wk4, power_add) on true
  64. inner join lateral (
  65. select case when w.week is null then null when w.week >= 23 then w.week - 22 else w.week + 30 end,
  66. w.trr + w.paper_chem_wk1
  67. ) aw (week, week_sum) on true
  68. inner join lateral (
  69. select case when aw.week > 1 then aw.week + 1 end,
  70. case when aw.week > 2 then aw.week + 2 end,
  71. case when aw.week > 3 then aw.week + 3 end
  72. ) ow (week_minus_1, week_minus_2, week_minus_3) on true
  73. where i."importId" = provided_import_id
  74. and rtrim(opportunity_status) <> ''
  75. and ow.week_minus_1 is not null
  76. and aw.week <> 99
  77. group by ow.week_minus_1
  78. ;
  79. -- week - 2
  80. insert into weekSums (week, amount, amountType)
  81. select ow.week_minus_2,
  82. sum(w.paper_chem_wk3),
  83. 'week-2'
  84. from cintas_install_calendar i
  85. inner join lateral (
  86. select case when i.install_date <> '' then i.install_date::date end,
  87. case
  88. when i.install_date <> '' then date_part('week', i.install_date::date)
  89. when i.opportunity_status = 'Pending - Install Not Scheduled' then 99 + 22 end,
  90. case when i.trr <> '' then i.trr::decimal else 0 end,
  91. case when i.paper_chem_wk1 <> '' then i.paper_chem_wk1::decimal else 0 end,
  92. case when i.paper_chem_wk2 <> '' then i.paper_chem_wk2::decimal else 0 end,
  93. case when i.paper_chem_wk3 <> '' then i.paper_chem_wk3::decimal else 0 end,
  94. case when i.paper_chem_wk4 <> '' then i.paper_chem_wk4::decimal else 0 end,
  95. case when i.power_add <> '' then i.power_add::decimal else 0 end
  96. ) w (install_date, week, trr, paper_chem_wk1, paper_chem_wk2, paper_chem_wk3, paper_chem_wk4, power_add) on true
  97. inner join lateral (
  98. select case when w.week is null then null when w.week >= 23 then w.week - 22 else w.week + 30 end,
  99. w.trr + w.paper_chem_wk1
  100. ) aw (week, week_sum) on true
  101. inner join lateral (
  102. select case when aw.week > 1 then aw.week + 1 end,
  103. case when aw.week > 2 then aw.week + 2 end,
  104. case when aw.week > 3 then aw.week + 3 end
  105. ) ow (week_minus_1, week_minus_2, week_minus_3) on true
  106. where i."importId" = provided_import_id
  107. and rtrim(opportunity_status) <> ''
  108. and ow.week_minus_2 is not null
  109. and aw.week <> 99
  110. group by ow.week_minus_2
  111. ;
  112. -- week - 3
  113. insert into weekSums (week, amount, amountType)
  114. select ow.week_minus_3,
  115. sum(w.paper_chem_wk4),
  116. 'week-3'
  117. from cintas_install_calendar i
  118. inner join lateral (
  119. select case when i.install_date <> '' then i.install_date::date end,
  120. case
  121. when i.install_date <> '' then date_part('week', i.install_date::date)
  122. when i.opportunity_status = 'Pending - Install Not Scheduled' then 99 + 22 end,
  123. case when i.trr <> '' then i.trr::decimal else 0 end,
  124. case when i.paper_chem_wk1 <> '' then i.paper_chem_wk1::decimal else 0 end,
  125. case when i.paper_chem_wk2 <> '' then i.paper_chem_wk2::decimal else 0 end,
  126. case when i.paper_chem_wk3 <> '' then i.paper_chem_wk3::decimal else 0 end,
  127. case when i.paper_chem_wk4 <> '' then i.paper_chem_wk4::decimal else 0 end,
  128. case when i.power_add <> '' then i.power_add::decimal else 0 end
  129. ) w (install_date, week, trr, paper_chem_wk1, paper_chem_wk2, paper_chem_wk3, paper_chem_wk4, power_add) on true
  130. inner join lateral (
  131. select case when w.week is null then null when w.week >= 23 then w.week - 22 else w.week + 30 end,
  132. w.trr + w.paper_chem_wk1
  133. ) aw (week, week_sum) on true
  134. inner join lateral (
  135. select case when aw.week > 1 then aw.week + 1 end,
  136. case when aw.week > 2 then aw.week + 2 end,
  137. case when aw.week > 3 then aw.week + 3 end
  138. ) ow (week_minus_1, week_minus_2, week_minus_3) on true
  139. where i."importId" = provided_import_id
  140. and rtrim(opportunity_status) <> ''
  141. and ow.week_minus_3 is not null
  142. and aw.week <> 99
  143. group by ow.week_minus_3
  144. ;
  145. -- power adds
  146. insert into weekSums (week, amount, amountType)
  147. select aw.week,
  148. sum(w.power_add),
  149. 'poweradd'
  150. from cintas_install_calendar i
  151. inner join lateral (
  152. select case when i.install_date <> '' then i.install_date::date end,
  153. case
  154. when i.install_date <> '' then date_part('week', i.install_date::date)
  155. when i.opportunity_status = 'Pending - Install Not Scheduled' then 99 + 22 end,
  156. case when i.trr <> '' then i.trr::decimal else 0 end,
  157. case when i.paper_chem_wk1 <> '' then i.paper_chem_wk1::decimal else 0 end,
  158. case when i.paper_chem_wk2 <> '' then i.paper_chem_wk2::decimal else 0 end,
  159. case when i.paper_chem_wk3 <> '' then i.paper_chem_wk3::decimal else 0 end,
  160. case when i.paper_chem_wk4 <> '' then i.paper_chem_wk4::decimal else 0 end,
  161. case when i.power_add <> '' then i.power_add::decimal else 0 end
  162. ) w (install_date, week, trr, paper_chem_wk1, paper_chem_wk2, paper_chem_wk3, paper_chem_wk4, power_add) on true
  163. inner join lateral (
  164. select case when w.week is null then null when w.week >= 23 then w.week - 22 else w.week + 30 end,
  165. w.trr + w.paper_chem_wk1
  166. ) aw (week, week_sum) on true
  167. inner join lateral (
  168. select case when aw.week > 1 then aw.week + 1 end,
  169. case when aw.week > 2 then aw.week + 2 end,
  170. case when aw.week > 3 then aw.week + 3 end
  171. ) ow (week_minus_1, week_minus_2, week_minus_3) on true
  172. where i."importId" = provided_import_id
  173. and rtrim(opportunity_status) <> ''
  174. and aw.week is not null
  175. and aw.week <> 99
  176. group by aw.week
  177. ;
  178. insert into cintas_intall_calendar_summary ("importId", week, "trrTotal", "fourWkAverages", "trrPlus4Wk", "powerAdds", "weekId", "createdAt", "updatedAt")
  179. select distinct
  180. provided_import_id,
  181. case when t.week = 99 then 'Pending - Install Not Scheduled' else concat('Week ', t.week::varchar(100)) end "Week",
  182. 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",
  183. 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",
  184. cast(sum(case when t.amountType <> 'poweradd' then t.amount else 0 end) over (partition by t.week) as decimal(9,0)) "TRR + 4WK",
  185. cast(sum(case when t.amountType = 'poweradd' then t.amount else 0 end) over (partition by t.week) as decimal(9,0)) "Power Adds",
  186. t.week "WeekId",
  187. now(),
  188. now()
  189. from weekSums t
  190. order by t.week desc
  191. ;
  192. drop table weekSums;
  193. END
  194. $$;