From 81ff933f7ea783e4bc6f14940ef5820b42d2f243 Mon Sep 17 00:00:00 2001 From: girish Date: Sat, 12 Mar 2011 12:54:31 +0000 Subject: [PATCH] Cases List Cache Builder display --- .../engine/classes/model/AppCacheView.php | 230 +++++++++++++++--- .../setupSchemas/app_cache_view_mssql.sql | 37 +++ .../triggerAppDelegationInsert_mssql.sql | 107 ++++++++ .../triggerAppDelegationUpdate_mssql.sql | 77 ++++++ .../triggerApplicationDelete_mssql.sql | 7 + .../triggerApplicationUpdate_mssql.sql | 12 + 6 files changed, 438 insertions(+), 32 deletions(-) create mode 100644 workflow/engine/methods/setup/setupSchemas/app_cache_view_mssql.sql create mode 100644 workflow/engine/methods/setup/setupSchemas/triggerAppDelegationInsert_mssql.sql create mode 100644 workflow/engine/methods/setup/setupSchemas/triggerAppDelegationUpdate_mssql.sql create mode 100644 workflow/engine/methods/setup/setupSchemas/triggerApplicationDelete_mssql.sql create mode 100644 workflow/engine/methods/setup/setupSchemas/triggerApplicationUpdate_mssql.sql diff --git a/workflow/engine/classes/model/AppCacheView.php b/workflow/engine/classes/model/AppCacheView.php index 13528f5c9..df35d8019 100644 --- a/workflow/engine/classes/model/AppCacheView.php +++ b/workflow/engine/classes/model/AppCacheView.php @@ -872,7 +872,13 @@ class AppCacheView extends BaseAppCacheView { function getMySQLVersion() { $con = Propel::getConnection("workflow"); $stmt = $con->createStatement(); - $sql = "select version() "; + $connection = $con->getDSN(); + $sqlType = $connection['phptype']; + if($sqlType == 'mssql') + $sql = "SELECT SERVERPROPERTY('productversion')"; // Added by Ankit for mssql.} + else + $sql = "select version()"; + $rs1 = $stmt->executeQuery($sql, ResultSet::FETCHMODE_NUM); $rs1->next(); $row = $rs1->getRow(); @@ -888,20 +894,26 @@ class AppCacheView extends BaseAppCacheView { $con = Propel::getConnection("workflow"); $stmt = $con->createStatement(); - $sql = "select CURRENT_USER(), USER() "; + $connection = $con->getDSN(); + $sqlType = $connection['phptype']; + if($sqlType == 'mssql') + $sql = "SELECT SYSTEM_USER, USER"; // Added by Ankit for mssql + else + $sql = "select CURRENT_USER(), USER() "; + $rs1 = $stmt->executeQuery($sql, ResultSet::FETCHMODE_NUM); $rs1->next(); $row = $rs1->getRow(); $mysqlUser = str_replace('@', "'@'", $row[0] ); - $super = false; - $sql = "SELECT * FROM `information_schema`.`USER_PRIVILEGES` where GRANTEE = \"'$mysqlUser'\" and PRIVILEGE_TYPE = 'SUPER' "; - $rs1 = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs1->next(); - $row = $rs1->getRow(); - if ( is_array($row = $rs1->getRow() ) ) { +// $super = false; +// $sql = "SELECT * FROM `information_schema`.`USER_PRIVILEGES` where GRANTEE = \"'$mysqlUser'\" and PRIVILEGE_TYPE = 'SUPER' "; +// $rs1 = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); +// $rs1->next(); +// $row = $rs1->getRow(); +// if ( is_array($row = $rs1->getRow() ) ) { $super = true; - } + //} return array( 'user' => $mysqlUser, 'super' => $super ); } @@ -932,9 +944,16 @@ class AppCacheView extends BaseAppCacheView { function checkAppCacheView () { $con = Propel::getConnection("workflow"); $stmt = $con->createStatement(); - + $connection = $con->getDSN(); + $sqlType = $connection['phptype']; //check if table APP_CACHE_VIEW exists - $sql="SHOW TABLES"; + if($sqlType == 'mssql'){ + //$sql = "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE';"; //Added by Ankit for mssql + $sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES"; + } + else + $sql="SHOW TABLES"; + $rs1 = $stmt->executeQuery($sql, ResultSet::FETCHMODE_NUM); $rs1->next(); $found = false; @@ -945,6 +964,47 @@ class AppCacheView extends BaseAppCacheView { $rs1->next(); } + + $needCreateTable = $found == false; + + //if exists the APP_CACHE_VIEW Table, we need to check if it has the correct number of fields, if not recreate the table + $tableRecreated = false; + if ( $found ) { + if($sqlType == 'mssql') + $sql = "SELECT * FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = 'APP_CACHE_VIEW'"; //Added by Ankit for mssql + else + $sql="SHOW FIELDS FROM APP_CACHE_VIEW"; + + $rs1 = $stmt->executeQuery($sql, ResultSet::FETCHMODE_NUM); + $rs1->next(); + $fields = array(); + while ( is_array($row = $rs1->getRow() ) ) { + $fields[] = $row[0]; + $rs1->next(); + } + if ( count($fields) != 31 ) { + $needCreateTable = true; + } + } + + if ( $needCreateTable ) { + if($sqlType == 'mssql'){ + $stmt->executeQuery( "IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'APP_CACHE_VIEW') AND type = (N'U')) + DROP TABLE APP_CACHE_VIEW");//Added by Ankit for msssql + $filenameSql = $this->pathToAppCacheFiles . 'app_cache_view_mssql.sql'; + } + else{ + $stmt->executeQuery( "DROP TABLE IF EXISTS `APP_CACHE_VIEW`; "); + $filenameSql = $this->pathToAppCacheFiles . 'app_cache_view.sql';} + + if ( !file_exists ( $filenameSql ) ) + throw ( new Exception ( "file app_cache_view_mssql.sql doesn't exists ") ); + $sql = file_get_contents ( $filenameSql ); + $stmt->executeQuery($sql); + $tableRecreated = true; + $found = true; + } + //now count how many records there are .. $count = '-'; if ( $found ) { @@ -976,7 +1036,7 @@ class AppCacheView extends BaseAppCacheView { $stmt->executeQuery($val); } - $sql = "select count(*) as CANT from APP_CACHE_VIEW "; + $sql = "select count(*) as CANT from APP_CACHE_VIEW"; $rs1 = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); $rs1->next(); $row1 = $rs1->getRow(); @@ -994,14 +1054,30 @@ class AppCacheView extends BaseAppCacheView { $con = Propel::getConnection("workflow"); $stmt = $con->createStatement(); - $rs = $stmt->executeQuery('Show TRIGGERS', ResultSet::FETCHMODE_ASSOC); + $connection = $con->getDSN(); + $sqlType = $connection['phptype']; + //check if table APP_CACHE_VIEW exists + if($sqlType == 'mssql'){ + $rs = $stmt->executeQuery("select tablename = object_name(parent_obj),* from sysobjects + where type = 'tr'", ResultSet::FETCHMODE_ASSOC);} + else{ + $rs = $stmt->executeQuery('Show TRIGGERS', ResultSet::FETCHMODE_ASSOC); + } $rs->next(); $row = $rs->getRow(); $found = false; while ( is_array ( $row ) ) { - if ( strtolower($row['Trigger'] == 'APP_DELEGATION_INSERT') && strtoupper($row['Table']) == 'APP_DELEGATION' ) { - $found = true; + if($sqlType=='mssql') + { + if ( strtolower($row['name'] == 'APP_DELEGATION_INSERT') && strtoupper($row['tablename']) == 'APP_DELEGATION' ) { + $found = true; + } } + else{ + if ( strtolower($row['Trigger'] == 'APP_DELEGATION_INSERT') && strtoupper($row['Table']) == 'APP_DELEGATION' ) { + $found = true; + } + } $rs->next(); $row = $rs->getRow(); } @@ -1010,9 +1086,23 @@ class AppCacheView extends BaseAppCacheView { $found = false; } if ( ! $found ) { - $filenameSql = $this->pathToAppCacheFiles . 'triggerAppDelegationInsert.sql'; + if($sqlType == 'mssql') + { + $filenameSql = $this->pathToAppCacheFiles . 'triggerAppDelegationInsert_mssql.sql'; + } + else{ + $filenameSql = $this->pathToAppCacheFiles . 'triggerAppDelegationInsert.sql'; + } if ( !file_exists ( $filenameSql ) ) - throw ( new Exception ( "file triggerAppDelegationInsert.sql doesn't exists ") ); + { + if($sqlType == 'mssql') + { + throw ( new Exception ( "file triggerAppDelegationInsert_mssql.sql doesn't exists ") ); + } + else{ + throw ( new Exception ( "file triggerAppDelegationInsert.sql doesn't exists ") ); + } + } $sql = file_get_contents ( $filenameSql ); $sql = str_replace('{lang}', $lang, $sql); $stmt->executeQuery($sql); @@ -1030,14 +1120,30 @@ class AppCacheView extends BaseAppCacheView { $con = Propel::getConnection("workflow"); $stmt = $con->createStatement(); - $rs = $stmt->executeQuery("Show TRIGGERS", ResultSet::FETCHMODE_ASSOC); + $connection = $con->getDSN(); + $sqlType = $connection['phptype']; + //check if table APP_CACHE_VIEW exists + if($sqlType == 'mssql'){ + $rs = $stmt->executeQuery("select tablename = object_name(parent_obj),* from sysobjects + where type = 'tr'", ResultSet::FETCHMODE_ASSOC);} + else{ + $rs = $stmt->executeQuery('Show TRIGGERS', ResultSet::FETCHMODE_ASSOC); + } $rs->next(); $row = $rs->getRow(); $found = false; while ( is_array ( $row ) ) { - if ( strtolower($row['Trigger'] == 'APP_DELEGATION_UPDATE') && strtoupper($row['Table']) == 'APP_DELEGATION' ) { - $found = true; + if($sqlType=='mssql') + { + if ( strtolower($row['name'] == 'APP_DELEGATION_UPDATE') && strtoupper($row['tablename']) == 'APP_DELEGATION' ) { + $found = true; + } } + else{ + if ( strtolower($row['Trigger'] == 'APP_DELEGATION_UPDATE') && strtoupper($row['Table']) == 'APP_DELEGATION' ) { + $found = true; + } + } $rs->next(); $row = $rs->getRow(); } @@ -1048,9 +1154,21 @@ class AppCacheView extends BaseAppCacheView { } if ( ! $found ) { - $filenameSql = $this->pathToAppCacheFiles . '/triggerAppDelegationUpdate.sql'; + if($sqlType == 'mssql') + { + $filenameSql = $this->pathToAppCacheFiles . '/triggerAppDelegationUpdate_mssql.sql'; + } + else{ + $filenameSql = $this->pathToAppCacheFiles . '/triggerAppDelegationUpdate.sql'; + } if ( !file_exists ( $filenameSql ) ) - throw ( new Exception ( "file triggerAppDelegationUpdate.sql doesn't exists ") ); + if($sqlType == 'mssql') + { + throw ( new Exception ( "file triggerAppDelegationUpdate_mssql.sql doesn't exists ") ); + } + else{ + throw ( new Exception ( "file triggerAppDelegationUpdate.sql doesn't exists ") ); + } $sql = file_get_contents ( $filenameSql ); $sql = str_replace('{lang}', $lang, $sql); $stmt->executeQuery($sql); @@ -1067,14 +1185,31 @@ class AppCacheView extends BaseAppCacheView { $con = Propel::getConnection("workflow"); $stmt = $con->createStatement(); - $rs = $stmt->executeQuery("Show TRIGGERS", ResultSet::FETCHMODE_ASSOC); + $connection = $con->getDSN(); + $sqlType = $connection['phptype']; + //check if table APP_CACHE_VIEW exists + if($sqlType == 'mssql'){ + $rs = $stmt->executeQuery("select tablename = object_name(parent_obj),* from sysobjects + where type = 'tr'", ResultSet::FETCHMODE_ASSOC);} + else{ + $rs = $stmt->executeQuery('Show TRIGGERS', ResultSet::FETCHMODE_ASSOC); + } $rs->next(); $row = $rs->getRow(); $found = false; while ( is_array ( $row ) ) { - if ( strtolower($row['Trigger'] == 'APPLICATION_UPDATE') && strtoupper($row['Table']) == 'APPLICATION' ) { - $found = true; + if($sqlType=='mssql') + { + if ( strtolower($row['name'] == 'APPLICATION_UPDATE') && strtoupper($row['tablename']) == 'APPLICATION' ) { + $found = true; + } } + else{ + if ( strtolower($row['Trigger'] == 'APPLICATION_UPDATE') && strtoupper($row['Table']) == 'APPLICATION' ) { + $found = true; + } + } + $rs->next(); $row = $rs->getRow(); } @@ -1084,9 +1219,16 @@ class AppCacheView extends BaseAppCacheView { } if ( ! $found ) { - $filenameSql = $this->pathToAppCacheFiles . '/triggerApplicationUpdate.sql'; - if ( !file_exists ( $filenameSql ) ) - throw ( new Exception ( "file triggerAppDelegationUpdate.sql doesn't exists ") ); + if($sqlType=='mssql'){ + $filenameSql = $this->pathToAppCacheFiles . '/triggerApplicationUpdate_mssql.sql'; + if ( !file_exists ( $filenameSql ) ) + throw ( new Exception ( "file triggerAppDelegationUpdate_mssql.sql doesn't exists ") ); + } + else{ + $filenameSql = $this->pathToAppCacheFiles . '/triggerApplicationUpdate.sql'; + if ( !file_exists ( $filenameSql ) ) + throw ( new Exception ( "file triggerAppDelegationUpdate.sql doesn't exists ") ); + } $sql = file_get_contents ( $filenameSql ); $sql = str_replace('{lang}', $lang, $sql); $stmt->executeQuery($sql); @@ -1103,14 +1245,31 @@ class AppCacheView extends BaseAppCacheView { $con = Propel::getConnection("workflow"); $stmt = $con->createStatement(); - $rs = $stmt->executeQuery("Show TRIGGERS", ResultSet::FETCHMODE_ASSOC); + $connection = $con->getDSN(); + $sqlType = $connection['phptype']; + //check if table APP_CACHE_VIEW exists + if($sqlType == 'mssql'){ + $rs = $stmt->executeQuery("select tablename = object_name(parent_obj),* from sysobjects + where type = 'tr'", ResultSet::FETCHMODE_ASSOC);} + else{ + $rs = $stmt->executeQuery('Show TRIGGERS', ResultSet::FETCHMODE_ASSOC); + } $rs->next(); $row = $rs->getRow(); $found = false; while ( is_array ( $row ) ) { - if ( strtolower($row['Trigger'] == 'APPLICATION_DELETE') && strtoupper($row['Table']) == 'APPLICATION' ) { - $found = true; + if($sqlType=='mssql') + { + if ( strtolower($row['name'] == 'APPLICATION_DELETE') && strtoupper($row['tablename']) == 'APPLICATION' ) { + $found = true; + } } + else{ + if ( strtolower($row['Trigger'] == 'APPLICATION_DELETE') && strtoupper($row['Table']) == 'APPLICATION' ) { + $found = true; + } + } + $rs->next(); $row = $rs->getRow(); } @@ -1121,9 +1280,16 @@ class AppCacheView extends BaseAppCacheView { } if ( ! $found ) { + if($sqlType=='mssql'){ + $filenameSql = $this->pathToAppCacheFiles . '/triggerApplicationDelete_mssql.sql'; + if ( !file_exists ( $filenameSql ) ) + throw ( new Exception ( "file triggerApplicationDelete_mssql.sql doesn't exists ") ); + } + else{ $filenameSql = $this->pathToAppCacheFiles . '/triggerApplicationDelete.sql'; if ( !file_exists ( $filenameSql ) ) throw ( new Exception ( "file triggerAppDelegationDelete.sql doesn't exists ") ); + } $sql = file_get_contents ( $filenameSql ); $sql = str_replace('{lang}', $lang, $sql); $stmt->executeQuery($sql); @@ -1202,4 +1368,4 @@ class AppCacheView extends BaseAppCacheView { return $aRows; } -} // AppCacheView + }// AppCacheView diff --git a/workflow/engine/methods/setup/setupSchemas/app_cache_view_mssql.sql b/workflow/engine/methods/setup/setupSchemas/app_cache_view_mssql.sql new file mode 100644 index 000000000..4a1ad9406 --- /dev/null +++ b/workflow/engine/methods/setup/setupSchemas/app_cache_view_mssql.sql @@ -0,0 +1,37 @@ +CREATE TABLE APP_CACHE_VIEW +( + APP_UID VARCHAR(32) default '' NOT NULL, + DEL_INDEX INTEGER default 0 NOT NULL, + APP_NUMBER INTEGER default 0 NOT NULL, + APP_STATUS VARCHAR(32) default '' NOT NULL, + USR_UID VARCHAR(32) default '' NOT NULL, + PREVIOUS_USR_UID VARCHAR(32) default '' NOT NULL, + TAS_UID VARCHAR(32) default '' NOT NULL, + PRO_UID VARCHAR(32) default '' NOT NULL, + DEL_DELEGATE_DATE VARCHAR(10) default '' NOT NULL, + DEL_INIT_DATE DATETIME, + DEL_TASK_DUE_DATE DATETIME, + DEL_FINISH_DATE DATETIME, + DEL_THREAD_STATUS VARCHAR(32) default 'OPEN' NOT NULL, + APP_THREAD_STATUS VARCHAR(32) default 'OPEN' NOT NULL, + APP_TITLE VARCHAR(255) default '' NOT NULL, + APP_PRO_TITLE VARCHAR(255) default '' NOT NULL, + APP_TAS_TITLE VARCHAR(255) default '' NOT NULL, + APP_CURRENT_USER VARCHAR(128) default '' NOT NULL, + APP_DEL_PREVIOUS_USER VARCHAR(128) default '' NOT NULL, + DEL_PRIORITY VARCHAR(32) default '3' NOT NULL, + DEL_DURATION BIGINT default 0, + DEL_QUEUE_DURATION BIGINT default 0, + DEL_DELAY_DURATION BIGINT default 0, + DEL_STARTED TINYINT default 0, + DEL_FINISHED TINYINT default 0, + DEL_DELAYED TINYINT default 0, + APP_CREATE_DATE DATETIME NOT NULL, + APP_FINISH_DATE DATETIME NULL, + APP_UPDATE_DATE DATETIME NOT NULL, + APP_OVERDUE_PERCENTAGE BIGINT NOT NULL default 0, + APP_LAST_USER VARCHAR(128) default '' NOT NULL, + PRIMARY KEY (APP_UID,DEL_INDEX), + UNIQUE (APP_NUMBER), + UNIQUE (USR_UID, APP_STATUS) +) \ No newline at end of file diff --git a/workflow/engine/methods/setup/setupSchemas/triggerAppDelegationInsert_mssql.sql b/workflow/engine/methods/setup/setupSchemas/triggerAppDelegationInsert_mssql.sql new file mode 100644 index 000000000..3b451b439 --- /dev/null +++ b/workflow/engine/methods/setup/setupSchemas/triggerAppDelegationInsert_mssql.sql @@ -0,0 +1,107 @@ +CREATE TRIGGER APP_DELEGATION_INSERT +ON APP_DELEGATION +INSTEAD OF INSERT +AS +BEGIN + DECLARE @DEFAULT_LANG VARCHAR(2); + DECLARE @APP_NUMBER INT; + DECLARE @APP_STATUS VARCHAR(32); + DECLARE @APP_CREATE_DATE DATETIME; + DECLARE @APP_TITLE VARCHAR(255); + DECLARE @APP_PRO_TITLE VARCHAR(255); + DECLARE @APP_TAS_TITLE VARCHAR(255); + DECLARE @APP_CURRENT_USER VARCHAR(255); + DECLARE @PREVIOUS_USR_UID VARCHAR(32); + DECLARE @APP_DEL_PREVIOUS_USER VARCHAR(255); + DECLARE @APP_THREAD_STATUS VARCHAR(32); + SET @DEFAULT_LANG = '{lang}'; + SELECT TOP 1 APPLICATION.APP_NUMBER into APP_NUMBER FROM APPLICATION WHERE APP_UID = 'NEW.APP_UID'; + SELECT TOP 1 APPLICATION.APP_STATUS into APP_STATUS FROM APPLICATION WHERE APP_UID = 'NEW.APP_UID'; + SELECT TOP 1 APPLICATION.APP_CREATE_DATE into APP_CREATE_DATE FROM APPLICATION WHERE APP_UID = 'NEW.APP_UID'; + SELECT TOP 1 CONTENT.CON_VALUE into APP_TITLE FROM CONTENT WHERE 'NEW.APP_UID'=CON_ID AND CON_CATEGORY='APP_TITLE' and CON_LANG = '{lang}'; + IF ( @APP_TITLE IS NULL ) + SET @APP_TITLE = ''; + SELECT TOP 1 CONTENT.CON_VALUE into APP_PRO_TITLE FROM CONTENT WHERE 'NEW.PRO_UID'=CON_ID AND CON_CATEGORY='PRO_TITLE' and CON_LANG = '{lang}'; + SELECT TOP 1 CONTENT.CON_VALUE into APP_TAS_TITLE FROM CONTENT WHERE 'NEW.TAS_UID'=CON_ID AND CON_CATEGORY='TAS_TITLE' and CON_LANG = '{lang}'; + SELECT TOP 1 (USERS.USR_LASTNAME+''+ USERS.USR_FIRSTNAME) as USR_NAME INTO APP_CURRENT_USER FROM USERS WHERE USR_UID = 'NEW.USR_UID'; + IF ( @APP_CURRENT_USER IS NULL ) + SET @APP_CURRENT_USER = ''; + IF ( 'NEW.DEL_PREVIOUS' > 0 ) + SELECT TOP 1 USR_UID INTO PREVIOUS_USR_UID FROM APP_DELEGATION WHERE APP_UID = 'NEW.APP_UID' AND DEL_INDEX = 'NEW.DEL_PREVIOUS'; + SELECT TOP 1 (USERS.USR_LASTNAME+''+USERS.USR_FIRSTNAME) as USR_NAME INTO APP_DEL_PREVIOUS_USER FROM USERS WHERE USR_UID = @PREVIOUS_USR_UID; + IF ( @APP_DEL_PREVIOUS_USER IS NULL ) + SET @APP_DEL_PREVIOUS_USER = ''; + ELSE + SET @APP_DEL_PREVIOUS_USER = ''; + SET @PREVIOUS_USR_UID = ''; + SELECT TOP 1 APP_THREAD_STATUS INTO APP_THREAD_STATUS FROM APP_THREAD WHERE APP_UID = 'NEW.APP_UID' AND DEL_INDEX = 'NEW.DEL_PREVIOUS'; + IF ( @APP_THREAD_STATUS IS NULL ) + SET @APP_THREAD_STATUS = 'OPEN'; + + + INSERT INTO APP_CACHE_VIEW ( + APP_UID, + DEL_INDEX, + APP_NUMBER, + APP_STATUS, + USR_UID, + PREVIOUS_USR_UID, + TAS_UID, + PRO_UID, + DEL_DELEGATE_DATE, + DEL_INIT_DATE, + DEL_TASK_DUE_DATE, + DEL_FINISH_DATE, + DEL_THREAD_STATUS, + APP_THREAD_STATUS, + APP_TITLE, + APP_PRO_TITLE, + APP_TAS_TITLE, + APP_CURRENT_USER, + APP_DEL_PREVIOUS_USER, + DEL_PRIORITY, + DEL_DURATION, + DEL_QUEUE_DURATION, + DEL_DELAY_DURATION, + DEL_STARTED, + DEL_FINISHED, + DEL_DELAYED, + APP_CREATE_DATE, + APP_FINISH_DATE, + APP_UPDATE_DATE, + APP_OVERDUE_PERCENTAGE + +) +VALUES ( + 'NEW.APP_UID', + 'NEW.DEL_INDEX', + @APP_NUMBER, + @APP_STATUS, + 'NEW.USR_UID', + @PREVIOUS_USR_UID, + 'NEW.TAS_UID', + 'NEW.PRO_UID', + substring('NEW.DEL_DELEGATE_DATE',1,10), + substring('NEW.DEL_INIT_DATE',1,10), + substring('NEW.DEL_TASK_DUE_DATE',1,10), + substring('NEW.DEL_FINISH_DATE',1,10), + 'NEW.DEL_THREAD_STATUS', + @APP_THREAD_STATUS, + @APP_TITLE, + @APP_PRO_TITLE, + @APP_TAS_TITLE, + @APP_CURRENT_USER, + @APP_DEL_PREVIOUS_USER, + 'NEW.DEL_PRIORITY', + 'NEW.DEL_DURATION', + 'NEW.DEL_QUEUE_DURATION', + 'NEW.DEL_DELAY_DURATION', + 'NEW.DEL_STARTED', + 'NEW.DEL_FINISHED', + 'NEW.DEL_DELAYED', + @APP_CREATE_DATE, + NULL, + GETDATE(), + 'NEW.APP_OVERDUE_PERCENTAGE' +); +END diff --git a/workflow/engine/methods/setup/setupSchemas/triggerAppDelegationUpdate_mssql.sql b/workflow/engine/methods/setup/setupSchemas/triggerAppDelegationUpdate_mssql.sql new file mode 100644 index 000000000..4d18ab73d --- /dev/null +++ b/workflow/engine/methods/setup/setupSchemas/triggerAppDelegationUpdate_mssql.sql @@ -0,0 +1,77 @@ +CREATE TRIGGER APP_DELEGATION_UPDATE +ON APP_DELEGATION +INSTEAD OF UPDATE +AS +BEGIN + DECLARE @DEFAULT_LANG VARCHAR(2); + DECLARE @APP_NUMBER INT; + DECLARE @APP_STATUS VARCHAR(32); + DECLARE @APP_CREATE_DATE DATETIME; + DECLARE @APP_TITLE VARCHAR(255); + DECLARE @APP_PRO_TITLE VARCHAR(255); + DECLARE @APP_TAS_TITLE VARCHAR(255); + DECLARE @APP_CURRENT_USER VARCHAR(255); + DECLARE @PREVIOUS_USR_UID VARCHAR(32); + DECLARE @APP_DEL_PREVIOUS_USER VARCHAR(255); + DECLARE @APP_THREAD_STATUS VARCHAR(32); + SET @DEFAULT_LANG = '{lang}'; + SELECT TOP 1 APPLICATION.APP_NUMBER into APP_NUMBER FROM APPLICATION WHERE APP_UID = 'NEW.APP_UID'; + SELECT TOP 1 APPLICATION.APP_STATUS into APP_STATUS FROM APPLICATION WHERE APP_UID = 'NEW.APP_UID'; + SELECT TOP 1 APPLICATION.APP_CREATE_DATE into APP_CREATE_DATE FROM APPLICATION WHERE APP_UID = 'NEW.APP_UID'; + SELECT TOP 1 CONTENT.CON_VALUE into APP_TITLE FROM CONTENT WHERE 'NEW.APP_UID'=CON_ID AND CON_CATEGORY='APP_TITLE' and CON_LANG = '{lang}'; + IF ( @APP_TITLE IS NULL ) + SET @APP_TITLE = ''; + + SELECT TOP 1 CONTENT.CON_VALUE into APP_PRO_TITLE FROM CONTENT WHERE 'NEW.PRO_UID'=CON_ID AND CON_CATEGORY='PRO_TITLE' and CON_LANG = '{lang}'; + SELECT TOP 1 CONTENT.CON_VALUE into APP_TAS_TITLE FROM CONTENT WHERE 'NEW.TAS_UID'=CON_ID AND CON_CATEGORY='TAS_TITLE' and CON_LANG = '{lang}'; + SELECT TOP 1 (USERS.USR_LASTNAME + ' ' + USERS.USR_FIRSTNAME) as USR_NAME INTO APP_CURRENT_USER FROM USERS WHERE USR_UID = 'NEW.USR_UID'; + IF ( @APP_CURRENT_USER IS NULL ) + SET @APP_CURRENT_USER = ''; + + IF ( 'NEW.DEL_PREVIOUS' > 0 ) + SELECT TOP 1 USR_UID INTO PREVIOUS_USR_UID FROM APP_DELEGATION WHERE APP_UID = 'NEW.APP_UID' AND DEL_INDEX = 'NEW.DEL_PREVIOUS'; + SELECT TOP 1(USERS.USR_LASTNAME + ' ' + USERS.USR_FIRSTNAME) as USR_NAME INTO APP_DEL_PREVIOUS_USER FROM USERS WHERE USR_UID = @PREVIOUS_USR_UID; + IF ( @APP_DEL_PREVIOUS_USER IS NULL ) + SET @APP_DEL_PREVIOUS_USER = ''; + + ELSE + SET @APP_DEL_PREVIOUS_USER = ''; + SET @PREVIOUS_USR_UID = ''; + + SELECT TOP 1 APP_THREAD_STATUS INTO APP_THREAD_STATUS FROM APP_THREAD WHERE APP_UID = 'NEW.APP_UID' AND DEL_INDEX = 'NEW.DEL_PREVIOUS'; + IF ( @APP_THREAD_STATUS IS NULL ) + SET @APP_THREAD_STATUS = 'OPEN'; + + UPDATE APP_CACHE_VIEW + SET + APP_NUMBER = @APP_NUMBER, + APP_STATUS = @APP_STATUS, + USR_UID = 'NEW.USR_UID', + PREVIOUS_USR_UID = @PREVIOUS_USR_UID, + TAS_UID = 'NEW.TAS_UID', + PRO_UID = 'NEW.PRO_UID', + DEL_DELEGATE_DATE = substring('NEW.DEL_DELEGATE_DATE',1,10), + DEL_INIT_DATE = substring('NEW.DEL_INIT_DATE',1,10), + DEL_TASK_DUE_DATE = substring('NEW.DEL_TASK_DUE_DATE',1,10), + DEL_FINISH_DATE = substring('NEW.DEL_FINISH_DATE',1,10), + DEL_THREAD_STATUS = 'NEW.DEL_THREAD_STATUS', + APP_THREAD_STATUS = @APP_THREAD_STATUS, + APP_TITLE = @APP_TITLE, + APP_PRO_TITLE = @APP_PRO_TITLE, + APP_TAS_TITLE = @APP_TAS_TITLE, + APP_CURRENT_USER = @APP_CURRENT_USER, + APP_DEL_PREVIOUS_USER = @APP_DEL_PREVIOUS_USER, + DEL_PRIORITY = 'NEW.DEL_PRIORITY', + DEL_DURATION = 'NEW.DEL_DURATION', + DEL_QUEUE_DURATION = 'NEW.DEL_QUEUE_DURATION', + DEL_DELAY_DURATION = 'NEW.DEL_DELAY_DURATION', + DEL_STARTED = 'NEW.DEL_STARTED', + DEL_FINISHED = 'NEW.DEL_FINISHED', + DEL_DELAYED = 'NEW.DEL_DELAYED', + APP_FINISH_DATE = NULL, + APP_UPDATE_DATE = GETDATE(), + APP_OVERDUE_PERCENTAGE = 'NEW.APP_OVERDUE_PERCENTAGE' +WHERE + APP_UID = 'NEW.APP_UID' + AND DEL_INDEX = 'NEW.DEL_INDEX'; +END \ No newline at end of file diff --git a/workflow/engine/methods/setup/setupSchemas/triggerApplicationDelete_mssql.sql b/workflow/engine/methods/setup/setupSchemas/triggerApplicationDelete_mssql.sql new file mode 100644 index 000000000..5d4f41030 --- /dev/null +++ b/workflow/engine/methods/setup/setupSchemas/triggerApplicationDelete_mssql.sql @@ -0,0 +1,7 @@ +CREATE TRIGGER APPLICATION_DELETE +ON APPLICATION +INSTEAD OF DELETE +AS + BEGIN + DELETE FROM APP_CACHE_VIEW WHERE APP_UID = 'OLD.APP_UID'; +END \ No newline at end of file diff --git a/workflow/engine/methods/setup/setupSchemas/triggerApplicationUpdate_mssql.sql b/workflow/engine/methods/setup/setupSchemas/triggerApplicationUpdate_mssql.sql new file mode 100644 index 000000000..954f2e9b7 --- /dev/null +++ b/workflow/engine/methods/setup/setupSchemas/triggerApplicationUpdate_mssql.sql @@ -0,0 +1,12 @@ +CREATE TRIGGER APPLICATION_UPDATE +ON APPLICATION +INSTEAD OF UPDATE +AS +BEGIN + DECLARE @APP_STATUS VARCHAR(32); + SELECT TOP 1 APPLICATION.APP_STATUS into APP_STATUS FROM APPLICATION WHERE APP_UID = 'NEW.APP_UID'; + + IF('OLD.APP_STATUS'<>'NEW.APP_STATUS') + SET @APP_STATUS = 'NEW.APP_STATUS'; + UPDATE APP_CACHE_VIEW SET APP_STATUS = @APP_STATUS WHERE APP_UID = 'NEW.APP_UID'; +END \ No newline at end of file