====== pears.NetClientAddVacancies ======
Generated schema reference. Regenerate this page from the SQL unload; keep hand-maintained business notes in the narrative namespace.
===== Original SQL =====
create procedure "pears"."NetClientAddVacancies"( in "pWebUserID" char(20),in "ptemplatevacancyid" char(50),in "pdatefrom" char(25),
in "pdateto" char(25) default null,in "pTheirRef" char(50) default null,in "pTitle" char(100) default null,in "pDescription" long varchar default null,in "pquantity" char(25) default '1' )
result( "pResult" char(250) )
// IQXWeb
begin
declare "swebusername" char(50);
declare "sid" char(20);
declare "cnt" integer;
declare "dfrom" date;
declare "dto" date;
declare "CanAuthorise" smallint;
declare "NewVacancyState" char(1);
declare local temporary table "IDs"(
"ID" char(20) null,
) not transactional;
insert into "IDs"( "ID" )
select "companyid" from "employment" key join "iqxnetuserlink" where "iqxnetuserid" = "pWebUserID";
if not "ptemplatevacancyid" = any(select "v"."vacancyid" from "vacancy" as "v" key join "employment" as "e" join "IDs" on "e"."companyid" = "IDs"."ID") then
select '99:~Permission denied';
return
end if;
if "IQXNetHasPermission"("pWebUserID",'ORDERJOBS') = 0 then
select '99:~Permission denied';
return
end if;
set "swebusername" = (select "name" from "iqxnetuser" where "iqxnetuserid" = "pwebuserid");
set "cnt" = "iqxnetstringtointeger"("pquantity");
if "cnt" is null or "cnt" = 0 then
select '450:~Invalid quantity';
return
end if;
set "dfrom" = "iqxnetstringtodate"("pdatefrom");
if "dfrom" is null then
select '500:~Invalid start date';
return
end if;
set "pdateto" = "nullif"("trim"("pdateto"),'');
set "dto" = "iqxnetstringtodate"("pdateto");
if "pdateto" is not null and "dto" is null then
select '500:~Invalid end date';
return
end if;
set "CanAuthorise" = "IQXNetHasPermission"("pWebUserID",'AUTHORISEJOBS');
if "CanAuthorise" = 1 then
set "NewVacancyState" = 'C'
else
set "NewVacancyState" = ']'
end if;
set "sid" = "uniquekey"("cnt");
insert into "vacancy"( "vacancyid","departmentid","employmentid","staffid","entrydate","status","startdate","FinishDate","temp","position","notes","othernotes","classcode","ErNI","HolidayAllowance","Discount",
"TempDeskID","PayrollIdentifier","AnalysisCode","clientdepartment","Currency","RecipientID","Role","SiteName","SiteContact","addr1","addr2","addr3","town","county","country","postcode","TempJobTypeID",
"SitePhoneNumbers","Invaddr1","Invaddr2","Invaddr3","Invtown","Invcounty","Invcountry","Invpostcode","SiteFax","SiteEmail","TheirRef",
"PriceListID","SendShiftsToPayroll","WorkMonday","WorkTuesday","WorkWednesday","WorkThursday","WorkFriday","WorkSaturday","WorkSunday","WorkNormalHours","WorkStartTime","noofposts" )
select "sid","departmentid","employmentid","staffid",current date,"NewVacancyState","dfrom","dto","temp","isnull"("pTitle","position"),"notes","isnull"("pDescription","othernotes"),"classcode","ErNI","HolidayAllowance","Discount",
"TempDeskID","PayrollIdentifier","AnalysisCode","clientdepartment","Currency","RecipientID","Role","SiteName","SiteContact","addr1","addr2","addr3","town","county","country","postcode","TempJobTypeID",
"SitePhoneNumbers","Invaddr1","Invaddr2","Invaddr3","Invtown","Invcounty","Invcountry","Invpostcode","SiteFax","SiteEmail","ucase"("pTheirRef"),
"PriceListID","SendShiftsToPayroll","WorkMonday","WorkTuesday","WorkWednesday","WorkThursday","WorkFriday","WorkSaturday","WorkSunday","WorkNormalHours","WorkStartTime","cnt"
from "vacancy" where "vacancyid" = "ptemplatevacancyid";
insert into "tempjobrate"( "TempJobRateID","VacancyID","TempPayBandID","PayRate","ChargeRate","StartDate","EndDate","Grade" )
select "uniquekey"("TempJobRateID"),"sid","TempPayBandID","PayRate","ChargeRate","StartDate","EndDate","Grade"
from "tempjobrate" where "vacancyid" = "ptemplatevacancyid";
insert into "criterion"( "searchlocation","id","critid","sourcelocation","dictionaryid","tagid","tagchoiceid","notflag","matchtype","textvalue","value","uppervalue","taganytotal","extravalue","extrauppervalue","extramatchtype" )
select "searchlocation","sid","critid","sourcelocation","dictionaryid","tagid","tagchoiceid","notflag","matchtype","textvalue","value","uppervalue","taganytotal","extravalue","extrauppervalue","extramatchtype"
from "criterion" where "searchlocation" like 'V%' and "id" = "ptemplatevacancyid";
call "NetSetVacancyCascade"("sid");
if "CanAuthorise" = 1 then
call "IQXNetPopup"("pWebUserID",null,null,"sid",null,null,'ADDVACANCY','New vacancy requirement added',null)
end if;
select '0:~Success'
end /* DOC
2016-10-25 PC IW-69 test and doc sections added
2018-08-22 PC improve test handling
2019-02-20 PC IW-838 create only one vacancy with multiple count, instead of looping to create multiple vacancies
tests:
invalid pWebUserID
valid pWebUserID and invalid pTemplateVacancyID
valid pWebUserID, valid pTemplateVacancyID which does not belong to pWebUserID
valid pWebUserID, valid pTemplateVacancyID but ORDERJOBS set false
valid pWebUserID, valid pTemplateVacancyID, ORDERJOBS set true but invalid quantity
valid pWebUserID, valid pTemplateVacancyID, ORDERJOBS set true, valid quantity but invalid start date
valid pWebUserID, valid pTemplateVacancyID, ORDERJOBS set true, valid quantity, valid start date but invalid end date
valid pWebUserID, valid pTemplateVacancyID, ORDERJOBS set true, valid quantity, valid start date and null end date
valid pWebUserID, valid pTemplateVacancyID, ORDERJOBS set true, valid quantity, valid start date and null valid date
all fields valid and AUTHORISEJOBS set to 0
all fields valid and AUTHORISEJOBS set to 1
*/
/* TEST
call NetTestSetup('');
update iqxnetuserlink set employmentid=null where IQXNetUserLinkID in ('test.client','test.agency','test.candidate','test.owner');
update iqxnetuserlink set employmentid='TEST' where IQXNetUserLinkID='test.client';
update vacancy set status='[' where vacancyid='test';
delete from iqxnetrightallowed where iqxnetrightid='ORDERJOBS' and iqxnetuserclassid='client';
delete from iqxnetrightallowed where iqxnetrightid='AUTHORISEJOBS' and iqxnetuserclassid='client';
select * from NetClientAddVacancies(null,null,null,null,null,null,null,null);
expect pResult=99*;
select * from NetClientAddVacancies('test.x',null,null,null,null,null,null,null);
expect pResult=99*;
select * from NetClientAddVacancies('test.client',null,null,null,null,null,null,null);
expect pResult=99*;
insert into iqxnetrightallowed values ('ORDERJOBS','CLIENT','*',1);
select * from NetClientAddVacancies('test.client','test',null,null,null,null,null,null);
expect pResult=450*;
select * from NetClientAddVacancies('test.client','test',null,null,null,null,null,1);
expect pResult=500*;
select * from NetClientAddVacancies('test.client','test',dateformat(now(*),'dd/mm/yyyy'),'xx',null,null,null,1);
expect pResult=500*;
select * from NetClientAddVacancies('test.client','test',dateformat(now(*),'dd/mm/yyyy'),null,null,null,null,1);
expect pResult=0*;
select top 1 departmentid,employmentid,(if entrydate=dateformat(now(*),'yyyy-mm-dd') then 1 else 0 endif) as A,status,position,(if startdate=dateformat(now(*),'yyyy-mm-dd') then 1 else 0 endif) as B,(if isnull(finishdate,'1900-01-01')=isnull(dateformat(dateadd(dd,2,now(*)),'yyyy-mm-dd'),'1900-01-01') then 1 else 0 endif) as C from vacancy order by whenentered desc;
expect departmentid=~~,employmentid=TEST,A=1,status=],position=test,B=1,C=0;
select * from NetClientAddVacancies('test.client','test',dateformat(now(*),'dd/mm/yyyy'),dateformat(dateadd(dd,2,now(*)),'dd/mm/yyyy'),null,null,null,1);
expect pResult=0*;
select top 1 departmentid,employmentid,(if entrydate=dateformat(now(*),'yyyy-mm-dd') then 1 else 0 endif) as D,status,position,(if startdate=dateformat(now(*),'yyyy-mm-dd') then 1 else 0 endif) as E,(if isnull(finishdate,'1900-01-01')=isnull(dateformat(dateadd(dd,2,now(*)),'yyyy-mm-dd'),'1900-01-01') then 1 else 0 endif) as F from vacancy order by whenentered desc;
expect departmentid=~~,employmentid=TEST,D=1,status=],position=test,E=1,F=1;
insert into iqxnetrightallowed values ('AUTHORISEJOBS','CLIENT','*',1);
select * from NetClientAddVacancies('test.client','test',dateformat(now(*),'dd/mm/yyyy'),dateformat(dateadd(dd,3,now(*)),'dd/mm/yyyy'),null,null,null,1);
expect pResult=0*;
update vacancy set status=null where vacancyid='test';
select top 1 staffid,employmentid,replace(description,' ','!') as A,DurationType from diary order by whenentered desc ;
expect staffid=TEST,A=New!vacancy*,DurationType=R;
update vacancy set status='[' where vacancyid='test';
*/
go
COMMENT TO PRESERVE FORMAT ON PROCEDURE "pears"."NetClientAddVacancies" IS
{create PROCEDURE pears."NetClientAddVacancies"( in "pWebUserID" char(20),in "ptemplatevacancyid" char(50),in "pdatefrom" char(25),
in "pdateto" char(25) default null,in "pTheirRef" char(50) default null,in "pTitle" char(100) default null,in "pDescription" long varchar default null,in "pquantity" char(25) default '1' )
result( "pResult" char(250) )
// IQXWeb
begin
declare "swebusername" char(50);
declare "sid" char(20);
declare "cnt" integer;
declare "dfrom" date;
declare "dto" date;
declare "CanAuthorise" smallint;
declare "NewVacancyState" char(1);
declare local temporary table "IDs"(
"ID" char(20) null,
) not transactional;
insert into "IDs"( "ID" )
select "companyid" from "employment" key join "iqxnetuserlink" where "iqxnetuserid" = "pWebUserID";
if not "ptemplatevacancyid" = any(select "v"."vacancyid" from "vacancy" as "v" key join "employment" as "e" join "IDs" on "e"."companyid" = "IDs"."ID") then
select '99:~Permission denied';
return
end if;
if "IQXNetHasPermission"("pWebUserID",'ORDERJOBS') = 0 then
select '99:~Permission denied';
return
end if;
set "swebusername" = (select "name" from "iqxnetuser" where "iqxnetuserid" = "pwebuserid");
set "cnt" = "iqxnetstringtointeger"("pquantity");
if "cnt" is null or "cnt" = 0 then
select '450:~Invalid quantity';
return
end if;
set "dfrom" = "iqxnetstringtodate"("pdatefrom");
if "dfrom" is null then
select '500:~Invalid start date';
return
end if;
set "pdateto" = "nullif"("trim"("pdateto"),'');
set "dto" = "iqxnetstringtodate"("pdateto");
if "pdateto" is not null and "dto" is null then
select '500:~Invalid end date';
return
end if;
set "CanAuthorise" = "IQXNetHasPermission"("pWebUserID",'AUTHORISEJOBS');
if "CanAuthorise" = 1 then
set "NewVacancyState" = 'C'
else
set "NewVacancyState" = ']'
end if;
set "sid" = "uniquekey"("cnt");
insert into "vacancy"( "vacancyid","departmentid","employmentid","staffid","entrydate","status","startdate","FinishDate","temp","position","notes","othernotes","classcode","ErNI","HolidayAllowance","Discount",
"TempDeskID","PayrollIdentifier","AnalysisCode","clientdepartment","Currency","RecipientID","Role","SiteName","SiteContact","addr1","addr2","addr3","town","county","country","postcode","TempJobTypeID",
"SitePhoneNumbers","Invaddr1","Invaddr2","Invaddr3","Invtown","Invcounty","Invcountry","Invpostcode","SiteFax","SiteEmail","TheirRef",
"PriceListID","SendShiftsToPayroll","WorkMonday","WorkTuesday","WorkWednesday","WorkThursday","WorkFriday","WorkSaturday","WorkSunday","WorkNormalHours","WorkStartTime","noofposts" )
select "sid","departmentid","employmentid","staffid",current date,"NewVacancyState","dfrom","dto","temp","isnull"("pTitle","position"),"notes","isnull"("pDescription","othernotes"),"classcode","ErNI","HolidayAllowance","Discount",
"TempDeskID","PayrollIdentifier","AnalysisCode","clientdepartment","Currency","RecipientID","Role","SiteName","SiteContact","addr1","addr2","addr3","town","county","country","postcode","TempJobTypeID",
"SitePhoneNumbers","Invaddr1","Invaddr2","Invaddr3","Invtown","Invcounty","Invcountry","Invpostcode","SiteFax","SiteEmail","ucase"("pTheirRef"),
"PriceListID","SendShiftsToPayroll","WorkMonday","WorkTuesday","WorkWednesday","WorkThursday","WorkFriday","WorkSaturday","WorkSunday","WorkNormalHours","WorkStartTime",cnt
from "vacancy" where "vacancyid" = "ptemplatevacancyid";
insert into "tempjobrate"( "TempJobRateID","VacancyID","TempPayBandID","PayRate","ChargeRate","StartDate","EndDate","Grade" )
select "uniquekey"("TempJobRateID"),"sid","TempPayBandID","PayRate","ChargeRate","StartDate","EndDate","Grade"
from "tempjobrate" where "vacancyid" = "ptemplatevacancyid";
insert into "criterion"( "searchlocation","id","critid","sourcelocation","dictionaryid","tagid","tagchoiceid","notflag","matchtype","textvalue","value","uppervalue","taganytotal","extravalue","extrauppervalue","extramatchtype" )
select "searchlocation","sid","critid","sourcelocation","dictionaryid","tagid","tagchoiceid","notflag","matchtype","textvalue","value","uppervalue","taganytotal","extravalue","extrauppervalue","extramatchtype"
from "criterion" where "searchlocation" like 'V%' and "id" = "ptemplatevacancyid";
call "NetSetVacancyCascade"("sid");
if "CanAuthorise" = 1 then
call "IQXNetPopup"("pWebUserID",null,null,"sid",null,null,'ADDVACANCY','New vacancy requirement added',null)
end if;
select '0:~Success'
end
/* DOC
2016-10-25 PC IW-69 test and doc sections added
2018-08-22 PC improve test handling
2019-02-20 PC IW-838 create only one vacancy with multiple count, instead of looping to create multiple vacancies
tests:
invalid pWebUserID
valid pWebUserID and invalid pTemplateVacancyID
valid pWebUserID, valid pTemplateVacancyID which does not belong to pWebUserID
valid pWebUserID, valid pTemplateVacancyID but ORDERJOBS set false
valid pWebUserID, valid pTemplateVacancyID, ORDERJOBS set true but invalid quantity
valid pWebUserID, valid pTemplateVacancyID, ORDERJOBS set true, valid quantity but invalid start date
valid pWebUserID, valid pTemplateVacancyID, ORDERJOBS set true, valid quantity, valid start date but invalid end date
valid pWebUserID, valid pTemplateVacancyID, ORDERJOBS set true, valid quantity, valid start date and null end date
valid pWebUserID, valid pTemplateVacancyID, ORDERJOBS set true, valid quantity, valid start date and null valid date
all fields valid and AUTHORISEJOBS set to 0
all fields valid and AUTHORISEJOBS set to 1
*/
/* TEST
call NetTestSetup('');
update iqxnetuserlink set employmentid=null where IQXNetUserLinkID in ('test.client','test.agency','test.candidate','test.owner');
update iqxnetuserlink set employmentid='TEST' where IQXNetUserLinkID='test.client';
update vacancy set status='[' where vacancyid='test';
delete from iqxnetrightallowed where iqxnetrightid='ORDERJOBS' and iqxnetuserclassid='client';
delete from iqxnetrightallowed where iqxnetrightid='AUTHORISEJOBS' and iqxnetuserclassid='client';
select * from NetClientAddVacancies(null,null,null,null,null,null,null,null);
expect pResult=99*;
select * from NetClientAddVacancies('test.x',null,null,null,null,null,null,null);
expect pResult=99*;
select * from NetClientAddVacancies('test.client',null,null,null,null,null,null,null);
expect pResult=99*;
insert into iqxnetrightallowed values ('ORDERJOBS','CLIENT','*',1);
select * from NetClientAddVacancies('test.client','test',null,null,null,null,null,null);
expect pResult=450*;
select * from NetClientAddVacancies('test.client','test',null,null,null,null,null,1);
expect pResult=500*;
select * from NetClientAddVacancies('test.client','test',dateformat(now(*),'dd/mm/yyyy'),'xx',null,null,null,1);
expect pResult=500*;
select * from NetClientAddVacancies('test.client','test',dateformat(now(*),'dd/mm/yyyy'),null,null,null,null,1);
expect pResult=0*;
select top 1 departmentid,employmentid,(if entrydate=dateformat(now(*),'yyyy-mm-dd') then 1 else 0 endif) as A,status,position,(if startdate=dateformat(now(*),'yyyy-mm-dd') then 1 else 0 endif) as B,(if isnull(finishdate,'1900-01-01')=isnull(dateformat(dateadd(dd,2,now(*)),'yyyy-mm-dd'),'1900-01-01') then 1 else 0 endif) as C from vacancy order by whenentered desc;
expect departmentid=~~,employmentid=TEST,A=1,status=],position=test,B=1,C=0;
select * from NetClientAddVacancies('test.client','test',dateformat(now(*),'dd/mm/yyyy'),dateformat(dateadd(dd,2,now(*)),'dd/mm/yyyy'),null,null,null,1);
expect pResult=0*;
select top 1 departmentid,employmentid,(if entrydate=dateformat(now(*),'yyyy-mm-dd') then 1 else 0 endif) as D,status,position,(if startdate=dateformat(now(*),'yyyy-mm-dd') then 1 else 0 endif) as E,(if isnull(finishdate,'1900-01-01')=isnull(dateformat(dateadd(dd,2,now(*)),'yyyy-mm-dd'),'1900-01-01') then 1 else 0 endif) as F from vacancy order by whenentered desc;
expect departmentid=~~,employmentid=TEST,D=1,status=],position=test,E=1,F=1;
insert into iqxnetrightallowed values ('AUTHORISEJOBS','CLIENT','*',1);
select * from NetClientAddVacancies('test.client','test',dateformat(now(*),'dd/mm/yyyy'),dateformat(dateadd(dd,3,now(*)),'dd/mm/yyyy'),null,null,null,1);
expect pResult=0*;
update vacancy set status=null where vacancyid='test';
select top 1 staffid,employmentid,replace(description,' ','!') as A,DurationType from diary order by whenentered desc ;
expect staffid=TEST,A=New!vacancy*,DurationType=R;
update vacancy set status='[' where vacancyid='test';
*/
}