-- IQX database structure split by table
-- Source: IQXDatabaseStructure - with comments.sql
-- Table: "pears"."employment"
-- Table comment: Link between Person and Company defining employment.
-- Statement count: 16
CREATE TABLE "pears"."employment" (
"temp" SMALLINT NOT NULL DEFAULT 0
,"employmentid" CHAR(20) NOT NULL
,"personid" CHAR(20) NOT NULL
,"companyid" CHAR(20) NOT NULL
,"startdate" DATE NULL
,"leavedate" DATE NULL
,"noreemploy" SMALLINT NULL
,"note" CHAR(100) NULL
,"salary" NUMERIC(12,2) NULL
,"position" CHAR(50) NULL
,"department" CHAR(30) NULL
,"Concurrent" SMALLINT NULL DEFAULT 0
,"ExtendedNotes" long VARCHAR NULL
,"lastcontactevent" TIMESTAMP NULL
,"UnsubscribeToMarketing" tinyint NULL DEFAULT 0
,"ownerstaffid" CHAR(20) NULL
,PRIMARY KEY ("employmentid" ASC)
)
GO
COMMENT ON COLUMN "pears"."employment"."Concurrent" IS
'1 used by shift placements to prevent availability blocks'
GO
COMMENT ON COLUMN "pears"."employment"."lastcontactevent" IS
'Added V2.2.2.13 Will be null for existing employment'
GO
COMMENT ON TABLE "pears"."employment" IS
'Link between Person and Company defining employment.'
GO
ALTER TABLE "pears"."employment"
ADD NOT NULL FOREIGN KEY "person" ("personid" ASC)
REFERENCES "pears"."Person" ("personid")
GO
ALTER TABLE "pears"."employment"
ADD NOT NULL FOREIGN KEY "company" ("companyid" ASC)
REFERENCES "pears"."Company" ("companyid")
GO
CREATE INDEX "employment_leavedate" ON "pears"."employment"
( "leavedate" DESC )
GO
CREATE INDEX "person_lastcontactevent" ON "pears"."employment"
( "lastcontactevent" DESC )
GO
CREATE TRIGGER "employmentleaveupdate" after UPDATE OF "leavedate"
ORDER 1 ON "pears"."employment"
REFERENCING OLD AS "old_emp" NEW AS "new_emp"
FOR each ROW
BEGIN
DECLARE "idum" SMALLINT;
BEGIN
UPDATE "placement" AS "l" JOIN "sync_row" AS "s" ON "s"."record_type" = 'L' AND "s"."record_id" = "l"."placementid" SET "s"."batch" = 0 WHERE "l"."employmentid" = "new_emp"."employmentid" AND "s"."batch" > 0
exception
WHEN others THEN SET "idum" = 0
END;
INSERT INTO "placementextension"( "placementextensionid","placementid","leavedate","startdate","whochanged","whenchanged","notes","oldleavedate" )
SELECT "uniquekey"("placementid"),"placementid","new_emp"."leavedate","new_emp"."startdate","userstaffid",CURRENT TIMESTAMP,"string"('leavedate changed'),"old_emp"."leavedate"
FROM "placement" AS "l" WHERE "l"."employmentid" = "new_emp"."employmentid" AND "new_emp"."leavedate" <> "old_emp"."leavedate"
END
GO
COMMENT TO PRESERVE FORMAT ON TRIGGER "pears"."employment"."employmentleaveupdate" IS
{CREATE TRIGGER employmentleaveupdate
after UPDATE OF leavedate
ORDER 1 ON pears.employment
REFERENCING OLD AS old_emp NEW AS new_emp
FOR each ROW
BEGIN
DECLARE idum SMALLINT;
BEGIN
UPDATE placement AS l JOIN sync_row AS s ON s.record_type = 'L' AND s.record_id = l.placementid SET s.batch = 0 WHERE l.employmentid = new_emp.employmentid AND s.batch > 0;
exception
WHEN others THEN SET idum=0
END;
INSERT INTO placementextension(placementextensionid, placementid, leavedate, startdate, whochanged, whenchanged,notes, oldleavedate)
SELECT uniquekey(placementid), placementid, new_emp.leavedate, new_emp.startdate, userstaffid, CURRENT TIMESTAMP, string('leavedate changed') , old_emp.leavedate
FROM placement l WHERE l.employmentid = new_emp.employmentid AND new_emp.leavedate != old_emp.leavedate
END
}
GO
CREATE TRIGGER "EmploymentAudit" BEFORE UPDATE OF "leavedate",
"startdate","position","salary","note","extendednotes",
"UnsubscribeToMarketing" ORDER 1 ON "pears"."Employment"
REFERENCING OLD AS "old_emp" NEW AS "new_emp"
FOR each ROW
WHEN(EXISTS(SELECT * FROM "AuditItems" WHERE(("AreaName" = 'Company Contact' AND "AuditFlag" = 1) OR("AreaName" = 'Placement' AND "AuditFlag" = 1) OR("AreaName" = 'Person History' AND "AuditFlag" = 1))))
BEGIN
DECLARE @AuditList long VARCHAR;
DECLARE @ContactName CHAR(250);
DECLARE @CName CHAR(250);
DECLARE @Placement CHAR(20);
DECLARE @Company CHAR(20);
DECLARE @OurRef CHAR(20);
DECLARE @History CHAR(1);
SET @ContactName = (SELECT "name" FROM "person" WHERE "personid" = "old_emp"."personid");
SET @Placement = (SELECT FIRST "placementid" FROM "placement" WHERE "employmentid" = "old_emp"."employmentid");
SET @OurRef = (SELECT FIRST "refcode" FROM "placement" WHERE "employmentid" = "old_emp"."employmentid");
SET @Company = (SELECT "Companyid" FROM "Company" WHERE "Companyid" = "old_emp"."Companyid");
SET @CName = (SELECT "name" FROM "Company" WHERE "Companyid" = "old_emp"."Companyid");
IF EXISTS(SELECT * FROM "person" WHERE "personid" = "old_emp"."personid" AND "status" = 'L') THEN
SET @History = NULL
ELSE SET @History = 'Y'
END IF;
SELECT "string"(',',"list"("ItemName"),',') INTO @AuditList FROM "AuditItems" WHERE(("AreaName" = 'Company Contact' AND "AuditFlag" = 1) OR("AreaName" = 'Placement' AND "AuditFlag" = 1) OR("AreaName" = 'Person History' AND "AuditFlag" = 1));
-- Leave Date
IF "locate"(@AuditList,',Leave Date,') > 0 AND UPDATE("LeaveDate") AND(@Placement IS NULL) AND(@History IS NULL) THEN
CALL "AuditLog"('COMPANY',@Company,"string"('Leave Date Updated - ',@ContactName),"old_emp"."leavedate","new_emp"."leavedate")
END IF;
IF "locate"(@AuditList,',To,') > 0 AND UPDATE("LeaveDate") AND(@History = 'Y') THEN
CALL "AuditLog"('PERSON',"old_emp"."personid","string"(@CName,' History Leave Date Updated - '),"old_emp"."leavedate","new_emp"."leavedate")
END IF;
-- Start Date
IF "locate"(@AuditList,',Start Date,') > 0 AND UPDATE("StartDate") AND(@Placement IS NULL) AND(@History IS NULL) THEN
CALL "AuditLog"('COMPANY',@Company,"string"('Start Date Updated - ',@ContactName),"old_emp"."startdate","new_emp"."startdate")
END IF;
IF "locate"(@AuditList,',To,') > 0 AND UPDATE("StartDate") AND(@History = 'Y') THEN
CALL "AuditLog"('PERSON',"old_emp"."personid","string"(@CName,' History Start Date Updated - '),"old_emp"."startdate","new_emp"."startdate")
END IF;
IF "locate"(@AuditList,',Placement Leave Date,') > 0 AND UPDATE("LeaveDate") AND(@Placement IS NOT NULL) THEN
CALL "AuditLog"('PLACEMENT',@Placement,"string"('Leave Date Updated Our Ref. - ',@OurRef),"old_emp"."leavedate","new_emp"."leavedate")
END IF;
-- Start Date
IF "locate"(@AuditList,',Placement Start Date,') > 0 AND UPDATE("StartDate") AND(@Placement IS NOT NULL) THEN
CALL "AuditLog"('PLACEMENT',@Placement,"string"('Start Date Updated Our Ref. - ',@OurRef),"old_emp"."startdate","new_emp"."startdate")
END IF;
-- Job Title
IF "locate"(@AuditList,',Job Title,') > 0 AND UPDATE("position") AND(@Placement IS NULL) AND(@History IS NULL) THEN
CALL "AuditLog"('COMPANY',@Company,"string"('Job Title Updated - ',@ContactName),"old_emp"."position","new_emp"."position")
END IF;
IF "locate"(@AuditList,',Job Title,') > 0 AND UPDATE("position") AND(@History = 'Y') THEN
CALL "AuditLog"('PERSON',"old_emp"."personid","string"(@CName,' History Job Title Updated - '),"old_emp"."position","new_emp"."position")
END IF;
IF "locate"(@AuditList,',Salary,') > 0 AND UPDATE("salary") AND(@History = 'Y') THEN
CALL "AuditLog"('PERSON',"old_emp"."personid","string"(@CName,' History Salary Updated - '),"old_emp"."salary","new_emp"."salary")
END IF;
IF "locate"(@AuditList,',Note,') > 0 AND UPDATE("note") AND(@History = 'Y') THEN
CALL "AuditLog"('PERSON',"old_emp"."personid","string"(@CName,' History Note Updated - '),"old_emp"."note","new_emp"."note")
END IF;
IF "locate"(@AuditList,',Details,') > 0 AND UPDATE("ExtendedNotes") AND(@History = 'Y') THEN
CALL "AuditLog"('PERSON',"old_emp"."personid","string"(@CName,' History Details Updated - '),"old_emp"."ExtendedNotes","new_emp"."ExtendedNotes")
END IF;
-- Unsubscribe To Marketing
IF "locate"(@AuditList,',Unsubscribe To Marketing,') > 0 AND UPDATE("UnsubscribeToMarketing") THEN
CALL "AuditLog"('PERSON',"old_emp"."personid","string"('Unsubscribe To Marketing - ',@ContactName,' - ',@CNAME),"string"("old_emp"."UnsubscribeToMarketing"),"string"("new_emp"."UnsubscribeToMarketing"))
END IF
END
GO
COMMENT TO PRESERVE FORMAT ON TRIGGER "pears"."employment"."EmploymentAudit" IS
{CREATE TRIGGER EmploymentAudit
BEFORE UPDATE OF leavedate, startdate, POSITION, salary, note, extendednotes,UnsubscribeToMarketing
ORDER 1 ON pears.Employment
REFERENCING OLD AS old_emp NEW AS new_emp
FOR each ROW
WHEN(EXISTS(SELECT * FROM AuditItems WHERE (AreaName = 'Company Contact' AND AuditFlag = 1) OR (AreaName = 'Placement' AND AuditFlag = 1) OR (AreaName = 'Person History' AND AuditFlag = 1)))
BEGIN
DECLARE @AuditList long VARCHAR;
DECLARE @ContactName CHAR(250);
DECLARE @CName CHAR(250);
DECLARE @Placement CHAR(20);
DECLARE @Company CHAR(20);
DECLARE @OurRef CHAR(20);
DECLARE @History CHAR(1);
SET @ContactName=(SELECT name FROM person WHERE personid = old_emp.personid);
SET @Placement=(SELECT FIRST placementid FROM placement WHERE employmentid = old_emp.employmentid);
SET @OurRef=(SELECT FIRST refcode FROM placement WHERE employmentid = old_emp.employmentid);
SET @Company=(SELECT Companyid FROM Company WHERE Companyid = old_emp.Companyid);
SET @CName=(SELECT name FROM Company WHERE Companyid = old_emp.Companyid);
IF EXISTS(SELECT * FROM person WHERE personid = old_emp.personid AND STATUS = 'L' )
THEN SET @History = NULL
ELSE SET @History = 'Y'
END IF;
SELECT string(',',list(ItemName),',') INTO @AuditList FROM AuditItems WHERE (AreaName = 'Company Contact' AND AuditFlag = 1) OR (AreaName = 'Placement' AND AuditFlag = 1) OR (AreaName = 'Person History' AND AuditFlag = 1);
-- Leave Date
IF locate(@AuditList,',Leave Date,') > 0 AND UPDATE(LeaveDate) AND (@Placement IS NULL) AND (@History IS NULL) THEN
CALL AuditLog('COMPANY',@Company,string('Leave Date Updated - ',@ContactName),old_emp.leavedate,new_emp.leavedate)
END IF;
IF locate(@AuditList,',To,') > 0 AND UPDATE(LeaveDate) AND (@History = 'Y') THEN
CALL AuditLog('PERSON',old_emp.personid,string(@CName,' History Leave Date Updated - '),old_emp.leavedate,new_emp.leavedate)
END IF;
-- Start Date
IF locate(@AuditList,',Start Date,') > 0 AND UPDATE(StartDate) AND (@Placement IS NULL) AND (@History IS NULL) THEN
CALL AuditLog('COMPANY',@Company,string('Start Date Updated - ',@ContactName),old_emp.startdate,new_emp.startdate)
END IF;
IF locate(@AuditList,',To,') > 0 AND UPDATE(StartDate) AND (@History = 'Y') THEN
CALL AuditLog('PERSON',old_emp.personid,string(@CName,' History Start Date Updated - '),old_emp.startdate,new_emp.startdate)
END IF;
IF locate(@AuditList,',Placement Leave Date,') > 0 AND UPDATE(LeaveDate) AND (@Placement IS NOT NULL) THEN
CALL AuditLog('PLACEMENT',@Placement,string('Leave Date Updated Our Ref. - ',@OurRef),old_emp.leavedate,new_emp.leavedate)
END IF;
-- Start Date
IF locate(@AuditList,',Placement Start Date,') > 0 AND UPDATE(StartDate) AND (@Placement IS NOT NULL) THEN
CALL AuditLog('PLACEMENT',@Placement,string('Start Date Updated Our Ref. - ',@OurRef),old_emp.startdate,new_emp.startdate)
END IF;
-- Job Title
IF locate(@AuditList,',Job Title,') > 0 AND UPDATE(POSITION) AND (@Placement IS NULL) AND (@History IS NULL) THEN
CALL AuditLog('COMPANY',@Company,string('Job Title Updated - ',@ContactName),old_emp.position,new_emp.position)
END IF;
IF locate(@AuditList,',Job Title,') > 0 AND UPDATE(POSITION) AND (@History = 'Y') THEN
CALL AuditLog('PERSON',old_emp.personid,string(@CName,' History Job Title Updated - '),old_emp.position,new_emp.position)
END IF;
IF locate(@AuditList,',Salary,') > 0 AND UPDATE(salary) AND (@History = 'Y') THEN
CALL AuditLog('PERSON',old_emp.personid,string(@CName,' History Salary Updated - '),old_emp.salary,new_emp.salary)
END IF;
IF locate(@AuditList,',Note,') > 0 AND UPDATE(note) AND (@History = 'Y') THEN
CALL AuditLog('PERSON',old_emp.personid,string(@CName,' History Note Updated - '),old_emp.note,new_emp.note)
END IF;
IF locate(@AuditList,',Details,') > 0 AND UPDATE(ExtendedNotes) AND (@History = 'Y') THEN
CALL AuditLog('PERSON',old_emp.personid,string(@CName,' History Details Updated - '),old_emp.ExtendedNotes,new_emp.ExtendedNotes)
END IF;
-- Unsubscribe To Marketing
IF locate(@AuditList,',Unsubscribe To Marketing,') > 0 AND UPDATE(UnsubscribeToMarketing) THEN
CALL AuditLog('PERSON',old_emp.personid,string('Unsubscribe To Marketing - ',@ContactName,' - ',@CNAME),string(old_emp.UnsubscribeToMarketing),string(new_emp.UnsubscribeToMarketing))
END IF;
END
}
GO
CREATE TRIGGER "EmploymentUnsubscribe" after UPDATE OF "UnsubscribeToMarketing"
ORDER 2501 ON "pears"."Employment"
REFERENCING OLD AS "old_name" NEW AS "new_name"
FOR each ROW /* WHEN( search_condition ) */
BEGIN
DECLARE "emailaddr" CHAR(100);
DECLARE "existingemail" INTEGER;
IF "new_name"."UnsubscribeToMarketing" = 1 THEN
SELECT "isnull"("getphone"('E','E-mail',"old_name"."Employmentid"),'') INTO "emailaddr";
SELECT "count"("email") INTO "existingemail" FROM "UnsubscribeToMarketing" WHERE "email" = "emailaddr";
IF "emailaddr" <> '' AND "existingemail" = 0 THEN
INSERT INTO "UnsubscribeToMarketing"( "email" ) VALUES( "emailaddr" ) ;
UPDATE "mailerselectionmember" SET "unsubscribe" = 1 WHERE "datesubscribed" IS NOT NULL AND "record" = "old_name"."employmentid" AND "mailerselectionid" = any(SELECT "mailerselectionid" FROM "mailerselection" WHERE "type" = 'E');
DELETE FROM "mailerselectionmember" WHERE "record" = "old_name"."employmentid" AND "datesubscribed" IS NULL AND "mailerselectionid" = any(SELECT "mailerselectionid" FROM "mailerselection" WHERE "type" = 'E')
END IF
ELSE
DELETE FROM "UnsubscribeToMarketing" WHERE "email" = any(SELECT "getphone"('E','E-mail',"old_name"."Employmentid"))
END IF
END
GO
COMMENT TO PRESERVE FORMAT ON TRIGGER "pears"."employment"."EmploymentUnsubscribe" IS
{CREATE TRIGGER EmploymentUnsubscribe
AFTER UPDATE OF UnsubscribeToMarketing
ORDER 2501 ON Employment
REFERENCING OLD AS old_name NEW AS new_name
FOR EACH ROW /* WHEN( search_condition ) */
BEGIN
DECLARE emailaddr CHAR(100);
DECLARE existingemail INTEGER;
IF new_name.UnsubscribeToMarketing = 1 THEN
SELECT isnull(getphone('E','E-mail', old_name.Employmentid),'') INTO emailaddr ;
SELECT COUNT(email) INTO existingemail FROM UnsubscribeToMarketing WHERE email=emailaddr;
IF emailaddr<>'' AND existingemail=0 THEN
INSERT INTO UnsubscribeToMarketing (email) VALUES (emailaddr);
UPDATE mailerselectionmember SET unsubscribe=1 WHERE datesubscribed IS NOT NULL AND record=old_name.employmentid AND mailerselectionid IN (SELECT mailerselectionid FROM mailerselection WHERE TYPE='E');
DELETE FROM mailerselectionmember WHERE record=old_name.employmentid AND datesubscribed IS NULL AND mailerselectionid IN (SELECT mailerselectionid FROM mailerselection WHERE TYPE='E');
END IF;
ELSE
DELETE FROM UnsubscribeToMarketing WHERE email IN ( SELECT getphone('E','E-mail', old_name.Employmentid) )
END IF;
END
}
GO
CREATE TRIGGER "EmploymentAudit_insert" BEFORE INSERT ORDER 1 ON
"pears"."Employment"
REFERENCING NEW AS "new_emp"
FOR each ROW
BEGIN
DECLARE @AuditList long VARCHAR;
SELECT "string"(',',"list"("ItemName"),',') INTO @AuditList FROM "AuditItems" WHERE("AreaName" = 'Company Contact' AND "AuditFlag" = 1);
IF "locate"(@AuditList,',New Company Contact,') > 0 THEN
CALL "AuditLog"('COMPANY',"new_emp"."companyid",'New Contact','',(SELECT "name" FROM "person" WHERE "personid" = "new_emp"."personid"))
END IF
END
GO
COMMENT TO PRESERVE FORMAT ON TRIGGER "pears"."employment"."EmploymentAudit_insert" IS
{CREATE TRIGGER EmploymentAudit_insert
BEFORE INSERT
ORDER 1 ON pears.Employment
REFERENCING NEW AS new_emp
FOR each ROW
BEGIN
DECLARE @AuditList long VARCHAR;
SELECT string(',',list(ItemName),',') INTO @AuditList FROM AuditItems WHERE (AreaName = 'Company Contact' AND AuditFlag = 1);
IF locate(@AuditList,',New Company Contact,') > 0 THEN
CALL AuditLog('COMPANY',new_emp.companyid,'New Contact','',(SELECT name FROM person WHERE personid = new_emp.personid))
END IF;
END
}
GO