====== pears.PopulatePayrollCalendar ======
Generated schema reference. Regenerate this page from the SQL unload; keep hand-maintained business notes in the narrative namespace.
===== Original SQL =====
create procedure "pears"."PopulatePayrollCalendar"()
/* Application Maintained Function / Procedure - DO NOT EDIT*/
begin
-- Clears out and then re-populates the Payroll Calendar table after any changes
-- Clear Out Existing Records
delete from "PayrollCalendar";
call "sa_reset_identity"('PayrollCalendar','pears',0);
-- Insert All Defined Dates
insert into "PayrollCalendar"( "Year","TheDate","Week" )
select "YearNumber",
"TheDate",
"Week"
from(select "YearNumber",
"date"("dateadd"("day",-6,"PayrollYear"."Week1Friday")) as "StartDate",
"date"("dateadd"("day",-1,("dateadd"("week","PayrollYear"."NumberOfWeeks","StartDate")))) as "EndDate",
"date"("dateadd"("day","row_num","StartDate")) as "TheDate",("row_num"/7)+1 as "Week"
from "PayrollYear" cross join "sa_rowgenerator"(0,1000)
where "TheDate" between "StartDate" and "EndDate") as "DefinedDates"
order by "TheDate" asc;
-- Remove Duplicates
delete from
"PayrollCalendar"
where "PayrollCalendarID" = any(select "a"."PayrollCalendarID" from "PayrollCalendar" as "a" join "PayrollCalendar" as "b" on "a"."TheDate" = "b"."TheDate" and "a"."Year" < "b"."Year");
-- Fill Gaps
insert into "PayrollCalendar"( "TheDate","Year","Week" )
select "Day",
(select "max"("Year") from "PayrollCalendar" where "TheDate" < "Day") as "Year",
(select "max"("Week") from "PayrollCalendar" where "TheDate" < "Day") as "Week"
from "PayrollCalendar"
right outer join(select "date"("dateadd"("day","row_num",(select "min"("TheDate") from "PayrollCalendar"))) as "Day"
from "sa_rowgenerator"(0,(select "datediff"("day","min"("TheDate"),"max"("TheDate")) from "PayrollCalendar"))) as "AllDates"
on "day" = "TheDate" where "TheDate" is null;
-- Populate Other Fields
update "PayrollCalendar" as "z"
set "z"."Period" = ("z"."Year"*100)+"z"."Week",
"WeekBeginning" = (select "min"("a"."TheDate") from "PayrollCalendar" as "a" where "a"."Year" = "z"."Year" and "a"."Week" = "z"."Week"),
"WeekEnding" = (select "max"("a"."TheDate") from "PayrollCalendar" as "a" where "a"."Year" = "z"."Year" and "a"."Week" = "z"."Week");
-- Populate PayrollCalendarWeek table
delete from "PayrollCalendarWeek";
call "sa_reset_identity"('PayrollCalendarWeek','pears',0);
insert into "PayrollCalendarWeek"( "Period","Year","Week","WeekBeginning","WeekEnding" )
select distinct "Period","Year","Week","WeekBeginning","WeekEnding" from "PayrollCalendar" order by "period" asc
end
go
COMMENT TO PRESERVE FORMAT ON PROCEDURE "pears"."PopulatePayrollCalendar" IS
{create procedure PopulatePayrollCalendar
/* Application Maintained Function / Procedure - DO NOT EDIT*/
()
BEGIN
-- Clears out and then re-populates the Payroll Calendar table after any changes
-- Clear Out Existing Records
delete from PayrollCalendar;
call sa_reset_identity('PayrollCalendar','pears',0);
-- Insert All Defined Dates
insert into PayrollCalendar(Year, TheDate, Week)
select YearNumber,
TheDate,
Week
from (
select
YearNumber,
date(dateadd(day,-6,PayrollYear.Week1Friday)) as StartDate,
date(dateadd(day,-1,(dateadd(week,PayrollYear.NumberOfWeeks,StartDate))))as EndDate,
date(dateadd(day,row_num,StartDate)) as TheDate, (row_num/7)+1 as Week
from PayrollYear cross join sa_rowgenerator(0,1000)
where TheDate between StartDate and EndDate
) DefinedDates
order by TheDate;
-- Remove Duplicates
delete from
PayrollCalendar
where
PayrollCalendarID in (select a.PayrollCalendarID from PayrollCalendar a join PayrollCalendar b on a.TheDate = b.TheDate and a.Year < b.Year);
-- Fill Gaps
insert into PayrollCalendar(TheDate,Year,Week)
select
Day,
(select max(Year) from PayrollCalendar where TheDate < Day) as Year,
(select max(Week) from PayrollCalendar where TheDate < Day) as Week
from
PayrollCalendar
right outer join
(select
date(dateadd(day,row_num,(select min(TheDate) from PayrollCalendar))) Day
from sa_rowgenerator(0,(select datediff(day,min(TheDate),max(TheDate)) from PayrollCalendar))) as AllDates
on day = TheDate where TheDate is null;
-- Populate Other Fields
update PayrollCalendar z
set z.Period = (z.Year*100)+z.Week,
WeekBeginning = (select min(a.TheDate) from PayrollCalendar a where a.Year=z.Year and a.Week=z.Week),
WeekEnding = (select max(a.TheDate) from PayrollCalendar a where a.Year=z.Year and a.Week=z.Week);
-- Populate PayrollCalendarWeek table
delete from PayrollCalendarWeek;
call sa_reset_identity('PayrollCalendarWeek','pears',0);
insert into PayrollCalendarWeek(Period, Year, Week, WeekBeginning, WeekEnding)
select distinct Period, Year, Week, WeekBeginning, WeekEnding from PayrollCalendar order by period;
END
}