====== 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; */ }