====== pears.NetOwnerTimesheetCreate ======
Generated schema reference. Regenerate this page from the SQL unload; keep hand-maintained business notes in the narrative namespace.
===== Original SQL =====
create procedure "pears"."NetOwnerTimesheetCreate"( in "pWebUserID" char(20),in "pStartDate" char(25),in "pLineData" long varchar )
result( "AcName" char(60),"SiteAddr" char(150),"JobTitle" char(60),"TempName" char(60),"PayBand" char(100),"Units" double,"TimesheetNumber" char(20) )
begin
declare "provtsid" char(20);
declare "persid" char(20);
declare "vacid" char(20);
declare "rateid" char(20);
declare "deskid" char(20);
declare "divid" char(20);
declare "perd" integer;
declare "lineid" char(20);
declare "bandid" char(20);
declare "lineno" integer;
declare "nUnits" double;
declare "nPayrate" double;
declare "nChargerate" double;
declare "chained" char(3);
declare "checkval" char(50);
declare "startdate" date;
declare "errmsg" char(60);
declare "thisline" char(150);
declare "i" integer;
declare "cnt" integer;
declare "cr" char(1);
declare "tab" char(1);
declare local temporary table "IDs"(
"ID" char(20) null,
"RowCnt" integer null,
"Msg" char(50) null,
) not transactional;
set "chained" = (select "connection_property"('chained'));
set "errmsg" = null;
set "cr" = "char"(13);
set "tab" = "char"(9);
set "checkval" = '.';
set "startdate" = "iqxnetstringtodate"("pStartDate");
if "startdate" is null then
set "errmsg" = 'Invalid start date'
else
if "abs"("datediff"("week",current date,"startdate")) > 5 then
set "errmsg" = 'Start date out of range'
else
set "perd" = "weekcontaining"("startdate");
if "perd" is null then
set "errmsg" = 'Payroll week out of range'
end if end if end if;
set "divid" = (select first "staff"."divisionid" from "iqxnetuser" key join "staff" where "iqxnetuser"."iqxnetuserid" = "pwebuserid");
if "divid" is null then
set "errmsg" = 'No staff division set'
end if;
set "deskid" = (select first "staff"."tempdeskid" from "iqxnetuser" key join "staff" where "iqxnetuser"."iqxnetuserid" = "pwebuserid");
if "deskid" is null then
set "errmsg" = 'No staff temp desk set'
end if;
if "errmsg" is not null then
select "errmsg",null,null,null,null,null;
return
end if;
set "Cnt" = 0;
"outerloop": loop
set "i" = "charindex"("cr","plinedata");
if "i" = 0 then
leave "outerloop"
end if;
set "thisline" = "left"("plinedata","i"-1);
set "plinedata" = "stuff"("plinedata",1,"i",null);
set "errmsg" = null;
set "Cnt" = "Cnt"+1;
set "LineID" = "uniquekey"("Cnt");
set "i" = "charindex"("tab","thisline");
if "i" = 0 then
set "vacid" = null
else
set "vacid" = "left"("thisline","i"-1);
set "thisline" = "stuff"("thisline",1,"i",null);
set "vacid" = (select first "vacancy"."vacancyid" from "vacancy" key join "employment" key join "company" where "vacancy"."vacancyid" = "vacid" and "company"."divisionid" = "divid");
if "vacid" is null then
set "errmsg" = 'Invalid vacancy ID'
end if end if;
set "i" = "charindex"("tab","thisline");
if "i" = 0 then
set "persid" = null
else
set "persid" = "left"("thisline","i"-1);
set "thisline" = "stuff"("thisline",1,"i",null);
set "persid" = (select first "personid" from "person" where "personid" = "persid" and "divisionid" = "divid");
if "persid" is null then
set "errmsg" = "isnull"("errmsg",'Invalid person ID')
end if end if;
set "i" = "charindex"("tab","thisline");
if "i" = 0 then
set "rateid" = null
else
set "rateid" = "left"("thisline","i"-1);
set "thisline" = "stuff"("thisline",1,"i",null);
set "bandid" = null;
select "temppaybandid","payrate","chargerate" into "bandid","npayrate","nchargerate" from "tempjobrate" where "tempjobrateid" = "rateid" and "vacancyid" = "vacid";
if "bandid" is null then
set "errmsg" = "isnull"("errmsg",'Invalid rate ID')
end if end if;
begin
set "nunits" = cast("trim"("thisline") as double)
exception
when others then set "errmsg" = "isnull"("errmsg",'Invalid unit value')
end;
insert into "IDs"( "ID","RowCnt","msg" ) values( "LineID","Cnt","errmsg" ) ;
if "errmsg" is null then
if "vacid"+"persid" <> "checkval" then
set "lineno" = 0;
set "provtsid" = "uniquekey"("checkval");
set "checkval" = "vacid"+"persid";
insert into "TempProvTimeSheet"( "TempProvTimeSheetID","PersonID","VacancyID","TempDeskID","Period","PeriodLength","ExtNumber","TheirRef" ) values
( "provtsid","persid","vacid","deskid","perd",'W',2,null ) ;
if "chained" = 'On' then
begin atomic
call "NetNumberProvTimesheet"("provtsid")
end
else call "NetNumberProvTimesheet"("provtsid")
end if end if;
set "lineno" = "lineno"+1;
insert into "TempProvTimesheetLine"( "TempProvTimeSheetLineID","TempProvTimeSheetID","TempPayBandID","LineNumber","UnitsPaid","UnitsCharged","PayRate","ChargeRate" ) values
( "lineid","provtsid","bandid","lineno","nUnits","nUnits","nPayrate","nChargeRate" )
end if
end loop "outerloop";
select "isnull"((select "name" from "company" where "companyid" = "getinvoicecompanyid"("co"."clientcode")),"ids"."msg") as "acname","string"("co"."name",', ',"co"."addr1") as "siteaddr","vacancy"."position","person"."name",
"string"((select "Description" from "temppayband" where "temppaybandid" = "l"."temppaybandid"),' ',"trim"("str"("l"."payrate",12,2)),'/',"trim"("str"("l"."chargerate",12,2))) as "payband","l"."unitspaid","t"."serialnumber"
from "ids" left outer join "tempprovtimesheetline" as "l" on "ids"."id" = "l"."tempprovtimesheetlineid" key join "tempprovtimesheet" as "t" key join("person",("vacancy" key join "employment" key join "company" as "co"))
order by "ids"."rowcnt" asc
end
go
COMMENT TO PRESERVE FORMAT ON PROCEDURE "pears"."NetOwnerTimesheetCreate" IS
{create procedure pears."NetOwnerTimesheetCreate"( in "pWebUserID" char(20),in "pStartDate" char(25),in "pLineData" long varchar )
result( "AcName" char(60),"SiteAddr" char(150),"JobTitle" char(60),"TempName" char(60),"PayBand" char(100),"Units" double,"TimesheetNumber" char(20) )
begin
declare "provtsid" char(20);
declare "persid" char(20);
declare "vacid" char(20);
declare "rateid" char(20);
declare "deskid" char(20);
declare "divid" char(20);
declare "perd" integer;
declare "lineid" char(20);
declare "bandid" char(20);
declare "lineno" integer;
declare "nUnits" double;
declare "nPayrate" double;
declare "nChargerate" double;
declare "chained" char(3);
declare "checkval" char(50);
declare "startdate" date;
declare "errmsg" char(60);
declare "thisline" char(150);
declare "i" integer;
declare "cnt" integer;
declare "cr" char(1);
declare "tab" char(1);
declare local temporary table "IDs"(
"ID" char(20) null,
"RowCnt" integer null,
"Msg" char(50) null,
) not transactional;
set "chained" = (select "connection_property"('chained'));
set "errmsg" = null;
set "cr" = "char"(13);
set "tab" = "char"(9);
set "checkval" = '.';
set "startdate" = "iqxnetstringtodate"("pStartDate");
if "startdate" is null then
set "errmsg" = 'Invalid start date'
else
if "abs"("datediff"("week",current date,"startdate")) > 5 then
set "errmsg" = 'Start date out of range'
else
set "perd" = "weekcontaining"("startdate");
if "perd" is null then
set "errmsg" = 'Payroll week out of range'
end if
end if end if;
set "divid" = (select first "staff"."divisionid" from "iqxnetuser" key join "staff" where "iqxnetuser"."iqxnetuserid" = "pwebuserid");
if "divid" is null then
set "errmsg" = 'No staff division set'
end if;
set "deskid" = (select first "staff"."tempdeskid" from "iqxnetuser" key join "staff" where "iqxnetuser"."iqxnetuserid" = "pwebuserid");
if "deskid" is null then
set "errmsg" = 'No staff temp desk set'
end if;
if "errmsg" is not null then
select "errmsg",null,null,null,null,null;
return
end if;
set "Cnt" = 0;
"outerloop": loop
set "i" = "charindex"("cr","plinedata");
if "i" = 0 then
leave "outerloop"
end if;
set "thisline" = "left"("plinedata","i"-1);
set "plinedata" = "stuff"("plinedata",1,"i",null);
set "errmsg" = null;
set "Cnt" = "Cnt"+1;
set "LineID" = "uniquekey"("Cnt");
set "i" = "charindex"("tab","thisline");
if "i" = 0 then
set "vacid" = null
else
set "vacid" = "left"("thisline","i"-1);
set "thisline" = "stuff"("thisline",1,"i",null);
set "vacid" = (select first "vacancy"."vacancyid" from "vacancy" key join "employment" key join "company" where "vacancy"."vacancyid" = "vacid" and "company"."divisionid" = "divid");
if "vacid" is null then
set "errmsg" = 'Invalid vacancy ID'
end if end if;
set "i" = "charindex"("tab","thisline");
if "i" = 0 then
set "persid" = null
else
set "persid" = "left"("thisline","i"-1);
set "thisline" = "stuff"("thisline",1,"i",null);
set "persid" = (select first "personid" from "person" where "personid" = "persid" and "divisionid" = "divid");
if "persid" is null then
set "errmsg" = "isnull"("errmsg",'Invalid person ID')
end if end if;
set "i" = "charindex"("tab","thisline");
if "i" = 0 then
set "rateid" = null
else
set "rateid" = "left"("thisline","i"-1);
set "thisline" = "stuff"("thisline",1,"i",null);
set "bandid" = null;
select "temppaybandid","payrate","chargerate" into "bandid","npayrate","nchargerate" from "tempjobrate" where "tempjobrateid" = "rateid" and "vacancyid" = "vacid";
if "bandid" is null then
set "errmsg" = "isnull"("errmsg",'Invalid rate ID')
end if end if;
begin
set "nunits" = cast("trim"("thisline") as double)
exception
when others then set "errmsg" = "isnull"("errmsg",'Invalid unit value')
end;
insert into "IDs"( "ID","RowCnt","msg" ) values( "LineID","Cnt","errmsg" ) ;
if "errmsg" is null then
if "vacid"+"persid" <> "checkval" then
set "lineno" = 0;
set "provtsid" = "uniquekey"("checkval");
set "checkval" = "vacid"+"persid";
insert into "TempProvTimeSheet"( "TempProvTimeSheetID","PersonID","VacancyID","TempDeskID","Period","PeriodLength","ExtNumber","TheirRef" ) values
( "provtsid","persid","vacid","deskid","perd",'W',2,null ) ;
if "chained" = 'On' then
begin atomic
call "NetNumberProvTimesheet"("provtsid")
end
else call "NetNumberProvTimesheet"("provtsid")
end if end if;
set "lineno" = "lineno"+1;
insert into "TempProvTimesheetLine"( "TempProvTimeSheetLineID","TempProvTimeSheetID","TempPayBandID","LineNumber","UnitsPaid","UnitsCharged","PayRate","ChargeRate" ) values
( "lineid","provtsid","bandid","lineno","nUnits","nUnits","nPayrate","nChargeRate" )
end if
end loop "outerloop";
select "isnull"((select "name" from "company" where "companyid" = "getinvoicecompanyid"("co"."clientcode")),"ids"."msg") as "acname","string"("co"."name",', ',"co"."addr1") as "siteaddr","vacancy"."position","person"."name",
"string"((select "Description" from "temppayband" where "temppaybandid" = "l"."temppaybandid"),' ',"trim"("str"("l"."payrate",12,2)),'/',"trim"("str"("l"."chargerate",12,2))) as "payband","l"."unitspaid","t"."serialnumber"
from "ids" left outer join "tempprovtimesheetline" as "l" on "ids"."id" = "l"."tempprovtimesheetlineid" key join "tempprovtimesheet" as "t" key join("person",("vacancy" key join "employment" key join "company" as "co"))
order by "ids"."rowcnt" asc
end
}