pears.NetClientVacanciesLineStatusUpdate

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

CREATE PROCEDURE "pears"."NetClientVacanciesLineStatusUpdate"( IN "pWebUserID" CHAR(20),IN "pLineNo" CHAR(21),IN "pTransactionType" CHAR(1),IN "pNote" CHAR(255),IN "pOurRef" CHAR(20),IN "pCancelReason" CHAR(1) DEFAULT NULL,IN "pLocation" CHAR(100) DEFAULT NULL,IN "pPersonID" CHAR(20) DEFAULT NULL ) 
RESULT( "retval" CHAR(250) ) 
// IQXWeb
BEGIN
  DECLARE "PorT" CHAR(1);
  DECLARE "LineNo" CHAR(20);
  DECLARE "VacID" CHAR(20);
  DECLARE "StaffID" CHAR(20);
  DECLARE "LShiftDate" DATE;
  DECLARE "LTimeFrom" TIME;
  DECLARE "LTimeTo" TIME;
  DECLARE "sid" CHAR(20);
  DECLARE "LTempShiftPlanID" CHAR(20);
  DECLARE "LWhoCancelled" CHAR(60);
  DECLARE "RequiresConfirm" INTEGER;
  DECLARE "MustTempConfirm" INTEGER;
  DECLARE "Note" CHAR(255);
  DECLARE "IntNote" CHAR(255);
  DECLARE "ShiftRef" CHAR(20);
  DECLARE "Location" CHAR(100);
  DECLARE "EmploymentID" CHAR(20);
  DECLARE "PersID" CHAR(20);
  DECLARE "IntermediateString" CHAR(150);
  SET "PorT" = "left"("pLineNo",1); -- discover whether TempShiftPlan or TempShift
  SET "LineNo" = "right"("pLineNo","length"("pLineNo")-1);
  CASE "PorT"
  WHEN 'V' THEN
    (SELECT "t"."vacancyid","shiftdate","timefrom","timeto","tempshiftplanid","e"."employmentid",NULL,"v"."refcode" INTO "VacID","LShiftDate","LTimeFrom","LTimeTo","LTempShiftPlanID","EmploymentID","PersID","ShiftRef" FROM "tempshiftplan" AS "t" KEY JOIN "vacancy" AS "v" KEY JOIN "employment" AS "e" WHERE "v"."vacancyid" = "LineNo")
  WHEN 'P' THEN
    (SELECT "t"."vacancyid","t"."shiftdate","t"."timefrom","t"."timeto","t"."tempshiftplanid","e"."employmentid","p"."personid","tsp"."shiftserialnumber" INTO "VacID","LShiftDate","LTimeFrom","LTimeTo","LTempShiftPlanID","EmploymentID","PersID","ShiftRef" FROM "tempshiftplan" AS "tsp" KEY JOIN "tempshift" AS "t" KEY JOIN "vacancy" KEY JOIN "employment" AS "e" LEFT OUTER JOIN "person" AS "p" ON "p"."personid" = "t"."personid" WHERE "tsp"."TempShiftPlanID" = "LineNo")
  ELSE
    RETURN
  END CASE;
  SET "PersID" = "isnull"("PersID","pPersonID");
  -- conFirm
  IF "pTransactionType" = 'F' THEN
    CALL "IQXNetPopup"("pWebUserID","PersID","EmploymentID","VacID",NULL,NULL,'SHIFTSTATECHANGE','Shift Confirmed',"pNote");
    UPDATE "tempshift" SET "clientconfirmed" = 1 WHERE "tempshiftplanid" = "LineNo";
    (SELECT "t"."tempconfirmed","p"."tempmustconfirm" INTO "RequiresConfirm","MustTempConfirm" FROM "tempshift" AS "t" KEY JOIN "tempshiftplan" AS "p" WHERE "p"."tempshiftplanid" = "LineNo");
    IF "RequiresConfirm" = 0 AND "MustTempConfirm" = 1 THEN SELECT '1:~success#PProvisional:requires confirmation by temp'
    ELSE SELECT '1:~success#BConfirmed:awaits timesheet'
    END IF END IF;
  -- caNcel or Reject
  IF "pTransactionType" IN( 'N','R' ) THEN
    SET "StaffID" = (SELECT "staffid" FROM "vacancy" WHERE "vacancyid" = "VacID");
    SET "LWhoCancelled" = (SELECT "Staffid" FROM "iqxnetuser" WHERE "iqxnetuserid" = "pWebUserID");
    --set UWhoCancelled='Cancelled by '+isnull((select name from iqxnetuser where iqxnetuserid = pWebUserID),'not recorded');
    SET "PersID" = (SELECT "personid" FROM "tempshift" RIGHT OUTER JOIN "tempshiftplan" AS "p" WHERE "p"."tempshiftplanid" = "LineNo");
    UPDATE "tempshift" SET "state" = 'C',"cancelreason" = "pCancelReason","whencancelled" = CURRENT TIMESTAMP,"confirmedwith" = "LWhoCancelled","WhoCancelled" = "LWhoCancelled" WHERE "tempshiftplanid" = "LineNo";
    IF @@Rowcount = 0 THEN
      SET "sid" = "uniquekey"('1');
      INSERT INTO "tempshift"( "tempshiftid","vacancyid","shiftdate","timefrom","timeto","state","tempshiftplanid","cancelreason","whencancelled","confirmedwith" ) VALUES( "sid","VacID","LShiftDate","LTimeFrom","LTimeTo",'C',"LTempShiftPlanID","pCancelReason",CURRENT TIMESTAMP,"LWhoCancelled" ) 
    END IF;
    IF "pTransactionType" = 'R' THEN
      CALL "IQXNetPopup"("pWebUserID","pPersonID","EmploymentID","VacID",NULL,NULL,'SHIFTSTATECHANGE','Shift Candidate Rejected - '+"ShiftRef","pNote")
    ELSE
      CALL "IQXNetPopup"("pWebUserID","pPersonID","EmploymentID","VacID",NULL,NULL,'SHIFTSTATECHANGE','Shift Cancelled - '+"ShiftRef","pNote")
    END IF;
    SELECT '1:~success#CCancelled:'+(SELECT "name" FROM "TempShiftCancelReason" WHERE "TempShiftCancelReasonID" = "pCancelReason")
  END IF;
  -- reQuest
  IF "pTransactionType" = 'Q' THEN
    SET "Note" = "substring"("pNote","charindex"('Request:',"pNote")+9,"charindex"(';',"pNote")-10);
    CALL "IQXNetPopup"("pWebUserID","PersID","EmploymentID","VacID",NULL,NULL,'SHIFTSTATECHANGE','Requested candidate - '+"ShiftRef","pNote");
    SELECT '0:~success'
  END IF;
  -- coMment
  IF "pTransactionType" = 'M' THEN
    SET "Note" = "substring"("pNote","charindex"('Note:',"pNote")+6);
    SET "Note" = "substring"("Note",1,149);
    SET "IntermediateString" = "substring"("pNote","charindex"('Shift Ref',"pNote")+10);
    SET "ShiftRef" = "substring"("IntermediateString",1,"charindex"('Note:',"IntermediateString")-3);
    CALL "IQXNetPopup"("pWebUserID","PersID","EmploymentID","VacID",NULL,NULL,'SHIFTSTATECHANGE','Shift Note Added - '+"ShiftRef","pNote");
    SELECT '0:~success'
  END IF;
  -- Location
  IF "pTransactionType" = 'L' THEN
    SET "Note" = "substring"("pNote","charindex"('Note:',"pNote")+9,"charindex"(';',"pNote")-10);
    SET "IntermediateString" = "substring"("pNote","charindex"('Shift Ref',"pNote")+10);
    SET "ShiftRef" = "substring"("IntermediateString",1,"charindex"('Note:',"IntermediateString")-3);
    UPDATE "tempshiftplan" SET "ClientNote" = "pLocation" WHERE "TempShiftPlanID" = "LTempShiftPlanID";
    CALL "IQXNetPopup"("pWebUserID","PersID","EmploymentID","VacID",NULL,NULL,'SHIFTSTATECHANGE','Shift Location modified - '+"ShiftRef","pNote"+'Location: '+"pLocation");
    SELECT '0:~success'
  END IF
END /* DOC
2016-11-29 PC doc and test
only using Request and Reject
 
F=Confirm shift (not used at the moment)
R=Reject candidate
N=Cancel shift (not used at the moment)
Q=Request candidate
M=Shift Note (not used at the moment)
L=Change location of shift (not used at the moment)
 
Tests:
all invalid
valid pWebUserID
valid pWebUserID,valid pLineNo
valid pWebUserID,valid pLineNo, invalid pTransactionType
valid pWebUserID,valid pLineNo, pTransactionType=Q, pNote, pPersonID for vacancy
valid pWebUserID,valid pLineNo, pTransactionType=R, pNote, pPersonID
valid pWebUserID,valid pLineNo, pTransactionType=Q, pNote, pPersonID for Tempshift
*/
/* 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';
select * from NetClientVacanciesLineStatusUpdate(null,null,null,null,null,null,null,null);
expect EOF;
select * from NetClientVacanciesLineStatusUpdate('test.client',null,null,null,null,null,null,null);
expect EOF;
select * from NetClientVacanciesLineStatusUpdate('test.client','VTEST',null,null,null,null,null,null);
expect EOF;
select * from NetClientVacanciesLineStatusUpdate('test.client','VTEST','Q','TestNote',null,null,null,'test');
expect 0*;
select top 1 * from diary where description like 'Requested Candidate%' order by whenentered desc;
expect staffid=TEST,personid=test,vacancyID=TEST,EmploymentID=TEST,notes=TestNote;
select * from NetClientVacanciesLineStatusUpdate('test.client','VTEST','R','TestNote',null,null,null,'test');
expect retval=1:~success#CCancelled:;
select top 1 * from diary where description like 'Shift Candidate Rejected%' order by whenentered desc;
expect staffid=TEST,personid=test,vacancyID=TEST,EmploymentID=TEST,notes=TestNote;
select * from NetClientVacanciesLineStatusUpdate('test.client','PTEST','Q','TestNote',null,null,null,'test');
expect 0*;
select top 1 * from diary where description like 'Requested Candidate%' order by whenentered desc;
expect staffid=TEST,personid=test,vacancyID=TEST,EmploymentID=TEST,notes=TestNote;
select * from NetClientVacanciesLineStatusUpdate('test.client','PTEST','R','TestNote',null,null,null,'test');
expect retval=1:~success#CCancelled:;
select top 1 * from diary where description like 'Shift Candidate Rejected%' order by whenentered desc;
expect staffid=TEST,personid=test,vacancyID=TEST,EmploymentID=TEST,notes=TestNote;
*/
GO
 
COMMENT TO PRESERVE FORMAT ON PROCEDURE "pears"."NetClientVacanciesLineStatusUpdate" IS 
{CREATE PROCEDURE pears."NetClientVacanciesLineStatusUpdate"( IN "pWebUserID" CHAR(20),IN "pLineNo" CHAR(21),IN "pTransactionType" CHAR(1),IN "pNote" CHAR(255),IN "pOurRef" CHAR(20),IN "pCancelReason" CHAR(1) DEFAULT NULL,IN "pLocation" CHAR(100) DEFAULT NULL,IN pPersonID CHAR(20) DEFAULT NULL ) 
RESULT( "retval" CHAR(250) ) 
// IQXWeb
BEGIN
  DECLARE "PorT" CHAR(1);
  DECLARE LineNo CHAR(20);
  DECLARE "VacID" CHAR(20);
  DECLARE "StaffID" CHAR(20);
  DECLARE "LShiftDate" DATE;
  DECLARE "LTimeFrom" TIME;
  DECLARE "LTimeTo" TIME;
  DECLARE "sid" CHAR(20);
  DECLARE "LTempShiftPlanID" CHAR(20);
  DECLARE "LWhoCancelled" CHAR(60);
  DECLARE "RequiresConfirm" INTEGER;
  DECLARE "MustTempConfirm" INTEGER;
  DECLARE "Note" CHAR(255);
  DECLARE "IntNote" CHAR(255);
  DECLARE "ShiftRef" CHAR(20);
  DECLARE "Location" CHAR(100);
  DECLARE "EmploymentID" CHAR(20);
  DECLARE "PersID" CHAR(20);
  DECLARE "IntermediateString" CHAR(150);
 
  SET "PorT" = "left"("pLineNo",1); -- discover whether TempShiftPlan or TempShift
  SET LineNo = RIGHT(pLineNo,LENGTH(pLineNo)-1);
  CASE PorT
    WHEN 'V' THEN
        (SELECT "t"."vacancyid","shiftdate","timefrom","timeto","tempshiftplanid","e"."employmentid",NULL,v.refcode INTO "VacID","LShiftDate","LTimeFrom","LTimeTo","LTempShiftPlanID","EmploymentID","PersID",ShiftRef FROM "tempshiftplan" AS "t" KEY JOIN "vacancy" v KEY JOIN "employment" AS "e" WHERE v.vacancyid = "LineNo");
    WHEN 'P' THEN
        (SELECT "t"."vacancyid","t"."shiftdate","t"."timefrom","t"."timeto","t"."tempshiftplanid","e"."employmentid","p"."personid",tsp.shiftserialnumber INTO "VacID","LShiftDate","LTimeFrom","LTimeTo","LTempShiftPlanID","EmploymentID","PersID",ShiftRef FROM "tempshiftplan" AS "tsp" KEY JOIN "tempshift" AS "t" KEY JOIN "vacancy" KEY JOIN "employment" AS "e" LEFT OUTER JOIN "person" AS "p" ON "p"."personid" = "t"."personid" WHERE "tsp"."TempShiftPlanID" = "LineNo")
    ELSE
        RETURN;
    END CASE;
  SET PersID = isnull(PersID,pPersonID);
  -- conFirm
  IF "pTransactionType" = 'F' THEN
    CALL "IQXNetPopup"("pWebUserID","PersID","EmploymentID","VacID",NULL,NULL,'SHIFTSTATECHANGE','Shift Confirmed',"pNote");
    UPDATE "tempshift" SET "clientconfirmed" = 1 WHERE "tempshiftplanid" = "LineNo";
    (SELECT "t"."tempconfirmed","p"."tempmustconfirm" INTO "RequiresConfirm","MustTempConfirm" FROM "tempshift" AS "t" KEY JOIN "tempshiftplan" AS "p" WHERE "p"."tempshiftplanid" = "LineNo");
    IF "RequiresConfirm" = 0 AND "MustTempConfirm" = 1 THEN SELECT '1:~success#PProvisional:requires confirmation by temp'
    ELSE SELECT '1:~success#BConfirmed:awaits timesheet'
    END IF END IF;
  -- caNcel or Reject
  IF "pTransactionType" IN( 'N','R' ) THEN
    SET "StaffID" = (SELECT "staffid" FROM "vacancy" WHERE "vacancyid" = "VacID");
    SET "LWhoCancelled" = (SELECT "Staffid" FROM "iqxnetuser" WHERE "iqxnetuserid" = "pWebUserID");
    --set UWhoCancelled='Cancelled by '+isnull((select name from iqxnetuser where iqxnetuserid = pWebUserID),'not recorded');
    SET "PersID" = (SELECT "personid" FROM "tempshift" RIGHT OUTER JOIN "tempshiftplan" p WHERE p.tempshiftplanid = "LineNo");
    UPDATE "tempshift" SET "state" = 'C',"cancelreason" = "pCancelReason","whencancelled" = CURRENT TIMESTAMP,"confirmedwith" = "LWhoCancelled","WhoCancelled" = "LWhoCancelled" WHERE "tempshiftplanid" = "LineNo";
    IF @@Rowcount = 0 THEN
      SET "sid" = "uniquekey"('1');
      INSERT INTO "tempshift"( "tempshiftid","vacancyid","shiftdate","timefrom","timeto","state","tempshiftplanid","cancelreason","whencancelled","confirmedwith" ) VALUES( "sid","VacID","LShiftDate","LTimeFrom","LTimeTo",'C',"LTempShiftPlanID","pCancelReason",CURRENT TIMESTAMP,"LWhoCancelled" ) 
    END IF;
    IF "pTransactionType" = 'R' THEN
      CALL "IQXNetPopup"("pWebUserID","pPersonID","EmploymentID","VacID",NULL,NULL,'SHIFTSTATECHANGE','Shift Candidate Rejected - '+"ShiftRef","pNote")
    ELSE
      CALL "IQXNetPopup"("pWebUserID","pPersonID","EmploymentID","VacID",NULL,NULL,'SHIFTSTATECHANGE','Shift Cancelled - '+"ShiftRef","pNote")
    END IF;
    SELECT '1:~success#CCancelled:'+(SELECT "name" FROM "TempShiftCancelReason" WHERE "TempShiftCancelReasonID" = "pCancelReason")
  END IF;
  -- reQuest
  IF "pTransactionType" = 'Q' THEN
    SET "Note" = "substring"("pNote","charindex"('Request:',"pNote")+9,"charindex"(';',"pNote")-10);
    CALL "IQXNetPopup"("pWebUserID","PersID","EmploymentID","VacID",NULL,NULL,'SHIFTSTATECHANGE','Requested candidate - '+"ShiftRef","pNote");
    SELECT '0:~success'
  END IF;
  -- coMment
  IF "pTransactionType" = 'M' THEN
    SET "Note" = "substring"("pNote","charindex"('Note:',"pNote")+6);
    SET "Note" = "substring"("Note",1,149);
    SET "IntermediateString" = "substring"("pNote","charindex"('Shift Ref',"pNote")+10);
    SET "ShiftRef" = "substring"("IntermediateString",1,"charindex"('Note:',"IntermediateString")-3);
    CALL "IQXNetPopup"("pWebUserID","PersID","EmploymentID","VacID",NULL,NULL,'SHIFTSTATECHANGE','Shift Note Added - '+"ShiftRef","pNote");
    SELECT '0:~success'
  END IF;
  -- Location
  IF "pTransactionType" = 'L' THEN
    SET "Note" = "substring"("pNote","charindex"('Note:',"pNote")+9,"charindex"(';',"pNote")-10);
    SET "IntermediateString" = "substring"("pNote","charindex"('Shift Ref',"pNote")+10);
    SET "ShiftRef" = "substring"("IntermediateString",1,"charindex"('Note:',"IntermediateString")-3);
    UPDATE "tempshiftplan" SET "ClientNote" = "pLocation" WHERE "TempShiftPlanID" = "LTempShiftPlanID";
    CALL "IQXNetPopup"("pWebUserID","PersID","EmploymentID","VacID",NULL,NULL,'SHIFTSTATECHANGE','Shift Location modified - '+"ShiftRef","pNote"+'Location: '+"pLocation");
    SELECT '0:~success'
  END IF
END
 
/* DOC
2016-11-29 PC doc and test
    only using Request and Reject
 
    F=Confirm shift (not used at the moment)
    R=Reject candidate
    N=Cancel shift (not used at the moment)
    Q=Request candidate
    M=Shift Note (not used at the moment)
    L=Change location of shift (not used at the moment)
 
Tests:
    all invalid
    valid pWebUserID
    valid pWebUserID,valid pLineNo
    valid pWebUserID,valid pLineNo, invalid pTransactionType
    valid pWebUserID,valid pLineNo, pTransactionType=Q, pNote, pPersonID for vacancy
    valid pWebUserID,valid pLineNo, pTransactionType=R, pNote, pPersonID
    valid pWebUserID,valid pLineNo, pTransactionType=Q, pNote, pPersonID for Tempshift
*/
 
/* 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';
select * from NetClientVacanciesLineStatusUpdate(null,null,null,null,null,null,null,null);
expect EOF;
select * from NetClientVacanciesLineStatusUpdate('test.client',null,null,null,null,null,null,null);
expect EOF;
select * from NetClientVacanciesLineStatusUpdate('test.client','VTEST',null,null,null,null,null,null);
expect EOF;
select * from NetClientVacanciesLineStatusUpdate('test.client','VTEST','Q','TestNote',null,null,null,'test');
expect 0*;
select top 1 * from diary where description like 'Requested Candidate%' order by whenentered desc;
expect staffid=TEST,personid=test,vacancyID=TEST,EmploymentID=TEST,notes=TestNote;
select * from NetClientVacanciesLineStatusUpdate('test.client','VTEST','R','TestNote',null,null,null,'test');
expect retval=1:~success#CCancelled:;
select top 1 * from diary where description like 'Shift Candidate Rejected%' order by whenentered desc;
expect staffid=TEST,personid=test,vacancyID=TEST,EmploymentID=TEST,notes=TestNote;
select * from NetClientVacanciesLineStatusUpdate('test.client','PTEST','Q','TestNote',null,null,null,'test');
expect 0*;
select top 1 * from diary where description like 'Requested Candidate%' order by whenentered desc;
expect staffid=TEST,personid=test,vacancyID=TEST,EmploymentID=TEST,notes=TestNote;
select * from NetClientVacanciesLineStatusUpdate('test.client','PTEST','R','TestNote',null,null,null,'test');
expect retval=1:~success#CCancelled:;
select top 1 * from diary where description like 'Shift Candidate Rejected%' order by whenentered desc;
expect staffid=TEST,personid=test,vacancyID=TEST,EmploymentID=TEST,notes=TestNote;
*/
}
  • database/procedures/pears_netclientvacancieslinestatusupdate.txt
  • Last modified: 2026/08/07 19:24
  • by 127.0.0.1