====== pears.TimesheetDayHours ======
Generated schema reference. Regenerate this page from the SQL unload; keep hand-maintained business notes in the narrative namespace.
===== Original SQL =====
COMMENT TO PRESERVE FORMAT ON PROCEDURE "pears"."TimesheetDayHours" IS
{create function TimesheetDayHours
/* Application Maintained Function / Procedure - DO NOT EDIT*/
(in bprocess tinyint,in bprovisional tinyint,in tsid char(20),in pdate date)
returns double
begin
declare rv double;
declare placid char(20);
declare vacid char(20);
declare persid char(20);
declare desktype char(1);
declare b tinyint;
declare d smallint;
declare d1 date;
declare d2 date;
if isnull(bprocess,0) = 0 or isnull(bprovisional,0) = 0 then -- only do provisionals at present
return null
end if;
select first t.placementid,t.vacancyid,t.personid,d.desktype into placid,vacid,persid,desktype from tempprovtimesheet as t key join tempdesk as d where t.tempprovtimesheetid = tsid;
if desktype = 'M' then
return null
end if;
if desktype = 'S' then
select sum(getshiftlength(timefrom,timeto,breakminutes)) into rv from tempshift where state in( 'P','B') and shiftdate = pdate and personid = persid and vacancyid = vacid
and (( isnull( placementid, '') = isnull(placid, '') ) or ( isnull(placementid, '')='' ));
return rv
else
select first e.startdate,e.leavedate into d1,d2 from placement as p key join employment as e where p.placementid = placid;
if pdate < d1 then
return null
end if;
if pdate > d2 then
return null
end if;
select first v.WorkCancelled,v.WorkHours into b,rv from PlacementDayVariation as v where v.placementid = placid and v.VariationDate = pdate;
if b = 1 then
return null
end if;
if rv is not null then
return rv
end if;
set d=dow(pdate)-1;
select(case d when 0 then worksunday when 1 then workmonday when 2 then worktuesday when 3 then workwednesday when 4 then workthursday when 5 then workfriday when 6 then worksaturday end),
worknormalhours into b,rv from placement where placementid = placid;
if b = 1 then
return rv
end if
end if;
return null
end
}