====== pears.NetClientAddMultipleShifts ======
Generated schema reference. Regenerate this page from the SQL unload; keep hand-maintained business notes in the narrative namespace.
===== Original SQL =====
create procedure "pears"."NetClientAddMultipleShifts"( in "pWebUserID" char(20),in "pParamList" long varchar )
result( "pResult" char(255) )
// IQXWeb
begin
declare "RecordCount" integer;
declare "LoopCounter" integer;
declare "FieldCount" integer;
declare "ResidualRecord" long varchar;
declare "CurrentRecord" char(2048);
declare "ShiftDetailList" long varchar;
declare "ErrorResponse" char(100);
declare "CombinedErrorResponse" char(1000);
declare "vacid" char(20);
declare "shifttemplateid" char(20);
declare "ShiftDate" char(20);
declare "timefrom" char(25);
declare "timeto" char(25);
declare "BreakMinutes" char(20);
declare "TheirRef" char(50);
declare "Location" char(50);
declare "PONumber" char(50);
declare "Note" char(50);
declare "Qty" char(20);
declare "OrderReason" char(50);
declare "Skills" char(100);
declare "Grade" char(50);
declare "CanAuthorise" smallint;
declare "compid" char(20);
set "ResidualRecord" = "pParamList"+'*';
while "length"("ResidualRecord") > 0 loop
set "vacid" = '';
set "shifttemplateid" = '';
set "ShiftDate" = null;
set "timefrom" = '';
set "timeto" = '';
set "BreakMinutes" = '';
set "TheirRef" = '';
set "Location" = '';
set "PONumber" = '';
set "Note" = '';
set "Qty" = '';
set "OrderReason" = '';
set "Skills" = '';
set "Grade" = '';
set "CanAuthorise" = 0;
set "CurrentRecord" = "left"("ResidualRecord","charindex"('*',"ResidualRecord"));
set "vacid" = "replace"("left"("CurrentRecord","charindex"('|',"CurrentRecord")),'|','');
set "CurrentRecord" = "right"("CurrentRecord","length"("CurrentRecord")-"charindex"('|',"CurrentRecord"));
set "shifttemplateid" = "replace"("left"("CurrentRecord","charindex"('|',"CurrentRecord")),'|','');
set "CurrentRecord" = "right"("CurrentRecord","length"("CurrentRecord")-"charindex"('|',"CurrentRecord"));
set "shiftdate" = "replace"("left"("CurrentRecord","charindex"('|',"CurrentRecord")),'|','');
set "CurrentRecord" = "right"("CurrentRecord","length"("CurrentRecord")-"charindex"('|',"CurrentRecord"));
set "timefrom" = "replace"("replace"("left"("CurrentRecord","charindex"('|',"CurrentRecord")),'|',''),'%3A',':');
set "CurrentRecord" = "right"("CurrentRecord","length"("CurrentRecord")-"charindex"('|',"CurrentRecord"));
set "timeto" = "replace"("replace"("left"("CurrentRecord","charindex"('|',"CurrentRecord")),'|',''),'%3A',':');
set "CurrentRecord" = "right"("CurrentRecord","length"("CurrentRecord")-"charindex"('|',"CurrentRecord"));
set "Qty" = "replace"("left"("CurrentRecord","charindex"('|',"CurrentRecord")),'|','');
set "CurrentRecord" = "right"("CurrentRecord","length"("CurrentRecord")-"charindex"('|',"CurrentRecord"));
set "OrderReason" = "replace"("left"("CurrentRecord","charindex"('|',"CurrentRecord")),'|','');
set "CurrentRecord" = "right"("CurrentRecord","length"("CurrentRecord")-"charindex"('|',"CurrentRecord"));
set "TheirRef" = "replace"("left"("CurrentRecord","charindex"('|',"CurrentRecord")),'|','');
set "CurrentRecord" = "right"("CurrentRecord","length"("CurrentRecord")-"charindex"('|',"CurrentRecord"));
set "Note" = "replace"("left"("CurrentRecord","charindex"('|',"CurrentRecord")),'|','');
set "CurrentRecord" = "right"("CurrentRecord","length"("CurrentRecord")-"charindex"('|',"CurrentRecord"));
set "BreakMinutes" = "replace"("left"("CurrentRecord","charindex"('*',"CurrentRecord")),'*','');
set "ResidualRecord" = "right"("ResidualRecord","length"("ResidualRecord")-"charindex"('*',"ResidualRecord"));
set "compid" = (select "e"."companyid" from "vacancy" as "v" key join "employment" as "e" where "v"."vacancyid" = "vacid");
if not "pwebuserid" = any(select "l"."iqxnetuserid" from "iqxnetuserlink" as "l" key join "employment" as "e" where "e"."companyid" = "compid") then
select '100:~Permission denied';
return
end if;
if "isnull"("shiftdate",'') = '' then
select '101:~Invalid start date';
return
end if;
if "isnull"("timefrom",'') = '' then
select '102:~Invalid start time';
return
end if;
if "isnull"("timeto",'') = '' then
select '103:~Invalid end time';
return
end if;
if "isnull"("Qty",'') = '' then
select '104:~Invalid quantity';
return
end if;
if "isnull"("OrderReason",'') = '' then
select '105:~Order reason required';
return
end if;
set "ErrorResponse" = (select "pResult" from "NetClientAddSingleShift"("pWebUserID","vacid","shifttemplateid","shiftdate","timefrom","timeto","BreakMinutes","TheirRef",null,null,"Note","Qty","OrderReason",null,null,0));
if "ErrorResponse" = '0:~Success' then
set "ShiftDetailList" = "string"("ShiftDetailList","shiftdate",' ',"timefrom",'-',"timeto",' (',"Qty",')',"char"(13))
else
set "CombinedErrorResponse" = "string"("CombinedErrorResponse","char"(13),"shiftdate",' ',"timefrom",'-',"timeto",': ',"ErrorResponse")
end if
end loop;
if "CombinedErrorResponse" is null then
call "IQXNetPopup"("pWebUserID",null,null,"vacid",null,null,'ADDSHIFTS','New Shift requirement(s) added',"ShiftDetailList");
select '0:~Success'
else
select "CombinedErrorResponse"
end if
end /* DOC
20161025 PC wrapper for NetClientAddShiftsOneDay
use in conjunction with NetClientAddOneDay and IQXNetPopup
20170609 PC add Order reason IW-69
2018-08-01 PC improved error handling
2019-01-10 IW-784 GJ/PC Removed permission check and updated tests.
inputs:
pWebUserID
pParamList - aggregated parameters.
| between fields
* between records
outputs:
pResult
tests:
invalid pWebUserID
valid pWebUserID but no value string
valid pWebUserID and value string but no date
valid pWebUserID and value string but no start time
valid pWebUserID and value string but no end time
valid pWebUserID and value string but quantity
valid pWebUserID and value string
*/
/* TEST
call NetTestSetup('');
select pResult from NetClientAddMultipleShifts(null,null);
expect pResult=100*;
select pResult from NetClientAddMultipleShifts('test.client',null);
expect pResult=100*;
select pResult from NetClientAddMultipleShifts('test.client','TEST|TEST||||||||30*TEST|TEST||||||||60');
expect pResult=101*;
select pResult from NetClientAddMultipleShifts('test.client','TEST|TEST|2016-05-24|||||||30*TEST|TEST|2016-05-25|||||||60');
expect pResult=102*;
select pResult from NetClientAddMultipleShifts('test.client','TEST|TEST|2016-05-24|08%3A00||||||30*TEST|TEST|2016-05-25|06%3A00||||||60');
expect pResult=103*;
select pResult from NetClientAddMultipleShifts('test.client','TEST|TEST|2016-05-24|08%3A00|16%3A30|||||30*TEST|TEST|2016-05-25|06%3A00|16%3A00|||||60');
expect pResult=104*;
select pResult from NetClientAddMultipleShifts('test.client','TEST|TEST|2016-05-24|08%3A00|16%3A30|1||||30*TEST|TEST|2016-05-25|06%3A00|16%3A00|1||||60');
expect pResult=105*;
select pResult from NetClientAddMultipleShifts('test.client','TEST|TEST|2016-05-24|08%3A00|16%3A30|1|TEST|||30*TEST|TEST|2016-05-25|06%3A00|16%3A00|1|TEST|||60');
expect pResult=0:~Success;
select top 2 * from tempshiftplan where VacancyID='TEST' and TempShiftPlanID!='TEST' order by ShiftDate asc;
expect VacancyID=TEST,description=test,TimeFrom=08:00*,TimeTo=16:30*,ShiftDate=24/05/2016,BreakMinutes=30;
expect VacancyID=TEST,description=test,TimeFrom=06:00*,TimeTo=16:00*,ShiftDate=25/05/2016,BreakMinutes=60;
*/
go
COMMENT TO PRESERVE FORMAT ON PROCEDURE "pears"."NetClientAddMultipleShifts" IS
{create PROCEDURE pears."NetClientAddMultipleShifts"( in "pWebUserID" char(20),in pParamList long varchar)
result (pResult char(255))
// IQXWeb
BEGIN
declare RecordCount integer;
declare LoopCounter integer;
declare FieldCount integer;
declare ResidualRecord long varchar;
declare CurrentRecord char(2048);
declare ShiftDetailList long varchar;
declare ErrorResponse char(100);
declare CombinedErrorResponse char(1000);
declare vacid char(20);
declare shifttemplateid char(20);
declare ShiftDate char(20);
declare timefrom char(25);
declare timeto char(25);
declare BreakMinutes char(20);
declare TheirRef char(50);
declare Location char(50);
declare PONumber char(50);
declare Note char(50);
declare Qty char(20);
declare OrderReason char(50);
declare Skills char(100);
declare Grade char(50);
declare CanAuthorise smallint;
declare compid char(20);
set ResidualRecord=pParamList+'*';
while length(ResidualRecord)>0 loop
set vacid='';
set shifttemplateid='';
set ShiftDate=null;
set timefrom='';
set timeto ='';
set BreakMinutes='';
set TheirRef='';
set Location='';
set PONumber='';
set Note='';
set Qty='';
set OrderReason='';
set Skills='';
set Grade='';
set CanAuthorise =0;
set CurrentRecord=left(ResidualRecord, charindex('*',ResidualRecord));
set vacid=replace(left(CurrentRecord,charindex('|',CurrentRecord)),'|','');
set CurrentRecord=right(CurrentRecord, length(CurrentRecord)-charindex('|',CurrentRecord));
set shifttemplateid=replace(left(CurrentRecord,charindex('|',CurrentRecord)),'|','');
set CurrentRecord=right(CurrentRecord, length(CurrentRecord)-charindex('|',CurrentRecord));
set shiftdate=replace(left(CurrentRecord,charindex('|',CurrentRecord)),'|','');
set CurrentRecord=right(CurrentRecord, length(CurrentRecord)-charindex('|',CurrentRecord));
set timefrom=replace(replace(left(CurrentRecord,charindex('|',CurrentRecord)),'|',''),'%3A',':');
set CurrentRecord=right(CurrentRecord, length(CurrentRecord)-charindex('|',CurrentRecord));
set timeto=replace(replace(left(CurrentRecord,charindex('|',CurrentRecord)),'|',''),'%3A',':');
set CurrentRecord=right(CurrentRecord, length(CurrentRecord)-charindex('|',CurrentRecord));
set Qty=replace(left(CurrentRecord,charindex('|',CurrentRecord)),'|','');
set CurrentRecord=right(CurrentRecord, length(CurrentRecord)-charindex('|',CurrentRecord));
set OrderReason=replace(left(CurrentRecord,charindex('|',CurrentRecord)),'|','');
set CurrentRecord=right(CurrentRecord, length(CurrentRecord)-charindex('|',CurrentRecord));
set TheirRef=replace(left(CurrentRecord,charindex('|',CurrentRecord)),'|','');
set CurrentRecord=right(CurrentRecord, length(CurrentRecord)-charindex('|',CurrentRecord));
set Note=replace(left(CurrentRecord,charindex('|',CurrentRecord)),'|','');
set CurrentRecord=right(CurrentRecord, length(CurrentRecord)-charindex('|',CurrentRecord));
set BreakMinutes=replace(left(CurrentRecord,charindex('*',CurrentRecord)),'*','');
set ResidualRecord=right(ResidualRecord, length(ResidualRecord)-charindex('*',ResidualRecord));
set compid=(select e.companyid from vacancy v key join employment e where v.vacancyid=vacid);
if not pwebuserid in (select l.iqxnetuserid from iqxnetuserlink l key join employment e where e.companyid=compid) then
select '100:~Permission denied';
return;
end if;
if isnull(shiftdate,'') = '' then
select '101:~Invalid start date';
return;
end if;
if isnull(timefrom,'') = '' then
select '102:~Invalid start time';
return;
end if;
if isnull(timeto,'') = '' then
select '103:~Invalid end time';
return;
end if;
if isnull(Qty,'') = '' then
select '104:~Invalid quantity';
return;
end if;
if isnull(OrderReason,'') = '' then
select '105:~Order reason required';
return;
end if;
set ErrorResponse=(select pResult from NetClientAddSingleShift(pWebUserID,vacid,shifttemplateid,shiftdate,timefrom,timeto,BreakMinutes,TheirRef,null,null,Note,Qty,OrderReason,null,null,0));
if ErrorResponse ='0:~Success' then
set ShiftDetailList=string(ShiftDetailList,shiftdate,' ',timefrom,'-',timeto,' (',Qty,')',char(13));
else
set CombinedErrorResponse=string(CombinedErrorResponse,char(13),shiftdate,' ',timefrom,'-',timeto,': ',ErrorResponse);
end if
end loop;
if CombinedErrorResponse is null then
call "IQXNetPopup"("pWebUserID",null,null,vacid,null,null,'ADDSHIFTS','New Shift requirement(s) added',ShiftDetailList);
select '0:~Success';
else
select CombinedErrorResponse;
end if;
END
/* DOC
20161025 PC wrapper for NetClientAddShiftsOneDay
use in conjunction with NetClientAddOneDay and IQXNetPopup
20170609 PC add Order reason IW-69
2018-08-01 PC improved error handling
2019-01-10 IW-784 GJ/PC Removed permission check and updated tests.
inputs:
pWebUserID
pParamList - aggregated parameters.
| between fields
* between records
outputs:
pResult
tests:
invalid pWebUserID
valid pWebUserID but no value string
valid pWebUserID and value string but no date
valid pWebUserID and value string but no start time
valid pWebUserID and value string but no end time
valid pWebUserID and value string but quantity
valid pWebUserID and value string
*/
/* TEST
call NetTestSetup('');
select pResult from NetClientAddMultipleShifts(null,null);
expect pResult=100*;
select pResult from NetClientAddMultipleShifts('test.client',null);
expect pResult=100*;
select pResult from NetClientAddMultipleShifts('test.client','TEST|TEST||||||||30*TEST|TEST||||||||60');
expect pResult=101*;
select pResult from NetClientAddMultipleShifts('test.client','TEST|TEST|2016-05-24|||||||30*TEST|TEST|2016-05-25|||||||60');
expect pResult=102*;
select pResult from NetClientAddMultipleShifts('test.client','TEST|TEST|2016-05-24|08%3A00||||||30*TEST|TEST|2016-05-25|06%3A00||||||60');
expect pResult=103*;
select pResult from NetClientAddMultipleShifts('test.client','TEST|TEST|2016-05-24|08%3A00|16%3A30|||||30*TEST|TEST|2016-05-25|06%3A00|16%3A00|||||60');
expect pResult=104*;
select pResult from NetClientAddMultipleShifts('test.client','TEST|TEST|2016-05-24|08%3A00|16%3A30|1||||30*TEST|TEST|2016-05-25|06%3A00|16%3A00|1||||60');
expect pResult=105*;
select pResult from NetClientAddMultipleShifts('test.client','TEST|TEST|2016-05-24|08%3A00|16%3A30|1|TEST|||30*TEST|TEST|2016-05-25|06%3A00|16%3A00|1|TEST|||60');
expect pResult=0:~Success;
select top 2 * from tempshiftplan where VacancyID='TEST' and TempShiftPlanID!='TEST' order by ShiftDate asc;
expect VacancyID=TEST,description=test,TimeFrom=08:00*,TimeTo=16:30*,ShiftDate=24/05/2016,BreakMinutes=30;
expect VacancyID=TEST,description=test,TimeFrom=06:00*,TimeTo=16:00*,ShiftDate=25/05/2016,BreakMinutes=60;
*/
}