====== pears.NetClientAddSingleShift ======
Generated schema reference. Regenerate this page from the SQL unload; keep hand-maintained business notes in the narrative namespace.
===== Original SQL =====
create procedure "pears"."NetClientAddSingleShift"( in "pWebUserID" char(20),in "pvacancyid" char(20),in "pshifttemplateid" char(20),in "pdate" date,
in "ptimefrom" char(25) default null,in "ptimeto" char(25) default null,in "pBreak" char(20) default null,in "pTheirRef" char(50) default null,
in "pLocation" char(50) default null,in "pPONumber" char(50) default null,in "pNote" char(50) default null,in "pQty" char(20) default null,
in "pOrderReason" char(50) default null,in "pSkills" char(100) default null,in "pGrade" char(50) default null,in "pCanAuthorise" smallint default 0 )
result( "pResult" char(255) )
// IQXWeb
begin
declare "sid" char(20);
declare "cnt" integer;
declare "tfrom" time;
declare "tto" time;
declare "ibreak" integer;
declare "isReasonCompulsory" integer;
declare "RefNote" char(50);
declare "WebUser" char(60);
declare "TempShiftTemplateID" char(20);
declare "NewState" char(5);
if "pTheirRef" <> '' then
set "RefNote" = "ucase"("pTheirRef")
else
set "RefNote" = "pPONumber"
end if;
if "isnull"("pNote",'') = '' then set "pNote" = "pLocation"
end if;
if "pdate" is null then
select '101:~pDate is null';
return
end if;
set "cnt" = "isnull"("iqxnetstringtointeger"("pqty"),0);
if "cnt" <= 0 then
select '102:~Quantity is 0';
return
end if;
set "tfrom" = "iqxnetstringtotime"("ptimefrom");
set "tto" = "iqxnetstringtotime"("ptimeto");
set "ibreak" = "iqxnetstringtointeger"("pbreak"); -- If times and break not supplied they will come from the template
set "WebUser" = (select top 1 "name" from "iqxnetuser" where "iqxnetuserid" = "pWebUserID");
set "NewState" = 'C';
while "cnt" > 0 loop
set "sid" = "uniquekey"("cnt"*"rand"()*10);
set "isReasonCompulsory" = (select first "ShiftOrderReasonRequired" from "TempShiftTemplate" where "TempShiftTemplateID" = "pshifttemplateid");
if "pOrderReason" = '' and "isReasonCompulsory" = 1 then
select '105~Reason is compulsory';
return
end if;
insert into "tempshiftplan"( "TempShiftPlanID","VacancyID","TimeFrom","TimeTo","BreakMinutes","ShiftDate","Moveable","Description","ClientNote",
"EssentialSkill","EssentialSkillChoiceList","EssentialSkillGradeID",
"ReferenceCode","ReferenceRequired",
"ClientMustConfirm","TempMustConfirm","OrderedBy","TempShiftTypeID","AnalysisCode","RecoveryHours","TempShiftOrderReasonID","TempShiftTemplateID" )
select top 1 "sid","pvacancyid","isnull"("tfrom","timefrom"),"isnull"("tto","timeto"),"isnull"("ibreak","breakminutes"),"pdate","Moveable","Description","pNote",
"string"("taglocation",';',"tagid",';',"tagchoiceid",';',"gradetagid"),"replace"("pskills","char"(9),';'),"isnull"("pgrade","EssentialSkillGradeID"),
"RefNote","ReferenceRequired",
"ClientMustConfirm","TempMustConfirm","WebUser","TempShiftTypeID","AnalysisCode","RecoveryHours","nullif"("pOrderReason",''),"pShiftTemplateID"
from "tempshifttemplate" where "tempshifttemplateid" = "pshifttemplateid";
call "NetSetShiftPlanCascade"("sid");
-- retain the section below until definitely not required
-- if "pCanAuthorise" = 0 then
-- insert into "tempshift"( "tempshiftid","vacancyid","shiftdate","timefrom","timeto","breakminutes","state","tempshiftplanid","cancelreason",ConfirmedWith,"TempshiftTemplateID" )
-- select "sid","pvacancyid","pdate","isnull"("tfrom","timefrom"),"isnull"("tto","timeto"),"isnull"("ibreak","breakminutes"),NewState,"sid",'~',WebUser,"pShiftTemplateID"
-- from "tempshifttemplate" where "tempshifttemplateid" = "pshifttemplateid";
-- end if;
set "cnt" = "cnt"-1
end loop;
select '0:~Success'
end /* DOC
20161025 IW-69 PC modified NetClientAddShiftsOneDay, but removing pLog and other things, which was causing a return error. use in conjunction with NetClientAddMultipleShifts
2018-08-22 PC improve error handling
tests:
invalid pwebuserid
valid pwebuserid but invalid pvacancyid
valid pwebuserid, valid pvacancyid but invalid ptempshifttemplateid
valid pwebuserid, pvacancyid, ptempshifttemplateid but invalid date
valid pwebuserid, pvacancyid, ptempshifttemplateid, date but invalid timefrom
valid pwebuserid, pvacancyid, ptempshifttemplateid, date, timefrom but invalid quantity
valid pwebuserid, pvacancyid, ptempshifttemplateid, date, timefrom, quantity
*/
/* TEST
call NetTestSetup('');
delete from tempshiftplan where vacancyid='TEST';
select replace(pResult,' ','!') as A from NetClientAddSingleShift(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,0 );
expect A=101*;
select replace(pResult,' ','!') as A from NetClientAddSingleShift('test.client',null,null,null,null,null,null,null,null,null,null,null,null,null,null,0 );
expect A=101*;
select replace(pResult,' ','!') as A from NetClientAddSingleShift('test.client','TEST',null,null,null,null,null,null,null,null,null,null,null,null,null,0 );
expect A=101*;
select replace(pResult,' ','!') as A from NetClientAddSingleShift('test.client','TEST','TEST',null,null,null,null,null,null,null,null,null,null,null,null,0 );
expect A=101*;
select replace(pResult,' ','!') as A from NetClientAddSingleShift('test.client','TEST','TEST',today(),null,null,null,null,null,null,null,0,null,null,null,0 );
expect A=102*;
select replace(pResult,' ','!') as A from NetClientAddSingleShift('test.client','TEST','TEST',today(),null,null,null,null,null,null,null,1,null,null,null,0 );
expect A=0:~Success;
select top 1 * from tempshiftplan order by whenentered desc;
expect VacancyID=TEST,Description=test,TimeFrom=08:00*,TimeTo=16:00*;
delete from tempshiftplan where vacancyid='TEST';
*/
go
COMMENT TO PRESERVE FORMAT ON PROCEDURE "pears"."NetClientAddSingleShift" IS
{create PROCEDURE pears."NetClientAddSingleShift"( in "pWebUserID" char(20),in "pvacancyid" char(20),in "pshifttemplateid" char(20),in "pdate" date,
in "ptimefrom" char(25) default null,in "ptimeto" char(25) default null,in "pBreak" char(20) default null,in "pTheirRef" char(50) default null,
in "pLocation" char(50) default null,in "pPONumber" char(50) default null,in "pNote" char(50) default null,in "pQty" char(20) default null,
in "pOrderReason" char(50) default null,in "pSkills" char(100) default null,in "pGrade" char(50) default null,in "pCanAuthorise" smallint default 0 )
result (pResult char(255))
// IQXWeb
begin
declare "sid" char(20);
declare "cnt" integer;
declare "tfrom" time;
declare "tto" time;
declare "ibreak" integer;
declare "isReasonCompulsory" integer;
declare "RefNote" char(50);
declare WebUser char(60);
declare TempShiftTemplateID char(20);
declare NewState char(5);
if "pTheirRef" <> '' then
set "RefNote" = "ucase"("pTheirRef")
else
set "RefNote" = "pPONumber"
end if;
if "isnull"("pNote",'') = '' then set "pNote" = "pLocation"
end if;
if "pdate" is null then
select '101:~pDate is null';
return
end if;
set "cnt" = "isnull"("iqxnetstringtointeger"("pqty"),0);
if "cnt" <= 0 then
select '102:~Quantity is 0';
return
end if;
set "tfrom" = "iqxnetstringtotime"("ptimefrom");
set "tto" = "iqxnetstringtotime"("ptimeto");
set "ibreak" = "iqxnetstringtointeger"("pbreak"); -- If times and break not supplied they will come from the template
set WebUser=(select top 1 name from iqxnetuser where iqxnetuserid=pWebUserID);
set NewState='C';
while "cnt" > 0 loop
set "sid" = "uniquekey"("cnt" * rand()*10);
set "isReasonCompulsory" = (select first "ShiftOrderReasonRequired" from "TempShiftTemplate" where "TempShiftTemplateID" = "pshifttemplateid");
if "pOrderReason" = '' and "isReasonCompulsory" = 1 then
select '105~Reason is compulsory';
return
end if;
insert into "tempshiftplan"( "TempShiftPlanID","VacancyID","TimeFrom","TimeTo","BreakMinutes","ShiftDate","Moveable","Description","ClientNote",
"EssentialSkill","EssentialSkillChoiceList","EssentialSkillGradeID",
"ReferenceCode","ReferenceRequired",
"ClientMustConfirm","TempMustConfirm","OrderedBy","TempShiftTypeID","AnalysisCode","RecoveryHours","TempShiftOrderReasonID","TempShiftTemplateID" )
select top 1 "sid","pvacancyid","isnull"("tfrom","timefrom"),"isnull"("tto","timeto"),"isnull"("ibreak","breakminutes"),"pdate","Moveable","Description","pNote",
"string"("taglocation",';',"tagid",';',"tagchoiceid",';',"gradetagid"),"replace"("pskills","char"(9),';'),isnull("pgrade",EssentialSkillGradeID),
"RefNote","ReferenceRequired",
"ClientMustConfirm","TempMustConfirm","WebUser","TempShiftTypeID","AnalysisCode","RecoveryHours","nullif"("pOrderReason",''),"pShiftTemplateID"
from "tempshifttemplate" where "tempshifttemplateid" = "pshifttemplateid";
call "NetSetShiftPlanCascade"("sid");
-- retain the section below until definitely not required
-- if "pCanAuthorise" = 0 then
-- insert into "tempshift"( "tempshiftid","vacancyid","shiftdate","timefrom","timeto","breakminutes","state","tempshiftplanid","cancelreason",ConfirmedWith,"TempshiftTemplateID" )
-- select "sid","pvacancyid","pdate","isnull"("tfrom","timefrom"),"isnull"("tto","timeto"),"isnull"("ibreak","breakminutes"),NewState,"sid",'~',WebUser,"pShiftTemplateID"
-- from "tempshifttemplate" where "tempshifttemplateid" = "pshifttemplateid";
-- end if;
set "cnt" = "cnt"-1;
end loop;
select '0:~Success';
end
/* DOC
20161025 IW-69 PC modified NetClientAddShiftsOneDay, but removing pLog and other things, which was causing a return error. use in conjunction with NetClientAddMultipleShifts
2018-08-22 PC improve error handling
tests:
invalid pwebuserid
valid pwebuserid but invalid pvacancyid
valid pwebuserid, valid pvacancyid but invalid ptempshifttemplateid
valid pwebuserid, pvacancyid, ptempshifttemplateid but invalid date
valid pwebuserid, pvacancyid, ptempshifttemplateid, date but invalid timefrom
valid pwebuserid, pvacancyid, ptempshifttemplateid, date, timefrom but invalid quantity
valid pwebuserid, pvacancyid, ptempshifttemplateid, date, timefrom, quantity
*/
/* TEST
call NetTestSetup('');
delete from tempshiftplan where vacancyid='TEST';
select replace(pResult,' ','!') as A from NetClientAddSingleShift(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,0 );
expect A=101*;
select replace(pResult,' ','!') as A from NetClientAddSingleShift('test.client',null,null,null,null,null,null,null,null,null,null,null,null,null,null,0 );
expect A=101*;
select replace(pResult,' ','!') as A from NetClientAddSingleShift('test.client','TEST',null,null,null,null,null,null,null,null,null,null,null,null,null,0 );
expect A=101*;
select replace(pResult,' ','!') as A from NetClientAddSingleShift('test.client','TEST','TEST',null,null,null,null,null,null,null,null,null,null,null,null,0 );
expect A=101*;
select replace(pResult,' ','!') as A from NetClientAddSingleShift('test.client','TEST','TEST',today(),null,null,null,null,null,null,null,0,null,null,null,0 );
expect A=102*;
select replace(pResult,' ','!') as A from NetClientAddSingleShift('test.client','TEST','TEST',today(),null,null,null,null,null,null,null,1,null,null,null,0 );
expect A=0:~Success;
select top 1 * from tempshiftplan order by whenentered desc;
expect VacancyID=TEST,Description=test,TimeFrom=08:00*,TimeTo=16:00*;
delete from tempshiftplan where vacancyid='TEST';
*/
}