diff --git a/ONPRC_EHR_ComplianceDB/module.properties b/ONPRC_EHR_ComplianceDB/module.properties index 7c901fa67..d6cafdc82 100644 --- a/ONPRC_EHR_ComplianceDB/module.properties +++ b/ONPRC_EHR_ComplianceDB/module.properties @@ -1,4 +1,4 @@ Name: ONPRC_EHR_ComplianceDB ModuleClass: org.labkey.ONPRCEHR_ComplianceDB.ONPRC_EHR_ComplianceDBModule -SupportedDatabases: mssql -ManageVersion: false +SupportedDatabases: mssql, pgsql +ManageVersion: true diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-0.000-25.000.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-0.000-25.000.sql new file mode 100644 index 000000000..baef59ce2 --- /dev/null +++ b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-0.000-25.000.sql @@ -0,0 +1,958 @@ +CREATE SCHEMA IF NOT EXISTS onprc_ehr_compliancedb; + +CREATE TABLE onprc_ehr_compliancedb.SciShield_Data +( + RowId SERIAL NOT NULL, + employeeId VARCHAR(255) NOT NULL, + requirementname VARCHAR(255) NULL, + Date TIMESTAMP NULL, + Container ENTITYID NOT NULL, + comment VARCHAR(2000) NULL, + CreatedBy USERID, + Created TIMESTAMP, + ModifiedBy USERID, + Modified TIMESTAMP, + processed INT NULL, + + CONSTRAINT PK_ScieShield_Data PRIMARY KEY (RowId), + CONSTRAINT FK_ONPRC_EHR_COMPLIANCE_SCISHIELD_DATA_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) +); +CREATE INDEX IX_ONPRC_EHR_COMPLIANCEDB_SCISHIELD_DATA_CONTAINER ON onprc_ehr_compliancedb.SciShield_Data (Container); + +CREATE TABLE onprc_ehr_compliancedb.SciShield_Reference_Data +( + rowId SERIAL NOT NULL, + label VARCHAR(250) NULL, + value VARCHAR(255) NOT NULL, + columnName VARCHAR(255) NOT NULL, + sort_order INTEGER NULL, + endDate TIMESTAMP NULL, + Container ENTITYID NOT NULL, + CreatedBy USERID, + Created TIMESTAMP, + ModifiedBy USERID, + Modified TIMESTAMP, + + CONSTRAINT pk_SciShield_reference PRIMARY KEY (value), + CONSTRAINT FK_ONPRC_EHR_COMPLIANCE_REFERENCE_DATA_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) +); +CREATE INDEX IX_ONPRC_EHR_COMPLIANCEDB_SCISHIELD_REFERENCE_DATA_CONTAINER ON onprc_ehr_compliancedb.SciShield_Reference_Data (Container); + +CREATE TABLE onprc_ehr_compliancedb.SciShieldTemp ( + searchID INT GENERATED BY DEFAULT AS IDENTITY (START WITH 100 INCREMENT BY 1) NOT NULL, + employeeid VARCHAR(500) NULL, + requirementname VARCHAR(3000) NULL, + completeddate TIMESTAMP NULL, + comment VARCHAR(300) NULL, + createddate TIMESTAMP NULL, + rowid INT NULL +); + +CREATE TABLE onprc_ehr_compliancedb.SciShieldMasterTemp ( + searchID INT GENERATED BY DEFAULT AS IDENTITY (START WITH 100 INCREMENT BY 1) NOT NULL, + employeeid VARCHAR(500) NULL, + requirementname VARCHAR(3000) NULL, + completeddate TIMESTAMP NULL, + comment VARCHAR(300) NULL, + createddate TIMESTAMP NULL, + rowid INT NULL +); + +CREATE TABLE onprc_ehr_compliancedb.ComplianceProcedureReport ( + rowid SERIAL NOT NULL, + employeeid VARCHAR(300) NULL, + requirementname VARCHAR(4000) NULL, + unit VARCHAR(500) NULL, + category VARCHAR(500) NULL, + trackingflag VARCHAR(100) NULL, + email VARCHAR(500) NULL, + lastname VARCHAR(500) NULL, + firstname VARCHAR(500) NULL, + host VARCHAR(500) NULL, + supervisor VARCHAR(500) NULL, + trainee_type VARCHAR(500) NULL, + times_completed SMALLINT NULL, + expired_period SMALLINT NULL, + new_expired_period SMALLINT NULL, + mostrecentcompleted_date TIMESTAMP NULL, + comment VARCHAR(4000) NULL, + snooze_date TIMESTAMP NULL, + months_until_renewal DOUBLE PRECISION NULL, + requirement_name_type VARCHAR(1000) NULL +); + +CREATE TABLE onprc_ehr_compliancedb.ComplianceRecentReport ( + rowid SERIAL NOT NULL, + employeeid VARCHAR(300) NULL, + requirementname VARCHAR(4000) NULL, + unit VARCHAR(500) NULL, + category VARCHAR(500) NULL, + trackingflag VARCHAR(100) NULL, + email VARCHAR(500) NULL, + lastname VARCHAR(500) NULL, + firstname VARCHAR(500) NULL, + host VARCHAR(500) NULL, + supervisor VARCHAR(500) NULL, + trainee_type VARCHAR(500) NULL, + times_completed SMALLINT NULL, + expired_period SMALLINT NULL, + new_expired_period SMALLINT NULL, + mostrecentcompleted_date TIMESTAMP NULL, + comment VARCHAR(4000) NULL, + snooze_date TIMESTAMP NULL, + months_until_renewal DOUBLE PRECISION NULL, + requirement_name_type VARCHAR(1000) NULL +); + +CREATE TABLE onprc_ehr_compliancedb.RequirementsPerEmployee ( + RowId SERIAL NOT NULL, + EmployeeId VARCHAR(255) NOT NULL, + RequirementName VARCHAR(255) NOT NULL, + CreatedBy USERID, + Created TIMESTAMP, + ModifiedBy USERID, + Modified TIMESTAMP, + trackingflag VARCHAR(100), + + CONSTRAINT PK_RequirementsPerEmployeename PRIMARY KEY (RowId) +); + +CREATE INDEX IF NOT EXISTS IX_completiondates_trainer ON ehr_compliancedb.completiondates(trainer); + +CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_SciShieldToPrimeProcess() +RETURNS integer AS $$ +DECLARE + _requirementnameFinal VARCHAR(2000); + _requirementname VARCHAR(2000); + _employeeid VARCHAR(500); + _Completiondate TIMESTAMP; + _SciShieldID INT; + rec RECORD; +BEGIN + ---- Reset temp table + DELETE FROM onprc_ehr_compliancedb.SciShieldTemp; + + IF EXISTS (SELECT 1 FROM onprc_ehr_compliancedb.SciShield_Data WHERE processed IS NULL) THEN + INSERT INTO onprc_ehr_compliancedb.SciShieldTemp + (employeeid, requirementname, completeddate, createddate, rowid) + SELECT + employeeid, + requirementname, + date, + now(), + rowid + FROM onprc_ehr_compliancedb.SciShield_Data + WHERE processed IS NULL + ORDER BY employeeid, requirementname, date DESC; + ELSE + RETURN 0; + END IF; + + FOR rec IN + SELECT searchID, employeeid, requirementname, completeddate, rowid + FROM onprc_ehr_compliancedb.SciShieldTemp + ORDER BY searchID + LOOP + _requirementnameFinal := ''; + _requirementname := COALESCE(rec.requirementname, ''); + _employeeid := TRIM(LOWER(COALESCE(rec.employeeid, ''))); + _Completiondate := rec.completeddate; + _SciShieldID := rec.rowid; + + -- Validate requirementname + IF EXISTS (SELECT 1 FROM onprc_ehr_compliancedb.SciShield_Reference_Data WHERE label = _requirementname AND columnname = 'requirementname') THEN + SELECT value INTO _requirementnameFinal + FROM onprc_ehr_compliancedb.SciShield_Reference_Data + WHERE label = _requirementname AND columnname = 'requirementname' + LIMIT 1; + ELSIF EXISTS (SELECT 1 FROM ehr_compliancedb.requirements WHERE requirementname = _requirementname) THEN + SELECT requirementname INTO _requirementnameFinal + FROM ehr_compliancedb.requirements + WHERE requirementname = _requirementname + LIMIT 1; + ELSE + UPDATE onprc_ehr_compliancedb.SciShield_Data ss + SET processed = 3 + WHERE ss.rowid = _SciShieldID; + + CONTINUE; + END IF; + + -- Validate if the record already exists + IF EXISTS (SELECT 1 FROM ehr_compliancedb.completiondates WHERE employeeid = _employeeid AND requirementname = _requirementnameFinal AND date = _Completiondate) THEN + UPDATE onprc_ehr_compliancedb.SciShield_Data ss + SET processed = 4 + WHERE ss.rowid = _SciShieldID; + + CONTINUE; + END IF; + + -- Validate if the employeeid is defined + IF NOT EXISTS (SELECT 1 FROM ehr_compliancedb.employees WHERE employeeid = _employeeid AND enddate IS NULL) THEN + UPDATE onprc_ehr_compliancedb.SciShield_Data ss + SET processed = 2 + WHERE ss.rowid = _SciShieldID; + + CONTINUE; + END IF; + + -- If all previous version were validated proceed with the record insert + IF NOT EXISTS (SELECT 1 FROM ehr_compliancedb.completiondates WHERE employeeid = _employeeid AND requirementname = _requirementnameFinal AND date = _Completiondate) THEN + INSERT INTO ehr_compliancedb.completiondates + (employeeid, requirementname, date, trainer, container, created, createdby, modified, modifiedby) + VALUES + (_employeeid, _requirementnameFinal, _Completiondate, 'ONLINE TRAINING', 'CD170458-C55F-102F-9907-5107380A54BE', now(), 2595, now(), 2595); + + UPDATE onprc_ehr_compliancedb.SciShield_Data ss + SET processed = 1 + WHERE ss.rowid = _SciShieldID; + END IF; + END LOOP; + + -- Create master records of the last most recent entries + IF EXISTS (SELECT 1 FROM onprc_ehr_compliancedb.SciShieldTemp) THEN + INSERT INTO onprc_ehr_compliancedb.SciShieldMasterTemp + (employeeid, requirementname, completeddate, comment, createddate, rowid) + SELECT + employeeid, + requirementname, + completeddate, + comment, + createddate, + rowid + FROM onprc_ehr_compliancedb.SciShieldTemp; + END IF; + + RETURN 0; + +EXCEPTION + WHEN OTHERS THEN + RETURN 1; +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceTranslatestringUpdate() +RETURNS integer AS $$ +BEGIN + IF EXISTS (SELECT 1 FROM ehr_compliancedb.EmployeePerUnit WHERE unit LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.EmployeePerUnit SET unit = replace(unit, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.EmployeePerUnit WHERE category LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.EmployeePerUnit SET category = replace(category, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.Employees WHERE majorudds LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.Employees SET majorudds = replace(majorudds, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.Employees WHERE unit LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.Employees SET unit = replace(unit, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.Employees WHERE category LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.Employees SET category = replace(category, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.requirements WHERE requirementname LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.requirements SET requirementname = replace(requirementname, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.EmployeeRequirementExemptions WHERE requirementname LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.EmployeeRequirementExemptions SET requirementname = replace(requirementname, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.unit_names WHERE unit LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.unit_names SET unit = replace(unit, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.RequirementsPerCategory WHERE RequirementName LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.RequirementsPerCategory SET requirementname = replace(requirementname, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.RequirementsPerCategory WHERE category LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.RequirementsPerCategory SET category = replace(category, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.RequirementsPerCategory WHERE unit LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.RequirementsPerCategory SET unit = replace(unit, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.completiondates WHERE requirementname LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.completiondates SET requirementname = replace(requirementname, 'arrs', 'DCM'); + END IF; + + IF EXISTS (SELECT 1 FROM ehr_compliancedb.EmployeeCategory WHERE categoryname LIKE '%arrs%') THEN + UPDATE ehr_compliancedb.EmployeeCategory SET categoryname = replace(categoryname, 'arrs', 'DCM'); + END IF; + + RETURN 0; + +EXCEPTION + WHEN OTHERS THEN + RETURN 1; +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceRecentOverDueSoon_Process() +RETURNS integer AS $$ +BEGIN + DELETE FROM onprc_ehr_compliancedb.ComplianceRecentReport; + + INSERT INTO onprc_ehr_compliancedb.ComplianceRecentReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + ) + SELECT + b.requirementname, + a.employeeid, + string_agg(a.unit, chr(10)) AS unit, + string_agg(a.category, chr(10)) AS category, + string_agg(b.trackingflag, chr(10)) AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT h.type FROM ehr_compliancedb.Requirements h WHERE h.requirementname = b.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) AS times_Completed, + (SELECT k.expireperiod FROM ehr_compliancedb.Requirements k WHERE k.requirementname = b.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) AS mostrecentcompleted_date, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = b.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = b.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = b.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = b.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.employeeperunit a, ehr_compliancedb.requirementspercategory b + WHERE (a.unit = b.unit OR a.category = b.category) + AND b.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND b.requirementname = t.requirementname) + AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND b.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = b.requirementname AND q.dateDisabled IS NULL) + GROUP BY b.requirementname, a.employeeid + + UNION + + SELECT + a.requirementname, + a.employeeid, + NULL AS unit, + NULL AS category, + 'None' AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT h.type FROM ehr_compliancedb.Requirements h WHERE h.requirementname = a.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS timesCompleted, + (SELECT k.expireperiod FROM ehr_compliancedb.Requirements k WHERE k.requirementname = a.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS MostRecentDate, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = a.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = a.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.completiondates a + WHERE a.requirementname NOT IN ( + SELECT DISTINCT h.requirementname + FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h + WHERE (k.unit = h.unit OR k.category = h.category) AND a.employeeid = k.employeeid + ) + AND a.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND a.requirementname = t.requirementname) + AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND a.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = a.requirementname AND q.dateDisabled IS NULL) + GROUP BY a.requirementname, a.employeeid + + UNION + + SELECT + a.requirementname, + a.employeeid, + NULL AS unit, + NULL AS category, + 'No' AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT h.type FROM ehr_compliancedb.Requirements h WHERE h.requirementname = a.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS timesCompleted, + (SELECT k.expireperiod FROM ehr_compliancedb.Requirements k WHERE k.requirementname = a.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS MostRecentDate, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = a.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = a.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DECIMAL + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.employeerequirementexemptions a + WHERE a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND a.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = a.requirementname AND q.dateDisabled IS NULL) + GROUP BY a.requirementname, a.employeeid + + UNION + + SELECT + j.requirementname, + j.employeeid, + NULL AS unit, + NULL AS category, + string_agg(j.trackingflag, chr(10)) AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS trainee_type, + (SELECT h.type FROM ehr_compliancedb.Requirements h WHERE h.requirementname = j.requirementname) AS requirement_type, + 0 AS timesCompleted, + (SELECT k.expireperiod FROM ehr_compliancedb.Requirements k WHERE k.requirementname = j.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + NULL AS MostRecentDate, + '' AS comment, + NULL AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = j.requirementname AND st.employeeid = j.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = j.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM onprc_ehr_compliancedb.RequirementsPerEmployee j + WHERE j.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE j.employeeid = p.employeeid AND p.enddate IS NULL) + AND j.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = j.requirementname AND q.dateDisabled IS NULL) + AND j.requirementname NOT IN ( + SELECT DISTINCT h.requirementname + FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h + WHERE (k.unit = h.unit OR k.category = h.category) AND j.employeeid = k.employeeid + ) + AND j.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE j.employeeid = t.employeeid AND j.requirementname = t.requirementname) + AND j.requirementname NOT IN (SELECT DISTINCT k.requirementname FROM ehr_compliancedb.completiondates k WHERE k.employeeid = j.employeeid) + GROUP BY j.requirementname, j.employeeid + ORDER BY employeeid, requirementname, mostrecentcompleted_date DESC; + + RETURN 0; + +EXCEPTION + WHEN OTHERS THEN + RETURN 1; +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process() +RETURNS integer AS $$ +BEGIN + DELETE FROM onprc_ehr_compliancedb.ComplianceProcedureReport; + + INSERT INTO onprc_ehr_compliancedb.ComplianceProcedureReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + ) + SELECT + b.requirementname, + a.employeeid, + string_agg(a.unit, chr(10)) AS unit, + string_agg(a.category, chr(10)) AS category, + string_agg(b.trackingflag, chr(10)) AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT h.type FROM ehr_compliancedb.Requirements h WHERE h.requirementname = b.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) AS times_Completed, + (SELECT k.expireperiod FROM ehr_compliancedb.Requirements k WHERE k.requirementname = b.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) AS mostrecentcompleted_date, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = b.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = b.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = b.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = b.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.employeeperunit a, ehr_compliancedb.requirementspercategory b + WHERE (a.unit = b.unit OR a.category = b.category) + AND b.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND b.requirementname = t.requirementname) + AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND b.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = b.requirementname AND q.dateDisabled IS NULL) + GROUP BY b.requirementname, a.employeeid + + UNION + + SELECT + a.requirementname, + a.employeeid, + NULL AS unit, + NULL AS category, + 'None' AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT h.type FROM ehr_compliancedb.Requirements h WHERE h.requirementname = a.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS timesCompleted, + (SELECT k.expireperiod FROM ehr_compliancedb.Requirements k WHERE k.requirementname = a.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS MostRecentDate, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = a.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = a.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.completiondates a + WHERE a.requirementname NOT IN ( + SELECT DISTINCT h.requirementname + FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h + WHERE (k.unit = h.unit OR k.category = h.category) AND a.employeeid = k.employeeid + ) + AND a.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND a.requirementname = t.requirementname) + AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND a.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = a.requirementname AND q.dateDisabled IS NULL) + GROUP BY a.requirementname, a.employeeid + + UNION + + SELECT + a.requirementname, + a.employeeid, + NULL AS unit, + NULL AS category, + 'No' AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT h.type FROM ehr_compliancedb.Requirements h WHERE h.requirementname = a.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS timesCompleted, + (SELECT k.expireperiod FROM ehr_compliancedb.Requirements k WHERE k.requirementname = a.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS MostRecentDate, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = a.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = a.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DECIMAL + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.employeerequirementexemptions a + WHERE a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND a.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = a.requirementname AND q.dateDisabled IS NULL) + GROUP BY a.requirementname, a.employeeid + + UNION + + SELECT + j.requirementname, + j.employeeid, + NULL AS unit, + NULL AS category, + string_agg(j.trackingflag, chr(10)) AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS trainee_type, + (SELECT h.type FROM ehr_compliancedb.Requirements h WHERE h.requirementname = j.requirementname) AS requirement_type, + 0 AS timesCompleted, + (SELECT k.expireperiod FROM ehr_compliancedb.Requirements k WHERE k.requirementname = j.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + NULL AS MostRecentDate, + '' AS comment, + NULL AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = j.requirementname AND st.employeeid = j.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = j.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM onprc_ehr_compliancedb.RequirementsPerEmployee j + WHERE j.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE j.employeeid = p.employeeid AND p.enddate IS NULL) + AND j.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = j.requirementname AND q.dateDisabled IS NULL) + AND j.requirementname NOT IN ( + SELECT DISTINCT h.requirementname + FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h + WHERE (k.unit = h.unit OR k.category = h.category) AND j.employeeid = k.employeeid + ) + AND j.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE j.employeeid = t.employeeid AND j.requirementname = t.requirementname) + AND j.requirementname NOT IN (SELECT DISTINCT k.requirementname FROM ehr_compliancedb.completiondates k WHERE k.employeeid = j.employeeid) + GROUP BY j.requirementname, j.employeeid + ORDER BY employeeid, requirementname, mostrecentcompleted_date DESC; + + RETURN 0; + +EXCEPTION + WHEN OTHERS THEN + RETURN 1; +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceAccesscontainerUpdate() +RETURNS integer AS $$ +BEGIN + IF EXISTS (SELECT 1 FROM ehr_compliancedb.completiondates WHERE container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD') THEN + UPDATE ehr_compliancedb.completiondates + SET container = 'CD170458-C55F-102F-9907-5107380A54BE' + WHERE container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD'; + END IF; + + RETURN 0; + +EXCEPTION + WHEN OTHERS THEN + RETURN 1; +END; +$$ LANGUAGE plpgsql; diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-25.000-25.001.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-25.000-25.001.sql new file mode 100644 index 000000000..a978fb9ee --- /dev/null +++ b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/postgresql/onprc_ehr_compliancedb-25.000-25.001.sql @@ -0,0 +1,609 @@ +ALTER TABLE onprc_ehr_compliancedb.ComplianceProcedureReport ALTER COLUMN expired_period TYPE VARCHAR(50); +ALTER TABLE onprc_ehr_compliancedb.ComplianceProcedureReport ALTER COLUMN new_expired_period TYPE VARCHAR(50); + +ALTER TABLE onprc_ehr_compliancedb.ComplianceRecentReport ALTER COLUMN expired_period TYPE VARCHAR(50); +ALTER TABLE onprc_ehr_compliancedb.ComplianceRecentReport ALTER COLUMN new_expired_period TYPE VARCHAR(50); + +-- Author: R. Blasa +-- Created: 9-20-2024 +/* +** +** Created by +** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from +** the ComplianceProcedureRecentTest.sql query +** +** 1-22-2026 Fix the issues with more than one subquery results +** +*/ + +CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process() +RETURNS integer AS $$ +BEGIN + -- Reset Reporting table + DELETE FROM onprc_ehr_compliancedb.ComplianceProcedureReport; + + INSERT INTO onprc_ehr_compliancedb.ComplianceProcedureReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + ) + SELECT + b.requirementname, + a.employeeid, + string_agg(a.unit, chr(10)) AS unit, + string_agg(a.category, chr(10)) AS category, + string_agg(b.trackingflag, chr(10)) AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT string_agg(h.type::text, chr(10)) FROM ehr_compliancedb.Requirements h WHERE h.requirementname = b.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) AS times_Completed, + (SELECT string_agg(k.expireperiod::text, chr(10)) FROM ehr_compliancedb.Requirements k WHERE k.requirementname = b.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) AS mostrecentcompleted_date, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = b.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = b.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = b.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = b.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.employeeperunit a, ehr_compliancedb.requirementspercategory b + WHERE (a.unit = b.unit OR a.category = b.category) + AND b.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND b.requirementname = t.requirementname) + AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND b.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = b.requirementname AND q.dateDisabled IS NULL) + GROUP BY b.requirementname, a.employeeid + + UNION + + SELECT + a.requirementname, + a.employeeid, + NULL AS unit, + NULL AS category, + 'None' AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT string_agg(h.type::text, chr(10)) FROM ehr_compliancedb.Requirements h WHERE h.requirementname = a.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS timesCompleted, + (SELECT string_agg(k.expireperiod::text, chr(10)) FROM ehr_compliancedb.Requirements k WHERE k.requirementname = a.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS MostRecentDate, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = a.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = a.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.completiondates a + WHERE a.requirementname NOT IN ( + SELECT DISTINCT h.requirementname + FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h + WHERE (k.unit = h.unit OR k.category = h.category) AND a.employeeid = k.employeeid + ) + AND a.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND a.requirementname = t.requirementname) + AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND a.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = a.requirementname AND q.dateDisabled IS NULL) + GROUP BY a.requirementname, a.employeeid + + -- Additional requirements for employees that have not completed training, but is required + UNION + + SELECT + j.requirementname, + j.employeeid, + NULL AS unit, + NULL AS category, + string_agg(j.trackingflag, chr(10)) AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS trainee_type, + (SELECT string_agg(h.type::text, chr(10)) FROM ehr_compliancedb.Requirements h WHERE h.requirementname = j.requirementname) AS requirement_type, + 0 AS timesCompleted, + (SELECT string_agg(k.expireperiod::text, chr(10)) FROM ehr_compliancedb.Requirements k WHERE k.requirementname = j.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + NULL AS MostRecentDate, + '' AS comment, + NULL AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = j.requirementname AND st.employeeid = j.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = j.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM onprc_ehr_compliancedb.RequirementsPerEmployee j + WHERE j.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE j.employeeid = p.employeeid AND p.enddate IS NULL) + AND j.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = j.requirementname AND q.dateDisabled IS NULL) + AND j.requirementname NOT IN ( + SELECT DISTINCT h.requirementname + FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h + WHERE (k.unit = h.unit OR k.category = h.category) AND j.employeeid = k.employeeid + ) + AND j.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE j.employeeid = t.employeeid AND j.requirementname = t.requirementname) + AND j.requirementname NOT IN (SELECT DISTINCT k.requirementname FROM ehr_compliancedb.completiondates k WHERE k.employeeid = j.employeeid) + GROUP BY j.requirementname, j.employeeid + ORDER BY employeeid, requirementname, mostrecentcompleted_date DESC; + + RETURN 0; + +EXCEPTION + WHEN OTHERS THEN + RETURN 1; +END; +$$ LANGUAGE plpgsql; + +-- Author: R. Blasa +-- Created: 9-20-2024 +/* +** +** Created by +** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from +** the ComplianceRecentTest.sql query +** +** 1-22-2026 Fix the issues with more than one subquery results +** +*/ + +CREATE OR REPLACE FUNCTION onprc_ehr_compliancedb.p_ComplianceRecentOverDueSoon_Process() +RETURNS integer AS $$ +BEGIN + -- Reset Reporting table + DELETE FROM onprc_ehr_compliancedb.ComplianceRecentReport; + + INSERT INTO onprc_ehr_compliancedb.ComplianceRecentReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + ) + SELECT + b.requirementname, + a.employeeid, + string_agg(a.unit, chr(10)) AS unit, + string_agg(a.category, chr(10)) AS category, + string_agg(b.trackingflag, chr(10)) AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT string_agg(h.type::text, chr(10)) FROM ehr_compliancedb.Requirements h WHERE h.requirementname = b.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) AS times_Completed, + (SELECT string_agg(k.expireperiod::text, chr(10)) FROM ehr_compliancedb.Requirements k WHERE k.requirementname = b.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) AS mostrecentcompleted_date, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = b.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = b.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = b.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = b.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = b.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = b.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.employeeperunit a, ehr_compliancedb.requirementspercategory b + WHERE (a.unit = b.unit OR a.category = b.category) + AND b.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND b.requirementname = t.requirementname) + AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND b.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = b.requirementname AND q.dateDisabled IS NULL) + GROUP BY b.requirementname, a.employeeid + + UNION + + SELECT + a.requirementname, + a.employeeid, + NULL AS unit, + NULL AS category, + 'None' AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT string_agg(h.type::text, chr(10)) FROM ehr_compliancedb.Requirements h WHERE h.requirementname = a.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS timesCompleted, + (SELECT string_agg(k.expireperiod::text, chr(10)) FROM ehr_compliancedb.Requirements k WHERE k.requirementname = a.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS MostRecentDate, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = a.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = a.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.completiondates a + WHERE a.requirementname NOT IN ( + SELECT DISTINCT h.requirementname + FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h + WHERE (k.unit = h.unit OR k.category = h.category) AND a.employeeid = k.employeeid + ) + AND a.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE a.employeeid = t.employeeid AND a.requirementname = t.requirementname) + AND a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND a.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = a.requirementname AND q.dateDisabled IS NULL) + GROUP BY a.requirementname, a.employeeid + + -- Training that was completed by as an employee training exemptions, and at least completed one, or more times + UNION + + SELECT + a.requirementname, + a.employeeid, + NULL AS unit, + NULL AS category, + 'No' AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = a.employeeid) AS trainee_type, + (SELECT string_agg(h.type::text, chr(10)) FROM ehr_compliancedb.Requirements h WHERE h.requirementname = a.requirementname) AS requirement_type, + (SELECT count(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS timesCompleted, + (SELECT string_agg(k.expireperiod::text, chr(10)) FROM ehr_compliancedb.Requirements k WHERE k.requirementname = a.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) AS MostRecentDate, + ( + SELECT string_agg(DISTINCT yy.comment, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS comment, + ( + SELECT string_agg(DISTINCT yy.snooze_date::text, chr(10)) + FROM ehr_compliancedb.completiondates yy + WHERE yy.date IN (SELECT max(zz.date) FROM ehr_compliancedb.completiondates zz WHERE zz.requirementname = a.requirementname AND zz.employeeid = a.employeeid) + AND yy.requirementname = a.requirementname AND yy.employeeid = a.employeeid + ) AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = a.requirementname AND st.employeeid = a.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = a.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = a.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = a.employeeid + GROUP BY tt.expireperiod + ) + END AS DECIMAL + ) AS MonthsUntilRenewal + FROM ehr_compliancedb.employeerequirementexemptions a + WHERE a.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE a.employeeid = p.employeeid AND p.enddate IS NULL) + AND a.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = a.requirementname AND q.dateDisabled IS NULL) + GROUP BY a.requirementname, a.employeeid + + -- Additional requirements for employees that have not completed training, but is required + UNION + + SELECT + j.requirementname, + j.employeeid, + NULL AS unit, + NULL AS category, + string_agg(j.trackingflag, chr(10)) AS trackingflag, + (SELECT h.email FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS email, + (SELECT h.lastname FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS lastname, + (SELECT h.firstname FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS firstname, + (SELECT h.majorudds FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS host, + (SELECT h.supervisor FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS supervisor, + (SELECT h.type FROM ehr_compliancedb.employees h WHERE h.employeeid = j.employeeid) AS trainee_type, + (SELECT string_agg(h.type::text, chr(10)) FROM ehr_compliancedb.Requirements h WHERE h.requirementname = j.requirementname) AS requirement_type, + 0 AS timesCompleted, + (SELECT string_agg(k.expireperiod::text, chr(10)) FROM ehr_compliancedb.Requirements k WHERE k.requirementname = j.requirementname) AS ExpiredPeriod, + ( + SELECT ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING (COALESCE(tt.expireperiod, 0)) > ((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + AND (tt.reviewdate IS NOT NULL) + ) AS NewExpirePeriod, + NULL AS MostRecentDate, + '' AS comment, + NULL AS snooze_date, + CAST( + CASE + WHEN (SELECT max(st.date) FROM ehr_compliancedb.completiondates st WHERE st.requirementname = j.requirementname AND st.employeeid = j.employeeid) IS NULL THEN 0 + WHEN (SELECT COALESCE(tt.expireperiod, 0) FROM ehr_compliancedb.requirements tt WHERE tt.requirementname = j.requirementname GROUP BY tt.expireperiod) = 0 THEN NULL + WHEN ( + SELECT count(*) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) > 0 THEN + ( + SELECT (((EXTRACT(YEAR FROM tt.reviewdate) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM tt.reviewdate) - EXTRACT(MONTH FROM max(pq.date))) + - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date)))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod, tt.reviewdate + HAVING tt.reviewdate > max(pq.date) + ) + ELSE + ( + SELECT COALESCE(tt.expireperiod, 0) - ((EXTRACT(YEAR FROM now()) - EXTRACT(YEAR FROM max(pq.date))) * 12 + EXTRACT(MONTH FROM now()) - EXTRACT(MONTH FROM max(pq.date))) + FROM ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq + WHERE tt.requirementname = j.requirementname AND pq.requirementname = tt.requirementname AND pq.employeeid = j.employeeid + GROUP BY tt.expireperiod + ) + END AS DOUBLE PRECISION + ) AS MonthsUntilRenewal + FROM onprc_ehr_compliancedb.RequirementsPerEmployee j + WHERE j.employeeid IN (SELECT p.employeeid FROM ehr_compliancedb.employees p WHERE j.employeeid = p.employeeid AND p.enddate IS NULL) + AND j.requirementname IN (SELECT q.requirementname FROM ehr_compliancedb.Requirements q WHERE q.requirementname = j.requirementname AND q.dateDisabled IS NULL) + AND j.requirementname NOT IN ( + SELECT DISTINCT h.requirementname + FROM ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h + WHERE (k.unit = h.unit OR k.category = h.category) AND j.employeeid = k.employeeid + ) + AND j.requirementname NOT IN (SELECT DISTINCT t.requirementname FROM ehr_compliancedb.employeerequirementexemptions t WHERE j.employeeid = t.employeeid AND j.requirementname = t.requirementname) + AND j.requirementname NOT IN (SELECT DISTINCT k.requirementname FROM ehr_compliancedb.completiondates k WHERE k.employeeid = j.employeeid) + GROUP BY j.requirementname, j.employeeid + ORDER BY employeeid, requirementname, mostrecentcompleted_date DESC; + + RETURN 0; + +EXCEPTION + WHEN OTHERS THEN + RETURN 1; +END; +$$ LANGUAGE plpgsql; diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-0.000-24.000.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-0.000-24.000.sql deleted file mode 100644 index 2ada5c5ca..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-0.000-24.000.sql +++ /dev/null @@ -1,43 +0,0 @@ - -CREATE SCHEMA onprc_ehr_compliancedb; -GO - -CREATE TABLE onprc_ehr_compliancedb.SciShield_Data -( - RowId INT IDENTITY(1,1) NOT NULL, - employeeId nvarchar(255) not null, - requirementname nvarchar(255) null, - Date datetime null, - Container ENTITYID NOT NULL, - comment nvarchar(2000) null, - CreatedBy USERID, - Created datetime, - ModifiedBy USERID, - Modified datetime, - processed int NULL - - CONSTRAINT PK_ScieShield_Data PRIMARY KEY (RowId), - CONSTRAINT FK_ONPRC_EHR_COMPLIANCE_SCISHIELD_DATA_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -CREATE INDEX IX_ONPRC_EHR_COMPLIANCEDB_SCISHIELD_DATA_CONTAINER ON onprc_ehr_compliancedb.SciShield_Data (Container); - -CREATE TABLE onprc_ehr_compliancedb.SciShield_Reference_Data -( - rowId int identity(1,1), - label nvarchar(250) NULL, - value nvarchar(255) NOT NULL , - columnName nvarchar(255) NOT NULL, - sort_order integer null, - endDate datetime NULL, - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created datetime, - ModifiedBy USERID, - Modified datetime, - - CONSTRAINT pk_SciShield_reference PRIMARY KEY (value), - CONSTRAINT FK_ONPRC_EHR_COMPLIANCE_REFERENCE_DATA_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) -); -CREATE INDEX IX_ONPRC_EHR_COMPLIANCEDB_SCISHIELD_REFERENCE_DATA_CONTAINER ON onprc_ehr_compliancedb.SciShield_Reference_Data (Container); - -GO \ No newline at end of file diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-0.000-25.000.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-0.000-25.000.sql new file mode 100644 index 000000000..a2339f639 --- /dev/null +++ b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-0.000-25.000.sql @@ -0,0 +1,2530 @@ +CREATE SCHEMA onprc_ehr_compliancedb; +GO + +CREATE TABLE onprc_ehr_compliancedb.SciShield_Data +( + RowId INT IDENTITY(1,1) NOT NULL, + employeeId nvarchar(255) not null, + requirementname nvarchar(255) null, + Date datetime null, + Container ENTITYID NOT NULL, + comment nvarchar(2000) null, + CreatedBy USERID, + Created datetime, + ModifiedBy USERID, + Modified datetime, + processed int NULL + + CONSTRAINT PK_ScieShield_Data PRIMARY KEY (RowId), + CONSTRAINT FK_ONPRC_EHR_COMPLIANCE_SCISHIELD_DATA_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) +); +CREATE INDEX IX_ONPRC_EHR_COMPLIANCEDB_SCISHIELD_DATA_CONTAINER ON onprc_ehr_compliancedb.SciShield_Data (Container); + +CREATE TABLE onprc_ehr_compliancedb.SciShield_Reference_Data +( + rowId int identity(1,1), + label nvarchar(250) NULL, + value nvarchar(255) NOT NULL , + columnName nvarchar(255) NOT NULL, + sort_order integer null, + endDate datetime NULL, + Container ENTITYID NOT NULL, + CreatedBy USERID, + Created datetime, + ModifiedBy USERID, + Modified datetime, + + CONSTRAINT pk_SciShield_reference PRIMARY KEY (value), + CONSTRAINT FK_ONPRC_EHR_COMPLIANCE_REFERENCE_DATA_CONTAINER FOREIGN KEY (Container) REFERENCES core.Containers (EntityId) +); +CREATE INDEX IX_ONPRC_EHR_COMPLIANCEDB_SCISHIELD_REFERENCE_DATA_CONTAINER ON onprc_ehr_compliancedb.SciShield_Reference_Data (Container); + +GO + +/* 24.xxx SQL scripts */ + +-- Author: R. Blasa +-- Created: 2-10-2024 +-- Description: Stored procedure program process SciShield INitial Data + + +CREATE TABLE [onprc_ehr_compliancedb].[SciShieldTemp] ( + [searchID] [int] IDENTITY(100,1) NOT NULL, + [employeeid] [varchar](500) NULL, + [requirementname] [varchar](3000) NULL, + [completeddate] [smalldatetime] NULL, + [comment] [varchar](300) NULL, + [createddate] [smalldatetime] NULL, + [rowid] [int] NULL + ) ON [PRIMARY] + GO + +CREATE TABLE [onprc_ehr_compliancedb].[SciShieldMasterTemp]( + [searchID] [int] IDENTITY(100,1) NOT NULL, + [employeeid] [varchar](500) NULL, + [requirementname] [varchar](3000) NULL, + [completeddate] [smalldatetime] NULL, + [comment] [varchar](300) NULL, + [createddate] [smalldatetime] NULL, + [rowid] [int] NULL + ) ON [PRIMARY] + GO + + + +-- Author: R. Blasa +-- Created: 2-10-2024 + +/* +** +** Created by +** Blasa 1-25-2024 Import process from ScieShield To Prime Compliance Module +** +** Processed codes: Null ---Not Processed +** 1 ------ Successfully posted +** 2 --------- invalid Employeeid +** 3 --------- Undefined Requirement Name +** 4--------- Already exists Compliance module +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.[p_SciShieldToPrimeProcess] + + +AS + + +DECLARE + @SearchKey Int, + @TempsearchKey Int, + @requirementnameFinal varchar(2000), + @requirementnanme varchar(2000), + @employeeid varchar(500), + @Completiondate smalldatetime, + @SciShieldID int + + + + + +BEGIN + + ---- Reset temp table + + Delete onprc_ehr_compliancedb.SciShieldTemp + + + If @@Error <> 0 + GoTo Err_Proc + + +If exists(Select * from onprc_ehr_compliancedb.SciShield_Data where processed is null) +BEGIN + + Insert into onprc_ehr_compliancedb.SciShieldTemp + ( + employeeid, + requirementname, + completeddate, + createddate, + rowid + ) + + + select + employeeid, -------employeeid + requirementname, ----requirement name + date, ----completed Date + getdate(), --- created date + rowid --- SciShield unique id + + + from onprc_ehr_compliancedb.SciShield_Data + where processed is null + + order by employeeid, requirementname, date desc + + If @@Error <> 0 + GoTo Err_Proc + + END + +ELSE ------ No new entries exit + BEGIN + + GOTO No_Records + + END + + --- Initialize Varaibles + + Set @TempsearchKey = 0 + Set @SearchKey = 0 + + + + --- Start processing input records from SciShield + + + Select top 1 @searchkey = searchID from onprc_ehr_compliancedb.SciShieldTemp + order by searchID + + + + +While @TempSearchKey < @SearchKey + BEGIN + Set @requirementnameFinal = '' + Set @requirementnanme = '' + Set @employeeid = '' + Set @Completiondate = Null + Set @SciShieldID = Null + + + Select @employeeid =rtrim(ltrim(lower(employeeid))), @requirementnanme = requirementname, @completiondate = completeddate, @SciShieldID = rowid + from onprc_ehr_compliancedb.SciShieldTemp Where searchID = @Searchkey + + ---Validate requirementname + IF exists (Select * from onprc_ehr_compliancedb.SciShield_Reference_Data where label = @requirementnanme And columnname = 'requirementname' ) + BEGIN + + Select @requirementnameFinal = value from onprc_ehr_compliancedb.SciShield_Reference_Data where label = @requirementnanme And columnname = 'requirementname' + END + ELSE IF exists (Select * from ehr_compliancedb.requirements where requirementname = @requirementnanme) + BEGIN + Select @requirementnameFinal = requirementname from ehr_compliancedb.requirements where requirementname = @requirementnanme + END + + ELSE + BEGIN + Update ss + Set ss.processed = 3 + + From onprc_ehr_compliancedb.SciShield_Data ss Where ss.rowid = @SciShieldID + + If @@Error <> 0 + GoTo Err_Proc + + GOTO Next_Record + END + + ----validate if the record already exists + + IF exists( Select * from ehr_compliancedb.completiondates Where employeeid = @employeeid And requirementname = @requirementnameFinal + And date = @completiondate) + BEGIN + Update ss + Set ss.processed = 4 + + From onprc_ehr_compliancedb.SciShield_Data ss Where ss.rowid = @SciShieldID + + If @@Error <> 0 + GoTo Err_Proc + + GOTO Next_Record + END + + + ----validate if the employeeid is defined + + IF not exists( Select * from ehr_compliancedb.employees Where employeeid = @employeeid And enddate is null) + BEGIN + + Update ss + Set ss.processed = 2 + + From onprc_ehr_compliancedb.SciShield_Data ss Where ss.rowid = @SciShieldID + + + If @@Error <> 0 + GoTo Err_Proc + + GOTO Next_Record + + + + END ---- + + + ---- IF all previous version were validated proceed with the record insert + + + IF not exists( Select * from ehr_compliancedb.completiondates Where employeeid = @employeeid And requirementname = @requirementnameFinal + And date = @completiondate) + + BEGIN + Insert into ehr_compliancedb.completiondates + (employeeid, + requirementname, + date, + trainer, + container, + created, + createdby, + modified, + modifiedby + + ) + values( + @employeeid, + @requirementnameFinal, + @completiondate, + 'ONLINE TRAINING', + 'CD170458-C55F-102F-9907-5107380A54BE', + getdate(), + 2595, + getdate(), + 2595 + ) + If @@Error <> 0 + GoTo Err_Proc + + + + +---------- Set successful entry flag + + Update ss + Set ss.processed = 1 + + From onprc_ehr_compliancedb.SciShield_Data ss Where ss.rowid = @SciShieldID + + + If @@Error <> 0 + GoTo Err_Proc + +END ---- + + + + +Next_Record: + + + + Set @TempSearchkey = @SearchKey + + + Select Top 1 @Searchkey = searchID from onprc_ehr_compliancedb.SciShieldTemp + Where searchID > @TempSearchkey + Order by searchID + + + +END ---(While) + + + + ---- Create a master records of the last most recent entries + If exists (Select * from onprc_ehr_compliancedb.SciShieldTemp) + BEGiN + Insert into onprc_ehr_compliancedb.SciShieldMasterTemp + select + employeeid, + requirementname, + completeddate, + comment, + createddate, + rowid + + + from onprc_ehr_compliancedb.SciShieldTemp + + + If @@Error <> 0 + GoTo Err_Proc +END + +No_Records: + + RETURN 0 + + +Err_Proc: + -------Error Generated, Transfer process stopped + RETURN 1 + + +END + +GO + +CREATE INDEX IX_completiondates_trainer ON ehr_compliancedb.completiondates(trainer); +GO + +-- Author: R. Blasa +-- Created: 9-16-2024 + +/* +** +** Created by +** Blasa 9-16-2024 Storedprocedure to update Compliance Access contaimer values +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.[p_ComplianceAccesscontainerUpdate] + + +AS + + + +BEGIN + + ------ Update container value and include as part of the main Compliance module + +If exists(Select * from ehr_Compliancedb.CompletionDates ss where ss.container = '47F00C3F-5691-103D-8866-41AD310B2640' ) +BEGIN + + Update ss + set ss.container = 'CD170458-C55F-102F-9907-5107380A54BE' ----Compliance folder on Prime Production + + from ehr_Compliancedb.CompletionDates ss + Where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ---Compliance Access folder on Prime Production + + If @@Error <> 0 + GoTo Err_Proc + + END + +ELSE ------ No new entries exit + BEGIN + + GOTO No_Records + + END + + + + +No_Records: + + RETURN 0 + + +Err_Proc: + -------Error Generated, Transfer process stopped + RETURN 1 + + +END + +GO + +EXEC core.fn_dropifexists 'p_ComplianceAccesscontainerUpdate', 'onprc_ehr_compliancedb', 'PROCEDURE'; +GO + +-- Author: R. Blasa +-- Created: 10-2-2024 + +/* +** +** Created by +** Blasa 9-16-2024 Storedprocedure to update Compliance Access contaimer values. +** 10-2-2024 Corrected Container values. +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.p_ComplianceAccesscontainerUpdate + + +AS + + + +BEGIN + + ------ Update container value and include as part of the main Compliance module + +If exists(Select * from ehr_Compliancedb.CompletionDates ss where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ) +BEGIN + + Update ss + set ss.container = 'CD170458-C55F-102F-9907-5107380A54BE' ----Compliance folder on Prime Production + + from ehr_Compliancedb.CompletionDates ss + Where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ---Compliance Access folder on Prime Production + + If @@Error <> 0 + GoTo Err_Proc + + END + +ELSE ------ No new entries exit + BEGIN + + GOTO No_Records + + END + + + + +No_Records: + + RETURN 0 + + +Err_Proc: + -------Error Generated, Transfer process stopped + RETURN 1 + + +END + +GO + +EXEC core.fn_dropifexists 'p_ComplianceAccesscontainerUpdate', 'onprc_ehr_compliancedb', 'PROCEDURE'; +GO + +-- Author: R. Blasa +-- Created: 12-10-2024 + +/* +** +** Created by +** Blasa 12-10-2024 Storedprocedure to update string name "ARRS" to "DCM" +** +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.p_ComplianceTranslatestringUpdate + + +AS + + + +BEGIN + + ------ Update container value and include as part of the main Compliance module + +If exists(select * from ehr_compliancedb.EmployeePerUnit ------> count= 496 + where unit like '%arrs%' + ) +BEGIN + + Update ehr_compliancedb.EmployeePerUnit + set unit = replace(unit,'arrs', 'DCM') + + + + If @@Error <> 0 + GoTo Err_Proc + + END + + + If exists(select * from ehr_compliancedb.EmployeePerUnit ------> count= 496 + where category like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.EmployeePerUnit + set category = replace(category,'arrs', 'DCM') + + + + If @@Error <> 0 + GoTo Err_Proc + + END + + + + If exists(select * from ehr_compliancedb.Employees + where majorudds like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.Employees + set majorudds = replace(majorudds,'arrs', 'DCM') + + + + If @@Error <> 0 + GoTo Err_Proc + + END + + + + If exists(select * from ehr_compliancedb.Employees + where unit like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.Employees + set unit = replace(unit,'arrs', 'DCM') + + If @@Error <> 0 + GoTo Err_Proc + + END + + + + If exists(select * from ehr_compliancedb.Employees + where category like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.Employees + set category = replace(category,'arrs', 'DCM') + + If @@Error <> 0 + GoTo Err_Proc + + END + + + + If exists(select * from ehr_compliancedb.requirements + where requirementname like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.requirements + set requirementname = replace(requirementname,'arrs', 'DCM') + + + If @@Error <> 0 + GoTo Err_Proc + + END + + + + If exists(select * from ehr_compliancedb.EmployeeRequirementExemptions + where requirementname like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.EmployeeRequirementExemptions + set requirementname = replace(requirementname,'arrs', 'DCM') + + + If @@Error <> 0 + GoTo Err_Proc + + END + + + + + If exists(select * from ehr_compliancedb.unit_names + where unit like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.unit_names + set unit = replace(unit,'arrs', 'DCM') + + + + If @@Error <> 0 + GoTo Err_Proc + + END + + + If exists(select * from ehr_compliancedb.RequirementsPerCategory + where RequirementName like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.RequirementsPerCategory + set requirementname = replace(requirementname,'arrs', 'DCM') + + + + If @@Error <> 0 + GoTo Err_Proc + + END + + + If exists(select * from ehr_compliancedb.RequirementsPerCategory + where category like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.RequirementsPerCategory + set category = replace(category,'arrs', 'DCM') + + If @@Error <> 0 + GoTo Err_Proc + + END + + + If exists(select * from ehr_compliancedb.RequirementsPerCategory + where unit like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.RequirementsPerCategory + set unit = replace(unit,'arrs', 'DCM') + + + If @@Error <> 0 + GoTo Err_Proc + + END + + If exists(select * from ehr_compliancedb.completiondates + where requirementname like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.completiondates + set requirementname = replace(requirementname,'arrs', 'DCM') + + + If @@Error <> 0 + GoTo Err_Proc + + END + + If exists(select * from ehr_compliancedb.EmployeeCategory + where categoryname like '%arrs%' + ) + BEGIN + + Update ehr_compliancedb.EmployeeCategory + set categoryname = replace(categoryname ,'arrs', 'DCM') + + + If @@Error <> 0 + GoTo Err_Proc + + END + + + + + + + + +No_Records: + + RETURN 0 + + +Err_Proc: + -- + RETURN 1 + + +END + +GO + +-- Author: R. Blasa +-- Created: 9-20-2024-2024 +-- Description: Stored procedure program to create a static data set for Compliance Procedure Recent Test .sql + + + CREATE TABLE onprc_ehr_compliancedb.ComplianceProcedureReport( + [rowid] [int] IDENTITY(1,1) NOT NULL, + [employeeid] varchar(300) NULL, + [requirementname] [varchar](4000) NULL, + [unit] [varchar](500) NULL, + [category] [varchar](500) NULL, + [trackingflag] [varchar](100) NULL, + [email] [varchar](500) NULL, + [lastname] [varchar](500) NULL, + [firstname] [varchar](500) NULL, + [host] [varchar](500) NULL, + [supervisor] [varchar](500) NULL, + [trainee_type] [varchar](500) NULL, + [times_completed] [smallint] NULL, + [expired_period] [smallint] NULL, + [new_expired_period] [smallint] NULL, + [mostrecentcompleted_date] [smalldatetime] NULL, + [comment] [varchar](4000) NULL, + [snooze_date] [smalldatetime] NULL, + [months_until_renewal] [Float] NULL, + [requirement_name_type] [varchar](1000) NULL + + ) ON [PRIMARY] + GO + +-- Author: R. Blasa +-- Created: 9-20-2024 + +/* +** +** Created by +** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from +** the ComplianceProcedureRecentTest.sql query +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process + + +AS + + + ----- Reset Reporting table + Delete onprc_ehr_compliancedb.ComplianceProcedureReport + + If @@Error <> 0 + GoTo Err_Proc + + + +BEGIN + + Insert into onprc_ehr_compliancedb.ComplianceProcedureReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + + ) + + + + + + select b.requirementname, + a.employeeid, + string_agg(a.unit,char(10)) as unit, + string_agg(a.category,char(10)) as category, + (select top 1 h.trackingflag from ehr_compliancedb.requirementspercategory h where h.requirementname = b.requirementname) as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate()) ) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) + + + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate()) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS Float) AS MonthsUntilRenewal + + + + from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b + where ( a.unit = b.unit or a.category = b.category ) + And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And b.requirementname = t.requirementname) + + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) + + + group by b.requirementname,a.employeeid + + + union + + select a.requirementname, + a.employeeid, + null as unit, + null as category, + 'No' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select ( datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate()) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS Float) AS MonthsUntilRenewal + + + from ehr_compliancedb.completiondates a + where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit + or k.category = h.category) And a.employeeid = k.employeeid ) + And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And a.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) + + group by a.requirementname,a.employeeid + + UNION + + -- Additional requirements for employees that have not completed training, but is required + select j.requirementname, + j.employeeid, + null as unit, + null as category, + 'Yes' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer + null as timesCompleted, + null as ExpiredPeriod, + null as NewExpirePeriod, + null as MostRecentDate, + '' as comment, + null as snooze_date, + null AS MonthsUntilRenewal + + + + from ehr_compliancedb.RequirementsPerEmployee j + Where j.requirementname not in (select z.requirementname from ehr_compliancedb.completiondates z where z.requirementname = j.requirementname + and z.employeeid = j.employeeid and z.date is not null) + And j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) + And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) + + group by j.requirementname,j.employeeid + + order by employeeid,requirementname, mostrecentcompleted_date desc + + + If @@Error <> 0 + GoTo Err_Proc + + + + + RETURN 0 + + +Err_Proc: + + RETURN 1 + + +END + +GO + +-- Author: R. Blasa +-- Created: 9-20-2024-2024 +-- Description: Stored procedure program to create a static data set for Compliance Recent Test .sql + + + CREATE TABLE onprc_ehr_compliancedb.ComplianceRecentReport( + [rowid] [int] IDENTITY(1,1) NOT NULL, + [employeeid] varchar(300) NULL, + [requirementname] [varchar](4000) NULL, + [unit] [varchar](500) NULL, + [category] [varchar](500) NULL, + [trackingflag] [varchar](100) NULL, + [email] [varchar](500) NULL, + [lastname] [varchar](500) NULL, + [firstname] [varchar](500) NULL, + [host] [varchar](500) NULL, + [supervisor] [varchar](500) NULL, + [trainee_type] [varchar](500) NULL, + [times_completed] [smallint] NULL, + [expired_period] [smallint] NULL, + [new_expired_period] [smallint] NULL, + [mostrecentcompleted_date] [smalldatetime] NULL, + [comment] [varchar](4000) NULL, + [snooze_date] [smalldatetime] NULL, + [months_until_renewal] [FLOAT] NULL, + [requirement_name_type] [varchar](1000) NULL + + ) ON [PRIMARY] + GO + + +-- Author: R. Blasa +-- Created: 9-20-2024 + +/* +** +** Created by +** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from +** the ComplianceRecentTest.sql query +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.p_ComplianceRecentOverDueSoon_Process + + +AS + + + + ----- Reset Reporting table + Delete onprc_ehr_compliancedb.ComplianceRecentReport + + If @@Error <> 0 + GoTo Err_Proc + + + +BEGIN + + Insert into onprc_ehr_compliancedb.ComplianceRecentReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + + ) + + + + + select b.requirementname, + a.employeeid, + string_agg(a.unit,char(10)) as unit, + string_agg(a.category,char(10)) as category, + (select top 1 h.trackingflag from ehr_compliancedb.requirementspercategory h where h.requirementname = b.requirementname) as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) + + + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + + from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b + where ( a.unit = b.unit or a.category = b.category ) + And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And b.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) + + + group by b.requirementname,a.employeeid + + + union + + select a.requirementname, + a.employeeid, + null as unit, + null as category, + 'No' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + from ehr_compliancedb.completiondates a + where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit + or k.category = h.category) And a.employeeid = k.employeeid ) + And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And a.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) + + group by a.requirementname,a.employeeid + + UNION + + --- Training that was completed by as an employee training exemptions, and at least completed one, or more times + + select a.requirementname, + a.employeeid, + null as unit, + null as category, + 'No' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) ) + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS DECIMAL) AS MonthsUntilRenewal + + + from ehr_compliancedb.employeerequirementexemptions a + Where a.requirementname in (select z.requirementname from ehr_compliancedb.completiondates z where z.requirementname = a.requirementname + and z.employeeid = a.employeeid and z.date is not null) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) + + group by a.requirementname,a.employeeid + + UNION + + --- Additional requirements for employees that have not completed training, but is required + + select j.requirementname, + j.employeeid, + null as unit, + null as category, + 'Yes' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = j.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) + And yy.requirementname= j.requirementname and yy.employeeid= j.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) + And yy.requirementname= j.requirementname and yy.employeeid= j.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = j.requirementname and st.employeeid = j.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = j.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) ) + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod ) + + END AS DECIMAL) AS MonthsUntilRenewal + + + + + + from ehr_compliancedb.RequirementsPerEmployee j + Where j.requirementname not in (select z.requirementname from ehr_compliancedb.completiondates z where z.requirementname = j.requirementname + and z.employeeid = j.employeeid and z.date is not null) + And j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) + And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) + + group by j.requirementname,j.employeeid + + order by employeeid,requirementname, mostrecentcompleted_date desc + + + If @@Error <> 0 + GoTo Err_Proc + + + + + RETURN 0 + + +Err_Proc: + + RETURN 1 + + +END + +GO + +EXEC core.fn_dropifexists 'p_ComplianceRecentOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE'; +GO + +-- Author: R. Blasa +-- Created: 9-20-2024 + +/* +** +** Created by +** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from +** the ComplianceRecentTest.sql query +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.p_ComplianceRecentOverDueSoon_Process + + +AS + + + + ----- Reset Reporting table + Delete onprc_ehr_compliancedb.ComplianceRecentReport + + If @@Error <> 0 + GoTo Err_Proc + + + +BEGIN + + Insert into onprc_ehr_compliancedb.ComplianceRecentReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + + ) + + + + + select b.requirementname, + a.employeeid, + string_agg(a.unit,char(10)) as unit, + string_agg(a.category,char(10)) as category, + string_agg(b.trackingflag,char(10)) as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) + + + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + + from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b + where ( a.unit = b.unit or a.category = b.category ) + And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And b.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) + + + group by b.requirementname,a.employeeid + + + union + + select a.requirementname, + a.employeeid, + null as unit, + null as category, + 'None' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + from ehr_compliancedb.completiondates a + where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit + or k.category = h.category) And a.employeeid = k.employeeid ) + And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And a.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) + + group by a.requirementname,a.employeeid + + UNION + + --- Training that was completed by as an employee training exemptions, and at least completed one, or more times + + select a.requirementname, + a.employeeid, + null as unit, + null as category, + 'No' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) ) + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS DECIMAL) AS MonthsUntilRenewal + + + from ehr_compliancedb.employeerequirementexemptions a + Where a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) + + group by a.requirementname,a.employeeid + + UNION + + --- Additional requirements for employees that have not completed training, but is required + + select j.requirementname, + j.employeeid, + null as unit, + null as category, + 'Yes' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = j.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) + And yy.requirementname= j.requirementname and yy.employeeid= j.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) + And yy.requirementname= j.requirementname and yy.employeeid= j.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = j.requirementname and st.employeeid = j.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = j.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) ) + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod ) + + END AS DECIMAL) AS MonthsUntilRenewal + + + + from ehr_compliancedb.RequirementsPerEmployee j + Where j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) + And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) + + group by j.requirementname,j.employeeid + + order by employeeid,requirementname, mostrecentcompleted_date desc + + + If @@Error <> 0 + GoTo Err_Proc + + + + + RETURN 0 + + +Err_Proc: + + RETURN 1 + + +END + +GO + +EXEC core.fn_dropifexists 'p_ComplianceProcedureOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE'; +GO + +-- Author: R. Blasa +-- Created: 9-20-2024 + +/* +** +** Created by +** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from +** the ComplianceProcedureRecentTest.sql query +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process + + +AS + + + ----- Reset Reporting table + Delete onprc_ehr_compliancedb.ComplianceProcedureReport + + If @@Error <> 0 + GoTo Err_Proc + + + +BEGIN + + Insert into onprc_ehr_compliancedb.ComplianceProcedureReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + + ) + + + + + + select b.requirementname, + a.employeeid, + string_agg(a.unit,char(10)) as unit, + string_agg(a.category,char(10)) as category, + string_agg(b.trackingflag,char(10)) as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate()) ) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) + + + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate()) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS Float) AS MonthsUntilRenewal + + + + from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b + where ( a.unit = b.unit or a.category = b.category ) + And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And b.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) + + + group by b.requirementname,a.employeeid + + union + + select a.requirementname, + a.employeeid, + null as unit, + null as category, + 'None' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) + + + ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + from ehr_compliancedb.completiondates a + where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit + or k.category = h.category) And a.employeeid = k.employeeid ) + And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And a.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) + + group by a.requirementname,a.employeeid + + union + + -- Additional requirements for employees that have not completed training, but is required + select j.requirementname, + j.employeeid, + null as unit, + null as category, + 'Yes' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer + null as timesCompleted, + null as ExpiredPeriod, + null as NewExpirePeriod, + null as MostRecentDate, + '' as comment, + null as snooze_date, + null AS MonthsUntilRenewal + + + + from ehr_compliancedb.RequirementsPerEmployee j + Where j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) + And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) + + group by j.requirementname,j.employeeid + + order by employeeid,requirementname, mostrecentcompleted_date desc + + + If @@Error <> 0 + GoTo Err_Proc + + + + + RETURN 0 + + +Err_Proc: + + RETURN 1 + + +END + +GO + +CREATE TABLE onprc_ehr_compliancedb.RequirementsPerEmployee +( + RowId INT IDENTITY(1,1) NOT NULL, + EmployeeId varchar(255) not null, + RequirementName varchar(255) not null, + CreatedBy USERID, + Created datetime, + ModifiedBy USERID, + Modified datetime, + trackingflag varchar(100) + + CONSTRAINT PK_RequirementsPerEmployeename PRIMARY KEY (RowId) +); +GO + +EXEC core.fn_dropifexists 'p_ComplianceRecentOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE'; +GO + +-- Author: R. Blasa +-- Created: 9-20-2024 + +/* +** +** Created by +** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from +** the ComplianceRecentTest.sql query +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.p_ComplianceRecentOverDueSoon_Process + + +AS + + + + ----- Reset Reporting table + Delete onprc_ehr_compliancedb.ComplianceRecentReport + + If @@Error <> 0 + GoTo Err_Proc + + + +BEGIN + + Insert into onprc_ehr_compliancedb.ComplianceRecentReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + + ) + + + + + select b.requirementname, + a.employeeid, + string_agg(a.unit,char(10)) as unit, + string_agg(a.category,char(10)) as category, + string_agg(b.trackingflag,char(10)) as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) + + + + + ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + + from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b + where ( a.unit = b.unit or a.category = b.category ) + And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And b.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) + + + group by b.requirementname,a.employeeid + + + union + + select a.requirementname, + a.employeeid, + null as unit, + null as category, + 'None' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) + + + ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + from ehr_compliancedb.completiondates a + where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit + or k.category = h.category) And a.employeeid = k.employeeid ) + And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And a.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) + + group by a.requirementname,a.employeeid + + UNION + + --- Training that was completed by as an employee training exemptions, and at least completed one, or more times + + select a.requirementname, + a.employeeid, + null as unit, + null as category, + 'No' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN + + ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) + + + ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS DECIMAL) AS MonthsUntilRenewal + + + from ehr_compliancedb.employeerequirementexemptions a + Where a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) + + group by a.requirementname,a.employeeid + + UNION + + --- Additional requirements for employees that have not completed training, but is required + + select j.requirementname, + j.employeeid, + null as unit, + null as category, + string_agg(j.trackingflag,char(10)) as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer + 0 as timesCompleted, + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = j.requirementname) as ExpiredPeriod, + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + null as MostRecentDate, + '' as comment, + null as snooze_date, + CAST( + CASE + + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = j.requirementname and st.employeeid = j.employeeid ) IS NULL then 0 + WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = j.requirementname group by tt.expireperiod ) = 0 then Null + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) + + + ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + from onprc_ehr_compliancedb.RequirementsPerEmployee j + Where j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) + And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) + And j.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit + or k.category = h.category) And j.employeeid = k.employeeid ) + And j.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where j.employeeid = t.employeeid And j.requirementname = t.requirementname) + And j.requirementname not in (select distinct k.requirementname from ehr_compliancedb.completiondates k Where k.employeeid = j.employeeid) + + group by j.requirementname,j.employeeid + + order by employeeid,requirementname, mostrecentcompleted_date desc + + + If @@Error <> 0 + GoTo Err_Proc + + + + + RETURN 0 + + +Err_Proc: + + RETURN 1 + + +END + +GO + +EXEC core.fn_dropifexists 'p_ComplianceProcedureOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE'; +GO + +-- Author: R. Blasa +-- Created: 9-20-2024 + +/* +** +** Created by +** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from +** the ComplianceProcedureRecentTest.sql query +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process + + +AS + + + ----- Reset Reporting table + Delete onprc_ehr_compliancedb.ComplianceProcedureReport + + If @@Error <> 0 + GoTo Err_Proc + + + +BEGIN + + Insert into onprc_ehr_compliancedb.ComplianceProcedureReport + ( + requirementname, + employeeid, + unit, + category, + trackingflag, + email, + lastname, + firstname, + host, + supervisor, + trainee_type, + requirement_name_type, + times_completed, + expired_period, + new_expired_Period, + mostrecentcompleted_date, + comment, + snooze_date, + months_until_renewal + + ) + + + + + + select b.requirementname, + a.employeeid, + string_agg(a.unit,char(10)) as unit, + string_agg(a.category,char(10)) as category, + string_agg(b.trackingflag,char(10)) as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate()) ) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) + + + ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate()) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS Float) AS MonthsUntilRenewal + + + + from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b + where ( a.unit = b.unit or a.category = b.category ) + And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And b.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) + + + group by b.requirementname,a.employeeid + + union + + select a.requirementname, + a.employeeid, + null as unit, + null as category, + 'None' as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer + + + (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, + + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, + + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + + (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, + + (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, + + (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) + And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, + + CAST( + CASE + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 + WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) + + + ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + from ehr_compliancedb.completiondates a + where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit + or k.category = h.category) And a.employeeid = k.employeeid ) + And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid + And a.requirementname = t.requirementname) + And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) + And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) + + group by a.requirementname,a.employeeid + + union + + -- Additional requirements for employees that have not completed training, but is required + select j.requirementname, + j.employeeid, + null as unit, + null as category, + string_agg(j.trackingflag,char(10)) as trackingflag, + (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, + (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, + (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, + (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, + (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, + (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer + (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer + 0 as timesCompleted, + (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = j.requirementname) as ExpiredPeriod, + ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, + null as MostRecentDate, + '' as comment, + null as snooze_date, + CAST( + CASE + + WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = j.requirementname and st.employeeid = j.employeeid ) IS NULL then 0 + WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = j.requirementname group by tt.expireperiod ) = 0 then Null + + + WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN + + ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate + having (tt.reviewdate) > (max(pq.date)) ) + + + ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod ) + + END AS FLOAT) AS MonthsUntilRenewal + + + + from onprc_ehr_compliancedb.RequirementsPerEmployee j + Where j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) + And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) + And j.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit + or k.category = h.category) And j.employeeid = k.employeeid ) + And j.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where j.employeeid = t.employeeid And j.requirementname = t.requirementname) + And j.requirementname not in (select distinct k.requirementname from ehr_compliancedb.completiondates k Where k.employeeid = j.employeeid) + + group by j.requirementname,j.employeeid + + order by employeeid,requirementname, mostrecentcompleted_date desc + + + If @@Error <> 0 + GoTo Err_Proc + + + + + RETURN 0 + + +Err_Proc: + + RETURN 1 + + +END + +GO + +EXEC core.fn_dropifexists 'p_ComplianceAccesscontainerUpdate', 'onprc_ehr_compliancedb', 'PROCEDURE'; +GO + +-- Author: R. Blasa +-- Created: 10-2-2024 + +/* +** +** Created by +** Blasa 9-5-2025 Storedprocedure to update Compliance Access contaimer values and update +** Completion date records +** . +** +** +** +*/ + +CREATE Procedure onprc_ehr_compliancedb.p_ComplianceAccesscontainerUpdate + + + AS + + + +BEGIN + + ------ Update container value and include as part of the main Compliance module + +If exists(Select * from ehr_Compliancedb.CompletionDates ss where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ) +BEGIN + +Update ss +set ss.container = 'CD170458-C55F-102F-9907-5107380A54BE' ----Compliance folder on Prime Production + + from ehr_Compliancedb.CompletionDates ss +Where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ---Compliance Access folder on Prime Production + + If @@Error <> 0 + GoTo Err_Proc + +END + +ELSE ------ No new entries exit +BEGIN + +GOTO No_Records + +END + + + + +No_Records: + + RETURN 0 + + +Err_Proc: + -------Error Generated, Transfer process stopped + RETURN 1 + + +END + +GO \ No newline at end of file diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.001-24.002.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.001-24.002.sql deleted file mode 100644 index c36be855e..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.001-24.002.sql +++ /dev/null @@ -1,311 +0,0 @@ - - - - --- Author: R. Blasa --- Created: 2-10-2024 --- Description: Stored procedure program process SciShield INitial Data - - -CREATE TABLE [onprc_ehr_compliancedb].[SciShieldTemp] ( - [searchID] [int] IDENTITY(100,1) NOT NULL, - [employeeid] [varchar](500) NULL, - [requirementname] [varchar](3000) NULL, - [completeddate] [smalldatetime] NULL, - [comment] [varchar](300) NULL, - [createddate] [smalldatetime] NULL, - [rowid] [int] NULL - ) ON [PRIMARY] - GO - -CREATE TABLE [onprc_ehr_compliancedb].[SciShieldMasterTemp]( - [searchID] [int] IDENTITY(100,1) NOT NULL, - [employeeid] [varchar](500) NULL, - [requirementname] [varchar](3000) NULL, - [completeddate] [smalldatetime] NULL, - [comment] [varchar](300) NULL, - [createddate] [smalldatetime] NULL, - [rowid] [int] NULL - ) ON [PRIMARY] - GO - - - --- Author: R. Blasa --- Created: 2-10-2024 - -/* -** -** Created by -** Blasa 1-25-2024 Import process from ScieShield To Prime Compliance Module -** -** Processed codes: Null ---Not Processed -** 1 ------ Successfully posted -** 2 --------- invalid Employeeid -** 3 --------- Undefined Requirement Name -** 4--------- Already exists Compliance module -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.[p_SciShieldToPrimeProcess] - - -AS - - -DECLARE - @SearchKey Int, - @TempsearchKey Int, - @requirementnameFinal varchar(2000), - @requirementnanme varchar(2000), - @employeeid varchar(500), - @Completiondate smalldatetime, - @SciShieldID int - - - - - -BEGIN - - ---- Reset temp table - - Delete onprc_ehr_compliancedb.SciShieldTemp - - - If @@Error <> 0 - GoTo Err_Proc - - -If exists(Select * from onprc_ehr_compliancedb.SciShield_Data where processed is null) -BEGIN - - Insert into onprc_ehr_compliancedb.SciShieldTemp - ( - employeeid, - requirementname, - completeddate, - createddate, - rowid - ) - - - select - employeeid, -------employeeid - requirementname, ----requirement name - date, ----completed Date - getdate(), --- created date - rowid --- SciShield unique id - - - from onprc_ehr_compliancedb.SciShield_Data - where processed is null - - order by employeeid, requirementname, date desc - - If @@Error <> 0 - GoTo Err_Proc - - END - -ELSE ------ No new entries exit - BEGIN - - GOTO No_Records - - END - - --- Initialize Varaibles - - Set @TempsearchKey = 0 - Set @SearchKey = 0 - - - - --- Start processing input records from SciShield - - - Select top 1 @searchkey = searchID from onprc_ehr_compliancedb.SciShieldTemp - order by searchID - - - - -While @TempSearchKey < @SearchKey - BEGIN - Set @requirementnameFinal = '' - Set @requirementnanme = '' - Set @employeeid = '' - Set @Completiondate = Null - Set @SciShieldID = Null - - - Select @employeeid =rtrim(ltrim(lower(employeeid))), @requirementnanme = requirementname, @completiondate = completeddate, @SciShieldID = rowid - from onprc_ehr_compliancedb.SciShieldTemp Where searchID = @Searchkey - - ---Validate requirementname - IF exists (Select * from onprc_ehr_compliancedb.SciShield_Reference_Data where label = @requirementnanme And columnname = 'requirementname' ) - BEGIN - - Select @requirementnameFinal = value from onprc_ehr_compliancedb.SciShield_Reference_Data where label = @requirementnanme And columnname = 'requirementname' - END - ELSE IF exists (Select * from ehr_compliancedb.requirements where requirementname = @requirementnanme) - BEGIN - Select @requirementnameFinal = requirementname from ehr_compliancedb.requirements where requirementname = @requirementnanme - END - - ELSE - BEGIN - Update ss - Set ss.processed = 3 - - From onprc_ehr_compliancedb.SciShield_Data ss Where ss.rowid = @SciShieldID - - If @@Error <> 0 - GoTo Err_Proc - - GOTO Next_Record - END - - ----validate if the record already exists - - IF exists( Select * from ehr_compliancedb.completiondates Where employeeid = @employeeid And requirementname = @requirementnameFinal - And date = @completiondate) - BEGIN - Update ss - Set ss.processed = 4 - - From onprc_ehr_compliancedb.SciShield_Data ss Where ss.rowid = @SciShieldID - - If @@Error <> 0 - GoTo Err_Proc - - GOTO Next_Record - END - - - ----validate if the employeeid is defined - - IF not exists( Select * from ehr_compliancedb.employees Where employeeid = @employeeid And enddate is null) - BEGIN - - Update ss - Set ss.processed = 2 - - From onprc_ehr_compliancedb.SciShield_Data ss Where ss.rowid = @SciShieldID - - - If @@Error <> 0 - GoTo Err_Proc - - GOTO Next_Record - - - - END ---- - - - ---- IF all previous version were validated proceed with the record insert - - - IF not exists( Select * from ehr_compliancedb.completiondates Where employeeid = @employeeid And requirementname = @requirementnameFinal - And date = @completiondate) - - BEGIN - Insert into ehr_compliancedb.completiondates - (employeeid, - requirementname, - date, - trainer, - container, - created, - createdby, - modified, - modifiedby - - ) - values( - @employeeid, - @requirementnameFinal, - @completiondate, - 'ONLINE TRAINING', - 'CD170458-C55F-102F-9907-5107380A54BE', - getdate(), - 2595, - getdate(), - 2595 - ) - If @@Error <> 0 - GoTo Err_Proc - - - - ----------- Set successful entry flag - - Update ss - Set ss.processed = 1 - - From onprc_ehr_compliancedb.SciShield_Data ss Where ss.rowid = @SciShieldID - - - If @@Error <> 0 - GoTo Err_Proc - -END ---- - - - - -Next_Record: - - - - Set @TempSearchkey = @SearchKey - - - Select Top 1 @Searchkey = searchID from onprc_ehr_compliancedb.SciShieldTemp - Where searchID > @TempSearchkey - Order by searchID - - - -END ---(While) - - - - ---- Create a master records of the last most recent entries - If exists (Select * from onprc_ehr_compliancedb.SciShieldTemp) - BEGiN - Insert into onprc_ehr_compliancedb.SciShieldMasterTemp - select - employeeid, - requirementname, - completeddate, - comment, - createddate, - rowid - - - from onprc_ehr_compliancedb.SciShieldTemp - - - If @@Error <> 0 - GoTo Err_Proc -END - -No_Records: - - RETURN 0 - - -Err_Proc: - -------Error Generated, Transfer process stopped - RETURN 1 - - -END - -GO \ No newline at end of file diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.002-24.003.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.002-24.003.sql deleted file mode 100644 index 51a39f1c9..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.002-24.003.sql +++ /dev/null @@ -1,65 +0,0 @@ - - -CREATE INDEX IX_completiondates_trainer ON ehr_compliancedb.completiondates(trainer); -GO - --- Author: R. Blasa --- Created: 9-16-2024 - -/* -** -** Created by -** Blasa 9-16-2024 Storedprocedure to update Compliance Access contaimer values -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.[p_ComplianceAccesscontainerUpdate] - - -AS - - - -BEGIN - - ------ Update container value and include as part of the main Compliance module - -If exists(Select * from ehr_Compliancedb.CompletionDates ss where ss.container = '47F00C3F-5691-103D-8866-41AD310B2640' ) -BEGIN - - Update ss - set ss.container = 'CD170458-C55F-102F-9907-5107380A54BE' ----Compliance folder on Prime Production - - from ehr_Compliancedb.CompletionDates ss - Where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ---Compliance Access folder on Prime Production - - If @@Error <> 0 - GoTo Err_Proc - - END - -ELSE ------ No new entries exit - BEGIN - - GOTO No_Records - - END - - - - -No_Records: - - RETURN 0 - - -Err_Proc: - -------Error Generated, Transfer process stopped - RETURN 1 - - -END - -GO \ No newline at end of file diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.003-24.004.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.003-24.004.sql deleted file mode 100644 index ce18d1d4b..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.003-24.004.sql +++ /dev/null @@ -1,66 +0,0 @@ - - -EXEC core.fn_dropifexists 'p_ComplianceAccesscontainerUpdate', 'onprc_ehr_compliancedb', 'PROCEDURE'; -GO - --- Author: R. Blasa --- Created: 10-2-2024 - -/* -** -** Created by -** Blasa 9-16-2024 Storedprocedure to update Compliance Access contaimer values. -** 10-2-2024 Corrected Container values. -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.p_ComplianceAccesscontainerUpdate - - -AS - - - -BEGIN - - ------ Update container value and include as part of the main Compliance module - -If exists(Select * from ehr_Compliancedb.CompletionDates ss where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ) -BEGIN - - Update ss - set ss.container = 'CD170458-C55F-102F-9907-5107380A54BE' ----Compliance folder on Prime Production - - from ehr_Compliancedb.CompletionDates ss - Where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ---Compliance Access folder on Prime Production - - If @@Error <> 0 - GoTo Err_Proc - - END - -ELSE ------ No new entries exit - BEGIN - - GOTO No_Records - - END - - - - -No_Records: - - RETURN 0 - - -Err_Proc: - -------Error Generated, Transfer process stopped - RETURN 1 - - -END - -GO \ No newline at end of file diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.004-24.005.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.004-24.005.sql deleted file mode 100644 index 4c2b7aa50..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.004-24.005.sql +++ /dev/null @@ -1,250 +0,0 @@ - - -EXEC core.fn_dropifexists 'p_ComplianceAccesscontainerUpdate', 'onprc_ehr_compliancedb', 'PROCEDURE'; -GO - --- Author: R. Blasa --- Created: 12-10-2024 - -/* -** -** Created by -** Blasa 12-10-2024 Storedprocedure to update string name "ARRS" to "DCM" -** -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.p_ComplianceTranslatestringUpdate - - -AS - - - -BEGIN - - ------ Update container value and include as part of the main Compliance module - -If exists(select * from ehr_compliancedb.EmployeePerUnit ------> count= 496 - where unit like '%arrs%' - ) -BEGIN - - Update ehr_compliancedb.EmployeePerUnit - set unit = replace(unit,'arrs', 'DCM') - - - - If @@Error <> 0 - GoTo Err_Proc - - END - - - If exists(select * from ehr_compliancedb.EmployeePerUnit ------> count= 496 - where category like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.EmployeePerUnit - set category = replace(category,'arrs', 'DCM') - - - - If @@Error <> 0 - GoTo Err_Proc - - END - - - - If exists(select * from ehr_compliancedb.Employees - where majorudds like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.Employees - set majorudds = replace(majorudds,'arrs', 'DCM') - - - - If @@Error <> 0 - GoTo Err_Proc - - END - - - - If exists(select * from ehr_compliancedb.Employees - where unit like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.Employees - set unit = replace(unit,'arrs', 'DCM') - - If @@Error <> 0 - GoTo Err_Proc - - END - - - - If exists(select * from ehr_compliancedb.Employees - where category like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.Employees - set category = replace(category,'arrs', 'DCM') - - If @@Error <> 0 - GoTo Err_Proc - - END - - - - If exists(select * from ehr_compliancedb.requirements - where requirementname like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.requirements - set requirementname = replace(requirementname,'arrs', 'DCM') - - - If @@Error <> 0 - GoTo Err_Proc - - END - - - - If exists(select * from ehr_compliancedb.EmployeeRequirementExemptions - where requirementname like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.EmployeeRequirementExemptions - set requirementname = replace(requirementname,'arrs', 'DCM') - - - If @@Error <> 0 - GoTo Err_Proc - - END - - - - - If exists(select * from ehr_compliancedb.unit_names - where unit like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.unit_names - set unit = replace(unit,'arrs', 'DCM') - - - - If @@Error <> 0 - GoTo Err_Proc - - END - - - If exists(select * from ehr_compliancedb.RequirementsPerCategory - where RequirementName like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.RequirementsPerCategory - set requirementname = replace(requirementname,'arrs', 'DCM') - - - - If @@Error <> 0 - GoTo Err_Proc - - END - - - If exists(select * from ehr_compliancedb.RequirementsPerCategory - where category like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.RequirementsPerCategory - set category = replace(category,'arrs', 'DCM') - - If @@Error <> 0 - GoTo Err_Proc - - END - - - If exists(select * from ehr_compliancedb.RequirementsPerCategory - where unit like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.RequirementsPerCategory - set unit = replace(unit,'arrs', 'DCM') - - - If @@Error <> 0 - GoTo Err_Proc - - END - - If exists(select * from ehr_compliancedb.completiondates - where requirementname like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.completiondates - set requirementname = replace(requirementname,'arrs', 'DCM') - - - If @@Error <> 0 - GoTo Err_Proc - - END - - If exists(select * from ehr_compliancedb.EmployeeCategory - where categoryname like '%arrs%' - ) - BEGIN - - Update ehr_compliancedb.EmployeeCategory - set categoryname = replace(categoryname ,'arrs', 'DCM') - - - If @@Error <> 0 - GoTo Err_Proc - - END - - - - - - - - -No_Records: - - RETURN 0 - - -Err_Proc: - -- - RETURN 1 - - -END - -GO \ No newline at end of file diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.005-24.006.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.005-24.006.sql deleted file mode 100644 index 0a739ae44..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.005-24.006.sql +++ /dev/null @@ -1,261 +0,0 @@ --- Author: R. Blasa --- Created: 9-20-2024-2024 --- Description: Stored procedure program to create a static data set for Compliance Procedure Recent Test .sql - - - CREATE TABLE onprc_ehr_compliancedb.ComplianceProcedureReport( - [rowid] [int] IDENTITY(1,1) NOT NULL, - [employeeid] varchar(300) NULL, - [requirementname] [varchar](4000) NULL, - [unit] [varchar](500) NULL, - [category] [varchar](500) NULL, - [trackingflag] [varchar](100) NULL, - [email] [varchar](500) NULL, - [lastname] [varchar](500) NULL, - [firstname] [varchar](500) NULL, - [host] [varchar](500) NULL, - [supervisor] [varchar](500) NULL, - [trainee_type] [varchar](500) NULL, - [times_completed] [smallint] NULL, - [expired_period] [smallint] NULL, - [new_expired_period] [smallint] NULL, - [mostrecentcompleted_date] [smalldatetime] NULL, - [comment] [varchar](4000) NULL, - [snooze_date] [smalldatetime] NULL, - [months_until_renewal] [Float] NULL, - [requirement_name_type] [varchar](1000) NULL - - ) ON [PRIMARY] - GO - --- Author: R. Blasa --- Created: 9-20-2024 - -/* -** -** Created by -** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from -** the ComplianceProcedureRecentTest.sql query -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process - - -AS - - - ----- Reset Reporting table - Delete onprc_ehr_compliancedb.ComplianceProcedureReport - - If @@Error <> 0 - GoTo Err_Proc - - - -BEGIN - - Insert into onprc_ehr_compliancedb.ComplianceProcedureReport - ( - requirementname, - employeeid, - unit, - category, - trackingflag, - email, - lastname, - firstname, - host, - supervisor, - trainee_type, - requirement_name_type, - times_completed, - expired_period, - new_expired_Period, - mostrecentcompleted_date, - comment, - snooze_date, - months_until_renewal - - ) - - - - - - select b.requirementname, - a.employeeid, - string_agg(a.unit,char(10)) as unit, - string_agg(a.category,char(10)) as category, - (select top 1 h.trackingflag from ehr_compliancedb.requirementspercategory h where h.requirementname = b.requirementname) as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate()) ) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) - - - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate()) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS Float) AS MonthsUntilRenewal - - - - from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b - where ( a.unit = b.unit or a.category = b.category ) - And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And b.requirementname = t.requirementname) - - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) - - - group by b.requirementname,a.employeeid - - - union - - select a.requirementname, - a.employeeid, - null as unit, - null as category, - 'No' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select ( datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate()) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS Float) AS MonthsUntilRenewal - - - from ehr_compliancedb.completiondates a - where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit - or k.category = h.category) And a.employeeid = k.employeeid ) - And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And a.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) - - group by a.requirementname,a.employeeid - - UNION - - -- Additional requirements for employees that have not completed training, but is required - select j.requirementname, - j.employeeid, - null as unit, - null as category, - 'Yes' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer - null as timesCompleted, - null as ExpiredPeriod, - null as NewExpirePeriod, - null as MostRecentDate, - '' as comment, - null as snooze_date, - null AS MonthsUntilRenewal - - - - from ehr_compliancedb.RequirementsPerEmployee j - Where j.requirementname not in (select z.requirementname from ehr_compliancedb.completiondates z where z.requirementname = j.requirementname - and z.employeeid = j.employeeid and z.date is not null) - And j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) - And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) - - group by j.requirementname,j.employeeid - - order by employeeid,requirementname, mostrecentcompleted_date desc - - - If @@Error <> 0 - GoTo Err_Proc - - - - - RETURN 0 - - -Err_Proc: - - RETURN 1 - - -END - -GO \ No newline at end of file diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.006-24.007.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.006-24.007.sql deleted file mode 100644 index 24134b431..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.006-24.007.sql +++ /dev/null @@ -1,349 +0,0 @@ --- Author: R. Blasa --- Created: 9-20-2024-2024 --- Description: Stored procedure program to create a static data set for Compliance Recent Test .sql - - - CREATE TABLE onprc_ehr_compliancedb.ComplianceRecentReport( - [rowid] [int] IDENTITY(1,1) NOT NULL, - [employeeid] varchar(300) NULL, - [requirementname] [varchar](4000) NULL, - [unit] [varchar](500) NULL, - [category] [varchar](500) NULL, - [trackingflag] [varchar](100) NULL, - [email] [varchar](500) NULL, - [lastname] [varchar](500) NULL, - [firstname] [varchar](500) NULL, - [host] [varchar](500) NULL, - [supervisor] [varchar](500) NULL, - [trainee_type] [varchar](500) NULL, - [times_completed] [smallint] NULL, - [expired_period] [smallint] NULL, - [new_expired_period] [smallint] NULL, - [mostrecentcompleted_date] [smalldatetime] NULL, - [comment] [varchar](4000) NULL, - [snooze_date] [smalldatetime] NULL, - [months_until_renewal] [FLOAT] NULL, - [requirement_name_type] [varchar](1000) NULL - - ) ON [PRIMARY] - GO - - --- Author: R. Blasa --- Created: 9-20-2024 - -/* -** -** Created by -** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from -** the ComplianceRecentTest.sql query -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.p_ComplianceRecentOverDueSoon_Process - - -AS - - - - ----- Reset Reporting table - Delete onprc_ehr_compliancedb.ComplianceRecentReport - - If @@Error <> 0 - GoTo Err_Proc - - - -BEGIN - - Insert into onprc_ehr_compliancedb.ComplianceRecentReport - ( - requirementname, - employeeid, - unit, - category, - trackingflag, - email, - lastname, - firstname, - host, - supervisor, - trainee_type, - requirement_name_type, - times_completed, - expired_period, - new_expired_Period, - mostrecentcompleted_date, - comment, - snooze_date, - months_until_renewal - - ) - - - - - select b.requirementname, - a.employeeid, - string_agg(a.unit,char(10)) as unit, - string_agg(a.category,char(10)) as category, - (select top 1 h.trackingflag from ehr_compliancedb.requirementspercategory h where h.requirementname = b.requirementname) as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) - - - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - - from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b - where ( a.unit = b.unit or a.category = b.category ) - And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And b.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) - - - group by b.requirementname,a.employeeid - - - union - - select a.requirementname, - a.employeeid, - null as unit, - null as category, - 'No' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - from ehr_compliancedb.completiondates a - where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit - or k.category = h.category) And a.employeeid = k.employeeid ) - And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And a.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) - - group by a.requirementname,a.employeeid - - UNION - - --- Training that was completed by as an employee training exemptions, and at least completed one, or more times - - select a.requirementname, - a.employeeid, - null as unit, - null as category, - 'No' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) ) - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS DECIMAL) AS MonthsUntilRenewal - - - from ehr_compliancedb.employeerequirementexemptions a - Where a.requirementname in (select z.requirementname from ehr_compliancedb.completiondates z where z.requirementname = a.requirementname - and z.employeeid = a.employeeid and z.date is not null) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) - - group by a.requirementname,a.employeeid - - UNION - - --- Additional requirements for employees that have not completed training, but is required - - select j.requirementname, - j.employeeid, - null as unit, - null as category, - 'Yes' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = j.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) - And yy.requirementname= j.requirementname and yy.employeeid= j.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) - And yy.requirementname= j.requirementname and yy.employeeid= j.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = j.requirementname and st.employeeid = j.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = j.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) ) - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod ) - - END AS DECIMAL) AS MonthsUntilRenewal - - - - - - from ehr_compliancedb.RequirementsPerEmployee j - Where j.requirementname not in (select z.requirementname from ehr_compliancedb.completiondates z where z.requirementname = j.requirementname - and z.employeeid = j.employeeid and z.date is not null) - And j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) - And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) - - group by j.requirementname,j.employeeid - - order by employeeid,requirementname, mostrecentcompleted_date desc - - - If @@Error <> 0 - GoTo Err_Proc - - - - - RETURN 0 - - -Err_Proc: - - RETURN 1 - - -END - -GO diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.007-24.008.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.007-24.008.sql deleted file mode 100644 index ea9b67efb..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.007-24.008.sql +++ /dev/null @@ -1,317 +0,0 @@ - - -EXEC core.fn_dropifexists 'p_ComplianceRecentOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE'; -GO - --- Author: R. Blasa --- Created: 9-20-2024 - -/* -** -** Created by -** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from -** the ComplianceRecentTest.sql query -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.p_ComplianceRecentOverDueSoon_Process - - -AS - - - - ----- Reset Reporting table - Delete onprc_ehr_compliancedb.ComplianceRecentReport - - If @@Error <> 0 - GoTo Err_Proc - - - -BEGIN - - Insert into onprc_ehr_compliancedb.ComplianceRecentReport - ( - requirementname, - employeeid, - unit, - category, - trackingflag, - email, - lastname, - firstname, - host, - supervisor, - trainee_type, - requirement_name_type, - times_completed, - expired_period, - new_expired_Period, - mostrecentcompleted_date, - comment, - snooze_date, - months_until_renewal - - ) - - - - - select b.requirementname, - a.employeeid, - string_agg(a.unit,char(10)) as unit, - string_agg(a.category,char(10)) as category, - string_agg(b.trackingflag,char(10)) as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) - - - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - - from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b - where ( a.unit = b.unit or a.category = b.category ) - And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And b.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) - - - group by b.requirementname,a.employeeid - - - union - - select a.requirementname, - a.employeeid, - null as unit, - null as category, - 'None' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - from ehr_compliancedb.completiondates a - where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit - or k.category = h.category) And a.employeeid = k.employeeid ) - And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And a.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) - - group by a.requirementname,a.employeeid - - UNION - - --- Training that was completed by as an employee training exemptions, and at least completed one, or more times - - select a.requirementname, - a.employeeid, - null as unit, - null as category, - 'No' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) ) - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS DECIMAL) AS MonthsUntilRenewal - - - from ehr_compliancedb.employeerequirementexemptions a - Where a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) - - group by a.requirementname,a.employeeid - - UNION - - --- Additional requirements for employees that have not completed training, but is required - - select j.requirementname, - j.employeeid, - null as unit, - null as category, - 'Yes' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = j.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) - And yy.requirementname= j.requirementname and yy.employeeid= j.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= j.requirementname and zz.employeeid= j.employeeid ) - And yy.requirementname= j.requirementname and yy.employeeid= j.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = j.requirementname and st.employeeid = j.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = j.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) ) - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod ) - - END AS DECIMAL) AS MonthsUntilRenewal - - - - from ehr_compliancedb.RequirementsPerEmployee j - Where j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) - And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) - - group by j.requirementname,j.employeeid - - order by employeeid,requirementname, mostrecentcompleted_date desc - - - If @@Error <> 0 - GoTo Err_Proc - - - - - RETURN 0 - - -Err_Proc: - - RETURN 1 - - -END - -GO diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.008-24.009.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.008-24.009.sql deleted file mode 100644 index 54bfb6df4..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.008-24.009.sql +++ /dev/null @@ -1,232 +0,0 @@ - - -EXEC core.fn_dropifexists 'p_ComplianceProcedureOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE'; -GO - --- Author: R. Blasa --- Created: 9-20-2024 - -/* -** -** Created by -** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from -** the ComplianceProcedureRecentTest.sql query -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process - - -AS - - - ----- Reset Reporting table - Delete onprc_ehr_compliancedb.ComplianceProcedureReport - - If @@Error <> 0 - GoTo Err_Proc - - - -BEGIN - - Insert into onprc_ehr_compliancedb.ComplianceProcedureReport - ( - requirementname, - employeeid, - unit, - category, - trackingflag, - email, - lastname, - firstname, - host, - supervisor, - trainee_type, - requirement_name_type, - times_completed, - expired_period, - new_expired_Period, - mostrecentcompleted_date, - comment, - snooze_date, - months_until_renewal - - ) - - - - - - select b.requirementname, - a.employeeid, - string_agg(a.unit,char(10)) as unit, - string_agg(a.category,char(10)) as category, - string_agg(b.trackingflag,char(10)) as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate()) ) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > ( datediff(month,max(pq.date), tt.reviewdate) ) ) - - - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate()) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS Float) AS MonthsUntilRenewal - - - - from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b - where ( a.unit = b.unit or a.category = b.category ) - And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And b.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) - - - group by b.requirementname,a.employeeid - - union - - select a.requirementname, - a.employeeid, - null as unit, - null as category, - 'None' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (tt.expireperiod) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) )) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.expireperiod) > (datediff(month,max(pq.date), tt.reviewdate) ) ) - - - ELSE ( select (tt.expireperiod) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - from ehr_compliancedb.completiondates a - where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit - or k.category = h.category) And a.employeeid = k.employeeid ) - And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And a.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) - - group by a.requirementname,a.employeeid - - union - - -- Additional requirements for employees that have not completed training, but is required - select j.requirementname, - j.employeeid, - null as unit, - null as category, - 'Yes' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer - null as timesCompleted, - null as ExpiredPeriod, - null as NewExpirePeriod, - null as MostRecentDate, - '' as comment, - null as snooze_date, - null AS MonthsUntilRenewal - - - - from ehr_compliancedb.RequirementsPerEmployee j - Where j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) - And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) - - group by j.requirementname,j.employeeid - - order by employeeid,requirementname, mostrecentcompleted_date desc - - - If @@Error <> 0 - GoTo Err_Proc - - - - - RETURN 0 - - -Err_Proc: - - RETURN 1 - - -END - -GO \ No newline at end of file diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.009-24.010.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.009-24.010.sql deleted file mode 100644 index 7d8b3cb9b..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.009-24.010.sql +++ /dev/null @@ -1,325 +0,0 @@ - -CREATE TABLE onprc_ehr_compliancedb.RequirementsPerEmployee -( - RowId INT IDENTITY(1,1) NOT NULL, - EmployeeId varchar(255) not null, - RequirementName varchar(255) not null, - CreatedBy USERID, - Created datetime, - ModifiedBy USERID, - Modified datetime, - trackingflag varchar(100) - - CONSTRAINT PK_RequirementsPerEmployeename PRIMARY KEY (RowId) -); -GO - -EXEC core.fn_dropifexists 'p_ComplianceRecentOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE'; -GO - --- Author: R. Blasa --- Created: 9-20-2024 - -/* -** -** Created by -** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from -** the ComplianceRecentTest.sql query -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.p_ComplianceRecentOverDueSoon_Process - - -AS - - - - ----- Reset Reporting table - Delete onprc_ehr_compliancedb.ComplianceRecentReport - - If @@Error <> 0 - GoTo Err_Proc - - - -BEGIN - - Insert into onprc_ehr_compliancedb.ComplianceRecentReport - ( - requirementname, - employeeid, - unit, - category, - trackingflag, - email, - lastname, - firstname, - host, - supervisor, - trainee_type, - requirement_name_type, - times_completed, - expired_period, - new_expired_Period, - mostrecentcompleted_date, - comment, - snooze_date, - months_until_renewal - - ) - - - - - select b.requirementname, - a.employeeid, - string_agg(a.unit,char(10)) as unit, - string_agg(a.category,char(10)) as category, - string_agg(b.trackingflag,char(10)) as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) - - - - - ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - - from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b - where ( a.unit = b.unit or a.category = b.category ) - And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And b.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) - - - group by b.requirementname,a.employeeid - - - union - - select a.requirementname, - a.employeeid, - null as unit, - null as category, - 'None' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) - - - ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - from ehr_compliancedb.completiondates a - where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit - or k.category = h.category) And a.employeeid = k.employeeid ) - And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And a.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) - - group by a.requirementname,a.employeeid - - UNION - - --- Training that was completed by as an employee training exemptions, and at least completed one, or more times - - select a.requirementname, - a.employeeid, - null as unit, - null as category, - 'No' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN - - ( select ( datediff(month,max(pq.date), tt.reviewdate) - (datediff(month,max(pq.date), getdate())) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) - - - ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS DECIMAL) AS MonthsUntilRenewal - - - from ehr_compliancedb.employeerequirementexemptions a - Where a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) - - group by a.requirementname,a.employeeid - - UNION - - --- Additional requirements for employees that have not completed training, but is required - - select j.requirementname, - j.employeeid, - null as unit, - null as category, - string_agg(j.trackingflag,char(10)) as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer - 0 as timesCompleted, - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = j.requirementname) as ExpiredPeriod, - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - null as MostRecentDate, - '' as comment, - null as snooze_date, - CAST( - CASE - - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = j.requirementname and st.employeeid = j.employeeid ) IS NULL then 0 - WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = j.requirementname group by tt.expireperiod ) = 0 then Null - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) - - - ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - from onprc_ehr_compliancedb.RequirementsPerEmployee j - Where j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) - And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) - And j.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit - or k.category = h.category) And j.employeeid = k.employeeid ) - And j.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where j.employeeid = t.employeeid And j.requirementname = t.requirementname) - And j.requirementname not in (select distinct k.requirementname from ehr_compliancedb.completiondates k Where k.employeeid = j.employeeid) - - group by j.requirementname,j.employeeid - - order by employeeid,requirementname, mostrecentcompleted_date desc - - - If @@Error <> 0 - GoTo Err_Proc - - - - - RETURN 0 - - -Err_Proc: - - RETURN 1 - - -END - -GO diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.010-24.011.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.010-24.011.sql deleted file mode 100644 index 8452ee8c8..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.010-24.011.sql +++ /dev/null @@ -1,251 +0,0 @@ - - -EXEC core.fn_dropifexists 'p_ComplianceProcedureOverDueSoon_Process', 'onprc_ehr_compliancedb', 'PROCEDURE'; -GO - --- Author: R. Blasa --- Created: 9-20-2024 - -/* -** -** Created by -** Blasa 9-20-2024 Created a storedprocedure to create a static set of data from -** the ComplianceProcedureRecentTest.sql query -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.p_ComplianceProcedureOverDueSoon_Process - - -AS - - - ----- Reset Reporting table - Delete onprc_ehr_compliancedb.ComplianceProcedureReport - - If @@Error <> 0 - GoTo Err_Proc - - - -BEGIN - - Insert into onprc_ehr_compliancedb.ComplianceProcedureReport - ( - requirementname, - employeeid, - unit, - category, - trackingflag, - email, - lastname, - firstname, - host, - supervisor, - trainee_type, - requirement_name_type, - times_completed, - expired_period, - new_expired_Period, - mostrecentcompleted_date, - comment, - snooze_date, - months_until_renewal - - ) - - - - - - select b.requirementname, - a.employeeid, - string_agg(a.unit,char(10)) as unit, - string_agg(a.category,char(10)) as category, - string_agg(b.trackingflag,char(10)) as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = b.requirementname) as requirement_type, - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as times_Completed, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = b.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) as mostrecentcompleted_date, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= b.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= b.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = b.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = b.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate()) ) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) - - - ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate()) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = b.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS Float) AS MonthsUntilRenewal - - - - from ehr_Compliancedb.employeeperunit a ,ehr_compliancedb.requirementspercategory b - where ( a.unit = b.unit or a.category = b.category ) - And b.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And b.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And b.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = b.requirementname And q.dateDisabled is null ) - - - group by b.requirementname,a.employeeid - - union - - select a.requirementname, - a.employeeid, - null as unit, - null as category, - 'None' as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = a.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = a.requirementname) as requirement_type, ----- type trainee, or trainer - - - (select count(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as timesCompleted, - - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = a.requirementname) as ExpiredPeriod, - - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - - (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) as MostRecentDate, - - (Select distinct string_agg(yy.comment, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as comment, - - (Select distinct string_agg(yy.snooze_date, char(10)) from ehr_compliancedb.completiondates yy where yy.date in (select max(zz.date) from ehr_compliancedb.completiondates zz where zz.requirementname= a.requirementname and zz.employeeid= a.employeeid ) - And yy.requirementname= a.requirementname and yy.employeeid= a.employeeid ) as snooze_date, - - CAST( - CASE - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = a.requirementname and st.employeeid = a.employeeid ) IS NULL then 0 - WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = a.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) - - - ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = a.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = a.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - from ehr_compliancedb.completiondates a - where a.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit - or k.category = h.category) And a.employeeid = k.employeeid ) - And a.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where a.employeeid = t.employeeid - And a.requirementname = t.requirementname) - And a.employeeid in (select p.employeeid from ehr_compliancedb.employees p where a.employeeid = p.employeeid And p.enddate is null) - And a.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = a.requirementname And q.dateDisabled is null ) - - group by a.requirementname,a.employeeid - - union - - -- Additional requirements for employees that have not completed training, but is required - select j.requirementname, - j.employeeid, - null as unit, - null as category, - string_agg(j.trackingflag,char(10)) as trackingflag, - (select h.email from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as email, - (select h.lastname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as lastname, - (select h.firstname from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as firstname, - (select h.majorudds from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as host, - (select h.supervisor from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as supervisor, - (select h.type from ehr_compliancedb.employees h where h.employeeid = j.employeeid) as trainee_type, ----- type trainee, or trainer - (select h.type from ehr_compliancedb.Requirements h where h.requirementname = j.requirementname) as requirement_type, ----- type trainee, or trainer - 0 as timesCompleted, - (select k.expireperiod from ehr_compliancedb.Requirements k where k.requirementname = j.requirementname) as ExpiredPeriod, - ( select (datediff(month,max(pq.date), tt.reviewdate) )from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (COALESCE(tt.expireperiod,0)) > (datediff(month,max(pq.date), tt.reviewdate)) and (tt.reviewdate is not null) ) as NewExpirePeriod, - null as MostRecentDate, - '' as comment, - null as snooze_date, - CAST( - CASE - - WHEN (select max(st.date) from ehr_compliancedb.completiondates st where st.requirementname = j.requirementname and st.employeeid = j.employeeid ) IS NULL then 0 - WHEN ( select (COALESCE(tt.expireperiod,0)) from ehr_compliancedb.requirements tt where tt.requirementname = j.requirementname group by tt.expireperiod ) = 0 then Null - - - WHEN ( select count(*) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) > 0 THEN - - ( select (datediff(month,max(pq.date), tt.reviewdate) - ( datediff(month,max(pq.date), getdate())) ) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod, tt.reviewdate - having (tt.reviewdate) > (max(pq.date)) ) - - - ELSE ( select (COALESCE(tt.expireperiod,0)) - ( datediff(month,max(pq.date), getdate())) from ehr_compliancedb.requirements tt, ehr_compliancedb.completiondates pq where tt.requirementname = j.requirementname and pq.requirementname = tt.requirementname and pq.employeeid = j.employeeid group by tt.expireperiod ) - - END AS FLOAT) AS MonthsUntilRenewal - - - - from onprc_ehr_compliancedb.RequirementsPerEmployee j - Where j.employeeid in (select p.employeeid from ehr_compliancedb.employees p where j.employeeid = p.employeeid And p.enddate is null) - And j.requirementname in (select q.requirementname from ehr_compliancedb.Requirements q where q.requirementname = j.requirementname And q.dateDisabled is null ) - And j.requirementname not in (select distinct h.requirementname from ehr_compliancedb.employeeperunit k, ehr_compliancedb.requirementspercategory h Where (k.unit = h.unit - or k.category = h.category) And j.employeeid = k.employeeid ) - And j.requirementname not in (select distinct t.requirementname from ehr_compliancedb.employeerequirementexemptions t Where j.employeeid = t.employeeid And j.requirementname = t.requirementname) - And j.requirementname not in (select distinct k.requirementname from ehr_compliancedb.completiondates k Where k.employeeid = j.employeeid) - - group by j.requirementname,j.employeeid - - order by employeeid,requirementname, mostrecentcompleted_date desc - - - If @@Error <> 0 - GoTo Err_Proc - - - - - RETURN 0 - - -Err_Proc: - - RETURN 1 - - -END - -GO \ No newline at end of file diff --git a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.011-24.012.sql b/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.011-24.012.sql deleted file mode 100644 index 2c97c39ae..000000000 --- a/ONPRC_EHR_ComplianceDB/resources/schemas/dbscripts/sqlserver/onprc_ehr_compliancedb-24.011-24.012.sql +++ /dev/null @@ -1,65 +0,0 @@ -EXEC core.fn_dropifexists 'p_ComplianceAccesscontainerUpdate', 'onprc_ehr_compliancedb', 'PROCEDURE'; -GO - --- Author: R. Blasa --- Created: 10-2-2024 - -/* -** -** Created by -** Blasa 9-5-2025 Storedprocedure to update Compliance Access contaimer values and update -** Completion date records -** . -** -** -** -*/ - -CREATE Procedure onprc_ehr_compliancedb.p_ComplianceAccesscontainerUpdate - - - AS - - - -BEGIN - - ------ Update container value and include as part of the main Compliance module - -If exists(Select * from ehr_Compliancedb.CompletionDates ss where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ) -BEGIN - -Update ss -set ss.container = 'CD170458-C55F-102F-9907-5107380A54BE' ----Compliance folder on Prime Production - - from ehr_Compliancedb.CompletionDates ss -Where ss.container = 'F1C05E2D-618D-103D-ABC9-9814909BFFCD' ---Compliance Access folder on Prime Production - - If @@Error <> 0 - GoTo Err_Proc - -END - -ELSE ------ No new entries exit -BEGIN - -GOTO No_Records - -END - - - - -No_Records: - - RETURN 0 - - -Err_Proc: - -------Error Generated, Transfer process stopped - RETURN 1 - - -END - -GO \ No newline at end of file diff --git a/ONPRC_EHR_ComplianceDB/src/org/labkey/ONPRCEHR_ComplianceDB/ONPRC_EHR_ComplianceDBModule.java b/ONPRC_EHR_ComplianceDB/src/org/labkey/ONPRCEHR_ComplianceDB/ONPRC_EHR_ComplianceDBModule.java index e03bd4352..adc19a67c 100644 --- a/ONPRC_EHR_ComplianceDB/src/org/labkey/ONPRCEHR_ComplianceDB/ONPRC_EHR_ComplianceDBModule.java +++ b/ONPRC_EHR_ComplianceDB/src/org/labkey/ONPRCEHR_ComplianceDB/ONPRC_EHR_ComplianceDBModule.java @@ -55,8 +55,8 @@ public String getName() @Override public Double getSchemaVersion() { - return 25.001; - } //Modified: 9-8-025 + return 26.000; + } @Override public @NotNull Collection getSchemaNames() @@ -64,12 +64,6 @@ public Double getSchemaVersion() return Collections.singleton(ONPRC_EHR_ComplianceDBSchema.NAME); } - @Override - public boolean hasScripts() - { - return true; - } - @Override protected void registerSchemas() { diff --git a/extscheduler/module.properties b/extscheduler/module.properties index cfa1b282e..85ac54a44 100644 --- a/extscheduler/module.properties +++ b/extscheduler/module.properties @@ -1,5 +1,5 @@ Name: extscheduler ModuleClass: org.labkey.extscheduler.ExtSchedulerModule -SupportedDatabases: mssql +SupportedDatabases: mssql, pgsql RequiredServerVersion: 15.2 -ManageVersion: false +ManageVersion: true diff --git a/extscheduler/resources/schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql b/extscheduler/resources/schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql new file mode 100644 index 000000000..ea7ee6b7c --- /dev/null +++ b/extscheduler/resources/schemas/dbscripts/postgresql/extscheduler-0.000-25.000.sql @@ -0,0 +1,215 @@ +CREATE SCHEMA extscheduler; + +CREATE TABLE extscheduler.Resources +( + Id SERIAL NOT NULL, + Name VARCHAR(255) NOT NULL, + Color VARCHAR(20), + Room VARCHAR(255), + Bldg VARCHAR(255), + Instance VARCHAR(50), + + Container ENTITYID NOT NULL, + CreatedBy USERID, + Created TIMESTAMP, + ModifiedBy USERID, + Modified TIMESTAMP, + + CONSTRAINT PK_resources PRIMARY KEY (Id), + CONSTRAINT UQ_resources_ContainerName UNIQUE (Container, Name) +); + +CREATE TABLE extscheduler.Events +( + Id SERIAL NOT NULL, + ResourceId INT NOT NULL, + Name VARCHAR(255), + StartDate TIMESTAMP NOT NULL, + EndDate TIMESTAMP NOT NULL, + UserId USERID NOT NULL, + Alias VARCHAR(25), + Quantity INT, + Comments VARCHAR(4000), + + Container ENTITYID NOT NULL, + CreatedBy USERID, + Created TIMESTAMP, + ModifiedBy USERID, + Modified TIMESTAMP, + + CONSTRAINT PK_events PRIMARY KEY (Id), + CONSTRAINT FK_events_ResourceId FOREIGN KEY (ResourceId) REFERENCES extscheduler.Resources(Id), + CONSTRAINT CHK_event_DateRangeValid CHECK (StartDate <= EndDate) +); + +CREATE OR REPLACE FUNCTION extscheduler.tr_overlappingdateranges() RETURNS TRIGGER AS $$ +BEGIN + IF EXISTS( + SELECT 1 FROM extscheduler.events R + LEFT JOIN ( + SELECT ObjectId, Value FROM prop.Properties + JOIN prop.PropertySets ON PropertySets."Set" = Properties."Set" + WHERE Name = 'ExtSchedulerAllowEventOverlap' + ) P ON R.Container = P.ObjectId + WHERE (P.Value IS NULL OR P.Value = 'false') AND ( + (R.Container = NEW.Container AND R.ResourceId = NEW.ResourceId AND R.StartDate < NEW.EndDate AND NEW.StartDate < R.EndDate) + AND NOT (R.Id = NEW.Id) + ) + ) THEN + RAISE EXCEPTION 'Start/End date ranges may not overlap for the same resource.'; + END IF; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER TR_OverlappingDateRanges + BEFORE INSERT OR UPDATE ON extscheduler.events + FOR EACH ROW + EXECUTE FUNCTION extscheduler.tr_overlappingdateranges(); + +CREATE TABLE extScheduler.dateParts +( + date TIMESTAMP, + dateOnly DATE, + DayOfYear INT, + DayofMonth INT, + DayofWeek INT, + DayName VARCHAR(20), + WeekofMonth INT, + WeekofYear INT, + Month INT, + year INT +); + +INSERT INTO extScheduler.DateParts + (Date, + dateonly, + DayOfYear, + DayofMonth, + DayofWeek, + DayName, + WeekofMonth, + WeekofYear, + Month, + year) +SELECT + i.NDate, + CAST(i.NDate AS DATE) AS dateOnly, + CAST(EXTRACT(DOY FROM i.NDate) AS INTEGER) AS DayOfYear, + CAST(EXTRACT(DAY FROM i.NDate) AS INTEGER) AS DayOfMonth, + CAST(EXTRACT(DOW FROM i.NDate) AS INTEGER) + 1 AS DayOfWeek, + CAST(EXTRACT(DAY FROM i.NDate) AS VARCHAR(20)) AS DayName, + (CAST(EXTRACT(DAY FROM i.NDate) AS INTEGER) / 7) AS WeekofMonth, + CAST(EXTRACT(WEEK FROM i.NDate) AS INTEGER) AS WeekofYear, + CAST(EXTRACT(MONTH FROM i.NDate) AS INTEGER) AS Month, + CAST(EXTRACT(YEAR FROM i.NDate) AS INTEGER) AS Year +FROM (SELECT CAST('2020-05-01' AS TIMESTAMP) + (i.value * INTERVAL '1 day') AS NDate FROM ldk.integers i) i +WHERE i.NDate <= '2021-04-20'; + +CREATE OR REPLACE PROCEDURE extscheduler.extBlockOutEvening( + _Month INTEGER, + _ResourceID INTEGER +) +LANGUAGE plpgsql +AS $$ +BEGIN + INSERT INTO extscheduler.Events + ( + ResourceId, + Name, + StartDate, + EndDate, + UserId, + Container, + CreatedBy, + Created, + Quantity, + Comments + ) + SELECT + _ResourceID, + 'No Covid-19 Testing', + c.date + INTERVAL '1530 hours', -- TODO: Claude flagged this as a likely bug (also in SQL Server). This is 63.75 days. + c.date + INTERVAL '19 hours', + 1003, + '5C3C9FF8-6BCF-1038-930A-7D62F3A605B4', + 1003, + NOW(), + 1, + 'Insert by ISE' + FROM extscheduler.dateParts c + WHERE c.dayofWeek IN (2, 6) AND c.Month = _Month; +END; +$$; + +CREATE OR REPLACE PROCEDURE extscheduler.extBlockOutMorning( + _Month INTEGER, + _ResourceID INTEGER +) +LANGUAGE plpgsql +AS $$ +BEGIN + INSERT INTO extscheduler.Events + ( + ResourceId, + Name, + StartDate, + EndDate, + UserId, + Container, + CreatedBy, + Created, + Quantity, + Comments + ) + SELECT + _ResourceID, + 'No Covid-19 Testing', + c.date + INTERVAL '7 hours', + c.date + INTERVAL '8 hours', + 1003, + '5C3C9FF8-6BCF-1038-930A-7D62F3A605B4', + 1003, + NOW(), + 1, + 'Insert by ISE' + FROM extscheduler.dateParts c + WHERE c.dayofWeek IN (2, 6) AND c.Month = _Month; +END; +$$; + +CREATE OR REPLACE PROCEDURE extscheduler.extBlockOutDays( + _Month INTEGER, + _ResourceID INTEGER +) +LANGUAGE plpgsql +AS $$ +BEGIN + INSERT INTO extscheduler.Events + ( + ResourceId, + Name, + StartDate, + EndDate, + UserId, + Container, + CreatedBy, + Created, + Quantity, + Comments + ) + SELECT + _ResourceID, + 'No Covid-19 Testing', + c.date + INTERVAL '7 hours', + c.date + INTERVAL '19 hours', + 1003, + '5C3C9FF8-6BCF-1038-930A-7D62F3A605B4', + 1003, + NOW(), + 1, + 'Insert by ISE' + FROM extscheduler.dateParts c + WHERE c.dayofWeek IN (1, 3, 4, 5, 7) AND c.Month = _Month; +END; +$$; diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-0.000-25.000.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-0.000-25.000.sql new file mode 100644 index 000000000..e665d02d7 --- /dev/null +++ b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-0.000-25.000.sql @@ -0,0 +1,568 @@ +CREATE SCHEMA extscheduler; +GO + +CREATE TABLE extscheduler.Resources +( + Id INT IDENTITY(1,1) NOT NULL, + Name VARCHAR(255) NOT NULL, + Color VARCHAR(20), + + Container ENTITYID NOT NULL, + CreatedBy USERID, + Created DATETIME, + ModifiedBy USERID, + Modified DATETIME, + + CONSTRAINT PK_resources PRIMARY KEY (Id), + CONSTRAINT UQ_resources_ContainerName UNIQUE (Container, Name) +); + +CREATE TABLE extscheduler.Events +( + Id INT IDENTITY(1,1) NOT NULL, + ResourceId INT NOT NULL, + Name VARCHAR(255) NOT NULL, + StartDate DATETIME NOT NULL, + EndDate DATETIME NOT NULL, + UserId USERID NOT NULL, + + Container ENTITYID NOT NULL, + CreatedBy USERID, + Created DATETIME, + ModifiedBy USERID, + Modified DATETIME, + + CONSTRAINT PK_events PRIMARY KEY (Id), + CONSTRAINT FK_events_ResourceId FOREIGN KEY (ResourceId) REFERENCES extscheduler.resources(Id), + CONSTRAINT UQ_events_ContainerResourceName UNIQUE (Container, ResourceId, Name) +); + +/* 15.xxx SQL scripts */ + +ALTER TABLE extscheduler.Resources Add Room VARCHAR(255); +ALTER TABLE extscheduler.Resources Add Bldg VARCHAR (255); + + +ALTER TABLE extscheduler.Events ADD Alias VARCHAR(25); + +CREATE TABLE extscheduler.users +( + Id INT IDENTITY(1,1) NOT NULL, + PrimeUserID USERID NOT NULL, + FirstName VARCHAR(255) NOT NULL, + LastName Varchar(255) NOT NULL, + Email VARCHAR(255) NOT NULL, + Phone VARCHAR(255), + Department VARCHAR(255), + Lab_FirstName VARCHAR(255), + Lab_LastName VARCHAR(255), + FiscalAuthority_Name VARCHAR(255), + FiscalAuthority_Phone VARCHAR(255), + SecurityLevel VARCHAR(255), + Container ENTITYID NOT NULL, + CreatedBy USERID, + Created DATETIME, + ModifiedBy USERID, + Modified DATETIME, + + CONSTRAINT PK_users PRIMARY KEY (Id), + CONSTRAINT FK_users_PrimeUserID FOREIGN KEY (PrimeUserID) REFERENCES core.Usersdata(UserId), + CONSTRAINT UQ_users_ContainerPrimeUserID UNIQUE (Container, PrimeUserID) +); + +DROP TABLE extscheduler.users; + + +CREATE TABLE extscheduler.users +( + Id INT IDENTITY(1,1) NOT NULL, + PrimeUserID USERID NOT NULL, + FirstName VARCHAR(255) NOT NULL, + LastName Varchar(255) NOT NULL, + Email VARCHAR(255) NOT NULL, + Phone VARCHAR(255), + Department VARCHAR(255), + Lab_FirstName VARCHAR(255), + Lab_LastName VARCHAR(255), + FiscalAuthority_Name VARCHAR(255), + FiscalAuthority_Phone VARCHAR(255), + SecurityLevel VARCHAR(255), + Container ENTITYID NOT NULL, + CreatedBy USERID, + Created DATETIME, + ModifiedBy USERID, + Modified DATETIME, + + CONSTRAINT PK_users PRIMARY KEY (Id), + CONSTRAINT FK_users_PrimeUserID FOREIGN KEY (PrimeUserID) REFERENCES core.Usersdata(UserId), + CONSTRAINT UQ_users_ContainerPrimeUserID UNIQUE (Container, PrimeUserID) +); + +ALTER TABLE extscheduler.events DROP CONSTRAINT UQ_events_ContainerResourceName; +ALTER TABLE extscheduler.events ADD CONSTRAINT CHK_event_DateRangeValid CHECK (StartDate <= EndDate); + +GO + +CREATE TRIGGER TR_OverlappingDateRanges ON extscheduler.events FOR INSERT, UPDATE AS +BEGIN + IF EXISTS( + SELECT 1 FROM extscheduler.events R + INNER JOIN inserted I + ON ( + (R.Container = I.Container AND R.ResourceId = I.ResourceId AND R.StartDate < I.EndDate AND I.StartDate < R.EndDate) + AND NOT (R.Container = I.Container AND R.ResourceId = I.ResourceId AND R.StartDate = I.StartDate AND I.EndDate = R.EndDate) + ) + ) + BEGIN + RAISERROR('Start/End date ranges may not overlap for the same resource.', 16, 1) + ROLLBACK + END +END + +GO + +ALTER TABLE extscheduler.events ALTER COLUMN Name VARCHAR(255) NULL; + +DROP TABLE extscheduler.users; + +GO + +ALTER TRIGGER extscheduler.TR_OverlappingDateRanges ON extscheduler.Events FOR INSERT, UPDATE AS +BEGIN + IF EXISTS( + SELECT 1 FROM extscheduler.events R + INNER JOIN inserted I + ON ( + (R.Container = I.Container AND R.ResourceId = I.ResourceId AND R.StartDate < I.EndDate AND I.StartDate < R.EndDate) + AND NOT (R.Id = I.Id) + ) + ) + BEGIN + RAISERROR('Start/End date ranges may not overlap for the same resource.', 16, 1) + ROLLBACK + END +END + +GO + +ALTER TABLE extscheduler.Events ADD Quantity INT; + +ALTER TABLE extscheduler.Events ADD Comments VARCHAR(255); + +GO + +ALTER TRIGGER extscheduler.TR_OverlappingDateRanges ON extscheduler.Events FOR INSERT, UPDATE AS +BEGIN + IF EXISTS( + SELECT 1 FROM extscheduler.events R + LEFT JOIN ( + SELECT ObjectId, Value FROM prop.Properties + JOIN prop.PropertySets ON PropertySets."Set" = Properties."Set" + WHERE Name = 'ExtSchedulerAllowEventOverlap' + ) P ON R.Container = P.ObjectId + INNER JOIN inserted I + ON (P.Value IS NULL OR P.Value = 'false') AND ( + (R.Container = I.Container AND R.ResourceId = I.ResourceId AND R.StartDate < I.EndDate AND I.StartDate < R.EndDate) + AND NOT (R.Id = I.Id) + ) + ) + BEGIN + RAISERROR('Start/End date ranges may not overlap for the same resource.', 16, 1) + ROLLBACK + END +END + +GO + +/* 20.xxx SQL scripts */ + +/* +Created: 2020-05-07 +Created by jonesga +Purpose: Update of Comments field of scheduler per user request + +*/ +ALTER TABLE extscheduler.Events ALTER COLUMN Comments NVARCHAR(4000); + +/* +Created: 2020-05-07 +Created by jonesga +Purpose: Dataset to mimic DateRange from Labkey for SCheduler actionin SQL + +*/ +EXEC core.fn_dropifexists 'DateParts','extScheduler','TABLE'; +GO + +CREATE TABLE extScheduler.dateParts +(date datetime, +dateOnly datetime, +DayOfYear int, +DayofMonth int, +DayofWeek int, +DayName varchar(20), + +WeekofMonth int, +WeekofYear int, + Month int, + year int) + +Go + +Insert into extScheduler.DateParts + (Date, + dateonly, + DayOfYear, + DayofMonth, + DayofWeek, + DayName, + WeekofMonth, + WeekofYear, + Month, + year) +Select + + i.NDate, + CAST(i.Ndate as date) as dateOnly, + cast(datepart(dy,i.Ndate) as integer) as DayOfYear, + cast(datepart(dd,i.Ndate) as integer) as DayOfMonth, + cast(datepart(dw,i.Ndate) as integer) as DayOfWeek, + cast(dateName(dd,i.Ndate) as VarChar(20)) as DayName, + (cast(datepart(dd,i.Ndate) as integer)/ 7) as WeekofMonth, + cast(datepart(wk,i.Ndate) as integer) as WeekofYear, + cast(datepart(mm,i.Ndate) as integer) as Month, + cast(datepart(yyyy,i.Ndate) as integer) as Year +FROM (SELECT DateAdd(dd, i.value, '5/1/2020') as NDate FROM ldk.integers i)i +Where i.nDate <= '4/20/2021' + +-- ================================================ +-- Template generated from Template Explorer using: +-- Create Procedure (New Menu).SQL +-- +-- Use the Specify Values for Template Parameters +-- command (Ctrl-Shift-M) to fill in the parameter +-- values below. +-- +-- This block of comments will not be included in +-- the definition of the procedure. +-- ================================================ +-- ============================================= +-- Author: jonesga@ohsu.edu +-- Create date: 2020-05-13 +-- Description: PRocedure to Block out Scheduling for Covid19 testing for 3:30 to 7 PM on Monday and Friday +-- ============================================= +EXEC core.fn_dropifexists 'extBlockOutEvening', 'extscheduler', 'PROCEDURE' +GO + +CREATE PROCEDURE extscheduler.extBlockOutEvening + -- Add the parameters for the stored procedure here + @Month INTEGER, @ResourceID INTEGER +AS +BEGIN + + INSERT INTO [extscheduler].[Events] + ([ResourceId] + ,[Name] + ,[StartDate] + ,[EndDate] + ,[UserId] + ,[Container] + ,[CreatedBy] + ,[Created] + ,[Quantity] + ,[Comments]) + + SELECT @ResourceID + ,'No Covid-19 Testing' + ,DateAdd(hh,1530,c.date) as StartDate + ,DateAdd(hh,19,c.date) as EndDate + ,1003 + ,'5C3C9FF8-6BCF-1038-930A-7D62F3A605B4' + ,1003 + ,GetDate() + ,1 + ,'Insert by ISE' + FROM [Labkey].[extscheduler].[dateParts] c + where c.dayofWeek in (2,6) and c.Month = @Month +--Days of Week start with Sunday + + + +END +GO + +/****** Object: StoredProcedure [extscheduler].[extBlockOutMorning] Script Date: 5/13/2020 6:10:00 AM ******/ +-- ================================================ +-- Template generated from Template Explorer using: +-- Create Procedure (New Menu).SQL +-- +-- Use the Specify Values for Template Parameters +-- command (Ctrl-Shift-M) to fill in the parameter +-- values below. +-- +-- This block of comments will not be included in +-- the definition of the procedure. +-- ================================================ +-- ============================================= +-- Author: jonesga@ohsu.edu +-- Create date: 2020-05-13 +-- Description: PRocedure to Block out Scheduling for Covid19 testing for 7 to 8 on Monday and Friday +-- ============================================= +EXEC core.fn_dropifexists 'extBlockOutMorning', 'extscheduler', 'PROCEDURE' +GO + +CREATE PROCEDURE [extscheduler].[extBlockOutMorning] + -- Add the parameters for the stored procedure here + @Month INTEGER, @ResourceID INTEGER +AS +BEGIN + + INSERT INTO [extscheduler].[Events] + ([ResourceId] + ,[Name] + ,[StartDate] + ,[EndDate] + ,[UserId] + ,[Container] + ,[CreatedBy] + ,[Created] + ,[Quantity] + ,[Comments]) + + SELECT @ResourceID + ,'No Covid-19 Testing' + ,DateAdd(hh,7,c.date) as StartDate + ,DateAdd(hh,8,c.date) as EndDate + ,1003 + ,'5C3C9FF8-6BCF-1038-930A-7D62F3A605B4' + ,1003 + ,GetDate() + ,1 + ,'Insert by ISE' + FROM [Labkey].[extscheduler].[dateParts] c + where c.dayofWeek in (2,6) and c.Month = @Month +--Days of Week start with Sunday + +END + +GO + +-- /****** Object: StoredProcedure [extscheduler].[extBlockOutDays] Script Date: 5/13/2020 6:12:06 AM ******/ +-- ================================================ +-- Template generated from Template Explorer using: +-- Create Procedure (New Menu).SQL +-- +-- Use the Specify Values for Template Parameters +-- command (Ctrl-Shift-M) to fill in the parameter +-- values below. +-- +-- This block of comments will not be included in +-- the definition of the procedure. +-- ================================================ +-- ============================================= +-- Author: jonesga@ohsu.edu +-- Create date: 2020-05-13 +-- Description: PRocedure to Block out Scheduling for Covid19 testing for all days except Monday and Friday +-- ============================================= +EXEC core.fn_dropifexists 'extBlockOutDays', 'extscheduler', 'PROCEDURE' +GO + +CREATE PROCEDURE [extscheduler].[extBlockOutDays] + -- Add the parameters for the stored procedure here + @Month INTEGER, @ResourceID INTEGER +AS +BEGIN + + INSERT INTO [extscheduler].[Events] + ([ResourceId] + ,[Name] + ,[StartDate] + ,[EndDate] + ,[UserId] + ,[Container] + ,[CreatedBy] + ,[Created] + ,[Quantity] + ,[Comments]) + + SELECT @ResourceID + ,'No Covid-19 Testing' + ,DateAdd(hh,7,c.date) as StartDate + ,DateAdd(hh,19,c.date) as EndDate + ,1003 + ,'5C3C9FF8-6BCF-1038-930A-7D62F3A605B4' + ,1003 + ,GetDate() + ,1 + ,'Insert by ISE' + FROM [Labkey].[extscheduler].[dateParts] c + where c.dayofWeek in (1,3,4,5,7) and c.Month = @Month +--Days of Week start with Sunday + +END + +GO + +EXEC core.fn_dropifexists 'vw_Covid19Research', 'extScheduler', 'VIEW', NULL; +GO + +CREATE VIEW extScheduler.vw_Covid19Research AS +SELECT extscheduler.Events.Id AS SChedulerID, extscheduler.Events.ResourceId, extscheduler.Resources.Name AS ResourceName, extscheduler.Events.Name, extscheduler.Events.StartDate, extscheduler.Events.UserId, + extscheduler.Events.CreatedBy, extscheduler.Events.Created, extscheduler.Events.Quantity, core.UsersData.IM AS EmployeeID +FROM extscheduler.Events LEFT OUTER JOIN + core.UsersData ON extscheduler.Events.UserId = core.UsersData.UserId LEFT OUTER JOIN + extscheduler.Resources ON extscheduler.Events.ResourceId = extscheduler.Resources.Id +WHERE (extscheduler.Events.ResourceId = 67); + +GO + +EXEC core.fn_dropifexists 'vw_Covid19DCMSchedule', 'extScheduler', 'VIEW', NULL; +GO + +CREATE VIEW extScheduler.vw_Covid19DCMSchedule AS +SELECT extscheduler.Events.Id AS SChedulerID, extscheduler.Events.ResourceId, extscheduler.Resources.Name AS ResourceName, extscheduler.Events.Name, extscheduler.Events.StartDate, extscheduler.Events.UserId, + extscheduler.Events.CreatedBy, extscheduler.Events.Created, extscheduler.Events.Quantity, core.UsersData.IM AS EmployeeID + FROM extscheduler.Events LEFT OUTER JOIN + core.UsersData ON extscheduler.Events.UserId = core.UsersData.UserId LEFT OUTER JOIN + extscheduler.Resources ON extscheduler.Events.ResourceId = extscheduler.Resources.Id + WHERE (extscheduler.Resources.Name LIKE 'DCM%'); + +GO + +/****** Object: Table [list].[c10437d746_covid19testing] Script Date: 9/16/2020 9:19:28 AM ******/ +EXEC core.fn_dropifexists 'Covid19Testing', 'extScheduler', 'TABLE', NULL; +GO + +CREATE TABLE [extScheduler].[Covid19Testing]( + [container] [dbo].[ENTITYID] NOT NULL, + [entityId] [dbo].[ENTITYID] NOT NULL, + [lastIndexed] [datetime] NULL, + [createdBy] [int] NULL, + [modified] [datetime] NULL, + [modifiedBy] [int] NULL, + [created] [datetime] NULL, + [Key] [int] IDENTITY(1,1) NOT NULL, + [SchedulerID] [int] NULL, + [ResourceID] [int] NULL, + [UserName] [nvarchar](4000) NULL, + [UserID] [int] NULL, + [EmployeeID] [nvarchar](4000) NULL, + [ScheduledDate] [datetime] NULL, + [ScheduledTime] [datetime] NULL, + [Create] [datetime] NULL, + [SampleDate] [nvarchar](4000) NULL, + [CreatedB] [nvarchar](4000) NULL, + [ComplianceUpdated] [bit] NULL, + CONSTRAINT [covid19testing_pk] PRIMARY KEY CLUSTERED +( +[Key] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) ON [PRIMARY] + GO + +/****** Object: Table [list].[c10437d746_covid19testing] Script Date: 9/16/2020 9:19:28 AM ******/ +EXEC core.fn_dropifexists 'Covid19Testing', 'extScheduler', 'TABLE', NULL; +GO + +CREATE TABLE [extScheduler].[Covid19Testing]( + [container] [dbo].[ENTITYID] NOT NULL, + [entityId] [dbo].[ENTITYID] NOT NULL, + [lastIndexed] [datetime] NULL, + [createdBy] [int] NULL, + [modified] [datetime] NULL, + [modifiedBy] [int] NULL, + [created] [datetime] NULL, + [Key] [int] IDENTITY(1,1) NOT NULL, + [SchedulerID] [int] NULL, + [ResourceID] [int] NULL, + [UserName] [nvarchar](4000) NULL, + [UserID] [int] NULL, + [EmployeeID] [nvarchar](4000) NULL, + [ScheduledDate] [datetime] NULL, + [ScheduledTime] [datetime] NULL, + [Create] [datetime] NULL, + [SampleDate] [nvarchar](4000) NULL, + [CreatedB] [nvarchar](4000) NULL, + [ComplianceUpdated] [bit] NULL, + CONSTRAINT [covid19testingKey_pk] PRIMARY KEY CLUSTERED +( +[Key] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) ON [PRIMARY] + GO + +EXEC core.fn_dropifexists 'TempScheduler', 'extScheduler', 'TABLE', NULL; +GO + +CREATE TABLE [extscheduler].[TempScheduler]( + [Searchkey] [int] IDENTITY(100,1) NOT NULL, + [usernames] [varchar](500) NULL, + [EventId] [varchar](max) NULL, + [StartDate] [smalldatetime] NULL, + [created] [smalldatetime] NULL + ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] + GO + +EXEC core.fn_dropifexists 'TempCoV19Interim', 'extScheduler', 'TABLE', NULL; +GO + +/****** Object: Table [extscheduler].[TempScheduler] + ONCE TESTED CHAN GE TO labkey_public + Script Date: 10/29/2020 8:19:18 AM ******/ + +CREATE TABLE [extscheduler].[TempCoV19Interim]( + [EventId] [varchar](max) NULL, + [UserName] [nvarchar](1000) NULL, + [container] [varchar](max) NULL, + [notes] nvarchar(100) null + ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] + GO + +EXEC core.fn_dropifexists 'TempCoV19Interim', 'extScheduler', 'TABLE', NULL; +GO + +CREATE TABLE [extscheduler].[TempCoV19Interim]( + [EventId] [varchar](max) NULL, + [UserName] [nvarchar](1000) NULL, + [container] [varchar](max) NULL + ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] + GO + +EXEC core.fn_dropifexists 'TempCoV19Final', 'extScheduler', 'TABLE', NULL; + GO + +CREATE TABLE [extscheduler].[TempCoV19Final]( + [container] [uniqueidentifier] NOT NULL, + [UserName] [nvarchar](4000) NULL, + [UserID] [int] NULL, + [EventID] [int] NULL, + [StartDate] [smalldatetime] NULL, + [EmployeeID] [nvarchar](4000) NULL, + [Created] [smalldatetime] NULL + ) ON [PRIMARY] + GO + +/* 21.xxx SQL scripts */ + +ALTER TABLE extscheduler.Resources ADD Instance varchar(50); + +/* 23.xxx SQL scripts */ + +EXEC core.fn_dropifexists 'TempCoV19Final', 'extScheduler', 'TABLE', NULL; + GO +EXEC core.fn_dropifexists 'covid19testing', 'extScheduler', 'TABLE', NULL; +GO + +EXEC core.fn_dropifexists 'tempscheduler', 'extScheduler', 'TABLE', NULL; +GO + +EXEC core.fn_dropifexists 'TempCoV19Interim', 'extScheduler', 'TABLE', NULL; +GO + +EXEC core.fn_dropifexists 'vw_Covid19Research', 'extScheduler', 'VIEW', NULL; +GO + +EXEC core.fn_dropifexists 'vw_covid19dcmschedule', 'extScheduler', 'VIEW', NULL; +GO + +EXEC core.fn_dropifexists 'vw_Covid19DCMDaily', 'extScheduler', 'VIEW', NULL; +GO \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.20-15.21.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.20-15.21.sql deleted file mode 100644 index a42290b84..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.20-15.21.sql +++ /dev/null @@ -1,38 +0,0 @@ -CREATE SCHEMA extscheduler; -GO - -CREATE TABLE extscheduler.Resources -( - Id INT IDENTITY(1,1) NOT NULL, - Name VARCHAR(255) NOT NULL, - Color VARCHAR(20), - - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created DATETIME, - ModifiedBy USERID, - Modified DATETIME, - - CONSTRAINT PK_resources PRIMARY KEY (Id), - CONSTRAINT UQ_resources_ContainerName UNIQUE (Container, Name) -); - -CREATE TABLE extscheduler.Events -( - Id INT IDENTITY(1,1) NOT NULL, - ResourceId INT NOT NULL, - Name VARCHAR(255) NOT NULL, - StartDate DATETIME NOT NULL, - EndDate DATETIME NOT NULL, - UserId USERID NOT NULL, - - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created DATETIME, - ModifiedBy USERID, - Modified DATETIME, - - CONSTRAINT PK_events PRIMARY KEY (Id), - CONSTRAINT FK_events_ResourceId FOREIGN KEY (ResourceId) REFERENCES extscheduler.resources(Id), - CONSTRAINT UQ_events_ContainerResourceName UNIQUE (Container, ResourceId, Name) -); \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.21-15.22.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.21-15.22.sql deleted file mode 100644 index 201d67257..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.21-15.22.sql +++ /dev/null @@ -1,6 +0,0 @@ - -ALTER TABLE extscheduler.Resources Add Room VARCHAR(255); -ALTER TABLE extscheduler.Resources Add Bldg VARCHAR (255); - - -ALTER TABLE extscheduler.Events ADD Alias VARCHAR(25); \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.22-15.23.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.22-15.23.sql deleted file mode 100644 index bdcdf797b..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.22-15.23.sql +++ /dev/null @@ -1,24 +0,0 @@ -CREATE TABLE extscheduler.users -( - Id INT IDENTITY(1,1) NOT NULL, - PrimeUserID USERID NOT NULL, - FirstName VARCHAR(255) NOT NULL, - LastName Varchar(255) NOT NULL, - Email VARCHAR(255) NOT NULL, - Phone VARCHAR(255), - Department VARCHAR(255), - Lab_FirstName VARCHAR(255), - Lab_LastName VARCHAR(255), - FiscalAuthority_Name VARCHAR(255), - FiscalAuthority_Phone VARCHAR(255), - SecurityLevel VARCHAR(255), - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created DATETIME, - ModifiedBy USERID, - Modified DATETIME, - - CONSTRAINT PK_users PRIMARY KEY (Id), - CONSTRAINT FK_users_PrimeUserID FOREIGN KEY (PrimeUserID) REFERENCES core.Usersdata(UserId), - CONSTRAINT UQ_users_ContainerPrimeUserID UNIQUE (Container, PrimeUserID) -); diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.23-15.24.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.23-15.24.sql deleted file mode 100644 index 37b9da6a9..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.23-15.24.sql +++ /dev/null @@ -1,27 +0,0 @@ -DROP TABLE extscheduler.users; - - -CREATE TABLE extscheduler.users -( - Id INT IDENTITY(1,1) NOT NULL, - PrimeUserID USERID NOT NULL, - FirstName VARCHAR(255) NOT NULL, - LastName Varchar(255) NOT NULL, - Email VARCHAR(255) NOT NULL, - Phone VARCHAR(255), - Department VARCHAR(255), - Lab_FirstName VARCHAR(255), - Lab_LastName VARCHAR(255), - FiscalAuthority_Name VARCHAR(255), - FiscalAuthority_Phone VARCHAR(255), - SecurityLevel VARCHAR(255), - Container ENTITYID NOT NULL, - CreatedBy USERID, - Created DATETIME, - ModifiedBy USERID, - Modified DATETIME, - - CONSTRAINT PK_users PRIMARY KEY (Id), - CONSTRAINT FK_users_PrimeUserID FOREIGN KEY (PrimeUserID) REFERENCES core.Usersdata(UserId), - CONSTRAINT UQ_users_ContainerPrimeUserID UNIQUE (Container, PrimeUserID) -); diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.24-15.25.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.24-15.25.sql deleted file mode 100644 index 697272a9a..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.24-15.25.sql +++ /dev/null @@ -1,20 +0,0 @@ -ALTER TABLE extscheduler.events DROP CONSTRAINT UQ_events_ContainerResourceName; -ALTER TABLE extscheduler.events ADD CONSTRAINT CHK_event_DateRangeValid CHECK (StartDate <= EndDate); - -GO - -CREATE TRIGGER TR_OverlappingDateRanges ON extscheduler.events FOR INSERT, UPDATE AS -BEGIN - IF EXISTS( - SELECT 1 FROM extscheduler.events R - INNER JOIN inserted I - ON ( - (R.Container = I.Container AND R.ResourceId = I.ResourceId AND R.StartDate < I.EndDate AND I.StartDate < R.EndDate) - AND NOT (R.Container = I.Container AND R.ResourceId = I.ResourceId AND R.StartDate = I.StartDate AND I.EndDate = R.EndDate) - ) - ) - BEGIN - RAISERROR('Start/End date ranges may not overlap for the same resource.', 16, 1) - ROLLBACK - END -END \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.25-15.26.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.25-15.26.sql deleted file mode 100644 index 678dc8f41..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.25-15.26.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE extscheduler.events ALTER COLUMN Name VARCHAR(255) NULL; diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.26-15.27.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.26-15.27.sql deleted file mode 100644 index a15bb70fe..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.26-15.27.sql +++ /dev/null @@ -1,2 +0,0 @@ - -DROP TABLE extscheduler.users; \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.27-15.28.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.27-15.28.sql deleted file mode 100644 index 8a4027489..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.27-15.28.sql +++ /dev/null @@ -1,16 +0,0 @@ - -ALTER TRIGGER extscheduler.TR_OverlappingDateRanges ON extscheduler.Events FOR INSERT, UPDATE AS -BEGIN - IF EXISTS( - SELECT 1 FROM extscheduler.events R - INNER JOIN inserted I - ON ( - (R.Container = I.Container AND R.ResourceId = I.ResourceId AND R.StartDate < I.EndDate AND I.StartDate < R.EndDate) - AND NOT (R.Id = I.Id) - ) - ) - BEGIN - RAISERROR('Start/End date ranges may not overlap for the same resource.', 16, 1) - ROLLBACK - END -END \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.28-15.29.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.28-15.29.sql deleted file mode 100644 index 4ae71d86e..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.28-15.29.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE extscheduler.Events ADD Quantity INT; \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.29-15.30.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.29-15.30.sql deleted file mode 100644 index 6fc9496ad..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.29-15.30.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE extscheduler.Events ADD Comments VARCHAR(255); \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.30-15.31.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.30-15.31.sql deleted file mode 100644 index 048fef129..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-15.30-15.31.sql +++ /dev/null @@ -1,21 +0,0 @@ - -ALTER TRIGGER extscheduler.TR_OverlappingDateRanges ON extscheduler.Events FOR INSERT, UPDATE AS -BEGIN - IF EXISTS( - SELECT 1 FROM extscheduler.events R - LEFT JOIN ( - SELECT ObjectId, Value FROM prop.Properties - JOIN prop.PropertySets ON PropertySets."Set" = Properties."Set" - WHERE Name = 'ExtSchedulerAllowEventOverlap' - ) P ON R.Container = P.ObjectId - INNER JOIN inserted I - ON (P.Value IS NULL OR P.Value = 'false') AND ( - (R.Container = I.Container AND R.ResourceId = I.ResourceId AND R.StartDate < I.EndDate AND I.StartDate < R.EndDate) - AND NOT (R.Id = I.Id) - ) - ) - BEGIN - RAISERROR('Start/End date ranges may not overlap for the same resource.', 16, 1) - ROLLBACK - END -END \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.02-20.03.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.02-20.03.sql deleted file mode 100644 index ae7232d34..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.02-20.03.sql +++ /dev/null @@ -1,7 +0,0 @@ -/* -Created: 2020-05-07 -Created by jonesga -Purpose: Update of Comments field of scheduler per user request - -*/ -ALTER TABLE extscheduler.Events ALTER COLUMN Comments NVARCHAR(4000); \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.502-20.503.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.502-20.503.sql deleted file mode 100644 index 7ca6608b7..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.502-20.503.sql +++ /dev/null @@ -1,49 +0,0 @@ -/* -Created: 2020-05-07 -Created by jonesga -Purpose: Dataset to mimic DateRange from Labkey for SCheduler actionin SQL - -*/ -EXEC core.fn_dropifexists 'DateParts','extScheduler','TABLE'; -GO - -CREATE TABLE extScheduler.dateParts -(date datetime, -dateOnly datetime, -DayOfYear int, -DayofMonth int, -DayofWeek int, -DayName varchar(20), - -WeekofMonth int, -WeekofYear int, - Month int, - year int) - -Go - -Insert into extScheduler.DateParts - (Date, - dateonly, - DayOfYear, - DayofMonth, - DayofWeek, - DayName, - WeekofMonth, - WeekofYear, - Month, - year) -Select - - i.NDate, - CAST(i.Ndate as date) as dateOnly, - cast(datepart(dy,i.Ndate) as integer) as DayOfYear, - cast(datepart(dd,i.Ndate) as integer) as DayOfMonth, - cast(datepart(dw,i.Ndate) as integer) as DayOfWeek, - cast(dateName(dd,i.Ndate) as VarChar(20)) as DayName, - (cast(datepart(dd,i.Ndate) as integer)/ 7) as WeekofMonth, - cast(datepart(wk,i.Ndate) as integer) as WeekofYear, - cast(datepart(mm,i.Ndate) as integer) as Month, - cast(datepart(yyyy,i.Ndate) as integer) as Year -FROM (SELECT DateAdd(dd, i.value, '5/1/2020') as NDate FROM ldk.integers i)i -Where i.nDate <= '4/20/2021' \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.503-20.504.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.503-20.504.sql deleted file mode 100644 index b6b61df4e..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.503-20.504.sql +++ /dev/null @@ -1,55 +0,0 @@ --- ================================================ --- Template generated from Template Explorer using: --- Create Procedure (New Menu).SQL --- --- Use the Specify Values for Template Parameters --- command (Ctrl-Shift-M) to fill in the parameter --- values below. --- --- This block of comments will not be included in --- the definition of the procedure. --- ================================================ --- ============================================= --- Author: jonesga@ohsu.edu --- Create date: 2020-05-13 --- Description: PRocedure to Block out Scheduling for Covid19 testing for 3:30 to 7 PM on Monday and Friday --- ============================================= -EXEC core.fn_dropifexists 'extBlockOutEvening', 'extscheduler', 'PROCEDURE' -GO - -CREATE PROCEDURE extscheduler.extBlockOutEvening - -- Add the parameters for the stored procedure here - @Month INTEGER, @ResourceID INTEGER -AS -BEGIN - - INSERT INTO [extscheduler].[Events] - ([ResourceId] - ,[Name] - ,[StartDate] - ,[EndDate] - ,[UserId] - ,[Container] - ,[CreatedBy] - ,[Created] - ,[Quantity] - ,[Comments]) - - SELECT @ResourceID - ,'No Covid-19 Testing' - ,DateAdd(hh,1530,c.date) as StartDate - ,DateAdd(hh,19,c.date) as EndDate - ,1003 - ,'5C3C9FF8-6BCF-1038-930A-7D62F3A605B4' - ,1003 - ,GetDate() - ,1 - ,'Insert by ISE' - FROM [Labkey].[extscheduler].[dateParts] c - where c.dayofWeek in (2,6) and c.Month = @Month ---Days of Week start with Sunday - - - -END -GO diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.504-20.505.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.504-20.505.sql deleted file mode 100644 index b6de4bbeb..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.504-20.505.sql +++ /dev/null @@ -1,55 +0,0 @@ -/****** Object: StoredProcedure [extscheduler].[extBlockOutMorning] Script Date: 5/13/2020 6:10:00 AM ******/ --- ================================================ --- Template generated from Template Explorer using: --- Create Procedure (New Menu).SQL --- --- Use the Specify Values for Template Parameters --- command (Ctrl-Shift-M) to fill in the parameter --- values below. --- --- This block of comments will not be included in --- the definition of the procedure. --- ================================================ --- ============================================= --- Author: jonesga@ohsu.edu --- Create date: 2020-05-13 --- Description: PRocedure to Block out Scheduling for Covid19 testing for 7 to 8 on Monday and Friday --- ============================================= -EXEC core.fn_dropifexists 'extBlockOutMorning', 'extscheduler', 'PROCEDURE' -GO - -CREATE PROCEDURE [extscheduler].[extBlockOutMorning] - -- Add the parameters for the stored procedure here - @Month INTEGER, @ResourceID INTEGER -AS -BEGIN - - INSERT INTO [extscheduler].[Events] - ([ResourceId] - ,[Name] - ,[StartDate] - ,[EndDate] - ,[UserId] - ,[Container] - ,[CreatedBy] - ,[Created] - ,[Quantity] - ,[Comments]) - - SELECT @ResourceID - ,'No Covid-19 Testing' - ,DateAdd(hh,7,c.date) as StartDate - ,DateAdd(hh,8,c.date) as EndDate - ,1003 - ,'5C3C9FF8-6BCF-1038-930A-7D62F3A605B4' - ,1003 - ,GetDate() - ,1 - ,'Insert by ISE' - FROM [Labkey].[extscheduler].[dateParts] c - where c.dayofWeek in (2,6) and c.Month = @Month ---Days of Week start with Sunday - -END - -GO diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.505-20.506.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.505-20.506.sql deleted file mode 100644 index 8ba6347df..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.505-20.506.sql +++ /dev/null @@ -1,55 +0,0 @@ --- /****** Object: StoredProcedure [extscheduler].[extBlockOutDays] Script Date: 5/13/2020 6:12:06 AM ******/ --- ================================================ --- Template generated from Template Explorer using: --- Create Procedure (New Menu).SQL --- --- Use the Specify Values for Template Parameters --- command (Ctrl-Shift-M) to fill in the parameter --- values below. --- --- This block of comments will not be included in --- the definition of the procedure. --- ================================================ --- ============================================= --- Author: jonesga@ohsu.edu --- Create date: 2020-05-13 --- Description: PRocedure to Block out Scheduling for Covid19 testing for all days except Monday and Friday --- ============================================= -EXEC core.fn_dropifexists 'extBlockOutDays', 'extscheduler', 'PROCEDURE' -GO - -CREATE PROCEDURE [extscheduler].[extBlockOutDays] - -- Add the parameters for the stored procedure here - @Month INTEGER, @ResourceID INTEGER -AS -BEGIN - - INSERT INTO [extscheduler].[Events] - ([ResourceId] - ,[Name] - ,[StartDate] - ,[EndDate] - ,[UserId] - ,[Container] - ,[CreatedBy] - ,[Created] - ,[Quantity] - ,[Comments]) - - SELECT @ResourceID - ,'No Covid-19 Testing' - ,DateAdd(hh,7,c.date) as StartDate - ,DateAdd(hh,19,c.date) as EndDate - ,1003 - ,'5C3C9FF8-6BCF-1038-930A-7D62F3A605B4' - ,1003 - ,GetDate() - ,1 - ,'Insert by ISE' - FROM [Labkey].[extscheduler].[dateParts] c - where c.dayofWeek in (1,3,4,5,7) and c.Month = @Month ---Days of Week start with Sunday - -END - -GO diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.601-20.602.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.601-20.602.sql deleted file mode 100644 index 91cf20033..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.601-20.602.sql +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2003-2005 Fred Hutchinson Cancer Research Center - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * Created 2020-06-09 - * Created by jonesga - * Purpose - View joining Scheduler Resources, Events and the User Data - */ -EXEC core.fn_dropifexists 'vw_Covid19Research', 'extScheduler', 'VIEW', NULL; -GO - -CREATE VIEW extScheduler.vw_Covid19Research AS -SELECT extscheduler.Events.Id AS SChedulerID, extscheduler.Events.ResourceId, extscheduler.Resources.Name AS ResourceName, extscheduler.Events.Name, extscheduler.Events.StartDate, extscheduler.Events.UserId, - extscheduler.Events.CreatedBy, extscheduler.Events.Created, extscheduler.Events.Quantity, core.UsersData.IM AS EmployeeID -FROM extscheduler.Events LEFT OUTER JOIN - core.UsersData ON extscheduler.Events.UserId = core.UsersData.UserId LEFT OUTER JOIN - extscheduler.Resources ON extscheduler.Events.ResourceId = extscheduler.Resources.Id -WHERE (extscheduler.Events.ResourceId = 67) diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.602-20.603.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.602-20.603.sql deleted file mode 100644 index 85ef48351..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.602-20.603.sql +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2003-2005 Fred Hutchinson Cancer Research Center - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * Created 2020-06-09 - * Created by jonesga - * Purpose - View joining Scheduler Resources, Events and the User Data - */ -EXEC core.fn_dropifexists 'vw_Covid19DCMSchedule', 'extScheduler', 'VIEW', NULL; -GO - -CREATE VIEW extScheduler.vw_Covid19DCMSchedule AS -SELECT extscheduler.Events.Id AS SChedulerID, extscheduler.Events.ResourceId, extscheduler.Resources.Name AS ResourceName, extscheduler.Events.Name, extscheduler.Events.StartDate, extscheduler.Events.UserId, - extscheduler.Events.CreatedBy, extscheduler.Events.Created, extscheduler.Events.Quantity, core.UsersData.IM AS EmployeeID - FROM extscheduler.Events LEFT OUTER JOIN - core.UsersData ON extscheduler.Events.UserId = core.UsersData.UserId LEFT OUTER JOIN - extscheduler.Resources ON extscheduler.Events.ResourceId = extscheduler.Resources.Id - WHERE (extscheduler.Resources.Name LIKE 'DCM%') diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.901-20.902.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.901-20.902.sql deleted file mode 100644 index 9f118c9d4..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.901-20.902.sql +++ /dev/null @@ -1,32 +0,0 @@ - -/****** Object: Table [list].[c10437d746_covid19testing] Script Date: 9/16/2020 9:19:28 AM ******/ -EXEC core.fn_dropifexists 'Covid19Testing', 'extScheduler', 'TABLE', NULL; -GO - -CREATE TABLE [extScheduler].[Covid19Testing]( - [container] [dbo].[ENTITYID] NOT NULL, - [entityId] [dbo].[ENTITYID] NOT NULL, - [lastIndexed] [datetime] NULL, - [createdBy] [int] NULL, - [modified] [datetime] NULL, - [modifiedBy] [int] NULL, - [created] [datetime] NULL, - [Key] [int] IDENTITY(1,1) NOT NULL, - [SchedulerID] [int] NULL, - [ResourceID] [int] NULL, - [UserName] [nvarchar](4000) NULL, - [UserID] [int] NULL, - [EmployeeID] [nvarchar](4000) NULL, - [ScheduledDate] [datetime] NULL, - [ScheduledTime] [datetime] NULL, - [Create] [datetime] NULL, - [SampleDate] [nvarchar](4000) NULL, - [CreatedB] [nvarchar](4000) NULL, - [ComplianceUpdated] [bit] NULL, - CONSTRAINT [covid19testing_pk] PRIMARY KEY CLUSTERED -( -[Key] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] - ) ON [PRIMARY] - GO - diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.903-20.904.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.903-20.904.sql deleted file mode 100644 index c648c48f1..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.903-20.904.sql +++ /dev/null @@ -1,32 +0,0 @@ - -/****** Object: Table [list].[c10437d746_covid19testing] Script Date: 9/16/2020 9:19:28 AM ******/ -EXEC core.fn_dropifexists 'Covid19Testing', 'extScheduler', 'TABLE', NULL; -GO - -CREATE TABLE [extScheduler].[Covid19Testing]( - [container] [dbo].[ENTITYID] NOT NULL, - [entityId] [dbo].[ENTITYID] NOT NULL, - [lastIndexed] [datetime] NULL, - [createdBy] [int] NULL, - [modified] [datetime] NULL, - [modifiedBy] [int] NULL, - [created] [datetime] NULL, - [Key] [int] IDENTITY(1,1) NOT NULL, - [SchedulerID] [int] NULL, - [ResourceID] [int] NULL, - [UserName] [nvarchar](4000) NULL, - [UserID] [int] NULL, - [EmployeeID] [nvarchar](4000) NULL, - [ScheduledDate] [datetime] NULL, - [ScheduledTime] [datetime] NULL, - [Create] [datetime] NULL, - [SampleDate] [nvarchar](4000) NULL, - [CreatedB] [nvarchar](4000) NULL, - [ComplianceUpdated] [bit] NULL, - CONSTRAINT [covid19testingKey_pk] PRIMARY KEY CLUSTERED -( -[Key] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] - ) ON [PRIMARY] - GO - diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.910-20.911.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.910-20.911.sql deleted file mode 100644 index 00cfdeb80..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.910-20.911.sql +++ /dev/null @@ -1,11 +0,0 @@ -EXEC core.fn_dropifexists 'TempScheduler', 'extScheduler', 'TABLE', NULL; -GO - -CREATE TABLE [extscheduler].[TempScheduler]( - [Searchkey] [int] IDENTITY(100,1) NOT NULL, - [usernames] [varchar](500) NULL, - [EventId] [varchar](max) NULL, - [StartDate] [smalldatetime] NULL, - [created] [smalldatetime] NULL - ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] - GO diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.911-20.912.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.911-20.912.sql deleted file mode 100644 index 0f9f2a570..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.911-20.912.sql +++ /dev/null @@ -1,14 +0,0 @@ -EXEC core.fn_dropifexists 'TempCoV19Interim', 'extScheduler', 'TABLE', NULL; -GO - -/****** Object: Table [extscheduler].[TempScheduler] - ONCE TESTED CHAN GE TO labkey_public - Script Date: 10/29/2020 8:19:18 AM ******/ - -CREATE TABLE [extscheduler].[TempCoV19Interim]( - [EventId] [varchar](max) NULL, - [UserName] [nvarchar](1000) NULL, - [container] [varchar](max) NULL, - [notes] nvarchar(100) null - ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] - GO diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.922-20.923.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.922-20.923.sql deleted file mode 100644 index f892cd5b4..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.922-20.923.sql +++ /dev/null @@ -1,9 +0,0 @@ -EXEC core.fn_dropifexists 'TempCoV19Interim', 'extScheduler', 'TABLE', NULL; -GO - -CREATE TABLE [extscheduler].[TempCoV19Interim]( - [EventId] [varchar](max) NULL, - [UserName] [nvarchar](1000) NULL, - [container] [varchar](max) NULL - ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] - GO diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.936-20.937.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.936-20.937.sql deleted file mode 100644 index adf2cc97a..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-20.936-20.937.sql +++ /dev/null @@ -1,13 +0,0 @@ -EXEC core.fn_dropifexists 'TempCoV19Final', 'extScheduler', 'TABLE', NULL; - GO - -CREATE TABLE [extscheduler].[TempCoV19Final]( - [container] [uniqueidentifier] NOT NULL, - [UserName] [nvarchar](4000) NULL, - [UserID] [int] NULL, - [EventID] [int] NULL, - [StartDate] [smalldatetime] NULL, - [EmployeeID] [nvarchar](4000) NULL, - [Created] [smalldatetime] NULL - ) ON [PRIMARY] - GO diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-21.001-21.002.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-21.001-21.002.sql deleted file mode 100644 index ffc8359a2..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-21.001-21.002.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE extscheduler.Resources ADD Instance varchar(50); \ No newline at end of file diff --git a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-23.001-23.002.sql b/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-23.001-23.002.sql deleted file mode 100644 index 67387b57f..000000000 --- a/extscheduler/resources/schemas/dbscripts/sqlserver/extscheduler-23.001-23.002.sql +++ /dev/null @@ -1,19 +0,0 @@ -EXEC core.fn_dropifexists 'TempCoV19Final', 'extScheduler', 'TABLE', NULL; - GO -EXEC core.fn_dropifexists 'covid19testing', 'extScheduler', 'TABLE', NULL; -GO - -EXEC core.fn_dropifexists 'tempscheduler', 'extScheduler', 'TABLE', NULL; -GO - -EXEC core.fn_dropifexists 'TempCoV19Interim', 'extScheduler', 'TABLE', NULL; -GO - -EXEC core.fn_dropifexists 'vw_Covid19Research', 'extScheduler', 'VIEW', NULL; -GO - -EXEC core.fn_dropifexists 'vw_covid19dcmschedule', 'extScheduler', 'VIEW', NULL; -GO - -EXEC core.fn_dropifexists 'vw_Covid19DCMDaily', 'extScheduler', 'VIEW', NULL; -GO diff --git a/extscheduler/src/org/labkey/extscheduler/ExtSchedulerModule.java b/extscheduler/src/org/labkey/extscheduler/ExtSchedulerModule.java index be8aa0d4f..db2e52c9d 100644 --- a/extscheduler/src/org/labkey/extscheduler/ExtSchedulerModule.java +++ b/extscheduler/src/org/labkey/extscheduler/ExtSchedulerModule.java @@ -27,13 +27,13 @@ public String getName() @Override public @Nullable Double getSchemaVersion() { - return 23.002; + return 26.000; } @Override - public boolean hasScripts() + public double getEarliestUpgradeVersion() { - return true; + return 23.002; } @Override diff --git a/onprc_ssu/module.properties b/onprc_ssu/module.properties index b21928fe5..fbfea49ba 100644 --- a/onprc_ssu/module.properties +++ b/onprc_ssu/module.properties @@ -1,3 +1,3 @@ ModuleClass: org.labkey.onprc_ssu.ONPRC_SSUModule -SupportedDatabases: mssql -ManageVersion: false +SupportedDatabases: mssql, pgsql +ManageVersion: true diff --git a/onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.22-13.23.sql b/onprc_ssu/resources/schemas/dbscripts/postgresql/onprc_ssu-0.000-25.000.sql similarity index 58% rename from onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.22-13.23.sql rename to onprc_ssu/resources/schemas/dbscripts/postgresql/onprc_ssu-0.000-25.000.sql index 9f83153b5..cfcbd6b2c 100644 --- a/onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.22-13.23.sql +++ b/onprc_ssu/resources/schemas/dbscripts/postgresql/onprc_ssu-0.000-25.000.sql @@ -14,6 +14,26 @@ * limitations under the License. */ -ALTER TABLE onprc_ssu.schedule ADD formcreated bit; -ALTER TABLE onprc_ssu.schedule ADD encounterid entityid; -ALTER TABLE onprc_ssu.schedule ADD taskid entityid; \ No newline at end of file +CREATE SCHEMA onprc_ssu; + +CREATE TABLE onprc_ssu.schedule ( + rowid SERIAL, + Id varchar(100), + date timestamp, + location varchar(200), + procedureid int, + project integer, + formcreated boolean, + encounterid entityid, + taskid entityid, + + objectid entityid not null, + + container entityid, + created timestamp, + createdby int, + modified timestamp, + modifiedby int, + + constraint PK_schedule PRIMARY KEY (objectid) +); diff --git a/onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.20-13.21.sql b/onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-0.000-25.000.sql similarity index 82% rename from onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.20-13.21.sql rename to onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-0.000-25.000.sql index 7c2a9b137..2b86999cf 100644 --- a/onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.20-13.21.sql +++ b/onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-0.000-25.000.sql @@ -35,4 +35,12 @@ CREATE TABLE onprc_ssu.schedule ( modifiedby int, constraint PK_schedule PRIMARY KEY (objectid) -); \ No newline at end of file +); + +/* 13.xxx SQL scripts */ + +ALTER TABLE onprc_ssu.schedule ADD project integer; + +ALTER TABLE onprc_ssu.schedule ADD formcreated bit; +ALTER TABLE onprc_ssu.schedule ADD encounterid entityid; +ALTER TABLE onprc_ssu.schedule ADD taskid entityid; \ No newline at end of file diff --git a/onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.21-13.22.sql b/onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.21-13.22.sql deleted file mode 100644 index a4333d8eb..000000000 --- a/onprc_ssu/resources/schemas/dbscripts/sqlserver/onprc_ssu-13.21-13.22.sql +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright (c) 2011 LabKey Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -ALTER TABLE onprc_ssu.schedule ADD project integer; \ No newline at end of file diff --git a/onprc_ssu/src/org/labkey/onprc_ssu/ONPRC_SSUModule.java b/onprc_ssu/src/org/labkey/onprc_ssu/ONPRC_SSUModule.java index 99b6a6825..154e27899 100644 --- a/onprc_ssu/src/org/labkey/onprc_ssu/ONPRC_SSUModule.java +++ b/onprc_ssu/src/org/labkey/onprc_ssu/ONPRC_SSUModule.java @@ -42,13 +42,13 @@ public String getName() @Override public @Nullable Double getSchemaVersion() { - return 13.23; + return 26.000; } @Override - public boolean hasScripts() + public double getEarliestUpgradeVersion() { - return true; + return 13.23; } @Override