pears.NetClientVacancySuggestCandidate

Generated schema reference. Regenerate this page from the SQL unload; keep hand-maintained business notes in the narrative namespace.

Original SQL

CREATE PROCEDURE "pears"."NetClientVacancySuggestCandidate"( IN "pWebUserID" CHAR(20),IN "pVacancyID" CHAR(20),IN "pSlice" INTEGER DEFAULT 0,IN "pSliceSize" INTEGER DEFAULT 10,IN "pSearchString" CHAR(50) ) 
RESULT( "pPersonID" CHAR(20),"pName" CHAR(60),"pKeyName" CHAR(60) ) 
// IQXNet
BEGIN
  DECLARE LOCAL TEMPORARY TABLE "PersonAlreadyWorking"(
    "PersonID" CHAR(20) NULL,
    ) NOT transactional;
  DECLARE "x" INTEGER;
  DECLARE "y" INTEGER;
  DECLARE "CompID" CHAR(20);
  DECLARE "VacID" CHAR(20);
  SET "x" = "pSliceSize";
  SET "y" = "x"*"pSlice"+1;
  SET "CompID" = "isnull"((SELECT "companyid" FROM "employment" KEY JOIN "vacancy" WHERE "vacancyid" = "pVacancyID"),(SELECT "companyid" FROM "employment" KEY JOIN "vacancy" KEY JOIN "tempshiftplan" WHERE "tempshiftplanid" = "pVacancyID"));
  INSERT INTO "PersonAlreadyWorking"( "PersonID" ) (SELECT DISTINCT
      "ts"."personid"
      FROM "tempshiftplan" AS "tsp"
        JOIN "tempshift" AS "ts" ON "ts"."shiftdate" = "tsp"."shiftdate" AND "ts"."state" <> 'A' AND NOT(("isnull"("ts"."timeto",'23:59:00') <= "tsp"."timefrom") OR("isnull"("ts"."timefrom",'00:00:00') >= "tsp"."timeto"))
        JOIN "person" AS "p"
      WHERE "ts"."vacancyid" = "pVacancyID"
      AND "p"."status" IN( 'C' ) UNION
    SELECT DISTINCT
      "e"."personid"
      FROM "placement" AS "pl"
        KEY JOIN "employment" AS "e"
        KEY JOIN "person" AS "p"
      WHERE "pl"."vacancyid" = "pVacancyID"
      AND "p"."status" IN( 'C' ) );
  SELECT DISTINCT top "x" START at "y"
    "p"."personid","name","p"."keyname"
    FROM "person" AS "p" JOIN "PersonAlreadyWorking" AS "paw" ON "paw"."PersonID" = "p"."personid"
    WHERE "keyname" LIKE '%'+"isnull"("pSearchString",'')+'%'
    AND NOT EXISTS(SELECT * FROM "progress" WHERE "vacancyid" = "pvacancyid" AND "progress"."personid" = "p"."personid")
    ORDER BY "p"."keyname" ASC
END /* DOC
2016-12-28 PC provide paged list of candidates who would be available to work in a particular vacancy
2017-04-20 PC altered to ignore 'Available' shifts
2017-08-01 PC enforce search order and exclude placements
2019-04-13 JB Look for anyone who has worked (shift or placement) and exclude those on he short list
 
Tests:
unable to test invalid slice or sliceSize
invalid pWebUserID
valid pWebUserID, invalid pVacancyID, invalid status
valid pWebUserID, pVacancyID, pSlice, pSliceSize, invalid pSearchString
valid pWebUserID, pVacancyID, pSlice, pSliceSize, pSearchString
valid pWebUserID, pVacancyID, pSlice, pSliceSize, pSearchString with shift for today and time wholly before template times
valid pWebUserID, pVacancyID, pSlice, pSliceSize, pSearchString with shift for today and time wholly overlapping template times
valid pWebUserID, pVacancyID, pSlice, pSliceSize, pSearchString with shift for today and time wholly after template times
valid pWebUserID, pVacancyID, pSlice, pSliceSize, pSearchString with shift for tomorrow
*/
/* 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 tempshiftplan set shiftdate=today(*) where tempshiftplanid = 'TEST';
update tempshift set personid=null,shiftdate=today(*) where vacancyid='TEST';
update person set status='~',keyname='aaatest' where personid='TEST';
delete from progress where vacancyid='test' and personid='test';
select * from NetClientVacancySuggestCandidate(null,null,0,1,null) where pPersonID='TEST';
expect EOF;
update person set status='C' where personid='TEST';
update tempshift set personid='test' where vacancyid='TEST';
select pPersonID from NetClientVacancySuggestCandidate('test.client','TEST',0,1,null) where pPersonID='TEST';
expect pPersonID=TEST;
update tempshiftplan set timefrom='10:00',timeto='12:00' where tempshiftplanid='TEST';
update tempshift set timefrom='07:00',timeto='09:00' where tempshiftid = 'TEST';
select * from NetClientVacancySuggestCandidate('test.client','TEST',0,1,'test');
expect pPersonID=TEST;
 
update tempshift set timefrom='14:00',timeto='15:00' where vacancyid = 'TEST';
select * from NetClientVacancySuggestCandidate('test.client','TEST',0,1,'test');
expect pPersonID=TEST;
update tempshiftplan set shiftdate=dateadd(day,1,today(*)) where vacancyid = 'TEST';
select * from NetClientVacancySuggestCandidate('test.client','TEST',0,1,'test');
expect pPersonID=TEST;
update person set status=null,keyname='test' where personid='TEST';
update tempshiftplan set shiftdate=null where tempshiftplanid = 'TEST';
*/
GO
 
COMMENT TO PRESERVE FORMAT ON PROCEDURE "pears"."NetClientVacancySuggestCandidate" IS 
{CREATE PROCEDURE pears."NetClientVacancySuggestCandidate"(IN pWebUserID CHAR(20), IN pVacancyID CHAR(20), IN pSlice INTEGER DEFAULT 0, IN pSliceSize INTEGER DEFAULT 10, IN pSearchString CHAR(50))
RESULT(pPersonID CHAR(20), pName CHAR(60),pKeyName CHAR(60))
// IQXNet
BEGIN
 DECLARE LOCAL TEMPORARY TABLE PersonAlreadyWorking(
    PersonID CHAR(20) NULL,
    ) NOT transactional;
    DECLARE x INTEGER;
    DECLARE y INTEGER;
    DECLARE CompID CHAR(20);
    DECLARE VacID CHAR(20);
 
    SET x=pSliceSize;
    SET y=x*pSlice+1;
    SET CompID = isnull((SELECT companyid FROM employment KEY JOIN vacancy WHERE vacancyid=pVacancyID),(SELECT companyid FROM employment KEY JOIN vacancy KEY JOIN tempshiftplan WHERE tempshiftplanid = pVacancyID ));
    INSERT INTO PersonAlreadyWorking (PersonID) (SELECT DISTINCT
        ts.personid   
    FROM 
        tempshiftplan tsp
        JOIN tempshift ts ON ts.shiftdate = tsp.shiftdate AND ts.state != 'A' AND NOT ((isnull(ts.timeto,'23:59:00') <= tsp.timefrom) OR (isnull(ts.timefrom,'00:00:00') >= tsp.timeto))
        JOIN person p
        WHERE ts.vacancyid = pVacancyID
        AND p.status IN ('C')
 
    UNION SELECT DISTINCT
        e.personid   
    FROM 
        placement pl
        KEY JOIN employment e 
        KEY JOIN person p
        WHERE pl.vacancyid = pVacancyID
        AND p.status IN ('C')
        );
    SELECT DISTINCT top x START at y 
        p.personid,name,p.keyname 
    FROM
        person p JOIN PersonAlreadyWorking paw ON paw.PersonID=p.personid
    WHERE 
        keyname LIKE '%'+isnull(pSearchString,'') + '%'
        AND NOT EXISTS(SELECT * FROM progress WHERE vacancyid = pvacancyid AND progress.personid = p.personid)
    ORDER BY 
        p.keyname ASC;
END
 
/* DOC
2016-12-28 PC provide paged list of candidates who would be available to work in a particular vacancy
2017-04-20 PC altered to ignore 'Available' shifts
2017-08-01 PC enforce search order and exclude placements
2019-04-13 JB Look for anyone who has worked (shift or placement) and exclude those on he short list
 
Tests:
    unable to test invalid slice or sliceSize
    invalid pWebUserID
    valid pWebUserID, invalid pVacancyID, invalid status
    valid pWebUserID, pVacancyID, pSlice, pSliceSize, invalid pSearchString
    valid pWebUserID, pVacancyID, pSlice, pSliceSize, pSearchString
    valid pWebUserID, pVacancyID, pSlice, pSliceSize, pSearchString with shift for today and time wholly before template times
    valid pWebUserID, pVacancyID, pSlice, pSliceSize, pSearchString with shift for today and time wholly overlapping template times
    valid pWebUserID, pVacancyID, pSlice, pSliceSize, pSearchString with shift for today and time wholly after template times
    valid pWebUserID, pVacancyID, pSlice, pSliceSize, pSearchString with shift for tomorrow
*/
 
/* 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 tempshiftplan set shiftdate=today(*) where tempshiftplanid = 'TEST';
update tempshift set personid=null,shiftdate=today(*) where vacancyid='TEST';
update person set status='~',keyname='aaatest' where personid='TEST';
delete from progress where vacancyid='test' and personid='test';
select * from NetClientVacancySuggestCandidate(null,null,0,1,null) where pPersonID='TEST';
expect EOF;
update person set status='C' where personid='TEST';
update tempshift set personid='test' where vacancyid='TEST';
select pPersonID from NetClientVacancySuggestCandidate('test.client','TEST',0,1,null) where pPersonID='TEST';
expect pPersonID=TEST;
update tempshiftplan set timefrom='10:00',timeto='12:00' where tempshiftplanid='TEST';
update tempshift set timefrom='07:00',timeto='09:00' where tempshiftid = 'TEST';
select * from NetClientVacancySuggestCandidate('test.client','TEST',0,1,'test');
expect pPersonID=TEST;
 
update tempshift set timefrom='14:00',timeto='15:00' where vacancyid = 'TEST';
select * from NetClientVacancySuggestCandidate('test.client','TEST',0,1,'test');
expect pPersonID=TEST;
update tempshiftplan set shiftdate=dateadd(day,1,today(*)) where vacancyid = 'TEST';
select * from NetClientVacancySuggestCandidate('test.client','TEST',0,1,'test');
expect pPersonID=TEST;
update person set status=null,keyname='test' where personid='TEST';
update tempshiftplan set shiftdate=null where tempshiftplanid = 'TEST';
*/
}