migration.sql 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  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. coalesce(sum(aw.week_sum), 0),
  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' and type = 'FS' then 100 + 22
  24. when i.opportunity_status = 'Pending - Install Not Scheduled' and type = 'UR' then 99 + 22
  25. end,
  26. case when i.trr <> '' then i.trr::decimal else 0 end,
  27. case when i.paper_chem_wk1 <> '' then i.paper_chem_wk1::decimal else 0 end,
  28. case when i.paper_chem_wk2 <> '' then i.paper_chem_wk2::decimal else 0 end,
  29. case when i.paper_chem_wk3 <> '' then i.paper_chem_wk3::decimal else 0 end,
  30. case when i.paper_chem_wk4 <> '' then i.paper_chem_wk4::decimal else 0 end,
  31. case when i.power_add <> '' then i.power_add::decimal else 0 end
  32. ) w (install_date, week, trr, paper_chem_wk1, paper_chem_wk2, paper_chem_wk3, paper_chem_wk4, power_add) on true
  33. inner join lateral (
  34. select case when w.week is null then null when w.week >= 23 then w.week - 22 else w.week + 30 end,
  35. w.trr + w.paper_chem_wk1
  36. ) aw (week, week_sum) on true
  37. inner join lateral (
  38. select case when aw.week > 1 then aw.week + 1 end,
  39. case when aw.week > 2 then aw.week + 2 end,
  40. case when aw.week > 3 then aw.week + 3 end
  41. ) ow (week_minus_1, week_minus_2, week_minus_3) on true
  42. where i."importId" = provided_import_id
  43. and rtrim(opportunity_status) <> ''
  44. and w.week is not null
  45. group by aw.week
  46. ;
  47. -- week - 1
  48. insert into weekSums (week, amount, amountType)
  49. select ow.week_minus_1,
  50. sum(w.paper_chem_wk2),
  51. 'week-1'
  52. from cintas_install_calendar i
  53. inner join lateral (
  54. select case when i.install_date <> '' then i.install_date::date end,
  55. case
  56. when i.install_date <> '' then date_part('week', i.install_date::date)
  57. when i.opportunity_status = 'Pending - Install Not Scheduled' and type = 'FS' then 100 + 22
  58. when i.opportunity_status = 'Pending - Install Not Scheduled' and type = 'UR' then 99 + 22
  59. end,
  60. case when i.trr <> '' then i.trr::decimal else 0 end,
  61. case when i.paper_chem_wk1 <> '' then i.paper_chem_wk1::decimal else 0 end,
  62. case when i.paper_chem_wk2 <> '' then i.paper_chem_wk2::decimal else 0 end,
  63. case when i.paper_chem_wk3 <> '' then i.paper_chem_wk3::decimal else 0 end,
  64. case when i.paper_chem_wk4 <> '' then i.paper_chem_wk4::decimal else 0 end,
  65. case when i.power_add <> '' then i.power_add::decimal else 0 end
  66. ) w (install_date, week, trr, paper_chem_wk1, paper_chem_wk2, paper_chem_wk3, paper_chem_wk4, power_add) on true
  67. inner join lateral (
  68. select case when w.week is null then null when w.week >= 23 then w.week - 22 else w.week + 30 end,
  69. w.trr + w.paper_chem_wk1
  70. ) aw (week, week_sum) on true
  71. inner join lateral (
  72. select case when aw.week > 1 then aw.week + 1 end,
  73. case when aw.week > 2 then aw.week + 2 end,
  74. case when aw.week > 3 then aw.week + 3 end
  75. ) ow (week_minus_1, week_minus_2, week_minus_3) on true
  76. where i."importId" = provided_import_id
  77. and rtrim(opportunity_status) <> ''
  78. and ow.week_minus_1 is not null
  79. and aw.week not in (99, 100, 101)
  80. group by ow.week_minus_1
  81. ;
  82. -- week - 2
  83. insert into weekSums (week, amount, amountType)
  84. select ow.week_minus_2,
  85. sum(w.paper_chem_wk3),
  86. 'week-2'
  87. from cintas_install_calendar i
  88. inner join lateral (
  89. select case when i.install_date <> '' then i.install_date::date end,
  90. case
  91. when i.install_date <> '' then date_part('week', i.install_date::date)
  92. when i.opportunity_status = 'Pending - Install Not Scheduled' and type = 'FS' then 100 + 22
  93. when i.opportunity_status = 'Pending - Install Not Scheduled' and type = 'UR' then 99 + 22
  94. end,
  95. case when i.trr <> '' then i.trr::decimal else 0 end,
  96. case when i.paper_chem_wk1 <> '' then i.paper_chem_wk1::decimal else 0 end,
  97. case when i.paper_chem_wk2 <> '' then i.paper_chem_wk2::decimal else 0 end,
  98. case when i.paper_chem_wk3 <> '' then i.paper_chem_wk3::decimal else 0 end,
  99. case when i.paper_chem_wk4 <> '' then i.paper_chem_wk4::decimal else 0 end,
  100. case when i.power_add <> '' then i.power_add::decimal else 0 end
  101. ) w (install_date, week, trr, paper_chem_wk1, paper_chem_wk2, paper_chem_wk3, paper_chem_wk4, power_add) on true
  102. inner join lateral (
  103. select case when w.week is null then null when w.week >= 23 then w.week - 22 else w.week + 30 end,
  104. w.trr + w.paper_chem_wk1
  105. ) aw (week, week_sum) on true
  106. inner join lateral (
  107. select case when aw.week > 1 then aw.week + 1 end,
  108. case when aw.week > 2 then aw.week + 2 end,
  109. case when aw.week > 3 then aw.week + 3 end
  110. ) ow (week_minus_1, week_minus_2, week_minus_3) on true
  111. where i."importId" = provided_import_id
  112. and rtrim(opportunity_status) <> ''
  113. and ow.week_minus_2 is not null
  114. and aw.week not in (99, 100, 101)
  115. group by ow.week_minus_2
  116. ;
  117. -- week - 3
  118. insert into weekSums (week, amount, amountType)
  119. select ow.week_minus_3,
  120. sum(w.paper_chem_wk4),
  121. 'week-3'
  122. from cintas_install_calendar i
  123. inner join lateral (
  124. select case when i.install_date <> '' then i.install_date::date end,
  125. case
  126. when i.install_date <> '' then date_part('week', i.install_date::date)
  127. when i.opportunity_status = 'Pending - Install Not Scheduled' and type = 'FS' then 100 + 22
  128. when i.opportunity_status = 'Pending - Install Not Scheduled' and type = 'UR' then 99 + 22
  129. end,
  130. case when i.trr <> '' then i.trr::decimal else 0 end,
  131. case when i.paper_chem_wk1 <> '' then i.paper_chem_wk1::decimal else 0 end,
  132. case when i.paper_chem_wk2 <> '' then i.paper_chem_wk2::decimal else 0 end,
  133. case when i.paper_chem_wk3 <> '' then i.paper_chem_wk3::decimal else 0 end,
  134. case when i.paper_chem_wk4 <> '' then i.paper_chem_wk4::decimal else 0 end,
  135. case when i.power_add <> '' then i.power_add::decimal else 0 end
  136. ) w (install_date, week, trr, paper_chem_wk1, paper_chem_wk2, paper_chem_wk3, paper_chem_wk4, power_add) on true
  137. inner join lateral (
  138. select case when w.week is null then null when w.week >= 23 then w.week - 22 else w.week + 30 end,
  139. w.trr + w.paper_chem_wk1
  140. ) aw (week, week_sum) on true
  141. inner join lateral (
  142. select case when aw.week > 1 then aw.week + 1 end,
  143. case when aw.week > 2 then aw.week + 2 end,
  144. case when aw.week > 3 then aw.week + 3 end
  145. ) ow (week_minus_1, week_minus_2, week_minus_3) on true
  146. where i."importId" = provided_import_id
  147. and rtrim(opportunity_status) <> ''
  148. and ow.week_minus_3 is not null
  149. and aw.week not in (99, 100, 101)
  150. group by ow.week_minus_3
  151. ;
  152. -- power adds
  153. insert into weekSums (week, amount, amountType)
  154. select aw.week,
  155. sum(w.power_add),
  156. 'poweradd'
  157. from cintas_install_calendar i
  158. inner join lateral (
  159. select case when i.install_date <> '' then i.install_date::date end,
  160. case
  161. when i.install_date <> '' then date_part('week', i.install_date::date)
  162. when i.opportunity_status = 'Pending - Install Not Scheduled' and type = 'FS' then 100 + 22
  163. when i.opportunity_status = 'Pending - Install Not Scheduled' and type = 'UR' then 99 + 22
  164. end,
  165. case when i.trr <> '' then i.trr::decimal else 0 end,
  166. case when i.paper_chem_wk1 <> '' then i.paper_chem_wk1::decimal else 0 end,
  167. case when i.paper_chem_wk2 <> '' then i.paper_chem_wk2::decimal else 0 end,
  168. case when i.paper_chem_wk3 <> '' then i.paper_chem_wk3::decimal else 0 end,
  169. case when i.paper_chem_wk4 <> '' then i.paper_chem_wk4::decimal else 0 end,
  170. case when i.power_add <> '' then i.power_add::decimal else 0 end
  171. ) w (install_date, week, trr, paper_chem_wk1, paper_chem_wk2, paper_chem_wk3, paper_chem_wk4, power_add) on true
  172. inner join lateral (
  173. select case when w.week is null then null when w.week >= 23 then w.week - 22 else w.week + 30 end,
  174. w.trr + w.paper_chem_wk1
  175. ) aw (week, week_sum) on true
  176. inner join lateral (
  177. select case when aw.week > 1 then aw.week + 1 end,
  178. case when aw.week > 2 then aw.week + 2 end,
  179. case when aw.week > 3 then aw.week + 3 end
  180. ) ow (week_minus_1, week_minus_2, week_minus_3) on true
  181. where i."importId" = provided_import_id
  182. and rtrim(opportunity_status) <> ''
  183. and aw.week is not null
  184. and aw.week not in (99, 100, 101)
  185. group by aw.week
  186. ;
  187. -- pending totals
  188. insert into weekSums (week, amount, amountType)
  189. select aw.week,
  190. sum(w.power_add),
  191. 'poweradd'
  192. from cintas_install_calendar i
  193. inner join lateral (
  194. select case when i.install_date <> '' then i.install_date::date end,
  195. case
  196. when i.install_date <> '' then date_part('week', i.install_date::date)
  197. when i.opportunity_status = 'Pending - Install Not Scheduled' and type = 'FS' then 100 + 22
  198. when i.opportunity_status = 'Pending - Install Not Scheduled' and type = 'UR' then 99 + 22
  199. end,
  200. case when i.trr <> '' then i.trr::decimal else 0 end,
  201. case when i.paper_chem_wk1 <> '' then i.paper_chem_wk1::decimal else 0 end,
  202. case when i.paper_chem_wk2 <> '' then i.paper_chem_wk2::decimal else 0 end,
  203. case when i.paper_chem_wk3 <> '' then i.paper_chem_wk3::decimal else 0 end,
  204. case when i.paper_chem_wk4 <> '' then i.paper_chem_wk4::decimal else 0 end,
  205. case when i.power_add <> '' then i.power_add::decimal else 0 end
  206. ) w (install_date, week, trr, paper_chem_wk1, paper_chem_wk2, paper_chem_wk3, paper_chem_wk4, power_add) on true
  207. inner join lateral (
  208. select case when w.week is null then null when w.week >= 23 then w.week - 22 else w.week + 30 end,
  209. w.trr + w.paper_chem_wk1
  210. ) aw (week, week_sum) on true
  211. inner join lateral (
  212. select case when aw.week > 1 then aw.week + 1 end,
  213. case when aw.week > 2 then aw.week + 2 end,
  214. case when aw.week > 3 then aw.week + 3 end
  215. ) ow (week_minus_1, week_minus_2, week_minus_3) on true
  216. where i."importId" = provided_import_id
  217. and rtrim(opportunity_status) <> ''
  218. and aw.week is not null
  219. and aw.week not in (99, 100, 101)
  220. group by aw.week
  221. ;
  222. insert into cintas_intall_calendar_summary ("importId", week, "trrTotal", "fourWkAverages", "trrPlus4Wk", "powerAdds", "weekId", "createdAt", "updatedAt")
  223. select distinct
  224. provided_import_id,
  225. case when t.week = 100 then 'Pending - FS'
  226. when t.week = 99 then 'Pending - UR'
  227. else concat('Week ', t.week::varchar(100))
  228. end "Week",
  229. 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",
  230. 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",
  231. cast(sum(case when t.amountType <> 'poweradd' then t.amount else 0 end) over (partition by t.week) as decimal(9,0)) "TRR + 4WK",
  232. cast(sum(case when t.amountType = 'poweradd' then t.amount else 0 end) over (partition by t.week) as decimal(9,0)) "Power Adds",
  233. t.week "WeekId",
  234. now(),
  235. now()
  236. from weekSums t
  237. ;
  238. insert into cintas_intall_calendar_summary ("importId", week, "trrTotal", "fourWkAverages", "trrPlus4Wk", "powerAdds", "weekId", "createdAt", "updatedAt")
  239. select provided_import_id,
  240. 'Pending - Total' "Week",
  241. sum(s."trrTotal") "TRR Total",
  242. sum(s."fourWkAverages") "4WK Averages",
  243. sum(s."trrPlus4Wk") "TRR + 4WK",
  244. sum(s."powerAdds") "Power Adds",
  245. 101 "weekId",
  246. now(),
  247. now()
  248. from cintas_intall_calendar_summary s
  249. where "importId" = provided_import_id
  250. and "weekId" in (99, 100)
  251. ;
  252. drop table weekSums;
  253. END
  254. $$;