Source Code
PROCEDURE: UTIL_SETLIST
PROCEDURE: UTIL_GETNEXTLISTVAL
FUNCTION: GET_FIRST_DAY_OF_QUARTER
PROCEDURE: SETTINGS_READ_STRING
PROCEDURE: SETTINGS_READ_NUMBER
PROCEDURE: SETTINGS_READ_BOOL
PROCEDURE: SETTINGS_READ_DATE
PROCEDURE: SETTINGS_WRITE_STRING
PROCEDURE: SETTINGS_WRITE_NUMBER
PROCEDURE: SETTINGS_WRITE_BOOL
PROCEDURE: SETTINGS_WRITE_DATE
PROCEDURE: BGP_WRITE_TO_LOG
FUNCTION: CURRENT_SESSION
PROCEDURE: GET_INTERVAL_DIFFERENCE
PROCEDURE: APPLY_ACTUALS_TASK
PROCEDURE: APPLY_ACTUALS_TASKRSRC
PROCEDURE: APPLY_ESTIMATE_TASK
PROCEDURE: APPLY_ESTIMATE_TASKRSRC
PROCEDURE: PROJSHAR_INSERT
PROCEDURE: PROJSHAR_INSERT_UPD
PROCEDURE: POPULATE_UACCESS
PROCEDURE: UACCESS_MAINTAIN_FOR_USER
PROCEDURE: UPDATE_TASKACTV
PROCEDURE: GETNEXTKEYS
PROCEDURE: BRE_ADD
PROCEDURE: BRE_CHECKCHANGE
PROCEDURE: BRE_REMOVE
PROCEDURE: BRE_KEEPALIVE
PROCEDURE: BRE_PING
PROCEDURE: COUNT_RSRC_LVLS
PROCEDURE: GET_RSRC_ASSOC_TYPES
PROCEDURE: BITWISE_LSHIFT
PROCEDURE: BITWISE_RSHIFT
PROCEDURE: MIME_ENCODE_CHAR
PROCEDURE: MIME_ENCODE
PROCEDURE: GET_GUID
PROCEDURE: PC_GET_NEXT_KEY
PROCEDURE: PC_INSERT_UDF
PROCEDURE: PC_NEW_PROJ_SHORT_NAME
PROCEDURE: PC_ACTVCODE_COPY
PROCEDURE: PC_ACTVTYPE_COPY
PROCEDURE: PC_TASKPRED_COPY
PROCEDURE: PC_TASKS_BY_WBS
PROCEDURE: PC_NEW_WBS
PROCEDURE: PC_NEW_PROJECT
PROCEDURE: PC_PROCESS_LEVEL
PROCEDURE: PC_HAS_EPS_CODE_ACCESS
PROCEDURE: MULTI_PROJECT_COPY
PROCEDURE: PROJECT_COPY
PROCEDURE: TIME_APPROVAL_WBS_LEVEL
PROCEDURE: TIME_APPROVAL_WBS
PROCEDURE: PV_WBS_ROOT_PROC_CAND
PROCEDURE: PV_WBS_ROOT_NODES
PROCEDURE: WBS_TREE_HAS_RSRC_ASSGN
PROCEDURE: WBS_TREE_HAS_ROLE_ASSGN
PROCEDURE: DB_TO_IANA_CHARSET
PROCEDURE: GET_SAFETY_DATE
PROCEDURE: POPULATE_DELAYED_LOADING
PROCEDURE: GLOBAL_TABLE_CHANGE
PROCEDURE: OPEN_TABLE_CHANGE
PROCEDURE: CHECK_LAST_SUMM
PROCEDURE: REFRDEL_CLEANUP
PROCEDURE: AUDIT_TAB_OPTIONS
PROCEDURE: AUDIT_PRM_USER
PROCEDURE: AUDIT_PROC_INFO
PROCEDURE: AUDIT_IDENTITY
PROCEDURE: AUDIT_DATA
PROCEDURE: AUDIT_ROW
PROCEDURE: INTERNAL_AUDITING_SETTING
PROCEDURE: AUDITING_ENABLE
PROCEDURE: AUDITING_DISABLE
PROCEDURE: CLEANUP_USESSAUD
PROCEDURE: USESSAUD_ENABLE
PROCEDURE: USESSAUD_DISABLE
PROCEDURE: HAS_RSRC_ACCESS
PROCEDURE: UPDATE_RSRC_SECURITY
PROCEDURE: GET_PRIMARY_KEY
PROCEDURE: CASCADE_DELETE_CHILD
PROCEDURE: CASCADE_DELETE
PROCEDURE: CLEANUP_LOGICAL_DELETES
PROCEDURE: HQUERY_PROCESS_REC
PROCEDURE: HQUERY_POPULATE
PROCEDURE: HAS_TIMESHEETS
PROCEDURE: SYNC_UDFTYPE
PROCEDURE: USESSION_CLEANUP
PROCEDURE: USESSION_CLEAR_LOGICAL_DELETES
PROCEDURE: USESSION_CLEANUP_EXPIRED
PROCEDURE: USER_DEFINED_BACKGROUND
PROCEDURE: CLEANUP_OLD_DATA
PROCEDURE: BGPLOG_CLEANUP
PROCEDURE: PROJECT_COPY_LIST
PROCEDURE: ADD_DATABASE_JOB
PROCEDURE: DELETE_PROJECT_CODE_SCENARIOS
PROCEDURE: INITIALIZE_BACKGROUND_PROCS
PROCEDURE: DROP_BACKGROUND_PROCS
PROCEDURE: PRMAUDIT_CLEANUP
PROCEDURE: PV_LOGIN
PROCEDURE: SQL_TRACE_START
PROCEDURE: SQL_TRACE_END
PROCEDURE: PRIMAVERA_EVENT
PROCEDURE: PROJECT_COPY_BASELINE
PROCEDURE: PROJECT_DELETE_WBS
PROCEDURE: PROJECT_DELETE
PROCEDURE: REPLACE_REFLECTION_PROJECT
PROCEDURE: OBSPROJ_UPDATE_PROCESS_KEYS
PROCEDURE: OBSPROJ_UPDATE_EPS
PROCEDURE: OBSPROJ_UPDATE_PROJECT
PROCEDURE: OBSPROJ_UPDATE
PROCEDURE: OBSPROJ_FULL_REBUILD
PROCEDURE: PRMQUEUE_ADD
PROCEDURE: OBSPROJ_PROCESS_QUEUE
PROCEDURE: CLEANUP_PRMQUEUE
PROCEDURE: WBSRSRC_VALIDATE
PROCEDURE: SYSTEM_MONITOR
PROCEDURE: DATA_MONITOR
PROCEDURE: CHECK_BACKGROUND_JOBS
PROCEDURE: TA_GATHER_TIMESHEETS
PROCEDURE: TS_AUDIT
PROCEDURE: PV_OPEN_PROJECT
PROCEDURE: SOURCE_VERSION
FUNCTION: GET_UNIQUE_TASK_CODE
PROCEDURE: ACTIVITY_COPY_API
PROCEDURE: SYNC_BASELINE_TASKS
TRIGGER: TR_NOTE_FK
TRIGGER: TR_PROJECT_OBSPROJ
TRIGGER: TR_PROJWBS_OBSPROJ
TRIGGER: TR_RSRCHOUR_LDI
TRIGGER: TR_PROTECT_SPIDMAP
TRIGGER: TR_USERS_TSDELEGATE
TRIGGER: TR_USESSION_LOGOFF
VIEW: PROJRSRC_VIEW
VIEW: PROJROLE_VIEW
VIEW: PROJRSRCROLE_VIEW
VIEW: PROJSHAR_BL_VIEW
VIEW: PROJRSRC_PS_VIEW
VIEW: PROJROLE_PS_VIEW
VIEW: PROJRSRCROLE_PS_VIEW
VIEW: PFLOAD_VIEW
VIEW: PFLOAD_IP_VIEW
VIEW: PFLOAD_UACCESS_VIEW
VIEW: PFLOAD_IP_UACCESS_VIEW
VIEW: OPENING_OBS
VIEW: OPENING_ROLE
VIEW: OPENING_ACCOUNT
VIEW: OPENING_USERS
VIEW: OPENING_RSRC
VIEW: OPENING_ACTVCODE
VIEW: OPENING_RSRCROLE
VIEW: WBSRSRC_ASSGN_BY_PROJ_BY_WEEK
VIEW: WBSRSRC_ASSGN_BY_PROJ_BY_MONTH
VIEW: WBSRSRC_ASSGN_BY_PROJ_BY_QTR
VIEW: WBSRSRC_ASSGN_BY_PROJ_BY_YEAR
VIEW: WBSRSRC_ASSGN_BY_RSRC_BY_WEEK
VIEW: WBSRSRC_ASSGN_BY_RSRC_BY_MONTH
VIEW: WBSRSRC_ASSGN_BY_RSRC_BY_QTR
VIEW: WBSRSRC_ASSGN_BY_RSRC_BY_YEAR
VIEW: WBSRSRC_ASSGN_BY_ROLE_BY_WEEK
VIEW: WBSRSRC_ASSGN_BY_ROLE_BY_MONTH
VIEW: WBSRSRC_ASSGN_BY_ROLE_BY_QTR
VIEW: WBSRSRC_ASSGN_BY_ROLE_BY_YEAR
VIEW: WBSRSRC_ASSGN_BY_PROJRSRC_WEEK
VIEW: WBSRSRC_ASSGN_BY_PROJRSRC_MON
VIEW: WBSRSRC_ASSGN_BY_PROJRSRC_QTR
VIEW: WBSRSRC_ASSGN_BY_PROJRSRC_YEAR
VIEW: WBSRSRC_ASSGN_BY_PROJROLE_WEEK
VIEW: WBSRSRC_ASSGN_BY_PROJROLE_MON
VIEW: WBSRSRC_ASSGN_BY_PROJROLE_QTR
VIEW: WBSRSRC_ASSGN_BY_PROJROLE_YEAR
VIEW: WBSRSRC_ASSGN_SUMMARY_BY_MON
VIEW: WBSRSRC_ASSGN_SUMMARY_BY_QTR
VIEW: WBSRSRC_ASSGN_SUMMARY_BY_WEEK
VIEW: WBSRSRC_ASSGN_SUMMARY_BY_YEAR
VIEW: WBSRSRC_ASSN_BY_PROJ_BY_FP
VIEW: WBSRSRC_ASSN_BY_PROJROLE_BY_FP
VIEW: WBSRSRC_ASSN_BY_PROJRSRC_BY_FP
VIEW: WBSRSRC_ASSN_SUMMARY_BY_FP
TRIGGER: PRMAUD_ACCOUNT
TRIGGER: PRMAUD_ACCOUNT
TRIGGER: PRMAUD_ACTVCODE
TRIGGER: PRMAUD_ACTVCODE
TRIGGER: PRMAUD_ACTVTYPE
TRIGGER: PRMAUD_ACTVTYPE
TRIGGER: PRMAUD_ADMIN_CONFIG
TRIGGER: PRMAUD_ADMIN_CONFIG
TRIGGER: PRMAUD_BASETYPE
TRIGGER: PRMAUD_BASETYPE
TRIGGER: PRMAUD_BRE_REGISTRY
TRIGGER: PRMAUD_BRE_REGISTRY
TRIGGER: PRMAUD_BUDGCHNG
TRIGGER: PRMAUD_BUDGCHNG
TRIGGER: PRMAUD_CALENDAR
TRIGGER: PRMAUD_CALENDAR
TRIGGER: PRMAUD_COSTTYPE
TRIGGER: PRMAUD_COSTTYPE
TRIGGER: PRMAUD_CURRTYPE
TRIGGER: PRMAUD_CURRTYPE
TRIGGER: PRMAUD_DASHBOARD
TRIGGER: PRMAUD_DASHBOARD
TRIGGER: PRMAUD_DASHUSER
TRIGGER: PRMAUD_DASHUSER
TRIGGER: PRMAUD_DOCCATG
TRIGGER: PRMAUD_DOCCATG
TRIGGER: PRMAUD_DOCSTAT
TRIGGER: PRMAUD_DOCSTAT
TRIGGER: PRMAUD_DOCUMENT
TRIGGER: PRMAUD_DOCUMENT
TRIGGER: PRMAUD_EXTAPP
TRIGGER: PRMAUD_EXTAPP
TRIGGER: PRMAUD_EXPPROJ
TRIGGER: PRMAUD_EXPPROJ
TRIGGER: PRMAUD_FACTOR
TRIGGER: PRMAUD_FACTOR
TRIGGER: PRMAUD_FACTVAL
TRIGGER: PRMAUD_FACTVAL
TRIGGER: PRMAUD_FILTPROP
TRIGGER: PRMAUD_FILTPROP
TRIGGER: PRMAUD_FINDATES
TRIGGER: PRMAUD_FINDATES
TRIGGER: PRMAUD_FORMCATG
TRIGGER: PRMAUD_FORMCATG
TRIGGER: PRMAUD_FORMPROJ
TRIGGER: PRMAUD_FORMPROJ
TRIGGER: PRMAUD_FORMTMPL
TRIGGER: PRMAUD_FORMTMPL
TRIGGER: PRMAUD_FUNDSRC
TRIGGER: PRMAUD_FUNDSRC
TRIGGER: PRMAUD_GCHANGE
TRIGGER: PRMAUD_GCHANGE
TRIGGER: PRMAUD_ISSUHIST
TRIGGER: PRMAUD_ISSUHIST
TRIGGER: PRMAUD_ITERATION
TRIGGER: PRMAUD_ITERATION
TRIGGER: PRMAUD_ITERDAYS
TRIGGER: PRMAUD_ITERDAYS
TRIGGER: PRMAUD_ITERGOAL
TRIGGER: PRMAUD_ITERGOAL
TRIGGER: PRMAUD_JOBLOG
TRIGGER: PRMAUD_JOBLOG
TRIGGER: PRMAUD_JOBSVC
TRIGGER: PRMAUD_JOBSVC
TRIGGER: PRMAUD_JOBRPT
TRIGGER: PRMAUD_JOBRPT
TRIGGER: PRMAUD_MEMOTYPE
TRIGGER: PRMAUD_MEMOTYPE
TRIGGER: PRMAUD_NONWORK
TRIGGER: PRMAUD_NONWORK
TRIGGER: PRMAUD_NOTE
TRIGGER: PRMAUD_NOTE
TRIGGER: PRMAUD_OBS
TRIGGER: PRMAUD_OBS
TRIGGER: PRMAUD_PCATTYPE
TRIGGER: PRMAUD_PCATTYPE
TRIGGER: PRMAUD_PCATUSER
TRIGGER: PRMAUD_PCATUSER
TRIGGER: PRMAUD_PCATVAL
TRIGGER: PRMAUD_PCATVAL
TRIGGER: PRMAUD_PFOLIO
TRIGGER: PRMAUD_PFOLIO
TRIGGER: PRMAUD_PHASE
TRIGGER: PRMAUD_PHASE
TRIGGER: PRMAUD_POBS
TRIGGER: PRMAUD_POBS
TRIGGER: PRMAUD_PREFER
TRIGGER: PRMAUD_PREFER
TRIGGER: PRMAUD_PROFILE
TRIGGER: PRMAUD_PROFILE
TRIGGER: PRMAUD_PROCGROUP
TRIGGER: PRMAUD_PROCGROUP
TRIGGER: PRMAUD_PROCITEM
TRIGGER: PRMAUD_PROCITEM
TRIGGER: PRMAUD_PROFPRIV
TRIGGER: PRMAUD_PROFPRIV
TRIGGER: PRMAUD_PROJCOST
TRIGGER: PRMAUD_PROJCOST
TRIGGER: PRMAUD_PROJECT
TRIGGER: PRMAUD_PROJECT
TRIGGER: PRMAUD_PROJEST
TRIGGER: PRMAUD_PROJEST
TRIGGER: PRMAUD_PROJFUND
TRIGGER: PRMAUD_PROJFUND
TRIGGER: PRMAUD_PROJISSU
TRIGGER: PRMAUD_PROJISSU
TRIGGER: PRMAUD_PROJPCAT
TRIGGER: PRMAUD_PROJPCAT
TRIGGER: PRMAUD_PROJPROP
TRIGGER: PRMAUD_PROJPROP
TRIGGER: PRMAUD_PROJRISK
TRIGGER: PRMAUD_PROJRISK
TRIGGER: PRMAUD_PROJTHRS
TRIGGER: PRMAUD_PROJTHRS
TRIGGER: PRMAUD_PROJWBS
TRIGGER: PRMAUD_PROJWBS
TRIGGER: PRMAUD_PROJWSRPT
TRIGGER: PRMAUD_PROJWSRPT
TRIGGER: PRMAUD_PRPFOLIO
TRIGGER: PRMAUD_PRPFOLIO
TRIGGER: PRMAUD_QUERYLIB
TRIGGER: PRMAUD_QUERYLIB
TRIGGER: PRMAUD_RCATTYPE
TRIGGER: PRMAUD_RCATTYPE
TRIGGER: PRMAUD_RCATVAL
TRIGGER: PRMAUD_RCATVAL
TRIGGER: PRMAUD_REITTYPE
TRIGGER: PRMAUD_REITTYPE
TRIGGER: PRMAUD_RELEASE
TRIGGER: PRMAUD_RELEASE
TRIGGER: PRMAUD_RELITEMS
TRIGGER: PRMAUD_RELITEMS
TRIGGER: PRMAUD_RFOLIO
TRIGGER: PRMAUD_RFOLIO
TRIGGER: PRMAUD_RISKCTRL
TRIGGER: PRMAUD_RISKCTRL
TRIGGER: PRMAUD_RISKTYPE
TRIGGER: PRMAUD_RISKTYPE
TRIGGER: PRMAUD_RLFOLIO
TRIGGER: PRMAUD_RLFOLIO
TRIGGER: PRMAUD_ROLFOLIO
TRIGGER: PRMAUD_ROLFOLIO
TRIGGER: PRMAUD_ROLERATE
TRIGGER: PRMAUD_ROLERATE
TRIGGER: PRMAUD_ROLELIMIT
TRIGGER: PRMAUD_ROLELIMIT
TRIGGER: PRMAUD_ROLES
TRIGGER: PRMAUD_ROLES
TRIGGER: PRMAUD_RPT
TRIGGER: PRMAUD_RPT
TRIGGER: PRMAUD_RPTBATCH
TRIGGER: PRMAUD_RPTBATCH
TRIGGER: PRMAUD_RPTGROUP
TRIGGER: PRMAUD_RPTGROUP
TRIGGER: PRMAUD_RPTLIST
TRIGGER: PRMAUD_RPTLIST
TRIGGER: PRMAUD_RSRC
TRIGGER: PRMAUD_RSRC
TRIGGER: PRMAUD_RSRCANDASH
TRIGGER: PRMAUD_RSRCANDASH
TRIGGER: PRMAUD_RSRCANVIEW
TRIGGER: PRMAUD_RSRCANVIEW
TRIGGER: PRMAUD_RSRCCURV
TRIGGER: PRMAUD_RSRCCURV
TRIGGER: PRMAUD_RSRCHOUR
TRIGGER: PRMAUD_RSRCHOUR
TRIGGER: PRMAUD_RSRCPROP
TRIGGER: PRMAUD_RSRCPROP
TRIGGER: PRMAUD_RSRCRATE
TRIGGER: PRMAUD_RSRCRATE
TRIGGER: PRMAUD_RSRCRCAT
TRIGGER: PRMAUD_RSRCRCAT
TRIGGER: PRMAUD_RSRCROLE
TRIGGER: PRMAUD_RSRCROLE
TRIGGER: PRMAUD_RSRCSEC
TRIGGER: PRMAUD_RSRCSEC
TRIGGER: PRMAUD_RSRFOLIO
TRIGGER: PRMAUD_RSRFOLIO
TRIGGER: PRMAUD_SCENARIO
TRIGGER: PRMAUD_SCENARIO
TRIGGER: PRMAUD_SCENPROJ
TRIGGER: PRMAUD_SCENPROJ
TRIGGER: PRMAUD_SCENUSER
TRIGGER: PRMAUD_SCENUSER
TRIGGER: PRMAUD_SCENROLE
TRIGGER: PRMAUD_SCENROLE
TRIGGER: PRMAUD_SHIFT
TRIGGER: PRMAUD_SHIFT
TRIGGER: PRMAUD_SHIFTPER
TRIGGER: PRMAUD_SHIFTPER
TRIGGER: PRMAUD_TASK
TRIGGER: PRMAUD_TASK
TRIGGER: PRMAUD_TASKACTV
TRIGGER: PRMAUD_TASKACTV
TRIGGER: PRMAUD_TASKDOC
TRIGGER: PRMAUD_TASKDOC
TRIGGER: PRMAUD_TASKFDBK
TRIGGER: PRMAUD_TASKFDBK
TRIGGER: PRMAUD_TASKFIN
TRIGGER: PRMAUD_TASKFIN
TRIGGER: PRMAUD_TASKMEMO
TRIGGER: PRMAUD_TASKMEMO
TRIGGER: PRMAUD_TASKNOTE
TRIGGER: PRMAUD_TASKNOTE
TRIGGER: PRMAUD_TASKPRED
TRIGGER: PRMAUD_TASKPRED
TRIGGER: PRMAUD_TASKPROC
TRIGGER: PRMAUD_TASKPROC
TRIGGER: PRMAUD_TASKRSRC
TRIGGER: PRMAUD_TASKRSRC
TRIGGER: PRMAUD_TASKSUM
TRIGGER: PRMAUD_TASKSUM
TRIGGER: PRMAUD_TASKSUMFIN
TRIGGER: PRMAUD_TASKSUMFIN
TRIGGER: PRMAUD_TASKUSER
TRIGGER: PRMAUD_TASKUSER
TRIGGER: PRMAUD_TASKWKSP
TRIGGER: PRMAUD_TASKWKSP
TRIGGER: PRMAUD_THRSPARM
TRIGGER: PRMAUD_THRSPARM
TRIGGER: PRMAUD_TIMESHT
TRIGGER: PRMAUD_TIMESHT
TRIGGER: PRMAUD_TMPLCATG
TRIGGER: PRMAUD_TMPLCATG
TRIGGER: PRMAUD_TRAKVIEW
TRIGGER: PRMAUD_TRAKVIEW
TRIGGER: PRMAUD_TRSRCFIN
TRIGGER: PRMAUD_TRSRCFIN
TRIGGER: PRMAUD_TRSRCSUM
TRIGGER: PRMAUD_TRSRCSUM
TRIGGER: PRMAUD_TRSRCSUMFN
TRIGGER: PRMAUD_TRSRCSUMFN
TRIGGER: PRMAUD_TSDATES
TRIGGER: PRMAUD_TSDATES
TRIGGER: PRMAUD_TSDELEGATE
TRIGGER: PRMAUD_TSDELEGATE
TRIGGER: PRMAUD_UDFCODE
TRIGGER: PRMAUD_UDFCODE
TRIGGER: PRMAUD_UDFTYPE
TRIGGER: PRMAUD_UDFTYPE
TRIGGER: PRMAUD_UDFVALUE
TRIGGER: PRMAUD_UDFVALUE
TRIGGER: PRMAUD_UMEASURE
TRIGGER: PRMAUD_UMEASURE
TRIGGER: PRMAUD_USERCOL
TRIGGER: PRMAUD_USERCOL
TRIGGER: PRMAUD_USERDATA
TRIGGER: PRMAUD_USERDATA
TRIGGER: PRMAUD_USERENG
TRIGGER: PRMAUD_USERENG
TRIGGER: PRMAUD_USEROBS
TRIGGER: PRMAUD_USEROBS
TRIGGER: PRMAUD_USEROPEN
TRIGGER: PRMAUD_USEROPEN
TRIGGER: PRMAUD_USROPNVAL
TRIGGER: PRMAUD_USROPNVAL
TRIGGER: PRMAUD_USERS
TRIGGER: PRMAUD_USERS
TRIGGER: PRMAUD_USERWKSP
TRIGGER: PRMAUD_USERWKSP
TRIGGER: PRMAUD_VIEWPREF
TRIGGER: PRMAUD_VIEWPREF
TRIGGER: PRMAUD_VWPREFDASH
TRIGGER: PRMAUD_VWPREFDASH
TRIGGER: PRMAUD_VWPREFDATA
TRIGGER: PRMAUD_VWPREFDATA
TRIGGER: PRMAUD_VWPREFUSER
TRIGGER: PRMAUD_VWPREFUSER
TRIGGER: PRMAUD_VIEWPROP
TRIGGER: PRMAUD_VIEWPROP
TRIGGER: PRMAUD_WBSBUDG
TRIGGER: PRMAUD_WBSBUDG
TRIGGER: PRMAUD_WBSMEMO
TRIGGER: PRMAUD_WBSMEMO
TRIGGER: PRMAUD_WBRSCAT
TRIGGER: PRMAUD_WBRSCAT
TRIGGER: PRMAUD_WBSRSRC
TRIGGER: PRMAUD_WBSRSRC
TRIGGER: PRMAUD_WBSRSRC_QTY
TRIGGER: PRMAUD_WBSRSRC_QTY
TRIGGER: PRMAUD_WBSSTEP
TRIGGER: PRMAUD_WBSSTEP
TRIGGER: PRMAUD_WKFLTMPL
TRIGGER: PRMAUD_WKFLTMPL
TRIGGER: PRMAUD_WKFLUSER
TRIGGER: PRMAUD_WKFLUSER
TRIGGER: PRMAUD_WORKFLOW
TRIGGER: PRMAUD_WORKFLOW
TRIGGER: PRMAUD_WORKSPACE
TRIGGER: PRMAUD_WORKSPACE
TRIGGER: RT_ACCOUNT
TRIGGER: RT_ACCOUNT
TRIGGER: RT_ACCOUNT_DEL
TRIGGER: RT_ACTVCODE
TRIGGER: RT_ACTVCODE
TRIGGER: RT_ACTVCODE_DEL
TRIGGER: RT_ACTVTYPE
TRIGGER: RT_ACTVTYPE
TRIGGER: RT_ACTVTYPE_DEL
TRIGGER: RT_ADMIN_CONFIG
TRIGGER: RT_ADMIN_CONFIG
TRIGGER: RT_ADMIN_CONFIG_DEL
TRIGGER: RT_BASETYPE
TRIGGER: RT_BASETYPE
TRIGGER: RT_BASETYPE_DEL
TRIGGER: RT_BRE_REGISTRY
TRIGGER: RT_BRE_REGISTRY
TRIGGER: RT_BRE_REGISTRY_DEL
TRIGGER: RT_BUDGCHNG
TRIGGER: RT_BUDGCHNG
TRIGGER: RT_BUDGCHNG_DEL
TRIGGER: RT_CALENDAR
TRIGGER: RT_CALENDAR
TRIGGER: RT_CALENDAR_DEL
TRIGGER: RT_COSTTYPE
TRIGGER: RT_COSTTYPE
TRIGGER: RT_COSTTYPE_DEL
TRIGGER: RT_CURRTYPE
TRIGGER: RT_CURRTYPE
TRIGGER: RT_CURRTYPE_DEL
TRIGGER: RT_DASHBOARD
TRIGGER: RT_DASHBOARD
TRIGGER: RT_DASHBOARD_DEL
TRIGGER: RT_DASHUSER
TRIGGER: RT_DASHUSER
TRIGGER: RT_DASHUSER_DEL
TRIGGER: RT_DOCCATG
TRIGGER: RT_DOCCATG
TRIGGER: RT_DOCCATG_DEL
TRIGGER: RT_DOCSTAT
TRIGGER: RT_DOCSTAT
TRIGGER: RT_DOCSTAT_DEL
TRIGGER: RT_DOCUMENT
TRIGGER: RT_DOCUMENT
TRIGGER: RT_DOCUMENT_DEL
TRIGGER: RT_EXTAPP
TRIGGER: RT_EXTAPP
TRIGGER: RT_EXTAPP_DEL
TRIGGER: RT_EXPPROJ
TRIGGER: RT_EXPPROJ
TRIGGER: RT_EXPPROJ_DEL
TRIGGER: RT_FACTOR
TRIGGER: RT_FACTOR
TRIGGER: RT_FACTOR_DEL
TRIGGER: RT_FACTVAL
TRIGGER: RT_FACTVAL
TRIGGER: RT_FACTVAL_DEL
TRIGGER: RT_FILTPROP
TRIGGER: RT_FILTPROP
TRIGGER: RT_FILTPROP_DEL
TRIGGER: RT_FINDATES
TRIGGER: RT_FINDATES
TRIGGER: RT_FINDATES_DEL
TRIGGER: RT_FORMCATG
TRIGGER: RT_FORMCATG
TRIGGER: RT_FORMCATG_DEL
TRIGGER: RT_FORMPROJ
TRIGGER: RT_FORMPROJ
TRIGGER: RT_FORMPROJ_DEL
TRIGGER: RT_FORMTMPL
TRIGGER: RT_FORMTMPL
TRIGGER: RT_FORMTMPL_DEL
TRIGGER: RT_FUNDSRC
TRIGGER: RT_FUNDSRC
TRIGGER: RT_FUNDSRC_DEL
TRIGGER: RT_GCHANGE
TRIGGER: RT_GCHANGE
TRIGGER: RT_GCHANGE_DEL
TRIGGER: RT_ISSUHIST
TRIGGER: RT_ISSUHIST
TRIGGER: RT_ISSUHIST_DEL
TRIGGER: RT_ITERATION
TRIGGER: RT_ITERATION
TRIGGER: RT_ITERATION_DEL
TRIGGER: RT_ITERDAYS
TRIGGER: RT_ITERDAYS
TRIGGER: RT_ITERDAYS_DEL
TRIGGER: RT_ITERGOAL
TRIGGER: RT_ITERGOAL
TRIGGER: RT_ITERGOAL_DEL
TRIGGER: RT_JOBLOG
TRIGGER: RT_JOBLOG
TRIGGER: RT_JOBLOG_DEL
TRIGGER: RT_JOBSVC
TRIGGER: RT_JOBSVC
TRIGGER: RT_JOBSVC_DEL
TRIGGER: RT_JOBRPT
TRIGGER: RT_JOBRPT
TRIGGER: RT_JOBRPT_DEL
TRIGGER: RT_MEMOTYPE
TRIGGER: RT_MEMOTYPE
TRIGGER: RT_MEMOTYPE_DEL
TRIGGER: RT_NONWORK
TRIGGER: RT_NONWORK
TRIGGER: RT_NONWORK_DEL
TRIGGER: RT_NOTE
TRIGGER: RT_NOTE
TRIGGER: RT_NOTE_DEL
TRIGGER: RT_OBS
TRIGGER: RT_OBS
TRIGGER: RT_OBS_DEL
TRIGGER: RT_PCATTYPE
TRIGGER: RT_PCATTYPE
TRIGGER: RT_PCATTYPE_DEL
TRIGGER: RT_PCATUSER
TRIGGER: RT_PCATUSER
TRIGGER: RT_PCATUSER_DEL
TRIGGER: RT_PCATVAL
TRIGGER: RT_PCATVAL
TRIGGER: RT_PCATVAL_DEL
TRIGGER: RT_PFOLIO
TRIGGER: RT_PFOLIO
TRIGGER: RT_PFOLIO_DEL
TRIGGER: RT_PHASE
TRIGGER: RT_PHASE
TRIGGER: RT_PHASE_DEL
TRIGGER: RT_POBS
TRIGGER: RT_POBS
TRIGGER: RT_POBS_DEL
TRIGGER: RT_PREFER
TRIGGER: RT_PREFER
TRIGGER: RT_PREFER_DEL
TRIGGER: RT_PROFILE
TRIGGER: RT_PROFILE
TRIGGER: RT_PROFILE_DEL
TRIGGER: RT_PROCGROUP
TRIGGER: RT_PROCGROUP
TRIGGER: RT_PROCGROUP_DEL
TRIGGER: RT_PROCITEM
TRIGGER: RT_PROCITEM
TRIGGER: RT_PROCITEM_DEL
TRIGGER: RT_PROFPRIV
TRIGGER: RT_PROFPRIV
TRIGGER: RT_PROFPRIV_DEL
TRIGGER: RT_PROJCOST
TRIGGER: RT_PROJCOST
TRIGGER: RT_PROJCOST_DEL
TRIGGER: RT_PROJECT
TRIGGER: RT_PROJECT
TRIGGER: RT_PROJECT_DEL
TRIGGER: RT_PROJECT
TRIGGER: RT_PROJECT
TRIGGER: RT_PROJECT_DEL
TRIGGER: RT_PROJEST
TRIGGER: RT_PROJEST
TRIGGER: RT_PROJEST_DEL
TRIGGER: RT_PROJFUND
TRIGGER: RT_PROJFUND
TRIGGER: RT_PROJFUND_DEL
TRIGGER: RT_PROJISSU
TRIGGER: RT_PROJISSU
TRIGGER: RT_PROJISSU_DEL
TRIGGER: RT_PROJPCAT
TRIGGER: RT_PROJPCAT
TRIGGER: RT_PROJPCAT_DEL
TRIGGER: RT_PROJPROP
TRIGGER: RT_PROJPROP
TRIGGER: RT_PROJPROP_DEL
TRIGGER: RT_PROJRISK
TRIGGER: RT_PROJRISK
TRIGGER: RT_PROJRISK_DEL
TRIGGER: RT_PROJTHRS
TRIGGER: RT_PROJTHRS
TRIGGER: RT_PROJTHRS_DEL
TRIGGER: RT_PROJWBS
TRIGGER: RT_PROJWBS
TRIGGER: RT_PROJWBS_DEL
TRIGGER: RT_PROJWSRPT
TRIGGER: RT_PROJWSRPT
TRIGGER: RT_PROJWSRPT_DEL
TRIGGER: RT_PRPFOLIO
TRIGGER: RT_PRPFOLIO
TRIGGER: RT_PRPFOLIO_DEL
TRIGGER: RT_QUERYLIB
TRIGGER: RT_QUERYLIB
TRIGGER: RT_QUERYLIB_DEL
TRIGGER: RT_RCATTYPE
TRIGGER: RT_RCATTYPE
TRIGGER: RT_RCATTYPE_DEL
TRIGGER: RT_RCATVAL
TRIGGER: RT_RCATVAL
TRIGGER: RT_RCATVAL_DEL
TRIGGER: RT_REITTYPE
TRIGGER: RT_REITTYPE
TRIGGER: RT_REITTYPE_DEL
TRIGGER: RT_RELEASE
TRIGGER: RT_RELEASE
TRIGGER: RT_RELEASE_DEL
TRIGGER: RT_RELITEMS
TRIGGER: RT_RELITEMS
TRIGGER: RT_RELITEMS_DEL
TRIGGER: RT_RFOLIO
TRIGGER: RT_RFOLIO
TRIGGER: RT_RFOLIO_DEL
TRIGGER: RT_RISKCTRL
TRIGGER: RT_RISKCTRL
TRIGGER: RT_RISKCTRL_DEL
TRIGGER: RT_RISKTYPE
TRIGGER: RT_RISKTYPE
TRIGGER: RT_RISKTYPE_DEL
TRIGGER: RT_RLFOLIO
TRIGGER: RT_RLFOLIO
TRIGGER: RT_RLFOLIO_DEL
TRIGGER: RT_ROLFOLIO
TRIGGER: RT_ROLFOLIO
TRIGGER: RT_ROLFOLIO_DEL
TRIGGER: RT_ROLERATE
TRIGGER: RT_ROLERATE
TRIGGER: RT_ROLERATE_DEL
TRIGGER: RT_ROLELIMIT
TRIGGER: RT_ROLELIMIT
TRIGGER: RT_ROLELIMIT_DEL
TRIGGER: RT_ROLES
TRIGGER: RT_ROLES
TRIGGER: RT_ROLES_DEL
TRIGGER: RT_RPT
TRIGGER: RT_RPT
TRIGGER: RT_RPT_DEL
TRIGGER: RT_RPTBATCH
TRIGGER: RT_RPTBATCH
TRIGGER: RT_RPTBATCH_DEL
TRIGGER: RT_RPTGROUP
TRIGGER: RT_RPTGROUP
TRIGGER: RT_RPTGROUP_DEL
TRIGGER: RT_RPTLIST
TRIGGER: RT_RPTLIST
TRIGGER: RT_RPTLIST_DEL
TRIGGER: RT_RSRC
TRIGGER: RT_RSRC
TRIGGER: RT_RSRC_DEL
TRIGGER: RT_RSRCANDASH
TRIGGER: RT_RSRCANDASH
TRIGGER: RT_RSRCANDASH_DEL
TRIGGER: RT_RSRCANVIEW
TRIGGER: RT_RSRCANVIEW
TRIGGER: RT_RSRCANVIEW_DEL
TRIGGER: RT_RSRCCURV
TRIGGER: RT_RSRCCURV
TRIGGER: RT_RSRCCURV_DEL
TRIGGER: RT_RSRCHOUR
TRIGGER: RT_RSRCHOUR
TRIGGER: RT_RSRCHOUR_DEL
TRIGGER: RT_RSRCPROP
TRIGGER: RT_RSRCPROP
TRIGGER: RT_RSRCPROP_DEL
TRIGGER: RT_RSRCRATE
TRIGGER: RT_RSRCRATE
TRIGGER: RT_RSRCRATE_DEL
TRIGGER: RT_RSRCRCAT
TRIGGER: RT_RSRCRCAT
TRIGGER: RT_RSRCRCAT_DEL
TRIGGER: RT_RSRCROLE
TRIGGER: RT_RSRCROLE
TRIGGER: RT_RSRCROLE_DEL
TRIGGER: RT_RSRCSEC
TRIGGER: RT_RSRCSEC
TRIGGER: RT_RSRCSEC_DEL
TRIGGER: RT_RSRFOLIO
TRIGGER: RT_RSRFOLIO
TRIGGER: RT_RSRFOLIO_DEL
TRIGGER: RT_SCENARIO
TRIGGER: RT_SCENARIO
TRIGGER: RT_SCENARIO_DEL
TRIGGER: RT_SCENPROJ
TRIGGER: RT_SCENPROJ
TRIGGER: RT_SCENPROJ_DEL
TRIGGER: RT_SCENUSER
TRIGGER: RT_SCENUSER
TRIGGER: RT_SCENUSER_DEL
TRIGGER: RT_SCENROLE
TRIGGER: RT_SCENROLE
TRIGGER: RT_SCENROLE_DEL
TRIGGER: RT_SETTINGS
TRIGGER: RT_SETTINGS
TRIGGER: RT_SETTINGS_DEL
TRIGGER: RT_SHIFT
TRIGGER: RT_SHIFT
TRIGGER: RT_SHIFT_DEL
TRIGGER: RT_SHIFTPER
TRIGGER: RT_SHIFTPER
TRIGGER: RT_SHIFTPER_DEL
TRIGGER: RT_TASK
TRIGGER: RT_TASK
TRIGGER: RT_TASK_DEL
TRIGGER: RT_TASKACTV
TRIGGER: RT_TASKACTV
TRIGGER: RT_TASKACTV_DEL
TRIGGER: RT_TASKDOC
TRIGGER: RT_TASKDOC
TRIGGER: RT_TASKDOC_DEL
TRIGGER: RT_TASKFDBK
TRIGGER: RT_TASKFDBK
TRIGGER: RT_TASKFDBK_DEL
TRIGGER: RT_TASKFIN
TRIGGER: RT_TASKFIN
TRIGGER: RT_TASKFIN_DEL
TRIGGER: RT_TASKMEMO
TRIGGER: RT_TASKMEMO
TRIGGER: RT_TASKMEMO_DEL
TRIGGER: RT_TASKNOTE
TRIGGER: RT_TASKNOTE
TRIGGER: RT_TASKNOTE_DEL
TRIGGER: RT_TASKPRED
TRIGGER: RT_TASKPRED
TRIGGER: RT_TASKPRED_DEL
TRIGGER: RT_TASKPROC
TRIGGER: RT_TASKPROC
TRIGGER: RT_TASKPROC_DEL
TRIGGER: RT_TASKRSRC
TRIGGER: RT_TASKRSRC
TRIGGER: RT_TASKRSRC_DEL
TRIGGER: RT_TASKSUM
TRIGGER: RT_TASKSUM
TRIGGER: RT_TASKSUM_DEL
TRIGGER: RT_TASKSUMFIN
TRIGGER: RT_TASKSUMFIN
TRIGGER: RT_TASKSUMFIN_DEL
TRIGGER: RT_TASKUSER
TRIGGER: RT_TASKUSER
TRIGGER: RT_TASKUSER_DEL
TRIGGER: RT_TASKWKSP
TRIGGER: RT_TASKWKSP
TRIGGER: RT_TASKWKSP_DEL
TRIGGER: RT_THRSPARM
TRIGGER: RT_THRSPARM
TRIGGER: RT_THRSPARM_DEL
TRIGGER: RT_TIMESHT
TRIGGER: RT_TIMESHT
TRIGGER: RT_TIMESHT_DEL
TRIGGER: RT_TMPLCATG
TRIGGER: RT_TMPLCATG
TRIGGER: RT_TMPLCATG_DEL
TRIGGER: RT_TRAKVIEW
TRIGGER: RT_TRAKVIEW
TRIGGER: RT_TRAKVIEW_DEL
TRIGGER: RT_TRSRCFIN
TRIGGER: RT_TRSRCFIN
TRIGGER: RT_TRSRCFIN_DEL
TRIGGER: RT_TRSRCSUM
TRIGGER: RT_TRSRCSUM
TRIGGER: RT_TRSRCSUM_DEL
TRIGGER: RT_TRSRCSUMFN
TRIGGER: RT_TRSRCSUMFN
TRIGGER: RT_TRSRCSUMFN_DEL
TRIGGER: RT_TSDATES
TRIGGER: RT_TSDATES
TRIGGER: RT_TSDATES_DEL
TRIGGER: RT_TSDELEGATE
TRIGGER: RT_TSDELEGATE
TRIGGER: RT_TSDELEGATE_DEL
TRIGGER: RT_UDFCODE
TRIGGER: RT_UDFCODE
TRIGGER: RT_UDFCODE_DEL
TRIGGER: RT_UDFTYPE
TRIGGER: RT_UDFTYPE
TRIGGER: RT_UDFTYPE_DEL
TRIGGER: RT_UDFVALUE
TRIGGER: RT_UDFVALUE
TRIGGER: RT_UDFVALUE_DEL
TRIGGER: RT_UMEASURE
TRIGGER: RT_UMEASURE
TRIGGER: RT_UMEASURE_DEL
TRIGGER: RT_USERCOL
TRIGGER: RT_USERCOL
TRIGGER: RT_USERCOL_DEL
TRIGGER: RT_USERDATA
TRIGGER: RT_USERDATA
TRIGGER: RT_USERDATA_DEL
TRIGGER: RT_USERENG
TRIGGER: RT_USERENG
TRIGGER: RT_USERENG_DEL
TRIGGER: RT_USEROBS
TRIGGER: RT_USEROBS
TRIGGER: RT_USEROBS_DEL
TRIGGER: RT_USEROPEN
TRIGGER: RT_USEROPEN
TRIGGER: RT_USEROPEN_DEL
TRIGGER: RT_USROPNVAL
TRIGGER: RT_USROPNVAL
TRIGGER: RT_USROPNVAL_DEL
TRIGGER: RT_USERS
TRIGGER: RT_USERS
TRIGGER: RT_USERS_DEL
TRIGGER: RT_USERSET
TRIGGER: RT_USERSET
TRIGGER: RT_USERSET_DEL
TRIGGER: RT_USERWKSP
TRIGGER: RT_USERWKSP
TRIGGER: RT_USERWKSP_DEL
TRIGGER: RT_USESSION
TRIGGER: RT_USESSION
TRIGGER: RT_USESSION_DEL
TRIGGER: RT_VIEWPREF
TRIGGER: RT_VIEWPREF
TRIGGER: RT_VIEWPREF_DEL
TRIGGER: RT_VWPREFDASH
TRIGGER: RT_VWPREFDASH
TRIGGER: RT_VWPREFDASH_DEL
TRIGGER: RT_VWPREFDATA
TRIGGER: RT_VWPREFDATA
TRIGGER: RT_VWPREFDATA_DEL
TRIGGER: RT_VWPREFUSER
TRIGGER: RT_VWPREFUSER
TRIGGER: RT_VWPREFUSER_DEL
TRIGGER: RT_VIEWPROP
TRIGGER: RT_VIEWPROP
TRIGGER: RT_VIEWPROP_DEL
TRIGGER: RT_WBSBUDG
TRIGGER: RT_WBSBUDG
TRIGGER: RT_WBSBUDG_DEL
TRIGGER: RT_WBSMEMO
TRIGGER: RT_WBSMEMO
TRIGGER: RT_WBSMEMO_DEL
TRIGGER: RT_WBRSCAT
TRIGGER: RT_WBRSCAT
TRIGGER: RT_WBRSCAT_DEL
TRIGGER: RT_WBSRSRC
TRIGGER: RT_WBSRSRC
TRIGGER: RT_WBSRSRC_DEL
TRIGGER: RT_WBSRSRC_QTY
TRIGGER: RT_WBSRSRC_QTY
TRIGGER: RT_WBSRSRC_QTY_DEL
TRIGGER: RT_WBSSTEP
TRIGGER: RT_WBSSTEP
TRIGGER: RT_WBSSTEP_DEL
TRIGGER: RT_WKFLTMPL
TRIGGER: RT_WKFLTMPL
TRIGGER: RT_WKFLTMPL_DEL
TRIGGER: RT_WKFLUSER
TRIGGER: RT_WKFLUSER
TRIGGER: RT_WKFLUSER_DEL
TRIGGER: RT_WORKFLOW
TRIGGER: RT_WORKFLOW
TRIGGER: RT_WORKFLOW_DEL
TRIGGER: RT_WORKSPACE
TRIGGER: RT_WORKSPACE
TRIGGER: RT_WORKSPACE_DEL
: INITIALIZE_BACKGROUND_PROCS
: OBSPROJ_FULL_REBUILD
IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'UTIL_SETLIST' and type='P')
  DROP PROCEDURE UTIL_SETLIST

UTIL_SETLIST
CREATE PROCEDURE util_setlist(@psession_id int,@proj_list varchar(8000),@pret_val int OUTPUT,@pret_msg varchar(4000) OUTPUT )
as
  declare @proj_id int,@end int,@newlist varchar(8000), @cnt int
  set @newlist = @proj_list
  if len(@newlist)>0 
  begin
  set @end = patindex('%,%',@proj_list)
  set @cnt=0
  delete from pkxref where system_id=@psession_id and context_name='PROJLIST'
  begin TRY
  while @end > 0 
   begin
    set @proj_id = cast(substring(@newlist,1,@end-1) as int )
    set @cnt=@cnt+1
    set @newlist = substring(@newlist,@end+1,len(@newlist))
    insert into pkxref(system_id,context_name,pk1,pk2) values(@psession_id,'PROJLIST',@proj_id,@cnt)
    
    set @end = patindex('%,%',@newlist)
   end 
   set @proj_id = cast(@newlist as int)
   set @cnt=@cnt+1
  insert into pkxref(system_id,context_name,pk1,pk2) values(@psession_id,'PROJLIST',@proj_id,@cnt)
   set @pret_val=0
   set @pret_msg='Success:execute utl_setlist';
   
   end TRY
  BEGIN CATCH
    SELECT @pret_val=-1,@pret_msg=ERROR_MESSAGE() 
   END CATCH
end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'UTIL_GETNEXTLISTVAL' and type='P')
  DROP PROCEDURE UTIL_GETNEXTLISTVAL

UTIL_GETNEXTLISTVAL
CREATE PROCEDURE util_getnextlistval(@psession_id int,@proj_id int OUTPUT,@pret_msg varchar(4000) OUTPUT )
as
declare @cnt int 
select @cnt=count(*) from pkxref where system_id=@psession_id and context_name='PROJLIST'
if @cnt=0 
begin
  set @proj_id=-1;
  return
end
else
 begin
  select top(1) @proj_id=pk1 from pkxref where system_id=@psession_id and context_name='PROJLIST' and pk2=(select min(pk2) from pkxref)
  delete from pkxref where system_id=@psession_id and context_name='PROJLIST' and pk1=@proj_id
 end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'GET_FIRST_DAY_OF_QUARTER' and type='FN')
  DROP FUNCTION GET_FIRST_DAY_OF_QUARTER

GET_FIRST_DAY_OF_QUARTER
CREATE FUNCTION get_first_day_of_quarter
( @pInputDate    DATETIME )
RETURNS DATETIME
BEGIN    
DECLARE @vOutputDate  DATETIME    
SET @vOutputDate = CAST(YEAR(@pInputDate) AS VARCHAR(4)) +                       
CASE 
            WHEN MONTH(@pInputDate) IN ( 1,  2,  3) THEN '/01/01'                            
            WHEN MONTH(@pInputDate) IN ( 4,  5,  6) THEN '/04/01'                            
            WHEN MONTH(@pInputDate) IN ( 7,  8,  9) THEN '/07/01'                            
            WHEN MONTH(@pInputDate) IN (10, 11, 12) THEN '/10/01'                       
END    
RETURN @vOutputDate
END

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SETTINGS_READ_STRING' and type='P')
  DROP PROCEDURE SETTINGS_READ_STRING

SETTINGS_READ_STRING
CREATE PROCEDURE settings_read_string
(@result varchar(4000) OUTPUT, @pnamespace varchar(255)
,@pname varchar(255), @default_value varchar(4000) = ''
,@puser_id int = null)
AS
  SET NOCOUNT ON 
  if @puser_id is null 
    select @result = setting_value
    from settings
    where namespace = @pnamespace
    and setting_name = @pname;
  else
    select @result = setting_value
    from settings
    where namespace = @pnamespace
    and setting_name = @pname
    and user_id = @puser_id;

  if @@ROWCOUNT = 0 
     set @result = @default_value

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SETTINGS_READ_NUMBER' and type='P')
  DROP PROCEDURE SETTINGS_READ_NUMBER

SETTINGS_READ_NUMBER
CREATE PROCEDURE settings_read_number
(@result decimal(20,6) OUTPUT, @pnamespace varchar(255)
,@pname varchar(255), @default_value decimal(20,6) = null
,@puser_id int = null)
AS
  SET NOCOUNT ON 
  declare @sresult varchar(255), @sdefault varchar(255)
  set @sdefault = str(@default_value)
  exec settings_read_string @sresult OUTPUT,@pnamespace,@pname,@sdefault,@puser_id 
  set @result = cast(@sresult AS decimal(20,6))

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SETTINGS_READ_BOOL' and type='P')
  DROP PROCEDURE SETTINGS_READ_BOOL

SETTINGS_READ_BOOL
CREATE PROCEDURE settings_read_bool
(@result int OUTPUT, @pnamespace varchar(255)
,@pname varchar(255), @default_value int = 0
,@puser_id int = null)
AS
  SET NOCOUNT ON 
  declare @sresult varchar(255), @sdefault varchar(255)
  if @default_value > 0 
    set @sdefault = 'TRUE'
  else
    set @sdefault = 'FALSE'
    
  exec settings_read_string @sresult OUTPUT,@pnamespace,@pname,@sdefault,@puser_id 
  set @sresult = upper(@sresult)
  if @sresult = 'TRUE' or @sresult = 'T' 
     or @sresult = '1' or @sresult = 'Y'
     or @sresult = 'YES' or @sresult = 'ON'
    set @result = 1
  else
    set @result = 0


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SETTINGS_READ_DATE' and type='P')
  DROP PROCEDURE SETTINGS_READ_DATE

SETTINGS_READ_DATE
CREATE PROCEDURE settings_read_date
(@result datetime OUTPUT, @pnamespace varchar(255)
,@pname varchar(255), @default_value datetime = null
,@puser_id int = null)
AS
  SET NOCOUNT ON 
  declare @sresult varchar(255), @sdefault varchar(255)
  set @sdefault =  convert(varchar(30),@default_value,120)
  exec settings_read_string @sresult OUTPUT,@pnamespace,@pname,@sdefault,@puser_id 
  set @result = convert(datetime,@sresult,120)

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SETTINGS_WRITE_STRING' and type='P')
  DROP PROCEDURE SETTINGS_WRITE_STRING

SETTINGS_WRITE_STRING
CREATE PROCEDURE settings_write_string
(@pvalue varchar(4000) , @pnamespace varchar(255)
,@pname varchar(255), @puser_id int = null)
AS
  SET NOCOUNT ON 
  if @puser_id is null
    update settings 
    set setting_value = @pvalue
    where namespace = @pnamespace 
    and setting_name = @pname;
  else
    update settings 
    set setting_value = @pvalue
    where namespace = @pnamespace 
    and setting_name = @pname
    and user_id = @puser_id;

  if @@ROWCOUNT = 0 
    insert into settings (namespace,setting_name,setting_value,user_id)
    values(@pnamespace,@pname,@pvalue,@puser_id);

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SETTINGS_WRITE_NUMBER' and type='P')
  DROP PROCEDURE SETTINGS_WRITE_NUMBER

SETTINGS_WRITE_NUMBER
CREATE PROCEDURE settings_write_number
(@pvalue decimal(20,6) , @pnamespace varchar(255)
,@pname varchar(255), @puser_id int = null)
AS
  SET NOCOUNT ON 
  declare @nstr varchar(1000)
  set @nstr = ltrim(str(@pvalue))
  exec settings_write_string @nstr,@pnamespace,@pname,@puser_id

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SETTINGS_WRITE_BOOL' and type='P')
  DROP PROCEDURE SETTINGS_WRITE_BOOL

SETTINGS_WRITE_BOOL
CREATE PROCEDURE settings_write_bool
(@pvalue int,  @pnamespace varchar(255)
,@pname varchar(255), @puser_id int = null)
AS
  SET NOCOUNT ON 
  declare @boolstr varchar(5)
  if @pvalue > 0 
    set @boolstr = 'TRUE'
  else
    set @boolstr = 'FALSE'
  exec settings_write_string @boolstr,@pnamespace,@pname,@puser_id


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SETTINGS_WRITE_DATE' and type='P')
  DROP PROCEDURE SETTINGS_WRITE_DATE

SETTINGS_WRITE_DATE
CREATE PROCEDURE settings_write_date
(@pvalue datetime, @pnamespace varchar(255)
,@pname varchar(255), @puser_id int = null)
AS
  SET NOCOUNT ON 
  declare @datestr varchar(30);
  set @datestr =  convert(varchar(30),@pvalue,120)
  exec settings_write_string @datestr,@pnamespace,@pname,@puser_id


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'BGP_WRITE_TO_LOG' and type='P')
  DROP PROCEDURE BGP_WRITE_TO_LOG

BGP_WRITE_TO_LOG
CREATE PROCEDURE bgp_write_to_log 
  (@source varchar(255), @desc varchar(255), @type varchar(255) = 'INFORMATION'
   ,@error_ret int=null, @error_msg varchar(4000)=null,@pbegindate datetime=null)
AS
  declare @msg varchar(4000), @newtype varchar(255),@penddate datetime,@elatime integer
  set @penddate=getdate()
  if @type is not null
    set @newtype = @type
  else
     set @newtype = 'INFORMATION'
  if @error_ret is null 
    set @msg = @desc
  else
  begin
    if @error_ret < 0 
    begin
      set @msg = 'ERROR (' + ltrim(str(@error_ret)) + '): ' + 
               @error_msg + '(' + @desc + ')'
      set @newtype = 'ERROR'
    end
    else
    begin
      set @msg = @desc + ' (' + ltrim(str(@error_ret)) + ')'
      if @newtype is null 
        set @newtype = 'INFORMATION'
    end
  end
  if (@pbegindate is not null and @type = 'ELAPSED TIME') 
  begin
      set @elatime=DATEDIFF(SECOND,@pbegindate ,@penddate ) 
      set @msg= @msg + '-' + ltrim(STR(@elatime)) + ' Sec'
  end
  insert into bgplog (log_time, source, type, description)
  values (GetDate(),@source,@newtype,@msg)

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'CURRENT_SESSION' and type='FN')
  DROP FUNCTION CURRENT_SESSION

CURRENT_SESSION
create function current_session (@context varchar(20))
returns int
as
begin
  declare @sess_id int, @uid int
  if ( upper(@context) = 'SESSIONID' ) 
  begin
    set @sess_id=0
    select @sess_id=session_id from usession where spid=@@spid and delete_session_id is null
    return(@sess_id)
  end
  if ( upper(@context) = 'USERID' ) 
  begin
    set @uid=0
    select @uid=user_id from usession where spid=@@spid and delete_session_id is null
    return(@uid)
  end
  return(0)
end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'GET_INTERVAL_DIFFERENCE' and type='P')
  DROP PROCEDURE GET_INTERVAL_DIFFERENCE

GET_INTERVAL_DIFFERENCE
CREATE PROCEDURE get_interval_difference
(@interval_val varchar(10), @difference decimal(20,6) OUTPUT, @day_adjust decimal(20,6)=0.5)
AS
BEGIN
  declare @time_code varchar(1)
  declare @interval decimal(20,6), @scale decimal(20,6)
  set @time_code = substring(@interval_val,len(@interval_val),1)
  set @interval = convert(integer,substring(@interval_val,1,len(@interval_val)-1))
  if @time_code = 'm' 
    set  @scale = 1440
  else if @time_code = 's' 
    set  @scale = 86400
  else if @time_code = 'h' 
    set  @scale = 24
  else if @time_code = 'd'
  begin 
    set @difference = (@interval)-@day_adjust
    return
  end
  else
    RAISERROR('Invalid time code',10,1)

  set @difference=(@interval/@scale)

END

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'APPLY_ACTUALS_TASK' and type='P')
  DROP PROCEDURE APPLY_ACTUALS_TASK

APPLY_ACTUALS_TASK
create procedure APPLY_ACTUALS_TASK
(@task_id           int,
 @status_code       varchar(15),
 @act_start_date    datetime,
 @act_end_date      datetime,
 @restart_date      datetime,
 @reend_date        datetime,
 @target_start_date datetime,
 @target_end_date   datetime,
 @act_work_qty      float = 0,
 @remain_work_qty   float = 0,
 @act_equip_qty     float = 0,
 @remain_equip_qty  float = 0
)
as

  update task
  set    status_code         = @status_code,
         act_start_date      = @act_start_date,
         act_end_date        = @act_end_date,
         restart_date        = @restart_date,
         reend_date          = @reend_date,
         target_start_date   = @target_start_date,
         target_end_date     = @target_end_date,
         act_work_qty        = @act_work_qty,
         remain_work_qty     = @remain_work_qty,
         act_equip_qty       = @act_equip_qty,
         remain_equip_qty    = @remain_equip_qty
  where  task_id             = @task_id

return

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'APPLY_ACTUALS_TASKRSRC' and type='P')
  DROP PROCEDURE APPLY_ACTUALS_TASKRSRC

APPLY_ACTUALS_TASKRSRC
create procedure APPLY_ACTUALS_TASKRSRC
(@taskrsrc_id int,
 @target_start_date datetime,
 @target_end_date datetime,
 @restart_date datetime,
 @reend_date datetime,
 @act_start_date datetime,
 @act_end_date datetime,
 @act_reg_qty float = 0,
 @act_ot_qty float = 0,
 @remain_qty float = 0
)
as

  update taskrsrc
  set    target_start_date   = @target_start_date,
         target_end_date     = @target_end_date,
         restart_date        = @restart_date,
         reend_date          = @reend_date,
         act_start_date      = @act_start_date,
         act_end_date        = @act_end_date,
         act_reg_qty         = @act_reg_qty,
         act_ot_qty          = @act_ot_qty,
         remain_qty          = @remain_qty
  where  taskrsrc_id         = @taskrsrc_id

return

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'APPLY_ESTIMATE_TASK' and type='P')
  DROP PROCEDURE APPLY_ESTIMATE_TASK

APPLY_ESTIMATE_TASK
create procedure APPLY_ESTIMATE_TASK
(@task_id int,
 @reend_date datetime,
 @target_end_date datetime,
 @target_work_qty float = 0,
 @remain_work_qty float = 0,
 @target_equip_qty float = 0,
 @remain_equip_qty float = 0,
 @target_drtn_hr_cnt float = 0,
 @remain_drtn_hr_cnt float = 0
)

as

  update task
  set    reend_date          = @reend_date,
         target_end_date     = @target_end_date,
         target_work_qty     = @target_work_qty,
         remain_work_qty     = @remain_work_qty,
         target_equip_qty    = @target_equip_qty,
         remain_equip_qty    = @remain_equip_qty,
         target_drtn_hr_cnt  = @target_drtn_hr_cnt,
         remain_drtn_hr_cnt  = @remain_drtn_hr_cnt
  where  task_id             = @task_id

return

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'APPLY_ESTIMATE_TASKRSRC' and type='P')
  DROP PROCEDURE APPLY_ESTIMATE_TASKRSRC

APPLY_ESTIMATE_TASKRSRC
create procedure APPLY_ESTIMATE_TASKRSRC
(@taskrsrc_id int,
 @target_end_date datetime,
 @reend_date datetime,
 @target_qty float = 0,
 @target_qty_per_hr float = 0,
 @remain_qty float = 0,
 @remain_qty_per_hr float = 0
)
as

  update taskrsrc
  set    target_end_date    = @target_end_date,
         reend_date         = @reend_date,
         remain_qty         = @remain_qty,
         remain_qty_per_hr  = @remain_qty_per_hr,
         target_qty         = @target_qty,
         target_qty_per_hr  = @target_qty_per_hr
  where  taskrsrc_id        = @taskrsrc_id

return

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PROJSHAR_INSERT' and type='P')
  DROP PROCEDURE PROJSHAR_INSERT

PROJSHAR_INSERT
create procedure projshar_insert
  	@pwbs_id 	int,
	@paccess_level	int,
	@psession_id	int,
	@pret_val	int OUTPUT,
	@ppfolio_id	int = null
AS
  DECLARE wbsCur CURSOR LOCAL FOR 
     select wbs_id 
     from projwbs
     where parent_wbs_id = @pwbs_id 
     and proj_node_flag = 'Y'
     and delete_session_id is null

  DECLARE @lwbs_id int
  DECLARE @vproj_id int
  DECLARE @vorig_proj_id int
  DECLARE @vproj_flag varchar(1)
  DECLARE @acnt int

  select @vproj_id = p.proj_id,
	@vproj_flag = p.project_flag,
	@vorig_proj_id = p.orig_proj_id 
  from projwbs pw, project p
  where p.proj_id = pw.proj_id
  and wbs_id = @pwbs_id 
  and proj_node_flag = 'Y'
  and pw.delete_session_id is null and p.delete_session_id is null

  if @vproj_id is null 
  BEGIN
    set @pret_val = -3
    RETURN
  END
    

  set @pret_val = 0
--  if (@@NESTLEVEL = 1) 
--  BEGIN 
--    BEGIN TRANSACTION 
--  END 

  if @vproj_flag = 'Y' and @vorig_proj_id is null 
  BEGIN
    if @ppfolio_id is not null
    BEGIN
      select @acnt=count(*) from pfolio where pfolio_id = @ppfolio_id and delete_session_id is null;
      if @acnt = 1 
      BEGIN
        select @acnt=count(*) from prpfolio 
	where wbs_id = @pwbs_id
	and pfolio_id = @ppfolio_id
        and delete_session_id is null;
        if @acnt = 0 
          RETURN
      END
    END
    if @paccess_level >= 1
    BEGIN
      if @paccess_level = 1
      BEGIN
        select @acnt = count(*)
        from projshar
        where proj_id = @vproj_id
        and session_id <> @psession_id 
        and access_level = 2 

        if @acnt > 0 
        BEGIN
          set @pret_val = -2
          RETURN
        END

      END
      ELSE
      BEGIN
        select @acnt = count(*)
        from projshar
        where proj_id = @vproj_id
        and session_id <> @psession_id 
        and access_level > 0 

        if @acnt > 0 
        BEGIN
          set @pret_val = -2
          RETURN
        END
      END
    END

    -- Verify count and add to projshar
    select @acnt = count(*) 
    from projshar
    where proj_id = @vproj_id
    and session_id = @psession_id

    if @acnt = 0
    BEGIN
      insert into projshar (PROJ_ID, SESSION_ID, ACCESS_LEVEL, load_status ) 
      values (@vproj_id, @psession_id, @paccess_level, 'L' )  
    END
    else
    BEGIN
      update projshar 
	set ACCESS_LEVEL = @paccess_level, LOAD_status = 'L'
        where proj_id = @vproj_id and session_id = @psession_id;

    END
    RETURN
  END


  -- Do Recursion
  OPEN wbsCur
  FETCH NEXT FROM wbsCur INTO @lwbs_id
  WHILE (@@FETCH_STATUS = 0)
  BEGIN
    EXEC projshar_insert @lwbs_id, @paccess_level, @psession_id , @pret_val OUT, @ppfolio_id
    if @pret_val < 0 
    BEGIN
      BREAK
    END
    FETCH NEXT FROM wbsCur INTO @lwbs_id
  END
  CLOSE wbsCur
  DEALLOCATE wbsCur

--  if (@@NESTLEVEL = 1) 
--    if @pret_val = 0 
--      COMMIT TRANSACTION 
 

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PROJSHAR_INSERT_UPD' and type='P')
  DROP PROCEDURE PROJSHAR_INSERT_UPD

PROJSHAR_INSERT_UPD
create procedure projshar_insert_upd
	@psession_id	int,
	@pload_status	varchar,
	@pret_val	int OUTPUT 
AS

  update projshar
  set load_status = @pload_status
  where session_id = @psession_id
  and load_status <> @pload_status

  if ( @@ERROR <> 0 )
    set @pret_val = -1
  else
    set @pret_val = 0

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'POPULATE_UACCESS' and type='P')
  DROP PROCEDURE POPULATE_UACCESS

POPULATE_UACCESS
CREATE PROCEDURE populate_uaccess
        @puser_id INT,
        @pret_val INT OUTPUT,
        @padd_parents varchar(1) = 'N'
as
  set nocount on 
  declare @usr int, @vwbs_id int, @vparent_wbs_id int, @vproj_id int
  declare @ins_wbs_id int, @ins_proj_id int
  set @usr = @puser_id

  delete from uaccess 
  where user_id = @usr
  if ( @@ERROR <> 0 ) 
  BEGIN
    set @pret_val=-1
    RETURN
  END

  -- Insert all the direct nodes
  insert into uaccess (user_id,proj_id,access_flag,wbs_id,parent_wbs_id)
  select distinct @usr,o.proj_id,'Y',o.wbs_id
  ,(select pw.parent_wbs_id from projwbs pw where pw.wbs_id = o.wbs_id)
  from obsproj o
  where o.obs_id in (select obs_id from userobs where user_id =@usr and delete_session_id is null)

  if @padd_parents = 'Y'
  BEGIN
    create table #roots ( wbs_id int)
    insert into #roots
    select wbs_id from uaccess where user_id = @usr 
    and parent_wbs_id not in (select wbs_id from uaccess where user_id = @usr);

    select top 1 @vwbs_id=wbs_id from #roots
    while (select count(*) from #roots) > 0 
    BEGIN
      select @vparent_wbs_id=parent_wbs_id from projwbs where wbs_id = @vwbs_id and delete_session_id is null;
      while (@vparent_wbs_id is not null)
      BEGIN
        set @ins_wbs_id = @vparent_wbs_id
        select @vparent_wbs_id=parent_wbs_id, @vproj_id=proj_id from projwbs where wbs_id = @vparent_wbs_id and delete_session_id is null;
        if @@rowcount=0 BREAK
        if (select count(*) from uaccess where user_id = @usr and proj_id = @vproj_id) = 0 
          insert into uaccess (user_id,proj_id,access_flag,wbs_id,parent_wbs_id)
          values (@usr,@vproj_id,'N',@ins_wbs_id,null)
      END

      delete from #roots where wbs_id = @vwbs_id
      select top 1 @vwbs_id=wbs_id from #roots
    END
  END

  set @pret_val = 0


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'UACCESS_MAINTAIN_FOR_USER' and type='P')
  DROP PROCEDURE UACCESS_MAINTAIN_FOR_USER

UACCESS_MAINTAIN_FOR_USER
CREATE PROCEDURE uaccess_maintain_for_user
        (@puser_id INT,
        @pret_val INT OUTPUT,
        @padd_parents varchar(1) = 'N')
as
declare @ret int
EXEC populate_uaccess @puser_id,@pret_val,@padd_parents

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'UPDATE_TASKACTV' and type='P')
  DROP PROCEDURE UPDATE_TASKACTV

UPDATE_TASKACTV
create procedure UPDATE_TASKACTV
(
@task_id int, 
@actv_code_type_id int, 
@actv_code_id int
)
as

  update taskactv 
  set    actv_code_id      = @actv_code_id
  where  task_id           = @task_id 
  and    actv_code_type_id = @actv_code_type_id

return

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'GETNEXTKEYS' and type='P')
  DROP PROCEDURE GETNEXTKEYS

GETNEXTKEYS
CREATE PROCEDURE getnextkeys (
	@tabcol varchar(50) = 'TableColumn%',
        @nkeys integer = 'NumKeys%',
        @startkey integer OUTPUT
	 )
AS 
  BEGIN TRAN
    UPDATE nextkey SET key_seq_num = (key_seq_num + @nkeys) WHERE key_name = @tabcol
    SELECT @startkey=key_seq_num-@nkeys FROM nextkey WHERE key_name = @tabcol
  COMMIT

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'BRE_ADD' and type='P')
  DROP PROCEDURE BRE_ADD

BRE_ADD
CREATE PROCEDURE bre_add (
	@g varchar(50) = 'bre_id%',
	@i varchar(30) = 'ipaddr%',
	@c varchar(50) = 'config%',
        @ret varchar(80) OUTPUT,
	@s char(1) = 'A' )
AS 
insert into BRE_REGISTRY
  (bre_registry_id,ip_address,start_time,status_code, last_time, config_name)
  values (@g,@i,GETDATE(),@s,GETDATE(),@c)

SELECT @ret = 'BRE ' + @g + ' IS REGISTERED'

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'BRE_CHECKCHANGE' and type='P')
  DROP PROCEDURE BRE_CHECKCHANGE

BRE_CHECKCHANGE
CREATE PROCEDURE bre_checkChange (
        @guid varchar(50) = 'BRE_REG_ID%',
	@chng char(1) OUTPUT
	)
AS
DECLARE		@t varchar(1)
DECLARE		c1 CURSOR LOCAL  FOR select config_changed_flag from bre_registry 
			where config_changed_flag = 'Y' and bre_registry_id = @guid;
   BEGIN
		OPEN c1
		FETCH NEXT FROM c1 INTO @t
		IF @@FETCH_STATUS = 0 
     		BEGIN
			update bre_registry set config_changed_flag = 'N' where 
				bre_registry_id = @guid
			select @chng = 'Y'
		END
		ELSE
		BEGIN
			select @chng = 'N'
		END
		CLOSE c1
		DEALLOCATE c1
	RETURN
   END


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'BRE_REMOVE' and type='P')
  DROP PROCEDURE BRE_REMOVE

BRE_REMOVE
CREATE PROCEDURE bre_remove (
	@handle varchar(50) = 'bre_id%',
        @del_amount integer OUTPUT
	 )
AS 
SELECT @del_amount = count(*) from bre_registry where bre_registry_id = @handle
delete from bre_registry where bre_registry_id = @handle

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'BRE_KEEPALIVE' and type='P')
  DROP PROCEDURE BRE_KEEPALIVE

BRE_KEEPALIVE
CREATE PROCEDURE bre_keepalive (
	@handle varchar(50) = 'bre_id%',
        @ret varchar(80) OUTPUT
	 )
AS 
update bre_registry set last_time = GETDATE(), status_code = 'A'  where bre_registry_id = @handle
SELECT @ret = 'BRE TIME UPDATED'

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'BRE_PING' and type='P')
  DROP PROCEDURE BRE_PING

BRE_PING
CREATE PROCEDURE bre_ping (
	@tsec varchar(50) = 'timeout_secs%',
        @ret integer OUTPUT
	 )
AS 
DECLARE OldCursor CURSOR LOCAL  FOR SELECT bre_registry_id from bre_registry 
           where round(cast( (GETDATE() - last_time ) as numeric(18,6))*(60*60*24),0) > @tsec

DECLARE @CurPK varchar(50), @Tcount int

   select @Tcount = 0
OPEN OldCursor

FETCH NEXT FROM OldCursor into @CurPK
WHILE @@FETCH_STATUS = 0
BEGIN
   select @Tcount = @Tcount+1
   update bre_registry set torched_time = GETDATE(), status_code = 'T' where bre_registry_id = @CurPK
   FETCH NEXT FROM OldCursor
END
CLOSE OldCursor
DEALLOCATE OldCursor
SELECT @ret = @Tcount

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'COUNT_RSRC_LVLS' and type='P')
  DROP PROCEDURE COUNT_RSRC_LVLS

COUNT_RSRC_LVLS
CREATE PROCEDURE count_rsrc_lvls
(@start_id integer, @lvls integer OUTPUT )
AS 
SET NOCOUNT ON
CREATE TABLE #stack (lvlst int, clvl int)
BEGIN
select @lvls = 1
INSERT INTO #stack values (@start_id, 1)
WHILE (select count(*) from rsrc where parent_rsrc_id in (select lvlst from #stack where clvl = @lvls) 
      and delete_session_id is null) != 0
   BEGIN
      select @lvls = @lvls + 1
      INSERT INTO #stack select rsrc_id, @lvls from rsrc where parent_rsrc_id in 
           (select lvlst from #stack where clvl = (@lvls-1))
           and delete_session_id is null ;
      DELETE FROM #stack where clvl = (@lvls-1)
   END
END

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'GET_RSRC_ASSOC_TYPES' and type='P')
  DROP PROCEDURE GET_RSRC_ASSOC_TYPES

GET_RSRC_ASSOC_TYPES
CREATE PROCEDURE get_rsrc_assoc_types
(@rsrc_id numeric(10), @types varchar(300) OUTPUT)
AS
  SET NOCOUNT ON
  CREATE TABLE #rsrctree (rsrc int, lvls int)
  DECLARE @lvl int
  DECLARE @rid numeric(10)
  DECLARE @lt int
  DECLARE @typl varchar(300)
BEGIN
  insert into #rsrctree values (@rsrc_id, 1)
  select @lvl = 1
  select @typl = ''

  WHILE (select count(*) from rsrc where parent_rsrc_id in (select rsrc from 
                               #rsrctree where lvls = @lvl) and delete_session_id is null) != 0
   BEGIN
      select @lvl = @lvl + 1
      INSERT INTO #rsrctree select rsrc_id, @lvl from rsrc where parent_rsrc_id in 
           (select rsrc from #rsrctree where lvls = (@lvl-1)) and delete_session_id is null 
   END

  if exists  ( select rsrc_id from  TASKRSRC
        WHERE rsrc_id in ( select rsrc from #rsrctree) and delete_session_id is null)
      select @typl = @typl + ',TASKRSRC'

  if exists  ( select rsrc_id from  PROJEST
        WHERE rsrc_id in ( select rsrc from #rsrctree) and delete_session_id is null)
      select @typl = @typl + ',PROJEST'

  if exists  ( select rsrc_id from  PROJRISK
        WHERE rsrc_id in ( select rsrc from #rsrctree) and delete_session_id is null)
     select @typl = @typl + ',PROJRISK'

  if exists  ( select rsrc_id from  PROJISSU
        WHERE rsrc_id in ( select rsrc from #rsrctree) and delete_session_id is null)
     select @typl = @typl + ',PROJISSU'

  if exists  ( select rsrc_id from  TIMESHT
        WHERE rsrc_id in ( select rsrc from #rsrctree) and delete_session_id is null)
     select @typl = @typl + ',TIMESHT'

  if exists  ( select rsrc_id from  RSRFOLIO
        WHERE rsrc_id in ( select rsrc from #rsrctree) and delete_session_id is null)
     select @typl = @typl + ',RSRFOLIO'

  if exists ( select rsrc_id from TASKRSRC 
        where act_reg_qty + act_ot_qty > 0
    and rsrc_id in ( select rsrc from #rsrctree) and delete_session_id is null)
      select @typl = @typl + ',TSACTUALS'

  if exists  ( select rsrc_id from  PROJECT
        WHERE rsrc_id in ( select rsrc from #rsrctree) and delete_session_id is null)
     select @typl = @typl + ',PROJECT'

  if exists  ( select rsrc_id from  DOCUMENT
        WHERE rsrc_id in ( select rsrc from #rsrctree) and delete_session_id is null)
     select @typl = @typl + ',DOCUMENT'

  if exists  ( select rsrc_id from  WBSRSRC
        WHERE rsrc_id in ( select rsrc from #rsrctree) and delete_session_id is null)
     select @typl = @typl + ',WBSRSRC'
   
  select @lt = len(@typl) - 1
  IF @lt > 1 
  begin
     select @types = substring(@typl,2,@lt)
  end
END

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'BITWISE_LSHIFT' and type='P')
  DROP PROCEDURE BITWISE_LSHIFT

BITWISE_LSHIFT
create procedure bitwise_lshift
	@p_value int, @p_times tinyint = 1, @pret int OUTPUT
as
  select @pret = @p_value * ( power( 2, @p_times) )

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'BITWISE_RSHIFT' and type='P')
  DROP PROCEDURE BITWISE_RSHIFT

BITWISE_RSHIFT
create procedure bitwise_rshift
	@p_value int, @p_times tinyint = 1, @pret int OUTPUT
as
  select @pret = @p_value / ( power( 2, @p_times) )

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'MIME_ENCODE_CHAR' and type='P')
  DROP PROCEDURE MIME_ENCODE_CHAR

MIME_ENCODE_CHAR
create procedure mime_encode_char
	@c tinyint, @char char(1) OUTPUT
as
select @char =
  CASE
  when @c < 26 then char(ASCII('A')+@c)
  when @c < 52 then char(ASCII('a')+(@c-26) )
  when @c < 62 then char(ASCII('0')+(@c-52) )
  when @c = 62 then '+'
  else '/'
  end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'MIME_ENCODE' and type='P')
  DROP PROCEDURE MIME_ENCODE

MIME_ENCODE
create procedure mime_encode
	@pbuf		varchar(8000),
	@padding	varchar(1)= 'N',
	@pEncStr	varchar(8000) OUTPUT 
as
  declare @i int, @k int, @n int, @n3byt int, @nrest int
  declare @b0 char, @b1 char, @b2 char, @b3 char 
  declare @d0 tinyint, @d1 tinyint,  @d2 tinyint,  @d3 tinyint 
  declare @av0 tinyint, @av1 tinyint, @av2 tinyint
  set @pEncStr =  ''
  set @n=len(@pbuf) set @n3byt=@n/3 set @nrest=@n%3 set @k=@n3byt * 3
  set @i=0
  while @i<@k
  begin
    set @av0 = ASCII( substring( @pbuf, @i+1, 1 ) ) & 252
    exec bitwise_rshift  @av0  , 2, @av0 OUTPUT
    exec mime_encode_char @av0, @b0 OUTPUT
    set @av0 = ASCII( substring( @pbuf, @i+1, 1 ) ) & 3
    exec bitwise_lshift  @av0  , 4, @av0 OUTPUT
    set @av1 = ASCII( substring( @pbuf, @i+2, 1 ) )  & 240
    exec bitwise_rshift  @av1  , 4, @av1 OUTPUT
    set @av1=@av0|@av1
    exec mime_encode_char @av1, @b1 OUTPUT

    set @av1 = ASCII( substring( @pbuf, @i+2, 1 ) )  & 15
    exec bitwise_lshift  @av1  , 2, @av1 OUTPUT
    set @av2 = ASCII( substring( @pbuf, @i+3, 1 ) )  & 192
    exec bitwise_rshift  @av2  , 6, @av2 OUTPUT
    set @av2=@av1|@av2
    exec mime_encode_char @av2, @b2 OUTPUT
    set @av2 = ASCII( substring( @pbuf, @i+3, 1 ) )  & 63
    exec mime_encode_char @av2, @b3 OUTPUT
  
    set @pEncStr = @pEncStr +@b0+@b1+@b2+@b3
    set @i=@i+3
  end			-- end while loop

  if @nrest = 2
  begin
    set @av0 = ASCII( substring( @pbuf, @k+1, 1 ) ) & 252
    exec bitwise_rshift  @av0  , 2, @av0 OUTPUT
    exec mime_encode_char @av0, @b0 OUTPUT

    set @av0 = ASCII( substring( @pbuf, @k+1, 1 ) ) & 3
    exec bitwise_lshift  @av0  , 4, @av0 OUTPUT
    set @av1 = ASCII( substring( @pbuf, @k+2, 1 ) )  & 240
    exec bitwise_rshift  @av1  , 4, @av1 OUTPUT
    set @av1=@av0|@av1
    exec mime_encode_char @av1, @b1 OUTPUT

    set @av1 = ASCII( substring( @pbuf, @k+2, 1 ) )  & 15
    exec bitwise_lshift  @av1  , 2, @av1 OUTPUT
    exec mime_encode_char @av1, @b2 OUTPUT
    set @pEncStr = @pEncStr +@b0+@b1+@b2
    if @padding ='Y' 
      set @pEncStr = @pEncStr + '='
  end
  else if @nrest = 1 
  begin
    set @av0 = ASCII( substring( @pbuf, @k+1, 1 ) ) & 252
    exec bitwise_rshift  @av0  , 2, @av0 OUTPUT
    exec mime_encode_char @av0, @b0 OUTPUT

    set @av0 = ASCII( substring( @pbuf, @k+1, 1 ) ) & 3
    exec bitwise_lshift  @av0  , 4, @av0 OUTPUT
    exec mime_encode_char @av0, @b1 OUTPUT
    set @pEncStr = @pEncStr +@b0+@b1
    if @padding ='Y' 
      set @pEncStr = @pEncStr + '=='
  end


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'GET_GUID' and type='P')
  DROP PROCEDURE GET_GUID

GET_GUID
create procedure get_guid
	@EncGUID	varchar(22) OUTPUT
as
  declare @sGUID varchar(32), @i int, @buf varchar(16), @EncStr varchar(22)
  declare @hexstr varchar(4), @cmdstr nvarchar(255), @intval int
  set @sGUID = replace ( convert( varchar(36), newid()) , '-','')
  set @i = 1
  set @buf=''
  while @i < len(@sGUID)
  begin
    select @hexstr = '0x' + substring(@sGUID,@i,2)
    Select @cmdstr = N'Select @intval = convert( int , ' + @hexstr + ' )'
    Exec sp_ExecuteSql @cmdstr, N'@intval Int Out', @intval Out
    set @buf=@buf  + char(@intval)
    set @i=@i+2
  end
  exec mime_encode @pbuf=@buf, @pEncStr=@EncGUID OUTPUT
  --bug fix 7551.If sguid has space at the end the guid is 20 characters 
  if len(@EncGUID)=20
    set @EncGUID=@EncGUID+'IA'
  else if len(@EncGUID)<20
    set @EncGUID=null

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PC_GET_NEXT_KEY' and type='P')
  DROP PROCEDURE PC_GET_NEXT_KEY

PC_GET_NEXT_KEY
create procedure pc_get_next_key
	@pkey_name	varchar(30),
	@pseq_num	integer OUTPUT
as
  begin transaction
  update nextkey set key_seq_num = key_seq_num + 1 where key_name=@pkey_name
  if @@error > 0 or @@rowcount <> 1 
    return 

  select @pseq_num=key_seq_num-1 from nextkey where key_name=@pkey_name
  commit transaction

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PC_INSERT_UDF' and type='P')
  DROP PROCEDURE PC_INSERT_UDF

PC_INSERT_UDF
create procedure pc_insert_udf
	@ptable_name varchar(30), 
	@pfk integer,
        @pnew_fk integer,
	@pnew_proj_id integer
as
  insert into udfvalue (udf_type_id, fk_id, proj_id, udf_date,udf_text,udf_number,udf_code_id, table_name)   
  select ut.udf_type_id, @pnew_fk, @pnew_proj_id, udf_date, udf_text, udf_number,udf_code_id, ut.table_name 
  from udfvalue uv, udftype ut   
  where ut.table_name = upper(@ptable_name)   
  and uv.udf_type_id = ut.udf_type_id   
  and ut.super_flag = 'N'   
  and uv.fk_id = @pfk   
  and uv.delete_session_id is null 
  and ut.delete_session_id is null 

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PC_NEW_PROJ_SHORT_NAME' and type='P')
  DROP PROCEDURE PC_NEW_PROJ_SHORT_NAME

PC_NEW_PROJ_SHORT_NAME
create procedure pc_new_proj_short_name
	@pproj_id		integer,
	@pnew_short_name	varchar(40) OUTPUT,
	@pbaseline		integer = 0,
    @pbaseline_suffix   varchar(10) = ' - B'
as
declare @pos integer, @pidx integer, @v_proj_suffix varchar(8)
declare @vold_short_name varchar(40), @vnoSuf varchar(40), @vcnt integer
declare @vSuffTerm varchar(10), @vSuffSearch varchar(12)
declare @vorig_proj_id integer 
set @vorig_proj_id=null
if @pbaseline = 1 
  set @vSuffTerm = @pbaseline_suffix
ELSE
  set @vSuffTerm = '-' 

set @vold_short_name=null
set @vSuffSearch = '%' + @vSuffTerm + '%'
select @vold_short_name=proj_short_name,@vorig_proj_id=orig_proj_id from project where proj_id = @pproj_id and delete_session_id is null 
if @vold_short_name is null
  return
 if @vorig_proj_id is not null and @pbaseline=1
  begin
    set @vold_short_name=substring(@vold_short_name,1,patindex(@vSuffSearch,@vold_short_name)-1)
  end
set @pos=len(@vold_short_name)
set @vNoSuf=@vold_short_name
while (@pos <> 0 ) 
begin
 set @pidx =  patindex(@vSuffSearch,substring(@vold_short_name,@pos,1) ) 
 if @pidx = 1 
 begin
   if IsNumeric ( substring(@vold_short_name,@pos+1,len(@vold_short_name) )  )  =1 
     set @vNoSuf = substring(@vold_short_name,1, @pos-1) 
   else
     set @vNoSuf = @vold_short_name 
   break
 end 
set @pos=@pos-1
end
set @pos=1
while (@pos <= 9999 )
begin
  set @v_proj_suffix =   @vSuffTerm + convert(varchar(10),@pos)
  if len( @vNoSuf + @v_proj_suffix ) > 40
   set @pnew_short_name = substring( @vNoSuf,1,40-len(@v_proj_suffix) )+ @v_proj_suffix
  else
    set @pnew_short_name =  @vNoSuf + @v_proj_suffix 
  select @vcnt=count(*) from project where proj_short_name= @pnew_short_name
  if @vcnt = 0
  BEGIN
    return
  END 
  set @pos=@pos+1
end
print @pos
set @pnew_short_name=null


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PC_ACTVCODE_COPY' and type='P')
  DROP PROCEDURE PC_ACTVCODE_COPY

PC_ACTVCODE_COPY
create procedure pc_actvcode_copy
	@pold_type_id	integer,
	@pold_code_id	integer,
	@pnew_type_id	integer,
	@pnew_code_id	integer,
	@pnew_proj_id	integer,
	@pret_val	integer OUTPUT
as
  DECLARE @new_actv_code_id integer, @vret integer, @old_actv_code_id integer
  DECLARE acodes CURSOR LOCAL FOR
  SELECT actv_code_id 
  FROM actvcode
  where actv_code_type_id = @pold_type_id
  and ISNULL(parent_actv_code_id, -1 ) = ISNULL( @pold_code_id , -1) 
  and delete_session_id is null
  OPEN acodes
  FETCH acodes INTO @old_actv_code_id
  WHILE (@@FETCH_STATUS = 0)
  BEGIN
    exec pc_get_next_key 'actvcode_actv_code_id', @new_actv_code_id OUTPUT
    insert into actvcode 
       (ACTV_CODE_ID,ACTV_CODE_TYPE_ID,SEQ_NUM,SHORT_NAME,PARENT_ACTV_CODE_ID
         ,ACTV_CODE_NAME,COLOR)
    select @new_actv_code_id,@pnew_type_id,SEQ_NUM,SHORT_NAME
		,@pnew_code_id
         ,ACTV_CODE_NAME,color
    FROM actvcode
    WHERE actv_code_id = @old_actv_code_id

    exec pc_actvcode_copy @pold_type_id, @old_actv_code_id,
			@pnew_type_id, @new_actv_code_id
				, @pnew_proj_id
				, @vret OUTPUT

    if @vret <> 0
    begin
      set @pret_val = -1 
      return
    end
    UPDATE taskactv
    set actv_code_type_id = @pnew_type_id, actv_code_id = @new_actv_code_id
    WHERE proj_id = @pnew_proj_id
    AND actv_code_type_id = @pold_type_id
    AND actv_code_id = @old_actv_code_id

    FETCH acodes INTO @old_actv_code_id

  END
  CLOSE acodes
  DEALLOCATE acodes




IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PC_ACTVTYPE_COPY' and type='P')
  DROP PROCEDURE PC_ACTVTYPE_COPY

PC_ACTVTYPE_COPY
create procedure pc_actvtype_copy
	@pold_proj_id	integer,
	@pnew_proj_id	integer,
	@pret_val	integer OUTPUT,
	@pret_msg	varchar(4000) OUTPUT
as
  DECLARE @old_actv_code_type_id integer, @new_actv_code_type_id integer, @vret integer, @v_current_scope varchar(10)
  declare @vcreate_new_code bit, @v_new_wbs_id integer, @v_code_wbs_id integer, @v_scope varchar(10), @v_code_proj_id integer
  declare @has_access bit
  DECLARE pcodes CURSOR LOCAL FOR
    select at.actv_code_type_id, at.actv_code_type_scope, at.proj_id
    from actvtype at
    where proj_id = @pold_proj_id and actv_code_type_scope = 'AS_Project'
    and super_flag ='N'
    and delete_session_id is null
    union
    select at.actv_code_type_id, at.actv_code_type_scope, at.proj_id
    from actvtype at, taskactv ta
    where ta.proj_id = @pnew_proj_id
    and at.actv_code_type_id = ta.actv_code_type_id
    and at.actv_code_type_scope = 'AS_EPS'


  OPEN pcodes
  FETCH pcodes INTO @old_actv_code_type_id, @v_current_scope, @v_code_proj_id
  WHILE (@@FETCH_STATUS = 0)
  BEGIN
    set @vcreate_new_code = 0
    if @v_current_scope = 'AS_Project' 
    BEGIN
      set @vcreate_new_code = 1
      set @v_scope = @v_current_scope
    END
    ELSE
    BEGIN
      select @v_new_wbs_id = wbs_id
      from projwbs
      where proj_id = @pnew_proj_id 
      and proj_node_flag = 'Y';

      select  @v_code_wbs_id = wbs_id
      from projwbs
      where proj_id = @v_code_proj_id
      and proj_node_flag = 'Y';

      exec pc_has_eps_code_access @v_code_wbs_id, @v_new_wbs_id, @has_access OUTPUT
      if @has_access = 1 
        set @vcreate_new_code = 0
      else
        set @vcreate_new_code = 1

      set @v_scope = 'AS_Project';
    END

    if @vcreate_new_code = 1 
    BEGIN
      exec pc_get_next_key 'actvtype_actv_code_type_id', @new_actv_code_type_id OUTPUT
      insert into actvtype 
        (ACTV_CODE_TYPE_ID,ACTV_SHORT_LEN,SEQ_NUM,ACTV_CODE_TYPE,ACTV_CODE_TYPE_SCOPE   
	,PROJ_ID,SUPER_FLAG)
      select @new_actv_code_type_id, ACTV_SHORT_LEN,SEQ_NUM,ACTV_CODE_TYPE,@v_scope
	,@pnew_proj_id,SUPER_FLAG
      FROM actvtype
      WHERE actv_code_type_id = @old_actv_code_type_id

      exec pc_actvcode_copy @old_actv_code_type_id, null, 
			@new_actv_code_type_id, null, @pnew_proj_id, @vret OUTPUT

      if @vret <> 0
      begin
        set @pret_val = -1 
        set @pret_msg = 'Copy actvity codes failed'
        return
      end
    END

    FETCH pcodes INTO @old_actv_code_type_id, @v_current_scope, @v_code_proj_id
  END
  CLOSE pcodes
  DEALLOCATE pcodes
  set @pret_val = 0

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PC_TASKPRED_COPY' and type='P')
  DROP PROCEDURE PC_TASKPRED_COPY

PC_TASKPRED_COPY
create procedure pc_taskpred_copy
	@pwork_id	integer,
	@copy_bit	varchar(30),
	@pret_val	integer OUTPUT,
	@pret_msg	varchar(4000) OUTPUT
as
  DECLARE @tp_task_pred_id integer, @tp_proj_id integer, @tp_task_id integer
  DECLARE @tp_pred_proj_id integer, @tp_pred_task_id integer, @tp_pred_type varchar(12)
  DECLARE @tp_lag_hr_cnt numeric(10,2), @bin_copied bit, @vid integer
  DECLARE @vproj_id integer, @vtask_id integer, @vpred_proj_id integer, @vpred_task_id integer
  DECLARE @do_copy integer
  DECLARE tpc CURSOR FOR 
  select tp.task_pred_id,
        tp.proj_id,
	tp.task_id,
        tp.pred_proj_id,
	tp.pred_task_id,
	tp.pred_type,
	tp.lag_hr_cnt
    from taskpred tp, pkxref tpc
    where 
    (tp.pred_proj_id = tpc.old_pk1 and tp.pred_task_id = tpc.old_pk2 )
    and system_id = @pwork_id
    and context_name = 'T'
    and delete_session_id is null
    union
  select  tp.task_pred_id,
        tp.proj_id,
	tp.task_id,
        tp.pred_proj_id,
	tp.pred_task_id,
	tp.pred_type,
	tp.lag_hr_cnt
    from taskpred tp, pkxref tpc
    where 
    ( tp.proj_id = tpc.old_pk1 and tp.task_id = tpc.old_pk2 )
    and system_id = @pwork_id
    and context_name = 'T'
    and delete_session_id is null
  order by 1

  OPEN tpc   
  FETCH tpc INTO @tp_task_pred_id, @tp_proj_id, @tp_task_id, @tp_pred_proj_id, @tp_pred_task_id, @tp_pred_type, @tp_lag_hr_cnt
  WHILE (@@FETCH_STATUS = 0)
  BEGIN
    set @bin_copied = 1
    set @do_copy = 1
    select @vproj_id = proj_id
    from project
    where proj_id = @tp_proj_id
    and orig_proj_id is null;
    if @@ROWCOUNT = 0 
    begin
      set @do_copy=0
    end    
    select @vproj_id = proj_id
    from project
    where proj_id = @tp_pred_proj_id
    and orig_proj_id is null;
    if @@ROWCOUNT = 0 
    begin
      set @do_copy=0
    end 
    if substring(@copy_bit,17,1)='1'
    begin
      set @do_copy=1
    end 
      
    select @vtask_id=pk2, @vproj_id=pk1
    from pkxref
    where old_pk1 = @tp_proj_id
         and old_pk2 = @tp_task_id
         and system_id = @pwork_id
         and context_name = 'T'
    if @@ROWCOUNT = 0 
    begin
      set @vtask_id=@tp_task_id
      set @vproj_id=@tp_proj_id
      set @bin_copied= 0
    end

    select @vpred_task_id=pk2, @vpred_proj_id=pk1
    from pkxref
    where old_pk1 = @tp_pred_proj_id
         and old_pk2 = @tp_pred_task_id
         and system_id = @pwork_id
         and context_name = 'T'
    if @@ROWCOUNT = 0 
    begin
      set @vpred_task_id=@tp_pred_task_id
      set @vpred_proj_id=@tp_pred_proj_id
      set @bin_copied= 0
    end
    if ( @do_copy = 1 ) 
    begin
      if ( not substring(@copy_bit,18,1)='1' ) or
	(substring(@copy_bit,18,1)='1' and @bin_copied = 1 ) 
      begin
         exec pc_get_next_key 'taskpred_task_pred_id', @vid OUTPUT
         insert into taskpred (task_pred_id, task_id, pred_task_id,
			proj_id, pred_proj_id, pred_type, lag_hr_cnt)
         values ( @vid , @vtask_id, @vpred_task_id,
		@vproj_id, @vpred_proj_id, @tp_pred_type, 
		@tp_lag_hr_cnt  )

      end
    end
    FETCH tpc INTO @tp_task_pred_id, @tp_proj_id, @tp_task_id, @tp_pred_proj_id, @tp_pred_task_id, @tp_pred_type, @tp_lag_hr_cnt

  END
  CLOSE tpc
  DEALLOCATE tpc
  set @pret_val = 0

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PC_TASKS_BY_WBS' and type='P')
  DROP PROCEDURE PC_TASKS_BY_WBS

PC_TASKS_BY_WBS
create procedure pc_tasks_by_wbs
	@pproj_id		integer,
	@pwbs_id		integer,
	@pold_wbs_id		integer,
	@copy_bit		varchar(30),
	@pret_val		integer OUTPUT,
	@pret_msg		varchar(4000) OUTPUT
as
  DECLARE @v_new_task_id integer, @vcnt integer, @vid integer, @vOldId integer, @vOldDocId integer
  DECLARE @ptask_id integer,@vguid varchar(22), @pwork_id integer, @new_doc_id integer

  select @pwork_id=@@SPID

  DECLARE tasks CURSOR FOR 
  select task_id 
  from task
  where wbs_id  = @pold_wbs_id 
  and delete_session_id is null
  order by task_id
  OPEN tasks
  FETCH NEXT FROM tasks INTO @ptask_id
  WHILE (@@FETCH_STATUS = 0)
  BEGIN
    if substring(@copy_bit,19,1)='1'
      set @vguid = null
    else
      exec  get_guid @vguid OUTPUT
    exec pc_get_next_key 'task_task_id', @v_new_task_id OUTPUT
    insert into task 
	(TASK_ID,PROJ_ID,WBS_ID,CLNDR_ID,EST_WT,PHYS_COMPLETE_PCT,REV_FDBK_FLAG         
	,LOCK_PLAN_FLAG,AUTO_COMPUTE_ACT_FLAG,COMPLETE_PCT_TYPE,TASK_TYPE              
	,DURATION_TYPE,REVIEW_TYPE,STATUS_CODE,TASK_CODE,TASK_NAME,RSRC_ID             
	,TOTAL_FLOAT_HR_CNT,FREE_FLOAT_HR_CNT,REMAIN_DRTN_HR_CNT,ACT_WORK_QTY          
	,REMAIN_WORK_QTY,TARGET_WORK_QTY,TARGET_DRTN_HR_CNT,TARGET_EQUIP_QTY           
	,ACT_EQUIP_QTY,REMAIN_EQUIP_QTY,CSTR_DATE,ACT_START_DATE,ACT_END_DATE          
	,LATE_START_DATE,LATE_END_DATE,EXPECT_END_DATE,EARLY_START_DATE                
	,EARLY_END_DATE,RESTART_DATE,REEND_DATE,TARGET_START_DATE,TARGET_END_DATE      
	,REVIEW_END_DATE,REM_LATE_START_DATE,REM_LATE_END_DATE,CSTR_TYPE               
	,PRIORITY_TYPE,GUID,TMPL_GUID,CSTR_DATE2,CSTR_TYPE2,FLOAT_PATH                 
	,FLOAT_PATH_ORDER,ACT_THIS_PER_WORK_QTY,ACT_THIS_PER_EQUIP_QTY                 
	,DRIVING_PATH_FLAG,SUSPEND_DATE,RESUME_DATE,EXTERNAL_EARLY_START_DATE          
	,EXTERNAL_LATE_END_DATE)
      select @v_new_task_id, 
		@pproj_id, @pwbs_id
	,CLNDR_ID,EST_WT,PHYS_COMPLETE_PCT,REV_FDBK_FLAG         
	,LOCK_PLAN_FLAG,AUTO_COMPUTE_ACT_FLAG,COMPLETE_PCT_TYPE,TASK_TYPE              
	,DURATION_TYPE,REVIEW_TYPE,STATUS_CODE,TASK_CODE,TASK_NAME,RSRC_ID             
	,TOTAL_FLOAT_HR_CNT,FREE_FLOAT_HR_CNT,REMAIN_DRTN_HR_CNT,ACT_WORK_QTY          
	,REMAIN_WORK_QTY,TARGET_WORK_QTY,TARGET_DRTN_HR_CNT,TARGET_EQUIP_QTY           
	,ACT_EQUIP_QTY,REMAIN_EQUIP_QTY,CSTR_DATE,ACT_START_DATE,ACT_END_DATE          
	,LATE_START_DATE,LATE_END_DATE,EXPECT_END_DATE,EARLY_START_DATE                
	,EARLY_END_DATE,RESTART_DATE,REEND_DATE,TARGET_START_DATE,TARGET_END_DATE      
	,REVIEW_END_DATE,REM_LATE_START_DATE,REM_LATE_END_DATE,CSTR_TYPE               
	,PRIORITY_TYPE
	,CASE WHEN @vguid is null THEN GUID ELSE @vguid END		
	,TMPL_GUID,CSTR_DATE2,CSTR_TYPE2,FLOAT_PATH                 
	,FLOAT_PATH_ORDER,ACT_THIS_PER_WORK_QTY,ACT_THIS_PER_EQUIP_QTY                 
	,DRIVING_PATH_FLAG,SUSPEND_DATE,RESUME_DATE,EXTERNAL_EARLY_START_DATE          
	,EXTERNAL_LATE_END_DATE                                                        
       from task
       where task_id = @ptask_id;

   --bug fix 6919
	 insert into taskuser
        (TASK_ID, USER_ID,PROJ_ID)
        select @v_new_task_id, user_id,@pproj_id
          from taskuser
         where task_id = @ptask_id;

      if substring(@copy_bit,11,1)='0'
         update task 
         set rsrc_id = null
         where task_id = @v_new_task_id
         and rsrc_id is not null;

    -- TASKPRED
    if substring(@copy_bit,12,1)='1'
    BEGIN
      insert into pkxref (system_id, context_name, pk1,pk2,old_pk1,old_pk2 ,add_date)
      select @pwork_id, 'T', @pproj_id, @v_new_task_id, t.proj_id,t.task_id , getDate()
      from task t
      where task_id = @ptask_id
      and delete_session_id is null ;
    END
    -- TASKACTV
    if substring(@copy_bit,13,1)='1'
    BEGIN
      insert into taskactv
       (TASK_ID,ACTV_CODE_TYPE_ID,ACTV_CODE_ID,PROJ_ID)
       select @v_new_task_id , t.ACTV_CODE_TYPE_ID, t.ACTV_CODE_ID,
	        @pproj_id 
      from actvtype a, taskactv t
      where t.task_id = @ptask_id
      and a.actv_code_type_id = t.actv_code_type_id
      and super_flag = 'N'
      and t.delete_session_id is null ;
    END

    -- TASKFIN (PPA)
    if substring(@copy_bit,21,1)='1'
    BEGIN
      insert into taskfin
      (FIN_DATES_ID,TASK_ID,PROJ_ID,ACT_WORK_QTY,ACT_WORK_COST,ACT_EQUIP_QTY
          ,ACT_EQUIP_COST,ACT_MAT_COST,ACT_EXPENSE_COST,BCWP,SCHED_WORK_QTY,BCWS,PERFM_WORK_QTY)
      select FIN_DATES_ID,@v_new_task_id,@pproj_id,ACT_WORK_QTY,ACT_WORK_COST,ACT_EQUIP_QTY
          ,ACT_EQUIP_COST,ACT_MAT_COST,ACT_EXPENSE_COST,BCWP,SCHED_WORK_QTY,BCWS,PERFM_WORK_QTY
      from taskfin
      where task_id = @ptask_id;
    END

    -- TASKRSRC
    if substring(@copy_bit,11,1)='1'
    BEGIN
     DECLARE tr CURSOR FOR select taskrsrc_id from taskrsrc where task_id = @ptask_id and delete_session_id is null order by taskrsrc_id
     OPEN tr
     FETCH NEXT FROM tr INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec  get_guid @vguid OUTPUT
       exec pc_get_next_key 'taskrsrc_taskrsrc_id', @vid OUTPUT
       insert into taskrsrc 
	(TASKRSRC_ID,TASK_ID,PROJ_ID,RSRC_TYPE,COST_QTY_LINK_FLAG,ROLE_ID               
	,ACCT_ID,RSRC_ID,SKILL_LEVEL,PEND_COMPLETE_PCT,REMAIN_QTY,PEND_REMAIN_QTY      
	,TARGET_QTY,REMAIN_QTY_PER_HR,PEND_ACT_REG_QTY,TARGET_LAG_DRTN_HR_CNT          
	,TARGET_QTY_PER_HR,ACT_OT_QTY,PEND_ACT_OT_QTY,ACT_REG_QTY,RELAG_DRTN_HR_CNT    
	,OT_FACTOR,COST_PER_QTY,TARGET_COST,ACT_REG_COST,ACT_OT_COST,REMAIN_COST       
	,ACT_START_DATE,ACT_END_DATE,RESTART_DATE,REEND_DATE,TARGET_START_DATE         
	,TARGET_END_DATE,REM_LATE_START_DATE,REM_LATE_END_DATE,GUID,RATE_TYPE          
	,ACT_THIS_PER_COST,ACT_THIS_PER_QTY,CURV_ID,ROLLUP_DATES_FLAG                  
	,COST_PER_QTY_SOURCE_TYPE,RSRC_REQUEST_DATA,TARGET_CRV,REMAIN_CRV,ACTUAL_CRV)
       select @vid, @v_new_task_id, @pproj_id

	,RSRC_TYPE,COST_QTY_LINK_FLAG,ROLE_ID               
	,ACCT_ID,RSRC_ID,SKILL_LEVEL,PEND_COMPLETE_PCT,REMAIN_QTY,PEND_REMAIN_QTY      
	,TARGET_QTY,REMAIN_QTY_PER_HR,PEND_ACT_REG_QTY,TARGET_LAG_DRTN_HR_CNT          
	,TARGET_QTY_PER_HR,ACT_OT_QTY,PEND_ACT_OT_QTY,ACT_REG_QTY,RELAG_DRTN_HR_CNT    
	,OT_FACTOR,COST_PER_QTY,TARGET_COST,ACT_REG_COST,ACT_OT_COST,REMAIN_COST       
	,ACT_START_DATE,ACT_END_DATE,RESTART_DATE,REEND_DATE,TARGET_START_DATE         
	,TARGET_END_DATE,REM_LATE_START_DATE,REM_LATE_END_DATE
	,@vguid
	,RATE_TYPE          
	,ACT_THIS_PER_COST,ACT_THIS_PER_QTY,CURV_ID,ROLLUP_DATES_FLAG                  
	,COST_PER_QTY_SOURCE_TYPE,RSRC_REQUEST_DATA,TARGET_CRV,REMAIN_CRV,ACTUAL_CRV
            from taskrsrc
            where taskrsrc_id = @vOldId;

       exec pc_insert_udf 'taskrsrc', @vOldId,  @vid, @pproj_id

       -- todo: taskfin 
       if substring(@copy_bit,21,1)='1'
       begin
         insert into trsrcfin
         (fin_dates_id,taskrsrc_id,task_id,proj_id,act_qty,act_cost)
         select fin_dates_id,@vid,@v_new_task_id,@pproj_id,act_qty,act_cost
         from trsrcfin
         where taskrsrc_id = @vOldId;
       end
	
       FETCH NEXT FROM tr INTO @vOldId
     END 
     CLOSE tr
     DEALLOCATE tr
    END

    -- TASKMEMO
    if substring(@copy_bit,14,1)='1'
    BEGIN
     DECLARE tm CURSOR FOR select memo_id from taskmemo where task_id = @ptask_id and delete_session_id is null order by memo_id
     OPEN tm
     FETCH NEXT FROM tm INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'taskmemo_memo_id', @vid OUTPUT
       insert into taskmemo 
	(memo_id, task_id, memo_type_id, proj_id, task_memo )
       select @vid , @v_new_task_id, memo_type_id, @pproj_id, task_memo
 	from taskmemo
	where memo_id = @vOldId

       FETCH NEXT FROM tm INTO @vOldId
     END 
     CLOSE tm
     DEALLOCATE tm
    END

    -- taskdoc
    if substring(@copy_bit,17,1)='1'
    BEGIN
     DECLARE td CURSOR FOR select taskdoc_id,doc_id from taskdoc where task_id = @ptask_id and delete_session_id is null order by taskdoc_id
     OPEN td
     FETCH NEXT FROM td INTO @vOldId, @vOldDocId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'taskdoc_taskdoc_id', @vid OUTPUT
       set @new_doc_id = 0
       select @new_doc_id=new_doc_id from ##DocId where old_doc_id=@vOldDocId
       and system_id = @@SPID;
       if @new_doc_id >0
       BEGIN
          insert into taskdoc 
		( TASKDOC_ID,DOC_ID,PROJ_ID,WBS_ID,WP_FLAG,TASK_ID )
          select @vid, @new_doc_id, @pproj_id, @pwbs_id, 		
		wp_flag, @v_new_task_id
	  from taskdoc
	  where taskdoc_id = @vOldId

       END
       FETCH NEXT FROM td INTO @vOldId, @vOldDocId
     END 
     DEALLOCATE td
   END

    -- TASKPROC
    if substring(@copy_bit,16,1)='1'
    BEGIN
     DECLARE tp CURSOR FOR select proc_id from taskproc where task_id = @ptask_id and delete_session_id is null order by proc_id
     OPEN tp
     FETCH NEXT FROM tp INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'taskproc_proc_id', @vid OUTPUT
       insert into taskproc 
		( proc_id, task_id, seq_num, proj_id, complete_flag
		,proc_name, proc_wt , proc_descr         
		,COMPLETE_PCT) 
       select   @vid, @v_new_task_id, seq_num, @pproj_id,
		complete_flag, proc_name, proc_wt, proc_descr
		,COMPLETE_PCT
	from taskproc
 	where proc_id = @vOldId

       exec pc_insert_udf 'taskproc', @vOldId,  @vid, @pproj_id

       FETCH NEXT FROM tp INTO @vOldId
     END 
     CLOSE tp
     DEALLOCATE tp
    END

    -- PROJCOST
    if substring(@copy_bit,15,1)='1'
    BEGIN
     DECLARE pc CURSOR FOR select cost_item_id from projcost where task_id = @ptask_id and delete_session_id is null order by cost_item_id
     OPEN pc
     FETCH NEXT FROM pc INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'projcost_cost_item_id', @vid OUTPUT
       insert into projcost
	( COST_ITEM_ID,PROJ_ID,TASK_ID,AUTO_COMPUTE_ACT_FLAG,COST_LOAD_TYPE              
	,ACCT_ID,COST_TYPE_ID,TARGET_COST,ACT_COST,REMAIN_COST,QTY_NAME                
	,TARGET_QTY,COST_PER_QTY,PO_NUMBER,VENDOR_NAME,COST_NAME,COST_DESCR) 
       select @vid, @pproj_id, @v_new_task_id
	,AUTO_COMPUTE_ACT_FLAG,COST_LOAD_TYPE              
	,ACCT_ID,COST_TYPE_ID,TARGET_COST,ACT_COST,REMAIN_COST,QTY_NAME                
	,TARGET_QTY,COST_PER_QTY,PO_NUMBER,VENDOR_NAME,COST_NAME,COST_DESCR
       from projcost
       where cost_item_id = @vOldId

       exec pc_insert_udf 'projcost', @vOldId,  @vid, @pproj_id

       FETCH NEXT FROM pc INTO @vOldId
     END 
     CLOSE pc
     DEALLOCATE pc
    END
  -- projISSU
  if substring(@copy_bit,2,1)='1'
  BEGIN
     DECLARE cpi CURSOR FOR select issue_id from projissu where task_id = @ptask_id and delete_session_id is null order by issue_id
     OPEN cpi
     FETCH NEXT FROM cpi INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'projissu_issue_id', @vid OUTPUT
        insert into projissu
		(ISSUE_ID,PROJ_ID,OBS_ID,PRIORITY_TYPE,STATUS_CODE,ISSUE_NAME,THRESH_ID         
		,TRACK_VIEW_ID,WBS_ID,TASK_ID,RSRC_ID,THRESH_PARM_ID,BASE_PROJ_ID              
		,WORKSPACE_ID,ISSUE_VALUE,LO_PARM_VALUE,HI_PARM_VALUE,ADD_BY_NAME              
		,RESOLV_DATE,ADD_DATE,ISSUE_NOTES) 
        select @vid, @pproj_id
		,OBS_ID,PRIORITY_TYPE,STATUS_CODE,ISSUE_NAME,THRESH_ID         
		,TRACK_VIEW_ID
		,@pwbs_id,@v_new_task_id
		,RSRC_ID,THRESH_PARM_ID,BASE_PROJ_ID              
		,WORKSPACE_ID,ISSUE_VALUE,LO_PARM_VALUE,HI_PARM_VALUE,ADD_BY_NAME              
		,RESOLV_DATE,ADD_DATE,ISSUE_NOTES
	from projissu
        where issue_id = @vOldId;

        insert into issuhist (issue_id,proj_id,issue_history)
        select @vid,@pproj_id, issue_history
        from issuhist
        where issue_id = @vOldId
        and delete_session_id is null ;

        exec pc_insert_udf 'projissu', @vOldId, @vid, @pproj_id 

       FETCH NEXT FROM cpi INTO @vOldId
     END 
     DEALLOCATE cpi
   END

    exec pc_insert_udf 'task', @ptask_id,  @v_new_task_id, @pproj_id
       
    FETCH NEXT FROM tasks INTO @ptask_id
  END
  close tasks
  DEALLOCATE tasks


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PC_NEW_WBS' and type='P')
  DROP PROCEDURE PC_NEW_WBS

PC_NEW_WBS
create procedure pc_new_wbs
	@pold_wbs_id		integer,
	@pproj_id		integer,
	@pparent_wbs_id		integer,
	@pproject_flag		char(1),
	@copy_bit		varchar(30),
	@pret_val		integer OUTPUT,
	@pret_msg		varchar(4000) OUTPUT,
	@prepl_proj_id integer=null,
	@vorig_proj_id integer=null
as
  DECLARE @v_new_wbs_id integer, @vcnt integer, @vid integer, @vOldId integer
  DECLARE @vret integer, @new_doc_id integer, @v_bl_flag char(1),@vguid varchar(22)
  DECLARE @vOldDocId integer, @vNewProjShortName varchar(40), @vNewWbsName varchar(100)
  DECLARE @vSuffix varchar(10), @vNodeFlag char(1)
  declare @obs_id int,@seq_num int,@est_wt numeric(10,2),@proj_node_flag varchar(1),@sum_data_flag varchar(1),@status_code varchar(20)
  declare @phase_id int,@ev_user_pct int,@ev_etc_user_value numeric(10,2),@orig_cost numeric(23,6),@indep_remain_total_cost numeric(23,6)
  declare @ann_dscnt_rate_pct numeric(18,6),@dscnt_period_type varchar(20),@indep_remain_work_qty numeric(17,6),@anticip_start_date datetime
  declare @anticip_end_date datetime,@ev_compute_type varchar(20),@ev_etc_compute_type varchar(20),@resp_team_id int,@iteration_id int
  declare @tmpl_guid varchar(22),@original_qty numeric(17,6),@rqmt_rem_qty numeric(17,6)

  select @vNewProjShortName= proj_short_name from project where proj_id = @pproj_id
  select @vNewWbsName=wbs_name from projwbs where wbs_id = @pold_wbs_id

  if @prepl_proj_id is null
	BEGIN
		exec pc_get_next_key 'projwbs_wbs_id', @v_new_wbs_id OUTPUT
		if substring(@copy_bit,23,1)='1'
		begin
			select @vNewProjShortName=wbs_short_name , @vNodeFlag=proj_node_flag
			from projwbs where wbs_id = @pold_wbs_id
		end
		else if substring(@copy_bit,19,1)='1'
		begin
		  if @vorig_proj_id is not null
		  begin
		   if ( patindex('% - B%',@vNewWbsName )-1) >0 
		  	set @vNewWbsName=substring(@vNewWbsName,1, patindex('% - B%',@vNewWbsName )-1)
		  end
			set @vSuffix=substring(@vNewProjShortName,patindex('% - B%',@vNewProjShortName ),len(@vNewProjShortName))
			if len(@vNewWbsName+@vSuffix) > 100 
				set @vNewWbsName=substring(@vNewWbsName,1, len(@vnewWbsName)-len(@vSuffix))+@vSuffix
			else
				set @vNewWbsName=@vNewWbsName+@vSuffix
			set @v_bl_flag = 'Y'
		end
		else
		begin
			set @v_bl_flag = 'N'
		end 
		exec  get_guid @vguid OUTPUT
		insert into projwbs
		(WBS_ID,PROJ_ID,OBS_ID,SEQ_NUM,EST_WT,PROJ_NODE_FLAG,SUM_DATA_FLAG              
		,STATUS_CODE,WBS_SHORT_NAME,WBS_NAME,PHASE_ID,PARENT_WBS_ID,EV_USER_PCT        
		,EV_ETC_USER_VALUE,ORIG_COST,INDEP_REMAIN_TOTAL_COST,ANN_DSCNT_RATE_PCT        
		,DSCNT_PERIOD_TYPE,INDEP_REMAIN_WORK_QTY,ANTICIP_START_DATE,ANTICIP_END_DATE   
		,EV_COMPUTE_TYPE,EV_ETC_COMPUTE_TYPE,RESP_TEAM_ID,ITERATION_ID                 
		,GUID,TMPL_GUID,ORIGINAL_QTY )
		select @v_new_wbs_id, @pproj_id
		,OBS_ID,SEQ_NUM,EST_WT,PROJ_NODE_FLAG,SUM_DATA_FLAG              
		,STATUS_CODE
		,CASE WHEN proj_node_flag = 'Y' THEN @vNewProjShortName
				ELSE wbs_short_name END
		,CASE WHEN @v_bl_flag = 'Y' and proj_node_flag='Y' THEN @vNewWbsName
				ELSE WBS_NAME END
		,PHASE_ID
		,@pparent_wbs_id
		,EV_USER_PCT        
		,EV_ETC_USER_VALUE,ORIG_COST,INDEP_REMAIN_TOTAL_COST,ANN_DSCNT_RATE_PCT        
		,DSCNT_PERIOD_TYPE,INDEP_REMAIN_WORK_QTY,ANTICIP_START_DATE,ANTICIP_END_DATE   
		,EV_COMPUTE_TYPE,EV_ETC_COMPUTE_TYPE
		,null,null
		,@vguid
		,TMPL_GUID,ORIGINAL_QTY
		from projwbs
		where wbs_id = @pold_wbs_id;
  END
  ELSE
  BEGIN
    select @v_new_wbs_id=wbs_id from projwbs where proj_id = @prepl_proj_id and proj_node_flag='Y'

    SELECT @obs_id=obs_id,@seq_num=seq_num,@est_wt=est_wt,@proj_node_flag=proj_node_flag,@sum_data_flag=sum_data_flag,@status_code=status_code,
      @phase_id=phase_id,@ev_user_pct=ev_user_pct,@ev_etc_user_value=ev_etc_user_value,@orig_cost=orig_cost,@indep_remain_total_cost=indep_remain_total_cost,
      @ann_dscnt_rate_pct=ann_dscnt_rate_pct,@dscnt_period_type=dscnt_period_type,@indep_remain_work_qty=indep_remain_work_qty,@anticip_start_date=anticip_start_date,
      @anticip_end_date=anticip_end_date,@ev_compute_type=ev_compute_type,@ev_etc_compute_type=ev_etc_compute_type,@resp_team_id=resp_team_id,
      @iteration_id=iteration_id,@tmpl_guid=tmpl_guid,@original_qty=original_qty,@rqmt_rem_qty=rqmt_rem_qty
    FROM PROJWBS WHERE wbs_id = @pold_wbs_id

    UPDATE PROJWBS SET seq_num=@seq_num,est_wt=@est_wt,proj_node_flag=@proj_node_flag,sum_data_flag=@sum_data_flag,status_code=@status_code,
      phase_id=@phase_id,ev_user_pct=@ev_user_pct,ev_etc_user_value=@ev_etc_user_value,orig_cost=@orig_cost,indep_remain_total_cost=@indep_remain_total_cost,
      ann_dscnt_rate_pct=@ann_dscnt_rate_pct,dscnt_period_type=@dscnt_period_type,indep_remain_work_qty=@indep_remain_work_qty,anticip_start_date=@anticip_start_date,
      anticip_end_date=@anticip_end_date,ev_compute_type=@ev_compute_type,ev_etc_compute_type=@ev_etc_compute_type,resp_team_id=@resp_team_id,
      iteration_id=@iteration_id,tmpl_guid=@tmpl_guid,original_qty=@original_qty,rqmt_rem_qty=@rqmt_rem_qty
    WHERE wbs_id = @v_new_wbs_id

    UPDATE projwbs SET parent_wbs_id=@pparent_wbs_id
    WHERE wbs_id = @v_new_wbs_id
  END 

  if substring(@copy_bit,23,1)='1'
    update projwbs set phase_id = null
    where wbs_id = @v_new_wbs_id;

  -- projRISK
  if substring(@copy_bit,1,1)='1'
  BEGIN
     DECLARE pr CURSOR FOR select risk_id from projrisk	where wbs_id = @pold_wbs_id and delete_session_id is null order by risk_id
     OPEN pr
     FETCH NEXT FROM pr INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'projrisk_risk_id', @vid OUTPUT
        insert into projrisk
		(RISK_ID,PROJ_ID,WBS_ID,ADD_DATE,PRIORITY_TYPE,STATUS_CODE,RISK_NAME            
		,RISK_TYPE_ID,OBS_ID,RSRC_ID,PRBLY_PCT,IMPACT_WORK_QTY,IMPACT_EQUIP_QTY        
		,IMPACT_EXPENSE_COST,IMPACT_DATE,IMPACT_MAT_QTY,RISK_DESCR)
        select @vid, @pproj_id, @v_new_wbs_id
		,ADD_DATE,PRIORITY_TYPE,STATUS_CODE,RISK_NAME            
		,RISK_TYPE_ID,OBS_ID,RSRC_ID,PRBLY_PCT,IMPACT_WORK_QTY,IMPACT_EQUIP_QTY        
		,IMPACT_EXPENSE_COST,IMPACT_DATE,IMPACT_MAT_QTY,RISK_DESCR
	from projrisk
        where risk_id = @vOldId;

        -- Copy Risk control - bkd 3/13/2002

        insert into riskctrl ( risk_id, proj_id, risk_control)
        select @vid, @pproj_id, risk_control
        from riskctrl
        where risk_id = @vOldId
        and delete_session_id is null ;

       exec pc_insert_udf 'projrisk', @vOldId,  @vid, @pproj_id

       FETCH NEXT FROM pr INTO @vOldId
     END 
     DEALLOCATE pr
   END

  -- projISSU
  if substring(@copy_bit,2,1)='1'
  BEGIN
     DECLARE cpi CURSOR FOR select issue_id from projissu where wbs_id = @pold_wbs_id and task_id is null and delete_session_id is null order by issue_id
     OPEN cpi
     FETCH NEXT FROM cpi INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'projissu_issue_id', @vid OUTPUT
        insert into projissu
		(ISSUE_ID,PROJ_ID,OBS_ID,PRIORITY_TYPE,STATUS_CODE,ISSUE_NAME,THRESH_ID         
		,TRACK_VIEW_ID,WBS_ID,TASK_ID,RSRC_ID,THRESH_PARM_ID,BASE_PROJ_ID              
		,WORKSPACE_ID,ISSUE_VALUE,LO_PARM_VALUE,HI_PARM_VALUE,ADD_BY_NAME              
		,RESOLV_DATE,ADD_DATE,ISSUE_NOTES) 
        select @vid, @pproj_id
		,OBS_ID,PRIORITY_TYPE,STATUS_CODE,ISSUE_NAME,THRESH_ID         
		,TRACK_VIEW_ID
		,@v_new_wbs_id
		,TASK_ID,RSRC_ID,THRESH_PARM_ID,BASE_PROJ_ID              
		,WORKSPACE_ID,ISSUE_VALUE,LO_PARM_VALUE,HI_PARM_VALUE,ADD_BY_NAME              
		,RESOLV_DATE,ADD_DATE,ISSUE_NOTES
	from projissu
        where issue_id = @vOldId;

        insert into issuhist (issue_id,proj_id,issue_history)
        select @vid,@pproj_id, issue_history
        from issuhist
        where issue_id = @vOldId
        and delete_session_id is null;

       exec pc_insert_udf 'projissu', @vOldId,  @vid, @pproj_id

       FETCH NEXT FROM cpi INTO @vOldId
     END 
     DEALLOCATE cpi
   END

  -- projthrs
  if substring(@copy_bit,3,1)='1'
  BEGIN
     DECLARE pt CURSOR FOR select thresh_id from projthrs where wbs_id = @pold_wbs_id and delete_session_id is null order by thresh_id
     OPEN pt
     FETCH NEXT FROM pt INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'projthrs_thresh_id', @vid OUTPUT
        insert into projthrs 
		( THRESH_ID,PROJ_ID,OBS_ID,THRESH_PARM_ID,
				STATUS_CODE,PRIORITY_TYPE,THRESH_TYPE,
				WBS_ID,TRACK_VIEW_ID,LO_PARM_VALUE,
				HI_PARM_VALUE,WINDOW_START,WINDOW_END ) 
        select @vid,@pproj_id ,OBS_ID,THRESH_PARM_ID,
				STATUS_CODE,PRIORITY_TYPE,THRESH_TYPE,
				@v_new_wbs_id ,TRACK_VIEW_ID,LO_PARM_VALUE,
				HI_PARM_VALUE,WINDOW_START,WINDOW_END
        from projthrs
        where thresh_id = @vOldId;
	INSERT INTO ##ProjThrsID values ( @@SPID,@vOldId, @vid)	
       FETCH NEXT FROM pt INTO @vOldId
     END 
     DEALLOCATE pt
   END

  -- wbsmemo
  if substring(@copy_bit,7,1)='1'
  BEGIN
     DECLARE wm CURSOR FOR select wbs_memo_id from wbsmemo where wbs_id = @pold_wbs_id and delete_session_id is null order by wbs_memo_id
     OPEN wm
     FETCH NEXT FROM wm INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'wbsmemo_wbs_memo_id', @vid OUTPUT
        insert into wbsmemo 
		(WBS_MEMO_ID,PROJ_ID,WBS_ID,MEMO_TYPE_ID,WBS_MEMO)
        select @vid, @pproj_id, @v_new_wbs_id, memo_type_id, wbs_memo 
	from wbsmemo
   	where wbs_memo_id = @vOldId

       FETCH NEXT FROM wm INTO @vOldId
     END 
     DEALLOCATE wm
   END

  -- wbsstep
  if substring(@copy_bit,8,1)='1'
  BEGIN
     DECLARE ws CURSOR FOR select wbs_step_id from wbsstep where wbs_id = @pold_wbs_id and delete_session_id is null order by wbs_step_id
     OPEN ws
     FETCH NEXT FROM ws INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'wbsstep_wbs_step_id', @vid OUTPUT
        insert into wbsstep 
			( 	WBS_STEP_ID,PROJ_ID,WBS_ID,SEQ_NUM,
				COMPLETE_FLAG,STEP_NAME,STEP_WT )
        SELECT @vid, @pproj_id, @v_new_wbs_id, seq_num, complete_flag,
		step_name, step_wt 
	from wbsstep
   	where wbs_step_id = @vOldId

       FETCH NEXT FROM ws INTO @vOldId
     END 
     DEALLOCATE ws
   END

  -- taskdoc
  if substring(@copy_bit,17,1)='1'
  BEGIN

     DECLARE td CURSOR FOR select taskdoc_id , doc_id from taskdoc where wbs_id = @pold_wbs_id and task_id is null and delete_session_id is null order by taskdoc_id
     OPEN td
     FETCH NEXT FROM td INTO @vOldId, @vOldDocId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'taskdoc_taskdoc_id', @vid OUTPUT
       set @new_doc_id = 0
       select @new_doc_id=new_doc_id from ##DocId where old_doc_id=@vOldDocId
       and system_id = @@SPID;
       if @new_doc_id >0
       BEGIN
          insert into taskdoc 
		( TASKDOC_ID,DOC_ID,PROJ_ID,WBS_ID,WP_FLAG,TASK_ID )
          select @vid, @new_doc_id, @pproj_id, @v_new_wbs_id, 
		wp_flag, null
	  from taskdoc
	  where taskdoc_id = @vOldId

       END
       FETCH NEXT FROM td INTO @vOldId,@vOldDocId
     END 
     DEALLOCATE td
   END

    --Always do WBSBUDG and BUDGCHNG
     DECLARE bc CURSOR FOR select budg_chng_id from budgchng where wbs_id = @pold_wbs_id and delete_session_id is null order by budg_chng_id
     OPEN bc
     FETCH NEXT FROM bc INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'budgchng_budg_chng_id', @vid OUTPUT
       insert into budgchng 
				( BUDG_CHNG_ID,PROJ_ID,WBS_ID,CHNG_DATE,
				CHNG_SHORT_NAME,CHNG_COST,CHNG_BY_NAME,
				STATUS_CODE, chng_descr )
       select @vid, @pproj_id, @v_new_wbs_id,
		CHNG_DATE,CHNG_SHORT_NAME,CHNG_COST,CHNG_BY_NAME,
		STATUS_CODE, chng_descr 		
	from budgchng
 	where budg_chng_id = @vOldId

       FETCH NEXT FROM bc INTO @vOldId
     END 
     DEALLOCATE bc

     --wbsbudg
     DECLARE wb CURSOR FOR select wbs_budg_id from wbsbudg where wbs_id = @pold_wbs_id and delete_session_id is null order by wbs_budg_id
     OPEN wb
     FETCH NEXT FROM wb INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'wbsbudg_wbs_budg_id', @vid OUTPUT
      insert into wbsbudg 
	(WBS_BUDG_ID,PROJ_ID,WBS_ID,START_DATE, SPEND_COST,BENEFIT_COST )
       select @vid, @pproj_id, @v_new_wbs_id,
		START_DATE, SPEND_COST,BENEFIT_COST
	from wbsbudg
	where wbs_budg_id = @vOldId

       FETCH NEXT FROM wb INTO @vOldId
     END 
     DEALLOCATE wb

  if substring(@copy_bit,22,1)='1'
  BEGIN
     --wbsrsrc
     DECLARE wr CURSOR FOR select wbsrsrc_id from wbsrsrc where wbs_id = @pold_wbs_id and delete_session_id is null order by wbsrsrc_id
     OPEN wr
     FETCH NEXT FROM wr INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'wbsrsrc_wbsrsrc_id', @vid OUTPUT
      insert into wbsrsrc 
	(WBSRSRC_ID,WBS_ID,RSRC_ID,ROLE_ID,PROJ_ID,COMMITTED_FLAG,START_DATE,END_DATE,AUTO_COMPUTE_DATES_FLAG,RSRC_REQUEST_DATA)
       select @vid, @v_new_wbs_id, RSRC_ID, ROLE_ID, @pproj_id,
		COMMITTED_FLAG,START_DATE,END_DATE,AUTO_COMPUTE_DATES_FLAG,RSRC_REQUEST_DATA
	from wbsrsrc
	where wbsrsrc_id = @vOldId

       insert into WBSRSRC_QTY (WBSRSRC_ID,WEEK_START,MONTH_START,QTY,FIN_DATES_ID1,FIN_QTY1,FIN_DATES_ID2,FIN_QTY2)
       select @vid, week_start, month_start, qty,fin_dates_id1,fin_qty1,fin_dates_id2,fin_qty2
       from wbsrsrc_qty
       where wbsrsrc_id = @vOldId;

       FETCH NEXT FROM wr INTO @vOldId
     END 
     DEALLOCATE wr
  END

  -- Copy TASK Section
  if @pproject_flag = 'Y' and substring(@copy_bit,10,1)='1'
  BEGIN
    -- COPY TASKS HERE
    exec pc_tasks_by_wbs @pproj_id, @v_new_wbs_id, @pold_wbs_id, @copy_bit, @pret_val OUTPUT, @pret_msg OUTPUT
    if @pret_val < 0 
    begin
      return
    end

  END
  if substring(@copy_bit,26,1)='1' or substring(@copy_bit,23,1)='1'
  BEGIN
    --COPY TASKSUM if tasks are copied
     create table #tasksumID (old_task_sum_id int, new_task_sum_id int )
     DECLARE ts CURSOR FOR select task_sum_id from tasksum where wbs_id = @pold_wbs_id and delete_session_id is null order by task_sum_id
     OPEN ts
     FETCH NEXT FROM ts INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'tasksum_task_sum_id', @vid OUTPUT
	insert into tasksum
		(TASK_SUM_ID,WBS_ID,PROJ_ID,COMPLETE_CNT,ACTIVE_CNT,NOTSTARTED_CNT              
		,BASE_COMPLETE_CNT,BASE_ACTIVE_CNT,BASE_NOTSTARTED_CNT,ACT_DRTN_HR_CNT         
		,ACT_EQUIP_QTY,ACT_WORK_QTY,TOTAL_DRTN_HR_CNT,BASE_DRTN_HR_CNT                 
		,BASE_WORK_QTY,BASE_EQUIP_QTY,ETC_WORK_QTY,REMAIN_DRTN_HR_CNT                  
		,REMAIN_WORK_QTY,REMAIN_EQUIP_QTY,TOTAL_FLOAT_HR_CNT,ACT_EXPENSE_COST          
		,ACT_WORK_COST,ACT_EQUIP_COST,BASE_EXPENSE_COST,BASE_WORK_COST                 
		,BASE_EQUIP_COST,BCWP,ETC,BCWS,REMAIN_EXPENSE_COST,REMAIN_WORK_COST            
		,REMAIN_EQUIP_COST,PERFM_WORK_QTY,SCHED_WORK_QTY,ACT_END_DATE                  
		,ACT_START_DATE,BASE_END_DATE,BASE_START_DATE,REEND_DATE,RESTART_DATE          
		,ACT_THIS_PER_WORK_COST,ACT_THIS_PER_WORK_QTY,ACT_THIS_PER_EQUIP_COST          
		,ACT_THIS_PER_EQUIP_QTY,BASE_MAT_COST,REMAIN_MAT_COST,ACT_MAT_COST             
		,ACT_THIS_PER_MAT_COST,SPREAD_DATA)
	select @vid, @v_new_wbs_id, @pproj_id
		,COMPLETE_CNT,ACTIVE_CNT,NOTSTARTED_CNT              
		,BASE_COMPLETE_CNT,BASE_ACTIVE_CNT,BASE_NOTSTARTED_CNT,ACT_DRTN_HR_CNT         
		,ACT_EQUIP_QTY,ACT_WORK_QTY,TOTAL_DRTN_HR_CNT,BASE_DRTN_HR_CNT                 
		,BASE_WORK_QTY,BASE_EQUIP_QTY,ETC_WORK_QTY,REMAIN_DRTN_HR_CNT                  
		,REMAIN_WORK_QTY,REMAIN_EQUIP_QTY,TOTAL_FLOAT_HR_CNT,ACT_EXPENSE_COST          
		,ACT_WORK_COST,ACT_EQUIP_COST,BASE_EXPENSE_COST,BASE_WORK_COST                 
		,BASE_EQUIP_COST,BCWP,ETC,BCWS,REMAIN_EXPENSE_COST,REMAIN_WORK_COST            
		,REMAIN_EQUIP_COST,PERFM_WORK_QTY,SCHED_WORK_QTY,ACT_END_DATE                  
		,ACT_START_DATE,BASE_END_DATE,BASE_START_DATE,REEND_DATE,RESTART_DATE          
		,ACT_THIS_PER_WORK_COST,ACT_THIS_PER_WORK_QTY,ACT_THIS_PER_EQUIP_COST          
		,ACT_THIS_PER_EQUIP_QTY,BASE_MAT_COST,REMAIN_MAT_COST,ACT_MAT_COST             
		,ACT_THIS_PER_MAT_COST,SPREAD_DATA
	from tasksum
        where task_sum_id = @vOldId;
	INSERT INTO #tasksumID values (@vOldId, @vid)		
       FETCH NEXT FROM ts INTO @vOldId
     END 
     DEALLOCATE ts
    -- Copy tasksumfin 
     DECLARE tsf CURSOR FOR select task_sum_fin_id from tasksumfin where wbs_id =@pold_wbs_id and delete_session_id is null order by task_sum_fin_id
     OPEN tsf
     FETCH NEXT FROM tsf INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'tasksumfin_task_sum_fin_id', @vid OUTPUT
       INSERT INTO TASKSUMFIN
            (task_sum_fin_id,fin_dates_id,wbs_id,proj_id,task_sum_id,act_work_qty,act_work_cost,
             act_equip_qty,act_equip_cost,act_mat_cost,act_expense_cost,total_work_qty,total_work_cost,
             total_equip_qty,total_equip_cost,total_mat_cost,total_expense_cost,total_cost,act_cost,
             bcwp,perfm_work_qty,etc,etc_work_qty,eac,eac_work,bcws,sched_work_qty,base_cost,
             base_work_qty,base_work_cost,base_mat_cost,base_equip_cost,base_equip_qty,base_expense_cost,remain_cost,
             remain_work_qty,remain_work_cost,remain_mat_cost,remain_equip_cost,remain_equip_qty,remain_expense_cost,
             target_cost,target_equip_cost,target_equip_qty,target_expense_cost,target_mat_cost,target_work_cost,target_work_qty,
             late_remain_work_qty,late_remain_work_cost,late_remain_equip_cost,late_remain_equip_qty,late_remain_cost,late_remain_mat_cost,late_remain_expense_cost)
	select 	@vid,fin_dates_id,@v_new_wbs_id,@pproj_id,#tasksumId.new_task_sum_id,act_work_qty,act_work_cost,
        	act_equip_qty,act_equip_cost,act_mat_cost,act_expense_cost,total_work_qty,total_work_cost,
        	total_equip_qty,total_equip_cost,total_mat_cost,total_expense_cost,total_cost,act_cost,
		bcwp,perfm_work_qty,etc,etc_work_qty,eac,eac_work,bcws,sched_work_qty,base_cost,
		base_work_qty,base_work_cost,base_mat_cost,base_equip_cost,base_equip_qty,base_expense_cost,remain_cost,
        	remain_work_qty,remain_work_cost,remain_mat_cost,remain_equip_cost,remain_equip_qty,remain_expense_cost,
        	target_cost,target_equip_cost,target_equip_qty,target_expense_cost,target_mat_cost,target_work_cost,target_work_qty,
        	late_remain_work_qty,late_remain_work_cost,late_remain_equip_cost,late_remain_equip_qty,late_remain_cost,late_remain_mat_cost,late_remain_expense_cost
        from tasksumfin tf,#tasksumid 
   	where task_sum_fin_id =@vOldId
       	 and #tasksumid.old_task_sum_id=tf.task_sum_id

	FETCH NEXT FROM tsf INTO @vOldId
     END 
     DEALLOCATE tsf    	    
   END

  exec pc_insert_udf 'projwbs', @pold_wbs_id,  @v_new_wbs_id, @pproj_id

  set @pret_val = @v_new_wbs_id

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PC_NEW_PROJECT' and type='P')
  DROP PROCEDURE PC_NEW_PROJECT

PC_NEW_PROJECT
create procedure pc_new_project
	@pold_proj_id	integer,
	@copy_bit		varchar(30),
	@pret_val		integer OUTPUT,
	@pret_msg		varchar(4000) OUTPUT,
	@puser_name		varchar(32) = null,
	@vdest_proj_id    integer=null,
	@vdest_wbs_id 	integer=null,
 	@prepl_proj_id integer=null,
	@vorig_proj_id integer=null
as
  DECLARE @vproj_id integer, @vprop_name varchar(32)
  DECLARE @vnew_proj_short_name varchar(40), @v_orig_proj_id integer,@vview_id integer 
  DECLARE @vid integer, @v_new_proj_id integer, @vguid varchar(22), @vOldId integer;
  declare @fy_start_month_num int,@chng_eff_cmp_pct_flag varchar(1),@rsrc_self_add_flag varchar(1),@allow_complete_flag varchar(1),@rsrc_multi_assign_flag varchar(1)
  declare @checkout_flag varchar(1),@project_flag varchar(1),@step_complete_flag varchar(1),@cost_qty_recalc_flag varchar(1),@sum_only_flag varchar(1)
  declare @batch_sum_flag varchar(1),@name_sep_char varchar(2),@def_complete_pct_type varchar(10),@acct_id int,@source_proj_id int,@base_type_id int
  declare @clndr_id int,@task_code_base int,@task_code_step int,@priority_num int,@wbs_max_sum_level int,@risk_level int,@strgy_priority_num int
  declare @last_checksum int,@critical_drtn_hr_cnt numeric(10,2),@def_cost_per_qty numeric(21,8),@last_recalc_date datetime,@plan_start_date datetime
  declare @plan_end_date datetime,@scd_end_date datetime,@sum_data_date datetime,@last_tasksum_date datetime,@fcst_start_date datetime
  declare @def_duration_type varchar(12),@task_code_prefix varchar(20),@def_qty_type varchar(24),@web_local_root_path varchar(120),@proj_url varchar(200)
  declare @def_rate_type varchar(14),@act_this_per_link_flag varchar(1),@def_task_type varchar(12),@act_pct_link_flag varchar(1),@add_act_remain_flag varchar(1)
  declare @critical_path_type varchar(12),@task_code_prefix_flag varchar(1),@def_rollup_dates_flag varchar(1),@rem_target_link_flag varchar(1)
  declare @reset_planned_flag varchar(1),@allow_neg_act_flag varchar(1),@rsrc_id int,@checkout_date datetime,@checkout_user_id int,@sum_assign_level varchar(12)
  declare @last_fin_dates_id int,@use_project_baseline_flag varchar(1),@ts_rsrc_vw_compl_asgn_flag varchar(1),@ts_rsrc_mark_act_finish_flag varchar(1)
  declare @ts_rsrc_vw_inact_actv_flag varchar(1)

  if @prepl_proj_id is null 
	BEGIN
		exec pc_get_next_key 'project_proj_id', @v_new_proj_id OUTPUT

		if substring(@copy_bit,23,1)='1'
		begin
			set @v_orig_proj_id = @v_new_proj_id
			exec pc_new_proj_short_name @pold_proj_id, @vnew_proj_short_name OUTPUT, 1, ' - S'
		end
		else
		if substring(@copy_bit,19,1)='1'
		begin
		 if @vorig_proj_id is not null --copying baseline
		      
		   set @v_orig_proj_id = @vorig_proj_id
		   
		else
 				
		   set @v_orig_proj_id = @pold_proj_id
		exec pc_new_proj_short_name @pold_proj_id, @vnew_proj_short_name OUTPUT, 1
		end
		else
			if substring(@copy_bit,24,1)='1'
		begin
			set @v_orig_proj_id = @vdest_proj_id
			exec pc_new_proj_short_name @vdest_proj_id, @vnew_proj_short_name OUTPUT, 1
		end
		else
		begin
			set @v_orig_proj_id = null
		 exec pc_new_proj_short_name @pold_proj_id, @vnew_proj_short_name OUTPUT , 0
		end 

		-- Create a project
		exec  get_guid @vguid OUTPUT
		insert into project  
		(PROJ_ID,FY_START_MONTH_NUM,CHNG_EFF_CMP_PCT_FLAG,RSRC_SELF_ADD_FLAG            
		,ALLOW_COMPLETE_FLAG,RSRC_MULTI_ASSIGN_FLAG,CHECKOUT_FLAG,PROJECT_FLAG         
		,STEP_COMPLETE_FLAG,COST_QTY_RECALC_FLAG,SUM_ONLY_FLAG,BATCH_SUM_FLAG          
		,NAME_SEP_CHAR,DEF_COMPLETE_PCT_TYPE,PROJ_SHORT_NAME,ACCT_ID,ORIG_PROJ_ID,SOURCE_PROJ_ID
					,BASE_TYPE_ID,CLNDR_ID,SUM_BASE_PROJ_ID,TASK_CODE_BASE,TASK_CODE_STEP          
		,PRIORITY_NUM,WBS_MAX_SUM_LEVEL,RISK_LEVEL,STRGY_PRIORITY_NUM                  
		,LAST_CHECKSUM,CRITICAL_DRTN_HR_CNT,DEF_COST_PER_QTY,LAST_RECALC_DATE          
		,PLAN_START_DATE,PLAN_END_DATE,SCD_END_DATE,ADD_DATE,SUM_DATA_DATE             
		,LAST_TASKSUM_DATE,FCST_START_DATE,DEF_DURATION_TYPE,TASK_CODE_PREFIX          
		,GUID,DEF_QTY_TYPE,ADD_BY_NAME,WEB_LOCAL_ROOT_PATH,PROJ_URL,DEF_RATE_TYPE      
		,ACT_THIS_PER_LINK_FLAG,DEF_TASK_TYPE,ACT_PCT_LINK_FLAG,ADD_ACT_REMAIN_FLAG    
		,CRITICAL_PATH_TYPE,TASK_CODE_PREFIX_FLAG,DEF_ROLLUP_DATES_FLAG                
		,REM_TARGET_LINK_FLAG,RESET_PLANNED_FLAG,ALLOW_NEG_ACT_FLAG,RSRC_ID            
		,MSP_MANAGED_FLAG,MSP_UPDATE_ACTUALS_FLAG,CHECKOUT_DATE,CHECKOUT_USER_ID       
		,SUM_ASSIGN_LEVEL,LAST_FIN_DATES_ID,USE_PROJECT_BASELINE_FLAG                  
		,LAST_BASELINE_UPDATE_DATE,TS_RSRC_MARK_ACT_FINISH_FLAG,TS_RSRC_VW_INACT_ACTV_FLAG)
			select @v_new_proj_id
		,FY_START_MONTH_NUM,CHNG_EFF_CMP_PCT_FLAG,RSRC_SELF_ADD_FLAG            
		,ALLOW_COMPLETE_FLAG,RSRC_MULTI_ASSIGN_FLAG,CHECKOUT_FLAG,PROJECT_FLAG         
		,STEP_COMPLETE_FLAG,COST_QTY_RECALC_FLAG,SUM_ONLY_FLAG,BATCH_SUM_FLAG          
		,NAME_SEP_CHAR,DEF_COMPLETE_PCT_TYPE
		,@vnew_proj_short_name
		,ACCT_ID
		,@v_orig_proj_id 
		,SOURCE_PROJ_ID     
		,BASE_TYPE_ID,CLNDR_ID
		,null
					,TASK_CODE_BASE,TASK_CODE_STEP          
		,PRIORITY_NUM,WBS_MAX_SUM_LEVEL,RISK_LEVEL,STRGY_PRIORITY_NUM                  
		,LAST_CHECKSUM,CRITICAL_DRTN_HR_CNT,DEF_COST_PER_QTY,LAST_RECALC_DATE          
		,PLAN_START_DATE,PLAN_END_DATE,SCD_END_DATE
		,getDate()
		,SUM_DATA_DATE             
		,LAST_TASKSUM_DATE,FCST_START_DATE,DEF_DURATION_TYPE,TASK_CODE_PREFIX          
		,@vguid
		,DEF_QTY_TYPE
		,@puser_name
		,WEB_LOCAL_ROOT_PATH,PROJ_URL,DEF_RATE_TYPE      
		,ACT_THIS_PER_LINK_FLAG,DEF_TASK_TYPE,ACT_PCT_LINK_FLAG,ADD_ACT_REMAIN_FLAG    
		,CRITICAL_PATH_TYPE,TASK_CODE_PREFIX_FLAG,DEF_ROLLUP_DATES_FLAG                
		,REM_TARGET_LINK_FLAG,RESET_PLANNED_FLAG,ALLOW_NEG_ACT_FLAG,RSRC_ID            
		,'N' MSP_MANAGED_FLAG,'N' MSP_UPDATE_ACTUALS_FLAG,CHECKOUT_DATE,CHECKOUT_USER_ID       
		,SUM_ASSIGN_LEVEL,LAST_FIN_DATES_ID,USE_PROJECT_BASELINE_FLAG                  
		,LAST_BASELINE_UPDATE_DATE,TS_RSRC_MARK_ACT_FINISH_FLAG,TS_RSRC_VW_INACT_ACTV_FLAG
			from project
			where proj_id = @pold_proj_id
  END
  else
  BEGIN
    set @v_new_proj_id = @prepl_proj_id
    
    SELECT @fy_start_month_num=fy_start_month_num,@chng_eff_cmp_pct_flag=chng_eff_cmp_pct_flag,@rsrc_self_add_flag=rsrc_self_add_flag,
      @allow_complete_flag=allow_complete_flag,@rsrc_multi_assign_flag=rsrc_multi_assign_flag,@checkout_flag=checkout_flag,@project_flag=project_flag,
      @step_complete_flag=step_complete_flag,@cost_qty_recalc_flag=cost_qty_recalc_flag,@sum_only_flag=sum_only_flag,@batch_sum_flag=batch_sum_flag,
      @name_sep_char=name_sep_char,@def_complete_pct_type=def_complete_pct_type,@acct_id=acct_id,@source_proj_id=source_proj_id,@base_type_id=base_type_id,
      @clndr_id=clndr_id,@task_code_base=task_code_base,@task_code_step=task_code_step,@priority_num=priority_num,@wbs_max_sum_level=wbs_max_sum_level,
      @risk_level=risk_level,@strgy_priority_num=strgy_priority_num,@last_checksum=last_checksum,@critical_drtn_hr_cnt=critical_drtn_hr_cnt,
      @def_cost_per_qty=def_cost_per_qty,@last_recalc_date=last_recalc_date,@plan_start_date=plan_start_date,@plan_end_date=plan_end_date,
      @scd_end_date=scd_end_date,@sum_data_date=sum_data_date,@last_tasksum_date=last_tasksum_date,@fcst_start_date=fcst_start_date,@def_duration_type=def_duration_type,
      @task_code_prefix=task_code_prefix,@def_qty_type=def_qty_type,@web_local_root_path=web_local_root_path,@proj_url=proj_url,@def_rate_type=def_rate_type,
      @act_this_per_link_flag=act_this_per_link_flag,@def_task_type=def_task_type,@act_pct_link_flag=act_pct_link_flag,@add_act_remain_flag=add_act_remain_flag,
      @critical_path_type=critical_path_type,@task_code_prefix_flag=task_code_prefix_flag,@def_rollup_dates_flag=def_rollup_dates_flag,
      @rem_target_link_flag=rem_target_link_flag,@reset_planned_flag=reset_planned_flag,@allow_neg_act_flag=allow_neg_act_flag,@rsrc_id=rsrc_id,
      @checkout_date=checkout_date,@checkout_user_id=checkout_user_id,@sum_assign_level=sum_assign_level,@last_fin_dates_id=last_fin_dates_id,
      @use_project_baseline_flag=use_project_baseline_flag,@ts_rsrc_vw_compl_asgn_flag=ts_rsrc_vw_compl_asgn_flag,@ts_rsrc_mark_act_finish_flag=ts_rsrc_mark_act_finish_flag,
      @ts_rsrc_vw_inact_actv_flag=ts_rsrc_vw_inact_actv_flag
    FROM PROJECT WHERE proj_id = @pold_proj_id

    UPDATE PROJECT SET fy_start_month_num=@fy_start_month_num,chng_eff_cmp_pct_flag=@chng_eff_cmp_pct_flag,rsrc_self_add_flag=@rsrc_self_add_flag,
      allow_complete_flag=@allow_complete_flag,rsrc_multi_assign_flag=@rsrc_multi_assign_flag,checkout_flag=@checkout_flag,project_flag=@project_flag,
      step_complete_flag=@step_complete_flag,cost_qty_recalc_flag=@cost_qty_recalc_flag,sum_only_flag=@sum_only_flag,batch_sum_flag=@batch_sum_flag,
      name_sep_char=@name_sep_char,def_complete_pct_type=@def_complete_pct_type,acct_id=@acct_id,base_type_id=@base_type_id,
      clndr_id=@clndr_id,task_code_base=@task_code_base,task_code_step=@task_code_step,priority_num=@priority_num,wbs_max_sum_level=@wbs_max_sum_level,
      risk_level=@risk_level,strgy_priority_num=@strgy_priority_num,last_checksum=@last_checksum,critical_drtn_hr_cnt=@critical_drtn_hr_cnt,
      def_cost_per_qty=@def_cost_per_qty,last_recalc_date=@last_recalc_date,plan_start_date=@plan_start_date,plan_end_date=@plan_end_date,
      scd_end_date=@scd_end_date,sum_data_date=@sum_data_date,last_tasksum_date=@last_tasksum_date,fcst_start_date=@fcst_start_date,def_duration_type=@def_duration_type,
      task_code_prefix=@task_code_prefix,def_qty_type=@def_qty_type,web_local_root_path=@web_local_root_path,proj_url=@proj_url,def_rate_type=@def_rate_type,
      act_this_per_link_flag=@act_this_per_link_flag,def_task_type=@def_task_type,act_pct_link_flag=@act_pct_link_flag,add_act_remain_flag=@add_act_remain_flag,
      critical_path_type=@critical_path_type,task_code_prefix_flag=@task_code_prefix_flag,def_rollup_dates_flag=@def_rollup_dates_flag,
      rem_target_link_flag=@rem_target_link_flag,reset_planned_flag=@reset_planned_flag,allow_neg_act_flag=@allow_neg_act_flag,rsrc_id=@rsrc_id,
      checkout_date=@checkout_date,checkout_user_id=@checkout_user_id,sum_assign_level=@sum_assign_level,last_fin_dates_id=@last_fin_dates_id,
      use_project_baseline_flag=@use_project_baseline_flag,ts_rsrc_vw_compl_asgn_flag=@ts_rsrc_vw_compl_asgn_flag,ts_rsrc_mark_act_finish_flag=@ts_rsrc_mark_act_finish_flag,
      ts_rsrc_vw_inact_actv_flag=@ts_rsrc_vw_inact_actv_flag
    WHERE proj_id = @v_new_proj_id

    UPDATE PROJECT set MSP_MANAGED_FLAG='N', MSP_UPDATE_ACTUALS_FLAG='N'
                      ,add_date=getDate(),add_by_name=@puser_name
    WHERE proj_id = @v_new_proj_id
  END

  if substring(@copy_bit,23,1)='1'
    update project
    set sum_base_proj_id = (select sum_base_proj_id from project where proj_id = @pold_proj_id)
    where proj_id = @v_new_proj_id;


  if substring(@copy_bit,19,1)='1' and @vorig_proj_id is null
    update project
    set last_baseline_update_date = GetDate()
    where proj_id = @v_new_proj_id;

     
     -- Document
  if substring(@copy_bit,5,1)='1'
  BEGIN
     DECLARE doc CURSOR FOR select doc_id from document where proj_id = @pold_proj_id and delete_session_id is null and DOC_MGMT_TYPE = 'DM_Local' order by doc_id
     OPEN doc
     FETCH NEXT FROM doc INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec  get_guid @vguid OUTPUT
       exec pc_get_next_key 'document_doc_id', @vid OUTPUT
        insert into document
		( DOC_ID,DOC_SEQ_NUM,DELIV_FLAG,DOC_NAME,PARENT_DOC_ID,PROJ_ID,DOC_STATUS_ID     
		,DOC_CATG_ID,DOC_DATE,VERSION_NAME,GUID,TMPL_GUID,DOC_SHORT_NAME               
		,AUTHOR_NAME,PRIVATE_LOC,PUBLIC_LOC,DOC_CONTENT,RSRC_ID,DOC_MGMT_TYPE          
		,EXTERNAL_DOC_KEY)
        select @vid
		,DOC_SEQ_NUM,DELIV_FLAG,DOC_NAME,PARENT_DOC_ID
		,@v_new_proj_id
		,DOC_STATUS_ID     
		,DOC_CATG_ID,DOC_DATE,VERSION_NAME
		,@vguid
		,TMPL_GUID,DOC_SHORT_NAME               
		,AUTHOR_NAME,PRIVATE_LOC,PUBLIC_LOC,DOC_CONTENT,RSRC_ID,DOC_MGMT_TYPE          
		,EXTERNAL_DOC_KEY
        from document
        where doc_id = @vOldId;

       INSERT INTO ##DocID values ( @@SPID,@vOldId, @vid)

       exec pc_insert_udf 'document', @vOldId,  @vid, @v_new_proj_id

       FETCH NEXT FROM doc INTO @vOldId
     END 
     DEALLOCATE doc

     -- Re-establish Hierachy.
    
     DECLARE doc2 CURSOR FOR select doc_id, parent_doc_id from document where proj_id = @v_new_proj_id and delete_session_id is null order by doc_id
     DECLARE @new_pdoc_id int, @vdocid int, @old_pdoc_id int
     OPEN doc2
     FETCH NEXT FROM doc2 INTO @vdocid,  @old_pdoc_id
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       set @new_pdoc_id=NULL
       select @new_pdoc_id=new_doc_id
       from ##DocID
       where old_doc_id = @old_pdoc_id
       if @new_pdoc_id is not null
       begin
         update document
         set parent_doc_id = @new_pdoc_id
         where doc_id = @vdocid
       end
       FETCH NEXT FROM doc2 INTO @vdocid, @old_pdoc_id
     END 
     DEALLOCATE doc2

   END

     -- ProjTHRS
  if substring(@copy_bit,3,1)='1'
  BEGIN
     DECLARE pt CURSOR FOR select thresh_id from projthrs 
	where proj_id = @pold_proj_id and wbs_id is null and delete_session_id is null order by thresh_id
     OPEN pt
     FETCH NEXT FROM pt INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'projthrs_thresh_id', @vid OUTPUT
        insert into projthrs
	 ( THRESH_ID,PROJ_ID,OBS_ID,THRESH_PARM_ID,
				STATUS_CODE,PRIORITY_TYPE,THRESH_TYPE,
				WBS_ID,TRACK_VIEW_ID,LO_PARM_VALUE,
				HI_PARM_VALUE,WINDOW_START,WINDOW_END ) 
        select @vid, @v_new_proj_id ,OBS_ID,THRESH_PARM_ID,
				STATUS_CODE,PRIORITY_TYPE,THRESH_TYPE,
				WBS_ID,TRACK_VIEW_ID,LO_PARM_VALUE,
				HI_PARM_VALUE,WINDOW_START,WINDOW_END
        from projthrs
        where thresh_id = @vOldId;
	INSERT INTO ##ProjThrsID values ( @@SPID,@vOldId, @vid)	
       FETCH NEXT FROM pt INTO @vOldId
     END 
     DEALLOCATE pt
   END

  --projFUND
  if substring(@copy_bit,6,1)='1'
  BEGIN
     DECLARE pf CURSOR FOR select proj_fund_id from projfund where proj_id = @pold_proj_id and delete_session_id is null order by proj_fund_id
     OPEN pf
     FETCH NEXT FROM pf INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'projfund_proj_fund_id', @vid OUTPUT
        insert into projfund (PROJ_FUND_ID,FUND_ID,PROJ_ID,FUND_COST,FUND_WT)
         select @vid, FUND_ID,@v_new_proj_id,FUND_COST,FUND_WT
 	from projfund
	where proj_fund_id = @vOldId
	       FETCH NEXT FROM pf INTO @vOldId
     END 
     DEALLOCATE pf
   END

  --RPT
  if substring(@copy_bit,4,1)='1'
  BEGIN
     DECLARE rpt CURSOR FOR select rpt_id from rpt where proj_id = @pold_proj_id and delete_session_id is null order by rpt_id
     OPEN rpt
     FETCH NEXT FROM rpt INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'rpt_rpt_id', @vid OUTPUT
        insert into rpt
		(RPT_ID, GLOBAL_FLAG, RPT_TYPE, RPT_NAME, RPT_GROUP_ID
		,PROJ_ID, RPT_STATE, RPT_DATA) 
	select @vid
		, GLOBAL_FLAG, RPT_TYPE, RPT_NAME, RPT_GROUP_ID
		,@v_new_proj_id, RPT_STATE, RPT_DATA       
        from rpt
        where rpt_id= @vOldId;
       FETCH NEXT FROM rpt INTO @vOldId
     END 
     DEALLOCATE rpt
   END

  --TRSRCSUM
  if (substring(@copy_bit,23,1)='1'  or substring(@copy_bit,25,1)='1')	--TASKRSRC Bit
  BEGIN
     create table #trsrcsumID ( old_taskrsrc_sum_id int, new_taskrsrc_sum_id int )
     DECLARE trs CURSOR FOR select taskrsrc_sum_id from trsrcsum where proj_id = @pold_proj_id and delete_session_id is null order by taskrsrc_sum_id
     OPEN trs
     FETCH NEXT FROM trs INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'trsrcsum_taskrsrc_sum_id', @vid OUTPUT
        insert into trsrcsum
		(TASKRSRC_SUM_ID,PROJ_ID,RSRC_ID,ROLE_ID,SKILL_LEVEL    
		,OVERALLOC_DATE, SPREAD_DATA)
	select @vid, @v_new_proj_id
		,RSRC_ID,ROLE_ID,SKILL_LEVEL    
		,OVERALLOC_DATE, SPREAD_DATA    
        from trsrcsum
        where taskrsrc_sum_id = @vOldId
	INSERT INTO #trsrcsumID values (@vOldId, @vid)		
       FETCH NEXT FROM trs INTO @vOldId
     END 
     DEALLOCATE trs
     -- Copy trsrcsumfn 
     DECLARE trsf CURSOR FOR  select trsrc_sum_fin_id from trsrcsumfn where proj_id = @pold_proj_id and delete_session_id is null order by trsrc_sum_fin_id
     OPEN trsf
     FETCH NEXT FROM trsf INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
        exec pc_get_next_key 'trsrcsumfn_trsrc_sum_fin_id', @vid OUTPUT
	INSERT INTO TRSRCSUMFN 
		(trsrc_sum_fin_id, fin_dates_id, proj_id, rsrc_id, role_id, taskrsrc_sum_id, 
		 act_qty, act_cost, total_qty, total_cost, remain_qty, remain_cost, target_qty,
		 target_cost, staffed_remain_qty, unstaffed_remain_qty, staffed_remain_cost, 
		 unstaffed_remain_cost, staffed_late_remain_qty, unstaffed_late_remain_qty, 
		 staffed_late_remain_cost, unstaffed_late_remain_cost, late_remain_qty,late_remain_cost) 
	SELECT @vid, fin_dates_id, @v_new_proj_id, rsrc_id, role_id,#trsrcsumID.new_taskrsrc_sum_id,
	         act_qty, act_cost, total_qty, total_cost, remain_qty, remain_cost, target_qty,
		 target_cost, staffed_remain_qty, unstaffed_remain_qty, staffed_remain_cost,
		 unstaffed_remain_cost, staffed_late_remain_qty, unstaffed_late_remain_qty, 
		 staffed_late_remain_cost, unstaffed_late_remain_cost, late_remain_qty, late_remain_cost
        from trsrcsumfn tf,#trsrcsumID   
	where trsrc_sum_fin_id =@vOldId
	and #trsrcsumID.old_taskrsrc_sum_id=tf.taskrsrc_sum_id

        FETCH NEXT FROM trsf INTO @vOldId
     END 
     DEALLOCATE trsf
   END

    if substring(@copy_bit,23,1)='1'
      insert into projpcat 
      (PROJ_ID,PROJ_CATG_TYPE_ID,PROJ_CATG_ID)
      select @v_new_proj_id, pp.proj_catg_type_id, pp.proj_catg_id 
      from pcattype pt, projpcat pp
      where pp.proj_id = @pold_proj_id
      and pp.proj_catg_type_id = pt.proj_catg_type_id
      and pp.delete_session_id is null and pt.delete_session_id is null;
    ELSE
      insert into projpcat 
      (PROJ_ID,PROJ_CATG_TYPE_ID,PROJ_CATG_ID)
      select @v_new_proj_id, pp.proj_catg_type_id, pp.proj_catg_id 
      from pcattype pt, projpcat pp
      where pp.proj_id = @pold_proj_id
      and pp.proj_catg_type_id = pt.proj_catg_type_id
      and pt.super_flag ='N'
      and pp.delete_session_id is null and pt.delete_session_id is null;

   exec pc_insert_udf 'project', @pold_proj_id,  @v_new_proj_id, @v_new_proj_id
   
   -- copy Scheduler Setting
   if substring(@copy_bit,23,1)='0'	
     insert into projprop
     (proj_id, prop_name, prop_value)
     select @v_new_proj_id, prop_name, prop_value
     from projprop
     where proj_id = @pold_proj_id and delete_session_id is null;


  -- copy project layouts
   DECLARE LayoutCur CURSOR LOCAL FOR select view_id from viewprop where proj_id = @pold_proj_id and delete_session_id is null
   OPEN LayoutCur
   FETCH NEXT FROM LayoutCur INTO @vview_id  
   WHILE (@@FETCH_STATUS = 0)
   BEGIN
     exec pc_get_next_key 'viewprop_view_id', @vid OUTPUT
     insert into viewprop
     (view_id, view_name,view_type, view_data,proj_id)
      select @vid, view_name, view_type, view_data,@v_new_proj_id
      from viewprop
       where view_id = @vview_id;
	 FETCH NEXT FROM LayoutCur INTO @vview_id  
   END
    Close  LayoutCur
    Deallocate LayoutCur


   set @pret_val = @v_new_proj_id

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PC_PROCESS_LEVEL' and type='P')
  DROP PROCEDURE PC_PROCESS_LEVEL

PC_PROCESS_LEVEL
create procedure pc_process_level
	@pwbs_id		integer,
	@pparent_wbs_id		integer,
	@plevel			integer,
	@pnew_parent_wbs_id	integer,
	@pnew_proj_id		integer,
	@copy_bit		varchar(30),
	@max_wbs_id		integer,
	@pret_val		integer OUTPUT,
	@pret_msg		varchar(4000) OUTPUT,
	@ppfolio_id		integer = null,
	@puser_name		varchar(32) = null,
	@psession_id		integer=null,
  @prepl_proj_id  integer=null
as
declare @vproj_id integer, @vpflag char(1), @v_new_proj_id integer, @vnode_flag char(1)
 declare @vLevel integer, @vnew_wbs_id integer, @vwbs_name varchar(100)
 declare @vret integer, @vmsg varchar(4000) ,@vorig_proj_id integer, @fwbs_id integer
 declare @vclndr_id integer, @vid integer, @vcnt integer, @vprojwbs_status_code varchar(20)
 declare @wbs_max_sum_level integer
 declare @vtarget_proj_id integer
 declare @vtarget_wbs_id integer

 DECLARE wbsCur CURSOR LOCAL FOR 
   select wbs_id from projwbs (nolock)
   where parent_wbs_id = @pwbs_id
   and wbs_id < = @max_wbs_id
   and delete_session_id is null 
-- DECLARE calCur CURSOR LOCAL FOR
--   select clndr_id from calendar
--   where proj_id = @vproj_id
--   order by clndr_id
  --END declarations
 set @pret_val=0
 set @vLevel = @plevel + 1
 set @vnew_wbs_id = 0
 select @vpflag=p.project_flag, @vproj_id=p.proj_id, @vwbs_name=wbs_name,
	@vnode_flag=proj_node_flag, @vorig_proj_id=orig_proj_id,
        @vprojwbs_status_code=pw.status_code,
    @wbs_max_sum_level=wbs_max_sum_level
 from project p, projwbs pw
 where p.proj_id = pw.proj_id
 and pw.wbs_id = @pwbs_id

-- if this is a scenario baseline then exit if reached max levels
if @wbs_max_sum_level<>0 and substring(@copy_bit,23,1)='1' and @vlevel > @wbs_max_sum_level
  return

-- allow to copy  baseline 
 if @vorig_proj_id is not null and (substring(@copy_bit,24,1)='0' or substring(@copy_bit,24,1)='') and  (substring(@copy_bit,19,1)='0' or substring(@copy_bit,19,1)='')
   return
 -- Exit if this is a project node and the project is not in the pfolio
 if @ppfolio_id is not null and @vpflag = 'Y' and @vnode_flag = 'Y'
 begin
   select @vcnt=count(*) 
   from prpfolio
   where pfolio_id = @ppfolio_id 
   and wbs_id = @pwbs_id;
   if @vcnt = 0 
     return
 end

 if substring(@copy_bit,20,1)<>'1' and @vprojwbs_status_code = 'WS_Requested' 
   return

 if @vnode_flag ='Y'
 begin
   set @pret_val =0
   -- this is an EPS node so get create a new project
  if substring(@copy_bit,24,1)='1' 
  begin
    select @vorig_proj_id=orig_proj_id from project where proj_id=@vproj_id
		select @vtarget_proj_id=target_proj_id,@vtarget_wbs_id=target_wbs_id from TPROJMAP where source_proj_id=@vorig_proj_id and session_id=@psession_id
  	if @vtarget_proj_id is null or @vtarget_wbs_id is null 
  	begin 
      set @pret_val=-1
		  set @pret_msg='target project to copy baseline to does not exist'
		  return
	  end
	  else
  		exec pc_new_project @vproj_id, @copy_bit, @v_new_proj_id OUTPUT, @vmsg OUTPUT, @puser_name,@vtarget_proj_id,@vtarget_wbs_id,null,@vorig_proj_id
	end 
  else
  begin
	  exec pc_new_project @vproj_id, @copy_bit, @v_new_proj_id OUTPUT, @vmsg OUTPUT, @puser_name,null,null,@prepl_proj_id,@vorig_proj_id
  end

   if not @v_new_proj_id > 0 
   begin
      set @pret_msg ='Error creating new Project|' + @vmsg
      set @pret_val = -1
      return
   end 
   -- Also create the new WBS node
   exec pc_new_wbs @pwbs_id, @v_new_proj_id, @pnew_parent_wbs_id, @vpflag, @copy_bit,
			@vnew_wbs_id OUTPUT, @vmsg OUTPUT,@prepl_proj_id,@vorig_proj_id
   if not @vnew_wbs_id > 0 
   begin
      set @pret_msg ='Error creating new wbs|' + @vmsg
      set @pret_val = -1
      return
   end 
   if (substring(@copy_bit,24,1)='0' or substring(@copy_bit,24,1)='') AND @psession_id IS NOT null
    begin
     select @vcnt=count(1) from TPROJMAP where source_proj_id=@vproj_id and session_id=@psession_id
     if @vcnt =0 
        insert into TPROJMAP values(@psession_id,1,@vproj_id,@v_new_proj_id,@vnew_wbs_id)  
     else		 	
	update TPROJMAP set target_proj_id=@v_new_proj_id,target_wbs_id=@vnew_wbs_id where source_proj_id=@vproj_id and session_id=@psession_id
     end
    
     
   if @ppfolio_id is not null and @vpflag = 'Y'
     insert into prpfolio (pfolio_id, wbs_id ) 
     values ( @ppfolio_id, @vnew_wbs_id ) 

 
 end
 else
 begin
   set @pret_val =0
   -- this is a regular WBS node
   set @v_new_proj_id = @pnew_proj_id
   exec pc_new_wbs @pwbs_id, @v_new_proj_id, @pnew_parent_wbs_id, @vpflag, @copy_bit,
			@vnew_wbs_id OUTPUT, @vmsg OUTPUT,null,@vorig_proj_id
   if not @vnew_wbs_id > 0 
   begin
      set @pret_msg ='Error creating new wbs|' + @vmsg
      set @pret_val = -1
      return
   end 
 
 end

 declare @recurse_tree bit
 if substring(@copy_bit,23,1)='1' and @vpflag = 'N'
   set @recurse_tree = 0
 else
   set @recurse_tree = 1


 if @recurse_tree = 1 
 BEGIN
   -- Now Recurse WBS tree
   OPEN wbsCur
   FETCH NEXT FROM wbsCur INTO @fwbs_id
   WHILE (@@FETCH_STATUS = 0)
   BEGIN
     exec pc_process_level @fwbs_id , @pwbs_id, @vLevel,
  		  @vnew_wbs_id, @v_new_proj_id, @copy_bit, 
  		  @max_wbs_id ,
		  @pret_val output, @pret_msg output, 
		  @ppfolio_id,@puser_name,@psession_id
     if @pret_val < 0 
     begin
       -- CLEAN up everything for return to caller.
       CLOSE wbsCur
       DEALLOCATE wbsCur
       DEALLOCATE calCur
       return
     end

     FETCH NEXT FROM wbsCur INTO @fwbs_id
   END
   CLOSE wbsCur 
 END

--fix thresh_id in projissu

     DECLARE cpi CURSOR FOR select issue_id,thresh_id from projissu where proj_id = @v_new_proj_id and  delete_session_id is null order by issue_id
     DECLARE @new_pthresh_id int, @vissueid int, @old_pthresh_id int
     OPEN cpi
     FETCH NEXT FROM cpi INTO @vissueid,@old_pthresh_id
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       set @new_pthresh_id=NULL
       select @new_pthresh_id=new_thresh_id
       from ##ProjthrsID
       where old_thresh_id = @old_pthresh_id
       if @new_pthresh_id is not null
       begin
         update projissu set thresh_id= @new_pthresh_id
         where issue_id = @vissueid
       end
       FETCH NEXT FROM cpi INTO @vissueid,@old_pthresh_id
     END 
     DEALLOCATE cpi


   DECLARE calCur CURSOR LOCAL FOR
   select clndr_id from calendar
   where proj_id = @vproj_id
   and delete_session_id is null 
   order by clndr_id 

   
 -- Do Project level ACTV codes and Calendars if this is a project node
 if @vnode_flag = 'Y' 
 BEGIN
   exec pc_actvtype_copy @vproj_id, @v_new_proj_id, @pret_val OUTPUT, @pret_msg OUTPUT
   if @pret_val <> 0 
   begin
     DEALLOCATE wbsCur
     DEALLOCATE calCur
     return
   end

   OPEN calCur
   FETCH NEXT FROM calCur INTO @vclndr_id  
   WHILE (@@FETCH_STATUS = 0)
   BEGIN
     exec pc_get_next_key 'calendar_clndr_id', @vid OUTPUT
     insert into calendar
		( CLNDR_ID,DEFAULT_FLAG,CLNDR_NAME,PROJ_ID,BASE_CLNDR_ID  
		,LAST_CHNG_DATE,CLNDR_TYPE,CLNDR_DATA,DAY_HR_CNT,WEEK_HR_CNT,MONTH_HR_CNT,YEAR_HR_CNT)
     select @vid
		,DEFAULT_FLAG,CLNDR_NAME
		,@v_new_proj_id ,BASE_CLNDR_ID  
		,LAST_CHNG_DATE,CLNDR_TYPE,CLNDR_DATA,DAY_HR_CNT,WEEK_HR_CNT,MONTH_HR_CNT,YEAR_HR_CNT     
     from calendar
     where clndr_id = @vclndr_id;

     update task
     set clndr_id = @vid
     where clndr_id = @vclndr_id
     and proj_id = @v_new_proj_id;

     update project
     set clndr_id = @vid
     where clndr_id = @vclndr_id
     and proj_id = @v_new_proj_id;

     FETCH NEXT FROM calCur INTO @vclndr_id  
   
   END
   CLOSE calCur
 END



 set @pret_val = @v_new_proj_id
 set @pret_msg = 'complete'
 DEALLOCATE wbsCur
 DEALLOCATE calCur

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PC_HAS_EPS_CODE_ACCESS' and type='P')
  DROP PROCEDURE PC_HAS_EPS_CODE_ACCESS

PC_HAS_EPS_CODE_ACCESS
create procedure pc_has_eps_code_access 
( @pcode_wbs_id integer, @ptarget_wbs_id integer, @has_access bit OUTPUT )
as
  set @has_access = 0

  declare @v_new_wbs_id integer
  if @pcode_wbs_id = @ptarget_wbs_id 
  begin
    set @has_access = 1
    return
  end

  select @v_new_wbs_id = parent_wbs_id
  from projwbs
  where wbs_id = @ptarget_wbs_id
  and parent_wbs_id is not null;

  if @v_new_wbs_id is null
    return 

  exec pc_has_eps_code_access @pcode_wbs_id, @v_new_wbs_id, @has_access OUTPUT


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'MULTI_PROJECT_COPY' and type='P')
  DROP PROCEDURE MULTI_PROJECT_COPY

MULTI_PROJECT_COPY
CREATE PROCEDURE MULTI_PROJECT_COPY
	@pproj_list varchar(8000),
	@dest_wbs_id	integer,
	@copy_bit	varchar(30),
	@pret_val	integer OUTPUT,
	@pret_msg	varchar(4000) OUTPUT,
	@ppfolio_id	integer = null,
	@psession_id	integer = null,
  	@prepl_proj_id integer = null,
    	@pscenario_id integer=null
as
set nocount on 
declare @vwbs_id integer, @vdest_wbs_id integer, @vret integer,@pproj_id integer
declare @wbs_pflag char(1), @node_flag char(1), @pflag char(1)
declare @max_wbs_id integer, @user_name varchar(32), @cnt integer,@new_proj_list varchar(8000)
set @pproj_id=0
exec util_setlist @psession_id,@pproj_list,@pret_val OUTPUT,@pret_msg OUTPUT

while (@pproj_id  >-1) 
begin
 exec util_getnextlistval @psession_id,@pproj_id OUTPUT,@pret_msg OUTPUT  
   
  if @pproj_id =-1
      break ;

set @node_flag=null
select @node_flag=proj_node_flag from projwbs where wbs_id=@dest_wbs_id and delete_session_id is null 

set @vwbs_id=null
select @vwbs_id=wbs_id from projwbs where proj_id=@pproj_id and proj_node_flag = 'Y' and delete_session_id is null 
if @vwbs_id is null 
begin
  set @pret_msg = 'WBS ID does not exist for project ' + convert(varchar(30), @pproj_id)
  set @pret_val = -1
  return
end
set @wbs_pflag=null
select @wbs_pflag=project_flag , @vdest_wbs_id=parent_wbs_id
from projwbs pw, project p 
where p.proj_id = pw.proj_id
and pw.wbs_id = @dest_wbs_id
and pw.delete_session_id is null 

if @wbs_pflag = 'N'
  set @vdest_wbs_id=@dest_wbs_id
else if substring(@copy_bit,23,1)='1'
  select @vdest_wbs_id=parent_wbs_id
  from projwbs pw
  where pw.proj_id = @pproj_id
  and proj_node_flag = 'Y';

set @pflag=null
select @pflag=project_flag from project where proj_id = @pproj_id and delete_session_id is null 
if substring(@copy_bit,19,1)='1' and @pflag='N' and not substring(@copy_bit,23,1)='1'
begin
  set @pret_msg = 'Cannot copy baseline from EPS Node'
  set @pret_val = -1
  return
end

--Setup DOCID temp table
if exists (SELECT name FROM tempdb..sysobjects  WHERE name = '##DocID' AND type = 'U')
 delete from ##DocId 
 where system_id = @@spid
ELSE
  create table ##DocID ( system_id integer,old_doc_id int, new_doc_id int ) 

--Setup threshold id table
if exists (SELECT name FROM tempdb..sysobjects  WHERE name = '##ProjthrsID' AND type = 'U')
 delete from ##ProjthrsId 
 where system_id = @@spid
ELSE
  create table ##ProjthrsID ( system_id integer,old_thresh_id int, new_thresh_id int )

select @max_wbs_id= max(wbs_id) 
from projwbs
where delete_session_id is null 

if @psession_id is not null
begin
  set @user_name = null
  select @user_name=user_name 
  from users u, usession us
  where u.user_id = us.user_id
  and us.session_id = @psession_id
  and us.delete_session_id is null ;
  if @user_name is null
     set @user_name = 'system'
end
else
  set @user_name = 'system'
--Validate portfolio id
if @ppfolio_id is not null
begin
  select @cnt=count(*) from pfolio where pfolio_id = @ppfolio_id
  if @cnt = 0 
    set @ppfolio_id = null
end
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

-- If destination WBS_ID is a project then make destination one level up
exec pc_process_level @vwbs_id, @vdest_wbs_id, 0,@vdest_wbs_id, @pproj_id, @copy_bit,@max_wbs_id,@pret_val output, @pret_msg output, @ppfolio_id ,@user_name,@psession_id,@prepl_proj_id
if @pret_val < 0 
begin
  set @pret_msg = 'pc_process_level failed|' + @pret_msg
  rollback transaction
  return
end
else
begin
  if @new_proj_list is NULL 
     set @new_proj_list=ltrim(str(@pret_val))
  else
	 set @new_proj_list= @new_proj_list + ','+ ltrim(str(@pret_val))
end
if substring(@copy_bit,23,1)='1'
    insert into scenproj (scenario_id, proj_id) values (@pscenario_id,@pret_val)
end 

exec pc_taskpred_copy @@SPID, @copy_bit, @vret output, @pret_msg output
if @vret <> 0 
begin
  set @pret_msg = 'pc_taskpred copy failed|' + @pret_msg
  rollback transaction
  return
end
set @pret_msg=@new_proj_list
delete from pkxref where system_id=@@SPID and context_name = 'T'

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PROJECT_COPY' and type='P')
  DROP PROCEDURE PROJECT_COPY

PROJECT_COPY
CREATE PROCEDURE PROJECT_COPY
	@pproj_id	integer,
	@dest_wbs_id	integer,
	@copy_bit	varchar(30),
	@pret_val	integer OUTPUT,
	@pret_msg	varchar(4000) OUTPUT,
	@ppfolio_id	integer = null,
	@psession_id	integer = null,
        @prepl_proj_id integer = null
as
declare @proj_list varchar(2000)
set nocount on 
set @proj_list=str(@pproj_id)
exec multi_project_copy @proj_list,@dest_wbs_id,@copy_bit,@pret_val OUTPUT,@pret_msg OUTPUT,@ppfolio_id,@psession_id,@prepl_proj_id

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'TIME_APPROVAL_WBS_LEVEL' and type='P')
  DROP PROCEDURE TIME_APPROVAL_WBS_LEVEL

TIME_APPROVAL_WBS_LEVEL
CREATE PROCEDURE time_approval_wbs_level
	(@pwbs_id integer, @psession_id integer, 
	@pcontext_id integer, @pret_val integer OUTPUT,
	@pret_msg varchar(1000) OUTPUT )
AS 
  DECLARE wbs_child CURSOR LOCAL FOR
  select pw.wbs_id 
  from  projwbs pw
  where parent_wbs_id = @pwbs_id
  and delete_session_id is null

  DECLARE @vwbs_id int

  OPEN wbs_child
  FETCH NEXT FROM wbs_child INTO @vwbs_id
  WHILE (@@FETCH_STATUS = 0)
  BEGIN
    exec time_approval_wbs_level @vwbs_id, @psession_id, @pcontext_id, @pret_val OUTPUT , @pret_msg OUTPUT
    FETCH NEXT FROM wbs_child INTO  @vwbs_id
  END
  CLOSE wbs_child
  DEALLOCATE wbs_child

  
  if ( select count(*) from upklist where session_id = @psession_id and context_id = @pcontext_id
	and pk_id = @pwbs_id ) = 0 
  begin
    insert into upklist (session_id, context_id, pk_id ) 
    values (@psession_id, @pcontext_id, @pwbs_id);
  end


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'TIME_APPROVAL_WBS' and type='P')
  DROP PROCEDURE TIME_APPROVAL_WBS

TIME_APPROVAL_WBS
CREATE PROCEDURE time_approval_wbs 
	(@puser_id integer, @psession_id integer,@pcontext_id integer, 
	 @ppriv_num integer,@pret_val integer OUTPUT,
	@pret_msg varchar(1000) OUTPUT )
AS 
  set nocount on
  declare @vwbs_id integer, @cnt integer, @vparent_wbs_id integer

  delete from upklist 
  where session_id = @psession_id
  and context_id = @pcontext_id

  create table #ta_wbs (wbs_id integer, parent_wbs_id integer)
  insert into #ta_wbs
  select wbs_id, parent_wbs_id
  from projwbs pw, userobs uo, profpriv pp
  where pp.priv_num =  @ppriv_num
  and pp.prof_id = uo.prof_id
  and uo.user_id = @puser_id
  and pp.allow_flag = 'Y'
  and pw.obs_id = uo.obs_id
  and pw.delete_session_id is null 
  and uo.delete_session_id is null
  and pp.delete_session_id is null


  select count(*) from #ta_wbs;

  DECLARE ta_wbs CURSOR FOR
  select wbs_id, parent_wbs_id
  from #ta_wbs
  order by wbs_id

  OPEN ta_wbs
  FETCH NEXT FROM ta_wbs INTO @vwbs_id, @vparent_wbs_id
  WHILE (@@FETCH_STATUS = 0)
  BEGIN

    if ( SELECT count(*)
    FROM upklist u
    where session_id = @psession_id and context_id = @pcontext_id 
    and pk_id = @vparent_wbs_id ) = 0 
    begin

      exec time_approval_wbs_level @vwbs_id, @psession_id, @pcontext_id, @pret_val OUTPUT , @pret_msg OUTPUT
      if ( @pret_val <> 0 )
      BEGIN
        set @pret_val = -1 
        RETURN
      END

    end 

    FETCH NEXT FROM ta_wbs INTO @vwbs_id, @vparent_wbs_id
  END
  CLOSE ta_wbs
  DEALLOCATE ta_wbs
  

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PV_WBS_ROOT_PROC_CAND' and type='P')
  DROP PROCEDURE PV_WBS_ROOT_PROC_CAND

PV_WBS_ROOT_PROC_CAND
create procedure pv_wbs_root_proc_cand
@puser_id int, @pwbs_id int, @pret_val int OUTPUT
as
  declare @pwid int, @oid int,  @cnt int

  set @pret_val = 0;

  select @pwid=parent_wbs_id , @oid=obs_id
  from projwbs
  where wbs_id = @pwbs_id
  and delete_session_id is null;
  if @@ROWCOUNT=0 
    RETURN;

  select @cnt=count(*) 
  from profpriv pv, userobs uo
  where uo.user_id = @puser_id
  and uo.obs_id = @oid
  and uo.prof_id = pv.prof_id
  and pv.priv_num = 12 and pv.allow_flag = 'Y'  
  and uo.delete_session_id is null and pv.delete_session_id is null;

  if @cnt > 0 
  begin
    set @pret_val = 1
    return
  end
  else
  begin
    exec pv_wbs_root_proc_cand  @puser_id, @pwid, @pret_val OUTPUT
  end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PV_WBS_ROOT_NODES' and type='P')
  DROP PROCEDURE PV_WBS_ROOT_NODES

PV_WBS_ROOT_NODES
create procedure pv_wbs_root_nodes
@puser_id int, @pwbs_list varchar(4000) OUTPUT, 
@pwbs_list2 varchar(4000) OUTPUT , @pret_val int OUTPUT , @pret_msg varchar OUTPUT
as

  DECLARE ua CURSOR LOCAL FOR 
  select pw.proj_id, pw.wbs_id, project_flag
  from project p, uaccess ua , projwbs pw
  where ua.user_id = @puser_id
  and pw.proj_id = ua.proj_id
  and pw.proj_node_flag = 'Y'
  and p.proj_id = pw.proj_id
  and pw.delete_session_id is null and p.delete_session_id is null
  and not exists ( select * from uaccess ua2, projwbs pw2
           where user_id = @puser_id
           and ua2.proj_id = pw2.proj_id
           and pw.proj_node_flag = 'Y'
           and pw2.wbs_id = pw.parent_wbs_id 
           and pw2.delete_session_id is null);
  
  DECLARE cr CURSOR LOCAL FOR 
  select pw.wbs_id, pw.parent_wbs_id
  from profpriv pv, userobs uo, uaccess ua , projwbs pw
  where ua.user_id = @puser_id
  and pw.proj_id = ua.proj_id and pw.obs_id = uo.obs_id
  and uo.user_id = @puser_id and uo.prof_id = pv.prof_id
  and pv.priv_num = 12 and pv.allow_flag = 'Y'
  and pw.delete_session_id is null and pv.delete_session_id is null and uo.delete_session_id is null
  and not exists ( select *
           from profpriv pv, userobs uo,uaccess ua2, projwbs pw2
            where ua2.user_id = @puser_id
            and ua2.proj_id = pw2.proj_id and pw2.obs_id = uo.obs_id
            and uo.user_id = @puser_id and uo.prof_id = pv.prof_id
            and pv.priv_num = 12 and pv.allow_flag = 'Y'
            and pw2.wbs_id = pw.parent_wbs_id
            and pw2.delete_session_id is null and pv.delete_session_id is null and uo.delete_session_id is null);

  declare @cnt  int, @cntList2 int, @vstepmsg  varchar(60)
  declare @vproj_id int, @vwbs_id int, @vproject_flag varchar(1), @vparent_wbs_id int

  set @pwbs_list = null
  set @pwbs_list2 = null;
  set @cntList2 =0

  set @vstepmsg = 'POPULATE_UACCESS procedure.';
  exec populate_uaccess @puser_id, @pret_val OUTPUT

  if @pret_val <> 0 
  begin
   set @pret_msg = 'Error running POPULATE_UACCESS procedure'
   return
  end

  set @vstepmsg = ' project node query loop.'

  OPEN ua
  FETCH NEXT FROM ua INTO @vproj_id, @vwbs_id , @vproject_flag
  WHILE (@@FETCH_STATUS = 0)
  BEGIN
    print @vwbs_id
    if @pwbs_list is null
      set @pwbs_list = convert(varchar(10),@vwbs_id)
    else
      set @pwbs_list = @pwbs_list +','+ convert(varchar(10),@vwbs_id)

    FETCH NEXT FROM ua INTO @vproj_id, @vwbs_id , @vproject_flag
  END
  CLOSE ua
  DEALLOCATE ua

  set @vstepmsg = 'candidate financial node query loop.'

  OPEN cr
  FETCH NEXT FROM cr INTO  @vwbs_id , @vparent_wbs_id
  WHILE (@@FETCH_STATUS = 0)
  BEGIN
    exec pv_wbs_root_proc_cand @puser_id, @vparent_wbs_id , @pret_val OUTPUT
    if @pret_val = 0 
    BEGIN
      set @cntList2 = @cntList2 + 1
      if @pwbs_list2 is null
        set @pwbs_list2 = convert(varchar(10),@vwbs_id)
      else
        set @pwbs_list2 = @pwbs_list2 +','+ convert(varchar(10),@vwbs_id)
    END
    FETCH NEXT FROM cr INTO  @vwbs_id , @vparent_wbs_id
  END
  CLOSE cr
  DEALLOCATE cr
  

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBS_TREE_HAS_RSRC_ASSGN' and type='P')
  DROP PROCEDURE WBS_TREE_HAS_RSRC_ASSGN

WBS_TREE_HAS_RSRC_ASSGN
create procedure wbs_tree_has_rsrc_assgn
  (@pwbs_id int, @prsrc_id int, @pret_val int OUTPUT, @pret_msg VARCHAR(1000) OUTPUT)
as
  set nocount on
  declare  @v_child_wbs_id INT, @wbsrsrc_cnt INT

  BEGIN
    set @pret_val = 0
    set @wbsrsrc_cnt = 0
   
    if @prsrc_id = -1
    BEGIN
      set @wbsrsrc_cnt = (select count(*) from wbsrsrc 
      where wbs_id = @pwbs_id
      and delete_session_id is null)
    END
    ELSE
    BEGIN
      set @wbsrsrc_cnt =  (select count(*) from wbsrsrc 
      where wbs_id = @pwbs_id
      and rsrc_id = @prsrc_id
      and delete_session_id is null)
    END

    if @wbsrsrc_cnt != 0
    BEGIN
      set @pret_msg = 'WBS Resource Assignments found'
      set @pret_val = 1
      return
    END
  
    set @pret_val = 0
    set @wbsrsrc_cnt = 0 

    DECLARE rChildCur CURSOR LOCAL FOR 
    select wbs_id 
    from projwbs
    where parent_wbs_id = @pwbs_id
    and delete_session_id is null;

    OPEN rChildCur
    FETCH NEXT FROM rChildCur INTO @v_child_wbs_id
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
      if @prsrc_id = -1 
      BEGIN
        set @wbsrsrc_cnt = (select count(*) from wbsrsrc 
        where wbs_id = @v_child_wbs_id
        and delete_session_id is null)
      END
      ELSE
      BEGIN
        set @wbsrsrc_cnt = (select count(*) from wbsrsrc 
        where wbs_id = @v_child_wbs_id
        and rsrc_id = @prsrc_id
        and delete_session_id is null)
      END

      if @wbsrsrc_cnt != 0
      BEGIN
        set @pret_msg = 'WBS Resource Assignments found'
        set @pret_val = 1
        return
      END
      ELSE
      BEGIN
        exec wbs_tree_has_rsrc_assgn @v_child_wbs_id, @prsrc_id, @pret_val OUTPUT, @pret_msg OUTPUT 

        if @pret_val <> 0 
        BEGIN 
          return
        END 

       FETCH NEXT FROM rChildCur INTO @v_child_wbs_id
      END
    END
    CLOSE rChildCur
    DEALLOCATE rChildCur


  END

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBS_TREE_HAS_ROLE_ASSGN' and type='P')
  DROP PROCEDURE WBS_TREE_HAS_ROLE_ASSGN

WBS_TREE_HAS_ROLE_ASSGN
create procedure wbs_tree_has_role_assgn
  (@pwbs_id int, @prole_id int, @pret_val int OUTPUT, @pret_msg VARCHAR(1000) OUTPUT)
as
  set nocount on
  declare  @v_child_wbs_id INT, @wbsrsrc_cnt INT

  BEGIN
    set @pret_val = 0
    set @wbsrsrc_cnt = 0
   
    if @prole_id = -1
    BEGIN
      set @wbsrsrc_cnt = (select count(*) from wbsrsrc 
      where wbs_id = @pwbs_id
      and delete_session_id is null)
    END
    ELSE
    BEGIN
      set @wbsrsrc_cnt =  (select count(*) from wbsrsrc 
      where wbs_id = @pwbs_id
      and role_id = @prole_id
      and delete_session_id is null)
    END

    if @wbsrsrc_cnt != 0
    BEGIN
      set @pret_msg = 'WBS Role Assignments found'
      set @pret_val = 1
      return
    END
  
    set @pret_val = 0
    set @wbsrsrc_cnt = 0 

    DECLARE rChildCur CURSOR LOCAL FOR 
    select wbs_id 
    from projwbs
    where parent_wbs_id = @pwbs_id
    and delete_session_id is null;

    OPEN rChildCur
    FETCH NEXT FROM rChildCur INTO @v_child_wbs_id
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
      if @prole_id = -1 
      BEGIN
        set @wbsrsrc_cnt = (select count(*) from wbsrsrc 
        where wbs_id = @v_child_wbs_id
        and delete_session_id is null)
      END
      ELSE
      BEGIN
        set @wbsrsrc_cnt = (select count(*) from wbsrsrc 
        where wbs_id = @v_child_wbs_id
        and role_id = @prole_id
        and delete_session_id is null)
      END

      if @wbsrsrc_cnt != 0
      BEGIN
        set @pret_msg = 'WBS Role Assignments found'
        set @pret_val = 1
        return
      END
      ELSE
      BEGIN
        exec wbs_tree_has_rsrc_assgn @v_child_wbs_id, @prole_id, @pret_val OUTPUT, @pret_msg OUTPUT 

        if @pret_val <> 0 
        BEGIN 
          return
        END 

       FETCH NEXT FROM rChildCur INTO @v_child_wbs_id
      END
    END
    CLOSE rChildCur
    DEALLOCATE rChildCur


  END

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'DB_TO_IANA_CHARSET' and type='P')
  DROP PROCEDURE DB_TO_IANA_CHARSET

DB_TO_IANA_CHARSET
create procedure db_to_iana_charset ( @pcharset varchar(100) OUT )
as
  declare @servercollation sysname
  declare @verstr varchar(4), @dbname sysname, @sql nvarchar(1000)
  
  select @verstr = substring(replace(@@version,' ',''),19,4)

  select @dbname=name from master..sysdatabases 
  where dbid = (select dbid from master..sysprocesses where spid = @@spid)

  set @pcharset = 'ISO-8859-1'
    set @sql = N'select @sc = upper(convert(sysname, databasepropertyex('''+@dbname+''',''collation'')))';
    EXEC sp_executesql  @sql, N'@sc sysname OUTPUT', @servercollation OUT;

    print @servercollation  
    if @servercollation like 'CYRILLIC%'
      set @pcharset = 'windows-1251'
    else if @servercollation like 'JAPANESE%'
      set @pcharset = 'Shift_JIS'
    else if @servercollation like 'CHINESE_PRC%'
      set @pcharset = 'GBK'
    else if @servercollation like 'CHINESE_TAIWAN%'
      set @pcharset = 'BIG5'
    else if @servercollation like 'ARABIC%'
      set @pcharset = 'ISO-8859-6'
    else if @servercollation like 'HEBREW%'
      set @pcharset = 'ISO-8859-8'
    else if @servercollation like 'TURKISH%'
      set @pcharset = 'windows-1254'
    else if @servercollation like 'GREEK%'
      set @pcharset = 'ISO-8859-7'
    else if @servercollation like 'ESTONIAN%' or
            @servercollation like 'LATVIAN%' or
            @servercollation like 'LITHUANIAN%' 
      set @pcharset = 'windows-1257'
    else if @servercollation like 'CZECH%' or
            @servercollation like 'ALBANIAN%' or
            @servercollation like 'CROATIAN%' or
            @servercollation like 'HUNGARIAN%' or
            @servercollation like 'POLISH%' or
            @servercollation like 'ROMANIAN%' or
            @servercollation like 'SLOVAK%' or
            @servercollation like 'SLOVENIAN%'
      set @pcharset = 'windows-1250'
    else if @servercollation like 'VIETNAMESE%'
      set @pcharset = 'windows-1258'


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'GET_SAFETY_DATE' and type='P')
  DROP PROCEDURE GET_SAFETY_DATE

GET_SAFETY_DATE
create procedure get_safety_date
	@psafety_date	datetime OUTPUT,
	@pret_val	integer OUTPUT,
	@pret_msg	varchar(4000) OUTPUT
as
declare @currtime datetime
set @currtime=getDate()
set @pret_val = 0
select @psafety_date = min(login_time)  from master..sysprocesses where dbid in (
select dbid from master..sysprocesses
where spid = @@spid)
and open_tran > 0

if @psafety_date is null 
  set @psafety_date = @currtime

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'POPULATE_DELAYED_LOADING' and type='P')
  DROP PROCEDURE POPULATE_DELAYED_LOADING

POPULATE_DELAYED_LOADING
CREATE PROCEDURE populate_delayed_loading
	@psession_id	integer,
	@pret_val	integer OUTPUT,
	@pret_msg	varchar(4000) OUTPUT,
        @pchange_bits   varchar(255) = 'ALL'
as
  set nocount on 
  set transaction isolation level READ UNCOMMITTED 
  declare @updated_rsrc bit, @updated_role bit, @updated_obs bit, @user_id int
  declare @sid int
  set @sid=@psession_id

  set @updated_rsrc = 0
  set @updated_role = 0
  set @updated_obs = 0
  if @pchange_bits = 'ALL' 
     or substring(@pchange_bits,72,1) = '1'		--task
     or substring(@pchange_bits,80,1) = '1'		--taskrsrc
     or substring(@pchange_bits,42,1) = '1'		--projrisk
     or substring(@pchange_bits,37,1) = '1'		--projest
     or substring(@pchange_bits,39,1) = '1'		--projissu
     or substring(@pchange_bits,119,1) = '1'		--wbsrsrc
  begin
    set @updated_rsrc = 1
    delete from dltrsrc where session_id = @sid;
  
    insert into DLTRSRC (session_id, rsrc_id)  
    SELECT @sid, IsNull(rsrc_id,0) FROM  projshar ps inner loop join task t 
    ON ps.proj_id = t.proj_id and ps.session_id = @sid
    UNION SELECT @sid, IsNull(rsrc_id,0) FROM  projshar ps inner loop join taskrsrc tr 
    ON ps.proj_id = tr.proj_id and ps.session_id = @sid
    UNION SELECT @sid, IsNull(rsrc_id,0) FROM projshar ps inner loop join projrisk pr
    ON ps.proj_id = pr.proj_id and ps.session_id = @sid
    UNION SELECT @sid, IsNull(rsrc_id,0) FROM projshar ps inner loop join projest pe
    ON ps.proj_id = pe.proj_id and ps.session_id = @sid
    UNION SELECT @sid, IsNull(rsrc_id,0) FROM projshar ps inner loop join projissu pi
    ON ps.proj_id = pi.proj_id and ps.session_id = @sid
    UNION SELECT @sid, IsNull(rsrc_id,0) FROM projshar ps inner loop join trsrcsum tr
    ON ps.proj_id = tr.proj_id and ps.session_id = @sid
    UNION SELECT @sid, IsNull(rsrc_id,0) FROM projshar ps inner loop join wbsrsrc wr
    ON ps.proj_id = wr.proj_id and ps.session_id = @sid

  end

  if @pchange_bits = 'ALL' or @updated_rsrc = 1
     or substring(@pchange_bits,80,1) = '1'		--taskrsrc
     or substring(@pchange_bits,119,1) = '1'		--wbsrsrc
  begin
    set @updated_role = 1
    delete from dltrole where session_id = @sid;
 
    insert into DLTROLE (session_id, role_id)  
    SELECT @sid, IsNull(role_id,0) FROM projshar ps inner loop join taskrsrc tr
    ON ps.proj_id = tr.proj_id and ps.session_id = @sid
    UNION SELECT @sid, IsNull(role_id,0) FROM dltrsrc dr inner loop join rsrc r 
    ON r.rsrc_id = dr.rsrc_id and dr.session_id = @sid
    UNION SELECT @sid, IsNull(role_id,0) FROM  dltrsrc dr inner loop join rsrcrole rs
    ON rs.rsrc_id = dr.rsrc_id and  rs.role_id IS NOT NULL and dr.session_id = @sid
    UNION SELECT @sid, IsNull(role_id,0) FROM PROJSHAR ps inner loop join trsrcsum tr
    ON ps.proj_id = tr.proj_id and ps.session_id = @sid
    UNION SELECT @sid, IsNull(role_id,0) FROM PROJSHAR ps inner loop join wbsrsrc wr 
    ON ps.proj_id = wr.proj_id and ps.session_id = @sid;

  end

  if @pchange_bits = 'ALL' or @updated_rsrc = 1 or @updated_role = 1 
  begin
    delete from dltrsrl where session_id = @sid;
 
    insert into DLTRSRL (session_id, rsrc_id, role_id)  
    SELECT @sid, rr.rsrc_id, rr.role_id FROM dltrole drl inner loop join rsrcrole rr
    ON rr.role_id = drl.role_id and drl.session_id = @sid
    UNION SELECT @sid, rr.rsrc_id, rr.role_id FROM dltrsrc dr inner loop join rsrcrole rr
    ON rr.rsrc_id = dr.rsrc_id and dr.session_id = @sid
  end

  if @pchange_bits = 'ALL'
     or substring(@pchange_bits,45,1) = '1'		--projwbs
     or substring(@pchange_bits,42,1) = '1'		--projrisk
     or substring(@pchange_bits,44,1) = '1'		--projthrs
     or substring(@pchange_bits,39,1) = '1'		--projissu
  begin
    set @updated_obs = 1
    delete from dltobs where session_id = @sid;
 
    insert into DLTOBS (session_id, obs_id)  
    SELECT @sid, obs_id from projwbs pw, projshar ps where ps.proj_id = pw.proj_id and session_id = @sid    
    UNION SELECT @sid, obs_id from projissu pi, projshar ps where ps.proj_id = pi.proj_id and session_id = @sid    
    UNION SELECT @sid, obs_id from projthrs pt, projshar ps where ps.proj_id = pt.proj_id and session_id = @sid    
    UNION SELECT @sid, obs_id from projrisk pr, projshar ps 
		where ps.proj_id = pr.proj_id and session_id = @sid and obs_id is not null;
  end

  if @pchange_bits = 'ALL'
     or substring(@pchange_bits,36,1) = '1'		--project
     or substring(@pchange_bits,80,1) = '1'		--taskrsrc
     or substring(@pchange_bits,35,1) = '1'		--projcost
  begin
    delete from dltacct where session_id = @sid;
 
    insert into DLTACCT (session_id, acct_id)  
    SELECT @sid, IsNull(acct_id,0) from projshar ps inner loop join taskrsrc tr
    ON ps.proj_id = tr.proj_id and session_id = @sid
    UNION SELECT @sid, IsNull(acct_id,0) from projshar ps inner loop join project p
    ON ps.proj_id = p.proj_id and session_id = @sid
    UNION SELECT @sid, IsNull(acct_id,0) from projshar ps inner loop join projcost pc
    ON ps.proj_id = pc.proj_id and session_id = @sid
  end

  if @pchange_bits = 'ALL' or @updated_obs = 1
     or substring(@pchange_bits,62,1) = '1'		--rsrc
     or substring(@pchange_bits,97,1) = '1'		--userobs
  begin
    select @user_id=user_id from usession where session_id = @sid;

    delete from dltuser where session_id = @sid;
 
    insert into DLTUSER (session_id, user_id)  
    SELECT @sid, IsNull(@user_id,0)
    UNION SELECT @sid, IsNull(user_id,0) from dltrsrc dr, rsrc r
    where dr.rsrc_id = r.rsrc_id and session_id = @sid
    UNION SELECT @sid, IsNull(ts_approve_user_id,0) from dltrsrc dr, rsrc r
    where dr.rsrc_id = r.rsrc_id and session_id = @sid
    UNION SELECT @sid, user_id from dltobs dr, userobs uo
    where uo.obs_id = dr.obs_id and session_id = @sid
  end

  if @pchange_bits = 'ALL' 
     or substring(@pchange_bits,73,1) = '1'		--taskactv
     or substring(@pchange_bits,2,1) = '1'		--actvcode
     or substring(@pchange_bits,3,1) = '1'		--actvtype
  begin
    delete from dltactv where session_id = @sid;

    insert into DLTACTV (session_id, actv_code_id)  
    SELECT @sid, actv_code_id from  projshar ps inner loop join taskactv ta
    on ps.proj_id = ta.proj_id and session_id = @sid
    UNION SELECT @sid, actv_code_id from projshar ps inner loop join actvtype at 
          on session_id = @sid and ps.proj_id = at.proj_id
    , actvcode ac
    where ac.actv_code_type_id = at.actv_code_type_id 
  end

  set @pret_val=0

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'GLOBAL_TABLE_CHANGE' and type='P')
  DROP PROCEDURE GLOBAL_TABLE_CHANGE

GLOBAL_TABLE_CHANGE
create procedure global_table_change
	@pTS		datetime,
	@pchange_bits	varchar(255) OUTPUT,
	@psafety_date	datetime OUTPUT,
	@pret_val	integer OUTPUT,
	@pret_msg	varchar(4000) OUTPUT
as
  declare @vCnt tinyint;
  set @pret_val = -1
  exec get_safety_date  @psafety_date OUTPUT, @pret_val OUTPUT,@pret_msg OUTPUT
  set @pchange_bits = '000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
        select @vCnt=count(*) where exists (select * from ACCOUNT where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,1,1,'1') 
        select @vCnt=count(*) where exists (select * from ACTVCODE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,2,1,'1') 
        select @vCnt=count(*) where exists (select * from ACTVTYPE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,3,1,'1') 
        select @vCnt=count(*) where exists (select * from ADMIN_CONFIG where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,4,1,'1') 
        select @vCnt=count(*) where exists (select * from BASETYPE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,5,1,'1') 
        select @vCnt=count(*) where exists (select * from CALENDAR where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,8,1,'1') 
        select @vCnt=count(*) where exists (select * from COSTTYPE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,9,1,'1') 
        select @vCnt=count(*) where exists (select * from CURRTYPE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,10,1,'1') 
        select @vCnt=count(*) where exists (select * from DASHBOARD where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,147,1,'1') 
        select @vCnt=count(*) where exists (select * from DASHUSER where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,133,1,'1') 
        select @vCnt=count(*) where exists (select * from DOCCATG where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,11,1,'1') 
        select @vCnt=count(*) where exists (select * from DOCSTAT where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,12,1,'1') 
        select @vCnt=count(*) where exists (select * from EXTAPP where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,14,1,'1') 
        select @vCnt=count(*) where exists (select * from EXPPROJ where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,129,1,'1') 
        select @vCnt=count(*) where exists (select * from FACTOR where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,15,1,'1') 
        select @vCnt=count(*) where exists (select * from FACTVAL where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,16,1,'1') 
        select @vCnt=count(*) where exists (select * from FILTPROP where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,17,1,'1') 
        select @vCnt=count(*) where exists (select * from FINDATES where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,115,1,'1') 
        select @vCnt=count(*) where exists (select * from FUNDSRC where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,18,1,'1') 
        select @vCnt=count(*) where exists (select * from GCHANGE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,19,1,'1') 
        select @vCnt=count(*) where exists (select * from JOBLOG where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,167,1,'1') 
        select @vCnt=count(*) where exists (select * from JOBSVC where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,21,1,'1') 
        select @vCnt=count(*) where exists (select * from JOBRPT where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,130,1,'1') 
        select @vCnt=count(*) where exists (select * from MEMOTYPE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,22,1,'1') 
        select @vCnt=count(*) where exists (select * from NONWORK where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,24,1,'1') 
        select @vCnt=count(*) where exists (select * from NOTE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,156,1,'1') 
        select @vCnt=count(*) where exists (select * from OBS where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,25,1,'1') 
        select @vCnt=count(*) where exists (select * from PCATTYPE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,26,1,'1') 
        select @vCnt=count(*) where exists (select * from PCATUSER where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,27,1,'1') 
        select @vCnt=count(*) where exists (select * from PCATVAL where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,28,1,'1') 
        select @vCnt=count(*) where exists (select * from PFOLIO where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,29,1,'1') 
        select @vCnt=count(*) where exists (select * from PHASE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,30,1,'1') 
        select @vCnt=count(*) where exists (select * from POBS where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,132,1,'1') 
        select @vCnt=count(*) where exists (select * from PREFER where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,32,1,'1') 
        select @vCnt=count(*) where exists (select * from PROFILE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,33,1,'1') 
        select @vCnt=count(*) where exists (select * from PROCGROUP where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,113,1,'1') 
        select @vCnt=count(*) where exists (select * from PROCITEM where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,114,1,'1') 
        select @vCnt=count(*) where exists (select * from PROFPRIV where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,34,1,'1') 
        select @vCnt=count(*) where exists (select * from PROJECT where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,36,1,'1') 
        select @vCnt=count(*) where exists (select * from PROJPCAT where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,40,1,'1') 
        select @vCnt=count(*) where exists (select * from PROJWBS where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,45,1,'1') 
        select @vCnt=count(*) where exists (select * from PRPFOLIO where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,46,1,'1') 
        select @vCnt=count(*) where exists (select * from RCATTYPE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,48,1,'1') 
        select @vCnt=count(*) where exists (select * from RCATVAL where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,49,1,'1') 
        select @vCnt=count(*) where exists (select * from RFOLIO where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,52,1,'1') 
        select @vCnt=count(*) where exists (select * from RISKTYPE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,54,1,'1') 
        select @vCnt=count(*) where exists (select * from RLFOLIO where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,55,1,'1') 
        select @vCnt=count(*) where exists (select * from ROLFOLIO where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,56,1,'1') 
        select @vCnt=count(*) where exists (select * from ROLERATE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,126,1,'1') 
        select @vCnt=count(*) where exists (select * from ROLELIMIT where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,57,1,'1') 
        select @vCnt=count(*) where exists (select * from ROLES where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,57,1,'1') 
        select @vCnt=count(*) where exists (select * from RPT where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,58,1,'1') 
        select @vCnt=count(*) where exists (select * from RPTBATCH where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,59,1,'1') 
        select @vCnt=count(*) where exists (select * from RPTGROUP where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,60,1,'1') 
        select @vCnt=count(*) where exists (select * from RPTLIST where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,61,1,'1') 
        select @vCnt=count(*) where exists (select * from RSRC where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,62,1,'1') 
        select @vCnt=count(*) where exists (select * from RSRCANDASH where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,151,1,'1') 
        select @vCnt=count(*) where exists (select * from RSRCANVIEW where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,149,1,'1') 
        select @vCnt=count(*) where exists (select * from RSRCCURV where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,63,1,'1') 
        select @vCnt=count(*) where exists (select * from RSRCRATE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,66,1,'1') 
        select @vCnt=count(*) where exists (select * from RSRCRCAT where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,67,1,'1') 
        select @vCnt=count(*) where exists (select * from RSRCROLE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,68,1,'1') 
        select @vCnt=count(*) where exists (select * from RSRCSEC where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,112,1,'1') 
        select @vCnt=count(*) where exists (select * from RSRFOLIO where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,69,1,'1') 
        select @vCnt=count(*) where exists (select * from SCENARIO where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,143,1,'1') 
        select @vCnt=count(*) where exists (select * from SCENPROJ where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,145,1,'1') 
        select @vCnt=count(*) where exists (select * from SCENUSER where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,157,1,'1') 
        select @vCnt=count(*) where exists (select * from SCENROLE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,165,1,'1') 
	select @vCnt=count(*) where exists ( select * from SETTINGS where namespace not like 'database%' and update_date > @pTS);
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,134,1,'1')
        select @vCnt=count(*) where exists (select * from SHIFT where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,70,1,'1') 
        select @vCnt=count(*) where exists (select * from SHIFTPER where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,71,1,'1') 
        select @vCnt=count(*) where exists (select * from TASKSUM where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,81,1,'1') 
        select @vCnt=count(*) where exists (select * from TASKSUMFIN where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,169,1,'1') 
        select @vCnt=count(*) where exists (select * from TRAKVIEW where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,86,1,'1') 
        select @vCnt=count(*) where exists (select * from TRSRCSUM where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,87,1,'1') 
        select @vCnt=count(*) where exists (select * from TRSRCSUMFN where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,170,1,'1') 
        select @vCnt=count(*) where exists (select * from TSDATES where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,88,1,'1') 
        select @vCnt=count(*) where exists (select * from TSDELEGATE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,171,1,'1') 
        select @vCnt=count(*) where exists (select * from UDFCODE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,111,1,'1') 
        select @vCnt=count(*) where exists (select * from UDFTYPE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,90,1,'1') 
        select @vCnt=count(*) where exists (select * from UDFVALUE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,91,1,'1') 
        select @vCnt=count(*) where exists (select * from UMEASURE where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,92,1,'1') 
        select @vCnt=count(*) where exists (select * from USERCOL where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,94,1,'1') 
        select @vCnt=count(*) where exists (select * from USERDATA where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,95,1,'1') 
        select @vCnt=count(*) where exists (select * from USERENG where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,96,1,'1') 
        select @vCnt=count(*) where exists (select * from USEROBS where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,97,1,'1') 
        select @vCnt=count(*) where exists (select * from USERS where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,98,1,'1') 
        select @vCnt=count(*) where exists (select * from VIEWPREF where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,155,1,'1') 
        select @vCnt=count(*) where exists (select * from VWPREFDASH where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,168,1,'1') 
        select @vCnt=count(*) where exists (select * from VWPREFDATA where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,153,1,'1') 
        select @vCnt=count(*) where exists (select * from VWPREFUSER where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,154,1,'1') 
        select @vCnt=count(*) where exists (select * from VIEWPROP where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,101,1,'1') 
        select @vCnt=count(*) where exists (select * from WBSBUDG where update_date > @pTS );
        if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,102,1,'1') 
  set @pret_val = 0

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'OPEN_TABLE_CHANGE' and type='P')
  DROP PROCEDURE OPEN_TABLE_CHANGE

OPEN_TABLE_CHANGE
create procedure open_table_change
	@pTS		datetime,
	@psession_id integer,
	@pload_status varchar(1),
	@pchange_bits	varchar(255) OUTPUT,
	@psafety_date	datetime OUTPUT,
	@pret_val	integer OUTPUT,
	@pret_msg	varchar(4000) OUTPUT
as
  declare @vCnt tinyint;
  set @pret_val = -1
  exec get_safety_date  @psafety_date OUTPUT, @pret_val OUTPUT,@pret_msg OUTPUT
  set @pchange_bits = '000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
	select @vCnt=count(*) where exists ( select * from ACTVCODE t, ACTVTYPE A, PROJSHAR p where t.update_date > @pTS 
			and a.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status 
			and a.actv_code_type_id = t.actv_code_type_id);
  if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,2,1,'1')
	select @vCnt=count(*) where exists ( select * from ACTVTYPE t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,3,1,'1')
	select @vCnt=count(*) where exists ( select * from BUDGCHNG t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,7,1,'1')
	select @vCnt=count(*) where exists ( select * from CALENDAR t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,8,1,'1')
	select @vCnt=count(*) where exists ( select * from DOCUMENT t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,13,1,'1')
	select @vCnt=count(*) where exists ( select * from EXTAPP t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,14,1,'1')
	select @vCnt=count(*) where exists ( select * from EXPPROJ t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,129,1,'1')
	select @vCnt=count(*) where exists ( select * from ISSUHIST t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,20,1,'1')
	select @vCnt=count(*) where exists ( select * from PROJCOST t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,35,1,'1')
	select @vCnt=count(*) where exists ( select * from PROJECT t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,36,1,'1')
	select @vCnt=count(*) where exists ( select * from PROJEST t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,37,1,'1')
	select @vCnt=count(*) where exists ( select * from PROJFUND t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,38,1,'1')
	select @vCnt=count(*) where exists ( select * from PROJISSU t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,39,1,'1')
	select @vCnt=count(*) where exists ( select * from PROJPROP t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,41,1,'1')
	select @vCnt=count(*) where exists ( select * from PROJRISK t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,42,1,'1')
	select @vCnt=count(*) where exists ( select * from PROJTHRS t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,44,1,'1')
	select @vCnt=count(*) where exists ( select * from PROJWBS t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,45,1,'1')
	select @vCnt=count(*) where exists ( select * from PROJWSRPT t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,131,1,'1')
	select @vCnt=count(*) where exists ( select * from RISKCTRL t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,53,1,'1')
	select @vCnt=count(*) where exists ( select * from RPT t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,58,1,'1')
	select @vCnt=count(*) where exists ( select * from TASK t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,72,1,'1')
	select @vCnt=count(*) where exists ( select * from TASKACTV t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,73,1,'1')
	select @vCnt=count(*) where exists ( select * from TASKDOC t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,74,1,'1')
	select @vCnt=count(*) where exists ( select * from TASKFDBK t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,75,1,'1')
	select @vCnt=count(*) where exists ( select * from TASKFIN t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,116,1,'1')
	select @vCnt=count(*) where exists ( select * from TASKMEMO t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,76,1,'1')
	select @vCnt=count(*) where exists ( select * from TASKNOTE t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,77,1,'1')
	select @vCnt=count(*) where  exists ( select * from TASKPRED t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );  
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,78,1,'1')
	select @vCnt=count(*) where exists ( select * from TASKPRED t, PROJSHAR p where update_date > @pTS 
			and t.pred_proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
  if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,78,1,'1')
	select @vCnt=count(*) where exists ( select * from TASKPROC t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,79,1,'1')
	select @vCnt=count(*) where exists ( select * from TASKRSRC t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,80,1,'1')
	select @vCnt=count(*) where exists ( select * from TASKSUM t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,81,1,'1')
	select @vCnt=count(*) where exists ( select * from TASKSUMFIN t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,169,1,'1')
	select @vCnt=count(*) where exists ( select * from TRSRCFIN t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,117,1,'1')
	select @vCnt=count(*) where exists ( select * from TRSRCSUM t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,87,1,'1')
	select @vCnt=count(*) where exists ( select * from TRSRCSUMFN t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,170,1,'1')
	select @vCnt=count(*) where exists ( select * from UDFVALUE t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,91,1,'1')
	select @vCnt=count(*) where exists ( select * from WBSBUDG t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,102,1,'1')
	select @vCnt=count(*) where exists ( select * from WBSMEMO t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,103,1,'1')
	select @vCnt=count(*) where exists ( select * from WBSRSRC t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,109,1,'1')
	select @vCnt=count(*) where exists ( select * from WBSSTEP t, PROJSHAR p where update_date > @pTS 
			and t.proj_id = p.proj_id and p.session_id = @psession_id and p.load_status = @pload_status );
	if @vCnt = 1 	set @pChange_bits = stuff(@pChange_bits,104,1,'1')
         --Run delayed loading procedure if this is PM
		exec populate_delayed_loading @psession_id,@pret_val output, @pret_msg output , @pchange_bits
  

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'CHECK_LAST_SUMM' and type='P')
  DROP PROCEDURE CHECK_LAST_SUMM

CHECK_LAST_SUMM
CREATE PROCEDURE check_last_summ 
(@pproj_id integer, @pret_val integer OUTPUT, @pret_msg varchar(1000) OUTPUT )
AS 
  set nocount on
  DECLARE @lts datetime, @cnt integer, @summ_level varchar(12)

  if (select count(*) from project where proj_id = @pproj_id ) = 0
  begin
    set @pret_val = -1
    set @pret_msg = 'Project id ' + str(@pproj_id) + ' does not exist';
    return 
  end 
  select @lts = last_tasksum_date
  from project
  where proj_id = @pproj_id;
  if @lts is null
  begin
    set @pret_val = 1;
    return
  end
  
  select @summ_level = sum_assign_level
  from project
  where proj_id = @pproj_id;
  
  set @pret_val = 0

  if (select count(*) 
	  where exists (select * from refrdel 
		where delete_date > @lts
 		and proj_id = @pproj_id 
		and table_name in ('PROJWBS','TASK','TASKRSRC','PROJECT',
					'PROJCOST','TASKFIN','TASKSUM','TRSRCFIN','TRSRCSUM','TASKSUMFIN','TRSRCSUMFN', 'WBSRSRC', 'WBSRSRC_QTY')
			)
	)   > 0 
  begin
    set @pret_val = 1;
    return
  end
  if (select count(*) 
	  where  exists (select * from task where update_date > @lts
			and proj_id = @pproj_id)
	  or exists (select * from taskrsrc where update_date > @lts
			and proj_id = @pproj_id)
	  or exists (select * from project where update_date > @lts
			and proj_id = @pproj_id)
	  or exists (select * from projwbs where update_date > @lts
			and proj_id = @pproj_id)
	  or exists (select * from projcost where update_date > @lts
			and proj_id = @pproj_id)
	  or exists (select * from taskfin where update_date > @lts
			and proj_id = @pproj_id)
	  or exists (select * from tasksum where update_date > @lts
			and proj_id = @pproj_id)
	  or exists (select * from tasksumfin where update_date > @lts
			and proj_id = @pproj_id)
	  or exists (select * from trsrcfin where update_date > @lts
			and proj_id = @pproj_id)
	  or exists (select * from trsrcsum where update_date > @lts
			and proj_id = @pproj_id)
	  or exists (select * from trsrcsumfn where update_date > @lts
			and proj_id = @pproj_id)
	  or exists (select * from wbsrsrc where update_date > @lts
			and proj_id = @pproj_id
			and @summ_level = 'SL_Wbsrsrc')
	  or exists (select * from wbsrsrc_qty wq, wbsrsrc wr where wq.update_date > @lts
			and wr.wbsrsrc_id = wq.wbsrsrc_id
			and wr.proj_id = @pproj_id
			and @summ_level = 'SL_Wbsrsrc')
	  or exists (select * from prefer where update_date > @lts)
	)   > 0 
  begin
    set @pret_val = 1;
    return
  end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'REFRDEL_CLEANUP' and type='P')
  DROP PROCEDURE REFRDEL_CLEANUP

REFRDEL_CLEANUP
CREATE procedure REFRDEL_CLEANUP
 (@pret_val integer OUTPUT, @pret_msg varchar(1000) OUTPUT ) AS 

  declare @curr_time datetime
  declare @vdiff integer
  declare @vinterval_date datetime
  declare @vset varchar(20)
  declare @vsetnum integer
  declare @min_refrdel_date datetime
  declare @delete_target datetime
  declare @max_minutes_to_sweep integer  
  declare @interval_step integer 
  declare @cnt integer 
  declare @i integer
  declare @total_cleared integer 
begin try
  set @curr_time=getdate()
  set @cnt=0
  set @i=1
  set @pret_val=0
  set @total_cleared=0
  exec settings_read_number @max_minutes_to_sweep OUTPUT,'database.cleanup.Refrdel','DaysToDelete',1
  exec settings_read_number @interval_step OUTPUT,'database.cleanup.Refrdel','IntervalStep',15
  exec settings_read_string @vset OUTPUT,'database.cleanup.Refrdel','KeepInterval','5d'
  set @max_minutes_to_sweep=@max_minutes_to_sweep*1440
  exec get_interval_difference @vset, @vdiff OUTPUT
   set @vinterval_date = @curr_time-@vdiff
  print 'Keep Date: ' + convert(varchar(30),@vinterval_date)

  select @min_refrdel_date=min(delete_date)  from refrdel
  print 'Oldest Refrdel: ' + convert(varchar(30),@min_refrdel_date)
  
  set @delete_target = @min_refrdel_date
  if @min_refrdel_date is not null 
  begin 
  set @total_cleared=0
  while ( @i <= @max_minutes_to_sweep and @delete_target < @vinterval_date ) 
  begin
    set @delete_target=dateadd(mi,@interval_step,@delete_target)	
    delete from refrdel where delete_date< @delete_target
    set @total_cleared= @total_cleared +@@rowcount
	
    set @i=@i+@interval_step
  end   
 end 
 else
  print 'Nothing to Delete'
  set @pret_val =@total_cleared
  set @pret_msg='Cleared: ' + ltrim(str(@pret_val)) + ' records from ' + convert(varchar(30),@min_refrdel_date) +' to ' + convert(varchar(30),@delete_target)
  print @pret_msg
end try
Begin Catch
 set @pret_val=error_number()
 set @pret_msg=error_message()
End Catch

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'AUDIT_TAB_OPTIONS' and type='P')
  DROP PROCEDURE AUDIT_TAB_OPTIONS

AUDIT_TAB_OPTIONS
CREATE PROCEDURE audit_tab_options
(@ptable_name varchar(30), @paudit int OUTPUT
, @pins_audit int=0 OUTPUT, @pupd_audit int=0 OUTPUT, @pdel_audit int=0 OUTPUT
, @pcolumn_audit varchar(255)='' OUTPUT)
as
  set nocount on
  declare @audit_str varchar(4), @namespace varchar(255)
  exec settings_read_bool @paudit OUTPUT,'database.audit','Enabled',0
  set @namespace = 'database.audit.' + @ptable_name
  exec settings_read_string @audit_str OUTPUT,@namespace,'Options','111'
  set @pins_audit = substring(@audit_str,1,1)
  set @pupd_audit = substring(@audit_str,2,1)
  set @pdel_audit = substring(@audit_str,3,1)
if @pins_audit=0 and @pupd_audit=0 and @pdel_audit=0 
   set @paudit=0

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'AUDIT_PRM_USER' and type='P')
  DROP PROCEDURE AUDIT_PRM_USER

AUDIT_PRM_USER
CREATE PROCEDURE audit_prm_user
( @psession_id int OUTPUT, @pprm_user_name varchar(32) OUTPUT
, @papp_name varchar(25) OUTPUT)
as
  set nocount on
  select @psession_id=session_id, @pprm_user_name=user_name, @papp_name=app_name
  from users u , usession us
  where u.user_id = us.user_id
  and us.spid = @@spid
  and u.delete_session_id is null and us.delete_session_id is null
  if @@ROWCOUNT = 0 
  begin	
    set @psession_id = 0

    select @pprm_user_name=user_name, @papp_name=app_name
    from spidmap
    where spid=@@spid
    if @@ROWCOUNT = 0 
    BEGIN
      set @pprm_user_name = 'NotPrmUser'
      set @papp_name = ''
    END 
  end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'AUDIT_PROC_INFO' and type='P')
  DROP PROCEDURE AUDIT_PROC_INFO

AUDIT_PROC_INFO
CREATE PROCEDURE audit_proc_info
( @pprogram varchar(255) OUTPUT, @phostname varchar(255) OUTPUT
, @pnetaddress varchar(24) OUTPUT, @prdbms_user varchar(30) OUTPUT
, @pos_user varchar(32) OUTPUT )
as
  select @pprogram=program_name , @phostname=hostname
  , @pnetaddress=net_address, @prdbms_user=u.name, @pos_user=nt_username
from master..sysprocesses sp, sysusers u
where sp.uid = u.uid  and spid = @@SPID

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'AUDIT_IDENTITY' and type='P')
  DROP PROCEDURE AUDIT_IDENTITY

AUDIT_IDENTITY
CREATE PROCEDURE audit_identity
( @psession_id int, @puser_id int=null, @puser_name varchar(32)=null)
as
  declare @cnt smallint, @user_name varchar(32), @user_id int
  set nocount on 
  if @puser_id is not null or @puser_name is not null 
  BEGIN
    if @puser_name is not null 
    BEGIN
      set @user_name = @puser_name
      set @user_id = 0
    END
    ELSE
    BEGIN
      select @user_name=user_name 
      from users
      where user_id = @puser_id
      and delete_session_id is null
      if @@ROWCOUNT = 0 
      BEGIN
        set @user_name = 'NotPrmUser'
        set @user_id = 0
      END
      ELSE
      BEGIN
        set @user_id = @puser_id
      END
    END

    select @cnt=count(*) from spidmap where spid = @@spid
    if @cnt = 0 
      insert into spidmap (spid,user_id,user_name)
      values(@@spid,@user_id,@user_name)
    ELSE
      update spidmap 
      set user_id = @user_id, user_name = @user_name
      where spid = @@spid
  END
  ELSE
  BEGIN
    update usession set spid=@@SPID where session_id = @psession_id
  END

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'AUDIT_DATA' and type='P')
  DROP PROCEDURE AUDIT_DATA

AUDIT_DATA
CREATE PROCEDURE audit_data
( @ptable_name varchar(30), @pcolumn_name varchar(30), @poper char(1)
, @ppk1 varchar(32), @ppk2 varchar(32), @ppk3 varchar(32), @ppk4 varchar(32),  @pprm_user_name varchar(32)
, @pprogram varchar(255), @phostname varchar(255), @pnetaddress varchar(24)
, @prdbms_user varchar(30), @pos_user varchar(32), @papp_name varchar(25)
, @pcolaud int, @plogical_delete varchar(1), @pprimary_record varchar(1)
, @pbefore_value varchar(2000), @pafter_value varchar(2000), @paudit_data varchar(4000) OUTPUT
)
as
  set nocount on
  if @pcolaud is null or @pcolaud = 1 
  begin
    declare @audit_data varchar(4000)
    declare @ptrval binary(16), @blen int
    set @audit_data=''
    if @pbefore_value is not null and (@poper='U' or @poper='D')
      set @audit_data=@audit_data+':'+'O'+@pcolumn_name+':'+substring(str(len(@pbefore_value)),7,10)+':'+@pbefore_value
    if @pafter_value is not null and (@poper='U' or @poper='I') 
      set @audit_data=@audit_data+':'+'N'+@pcolumn_name+':'+substring(str(len(@pafter_value)),7,10)+':'+@pafter_value

    if @audit_data is not null
    BEGIN
      if @paudit_data is null
        set @paudit_data = @audit_data
      else if len(@paudit_data)+len(@audit_data) <=4000
        set @paudit_data=@paudit_data+@audit_data
      else
      begin
        SELECT @ptrval = TEXTPTR(audit_info_extended) from spidmap where spid=@@spid
        SELECt @blen=datalength(audit_info_extended) from spidmap where spid=@@spid
        UPDATETEXT spidmap.audit_info_extended  @ptrval @blen 0 @audit_data
      end
    END
/*
    insert into prmaudit (audit_name,table_name,column_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name,app_name,
                        prm_user_name,os_user_name,program,host_name,old_value,new_value,netaddress,logical_delete_flag)
    values (getDate(),@ptable_name, @pcolumn_name, @ppk1, @ppk2, @ppk3, @ppk4, @poper, @prdbms_user, @papp_name
          ,@pprm_user_name, @pos_user, @pprogram, @phostname, @pbefore_value, @pafter_value, @pnetaddress,@plogical_delete)
*/
  end


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'AUDIT_ROW' and type='P')
  DROP PROCEDURE AUDIT_ROW

AUDIT_ROW
CREATE PROCEDURE audit_row
( @ptable_name varchar(30), @poper char(1)
, @ppk1 varchar(32), @ppk2 varchar(32), @ppk3 varchar(32), @ppk4 varchar(32),  @pprm_user_name varchar(32)
, @pprogram varchar(255), @phostname varchar(255), @pnetaddress varchar(24)
, @prdbms_user varchar(30), @pos_user varchar(32), @papp_name varchar(25)
, @plogical_delete varchar(1), @pprimary_record varchar(1), @paudit_data varchar(4000)=null
)
as
  set nocount on
  if @paudit_data is null or len(@paudit_data)<=4000
    insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
    values (getDate(),@ptable_name, @ppk1, @ppk2, @ppk3, @ppk4, @poper, @prdbms_user, @papp_name
          ,@pprm_user_name, @pos_user, @pprogram, @phostname, @pnetaddress,@plogical_delete, @paudit_data)
  else
    insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
    select getDate(),@ptable_name, @ppk1, @ppk2, @ppk3, @ppk4, @poper, @prdbms_user, @papp_name
          ,@pprm_user_name, @pos_user, @pprogram, @phostname, @pnetaddress,@plogical_delete, @paudit_data
          ,audit_info_extended
   from spidmap where spid = @@spid


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'INTERNAL_AUDITING_SETTING' and type='P')
  DROP PROCEDURE INTERNAL_AUDITING_SETTING

INTERNAL_AUDITING_SETTING
CREATE PROCEDURE internal_auditing_setting 
( @penable int, @ptable_name varchar(30)= null, @plevel int = 1 )
as

  declare tab cursor for
  select name
  from sysobjects ut
  where type='U'
  and exists (select * 
                from syscolumns utc
                where utc.id = ut.id
                and name = 'update_date')
  and ut.name not in ('BRE_REGISTRY')
  
  if @plevel > 3 or @plevel < 0
    raiserror('internal_auditing_setting: Auditing level must be between 0 and 3 ',16,1)


  declare @vlevel varchar(3), @vnamespace varchar(255),@tname varchar(30)

  if @penable = 1
  BEGIN
    exec settings_write_bool 1,'database.audit','Enabled'

    set @vlevel = ltrim(str(@plevel))+ltrim(str(@plevel))+ltrim(str(@plevel))

    set @vnamespace = 'database.audit.' + upper(@ptable_name)
    if @ptable_name is not null
	BEGIN
      set @vnamespace = 'database.audit.' + upper(@ptable_name)
      exec settings_write_string @vlevel,@vnamespace,'Options' 
    END
    else
    begin
      open tab
      fetch tab into @tname
      while (@@fetch_status = 0 ) 
      BEGIN
        set @vnamespace = 'database.audit.' + upper(@tname)
        exec settings_write_string @vlevel, @vnamespace,'Options' 
        fetch tab into @tname
      END
      close tab
    end
    

  END
  else
  BEGIN
    if @ptable_name is null
      exec settings_write_bool 0,'database.audit','Enabled'
    else
    BEGIN
        set @vnamespace = 'database.audit.' + upper(@ptable_name)
        exec settings_write_string '000', @vnamespace,'Options' 
    END 
  END
  deallocate tab

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'AUDITING_ENABLE' and type='P')
  DROP PROCEDURE AUDITING_ENABLE

AUDITING_ENABLE
CREATE PROCEDURE auditing_enable
( @ptable_name varchar(30)=null, @plevel int=1)
as
  exec internal_auditing_setting 1,@ptable_name,@plevel

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'AUDITING_DISABLE' and type='P')
  DROP PROCEDURE AUDITING_DISABLE

AUDITING_DISABLE
CREATE PROCEDURE auditing_disable
( @ptable_name varchar(30)=null)
as
  exec internal_auditing_setting 0,@ptable_name

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'CLEANUP_USESSAUD' and type='P')
  DROP PROCEDURE CLEANUP_USESSAUD

CLEANUP_USESSAUD
CREATE PROCEDURE cleanup_usessaud
(@pret_val integer OUTPUT, @pret_msg varchar(1000) OUTPUT)
AS 
  set nocount on
  declare @early_login datetime, @curr_time datetime, @keepInterval varchar(20)
  declare @diff decimal(20,6), @interval_date datetime, @set varchar(20)
  declare @delete_all bit, @delete_thresh int, @delete_pct decimal(10,2)
  declare @rowcount int, @delete_rows int, @delete_cnt int, @max_to_delete int
  exec settings_read_string @set OUTPUT,'database.cleanup.Usessaud','KeepInterval','5d'
  exec get_interval_difference @set, @diff OUTPUT
  set @curr_time = getDate()
  set @interval_date = @curr_time-@diff

  exec settings_read_bool @delete_all OUTPUT,'database.cleanup.Usessaud','DeleteAll',0
  exec settings_read_number @delete_thresh OUTPUT,'database.cleanup.Usessaud','DeleteAllThreshold',1000
  exec settings_read_number @delete_pct OUTPUT,'database.cleanup.Usessaud','DeletePercentage',10
  exec settings_read_number @max_to_delete OUTPUT,'database.cleanup.Usessaud','MaxRowsToDelete',10000
  select @rowcount=count(*) from usessaud where logout_date <= @interval_date 
  
  set @pret_val=0
  if @delete_all = 1 or @rowcount < @delete_thresh
  begin
    delete from usessaud where logout_date <= @interval_date
    set @pret_val = @@rowcount
  end     
  else
  begin
    create table #tmpusessaud(logout_date datetime)
    set @delete_rows = @rowcount * (@delete_pct*.01)
    if @delete_rows > @max_to_delete
      set @delete_rows = @max_to_delete
    else if @delete_rows < @delete_thresh
      set @delete_rows = @delete_thresh
    declare @sql nvarchar(255)
    set @sql = N'insert into #tmpusessaud select top ' + ltrim(str(@delete_rows)) 
              + N' logout_date from usessaud '
              + N' where logout_date <= ''' + convert(varchar(30),@interval_date) + ''''
    exec sp_executesql @sql
    declare @vlogout_date datetime
    declare dels cursor for select logout_date from #tmpusessaud
    open dels
    set @delete_cnt=0
    fetch dels into @vlogout_date
    while @@fetch_status >= 0
    begin
      delete from usessaud
      where logout_date = @vlogout_date
      set @delete_cnt=@delete_cnt+@@rowcount
      fetch dels into @vlogout_date
    end
    close dels
    deallocate dels
    set @pret_val = @delete_cnt
  end
  set @pret_msg = ltrim(str(@pret_val)) + ' record(s) deleted'

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'USESSAUD_ENABLE' and type='P')
  DROP PROCEDURE USESSAUD_ENABLE

USESSAUD_ENABLE
CREATE PROCEDURE usessaud_enable
as
begin
      exec settings_write_bool 1, 'database.audit.LogOut', 'Enabled'
end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'USESSAUD_DISABLE' and type='P')
  DROP PROCEDURE USESSAUD_DISABLE

USESSAUD_DISABLE
CREATE PROCEDURE usessaud_disable
as
begin
      exec settings_write_bool 0, 'database.audit.LogOut', 'Enabled'
end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'HAS_RSRC_ACCESS' and type='P')
  DROP PROCEDURE HAS_RSRC_ACCESS

HAS_RSRC_ACCESS
create procedure has_rsrc_access 
                        @puser_id INT,
			@prsrc_id INT,
			@pret_val INT OUTPUT,
			@pret_msg VARCHAR(2000) OUTPUT,
                        @pfirst_run INT = -1
AS
  set nocount on
  declare @v_parent_rsrc_id INT, @v_rsrcsec_rsrc_id INT, @v_access char(1), @v_is_superuser char(1)
  if @pfirst_run = -1
  BEGIN
    select @v_rsrcsec_rsrc_id=rsrc_id
    from rsrc
    where rsrc_id = @prsrc_id
    and delete_session_id is null;
    if @@ROWCOUNT = 0 
    BEGIN
      set @pret_msg = 'Resource id ' + str(@prsrc_id) + ' does not exist'
      set @pret_val = -2
      return
    END

    select @v_access=ALL_RSRC_ACCESS_FLAG, @v_is_superuser=SUPERUSER_FLAG
    from profile p, users u
    where u.user_id = @puser_id
    and p.prof_id  =* u.prof_id
    and u.delete_session_id is null;
    if @@ROWCOUNT = 0 
    BEGIN
      set @pret_msg = 'User ' + str(@puser_id) + ' does not exist'
      set @pret_val = -1
      return
    END
    if @v_access = 'Y' OR @v_is_superuser = 'Y'
    BEGIN
      set @pret_val = 1
      return
    END
  END

  set @pret_val = 0

  select @v_parent_rsrc_id=r.parent_rsrc_id, @v_rsrcsec_rsrc_id=rs.rsrc_id
  from rsrc r left outer join rsrcsec rs 
              on r.rsrc_id = rs.rsrc_id and rs.user_id = @puser_id
  where r.rsrc_id = @prsrc_id
  and r.delete_session_id is null;
  if @@ROWCOUNT = 0 
  BEGIN
    set @pret_msg = 'Resource id ' + str(@prsrc_id) + ' does not exist'
    set @pret_val = -2
    return
  END

  if @v_rsrcsec_rsrc_id is not null 
  BEGIN
    set @pret_val = 1
  END
  ELSE
  BEGIN
    if @v_parent_rsrc_id is not null
    BEGIN
      exec has_rsrc_access @puser_id, @v_parent_rsrc_id, @pret_val OUTPUT , @pret_msg OUTPUT,1
    END
  END

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'UPDATE_RSRC_SECURITY' and type='P')
  DROP PROCEDURE UPDATE_RSRC_SECURITY

UPDATE_RSRC_SECURITY
create procedure update_rsrc_security 
                        @puser_id INT,
			@psession_id INT, 
			@pcontext_id INT, 
			@pret_val INT OUTPUT,
			@pret_msg VARCHAR(2000) OUTPUT,
                        @prsrc_id INT = -1
AS
  set nocount on
  declare  @v_access char(1), @v_rsrc_sec_id INT, @v_child_rsrc_id INT, @v_is_superuser char(1)

  if @prsrc_id = -1
  BEGIN
    delete from upklist 
    where session_id = @psession_id and context_id = @pcontext_id;

    select @v_access=ALL_RSRC_ACCESS_FLAG, @v_is_superuser=SUPERUSER_FLAG
    from profile p, users u
    where u.user_id = @puser_id
    and p.prof_id  =* u.prof_id
    and u.delete_session_id is null;
    if @@ROWCOUNT = 0 
    BEGIN
      set @pret_msg = 'User ' + str(@puser_id) + ' does not exist'
      set @pret_val = -1
      return
    END
    if @v_access = 'Y' OR @v_is_superuser = 'Y'
    BEGIN
      set @pret_val = 1
      return
    END

    declare @verstr varchar(4), @vsql nvarchar(1000)
    set @verstr = substring(replace(@@version,' ',''),19,4)
    print @verstr

   IF @verstr = '2005'
   BEGIN
		set @vsql=
		N'with rsrc_rq(rsrc_id,level) as
		(select rsrc_id, 0 as level 
		from rsrcsec
		where user_id = @puser_id and delete_session_id is null
		union all
		select c.rsrc_id , p.level+1
		from rsrc c INNER JOIN rsrc_rq p ON c.parent_rsrc_id = p.rsrc_id and delete_session_id is null
		) 
		insert into upklist (session_id,context_id,pk_id)
		select @sessid,@contextid,rsrc_id from rsrc_rq'

    exec sp_executesql @vsql,N'@puser_id int,@sessid int,@contextid int',@puser_id,@psession_id,@pcontext_id
   END
   ELSE
   BEGIN
			DECLARE rsCur CURSOR LOCAL FOR 
			select rsrc_id 
			from rsrcsec
			where user_id = @puser_id
			and delete_session_id is null;

			OPEN rsCur
			FETCH NEXT FROM rsCur INTO @v_rsrc_sec_id
			WHILE (@@FETCH_STATUS = 0)
			BEGIN
				exec update_rsrc_security @puser_id, @psession_id, @pcontext_id,
																	@pret_val OUTPUT, @pret_msg OUTPUT, @v_rsrc_sec_id

				FETCH NEXT FROM rsCur INTO @v_rsrc_sec_id
			END
			CLOSE rsCur
			DEALLOCATE rsCur
    END
  END
  ELSE
  BEGIN
    insert into upklist (session_id, context_id, pk_id ) 
    values ( @psession_id, @pcontext_id, @prsrc_id);

    DECLARE rChildCur CURSOR LOCAL FOR 
    select rsrc_id 
    from rsrc
    where parent_rsrc_id = @prsrc_id
    and delete_session_id is null;

    OPEN rChildCur
    FETCH NEXT FROM rChildCur INTO @v_child_rsrc_id
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
      exec update_rsrc_security @puser_id, @psession_id, @pcontext_id,
                                @pret_val OUTPUT, @pret_msg OUTPUT, @v_child_rsrc_id
      if @pret_val <> 0 
      BEGIN 
        return
      END 

      FETCH NEXT FROM rChildCur INTO @v_child_rsrc_id
    END
    CLOSE rChildCur
    DEALLOCATE rChildCur


  END


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'GET_PRIMARY_KEY' and type='P')
  DROP PROCEDURE GET_PRIMARY_KEY

GET_PRIMARY_KEY
CREATE PROCEDURE get_primary_key
	(@tab_name nvarchar(30), @key_cnt integer OUTPUT, @pk1 varchar(30) OUTPUT , @pk2 varchar(30)=null OUTPUT
         , @pk3 varchar(30)=null OUTPUT , @pk4 varchar(30)=null OUTPUT)
AS 
  declare @vkey_name nvarchar(30)

  if @tab_name != 'GCHANGE' and @tab_name != 'RLFOLIO'
    set @vkey_name = 'PK_' + @tab_name
  else
    set @vkey_name = 'PK_' + @tab_name + '_ID'

    select @pk1=index_col('dbo.' +@tab_name,i.indid,1),@pk2=index_col('dbo.' +@tab_name,i.indid,2)
          ,@pk3=index_col('dbo.' +@tab_name,i.indid,3),@pk4=index_col('dbo.' +@tab_name,i.indid,4)
    from sysindexes i
    where i.name = @vkey_name;

    set @key_cnt=1
    if LEN(@pk2)>0 
    begin
      set @key_cnt=2
      if LEN(@pk4)>0 
        set @key_cnt = 4
      ELSE
        if LEN(@pk3)>0 
          set @key_cnt = 3
    end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'CASCADE_DELETE_CHILD' and type='P')
  DROP PROCEDURE CASCADE_DELETE_CHILD

CASCADE_DELETE_CHILD
CREATE PROCEDURE cascade_delete_child
	(@tab_name varchar(30), @parent_tab_name varchar(30), @fk1 varchar(30), @fk2 varchar(30)
         , @subquery nvarchar(4000), @delstmt nvarchar(4000), @updstmt nvarchar(4000)
         , @errorlevel int, @pret_val integer OUTPUT, @pret_msg varchar(1000) OUTPUT
         , @pmax_to_delete int
         , @param1 varchar(255)=null, @param2 varchar(255)=null, @verbose bit=0)
AS 
  SET NOCOUNT on
  declare @new_delstmt nvarchar(4000), @new_subquery nvarchar(4000)
  declare @sub1 nvarchar(4000), @new_updquery nvarchar(4000), @new_execstmt nvarchar(4000)
  declare @child_table_name varchar(30), @child_col1 varchar(30), @child_col2 varchar(30)
  declare @fk1_nullable int, @fk2_nullable int, @key_cnt integer
  declare @pk_col1 varchar(30), @pk_col2 varchar(30), @rc int, @err int, @cnt int
  declare @del_nullable bit, @cntquery nvarchar(4000)

  declare child_c1 cursor local for
    select distinct po.name , sc.name, sc2.name
    from sysobjects fo, sysobjects po, sysforeignkeys fk, sysobjects oo
    , syscolumns sc, sysreferences ref, syscolumns sc2
    where fo.xtype = 'F' and oo.name = @tab_name
    and po.id = fo.parent_obj and fo.id = fk.constid and oo.id = fk.rkeyid
    and sc.id = po.id and ref.constid = fk.constid and sc.colid = ref.fkey1
    and sc2.id =* po.id and sc2.colid =* ref.fkey2;

  if @verbose = 1
    print 'Processing table ' + @tab_name + ' at ' + convert(varchar(20),getdate(),20)

  set @del_nullable=0
  if (@parent_tab_name = 'PROJECT') 
    or (@parent_tab_name = 'TASK') 
    or (@parent_tab_name = 'TASKRSRC') 
    or (@parent_tab_name = 'UDFCODE') 
    or (@parent_tab_name = 'USERS' AND @tab_name = 'USESSION') 
    or (@parent_tab_name = 'PROJWBS' AND @tab_name = 'PROJISSU') 
    or (@parent_tab_name = 'PROJWBS' AND @tab_name = 'PROJTHRS') 
    or ( (@parent_tab_name = 'RSRC' OR @parent_tab_name = 'ROLE') 
          AND ( @tab_name = 'TASKRSRC' OR @tab_name = 'TRSRCSUM' )) 
    set @del_nullable=1

  declare @is_nullable int
  set @is_nullable = 0
  if @fk2 is null and @del_nullable = 0
  begin
    select @is_nullable=sc.isnullable
    from sysobjects so, syscolumns sc
    where so.id = sc.id and so.xtype = 'U'
    and so.name = @tab_name and sc.name = @fk1
  end
 
  if @is_nullable = 1
  begin
    exec sp_executesql @updstmt ,N'@pk1 varchar(255),@pk2 varchar(255)',@param1, @param2
    select @err=@@error, @rc=@@rowcount
    if @err <> 0 
    BEGIN
      set @pret_msg = 'Errror ' + ltrim(str(@err)) + ' occured on update to null for table ' + @tab_name
      set @pret_val = -1
      return
    END
    set @pret_val = @pret_val+@rc
    if @verbose = 1
      print str(@rc) + ' FK Rows updated to null for table ' + @tab_name
    return
  end

  open child_c1
  fetch child_c1 into @child_table_name, @child_col1, @child_col2
  while @@fetch_status >= 0
  begin
    if @child_col2 is null 
      set @sub1= @child_col1 + ' in (' + @subquery + ')'
    else
      set @sub1=+'(str(' + @child_col1 + ')+str('+@child_col2 + ')) in (' + @subquery + ')'

    set @new_delstmt='delete from dbo.' + @child_table_name  + ' where ' + @sub1;
    if @errorlevel > 0  
    begin
      select @cnt=count(*)
      from sysobjects so, syscolumns sc
      where so.id = sc.id and so.xtype = 'U'
      and so.name = @child_table_name and sc.name = 'delete_session_id'

      if @cnt = 1
        set @new_delstmt=@new_delstmt + ' and delete_session_id is not null'
    end
    set @new_updquery='update dbo.' + @child_table_name +' set ' + @child_col1 + '=null where ' + @sub1;

    exec get_primary_key @child_table_name, @key_cnt OUTPUT, @pk_col1 OUTPUT, @pk_col2 OUTPUT


    if @pk_col2 is null  
      set @new_subquery = 'select ' + @pk_col1 + ' from dbo.' + @child_table_name + ' where ' + @sub1;
    else
      set @new_subquery = 'select str(' + @pk_col1 + ')+str(' + @pk_col2+ ') from dbo.' + @child_table_name + ' where ' + @sub1;


    exec cascade_delete_child @child_table_name, @tab_name, @child_col1, @child_col2
                           ,@new_subquery, @new_delstmt, @new_updquery, @errorlevel 
                           ,@pret_val OUTPUT, @pret_msg OUTPUT, @pmax_to_delete
                           ,@param1,@param2,@verbose
    if @pret_val < 0 or @pret_val > @pmax_to_delete
      return 

    fetch child_c1 into @child_table_name, @child_col1, @child_col2
  end

  /* Handle udfvalues */
  select @cnt=count(*) from udftype where table_name = @tab_name
  if @cnt > 0 
  begin
    set @new_delstmt= 'delete from udfvalue'
    set @new_delstmt=@new_delstmt+ ' where udf_type_id in (select udf_type_id from udftype where table_name = ''' + @tab_name + ''')'
    set @new_delstmt=@new_delstmt+ ' and fk_id in (' + @subquery + ')'
    exec sp_executesql @new_delstmt,N'@pk1 varchar(255),@pk2 varchar(255)',@param1, @param2
    select @err=@@error, @rc=@@rowcount
    set @pret_val = @pret_val+@rc
    if @err <> 0 
    BEGIN
      set @pret_msg = 'Errror ' + ltrim(str(@err)) + ' occured on UDF delete for table ' + @tab_name
      set @pret_val = -1
      return
    END
  end

  exec sp_executesql @delstmt,N'@pk1 varchar(255),@pk2 varchar(255)',@param1, @param2
  select @err=@@error, @rc=@@rowcount
  if @err <> 0 
  BEGIN
    set @pret_msg = 'Errror ' + ltrim(str(@err)) + ' occured on delete for table ' + @tab_name
    set @pret_val = -1
    return
  END
  set @pret_val = @pret_val+@rc

  if @verbose=1
    print str(@rc) + ' Rows deleted for table ' + @tab_name


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'CASCADE_DELETE' and type='P')
  DROP PROCEDURE CASCADE_DELETE

CASCADE_DELETE
CREATE PROCEDURE cascade_delete
	(@tab_name varchar(30), @pk1 varchar(30), @pret_val integer OUTPUT, @pret_msg varchar(1000) OUTPUT
         , @pmax_to_delete int=999999999
         , @pk2 varchar(30)=null, @pk3 varchar(30)=null, @pk4 varchar(30)=null, @verbose bit=0 )
AS 
  SET NOCOUNT on
  declare @sub1 nvarchar(255), @pk_col1 varchar(30), @pk_col2 varchar(30)
  declare @pk_col3 varchar(30), @pk_col4 varchar(30), @key_cnt integer
  declare @new_delstmt nvarchar(4000), @i integer, @del_stmt nvarchar(4000)
  declare @rc int, @err int, @subquery nvarchar(4000)

  set @pret_val = 0

  if NOT exists (SELECT name FROM sysobjects WHERE name = @tab_name AND type = 'U')
  begin  
    set @pret_msg = 'Table ' + @tab_name + ' does not exist'
    return (@pret_val)
  end

  exec get_primary_key @tab_name, @key_cnt OUTPUT, @pk_col1 OUTPUT, @pk_col2 OUTPUT, @pk_col3 OUTPUT, @pk_col4 OUTPUT

  set @sub1 =  @pk_col1 + ' = @pk1 '
  if @key_cnt = 2 
    set @sub1 = @sub1 + ' and ' + @pk_col2 + ' = @pk2 '
  else if @key_cnt = 3
    set @sub1 = @sub1 + ' and ' + @pk_col2 + ' = @pk2 and ' + @pk_col3 + ' = @pk3 '
  else if @key_cnt = 4
    set @sub1 = @sub1 + ' and ' + @pk_col2 + ' = @pk2 and ' 
                + @pk_col3 + ' = @pk3 and ' + @pk_col4 + ' = @pk4'

  set @del_stmt = 'delete from dbo.' + @tab_name + ' where ' + @sub1


  if @key_cnt <= 2 
  BEGIN
    if @key_cnt = 1  
      set @subquery = 'select ' + @pk_col1 + ' from dbo.' + @tab_name + ' where ' + @sub1;
    else
      set @subquery = 'select str(' + @pk_col1 + ')+str(' + @pk_col2+ ') from dbo.' + @tab_name + ' where ' + @sub1;

   -- bug fix 3472 
  if @tab_name  = 'USERS'
    begin 
      delete from gchange where user_id = @pk1
      delete from viewprop where user_id = @pk1 
    end   

    exec cascade_delete_child @tab_name, null, null, null, @subquery, @del_stmt, null, 0
                           ,@pret_val OUTPUT, @pret_msg OUTPUT,@pmax_to_delete, @pk1, @pk2, @verbose
  END
  ELSE
  BEGIN
    exec sp_executesql @del_stmt
         ,N'@pk1 varchar(255),@pk2 varchar(255),@pk3 varchar(255),@pk4 varchar(255)'
         ,@pk1, @pk2, @pk3, @pk4
    select @err=@@error, @rc=@@rowcount
    if @err <> 0 
    begin
      set @pret_msg = 'error ' + ltrim(str(@err)) + ' occured on delete for table ' + @tab_name
      set @pret_val = -1
      return
    end
    set @pret_val = @pret_val+@rc
    if @verbose=1
      print str(@rc) + ' rows deleted for table ' + @tab_name
  END

  if @verbose=1
    print 'Deleted ' + ltrim(str(@pret_val)) + ' record(s)'

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'CLEANUP_LOGICAL_DELETES' and type='P')
  DROP PROCEDURE CLEANUP_LOGICAL_DELETES

CLEANUP_LOGICAL_DELETES
CREATE PROCEDURE cleanup_logical_deletes
	(@pret_val integer OUTPUT, @pret_msg varchar(1000) OUTPUT
         , @errorlevel int=1, @days int=null)
AS 
  SET NOCOUNT on
  SET DATEFORMAT mdy
  declare @tab_name varchar(30), @del_stmt nvarchar(4000), @subquery nvarchar(4000)
  declare @sub1 nvarchar(255), @pk_col1 varchar(30), @pk_col2 varchar(30)
  declare @rows_changed int, @delete_date datetime, @min_date datetime, @key_cnt int
  declare @diff decimal(20,6),  @set varchar(20), @curr_time datetime
  declare @cntquery nvarchar(4000)


  declare @delete_all bit, @delete_thresh int, @delete_pct decimal(10,2)
  declare @rowcount int, @delete_rows int, @delete_cnt int, @max_to_delete int

  set @curr_time = getDate()

  if @days is null 
  begin
    exec settings_read_string @set OUTPUT,'database.cleanup.LogicalDelete','KeepInterval','5d'
    exec get_interval_difference @set, @diff OUTPUT
    set @delete_date = @curr_time-@diff
  end
  else
    set @delete_date=@curr_time-@days

  exec settings_read_bool @delete_all OUTPUT,'database.cleanup.LogicalDelete','DeleteAll',0
  if @delete_all =1
    set @max_to_delete = 999999999
  else
    exec settings_read_number @max_to_delete OUTPUT,'database.cleanup.LogicalDelete','MaxRowsToDelete',10000

  -- bkd 28-feb-2006 -> Exclude Job Service and timesheet from delete date adjustment
  select @min_date=min(login_time) from usession where delete_session_id is null
  and app_name not in ('Job Service','Timesheets') 

  if @min_date < @delete_date
    set @delete_date = @min_date

  print 'Delete Date is ' + convert(varchar(30),@delete_date,120)

  declare tabs_c1 cursor local for
    select o.name  from syscolumns c, sysobjects o 
    where o.type = 'U' and o.id = c.id and c.name = 'delete_session_id'
    --and o.name in ('task','rsrc','project','users')
    --and o.name = 'task'
    order by 1;

  CREATE TABLE #count_tab (cnt integer)

  set @pret_val = 0
  set @rows_changed=0
  open tabs_c1
  fetch tabs_c1 into @tab_name
  while (@@fetch_status >= 0)
  begin

    exec get_primary_key @tab_name, @key_cnt OUTPUT, @pk_col1 OUTPUT, @pk_col2 OUTPUT

    if @key_cnt <= 2 
    begin
      set @sub1 = 'delete_session_id is not null and update_date < ''' + convert(varchar(30),@delete_date,120) + ''''
               + ' and delete_session_id not in (select session_id from usession where delete_session_id is null)'
               + ' and delete_session_id >= 0'	;

      set @cntquery='insert into #count_tab select count(*) from dbo.' + @tab_name + ' where ' + @sub1; 
      delete from #count_tab
      exec sp_executesql @cntquery
      if (select * from #count_tab) > 0
      BEGIN
        if @pk_col2 is null  
          set @subquery = 'select ' + @pk_col1 + ' from dbo.' + @tab_name + ' where ' + @sub1;
        else
          set @subquery = 'select str(' + @pk_col1 + ')+str(' + @pk_col2+ ') from dbo.' + @tab_name + ' where ' + @sub1;

        set @del_stmt = 'delete from dbo.' + @tab_name + ' where ' + @sub1

        exec cascade_delete_child @tab_name,null,null, null, @subquery, @del_stmt,null, @errorlevel 
                               , @pret_val OUTPUT, @pret_msg OUTPUT,@max_to_delete

        if @pret_val < 0 
        BEGIN
          print 'Error: ' + @pret_msg
          return (@pret_val)
        END
        set @rows_changed = @rows_changed + @pret_val
        if @rows_changed >= @max_to_delete
          break
        set @pret_val = 0
      END
    END
    fetch tabs_c1 into @tab_name
  end

  print 'Total Rows Deleted/Changed: ' + str(@rows_changed)
  set @pret_val=@rows_changed
  return (@pret_val)

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'HQUERY_PROCESS_REC' and type='P')
  DROP PROCEDURE HQUERY_PROCESS_REC

HQUERY_PROCESS_REC
create procedure hquery_process_rec
@psession_id integer,
        @pcontext_id integer,
	@orig_pk integer,
        @pk integer,
        @pname varchar(255),
        @counter integer OUTPUT,
        @plevels integer,
	@pret_val INT  OUTPUT,
	@pret_msg varchar(1000)  OUTPUT,
	@ptable_name varchar(30), 
	@pkey_column varchar(30),
        @pname_column varchar(255)
as
  DECLARE @parent_id integer, @name varchar(255), @sql nvarchar(1000)

  -- print 'entering' + str(@pk) + ',' + @pname + ' ctn=' + str(@counter)  

    if not exists(select * from hqdata 
			where session_id=@psession_id
			and context_id=@pcontext_id
			and fk_id=@pk
			and value=@orig_pk)
    begin
        insert into hqdata(session_id,context_id, fk_id, value)
        values ( @psession_id,@pcontext_id, @pk, @orig_pk)
    end

  if @ptable_name = 'PROJWBS'
  BEGIN
    select @parent_id=parent_pk , @name=hname
    from #hquery
    where pk = @pk
  END
  ELSE
  BEGIN
    delete from #parent_ids

    set @sql = 'insert into #parent_ids '
    set @sql=@sql+'select parent_' + @pkey_column +','+@pname_column+ ' from ' + @ptable_name
    set @sql=@sql+' where ' + @pkey_column + ' = @wbsid'

    exec sp_executesql @sql,N'@wbsid int',@pk
    
    select @parent_id=parent_id , @name=name
    from #parent_ids
    
  END

  -- print 'select parent values: '+str(@parent_id)+','+@name
  if @parent_id is not null 
  begin
    exec hquery_process_rec @psession_id,@pcontext_id,@orig_pk,@parent_id,@name,@counter OUTPUT,@plevels,@pret_val OUTPUT,@pret_msg OUTPUT, @ptable_name, @pkey_column, @pname_column
    set @counter=@counter+1
  end
  else 
  begin
    set @counter=0
  end

-- print 'Spin out count = ' + str(@counter) + 'pname=>'+@pname +',name=>' +@name

  -- Do Insert
  if not exists (select * from hquery 
                                  where session_id = @psession_id 
                                  and context_id = @pcontext_id
                                  and fk_id = @pk)
  begin
    if @counter = 0 
    begin
      insert into hquery (session_id,context_id, fk_id, order_value, order_ids)
      values ( @psession_id,@pcontext_id, @pk,@name,@pk)
    end
    else
    begin
      insert into hquery (session_id,context_id, fk_id, order_value, order_ids)
      select session_id,context_id, @pk, order_value, order_ids
      from hquery
      where session_id = @psession_id and context_id = @pcontext_id
      and fk_id = @parent_id

      if @counter < @plevels 
      begin
        set @sql ='update hquery set order_value=order_value+char(1)+@order_value, order_ids=order_ids+char(1)+@order_id'
                  +' where session_id = @session_id and context_id = @context_id '
                  +' and fk_id = @fkid';
--        print @sql
        exec sp_executesql @sql,N'@order_value varchar(4000),@order_id varchar(4000),@session_id int,@context_id int,@fkid int'
                           ,@name,@pk,@psession_id,@pcontext_id,@pk
      end
    end
  end
GO	

if  exists (select name from sysobjects where name = 'hquery_populate'
	and type = 'P' ) 
  drop procedure hquery_populate

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'HQUERY_POPULATE' and type='P')
  DROP PROCEDURE HQUERY_POPULATE

HQUERY_POPULATE
create procedure hquery_populate
        @psession_id integer,
        @pcontext_id integer,
	@ptable_name varchar(30), 
	@pkey_column varchar(30),
        @pname_column varchar(255),
        @pfilter varchar(255),
        @plevels integer,
	@pret_val INT  OUTPUT,
	@pret_msg varchar(1000)  OUTPUT
as
  create table #hquery
  (pk integer,
   hname varchar(255) COLLATE database_default,
   parent_pk integer);

  create table #parent_ids
  (parent_id integer,
   name varchar(255) COLLATE database_default )

  DECLARE @pk integer, @name varchar(255), @cnt integer, @sql nvarchar(1000)

  set @sql='insert into #hquery (pk,hname,parent_pk) '
  set @sql=@sql+'select ' + @pkey_column +','+@pname_column+ ',parent_' 
               + @pkey_column + ' from ' + @ptable_name
  set @sql=@sql+' where ' + @pfilter

--  print @sql

  exec sp_executesql @sql

  update #hquery set parent_pk = null
  from #hquery h
  where not exists ( select * from #hquery h2 where h2.pk = h.parent_pk)

    
  delete from hquery 
  where session_id = @psession_id
  and context_id = @pcontext_id

  delete from hqdata
  where session_id = @psession_id
  and context_id = @pcontext_id

  DECLARE hq_cursor CURSOR LOCAL FOR
  select pk,hname from #hquery;

  OPEN hq_cursor
  FETCH NEXT FROM hq_cursor INTO @pk, @name
  WHILE (@@FETCH_STATUS = 0)
  BEGIN
    set @cnt=0
    -- print 'Process #hquery id=' +str(@pk) +','+@name
    exec hquery_process_rec @psession_id,@pcontext_id,@pk,@pk,@name,@cnt OUTPUT,@plevels,@pret_val OUTPUT,@pret_msg OUTPUT,	@ptable_name, @pkey_column, @pname_column

    FETCH NEXT FROM hq_cursor INTO @pk, @name
  END
  CLOSE hq_cursor
  DEALLOCATE hq_cursor

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'HAS_TIMESHEETS' and type='P')
  DROP PROCEDURE HAS_TIMESHEETS

HAS_TIMESHEETS
CREATE PROCEDURE has_timesheets
	(@pwbs_id integer, @pret_val integer OUTPUT, @pret_msg varchar(1000) OUTPUT )
AS
  declare @proj_node_flag varchar(1), @proj_id integer, @cnt integer, @project_flag varchar(1)

  set @pret_val = 0 

  select @proj_node_flag=pw.proj_node_flag, @proj_id=p.proj_id
         ,@project_flag=p.project_flag
  from projwbs pw, project p
  where wbs_id = @pwbs_id
  and pw.proj_id = p.proj_id

  if @proj_node_flag is null 
  begin
    set @pret_val = -1
    set @pret_msg = 'WBS id ' + str(@pwbs_id) + ' does not exist'
  end
  else if @proj_node_flag = 'Y' and @project_flag = 'Y'
  begin
    select @cnt=count(*)
    from rsrchour
    where proj_id = @proj_id
    and task_ts_flag = 'N';

    if @cnt > 0 
      set @pret_val = 1
  end
  else
  begin

    select @cnt=count(*)
    from rsrchour r, taskrsrc tr, task t
    where t.wbs_id = @pwbs_id
    and tr.task_id = t.task_id
    and r.taskrsrc_id = tr.taskrsrc_id
    and r.task_ts_flag = 'N';

    if @cnt > 0 
    BEGIN
      set @pret_val = 1
      return
    END    

    declare @child_wbs_id int
    DECLARE child_wbs CURSOR LOCAL FOR
    select wbs_id
    from projwbs
    where parent_wbs_id = @pwbs_id

    OPEN child_wbs
    FETCH NEXT FROM child_wbs INTO @child_wbs_id
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
      exec has_timesheets @child_wbs_id, @pret_val OUTPUT, @pret_msg OUTPUT
      if @pret_val = 1 
        return
      FETCH NEXT FROM child_wbs INTO @child_wbs_id
    END
    CLOSE child_wbs
    DEALLOCATE child_wbs
    
  end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SYNC_UDFTYPE' and type='P')
  DROP PROCEDURE SYNC_UDFTYPE

SYNC_UDFTYPE
create procedure sync_udftype ( @pret_val INT OUTPUT, @pret_msg VARCHAR(2000) OUTPUT )
AS 
  set nocount on
  declare @keys integer, @startkey integer

  select @pret_val = count(*)
  from udftype u1
  where u1.table_name = 'TASKPROC'
  and not exists (select udf_type_id from udftype u2
                where u2.table_name = 'PROCITEM'
                and u2.udf_type_name = u1.udf_type_name
                and u2.logical_data_type = u1.logical_data_type
                and u2.udf_type_label = u1.udf_type_label
                and u2.super_flag = u1.super_flag)

  set @keys=@pret_val

  select @pret_val = @pret_val +  count(*)
  from udftype u1
  where u1.table_name = 'PROCITEM'
  and not exists (select udf_type_id from udftype u2
                where u2.table_name = 'TASKPROC'
                and u2.udf_type_name = u1.udf_type_name)

  if @pret_val = 0 
    return

  -- Get nextkeys for inserts
  exec getnextkeys 'udftype_udf_type_id', @keys, @startkey OUTPUT
 
  print @startkey

  -- start a transaction to keep locks and block other transactions

  begin transaction 

  -- Delete the extra records

  delete from udfcode
  where udf_type_id in (  select U1.udf_type_id
                          from udftype u1
                          where u1.table_name = 'PROCITEM'
                          and not exists (select udf_type_id from udftype u2
                          where u2.table_name = 'TASKPROC'
                          and u2.udf_type_name = u1.udf_type_name)
                       )

  delete from udfvalue
  where udf_type_id in (  select U1.udf_type_id
                          from udftype u1
                          where u1.table_name = 'PROCITEM'
                          and not exists (select udf_type_id from udftype u2
                          where u2.table_name = 'TASKPROC'
                          and u2.udf_type_name = u1.udf_type_name)
                       )

  delete from udftype 
  where udf_type_id in (  select U1.udf_type_id
                          from udftype u1
                          where u1.table_name = 'PROCITEM'
                          and not exists (select udf_type_id from udftype u2
                          where u2.table_name = 'TASKPROC'
                          and u2.udf_type_name = u1.udf_type_name)
                       )

  print 'Deleted ' + ltrim(str(@@rowcount)) + ' row(s)'


  declare @table_name varchar(30), @udf_type_id integer, @logical_data_type varchar(20)
  declare @udf_type_name varchar(32), @udf_type_label varchar(40), @exists smallint
  declare @super_flag varchar(1)
  declare @existing_data_type varchar(20), @existing_udf_type_id integer

  DECLARE ut CURSOR LOCAL FOR 
  select U1.table_name, U1.udf_type_id, u1.logical_data_type, u1.udf_type_name
         ,u1.udf_type_label, u1.super_flag
  from udftype u1
  where u1.table_name = 'TASKPROC'
  and not exists (select udf_type_id from udftype u2
                where u2.table_name = 'PROCITEM'
                and u2.udf_type_name = u1.udf_type_name
                and u2.logical_data_type = u1.logical_data_type
                and u2.udf_type_label = u1.udf_type_label
                and u2.super_flag = u1.super_flag)
  OPEN ut
  FETCH NEXT FROM ut INTO @table_name, @udf_type_id, @logical_data_type, @udf_type_name
                          ,@udf_type_label, @super_flag
  WHILE (@@FETCH_STATUS = 0)
  BEGIN
      select @exists=count(*) 
      from udftype 
      where table_name = 'PROCITEM' 
      and udf_type_name = @udf_type_name;

      if @exists = 0 
      begin
        insert into udftype (udf_type_id, table_name, udf_type_name, udf_type_label,
                             logical_data_type, super_flag )
        values (@startkey, 'PROCITEM', @udf_type_name, @udf_type_label,
                             @logical_data_type, @super_flag)

        set @startkey = @startkey + 1
      end
      else if @exists > 1 
      begin
        set @pret_msg = 'Too many values for type ' + @udf_type_name
        set @pret_val = -1
        return
      end
      else
      begin
        print 'to update'
  
        select @existing_udf_type_id=udf_type_id, @existing_data_type=logical_data_type
        from udftype 
        where table_name = 'PROCITEM' 
        and udf_type_name = @udf_type_name;

        if @logical_data_type <> @existing_data_type
          delete from udfvalue where udf_type_id = @existing_udf_type_id

        update udftype
        set udf_type_label = @udf_type_label, logical_data_type = @logical_data_type
            , super_flag = @super_flag
        where udf_type_id = @existing_udf_type_id
      end

      FETCH NEXT FROM ut INTO @table_name, @udf_type_id, @logical_data_type, @udf_type_name
                          ,@udf_type_label, @super_flag
  END
  CLOSE ut
  DEALLOCATE ut

  commit transaction

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'USESSION_CLEANUP' and type='P')
  DROP PROCEDURE USESSION_CLEANUP

USESSION_CLEANUP
CREATE PROCEDURE usession_cleanup
	@psession_id	int = null,
    @pwhere_clause	varchar(1000) = null,
    @pmark_delete  char(1) = 'Y',
    @pret_val int OUTPUT,
    @pret_msg varchar(1000) OUTPUT
as
  SET NOCOUNT ON	
  set @pret_val = 0
  declare @sql nvarchar(4000), @where_clause nvarchar(1000)
  if @psession_id is null and @pwhere_clause is null
  begin
    set @pret_val = -1
    set @pret_msg = 'Must specify @psession_id or @pwhere_clause'
    return
  end
  create table #session_keys (pk1 int)

  if @psession_id is not null 
    insert into #session_keys ( pk1)
    values (@psession_id)
  else
  begin
    set @where_clause = cast(@pwhere_clause as nvarchar(1000))
    set @sql = N'insert into #session_keys ( pk1) '+
						N' select session_id ' +
						N' from usession (nolock) where ' + @where_clause
    exec sp_executesql @sql
  end ;


  declare @pk int
  declare todel cursor for select pk1 from #session_keys
  open todel
  fetch todel into @pk
  while @@fetch_status >= 0
  begin
    if @pmark_delete = 'Y' 
      update usession set delete_session_id = 0, delete_date = GetDate() 
      where session_id = @pk
    else
    begin
      delete from dltacct where session_id = @pk
      delete from dltactv where session_id = @pk
      delete from dltobs where session_id = @pk
      delete from dltrole where session_id = @pk
      delete from dltrsrc where session_id = @pk
      delete from dltrsrl where session_id = @pk
      delete from dltuser where session_id = @pk
      delete from upklist where session_id = @pk
      delete from projshar where session_id = @pk
      delete from usession where session_id = @pk
    end

    fetch todel into @pk
  end
  close todel
  deallocate todel   

  --Cleanup old DLT records based on < min USESSION 
  declare @min_session_id int  
  select @min_session_id=min(session_id) from usession
  if @min_session_id is null
    select @min_session_id=key_seq_num from nextkey where key_name = 'usession_session_id'
  delete from dltacct where session_id < @min_session_id
  delete from dltactv where session_id < @min_session_id
  delete from dltobs where session_id < @min_session_id
  delete from dltrole where session_id < @min_session_id
  delete from dltrsrc where session_id < @min_session_id
  delete from dltrsrl where session_id < @min_session_id
  delete from dltuser where session_id < @min_session_id


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'USESSION_CLEAR_LOGICAL_DELETES' and type='P')
  DROP PROCEDURE USESSION_CLEAR_LOGICAL_DELETES

USESSION_CLEAR_LOGICAL_DELETES
CREATE PROCEDURE usession_clear_logical_deletes
	(@pret_val int OUTPUT , @pret_msg varchar(4000) OUTPUT)
as
  set @pret_val = 0
  create table #session_keys (pk1 int)
  insert into #session_keys
  select session_id from usession (nolock) where delete_session_id is not null;

  declare @pk int
  declare todel_ld cursor for select pk1 from #session_keys
  open todel_ld
  fetch todel_ld into @pk
  while @@fetch_status >= 0
  begin
    delete from dltacct where session_id = @pk
    delete from dltactv where session_id = @pk
    delete from dltobs where session_id = @pk
    delete from dltrole where session_id = @pk
    delete from dltrsrc where session_id = @pk
    delete from dltrsrl where session_id = @pk
    delete from dltuser where session_id = @pk
    delete from upklist where session_id = @pk
    delete from projshar where session_id = @pk
    delete from tprojmap where session_id= @pk
    delete from usession where session_id = @pk
    set @pret_val = @pret_val + 1
    fetch todel_ld into @pk
  end
  close todel_ld
  deallocate todel_ld   


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'USESSION_CLEANUP_EXPIRED' and type='P')
  DROP PROCEDURE USESSION_CLEANUP_EXPIRED

USESSION_CLEANUP_EXPIRED
CREATE PROCEDURE usession_cleanup_expired 
	(@pret_val int OUTPUT , @pret_msg varchar(4000) OUTPUT)
as
  declare @set varchar(20), @diff decimal(20,6), @delete_time datetime
  declare @date_str varchar(30), @ret int, @msg varchar(2000), @where varchar(255)
  set @pret_msg = 0
  exec settings_read_string @set OUTPUT,'database.cleanup.Usession','ExpiredSessionTimeout','2h'
  exec get_interval_difference @set, @diff OUTPUT
  set @delete_time=GetDate()-@diff
  set @date_str = convert(varchar(30),@delete_time,120)
  set @where = 'last_active_time < convert(datetime,'''
			 + @date_str + ''',120)'
       + ' and IsNull(long_operation_flag,''Y'') <> ''Y'''
  exec usession_cleanup null,@where, 'Y', @pret_val OUTPUT, @pret_msg OUTPUT
  exec settings_read_string @set OUTPUT,'database.cleanup.Usession','ExpiredLongSessionTimeout','12h'
  exec get_interval_difference @set, @diff OUTPUT
  set @delete_time=GetDate()-@diff
  set @date_str = convert(varchar(30),@delete_time,120)
  set @where = 'last_active_time < convert(datetime,'''
			 + @date_str + ''',120)'
       + ' and IsNull(long_operation_flag,''Y'') = ''Y'''
  exec usession_cleanup null,@where, 'Y', @pret_val OUTPUT, @pret_msg OUTPUT

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'USER_DEFINED_BACKGROUND' and type='P')
  DROP PROCEDURE USER_DEFINED_BACKGROUND

USER_DEFINED_BACKGROUND
CREATE PROCEDURE user_defined_background
AS
  set nocount off
  -- THIS PROCEDURE INTENTIONALLY LEFT BLANK
  -- Procedure is called by data_monitor.  Customer 
  -- specific code can go here.

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'CLEANUP_OLD_DATA' and type='P')
  DROP PROCEDURE CLEANUP_OLD_DATA

CLEANUP_OLD_DATA
CREATE PROCEDURE cleanup_old_data
AS
  set nocount off
  -- THIS PROCEDURE INTENTIONALLY LEFT BLANK
  -- Procedure is called by data_monitor.  Cleanup 
  -- of old data specific to current version would
  -- be placed here.  May be empty for any given release

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'BGPLOG_CLEANUP' and type='P')
  DROP PROCEDURE BGPLOG_CLEANUP

BGPLOG_CLEANUP
CREATE PROCEDURE bgplog_cleanup(@pret_val integer OUTPUT, @pret_msg varchar(1000) OUTPUT )
AS
  set nocount off
  declare @set varchar(20), @diff decimal(20,6), @delete_time datetime
  declare @delcnt int
  exec settings_read_string @set OUTPUT,'database.cleanup.BackGroundProcessLog','KeepInterval','5d'
  exec get_interval_difference @set, @diff OUTPUT
  set @delete_time=GetDate()-@diff
  delete from bgplog where log_time < @delete_time
  set @delcnt = @@ROWCOUNT
  set @pret_val=@delcnt

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PROJECT_COPY_LIST' and type='P')
  DROP PROCEDURE PROJECT_COPY_LIST

PROJECT_COPY_LIST
CREATE PROCEDURE PROJECT_COPY_LIST
	@proj_list	varchar(8000),
	@dest_wbs_id	integer,
	@copy_bit	varchar(30),
	@pret_val	integer OUTPUT,
	@pret_msg	varchar(8000) OUTPUT,
        @pscenario_id   integer = null,
	@ppfolio_id	integer = null,
	@psession_id	integer = null
as
  set nocount on
  if substring(@copy_bit,23,1)='1' and @pscenario_id is null
  begin
    set @pret_val = -1
    set @pret_msg = 'Must specify scenario_id for scenario copy'
    return
  end
 exec multi_project_copy @proj_list,@dest_wbs_id,@copy_bit,@pret_val OUTPUT,@pret_msg OUTPUT,@ppfolio_id,@@spid,null,@pscenario_id

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'ADD_DATABASE_JOB' and type='P')
  DROP PROCEDURE ADD_DATABASE_JOB

ADD_DATABASE_JOB
CREATE PROCEDURE add_database_job
  @pjob_name		sysname, 
  @pcommand			nvarchar(255),
  @pjob_id			binary(16) OUTPUT,
  @pinterval		varchar(10),
  @precreate		bit = 0,
  @DayOfWeek 		int=64
AS
SET NOCOUNT ON 
   declare @time_int int, @time_code char(1)
   declare @sub_day_type tinyint, @rc int
   declare @job_freq_type int
   declare @job_freq_interval int
   declare @job_freq_recurrence_factor int
   print 'Creating job ' + @pjob_name
   set @time_code =upper(substring(@pinterval,len(@pinterval),1))
   set @time_int = cast(substring(@pinterval,1,len(@pinterval)-1) AS integer)
   set @job_freq_interval=1
   set @job_freq_recurrence_factor=1
   if @time_code = 'S' 
     begin
     set @sub_day_type=2
     set @job_freq_type=4 
     end
   else if @time_code = 'M' 
     begin
     set @sub_day_type=4
     set @job_freq_type=4
     end
   else if @time_code = 'D'
   begin
     set @sub_day_type=0
     set @job_freq_type=4
     set @time_int=1
   end
   else if @time_code = 'W'
    begin 
     set @sub_day_type=1
     set @job_freq_type=8
     set @job_freq_interval=@DayOfWeek
     set @job_freq_recurrence_factor=@time_int   
   end
   else
     raiserror('Invalid time code ' ,16,1)
   if (not exists(select 1 from msdb.dbo.syscategories where name = N'PrimaveraJobs'))
   	exec msdb.dbo.sp_add_category  @name = N'PrimaveraJobs'
   declare @dbname sysname
   select @dbname=name from master..sysdatabases where dbid in (select dbid from master..sysprocesses where spid=@@spid)
   set @pjob_name = @pjob_name + ' for ' + @dbname
   select @pjob_id = job_id     
   from msdb.dbo.sysjobs    
   where name = @pjob_name  
   if @precreate > 0 and @pjob_id is not null
     exec msdb.dbo.sp_delete_job @job_name = @pjob_name
   else if @precreate =0 and @pjob_id is not null
     return
   set @pjob_id=null
 print 'Creating New Job'
   exec @rc = msdb.dbo.sp_add_job
 		@job_id = @pjob_id OUTPUT,
 		@job_name = @pjob_name,
 		@category_name = N'PrimaveraJobs',
 		@enabled=1,
 		@notify_level_email = 0, 
 		@notify_level_page = 0, 
 		@notify_level_netsend = 0, 
 		@notify_level_eventlog = 2

   if (@@ERROR <> 0 OR @rc <> 0)
   begin
     raiserror('add_database_job: Create new Job failed ',16,1)
     return
   end
   exec @rc = msdb.dbo.sp_add_jobstep
 		@job_id = @pjob_id, 
 		@step_id = 1, 
 		@step_name = N'Command', 
 		@command = @pcommand, 
 		@database_name = @dbname,
 		@subsystem = N'TSQL'
   if (@@ERROR <> 0 OR @rc <> 0)
   begin
     raiserror('add_database_job: Create Job step failed ',16,1)
     return
   end
   exec @rc = msdb.dbo.sp_update_job 
 		@job_id = @pjob_id, 
 		@start_step_id = 1 
   if (@@ERROR <> 0 OR @rc <> 0)
   begin
     raiserror('add_database_job: Create Job start step failed ',16,1)
     return
   end
   exec @rc = msdb.dbo.sp_add_jobschedule 
 		@job_id = @pjob_id, 
 		@name = N'Main Schedule', 
 		@enabled = 1, 
 		@freq_type = @job_freq_type, 
 		@freq_interval = @job_freq_interval, 
 		@freq_subday_type = @sub_day_type,
 		@freq_subday_interval = @time_int,
		@freq_recurrence_factor=@job_freq_recurrence_factor
   if (@@ERROR <> 0 OR @rc <> 0)
   begin
     raiserror('add_database_job: Create Job schedule failed ',16,1)
     return
   end
   exec @rc = msdb.dbo.sp_add_jobserver 
 		@job_id = @pjob_id, 
 		@server_name = N'(local)' 
   if (@@ERROR <> 0 OR @rc <> 0)
   begin
     raiserror('add_database_job: Add Job server failed ',16,1)
     return
   end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'DELETE_PROJECT_CODE_SCENARIOS' and type='P')
  DROP PROCEDURE DELETE_PROJECT_CODE_SCENARIOS

DELETE_PROJECT_CODE_SCENARIOS
CREATE PROCEDURE delete_project_code_scenarios 
	(@proj_catg_type_id integer
	,@pret_val integer OUTPUT
	,@pret_msg varchar(4000) OUTPUT )
as
  set nocount on 
  declare @delcnt int, @SQL nvarchar(255), @proj_id int
  declare @ret int, @msg varchar(4000)
  set @delcnt = 0

  create table #scenproj (scenario_id int,proj_id int);
  set @SQL = N'insert into #scenproj 
	select sp.scenario_id , sp.proj_id
	from pcatval pc, scenario s, scenproj sp
	where table_name = ''PCATVAL'' 
	and s.fk_id = pc.proj_catg_id
	and sp.scenario_id = s.scenario_id
	and pc.proj_catg_type_id = ' + str(@proj_catg_type_id) 

  exec sp_executesql @SQL
  DECLARE sp CURSOR FOR select distinct proj_id from #scenproj
  OPEN sp
  FETCH NEXT FROM sp INTO @proj_id
  WHILE @@FETCH_STATUS = 0
  BEGIN
    PRINT @proj_id
    exec cascade_delete 'PROJECT',@proj_id,@ret OUTPUT, @msg OUTPUT
    if @ret < 0 
    begin
      set @pret_val = @ret
      set @pret_msg = @msg
      return
    end
    set @delcnt=@delcnt+1
    FETCH NEXT FROM sp INTO @proj_id
  END
  CLOSE sp
  DEALLOCATE sp

  delete from scenproj where scenario_id in (select scenario_id from #scenproj)
  delete from scenuser where scenario_id in (select scenario_id from #scenproj)
  delete from scenario where scenario_id in (select scenario_id from #scenproj)

  set @pret_val = 0
  set @pret_msg = 'Deleted ' + ltrim(str(@delcnt)) + ' project(s)'  

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'INITIALIZE_BACKGROUND_PROCS' and type='P')
  DROP PROCEDURE INITIALIZE_BACKGROUND_PROCS

INITIALIZE_BACKGROUND_PROCS
CREATE PROCEDURE initialize_background_procs
AS
 SET NOCOUNT ON 
    declare @job_id binary(16), @rc integer, @set varchar(10), @sjob_id varchar(50)
    declare @dayofweek varchar(9),@Daynum integer
    if  patindex('%EXPRESS EDITION%',upper(@@version)) > 0 
    BEGIN
      set @set = '5m'
      exec settings_write_string @set,'database.background.Damon','Interval'
      exec settings_write_string @set,'database.background.Symon','Interval'
      return
    END
    exec settings_read_string @set OUTPUT,'database.background.Symon','Interval','XX'
    if @set = 'XX' or @set is NULL
    begin
      set @set = '1m'
      exec settings_write_string @set,'database.background.Symon','Interval'
    end
    exec @rc = add_database_job 
  		@pjob_name='System Monitor (Symon)',
  		@pcommand='exec system_monitor',
  		@pjob_id=@job_id OUTPUT,
  		@pinterval=@set,
  		@precreate=1
    if (@@ERROR <> 0 OR @rc <> 0)
    begin
      raiserror('initialize_background_procs: Creation of System Monitor process failed',16,1)
      return
    end
    set @sjob_id=convert(varchar(50),@job_id)
    exec settings_write_string @sjob_id,'database.background.Symon','JobId'
    print 'System Monitor Job ID'
    print '=================================='
    print  @job_id
    set @job_id=null
    exec settings_read_string @set OUTPUT,'database.background.Damon','Interval','XX'
    if @set = 'XX' or @set is NULL
    begin
      set @set = '1W'
      exec settings_write_string @set,'database.background.Damon','Interval'
    end
    exec settings_read_string @DayOfweek OUTPUT,'database.background.Damon','DayOfWeek','SATURDAY'
    Select  @DayNum=
 			case @DayOfweek 
 		      When 'SUNDAY' then 1
 		      When 'MONDAY' then  2
 		      When 'TUESDAY' then  4
 		      When 'WEDNESDAY' then  8
 		      When 'THURSDAY' then  16
 		      When 'FRIDAY' then  32
 		      When 'SATURDAY' then  64
 			 ELSE  
 			    64
 		   END
     exec @rc = add_database_job 
  		@pjob_name='Data Monitor (Damon)',
  		@pcommand='exec data_monitor',
  		@pjob_id=@job_id OUTPUT,
  		@pinterval=@set,
  		@precreate=1,@DayOfWeek=@Daynum
    if (@@ERROR <> 0 OR @rc <> 0)
    begin
      raiserror('initialize_background_procs: Creation of Data Monitor process failed',16,1)
      return
    end
    set @sjob_id=convert(varchar(50),@job_id)
    exec settings_write_string @sjob_id,'database.background.Damon','JobId'
    print 'Data Monitor Job ID'
    print '=================================='
   print  @job_id

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'DROP_BACKGROUND_PROCS' and type='P')
  DROP PROCEDURE DROP_BACKGROUND_PROCS

DROP_BACKGROUND_PROCS
CREATE PROCEDURE drop_background_procs
AS
  declare @dbname sysname, @job_name sysname, @cnt int
  select @dbname=name from master..sysdatabases where dbid in (select dbid from master..sysprocesses where spid=@@spid)

  --Create a unique job name
  set @job_name = 'System Monitor (Symon) for ' + @dbname
  if (select count(*) from msdb.dbo.sysjobs where name = @job_name  ) > 0
  begin
    exec msdb.dbo.sp_delete_job @job_name = @job_name
    print 'Dropped job ' + @job_name
  end
  --Create a unique job name
  set @job_name = 'Data Monitor (Damon) for ' + @dbname
  if (select count(*) from msdb.dbo.sysjobs where name = @job_name  ) > 0
  begin
    exec msdb.dbo.sp_delete_job @job_name = @job_name
    print 'Dropped job ' + @job_name
  end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PRMAUDIT_CLEANUP' and type='P')
  DROP PROCEDURE PRMAUDIT_CLEANUP

PRMAUDIT_CLEANUP
CREATE PROCEDURE prmaudit_cleanup(@pret_val integer OUTPUT, @pret_msg varchar(1000) OUTPUT )
AS
  set nocount off
  declare @set varchar(20), @diff decimal(20,6), @delete_time datetime
  declare @delcnt int
  declare @auditstatus bit 
  exec settings_read_bool @auditstatus OUTPUT,'database.cleanup.auditing','Enabled',1
 if @auditstatus = 1
 begin
  exec settings_read_string @set OUTPUT,'database.cleanup.auditing','KeepInterval','30d'
  exec get_interval_difference @set, @diff OUTPUT
  set @delete_time=GetDate()-@diff
   delete from prmaudit where audit_date < @delete_time
  set @delcnt = @@ROWCOUNT
  set @pret_val=@delcnt
 end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PV_LOGIN' and type='P')
  DROP PROCEDURE PV_LOGIN

PV_LOGIN
create procedure pv_login
@puser_id int, @wbs_list varchar(4000) OUTPUT,@pret_val int OUTPUT , @pret_msg varchar(4000) OUTPUT
as
  set nocount on 
  declare @wbs_id int
  create table #pvroot(wbs_id int)

  insert into #pvroot 
  select distinct op.wbs_id
  from obsproj op, userobs uo, projwbs pw
  where op.obs_id = uo.obs_id and uo.user_id = @puser_id
  and pw.wbs_id = op.wbs_id
  and uo.delete_session_id is null and pw.delete_session_id is null
  and not exists (
  	select op.wbs_id
    from obsproj op, userobs uo
    where op.obs_id = uo.obs_id and uo.user_id = @puser_id
    and uo.delete_session_id is null and op.wbs_id = pw.parent_wbs_id
    )

  set @wbs_list = null
  DECLARE nodes CURSOR FOR select wbs_id from #pvroot order by 1;

  OPEN nodes
  FETCH nodes INTO @wbs_id
  WHILE (@@FETCH_STATUS = 0)
  BEGIN
    if @wbs_list is null
      set @wbs_list = ltrim(Str(@wbs_id))
    else
      set @wbs_list = @wbs_list + ',' + ltrim(Str(@wbs_id))
    FETCH nodes INTO @wbs_id
  END
  CLOSE nodes
  DEALLOCATE nodes

  if len(@wbs_list)>=4000
    begin
      delete from pkxref where system_id=@@spid and context_name='ROOTS'
      insert into pkxref(system_id,context_name,pk1) select @@spid,'ROOTS',wbs_id from #pvroot
      set @pret_val=@@spid
      set @pret_msg='node list returned in pkxref table'
      set @wbs_list = null
    end
  else
  begin
    set @pret_val=0
    set @pret_msg='node list returned in variable'
  end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SQL_TRACE_START' and type='P')
  DROP PROCEDURE SQL_TRACE_START

SQL_TRACE_START
CREATE PROCEDURE SQL_TRACE_START
@plocation nvarchar(245),@psessionid int,@pusername varchar(32),@poperation varchar(255) ,@pret_val integer OUTPUT, @pret_msg varchar(1000) OUTPUT,@ptraceid int OUTPUT
AS
declare   @Outputfile nvarchar(245),@vlocation nvarchar(245),@trace_id int,@vmaxsize bigint,@eventid int,@columnid int,@on bit,@hostname nvarchar(128),@dbid int,@FileExists int,@colname varchar(50),@eventdesc varchar(50)
  begin 
  SET NOCOUNT ON
  set @vmaxsize=50
  set @on=1
  if @plocation is null
  begin
    exec settings_read_string @vlocation OUTPUT,'database.trace','Location','c:\temp'
    set @outputfile=@vlocation+'\'+@pusername+'_'+ltrim(rtrim(str(@psessionid)))+'_'+ltrim(rtrim(str(@@spid)))+'_' +@poperation 
  end
  else
    set @outputfile=@plocation+'\'+@pusername+'_'+ltrim(rtrim(str(@psessionid)))+'_'+ltrim(rtrim(str(@@spid)))+'_'+@poperation

  exec @pret_val=sp_trace_create  @trace_id OUTPUT ,2,  @outputfile,  @vmaxsize
  if @pret_val <>0 
  begin
    set @pret_msg='Could not Create the trace file'
    set @pret_val=-1
    exec bgp_write_to_log 'SQL_TRACE_START',@pret_msg,'Error'
    return -1
  end 
  else
    set @ptraceid=@trace_id

  print 'trace id='+str(@trace_id)
  CREATE TABLE #Events (
   EventId smallint NOT NULL ,
   EventName varchar(50) NOT NULL )
  INSERT INTO #events values(10,'RPC:Completed')
  INSERT INTO #events values(12,'SQL:BatchCompleted')
  INSERT INTO #events values(45,'SP:StmtCompleted')
  INSERT INTO #events values(43,'SP:Completed')

  CREATE TABLE #ColumnList
  (
	ColumnID smallint NOT NULL,
	ColumnName varchar(50) NOT NULL
  )
  INSERT INTO #ColumnList VALUES(1,'TextData')
  INSERT INTO #ColumnList VALUES(3,'DatabaseID')
  INSERT INTO #ColumnList VALUES(8,'ClientHostName')
  INSERT INTO #ColumnList VALUES(10,'ApplicationName')
  INSERT INTO #ColumnList VALUES(12,'SPID')
  INSERT INTO #ColumnList VALUES(13,'Duration')
  INSERT INTO #ColumnList VALUES(14,'StartTime')
  INSERT INTO #ColumnList VALUES(15,'EndTime')
  INSERT INTO #ColumnList VALUES(16,'Reads')
  INSERT INTO #ColumnList VALUES(17,'Writes')
  INSERT INTO #ColumnList VALUES(18,'CPU')

  set  @hostname=host_name()
  set @dbid=db_id()
  SET @eventid = (SELECT MIN(eventid) FROM #Events)
  WHILE @eventid IS NOT NULL
     BEGIN
	SET @columnid = (SELECT MIN(columnid) FROM #Columnlist)
	WHILE @columnid IS NOT NULL
          BEGIN
	     EXEC @pret_val = sp_trace_setevent @trace_id,@eventid,@columnid,@on
		IF @pret_val <> 0
		BEGIN 
         	  select @eventdesc=eventname from #events where eventid=@eventid
		  select @colname=columnname from #columnlist where columnid=@columnid
		  set @pret_msg='Failed to add Event-' +@eventdesc+' with Column-'+@colname
                  set @pret_val=-1
		  exec bgp_write_to_log 'SQL_TRACE_START','Error' ,@pret_msg
		  return -1
		END

   	     SET @columnid = (SELECT MIN(columnid) FROM #Columnlist WHERE columnid > @columnid)			
	  END
	 SET @eventid = (SELECT MIN(eventid) FROM #Events WHERE eventid > @eventid)
     END

   exec @pret_val=sp_trace_setfilter  @trace_id ,3,0,0,@dbid
   if @pret_val <>0 
   begin
      set @pret_msg='Could not Set the filter on database id '
      set @pret_val=-1
      exec bgp_write_to_log 'SQL_TRACE_START','Error' ,@pret_msg
      return -1
   end 

   exec @pret_val=sp_trace_setfilter  @trace_id ,8,0,0,@hostname
   if @pret_val <>0 
   begin
      set @pret_msg='Could not Set the filter on host name '
      set @pret_val=-1
      exec bgp_write_to_log 'SQL_TRACE_START','Error' ,@pret_msg
      return -1
   end 

   exec @pret_val=sp_trace_setstatus @trace_id,1
   if @pret_val <>0 
   begin
      set @pret_msg='Could not Start the trace '
      set @pret_val=-1
      exec bgp_write_to_log 'SQL_TRACE_START','Error' ,@pret_msg
      return -1
   end 
  end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SQL_TRACE_END' and type='P')
  DROP PROCEDURE SQL_TRACE_END

SQL_TRACE_END
CREATE PROCEDURE SQL_TRACE_END
@ptrace_id int,@pret_val int OUTPUT,@pret_msg varchar(255) OUTPUT
as
  declare @retval int
  begin 
  SET NOCOUNT ON
  exec @retval=sp_trace_setstatus @ptrace_id,0
  if @retval <>0 
  begin
    set @pret_msg='Unable to stop the trace'
    set @pret_val=-1
    exec bgp_write_to_log 'SQL_TRACE_END','Error' ,@pret_msg
    return -1
  end
  exec @retval=sp_trace_setstatus @ptrace_id,2
  if @retval <>0 
  begin
    set @pret_msg='Unable to Close the trace'
    set @pret_val=-1
    exec bgp_write_to_log 'SQL_TRACE_END','Error' ,@pret_msg
    return -1
  end
end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PRIMAVERA_EVENT' and type='P')
  DROP PROCEDURE PRIMAVERA_EVENT

PRIMAVERA_EVENT
CREATE PROCEDURE primavera_event
	@papp_name varchar(30),
	@poperation varchar(30),
	@paction varchar(30),
	@puser_id INT=null,
	@puser_name varchar(32)=null,
	@psession_id INT=null,
	@pevent_data varchar(4000)=null
as
  set nocount on 
  declare @v_long_running_flag char(1)

  if @psession_id is not null
  begin

    if    upper(@poperation) = 'SCHEDULING'
       OR upper(@poperation) = 'LEVELING'
       OR upper(@poperation) = 'APPLY ACTUALS'
       OR upper(@poperation) = 'UPDATE PROGRESS'
       OR upper(@poperation) = 'TIME APPROVAL'
       OR upper(@poperation) = 'SUMMARIZE'
       OR upper(substring(@poperation,1,7)) = 'PUBLISH'
       OR upper(substring(@poperation,1,6)) = 'EXPORT'
       OR upper(substring(@poperation,1,6)) = 'IMPORT'
      set @v_long_running_flag = 'Y'
    else
      set @v_long_running_flag = 'N'

    if @v_long_running_flag = 'Y' 
    begin
      if @paction = 'BEGIN'
        update usession 
          set operation_name = @poperation
             ,operation_start_date = getDate()
             ,long_operation_flag = 'Y'
        where session_id = @psession_id;
      else
        update usession 
          set operation_name = null
             ,operation_start_date = null
             ,long_operation_flag = 'N'
        where session_id = @psession_id;

    end
    
  end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PROJECT_COPY_BASELINE' and type='P')
  DROP PROCEDURE PROJECT_COPY_BASELINE

PROJECT_COPY_BASELINE
CREATE PROCEDURE PROJECT_COPY_BASELINE
	@src_proj_id	integer,
	@base_proj_id	integer,
	@target_proj_id integer= null,
	@copy_bit	varchar(30)=null,
	@pret_val	integer OUTPUT,
	@pret_msg	varchar(4000) OUTPUT,
	@ppfolio_id	integer = null,
	@psession_id	integer = null
as
set nocount on 
declare @vtarget_wbs_id integer, @vtarget_proj_id integer,@vis_project_baseline char(1),@vsum_base_proj_id integer,@bcopy_bit char(30), @vcnt integer
declare @default_copy_bit varchar(24)
set @default_copy_bit='111111111111111111101101'
set  @vis_project_baseline ='N'
 if @src_proj_id=null 
  begin
    set @pret_val = -1
    set @pret_msg = 'Must specify source project to copy baseline from'
    return
  end
if @base_proj_id=null
  begin 
    set @pret_val = -1
    set @pret_msg = 'Must specify baseline project to copy'
  return
 end

if @copy_bit is null 
 begin
    set @bcopy_bit = @default_copy_bit
 end
else
 if (len(@copy_bit) <24) 
begin
set @bcopy_bit=@copy_bit + substring(@default_copy_bit,len(@copy_bit)+1,24)
end
else 
if substring(@copy_bit,24,1)<>'1'
begin 
set @bcopy_bit=substring(@copy_bit,1,23)+'1'
end 
else
begin
   set @bcopy_bit = @copy_bit
    if substring(@bcopy_bit,19,1)<>'0' and  substring(@bcopy_bit,24,1)<>'0'
    begin 
        set @pret_val = -1
        set @pret_msg = 'can not create baseline for baseline project'
        return
    end
end 
 select @vsum_base_proj_id=sum_base_proj_id from project where proj_id = @src_proj_id  
    if @vsum_base_proj_id = @base_proj_id 
     set  @vis_project_baseline ='Y'
if @target_proj_id is null
begin
   select @vtarget_proj_id=target_proj_id, @vtarget_wbs_id=target_wbs_id
      from tprojmap
     where source_proj_id = @src_proj_id and session_id=@psession_id
end
else
begin
 select @vtarget_wbs_id=wbs_id from projwbs where proj_id=@target_proj_id and proj_node_flag='Y'  
   select @vcnt=count(1) from TPROJMAP where source_proj_id=@src_proj_id and session_id=@psession_id
     if @vcnt =0 
        insert into TPROJMAP values(@psession_id,1,@src_proj_id,@target_proj_id,@vtarget_wbs_id)  
     else		 	
	update TPROJMAP set target_proj_id=@target_proj_id,target_wbs_id=@vtarget_wbs_id where source_proj_id=@src_proj_id and session_id=@psession_id
end
if @vtarget_wbs_id is not null
begin
	exec project_copy @base_proj_id,@vtarget_wbs_id,@bcopy_bit,@pret_val OUTPUT, @pret_msg OUTPUT, @ppfolio_id, @psession_id
	if @pret_val <0 
	begin 
		set @pret_msg = 'copy baseline failed|' + @pret_msg
		rollback transaction
		return
	end 
	if @target_proj_id is not null 
          update project set orig_proj_id=@target_proj_id where proj_id=@pret_val 
 
	if @vis_project_baseline='Y'
	update project set sum_base_proj_id=@pret_val where proj_id=@vtarget_proj_id and delete_session_id is null
end
else
begin 
  set @pret_msg = 'copy baseline failed|' + @pret_msg
  rollback transaction
  return
end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PROJECT_DELETE_WBS' and type='P')
  DROP PROCEDURE PROJECT_DELETE_WBS

PROJECT_DELETE_WBS
CREATE PROCEDURE project_delete_wbs
(@pproj_id int,  @pret_val integer OUTPUT, @pret_msg varchar(1000) OUTPUT, @pnode char(1)='A' )
AS
  declare @vnode char(1)
  if upper(@pnode) = 'A' or upper(@pnode) = 'N' 
    set @vnode = 'N'
  else 
    set @vnode = 'Y'

  delete from dbo.BUDGCHNG where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode)
	delete from dbo.PROJEST where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode)
	delete from dbo.ISSUHIST where issue_id in (select issue_id from dbo.PROJISSU where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode))
	delete from dbo.PROJISSU where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode)
	delete from dbo.RISKCTRL where risk_id in (select risk_id from dbo.PROJRISK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode))
	delete from dbo.PROJRISK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode)
	delete from dbo.PROJTHRS where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode)
	delete from dbo.PRPFOLIO where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode)
	delete from dbo.ITERDAYS where task_id in (select task_id from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode))
	delete from dbo.PROJCOST where task_id in (select task_id from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode))
	delete from dbo.ISSUHIST where issue_id in (select issue_id from dbo.PROJISSU where task_id in (select task_id from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode)))
	delete from dbo.PROJISSU where task_id in (select task_id from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode))
	delete from dbo.TASKACTV where task_id in (select task_id from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode))
	delete from dbo.TASKDOC where task_id in (select task_id from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode))
	delete from dbo.TASKFDBK where task_id in (select task_id from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode))
	delete from dbo.TASKFIN where task_id in (select task_id from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode))
	delete from dbo.TASKMEMO where task_id in (select task_id from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode))
	delete from dbo.TASKNOTE where task_id in (select task_id from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode))
	delete from dbo.TASKPRED where pred_task_id in (select task_id from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode))
	delete from dbo.TASKPRED where task_id in (select task_id from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode))
	delete from dbo.TASKPROC where task_id in (select task_id from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode))
	delete from dbo.RSRCHOUR where taskrsrc_id in (select taskrsrc_id from dbo.TASKRSRC where task_id in (select task_id from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode)))
	delete from dbo.TRSRCFIN where taskrsrc_id in (select taskrsrc_id from dbo.TASKRSRC where task_id in (select task_id from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode)))
	delete from dbo.TASKRSRC where task_id in (select task_id from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode))
	delete from dbo.TASKUSER where task_id in (select task_id from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode))
	delete from dbo.TASKWKSP where task_id in (select task_id from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode))
	delete from dbo.TRSRCFIN where task_id in (select task_id from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode))
	delete from dbo.TASK where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode)
	delete from dbo.TASKDOC where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode)
	delete from dbo.TASKSUM where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode)
	delete from dbo.WBSBUDG where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode)
	delete from dbo.WBSMEMO where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode)
	delete from dbo.WBSRSRC_QTY where wbsrsrc_id in (select wbsrsrc_id from dbo.WBSRSRC where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode))
	delete from dbo.WBSRSRC where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode)
	delete from dbo.WBSSTEP where wbs_id in (select wbs_id from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = @vnode)

  if upper(@pnode) = 'A'
    exec project_delete_wbs @pproj_id, @pret_val output, @pret_msg output, 'Y'


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PROJECT_DELETE' and type='P')
  DROP PROCEDURE PROJECT_DELETE

PROJECT_DELETE
CREATE PROCEDURE project_delete
(@pproj_id int, @pret_val integer OUTPUT, @pret_msg varchar(1000) OUTPUT,
 @keep_root bit=0)
AS
	delete from dbo.TASKACTV where actv_code_id in (select actv_code_id from dbo.ACTVCODE where actv_code_type_id in (select actv_code_type_id from dbo.ACTVTYPE where proj_id = @pproj_id))
	delete from dbo.ACTVCODE where actv_code_type_id in (select actv_code_type_id from dbo.ACTVTYPE where proj_id = @pproj_id)
	delete from dbo.TASKACTV where actv_code_type_id in (select actv_code_type_id from dbo.ACTVTYPE where proj_id = @pproj_id)
	delete from dbo.ACTVTYPE where proj_id = @pproj_id
  delete from dbo.BUDGCHNG where proj_id = @pproj_id

  -- CALENDAR
	delete from dbo.RSRCHOUR where rsrc_id in (select rsrc_id from dbo.RSRC where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.RSRCPROP where rsrc_id in (select rsrc_id from dbo.RSRC where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.RSRCRATE where rsrc_id in (select rsrc_id from dbo.RSRC where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.RSRCRCAT where rsrc_id in (select rsrc_id from dbo.RSRC where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.RSRCROLE where rsrc_id in (select rsrc_id from dbo.RSRC where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.RSRCSEC where rsrc_id in (select rsrc_id from dbo.RSRC where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.RSRFOLIO where rsrc_id in (select rsrc_id from dbo.RSRC where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.RSRCHOUR where taskrsrc_id in (select taskrsrc_id from dbo.TASKRSRC where rsrc_id in (select rsrc_id from dbo.RSRC where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id)))
	delete from dbo.TRSRCFIN where taskrsrc_id in (select taskrsrc_id from dbo.TASKRSRC where rsrc_id in (select rsrc_id from dbo.RSRC where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id)))
	delete from dbo.TASKRSRC where rsrc_id in (select rsrc_id from dbo.RSRC where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.RSRCHOUR where (str(ts_id)+str(rsrc_id)) in (select str(ts_id)+str(rsrc_id) from dbo.TIMESHT where rsrc_id in (select rsrc_id from dbo.RSRC where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id)))
	delete from dbo.TIMESHT where rsrc_id in (select rsrc_id from dbo.RSRC where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.TRSRCSUM where rsrc_id in (select rsrc_id from dbo.RSRC where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.RSRC where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id)
	delete from dbo.ITERDAYS where task_id in (select task_id from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.PROJCOST where task_id in (select task_id from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.ISSUHIST where issue_id in (select issue_id from dbo.PROJISSU where task_id in (select task_id from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id)))
	delete from dbo.PROJISSU where task_id in (select task_id from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.TASKACTV where task_id in (select task_id from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.TASKDOC where task_id in (select task_id from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.TASKFDBK where task_id in (select task_id from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.TASKFIN where task_id in (select task_id from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.TASKMEMO where task_id in (select task_id from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.TASKNOTE where task_id in (select task_id from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.TASKPRED where pred_task_id in (select task_id from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.TASKPRED where task_id in (select task_id from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.TASKPROC where task_id in (select task_id from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.RSRCHOUR where taskrsrc_id in (select taskrsrc_id from dbo.TASKRSRC where task_id in (select task_id from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id)))
	delete from dbo.TRSRCFIN where taskrsrc_id in (select taskrsrc_id from dbo.TASKRSRC where task_id in (select task_id from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id)))
	delete from dbo.TASKRSRC where task_id in (select task_id from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.TASKUSER where task_id in (select task_id from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.TASKWKSP where task_id in (select task_id from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.TRSRCFIN where task_id in (select task_id from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id))
	delete from dbo.TASK where clndr_id in (select clndr_id from dbo.CALENDAR where proj_id = @pproj_id)
	delete from dbo.CALENDAR where proj_id = @pproj_id

	delete from dbo.TASKDOC where doc_id in (select doc_id from dbo.DOCUMENT where proj_id = @pproj_id)
	delete from dbo.DOCUMENT where proj_id = @pproj_id
	delete from dbo.ISSUHIST where proj_id = @pproj_id
	delete from dbo.ITERDAYS where proj_id = @pproj_id
	delete from dbo.PROJCOST where proj_id = @pproj_id
	delete from dbo.PROJEST where proj_id = @pproj_id
	delete from dbo.PROJFUND where proj_id = @pproj_id
	delete from dbo.ISSUHIST where issue_id in (select issue_id from dbo.PROJISSU where proj_id = @pproj_id)
	delete from dbo.PROJISSU where proj_id = @pproj_id
	delete from dbo.PROJPCAT where proj_id = @pproj_id
	delete from dbo.PROJPROP where proj_id = @pproj_id
	delete from dbo.RISKCTRL where risk_id in (select risk_id from dbo.PROJRISK where proj_id = @pproj_id)
	delete from dbo.PROJRISK where proj_id = @pproj_id
	delete from dbo.PROJTHRS where proj_id = @pproj_id
	

  exec project_delete_wbs @pproj_id, @pret_val output, @pret_msg output, 'N'
	delete from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = 'N'

	delete from dbo.RISKCTRL where proj_id = @pproj_id
	delete from dbo.JOBRPT where rpt_id in (select rpt_id from dbo.RPT where proj_id = @pproj_id)
	delete from dbo.PROJWSRPT where rpt_id in (select rpt_id from dbo.RPT where proj_id = @pproj_id)
	delete from dbo.RPTLIST where rpt_id in (select rpt_id from dbo.RPT where proj_id = @pproj_id)
	delete from dbo.RPT where proj_id = @pproj_id
	delete from dbo.RPTLIST where rpt_batch_id in (select rpt_batch_id from dbo.RPTBATCH where proj_id = @pproj_id)
	delete from dbo.RPTBATCH where proj_id = @pproj_id

  --TASK
	delete from dbo.ITERDAYS where task_id in (select task_id from dbo.TASK where proj_id = @pproj_id)
	delete from dbo.PROJCOST where task_id in (select task_id from dbo.TASK where proj_id = @pproj_id)
	delete from dbo.ISSUHIST where issue_id in (select issue_id from dbo.PROJISSU where task_id in (select task_id from dbo.TASK where proj_id = @pproj_id))
	delete from dbo.PROJISSU where task_id in (select task_id from dbo.TASK where proj_id = @pproj_id)
	delete from dbo.TASKACTV where task_id in (select task_id from dbo.TASK where proj_id = @pproj_id)
	delete from dbo.TASKDOC where task_id in (select task_id from dbo.TASK where proj_id = @pproj_id)
	delete from dbo.TASKFDBK where task_id in (select task_id from dbo.TASK where proj_id = @pproj_id)
	delete from dbo.TASKFIN where task_id in (select task_id from dbo.TASK where proj_id = @pproj_id)
	delete from dbo.TASKMEMO where task_id in (select task_id from dbo.TASK where proj_id = @pproj_id)
	delete from dbo.TASKNOTE where task_id in (select task_id from dbo.TASK where proj_id = @pproj_id)
	delete from dbo.TASKPRED where pred_task_id in (select task_id from dbo.TASK where proj_id = @pproj_id)
	delete from dbo.TASKPRED where task_id in (select task_id from dbo.TASK where proj_id = @pproj_id)
	delete from dbo.TASKPROC where task_id in (select task_id from dbo.TASK where proj_id = @pproj_id)
	delete from dbo.RSRCHOUR where taskrsrc_id in (select taskrsrc_id from dbo.TASKRSRC where task_id in (select task_id from dbo.TASK where proj_id = @pproj_id))
	delete from dbo.TRSRCFIN where taskrsrc_id in (select taskrsrc_id from dbo.TASKRSRC where task_id in (select task_id from dbo.TASK where proj_id = @pproj_id))
	delete from dbo.TASKRSRC where task_id in (select task_id from dbo.TASK where proj_id = @pproj_id)
	delete from dbo.TASKUSER where task_id in (select task_id from dbo.TASK where proj_id = @pproj_id)
	delete from dbo.TASKWKSP where task_id in (select task_id from dbo.TASK where proj_id = @pproj_id)
	delete from dbo.TRSRCFIN where task_id in (select task_id from dbo.TASK where proj_id = @pproj_id)
	delete from dbo.TASK where proj_id = @pproj_id
	delete from dbo.TASKACTV where proj_id = @pproj_id
	delete from dbo.TASKDOC where proj_id = @pproj_id
	delete from dbo.TASKFDBK where proj_id = @pproj_id
	delete from dbo.TASKFIN where proj_id = @pproj_id
	delete from dbo.TASKMEMO where proj_id = @pproj_id
	delete from dbo.TASKNOTE where proj_id = @pproj_id
	delete from dbo.TASKPRED where pred_proj_id = @pproj_id
	delete from dbo.TASKPRED where proj_id = @pproj_id
	delete from dbo.TASKPROC where proj_id = @pproj_id

  -- TASKRSRC
	delete from dbo.RSRCHOUR where taskrsrc_id in (select taskrsrc_id from dbo.TASKRSRC where proj_id = @pproj_id)
	delete from dbo.TRSRCFIN where taskrsrc_id in (select taskrsrc_id from dbo.TASKRSRC where proj_id = @pproj_id)
	delete from dbo.TASKRSRC where proj_id = @pproj_id

	delete from dbo.TASKSUM where proj_id = @pproj_id
	delete from dbo.TASKUSER where proj_id = @pproj_id
	delete from dbo.TASKWKSP where proj_id = @pproj_id
	delete from dbo.TRSRCFIN where proj_id = @pproj_id
	delete from dbo.TRSRCSUM where proj_id = @pproj_id
	delete from dbo.UDFVALUE where proj_id = @pproj_id
	delete from dbo.VIEWPROP where proj_id = @pproj_id
	delete from dbo.WBSBUDG where proj_id = @pproj_id
	delete from dbo.WBSMEMO where proj_id = @pproj_id
	delete from dbo.WBSRSRC_QTY where wbsrsrc_id in (select wbsrsrc_id from dbo.WBSRSRC where proj_id = @pproj_id)
	delete from dbo.WBSRSRC where proj_id = @pproj_id
	delete from dbo.WBSSTEP where proj_id = @pproj_id

  -- Handle the delete of the root
  if @keep_root = 0
  BEGIN

		exec project_delete_wbs @pproj_id, @pret_val output, @pret_msg output, 'Y'

		delete from dbo.PROJSHAR where proj_id = @pproj_id
		delete from dbo.EXPPROJ where proj_id = @pproj_id
		delete from dbo.EXTAPP where proj_id = @pproj_id
		delete from dbo.OBSPROJ where proj_id = @pproj_id
		delete from dbo.FORMPROJ where proj_id = @pproj_id
		delete from dbo.USERWKSP where proj_id = @pproj_id
		delete from dbo.UACCESS where proj_id = @pproj_id
		delete from dbo.SCENPROJ where proj_id = @pproj_id
		delete from dbo.WKFLUSER where work_flow_id in (select work_flow_id from dbo.WORKFLOW where proj_id = @pproj_id)
		delete from dbo.WORKFLOW where proj_id = @pproj_id
		delete from dbo.TASKWKSP where workspace_id in (select workspace_id from dbo.WORKSPACE where proj_id = @pproj_id)
		delete from dbo.USERWKSP where workspace_id in (select workspace_id from dbo.WORKSPACE where proj_id = @pproj_id)
		delete from dbo.WORKSPACE where proj_id = @pproj_id

    delete from dbo.PROJWBS where proj_id = @pproj_id and proj_node_flag = 'Y'
    delete from dbo.PROJECT where proj_id = @pproj_id  
  END
  
  set @pret_val = 0

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'REPLACE_REFLECTION_PROJECT' and type='P')
  DROP PROCEDURE REPLACE_REFLECTION_PROJECT

REPLACE_REFLECTION_PROJECT
create procedure replace_reflection_project
(@psession_id int,@pproj_id int, @prepl_proj_id int, @pret_val int OUTPUT, @pret_msg	varchar(4000) OUTPUT)
as
  set nocount on
  declare @root_wbs_id int, @dest_wbs_id int, @wbs_id int,@obs_id int
  select @root_wbs_id=wbs_id , @dest_wbs_id=parent_wbs_id
  from projwbs pw, project p 
  where p.proj_id = @prepl_proj_id
  and p.proj_id = pw.proj_id 
  and p.orig_proj_id is null and pw.proj_node_flag = 'Y' and p.project_flag = 'Y'
  and pw.status_code = 'WS_Whatif'
  if @@rowcount = 0
  begin
    set @pret_val = -1
    set @pret_msg = 'Project Id ' + str(@prepl_proj_id) + ' is not a valid project for merge'
    return
  end

  exec project_delete @prepl_proj_id, @pret_val output, @pret_msg output,1
  if @pret_val<>0
    return

  exec project_copy @pproj_id, @dest_wbs_id ,'1111111111111111110111001',@pret_val OUTPUT,@pret_msg OUTPUT,null,@psession_id,@prepl_proj_id

  select @obs_id=obs_id from projwbs where proj_id=@prepl_proj_id  and proj_node_flag='Y'
  update projwbs set obs_id=@obs_id,status_code = 'WS_Whatif' where proj_id = @prepl_proj_id

  set @pret_val = 0

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'OBSPROJ_UPDATE_PROCESS_KEYS' and type='P')
  DROP PROCEDURE OBSPROJ_UPDATE_PROCESS_KEYS

OBSPROJ_UPDATE_PROCESS_KEYS
CREATE PROCEDURE obsproj_update_process_keys
(@pproj_id int, @pwbs_id int, @pprocess_type varchar(4)='ADD')
AS 

  set nocount on
  if @pprocess_type = 'FULL' or @pprocess_type = 'ADD'
  BEGIN
    insert into obsproj (obs_id,proj_id,wbs_id)
    select distinct pk1,@pproj_id,@pwbs_id
    from #tempkeys tk
    where not exists (select * from obsproj op 
                      where op.obs_id = tk.pk1 and op.proj_id =@pproj_id);
  END

  if @pprocess_type = 'FULL' or @pprocess_type = 'REMOVE'
  BEGIN
    delete from obsproj
    where proj_id = @pproj_id
    and obs_id not in (select pk1 from #tempkeys);
  END

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'OBSPROJ_UPDATE_EPS' and type='P')
  DROP PROCEDURE OBSPROJ_UPDATE_EPS

OBSPROJ_UPDATE_EPS
CREATE PROCEDURE obsproj_update_eps
(@pwbs_id int, @pret_val int OUTPUT, @pret_msg varchar(4000) OUTPUT)
AS 
  set nocount on
  declare @vproj_id int, @vparent_proj_id int, @vproject_flag char(1)
  declare @vobs_id int, @vcnt int, @vid int, @vdelete_session_id int

  select @vproj_id=pw.proj_id, @vproject_flag=p.project_flag, @vobs_id=pw.obs_id, @vdelete_session_id=pw.delete_session_id
  from projwbs pw, project p
  where pw.wbs_id = @pwbs_id and pw.proj_node_flag = 'Y'
  and p.proj_id = pw.proj_id and orig_proj_id is null
  if @@rowcount=0 return

  if @vdelete_session_id is null 
  BEGIN

    set @vparent_proj_id=null

    select @vparent_proj_id=pp.proj_id
    from projwbs pw, projwbs pp
    where pw.wbs_id = @pwbs_id
    and pp.wbs_id = pw.parent_wbs_id
    and pw.delete_session_id is null and pp.delete_session_id is null;
    if @@rowcount=0 set @vparent_proj_id=null;

    delete from #tempkeys

    if @vparent_proj_id is not null
      insert into #tempkeys (pk1)
      select obs_id from obsproj op 
      where op.proj_id = @vparent_proj_id;

    if @vproject_flag = 'N'
    BEGIN

      select @vcnt=count(*) from #tempkeys where pk1 = @vobs_id;
      if @vcnt = 0 
        insert into #tempkeys (pk1) values (@vobs_id);
    
    END
    else
    BEGIN
    
      insert into #tempkeys (pk1)
      select distinct obs_id 
      from projwbs pw
      where proj_id = @vproj_id
      and pw.delete_session_id is null
      and not exists (select * from #tempkeys tk where tk.pk1 = pw.obs_id);

    END

  END 

  exec obsproj_update_process_keys @vproj_id, @pwbs_id, 'FULL'
 
  -- Recursive through hierarchy
  delete from #rectab where context_id = @pwbs_id;

  insert into #rectab 
  select @pwbs_id,wbs_id from projwbs
  where parent_wbs_id = @pwbs_id
  and proj_node_flag = 'Y';

  select top 1 @vid=value from #rectab where context_id = @pwbs_id;
  while (select count(*) from #rectab where context_id = @pwbs_id) > 0 
  BEGIN
--    print 'parent=' +str(@pwbs_id)+',child='+str(@vid)
    exec obsproj_update_eps @vid, @pret_val OUTPUT, @pret_msg OUTPUT
    if @pret_val <> 0 
      return
    delete from #rectab where context_id = @pwbs_id and value = @vid
    select top 1 @vid=value from #rectab where context_id = @pwbs_id;
  END; 

  set @pret_val = 0

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'OBSPROJ_UPDATE_PROJECT' and type='P')
  DROP PROCEDURE OBSPROJ_UPDATE_PROJECT

OBSPROJ_UPDATE_PROJECT
CREATE PROCEDURE obsproj_update_project
(@pproj_id int, @pret_val int OUTPUT, @pret_msg varchar(4000) OUTPUT)
AS 
  set nocount on
  declare @vparent_proj_id int, @vwbs_id int, @vcnt int
  declare @vparent_wbs_id int, @vobs_id int
  delete from #tempkeys;

  select @vparent_proj_id=pp.proj_id, @vwbs_id=pw.wbs_id
        ,@vparent_wbs_id=pp.wbs_id, @vobs_id=pp.obs_id 
  from projwbs pw, projwbs pp
  where pw.proj_id = @pproj_id and pw.proj_node_flag = 'Y'
  and pp.wbs_id = pw.parent_wbs_id;

  if @@rowcount = 0 set @vparent_proj_id = null

  set @vcnt = 0
  while ( @vparent_wbs_id is not null and @vcnt <= 100)
  BEGIN
    set @vcnt = @vcnt + 1
    if (select count(*) from #tempkeys where pk1=@vobs_id) = 0
      insert into #tempkeys (pk1) values (@vobs_id)
    select @vparent_wbs_id=parent_wbs_id from projwbs pw where pw.wbs_id = @vparent_wbs_id;
    select @vobs_id=obs_id from projwbs pw where pw.wbs_id=@vparent_wbs_id;
    if @@rowcount = 0 set @vparent_wbs_id = null
  END

  insert into #tempkeys (pk1)
  select distinct obs_id from projwbs p
  where proj_id = @pproj_id and delete_session_id is null;

  exec obsproj_update_process_keys @pproj_id, @vwbs_id, 'FULL'

  set @pret_val = 0


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'OBSPROJ_UPDATE' and type='P')
  DROP PROCEDURE OBSPROJ_UPDATE

OBSPROJ_UPDATE
CREATE PROCEDURE obsproj_update
( @pupdate_type varchar(7) = 'EPS'				-- Type of update EPS, Project, WBS, OBS
, @pkey int = null								-- Single primary key value to be maintained
, @pkey_list varchar(4000)=null					-- Comma list of primary key values
, @pret_val int OUTPUT, @pret_msg varchar(4000) OUTPUT 	-- Normal returns.  Do this way for easy translation to SQL Server 2k
)
AS 
  set nocount on
  declare @v_key_type varchar(20), @v_cnt int, @v_table_name varchar(30)
  declare @v_where_clause varchar(4000), @v_msg varchar(100), @vsql nvarchar(4000)
  
  SET @pret_val = 0;
  if (@pupdate_type is null) or 
     (@pupdate_type != 'EPS' and @pupdate_type != 'PROJECT' and @pupdate_type != 'WBS' and @pupdate_type != 'OBS' ) 
  BEGIN
    set @pret_val = -1002;
    set @pret_msg = 'ERROR: Must provide a valid update_type';    
    return;
  END;

  if @pkey is not null
    set @v_key_type = 'SINGLE';
  else if @pkey_list is not null 
  BEGIN
    --Not implemented
    set @v_key_type = 'LIST';
    set @pret_val = -1003;
    set @pret_msg = 'ERROR: This function not implemented';
    return;
  END
  else
  BEGIN
    set @pret_val = -1001;
    set @pret_msg = 'ERROR: Must provide list or key value';
    return;
  END;

  create table #obsproj_update_cnt (n1 int)

  if @pupdate_type = 'PROJECT' 
  BEGIN
    set @v_table_name = 'PROJECT';
    set @v_where_clause = 'proj_id = @key and project_flag = ''Y'' and orig_proj_id is null';
    set @v_msg = 'project ID';
  END
  else if @pupdate_type = 'EPS' 
  BEGIN
    set @v_table_name = 'PROJWBS';
    set @v_where_clause = 'wbs_id = @key and proj_node_flag = ''Y''';
    set @v_msg = 'EPS Node';
  END

  set @vsql = N'insert into #obsproj_update_cnt select count(*) from ' + @v_table_name + N' where ' 
              + @v_where_clause 
                     
  exec sp_executesql @vsql, N'@key int', @key=@pkey
  if (select n1 from #obsproj_update_cnt) = 0
  BEGIN
    set @pret_val = -1004
    set @pret_msg = 'ERROR: Not a valid ' + @v_msg
    return;
  END;

  create table #tempkeys (pk1 int, pk2 int);
  create index #ndx_tempkeys_pk on #tempkeys (pk1,pk2);

  if @v_key_type = 'SINGLE' and @pupdate_type = 'PROJECT'
    exec obsproj_update_project @pkey, @pret_val OUTPUT, @pret_msg OUTPUT
  else if @v_key_type = 'SINGLE' and @pupdate_type = 'EPS' 
  BEGIN
    create table #rectab (context_id int, value int);
    create index #ndx_rectab on #rectab (context_id,value);
    exec obsproj_update_eps @pkey, @pret_val OUTPUT, @pret_msg OUTPUT
  END;
  else
  BEGIN
    set @pret_val = -1005;
    set @pret_msg = 'WARNING: Nothing to process';
    return;
  END
  

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'OBSPROJ_FULL_REBUILD' and type='P')
  DROP PROCEDURE OBSPROJ_FULL_REBUILD

OBSPROJ_FULL_REBUILD
CREATE PROCEDURE obsproj_full_rebuild
(@pret_val int OUTPUT, @pret_msg varchar(4000) OUTPUT )
AS 
  set nocount on
  declare @vid int  
  create table #fullrebuild (wbs_id int)

  insert into #fullrebuild
  select wbs_id 
  from projwbs
  where parent_wbs_id is null
  and delete_session_id is null;

  select top 1 @vid=wbs_id from #fullrebuild
  while (select count(*) from #fullrebuild) > 0 
  BEGIN
    exec obsproj_update 'EPS', @vid, null, @pret_val OUTPUT, @pret_msg OUTPUT
    if @pret_val <> 0 
      return
    delete from #fullrebuild where wbs_id = @vid
  select top 1 @vid=wbs_id from #fullrebuild
  END; 


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PRMQUEUE_ADD' and type='P')
  DROP PROCEDURE PRMQUEUE_ADD

PRMQUEUE_ADD
CREATE PROCEDURE prmqueue_add
(@pqueue_name varchar(255), @pmsg_type varchar(30), @pmsg_sub_type varchar(30)
, @pkey1 varchar(30)=null, @pkey2 varchar(30)=null
, @pqueue_payload varchar(4000)=null
,@ppriority int=1)
AS 
  set nocount on
  declare @vuser_name varchar(32), @vsess int, @vapp_name varchar(255)
  exec audit_prm_user @vsess output, @vuser_name output, @vapp_name output
  insert into prmqueue (queue_name,msg_key,enqueue_date,enqueue_user,status_code,
                        msg_type, msg_sub_type, key1, key2,
                        priority,sender_name, queue_payload)
  values ( @pqueue_name, replace(newid(),'-',''), getDate(), @vuser_name, 'QUEUED', 
          @pmsg_type, @pmsg_sub_type, @pkey1, @pkey2,
          @ppriority, substring(@vuser_name,1,30), @pqueue_payload ); 


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'OBSPROJ_PROCESS_QUEUE' and type='P')
  DROP PROCEDURE OBSPROJ_PROCESS_QUEUE

OBSPROJ_PROCESS_QUEUE
CREATE PROCEDURE obsproj_process_queue
(@pret_val int OUTPUT, @pret_msg varchar(4000) OUTPUT )
as
  set nocount on 
  declare @vcnt int, @vmax_project_updates int, @vmax_eps_updates int, @vmsg varchar(1000)
  declare @vstatus_code varchar(10), @vmax_retries int, @vretry_count int
  declare @msg_key varchar(32), @msg_sub_type varchar(10), @key1 varchar(10), @key2 varchar(10)
  declare @retry_count int, @status_code varchar(10), @enqueue_date datetime
  declare @vprocess_cnt int

  create table #obsproj_process
  (msg_key varchar(32),msg_type varchar(7),msg_sub_type varchar(10),key1 varchar(10),key2 varchar(10),
   retry_count int, status_code varchar(10), enqueue_date datetime)

  insert into #obsproj_process
  select msg_key, msg_type, msg_sub_type, key1, key2, retry_count, status_code, enqueue_date
  from prmqueue
  where queue_name = 'PROJWBS_SECURITY'
  and status_code in  ('QUEUED','FAILED');

  exec settings_read_number @vmax_project_updates OUTPUT, 'database.obsproj.queue','MaxProjectUpdates',1000
  exec settings_read_number @vmax_retries OUTPUT, 'database.obsproj.queue','MaxRetries',50

  set @vprocess_cnt = 0
  set @vcnt=0
  select top 1 @msg_key=msg_key, @msg_sub_type=msg_sub_type, @enqueue_date=enqueue_date
       , @key1=key1, @key2=key2, @retry_count=retry_count, @status_code=status_code
  from #obsproj_process where msg_type = 'PROJECT' order by enqueue_date
  while (select count(*) from #obsproj_process where msg_type = 'PROJECT') > 0 
  BEGIN
    set @vcnt=@vcnt+1
    if @vcnt > @vmax_project_updates 
    BEGIN
      select @vcnt=count(*)
      from prmqueue  
      where queue_name = 'PROJWBS_SECURITY'
      and msg_type = 'PROJECT'
      and status_code = 'QUEUED';
      set @vmsg = 'Finish PROJECT processing after '
                      + str(@vmax_project_updates) + ' records with '
                      + str(@vcnt) + ' records remaining';
      set @pret_msg = @vmsg
      exec bgp_write_to_log 'obsproj_process_queue',@vmsg
      break;

    END

    print 'PROJECT QUEUE:' + @msg_key + ',' + convert(varchar(30),@enqueue_date) + ','+@KEY1+ ','+@KEY2

    update prmqueue set dequeue_date=getDate(), dequeue_user='background',status_code='PROCESSING'
    where queue_name = 'PROJWBS_SECURITY' and msg_key = @msg_key;

    exec obsproj_update 'PROJECT', @key2, null, @pret_val output, @pret_msg output

    if @pret_val < 0 and @pret_val <> -1004 -- Other Error
    BEGIN
      if @retry_count is null 
        set @vretry_count = 1
      else
        set @vretry_count = @retry_count + 1
      
      if @vretry_count > @vmax_retries
        set @vstatus_code = 'ERROR'
      else
        set @vstatus_code = 'FAILED';

      update prmqueue set status_code=@vstatus_code, retry_count=@vretry_count, err_msg = @pret_msg
      where queue_name = 'PROJWBS_SECURITY' and msg_key = @msg_key;
    END
    else
      update prmqueue set status_code='COMPLETE'
      where queue_name = 'PROJWBS_SECURITY' and msg_key = @msg_key;


    delete from #obsproj_process where msg_key = @msg_key;
    select top 1 @msg_key=msg_key, @msg_sub_type=msg_sub_type, @enqueue_date=enqueue_date
       , @key1=key1, @key2=key2, @retry_count=retry_count, @status_code=status_code
    from #obsproj_process where msg_type = 'PROJECT' order by enqueue_date
  END

  set @vprocess_cnt = @vcnt
  -- EPS Queue

  set @vcnt=0
  select top 1 @msg_key=msg_key, @msg_sub_type=msg_sub_type, @enqueue_date=enqueue_date
       , @key1=key1, @key2=key2, @retry_count=retry_count, @status_code=status_code
  from #obsproj_process where msg_type = 'EPS' order by enqueue_date
  while (select count(*) from #obsproj_process where msg_type = 'EPS') > 0 
  BEGIN
    set @vcnt=@vcnt+1
    if @vcnt > @vmax_project_updates 
    BEGIN
      select @vcnt=count(*)
      from prmqueue  
      where queue_name = 'PROJWBS_SECURITY'
      and msg_type = 'EPS'
      and status_code = 'QUEUED';
      set @vmsg = 'Finish EPS processing after '
                      + str(@vmax_project_updates) + ' records with '
                      + str(@vcnt) + ' records remaining';
      set @pret_msg = @vmsg
      exec bgp_write_to_log 'obsproj_process_queue',@vmsg
      break;

    END

    print 'EPS QUEUE:' + @msg_key + ',' + convert(varchar(30),@enqueue_date) + ','+@KEY1+ ','+@KEY2

    update prmqueue set dequeue_date=getDate(), dequeue_user='background',status_code='PROCESSING'
    where queue_name = 'PROJWBS_SECURITY' and msg_key = @msg_key;
    if @msg_sub_type = 'DELETE' 
      delete from obsproj where proj_id = @key2;
    else
      exec obsproj_update 'EPS', @key1, null, @pret_val output, @pret_msg output

    if @pret_val < 0 and @pret_val <> -1004 -- Other Error
    BEGIN
      if @retry_count is null 
        set @vretry_count = 1
      else
        set @vretry_count = @retry_count + 1
      
      if @vretry_count > @vmax_retries
        set @vstatus_code = 'ERROR'
      else
        set @vstatus_code = 'FAILED';

      update prmqueue set status_code=@vstatus_code, retry_count=@vretry_count, err_msg = @pret_msg
      where queue_name = 'PROJWBS_SECURITY' and msg_key = @msg_key;
    END
    else
      update prmqueue set status_code='COMPLETE'
      where queue_name = 'PROJWBS_SECURITY' and msg_key = @msg_key;

    delete from #obsproj_process where msg_key = @msg_key;

    select top 1 @msg_key=msg_key, @msg_sub_type=msg_sub_type, @enqueue_date=enqueue_date
       , @key1=key1, @key2=key2, @retry_count=retry_count, @status_code=status_code
    from #obsproj_process where msg_type = 'EPS' order by enqueue_date
  END

  set @vprocess_cnt = @vprocess_cnt + @vcnt

  set @pret_val = @vprocess_cnt

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'CLEANUP_PRMQUEUE' and type='P')
  DROP PROCEDURE CLEANUP_PRMQUEUE

CLEANUP_PRMQUEUE
CREATE PROCEDURE cleanup_prmqueue
(@pret_val integer OUTPUT, @pret_msg varchar(1000) OUTPUT)
AS 
  set nocount on
  declare @early_login datetime, @curr_time datetime, @keepInterval varchar(20)
  declare @diff decimal(20,6), @interval_date datetime, @set varchar(20)
  declare @delete_all bit, @delete_thresh int, @delete_pct decimal(10,2)
  declare @rowcount int, @delete_rows int, @delete_cnt int, @max_to_delete int
  exec settings_read_string @set OUTPUT,'database.cleanup.Prmqueue','KeepInterval','5d'
  exec get_interval_difference @set, @diff OUTPUT
  set @curr_time = getDate()
  set @interval_date = @curr_time-@diff

  exec settings_read_bool @delete_all OUTPUT,'database.cleanup.Prmqueue','DeleteAll',0
  exec settings_read_number @delete_thresh OUTPUT,'database.cleanup.Prmqueue','DeleteAllThreshold',1000
  exec settings_read_number @delete_pct OUTPUT,'database.cleanup.Prmqueue','DeletePercentage',10
  exec settings_read_number @max_to_delete OUTPUT,'database.cleanup.Prmqueue','MaxRowsToDelete',10000
  select @rowcount=count(*) from prmqueue where enqueue_date <= @interval_date and status_code='COMPLETE'
  
  set @pret_val=0
  if @delete_all = 1 or @rowcount < @delete_thresh
  begin
    delete from prmqueue where enqueue_date <= @interval_date
    set @pret_val = @@rowcount
  end     
  else
  begin
    create table #tmprmqueue (queue_name varchar(30), msg_key varchar(32),enqueue_date datetime)
    set @delete_rows = @rowcount * (@delete_pct*.01)
    if @delete_rows > @max_to_delete
      set @delete_rows = @max_to_delete
    else if @delete_rows < @delete_thresh
      set @delete_rows = @delete_thresh
	declare @sql nvarchar(255)
    set @sql = N'insert into #tmprmqueue select top ' + ltrim(str(@delete_rows)) 
              + N' queue_name,msg_key,enqueue_date from prmqueue '
              + N' where enqueue_date <= ''' + convert(varchar(30),@interval_date) + ''''
    exec sp_executesql @sql
    declare  @vqueue_name varchar(30),@vmsg_key varchar(32), @venqueue_date datetime
    declare dels cursor for select queue_name,msg_key,enqueue_date from #tmprmqueue
    open dels
    set @delete_cnt=0
    fetch dels into @vqueue_name,@vmsg_key,@venqueue_date
    while @@fetch_status >= 0
    begin
      delete from prmqueue 
      where queue_name = @vqueue_name and msg_key = @vmsg_key
      and enqueue_date = @venqueue_date
      set @delete_cnt=@delete_cnt+@@rowcount
      fetch dels into @vqueue_name,@vmsg_key,@venqueue_date
    end
    close dels
    deallocate dels
    set @pret_val = @delete_cnt
  end
  set @pret_msg = ltrim(str(@pret_val)) + ' record(s) deleted'

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_VALIDATE' and type='P')
  DROP PROCEDURE WBSRSRC_VALIDATE

WBSRSRC_VALIDATE
CREATE PROCEDURE wbsrsrc_validate
(@prole_list varchar(4000),@pret_val int OUTPUT , @pret_msg varchar OUTPUT)
as
 BEGIN
  declare @vrole_id varchar(20) ,@pos int,@prole_id int,@wrwbsrsrc_id int,@wrwbs_id int,@wrrsrc_id int,@wrrole_id int, @cnt int 
  set nocount on 

  CREATE TABLE #rolelist( roleid int)
  SET @prole_list = LTRIM(RTRIM(@prole_list))+ ','
  SET @Pos = CHARINDEX(',', @prole_list, 1)

  IF REPLACE(@prole_list, ',', '') <> ''
    BEGIN
      WHILE @Pos > 0
 	    BEGIN
   	      SET @prole_id = LTRIM(RTRIM(LEFT(@prole_list, @Pos - 1)))
	      IF @prole_id <> ''
	        BEGIN
			  INSERT INTO #rolelist (roleid) VALUES (@prole_id) 
			END
			SET @prole_list = RIGHT(@prole_list, LEN(@prole_List) - @Pos)
			SET @Pos = CHARINDEX(',', @prole_List, 1)
		END
	END	

  DECLARE roles CURSOR FOR select roleid from #rolelist
  OPEN roles
  FETCH roles INTO @prole_id
  WHILE (@@FETCH_STATUS = 0)
    BEGIN
      declare wr cursor for select wbsrsrc_id,wbs_id,rsrc_id,role_id from wbsrsrc  where role_id=@prole_id and delete_session_id is null
      open wr
      FETCH wr INTO @wrwbsrsrc_id,@wrwbs_id,@wrrsrc_id,@wrrole_id
      WHILE (@@FETCH_STATUS = 0)
        BEGIN
          set @cnt=0
          IF @wrrsrc_id is not null 
		    select @cnt=count(*) from wbsrsrc where wbs_id=@wrwbs_id and rsrc_id=@wrrsrc_id and role_id is null and delete_session_id is null
	      ELSE
		    select @cnt=count(*) from wbsrsrc where wbs_id=@wrwbs_id  and rsrc_id is null  and role_id is null and delete_session_id is null
        IF @cnt >=1 
	    begin	
 	     begin transaction
            update wbsrsrc set delete_date = getdate(),delete_session_id=@@SPID where wbsrsrc_id = @wrwbsrsrc_id
            update wbsrsrc_qty set delete_date = getdate(),delete_session_id=@@SPID where wbsrsrc_id = @wrwbsrsrc_id
	     commit transaction
	    end 
        ELSE
          IF @wrrsrc_id is null 
			begin 
			begin transaction
			  update wbsrsrc set delete_date = getdate(),delete_session_id=@@SPID where wbsrsrc_id = @wrwbsrsrc_id
             		  update wbsrsrc_qty set delete_date = getdate(),delete_session_id=@@SPID where wbsrsrc_id = @wrwbsrsrc_id
	       		 commit transaction
			end
          ELSE
                      begin
			begin transaction
   			  update wbsrsrc set role_id=null where wbsrsrc_id = @wrwbsrsrc_id
			  commit transaction
		       end	
         FETCH wr INTO @wrwbsrsrc_id,@wrwbs_id,@wrrsrc_id,@wrrole_id
       END
  END
  close wr
  deallocate wr
  FETCH roles INTO @prole_id
 END
  close roles
  deallocate roles

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SYSTEM_MONITOR' and type='P')
  DROP PROCEDURE SYSTEM_MONITOR

SYSTEM_MONITOR
CREATE PROCEDURE system_monitor
AS
  SET NOCOUNT ON 
  declare @verstr varchar(4)
  set @verstr = substring(replace(@@version,' ',''),19,4)
  if @verstr = '2000'
    set transaction isolation level read uncommitted 

  exec audit_identity null,null,'Symon(bg)'
  declare @cd datetime, @ret int, @msg varchar(4000)
  set @cd=getDate()
  exec bgp_write_to_log 'system_monitor','Starting' 
  exec settings_write_date @cd,'database.background.Symon','HeartBeatTime'

  --Cleanup Usession Records that have expired
  exec bgp_write_to_log 'system_monitor','Begin usession_cleanup_expired' 
  exec usession_cleanup_expired @ret OUTPUT, @msg OUTPUT
  exec bgp_write_to_log 'system_monitor','Complete usession_cleanup_expired',null,@ret,@msg
  set @cd=getDate()
  exec bgp_write_to_log 'system_monitor','Begin obsproj_process_queue' 
  exec obsproj_process_queue @ret OUTPUT, @msg OUTPUT
  exec bgp_write_to_log 'system_monitor','Complete obsproj_process_queue','ELAPSED TIME',@ret,@msg,@cd
  exec settings_write_date @cd,'database.background.Symon','HeartBeatTime'
  exec bgp_write_to_log 'system_monitor','Complete' ,'ELAPSED TIME',@ret,@msg,@cd

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'DATA_MONITOR' and type='P')
  DROP PROCEDURE DATA_MONITOR

DATA_MONITOR
CREATE PROCEDURE data_monitor
AS
  SET NOCOUNT ON 
  declare @verstr varchar(4)
  set @verstr = substring(replace(@@version,' ',''),19,4)
  if @verstr = '2000'
    set transaction isolation level read uncommitted 

  exec audit_identity null,null,'Damon(bg)'
  declare @cd datetime, @ret int, @msg varchar(4000), @error_level integer,@dmonstart datetime
  set @cd=getDate()
  set @dmonstart=@cd
  exec bgp_write_to_log 'data_monitor','Begin bgplog_cleanup' 
  exec bgplog_cleanup @ret OUTPUT, @msg OUTPUT
  exec bgp_write_to_log 'data_monitor','Complete bgplog_cleanup','ELAPSED TIME',@ret,@msg,@cd

  exec bgp_write_to_log 'data_monitor','Starting' 
  exec settings_write_date @cd,'database.background.Damon','HeartBeatTime'

  -- Cleanup REFRDEL records before anything else
  set @cd=getDate()
  exec bgp_write_to_log 'data_monitor','Begin refrdel_cleanup' 
  exec refrdel_cleanup @ret OUTPUT, @msg OUTPUT
  exec bgp_write_to_log 'data_monitor','Complete refrdel_cleanup','ELAPSED TIME',@ret,@msg,@cd
  exec settings_write_date @cd,'database.background.Damon','HeartBeatTime'

  -- Cleanup PRMQUEUE
  set @cd=getDate()
  exec bgp_write_to_log 'data_monitor','Begin cleanup_prmqueue' 
  exec cleanup_prmqueue @ret OUTPUT, @msg OUTPUT
  exec bgp_write_to_log 'data_monitor','Complete cleanup_prmqueue','ELAPSED TIME',@ret,@msg,@cd
 

  -- Clear usession that have been logical
  set @cd=getDate()
  exec bgp_write_to_log 'data_monitor','Begin usession_clear_logical_deletes' 
  exec usession_clear_logical_deletes @ret OUTPUT, @msg OUTPUT
  exec bgp_write_to_log 'data_monitor','Complete usession_clear_logical_deletes','ELAPSED TIME',@ret,@msg,@cd
  exec settings_write_date @cd,'database.background.Damon','HeartBeatTime'

  -- Cleaup Logical Deletes
  set @cd=getDate()
  exec bgp_write_to_log 'data_monitor','Begin cleanup_logical_deletes' 
  exec settings_read_number @error_level OUTPUT,'database.cleanup.LogicalDelete','ErrorLevel','0'
  exec cleanup_logical_deletes @ret output, @msg OUTPUT, @error_level
  exec bgp_write_to_log 'data_monitor','Complete cleanup_logical_deletes','ELAPSED TIME',@ret,@msg,@cd
  exec settings_write_date @cd,'database.background.Damon','HeartBeatTime'

  set @cd=getDate()
  exec bgp_write_to_log 'data_monitor','Begin prmaudit_cleanup' 
  exec prmaudit_cleanup @ret OUTPUT, @msg OUTPUT
  exec bgp_write_to_log 'data_monitor','Complete prmaudit_cleanup','ELAPSED TIME',@ret,@msg,@cd 

  set @cd=getDate()
  exec bgp_write_to_log 'data_monitor','Begin cleanup_usessaud' 
  exec cleanup_usessaud @ret OUTPUT, @msg OUTPUT
  exec bgp_write_to_log 'data_monitor','Complete cleanup_usessaud','ELAPSED TIME',@ret,@msg,@cd 


  set @cd=getDate()
  exec bgp_write_to_log 'data_monitor','Begin user_defined_cleanup' 
  exec user_defined_background
  exec bgp_write_to_log 'data_monitor','Complete user_defined_cleanup','ELAPSED TIME',NULL,NULL,@cd 

  set @cd=getDate()
  exec bgp_write_to_log 'data_monitor','Begin cleanup_old_data' 
  exec cleanup_old_data
  exec bgp_write_to_log 'data_monitor','Complete cleanup_old_data','ELAPSED TIME',NULL,NULL,@cd 
  
  exec bgp_write_to_log 'data_monitor','Complete' ,'ELAPSED TIME',@ret,@msg,@dmonstart

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'CHECK_BACKGROUND_JOBS' and type='P')
  DROP PROCEDURE CHECK_BACKGROUND_JOBS

CHECK_BACKGROUND_JOBS
CREATE PROCEDURE check_background_jobs(@pret_val integer OUTPUT, @pret_msg varchar(1000) OUTPUT )
AS
     set nocount on
     declare @vsmonset   varchar(20),@vsmondate  datetime,@diff decimal(20,6), @vsmon_time datetime,  @curr_time   datetime,@vsmonfactor integer
     exec settings_read_date @vsmondate OUTPUT,'database.background.Symon','HeartBeatTime'
     exec settings_read_string @vsmonset OUTPUT,'database.background.Symon','Interval'
     exec settings_read_number @vsmonfactor OUTPUT,'database.background.Symon','IntervalFactor',2
     set @curr_time = getDate()
     exec get_interval_difference @vsmonset, @diff OUTPUT
     set @vsmon_time=@curr_time- (@diff*@vsmonfactor)
     set @pret_val=0
     if (@vsmondate >=@vsmon_time) 
       begin
         set @pret_val=0 
         set @pret_msg='System Monitor Running Successfully'	
       end
      else
        begin
         set @pret_val=-1
         set @pret_msg='Last System Monitor Job Run:' + convert(VARCHAR,@vsmondate,113)
      end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'TA_GATHER_TIMESHEETS' and type='P')
  DROP PROCEDURE TA_GATHER_TIMESHEETS

TA_GATHER_TIMESHEETS
CREATE PROCEDURE ta_gather_timesheets
(@psession_id int, @papproval_type varchar(2),  @papproval_user_id int, @pts_id int
, @pret_val int OUTPUT, @pret_msg varchar(4000) OUTPUT, @pdelegate_user_id int=null)
as
begin 
  set nocount on
  declare @context_id int, @context_id2 int, @effective_user_id int, @cnt int
  set @context_id = 11697
  set @context_id2 = 11698
  set @pret_val = @context_id  

  if upper(@papproval_type) != 'PM' and upper(@papproval_type) != 'RM' 
  begin
    set @pret_val = -100
    set @pret_msg = 'Valid approval type must be PM or RM'
    return
  end

  set @effective_user_id=@papproval_user_id

  delete from upklist 
  where session_id = @psession_id and context_id in (@context_id,@context_id2)

  select @cnt=count(*) 
  from users
  where user_id = @papproval_user_id
  and prof_id = 12;
  if @cnt = 1 --Handle Super User
  begin
    insert into upklist (session_id,context_id,pk_id,pk2_id)
    select @psession_id, @context_id,rsrc_id,ts_id
    from timesht
    where ts_id=@pts_id;

    insert into upklist (session_id,context_id,pk_id,pk2_id)
    select distinct @psession_id, @context_id,rsrc_id,ts_id
    from rsrchour
    where status_code in ('TS_ReSubmit','TS_ReSubmitRM')
    and ts_id != @pts_id;

    return
  end

  if upper(@papproval_type) = 'PM'
  begin

    create table #proj_list (proj_id integer)

    if @pdelegate_user_id is null 

      insert into upklist (session_id,context_id,pk_id,pk2_id)
      select @psession_id, @context_id2, proj_id
        , case(case WHEN pp.prof_id=23 THEN 'Y' else pp.allow_flag end) WHEN 'Y' THEN 1 ELSE 0 end
      from obsproj u, userobs uo, profpriv pp
      where u.obs_id = uo.obs_id and uo.user_id = @effective_user_id
      and uo.prof_id = pp.prof_id and pp.priv_num=16 
      and uo.delete_session_id is null and pp.delete_session_id is null;

    else
      insert into upklist (session_id,context_id,pk_id,pk2_id)
      select @psession_id, @context_id2, proj_id,1
      from tsdelegate
      where ts_delegate_user_id = @pdelegate_user_id
      and active_flag = 'Y'
      and user_id =@papproval_user_id
      and proj_id is not null;

    insert into upklist (session_id,context_id,pk_id,pk2_id)
    select distinct @psession_id, @context_id, rsrc_id, @pts_id
    from rsrchour r, upklist u
    where ts_id = @pts_id 
    and u.pk_id = r.proj_id 
    and u.session_id=@psession_id and u.context_id=@context_id2 and pk2_id=1
    and task_ts_flag = 'N'
    and r.delete_session_id is null;

    --Find Resubmitted timesheets
    insert into upklist (session_id,context_id,pk_id,pk2_id)
    select distinct @psession_id, @context_id,rsrc_id, r.ts_id
    from rsrchour r, upklist u
    where status_code = 'TS_ReSubmit'
    and r.ts_id != @pts_id
    and u.pk_id = r.proj_id 
    and u.session_id=@psession_id and u.context_id=@context_id2 and pk2_id=1
    and r.delete_session_id is null;

  end
  else
  begin

    if @pdelegate_user_id is not null 
    begin
      select @cnt=count(*) 
      from tsdelegate
      where ts_delegate_user_id = @pdelegate_user_id
      and active_flag = 'Y'
      and user_id =@papproval_user_id
      and proj_id is null;
      if @cnt = 0 
      begin
        set @pret_msg='Time approval for user ' + ltrim(str(@papproval_user_id))
                     + ' not delegated to user ' + ltrim(str(@pdelegate_user_id))
        set @pret_val = -200
        return
      end
    end

    insert into upklist (session_id,context_id,pk_id,pk2_id)
    select @psession_id, @context_id, r.rsrc_id, @pts_id 
    from timesht ts, rsrc r
    where ts_approve_user_id = @effective_user_id
    and r.rsrc_id = ts.rsrc_id
    and ts.ts_id = @pts_id
    and ts.delete_session_id is null and r.delete_session_id is null;

    --Find Resubmitted timesheets
    insert into upklist (session_id,context_id,pk_id,pk2_id)
    select distinct @psession_id, @context_id, r.rsrc_id, rh.ts_id
    from rsrchour rh, rsrc r
    where ts_approve_user_id = @effective_user_id
    and r.rsrc_id = rh.rsrc_id
    and rh.status_code in ('TS_ReSubmit','TS_ReSubmitRM')
    and rh.ts_id != @pts_id
    and rh.delete_session_id is null and r.delete_session_id is null;
  end


end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'TS_AUDIT' and type='P')
  DROP PROCEDURE TS_AUDIT

TS_AUDIT
CREATE PROCEDURE ts_audit
(@prsrc_id int, @pts_id int, @ptype varchar(30), @effective_user_id int, @psession_id int=null)
as
begin 
  set nocount on
  declare @key int, @context_id2 int,  @proj_id int, @status_code varchar(20)
  declare @reg_hrs numeric(17,6), @oh_hrs numeric(17,6), @reg_ot_hrs numeric(17,6)
  declare @pend_reg_hrs numeric(17,6), @pend_reg_ot_hrs numeric(17,6)
  declare @oh_ot_hrs numeric(17,6), @pend_oh_hrs numeric(17,6), @pend_oh_ot_hrs numeric(17,6)
  declare @user_name varchar(32), @prof_id int
  set @context_id2 = 11698
  if @ptype = 'ApproveAsPM' or @ptype ='ApproveAsPMDelegate'  
  begin
    select @user_name=user_name, @prof_id=prof_id from users where user_id = @effective_user_id

    create table #projs (proj_id int, status_code varchar(20))
    if @prof_id!=12 
      insert into #projs
      select distinct proj_id , status_code
      from rsrchour rh, upklist u
      where rh.ts_id = @pts_id and rh.rsrc_id = @prsrc_id
      and rh.proj_id = u.pk_id  
      and u.session_id=@psession_id and u.context_id=@context_id2 and pk2_id=1
      and task_ts_flag = 'N' and rh.update_user=@user_name
    else
      insert into #projs
      select distinct proj_id , status_code
      from rsrchour rh
      where rh.ts_id = @pts_id and rh.rsrc_id = @prsrc_id
      and task_ts_flag = 'N' 
      --and rh.update_user=@user_name

    select top 1 @proj_id=proj_id, @status_code=status_code from #projs
    while (select count(*) from #projs)>0
    begin
      print @proj_id
      exec getnextkeys 'tsaudit_ts_audit_id',1,@key output
      print @key

      select @reg_hrs=isnull(sum(hr_cnt),0), @reg_ot_hrs=isnull(sum(ot_hr_cnt),0)
          , @pend_reg_hrs=isnull(sum(pend_hr_cnt),0)
          , @pend_reg_ot_hrs=isnull(sum(pend_ot_hr_cnt),0)
      from rsrchour
      where ts_id = @pts_id and rsrc_id = @prsrc_id
      and nonwork_type_id is null
      and proj_id=@proj_id

      select @oh_hrs=isnull(sum(hr_cnt),0), @oh_ot_hrs=isnull(sum(ot_hr_cnt),0)
          , @pend_oh_hrs=isnull(sum(pend_hr_cnt),0)
          , @pend_oh_ot_hrs=isnull(sum(pend_ot_hr_cnt),0)
      from rsrchour
      where ts_id = @pts_id and rsrc_id = @prsrc_id
      and nonwork_type_id is not null
      and proj_id=@proj_id

      insert into tsaudit (ts_audit_id, audit_date,rsrc_id, rsrc_short_name, rsrc_name
					, reg_hrs, oh_hrs, ts_id, ts_start_date, ts_end_date, proj_id
					, proj_short_name, user_id, user_name, ts_status_code 
					, reg_ot_hrs, pend_reg_hrs, pend_reg_ot_hrs, oh_ot_hrs
					, pend_oh_hrs, pend_oh_ot_hrs, ts_task_status, approving_as)
      select @key, getDate(), @prsrc_id, r.rsrc_short_name, r.rsrc_name
	  , @reg_hrs, @oh_hrs, @pts_id, ts.start_date, ts.end_date, @proj_id
	  , p.proj_short_name, @effective_user_id, u.user_name, t.status_code
	  , @reg_ot_hrs, @pend_reg_hrs, @pend_reg_ot_hrs, @oh_ot_hrs
	  , @pend_oh_hrs, @pend_oh_ot_hrs, @status_code, @ptype
      from rsrc r, tsdates ts, users u, timesht t, project p
      where r.rsrc_id = @prsrc_id and ts.ts_id = @pts_id
      and u.user_id = @effective_user_id
      and t.ts_id = @pts_id and t.rsrc_id = @prsrc_id
      and p.proj_id = @proj_id

      delete from #projs where proj_id = @proj_id
      select top 1 @proj_id=proj_id, @status_code=status_code from #projs
    end
  end
  else
  if @ptype = 'ApproveAsRM' or @ptype ='ApproveAsRMDelegate' or @ptype = 'Submitted'
  begin
    exec getnextkeys 'tsaudit_ts_audit_id',1,@key output
    print @key

    select @reg_hrs=isnull(sum(hr_cnt),0), @reg_ot_hrs=isnull(sum(ot_hr_cnt),0)
          , @pend_reg_hrs=isnull(sum(pend_hr_cnt),0)
          , @pend_reg_ot_hrs=isnull(sum(pend_ot_hr_cnt),0)
    from rsrchour
    where ts_id = @pts_id and rsrc_id = @prsrc_id
    and nonwork_type_id is null

    select @oh_hrs=isnull(sum(hr_cnt),0), @oh_ot_hrs=isnull(sum(ot_hr_cnt),0)
          , @pend_oh_hrs=isnull(sum(pend_hr_cnt),0)
          , @pend_oh_ot_hrs=isnull(sum(pend_ot_hr_cnt),0)
    from rsrchour
    where ts_id = @pts_id and rsrc_id = @prsrc_id
    and nonwork_type_id is not null

    insert into tsaudit (ts_audit_id, audit_date,rsrc_id, rsrc_short_name, rsrc_name
                        , reg_hrs, oh_hrs, ts_id, ts_start_date, ts_end_date, proj_id
                        , proj_short_name, user_id, user_name, ts_status_code 
                        , reg_ot_hrs, pend_reg_hrs, pend_reg_ot_hrs, oh_ot_hrs
                        , pend_oh_hrs, pend_oh_ot_hrs, ts_task_status, approving_as)
    select @key, getDate(), @prsrc_id, r.rsrc_short_name, r.rsrc_name
          , @reg_hrs, @oh_hrs, @pts_id, ts.start_date, ts.end_date, null
          , null, @effective_user_id, u.user_name, t.status_code
          , @reg_ot_hrs, @pend_reg_hrs, @pend_reg_ot_hrs, @oh_ot_hrs
          , @pend_oh_hrs, @pend_oh_ot_hrs, null, @ptype
    from rsrc r, tsdates ts, users u, timesht t
    where r.rsrc_id = @prsrc_id and ts.ts_id = @pts_id
    and u.user_id = @effective_user_id
    and t.ts_id = @pts_id and t.rsrc_id = @prsrc_id

  end
end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PV_OPEN_PROJECT' and type='P')
  DROP PROCEDURE PV_OPEN_PROJECT

PV_OPEN_PROJECT
CREATE PROCEDURE PV_OPEN_PROJECT @puser_open_id INTEGER,@psession_id INTEGER,@pret_val INTEGER OUTPUT,@pret_msg VARCHAR OUTPUT
AS
  SET NOCOUNT ON
  
BEGIN
    DECLARE  @proj_id INT,@vuser_open_id INT,@vuser_open_name VARCHAR(255),@vuser_id INT
    DECLARE  @vcontext_id INT,@vpk_id INT,@vusropn_type VARCHAR(20),@cnt INT,@vprof_id INT,@vrsrc_id INT
    DECLARE  @ErrMsg NVARCHAR(4000),@ErrSeverity INT
    CREATE TABLE #USROPN (USR_OPEN_ID INT,PK_ID INT,USROPN_TYPE VARCHAR(20))
    CREATE TABLE #PVPROJID (PROJ_ID INT)
    CREATE TABLE #PROJID (PROJ_ID INT)
    
    BEGIN TRY
      SET @vcontext_id = 21536
      DELETE FROM PROJSHAR WHERE SESSION_ID = @psession_id;
      DELETE FROM UPKLIST  WHERE SESSION_ID = @psession_id AND CONTEXT_ID = @vcontext_id;
      
      SELECT @vuser_open_id = USER_OPEN_ID,@vuser_open_name = USER_OPEN_NAME,@vuser_id =USER_ID
      FROM   USEROPEN
      WHERE  USER_OPEN_ID = @puser_open_id
             AND DELETE_SESSION_ID IS NULL;
      
      INSERT INTO #USROPN
      SELECT USER_OPEN_ID,PK_ID,USROPN_TYPE
      FROM   USROPNVAL
      WHERE  USER_OPEN_ID = @puser_open_id
             AND DELETE_SESSION_ID IS NULL;
      
      DECLARE UOPEN CURSOR  FOR
      SELECT PK_ID,USROPN_TYPE
      FROM   #USROPN
      
      OPEN UOPEN
      
      FETCH  UOPEN
      INTO @vpk_id,
           @vusropn_type
      
      WHILE (@@FETCH_STATUS = 0)
        BEGIN
          IF @vusropn_type = 'PS_Project'
            BEGIN
	      select @proj_id=p.proj_id from project p, projwbs pw where p.project_flag = 'Y' and pw.wbs_id = @vpk_id
            and p.proj_id = pw.proj_id and p.delete_session_id is null
             if @proj_id is not null	
              INSERT INTO #PVPROJID
              VALUES(@proj_id)
            END
          ELSE
            IF @vusropn_type = 'PS_EPS'
              BEGIN
                WITH PROJLIST(PROJ_ID,WBS_ID,PARENT_WBS_ID)
                     AS (SELECT PROJ_ID,WBS_ID,PARENT_WBS_ID
                         FROM   PROJWBS
                         WHERE  PARENT_WBS_ID = @vpk_id
                         UNION ALL
                         SELECT PW.PROJ_ID,PW.WBS_ID,PW.PARENT_WBS_ID
                         FROM   PROJWBS PW
                                JOIN PROJLIST PL
                                  ON PL.WBS_ID = PW.PARENT_WBS_ID)
                INSERT INTO #PVPROJID
                SELECT DISTINCT PL.PROJ_ID
                FROM   PROJLIST PL
                       JOIN PROJECT P
                         ON PL.PROJ_ID = P.PROJ_ID
                            AND P.PROJECT_FLAG = 'Y'
                            AND P.DELETE_SESSION_ID IS NULL
                            AND P.ORIG_PROJ_ID IS NULL
              END
            ELSE
              IF @vusropn_type = 'PS_Portfolio'
                BEGIN
                  INSERT INTO #PVPROJID
                  SELECT PROJ_ID
                  FROM   PROJECT
                  WHERE  PROJ_ID IN (SELECT PROJ_ID
                                     FROM   PROJWBS
                                     WHERE  WBS_ID IN (SELECT WBS_ID
                                                       FROM   PRPFOLIO
                                                       WHERE  PFOLIO_ID = @vpk_id))
                         AND DELETE_SESSION_ID IS NULL;
                END
              ELSE
                IF @vusropn_type = 'PS_ProjectCode'
                  BEGIN
                    INSERT INTO #PVPROJID
                    SELECT PC.PROJ_ID
                    FROM   PROJPCAT PC,PROJECT P 
                    WHERE  PROJ_CATG_ID = @vpk_id and PC.PROJ_ID=P.PROJ_ID and P.ORIG_PROJ_ID is null
                           AND PC.DELETE_SESSION_ID IS NULL;
                  END
          
          FETCH  UOPEN
          INTO @vpk_id,
               @vusropn_type
        END
      
      INSERT INTO #PROJID
      SELECT DISTINCT (PROJ_ID)
      FROM   #PVPROJID 
      
      INSERT INTO UPKLIST
                 (PK_ID,SESSION_ID,CONTEXT_ID)
      SELECT PROJ_ID,@psession_id,@vcontext_id
      FROM   #PROJID
      
      SELECT @vprof_id = PROF_ID
      FROM   USERS
      WHERE  USER_ID = @vuser_id
      
      IF @vprof_id <> 12
        BEGIN
		if exists (select rsrc_id from rsrc where user_id=@vuser_id)
		begin
		select @vrsrc_id=rsrc_id from rsrc where user_id=@vuser_id
		end	
	       WITH projtemp (proj_id)
		AS
		    (SELECT PROJ_ID
        	    FROM   OBSPROJ U,USEROBS UO,UPKLIST
	            WHERE  U.OBS_ID = UO.OBS_ID
          	    AND U.PROJ_ID = UPKLIST.PK_ID
                    AND UPKLIST.SESSION_ID = @psession_id
                    AND UO.USER_ID = @vuser_id
                    AND CONTEXT_ID = @vcontext_id
	        union select pk_id proj_id from upklist upk,project p,taskrsrc tr,usereng u where tr.proj_id=upk.pk_id and upk.pk_id=p.proj_id and p.orig_proj_id is null and p.delete_session_id is null and tr.rsrc_id=@vrsrc_id and session_id=@psession_id and context_id=@vcontext_id and u.user_id=@vuser_id and u.db_engine_type in ('WEB_RM','TS')
		union select pk_id proj_id from upklist upk, project p where p.proj_id = upk.pk_id and p.rsrc_id = @vrsrc_id and session_id = @psession_id and context_id = @vcontext_id and orig_proj_id is null and delete_session_id is null
		union select pk_id proj_id  from upklist upk,project p, taskuser tu  where upk.pk_id=p.proj_id and p.orig_proj_id is null and tu.user_id=@vuser_id and tu.proj_id=upk.pk_id and session_id=@psession_id and context_id=@vcontext_id and p.delete_session_id is null
		union select proj_id from upklist upk,userwksp uw where uw.user_id=@vuser_id and uw.proj_id = upk.pk_id and upk.session_id=@psession_id and context_id=@vcontext_id and delete_session_id is null) 
               INSERT INTO PROJSHAR
                      (PROJ_ID,SESSION_ID,ACCESS_LEVEL,LOAD_STATUS)
               SELECT distinct(PROJ_ID),@psession_id,0,'O' from projtemp 
	  END
      ELSE
        BEGIN
          INSERT INTO PROJSHAR
                     (PROJ_ID,SESSION_ID,ACCESS_LEVEL,LOAD_STATUS)
          SELECT PROJ_ID,@psession_id,0,'O'
          FROM   #PROJID
        END
    set @pret_val=0	
    set @pret_msg='Success'
    END TRY
    
    BEGIN CATCH
      SELECT @ErrMsg = ERROR_MESSAGE(),@ErrSeverity = ERROR_SEVERITY()
      RAISERROR (@ErrMsg,@ErrSeverity,1)
    END CATCH
  END

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SOURCE_VERSION' and type='P')
  DROP PROCEDURE SOURCE_VERSION

SOURCE_VERSION
create procedure source_version
        @version varchar(30) OUTPUT
AS
  set @version='24-July-2009 07:18 AM'

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'GET_UNIQUE_TASK_CODE' and type='FN')
  DROP FUNCTION GET_UNIQUE_TASK_CODE

GET_UNIQUE_TASK_CODE
create function get_unique_task_code (@ptask_code varchar(20), @pproj_id integer) 
returns varchar(40)
as
begin 
declare 
@i int,
@vtask_code varchar(40),
@vtmp varchar(4),
@vtmp2 varchar(4),
@vtmpnum int,
@j int
set @vtask_code = rtrim(@ptask_code)
if len(@vtask_code) < 4
	set @vtask_code = @vtask_code + '1000'
set @vtmp = substring(@vtask_code, len(@vtask_code) - 3, 4)
set @vtmp2 = ''
set @i = 1
while @i <= 4
begin
if substring(@vtmp, @i, 1) >= '0' and substring(@vtmp, @i, 1) <= '9'
	set @vtmp2 = @vtmp2 + substring(@vtmp, @i, 1)
set @i = @i + 1
end 
if @vtmp2 = ''
 set @vtmpnum = 1000
else
 set @vtmpnum = @vtmp2

set @i = 1
while @i <= 1000
begin
 set @vtmpnum = @vtmpnum + 10
if (select count(1) from task where proj_id = @pproj_id and delete_session_id is null and task_code = substring(@vtask_code, 1, len(@vtask_code) - 4) + cast(@vtmpnum as varchar)) = 0
break
set @i = @i + 1
end 

if @i = 1000 
select @vtmpnum = datediff(ss, cast(month(getdate()) as varchar) + '/' + cast(day(getdate()) as varchar) + '/' + cast(year(getdate()) as varchar), getdate()) 
set @vtask_code = substring(@vtask_code, 1, len(@vtask_code) - 4) + cast(@vtmpnum as varchar)
return @vtask_code
end


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'ACTIVITY_COPY_API' and type='P')
  DROP PROCEDURE ACTIVITY_COPY_API

ACTIVITY_COPY_API
create procedure activity_copy_api
	@ptask_id		integer,
	@pwbs_id		integer,
	@ptask_code		varchar(20),
	@copy_bit		varchar(30),
	@pret_val		integer OUTPUT,
	@pret_msg		varchar(4000) OUTPUT
as
  DECLARE @vproj_id_from integer, @vproj_id_to integer, @vtask_code	varchar(40), @vclndr_id_default integer
  DECLARE @v_new_task_id integer, @vcnt integer, @vid integer, @vOldId integer, @vOldDocId integer
  DECLARE @vguid varchar(22), @new_doc_id integer,@vclndr_id integer,@vclndr_type varchar(16)

      select @vproj_id_from = proj_id, @vtask_code = task_code ,@vclndr_id=clndr_id
        from task
       where task_id = @ptask_id
         and delete_session_id is null

      select @vproj_id_to = proj_id 
        from projwbs   
       where wbs_id = @pwbs_id
         and delete_session_id is null


      if @ptask_code is not null 
        set @vtask_code = @ptask_code
      else
        set @vtask_code = dbo.get_unique_task_code (@vtask_code, @vproj_id_to)

    exec  get_guid @vguid OUTPUT
    exec pc_get_next_key 'task_task_id', @v_new_task_id OUTPUT

      if @vproj_id_to <> @vproj_id_from
	select @vclndr_type=clndr_type from calendar where clndr_id=@vclndr_id 
         if @vclndr_type='CA_Base'
              set @vclndr_id_default= @vclndr_id
        else 
          select @vclndr_id_default = clndr_id 
          from calendar 
          where default_flag = 'Y';

    insert into task 
	(TASK_ID,PROJ_ID,WBS_ID,CLNDR_ID,EST_WT,PHYS_COMPLETE_PCT,REV_FDBK_FLAG         
	,LOCK_PLAN_FLAG,AUTO_COMPUTE_ACT_FLAG,COMPLETE_PCT_TYPE,TASK_TYPE              
	,DURATION_TYPE,REVIEW_TYPE,STATUS_CODE,TASK_CODE,TASK_NAME,RSRC_ID             
	,TOTAL_FLOAT_HR_CNT,FREE_FLOAT_HR_CNT,REMAIN_DRTN_HR_CNT,ACT_WORK_QTY          
	,REMAIN_WORK_QTY,TARGET_WORK_QTY,TARGET_DRTN_HR_CNT,TARGET_EQUIP_QTY           
	,ACT_EQUIP_QTY,REMAIN_EQUIP_QTY,CSTR_DATE,ACT_START_DATE,ACT_END_DATE          
	,LATE_START_DATE,LATE_END_DATE,EXPECT_END_DATE,EARLY_START_DATE                
	,EARLY_END_DATE,RESTART_DATE,REEND_DATE,TARGET_START_DATE,TARGET_END_DATE      
	,REVIEW_END_DATE,REM_LATE_START_DATE,REM_LATE_END_DATE,CSTR_TYPE               
	,PRIORITY_TYPE,GUID,TMPL_GUID,CSTR_DATE2,CSTR_TYPE2,FLOAT_PATH                 
	,FLOAT_PATH_ORDER,ACT_THIS_PER_WORK_QTY,ACT_THIS_PER_EQUIP_QTY                 
	,DRIVING_PATH_FLAG,SUSPEND_DATE,RESUME_DATE)
      select @v_new_task_id, 
		@vproj_id_to, 
		@pwbs_id, 
		CASE WHEN @vproj_id_to = @vproj_id_from THEN CLNDR_ID ELSE @vclndr_id_default END,	
		EST_WT,PHYS_COMPLETE_PCT,REV_FDBK_FLAG         
	,LOCK_PLAN_FLAG,AUTO_COMPUTE_ACT_FLAG,COMPLETE_PCT_TYPE,TASK_TYPE              
	,DURATION_TYPE,REVIEW_TYPE,STATUS_CODE
    ,@vtask_code
    ,TASK_NAME,RSRC_ID             
	,TOTAL_FLOAT_HR_CNT,FREE_FLOAT_HR_CNT,REMAIN_DRTN_HR_CNT,ACT_WORK_QTY          
	,REMAIN_WORK_QTY,TARGET_WORK_QTY,TARGET_DRTN_HR_CNT,TARGET_EQUIP_QTY           
	,ACT_EQUIP_QTY,REMAIN_EQUIP_QTY,CSTR_DATE,ACT_START_DATE,ACT_END_DATE          
	,LATE_START_DATE,LATE_END_DATE,EXPECT_END_DATE,EARLY_START_DATE                
	,EARLY_END_DATE,RESTART_DATE,REEND_DATE,TARGET_START_DATE,TARGET_END_DATE      
	,REVIEW_END_DATE,REM_LATE_START_DATE,REM_LATE_END_DATE,CSTR_TYPE               
	,PRIORITY_TYPE
	,@vguid	
	,TMPL_GUID,CSTR_DATE2,CSTR_TYPE2,FLOAT_PATH                 
	,FLOAT_PATH_ORDER,ACT_THIS_PER_WORK_QTY,ACT_THIS_PER_EQUIP_QTY                 
	,DRIVING_PATH_FLAG,SUSPEND_DATE,RESUME_DATE                                                       
   from task
   where task_id = @ptask_id;

   --bug fix 6919
	if @vproj_id_to = @vproj_id_from  -- within same project only
	 insert into taskuser
        (TASK_ID, USER_ID,PROJ_ID)
        select @v_new_task_id, user_id,@vproj_id_to
          from taskuser
         where task_id = @ptask_id;

      if substring(@copy_bit,11,1)='0'
         update task 
         set rsrc_id = null
         where task_id = @v_new_task_id
         and rsrc_id is not null;

    -- TASKPRED
--    if substring(@copy_bit,2,1)='1'
--    BEGIN
--      insert into pkxref (system_id, context_name, pk1,pk2,old_pk1,old_pk2 ,add_date)
--      select @pwork_id, 'T', @pproj_id, @v_new_task_id, t.proj_id,t.task_id , getDate()
--      from task t
--      where task_id = @ptask_id
--      and delete_session_id is null ;
--    END

    -- TASKACTV
    if substring(@copy_bit,3,1)='1' and @vproj_id_to = @vproj_id_from
    BEGIN
      insert into taskactv
       (TASK_ID,ACTV_CODE_TYPE_ID,ACTV_CODE_ID,PROJ_ID)
       select @v_new_task_id , t.ACTV_CODE_TYPE_ID, t.ACTV_CODE_ID,
	        @vproj_id_to 
      from actvtype a, taskactv t
      where t.task_id = @ptask_id
      and a.actv_code_type_id = t.actv_code_type_id
      and super_flag = 'N'
      and t.delete_session_id is null ;
    END	
     else if substring(@copy_bit,3,1)='1'
    BEGIN
      insert into taskactv
       (TASK_ID,ACTV_CODE_TYPE_ID,ACTV_CODE_ID,PROJ_ID)
       select @v_new_task_id , t.ACTV_CODE_TYPE_ID, t.ACTV_CODE_ID,
         @vproj_id_to
      from actvtype a, taskactv t
      where t.task_id = @ptask_id
      and a.actv_code_type_id = t.actv_code_type_id
      and super_flag = 'N'
      and a.Actv_code_type_scope = 'AS_Global'
      and t.delete_session_id is null ;
    END

    -- TASKFIN (PPA)
    if substring(@copy_bit,11,1)='1'
    BEGIN
      insert into taskfin
      (FIN_DATES_ID,TASK_ID,PROJ_ID,ACT_WORK_QTY,ACT_WORK_COST,ACT_EQUIP_QTY
          ,ACT_EQUIP_COST,ACT_MAT_COST,ACT_EXPENSE_COST,BCWP,SCHED_WORK_QTY,BCWS,PERFM_WORK_QTY)
      select FIN_DATES_ID,@v_new_task_id,@vproj_id_to,ACT_WORK_QTY,ACT_WORK_COST,ACT_EQUIP_QTY
          ,ACT_EQUIP_COST,ACT_MAT_COST,ACT_EXPENSE_COST,BCWP,SCHED_WORK_QTY,BCWS,PERFM_WORK_QTY
      from taskfin
      where task_id = @ptask_id;
    END

    -- TASKRSRC
    if substring(@copy_bit,1,1)='1'
    BEGIN
     DECLARE tr CURSOR FOR select taskrsrc_id from taskrsrc where task_id = @ptask_id and delete_session_id is null order by taskrsrc_id
     OPEN tr
     FETCH NEXT FROM tr INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec  get_guid @vguid OUTPUT
       exec pc_get_next_key 'taskrsrc_taskrsrc_id', @vid OUTPUT
       insert into taskrsrc 
	(TASKRSRC_ID,TASK_ID,PROJ_ID,RSRC_TYPE,COST_QTY_LINK_FLAG,ROLE_ID               
	,ACCT_ID,RSRC_ID,SKILL_LEVEL,PEND_COMPLETE_PCT,REMAIN_QTY,PEND_REMAIN_QTY      
	,TARGET_QTY,REMAIN_QTY_PER_HR,PEND_ACT_REG_QTY,TARGET_LAG_DRTN_HR_CNT          
	,TARGET_QTY_PER_HR,ACT_OT_QTY,PEND_ACT_OT_QTY,ACT_REG_QTY,RELAG_DRTN_HR_CNT    
	,OT_FACTOR,COST_PER_QTY,TARGET_COST,ACT_REG_COST,ACT_OT_COST,REMAIN_COST       
	,ACT_START_DATE,ACT_END_DATE,RESTART_DATE,REEND_DATE,TARGET_START_DATE         
	,TARGET_END_DATE,REM_LATE_START_DATE,REM_LATE_END_DATE,GUID,RATE_TYPE          
	,ACT_THIS_PER_COST,ACT_THIS_PER_QTY,CURV_ID,ROLLUP_DATES_FLAG                  
	,COST_PER_QTY_SOURCE_TYPE,RSRC_REQUEST_DATA,TARGET_CRV,REMAIN_CRV,ACTUAL_CRV)
       select @vid, @v_new_task_id, @vproj_id_to
	,RSRC_TYPE,COST_QTY_LINK_FLAG,ROLE_ID               
	,ACCT_ID,RSRC_ID,SKILL_LEVEL,PEND_COMPLETE_PCT,REMAIN_QTY,PEND_REMAIN_QTY      
	,TARGET_QTY,REMAIN_QTY_PER_HR,PEND_ACT_REG_QTY,TARGET_LAG_DRTN_HR_CNT          
	,TARGET_QTY_PER_HR,ACT_OT_QTY,PEND_ACT_OT_QTY,ACT_REG_QTY,RELAG_DRTN_HR_CNT    
	,OT_FACTOR,COST_PER_QTY,TARGET_COST,ACT_REG_COST,ACT_OT_COST,REMAIN_COST       
	,ACT_START_DATE,ACT_END_DATE,RESTART_DATE,REEND_DATE,TARGET_START_DATE         
	,TARGET_END_DATE,REM_LATE_START_DATE,REM_LATE_END_DATE
	,@vguid
	,RATE_TYPE          
	,ACT_THIS_PER_COST,ACT_THIS_PER_QTY,CURV_ID,ROLLUP_DATES_FLAG                  
	,COST_PER_QTY_SOURCE_TYPE,RSRC_REQUEST_DATA,TARGET_CRV,REMAIN_CRV,ACTUAL_CRV
            from taskrsrc
            where taskrsrc_id = @vOldId;

       exec pc_insert_udf 'taskrsrc', @vOldId,  @vid, @vproj_id_to

       -- todo: taskfin 
       if substring(@copy_bit,11,1)='1'
       begin
         insert into trsrcfin
         (fin_dates_id,taskrsrc_id,task_id,proj_id,act_qty,act_cost)
         select fin_dates_id,@vid,@v_new_task_id,@vproj_id_to,act_qty,act_cost
         from trsrcfin
         where taskrsrc_id = @vOldId;
       end
	
       FETCH NEXT FROM tr INTO @vOldId
     END 
     CLOSE tr
     DEALLOCATE tr
    END

    -- TASKMEMO
    if substring(@copy_bit,4,1)='1'
    BEGIN
     DECLARE tm CURSOR FOR select memo_id from taskmemo where task_id = @ptask_id and delete_session_id is null order by memo_id
     OPEN tm
     FETCH NEXT FROM tm INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'taskmemo_memo_id', @vid OUTPUT
       insert into taskmemo 
	(memo_id, task_id, memo_type_id, proj_id, task_memo )
       select @vid , @v_new_task_id, memo_type_id, @vproj_id_to, task_memo
 	from taskmemo
	where memo_id = @vOldId

       FETCH NEXT FROM tm INTO @vOldId
     END 
     CLOSE tm
     DEALLOCATE tm
    END

    -- taskdoc
    if substring(@copy_bit,7,1)='1' and @vproj_id_to = @vproj_id_from 
    BEGIN
     DECLARE td CURSOR FOR select taskdoc_id,doc_id from taskdoc where task_id = @ptask_id and delete_session_id is null order by taskdoc_id
     OPEN td
     FETCH NEXT FROM td INTO @vOldId, @vOldDocId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
	   exec  get_guid @vguid OUTPUT
       exec pc_get_next_key 'taskdoc_taskdoc_id', @vid OUTPUT
	   exec pc_get_next_key 'document_doc_id', @new_doc_id OUTPUT

        insert into document
          (DOC_ID,
           DOC_SEQ_NUM,
           DELIV_FLAG,
           DOC_NAME,
           PARENT_DOC_ID,
           PROJ_ID,
           DOC_STATUS_ID,
           DOC_CATG_ID,
           DOC_DATE,
           VERSION_NAME,
           GUID,
           TMPL_GUID,
           DOC_SHORT_NAME,
           AUTHOR_NAME,
           PRIVATE_LOC,
           PUBLIC_LOC,
           DOC_CONTENT,
           RSRC_ID,
           DOC_MGMT_TYPE,
           EXTERNAL_DOC_KEY)
          select @new_doc_id,
                 DOC_SEQ_NUM,
                 DELIV_FLAG,
                 DOC_NAME,
                 PARENT_DOC_ID,
                 @vproj_id_to,
                 DOC_STATUS_ID,
                 DOC_CATG_ID,
                 DOC_DATE,
                 VERSION_NAME,
                 @vguid,
                 null,
                 DOC_SHORT_NAME,
                 AUTHOR_NAME,
                 PRIVATE_LOC,
                 PUBLIC_LOC,
                 DOC_CONTENT,
                 RSRC_ID,
                 DOC_MGMT_TYPE,
                 EXTERNAL_DOC_KEY
            from document
           where doc_id = @vOldDocId

           exec pc_insert_udf 'document', @vOldDocId,  @new_doc_id, @vproj_id_to

          insert into taskdoc 
		( TASKDOC_ID,DOC_ID,PROJ_ID,WBS_ID,WP_FLAG,TASK_ID )
          select @vid, @new_doc_id, @vproj_id_to, @pwbs_id, 		
		wp_flag, @v_new_task_id
	  from taskdoc
	  where taskdoc_id = @vOldId

       FETCH NEXT FROM td INTO @vOldId, @vOldDocId
     END 
     DEALLOCATE td
   END

    -- TASKPROC
    if substring(@copy_bit,6,1)='1'
    BEGIN
     DECLARE tp CURSOR FOR select proc_id from taskproc where task_id = @ptask_id and delete_session_id is null order by proc_id
     OPEN tp
     FETCH NEXT FROM tp INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'taskproc_proc_id', @vid OUTPUT
       insert into taskproc 
		( proc_id, task_id, seq_num, proj_id, complete_flag
		,proc_name, proc_wt , proc_descr         
		,COMPLETE_PCT) 
       select   @vid, @v_new_task_id, seq_num, @vproj_id_to,
		complete_flag, proc_name, proc_wt, proc_descr
		,COMPLETE_PCT
	from taskproc
 	where proc_id = @vOldId

       exec pc_insert_udf 'taskproc', @vOldId,  @vid, @vproj_id_to

       FETCH NEXT FROM tp INTO @vOldId
     END 
     CLOSE tp
     DEALLOCATE tp
    END

    -- PROJCOST
    if substring(@copy_bit,5,1)='1'
    BEGIN
     DECLARE pc CURSOR FOR select cost_item_id from projcost where task_id = @ptask_id and delete_session_id is null order by cost_item_id
     OPEN pc
     FETCH NEXT FROM pc INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'projcost_cost_item_id', @vid OUTPUT
       insert into projcost
	( COST_ITEM_ID,PROJ_ID,TASK_ID,AUTO_COMPUTE_ACT_FLAG,COST_LOAD_TYPE              
	,ACCT_ID,COST_TYPE_ID,TARGET_COST,ACT_COST,REMAIN_COST,QTY_NAME                
	,TARGET_QTY,COST_PER_QTY,PO_NUMBER,VENDOR_NAME,COST_NAME,COST_DESCR) 
       select @vid, @vproj_id_to, @v_new_task_id
	,AUTO_COMPUTE_ACT_FLAG,COST_LOAD_TYPE              
	,ACCT_ID,COST_TYPE_ID,TARGET_COST,ACT_COST,REMAIN_COST,QTY_NAME                
	,TARGET_QTY,COST_PER_QTY,PO_NUMBER,VENDOR_NAME,COST_NAME,COST_DESCR
       from projcost
       where cost_item_id = @vOldId

       exec pc_insert_udf 'projcost', @vOldId,  @vid, @vproj_id_to

       FETCH NEXT FROM pc INTO @vOldId
     END 
     CLOSE pc
     DEALLOCATE pc
    END

  -- projISSU
  if substring(@copy_bit,9,1)='1'
  BEGIN
     DECLARE cpi CURSOR FOR select issue_id from projissu where task_id = @ptask_id and delete_session_id is null order by issue_id
     OPEN cpi
     FETCH NEXT FROM cpi INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'projissu_issue_id', @vid OUTPUT
        insert into projissu
		(ISSUE_ID,PROJ_ID,OBS_ID,PRIORITY_TYPE,STATUS_CODE,ISSUE_NAME,THRESH_ID         
		,TRACK_VIEW_ID,WBS_ID,TASK_ID,RSRC_ID,THRESH_PARM_ID,BASE_PROJ_ID              
		,WORKSPACE_ID,ISSUE_VALUE,LO_PARM_VALUE,HI_PARM_VALUE,ADD_BY_NAME              
		,RESOLV_DATE,ADD_DATE,ISSUE_NOTES) 
        select @vid, @vproj_id_to
		,OBS_ID,PRIORITY_TYPE,STATUS_CODE,ISSUE_NAME,THRESH_ID         
		,TRACK_VIEW_ID
		,@pwbs_id,@v_new_task_id
		,RSRC_ID
		,CASE WHEN @vproj_id_to = @vproj_id_from THEN THRESH_PARM_ID ELSE null END
		,CASE WHEN @vproj_id_to = @vproj_id_from THEN BASE_PROJ_ID ELSE null END
		,CASE WHEN @vproj_id_to = @vproj_id_from THEN WORKSPACE_ID ELSE null END
		,ISSUE_VALUE,LO_PARM_VALUE,HI_PARM_VALUE,ADD_BY_NAME              
		,RESOLV_DATE,ADD_DATE,ISSUE_NOTES
	from projissu
        where issue_id = @vOldId;

        insert into issuhist (issue_id,proj_id,issue_history)
        select @vid,@vproj_id_to, issue_history
        from issuhist
        where issue_id = @vOldId
        and delete_session_id is null ;

        exec pc_insert_udf 'projissu', @vOldId, @vid, @vproj_id_to 

       FETCH NEXT FROM cpi INTO @vOldId
     END 
     DEALLOCATE cpi
   END

-- taskpred copy
    if substring(@copy_bit,2,1)='1'
    BEGIN
     DECLARE tpred CURSOR FOR select task_pred_id from taskpred where task_id = @ptask_id and delete_session_id is null order by task_pred_id
     OPEN tpred
     FETCH NEXT FROM tpred INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'taskpred_task_pred_id', @vid OUTPUT

          insert into taskpred
            (task_pred_id,
             task_id,
             pred_task_id,
             proj_id,
             pred_proj_id,
             pred_type,
             lag_hr_cnt)
          select
             @vid,
             @v_new_task_id,
             pred_task_id,
             @vproj_id_to,
             pred_proj_id,
             pred_type,
             lag_hr_cnt
		  from taskpred
		  where task_pred_id = @vOldId

       FETCH NEXT FROM tpred INTO @vOldId
     END 
     CLOSE tpred
     DEALLOCATE tpred

     DECLARE tsucc CURSOR FOR select task_pred_id from taskpred where pred_task_id = @ptask_id and delete_session_id is null order by task_pred_id
     OPEN tsucc
     FETCH NEXT FROM tsucc INTO @vOldId
     WHILE (@@FETCH_STATUS = 0)
     BEGIN
       exec pc_get_next_key 'taskpred_task_pred_id', @vid OUTPUT

          insert into taskpred
            (task_pred_id,
             task_id,
             pred_task_id,
             proj_id,
             pred_proj_id,
             pred_type,
             lag_hr_cnt)
          select
             @vid,
             task_id,
             @v_new_task_id,
             proj_id,
             @vproj_id_to,
             pred_type,
             lag_hr_cnt
		  from taskpred
		  where task_pred_id = @vOldId

       FETCH NEXT FROM tsucc INTO @vOldId
     END 
     CLOSE tsucc
     DEALLOCATE tsucc
    END

-- Copy UDF
    exec pc_insert_udf 'task', @ptask_id,  @v_new_task_id, @vproj_id_to
       
    set @pret_val =  @v_new_task_id

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'SYNC_BASELINE_TASKS' and type='P')
  DROP PROCEDURE SYNC_BASELINE_TASKS

SYNC_BASELINE_TASKS
CREATE PROCEDURE sync_baseline_tasks
(@psession_id INTEGER,@pproj_id  INTEGER,@pret_val INTEGER  OUTPUT,@pret_msg  VARCHAR(4000)  OUTPUT)
AS
  DECLARE  @baseproj_id INT
  DECLARE  @old_str VARCHAR(40)
  DECLARE  @new_str VARCHAR(40)
  DECLARE  @rowcnt INT
  DECLARE basecur CURSOR  FOR
  SELECT proj_id
  FROM   project
  WHERE  orig_proj_id = @pproj_id;

  OPEN basecur
  FETCH  basecur
  INTO @baseproj_id
  WHILE (@@FETCH_STATUS = 0)
    BEGIN
      PRINT @baseproj_id
      SELECT @rowcnt = Count(* )
      FROM   pkxref
      WHERE  new_str IN (SELECT task_code
                         FROM   task
                         WHERE  proj_id = @baseproj_id
                         EXCEPT 
                         SELECT old_str
                         FROM   pkxref
                         WHERE  system_id = @psession_id
                                AND pk1 = @pproj_id
                                AND context_name = 'syncbaselines')
             AND system_id = @psession_id
             AND pk1 = @pproj_id;
 
     
      IF @rowcnt = 0
        BEGIN
          DECLARE taskcur CURSOR  FOR
          SELECT old_str,
                 new_str
          FROM   pkxref
          WHERE  pk1 = @pproj_id
                 AND system_id = @psession_id
                 AND context_name = 'syncbaselines' order by new_str desc;
          
          BEGIN TRANSACTION
          OPEN taskcur
          FETCH  taskcur
          INTO @old_str,
               @new_str
    
          WHILE (@@FETCH_STATUS = 0)
            BEGIN
              UPDATE task
              SET    task_code = @new_str
              WHERE  proj_id = @baseproj_id
                     AND task_code = @old_str
              FETCH  taskcur
              INTO @old_str,
                   @new_str
            END
           CLOSE taskcur
          DEALLOCATE taskcur
           COMMIT TRANSACTION
        END
      ELSE
        BEGIN
          IF @pret_msg IS NULL
            SET @pret_msg = Ltrim(Str(@baseproj_id))
          ELSE
            SET @pret_msg = @pret_msg + ',' + Ltrim(Str(@baseproj_id))
        END
      
      FETCH  basecur
      INTO @baseproj_id
    END
  
  CLOSE basecur
  DEALLOCATE basecur
  
  IF (Len(@pret_msg) > 0)
    BEGIN
      SET @pret_val = -1;
       RETURN;
    END
  
  SET @pret_val = 0
  SET @pret_msg = 'Task Codes updated successfully'

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'TR_NOTE_FK' and type='TR')
  DROP TRIGGER TR_NOTE_FK

TR_NOTE_FK
CREATE TRIGGER TR_NOTE_FK on note
FOR UPDATE, INSERT 
as
BEGIN
  declare @dist_cnt int, @parent_cnt int
  select @dist_cnt=count(distinct fk_id) from inserted where upper(table_name) = 'SCENARIO'
  select @parent_cnt=count(*) from scenario 
  where scenario_id in (select distinct fk_id from inserted where upper(table_name) = 'SCENARIO')
  if @dist_cnt<>@parent_cnt
  begin
    raiserror ('Integrity Error. FK_ID value does not exist in SCENARIO table',16,1)
    rollback transaction
  end
END

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'TR_PROJECT_OBSPROJ' and type='TR')
  DROP TRIGGER TR_PROJECT_OBSPROJ

TR_PROJECT_OBSPROJ
CREATE TRIGGER TR_PROJECT_OBSPROJ
ON project
FOR update
as
  set nocount on
  declare @vproj_id int, @vwbs_id int,@vobs_id int
  declare @old_orig_proj_id int ,@new_orig_proj_id int,@vparent_wbs_id int,@vproject_flag varchar(1)

  if update(orig_proj_id)
  begin
      select @old_orig_proj_id=orig_proj_id,@vproj_id=proj_id from deleted
      select @new_orig_proj_id=orig_proj_id from inserted
    if @old_orig_proj_id is not null and @new_orig_proj_id is null
    begin
        select @vwbs_id=wbs_id,@vobs_id=obs_id,@vproject_flag=proj_node_flag,@vparent_wbs_id=parent_wbs_id
        from projwbs
        where proj_id = @vproj_id
        and proj_node_flag = 'Y'
    if @vproject_flag = 'Y' and @vwbs_id is not null 
      begin
	     delete from obsproj
   	     where proj_id = @vproj_id
             insert into obsproj
              (obs_id, proj_id, wbs_id)
              select obs_id, @vproj_id, @vwbs_id
              from obsproj
              where wbs_id = @vparent_wbs_id
              union
              select obs_id, @vproj_id, @vwbs_id
              from projwbs
              where proj_id = @vproj_id
      end
   end
   else if @old_orig_proj_id is null and @new_orig_proj_id is not null
     begin
       delete from obsproj where proj_id = @vproj_id
     end
  end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'TR_PROJWBS_OBSPROJ' and type='TR')
  DROP TRIGGER TR_PROJWBS_OBSPROJ

TR_PROJWBS_OBSPROJ
CREATE TRIGGER TR_PROJWBS_OBSPROJ
ON projwbs
FOR insert,update,delete
as
  set nocount on
  
  declare @inscnt int, @delcnt int
  declare @vproject_flag char(1), @vproj_node_flag char(1), @vproj_id int, @vwbs_id int
  declare @vret_val int, @vret_msg varchar(4000), @vcnt int, @vmsg_type varchar(10);
  declare @new_wbs_id int, @old_wbs_id int, @new_proj_id int, @old_proj_id int,@vorig_proj_id int
  declare @new_obs_id int, @old_obs_id int, @new_proj_node_flag char(1), @old_proj_node_flag char(1)
  declare @old_parent_wbs_id int , @new_parent_wbs_id int
  declare @old_delete_session_id int, @new_delete_session_id int
  declare @param1 varchar(255), @param2 varchar(255)
  -- Trigger will only handle the case of single row updates
  -- on the PROJWBS table
  select @inscnt=count(*) from inserted
  select @delcnt=count(*) from deleted

  if @inscnt = 0 and @delcnt > 1
  BEGIN
    DECLARE proj CURSOR FOR select distinct proj_id from deleted OPEN proj
    FETCH NEXT FROM proj INTO @old_proj_id
    WHILE @@FETCH_STATUS = 0 
	BEGIN
      select @vproject_flag=project_flag from project  where proj_id = @old_proj_id;
      select top 1 @old_wbs_id=wbs_id from deleted where proj_id = @old_proj_id
      if @vproject_flag = 'Y' 
       set @vmsg_type = 'PROJECT'
      else
        set @vmsg_type = 'EPS'
      set @param1=ltrim(str(@old_wbs_id))
      set @param2=ltrim(str(@old_proj_id))
      exec prmqueue_add 'PROJWBS_SECURITY',@vmsg_type,'DELETE', @param1, @param2
      FETCH NEXT FROM proj INTO @old_proj_id
    END
    CLOSE proj DEALLOCATE proj
  END

  if @inscnt = 1 or @delcnt = 1 
  BEGIN

    if @inscnt=1 and @delcnt=1 and not update(parent_wbs_id) and not update(obs_id) and not update(delete_session_id)
      return  -- Early exit for update not on hierarchy or obs

    select @old_wbs_id=wbs_id, @old_proj_id=proj_id, @old_obs_id=obs_id,
           @old_proj_node_flag=proj_node_flag, @Old_parent_wbs_id=parent_wbs_id,
           @old_delete_session_id=delete_session_id
    from deleted
    select @new_wbs_id=wbs_id, @new_proj_id=proj_id, @new_obs_id=obs_id,
           @new_proj_node_flag=proj_node_flag, @new_parent_wbs_id=parent_wbs_id,
           @new_delete_session_id=delete_session_id
    from inserted

    if ( (select delete_session_id from deleted) is null and  (select delete_session_id from inserted) is not null  )
      or ( (select delete_session_id from deleted) is not null and  (select delete_session_id from inserted) is null  )
    begin
      select @vproject_flag=project_flag
      from project 
      where proj_id = @new_proj_id;

      if @vproject_flag = 'Y'
        set @vmsg_type = 'PROJECT'
      else
        set @vmsg_type = 'EPS'

	  set @param1=ltrim(str(@new_wbs_id))
	  set @param2=ltrim(str(@new_proj_id))
	  exec prmqueue_add 'PROJWBS_SECURITY',@vmsg_type,'UPDATE', @param1, @param2
      if @new_delete_session_id is null
        if (select count(*) from obsproj where proj_id =@new_proj_id and obs_id = @new_obs_id)=0
        BEGIN
          if @vproject_flag = 'Y'
            select @vwbs_id=max(wbs_id) from obsproj where proj_id = @new_proj_id;
          else 
            set @vwbs_id=@new_wbs_id
          insert into obsproj (obs_id, proj_id, wbs_id)
          values (@new_obs_id,@new_proj_id,@vwbs_id);
        END
    end

    if @inscnt = 1		--Updating or Inserting
    BEGIN
      select @vcnt=count(*)
      from obsproj
      where proj_id = @new_proj_id
      and obs_id = @new_obs_id;

      if (@vcnt=0) or 
         (@delcnt = 1 and ( @old_parent_wbs_id <> @new_parent_wbs_id
                        or  @old_obs_id<> @new_obs_id )
         ) 
        -- Continue
        set @vcnt=0

      else
      BEGIN
        return;
      END;

      set @vproj_node_flag = @new_proj_node_flag;
      set @vproj_id = @new_proj_id;
    END
    else
    BEGIN
      set @vproj_node_flag = @old_proj_node_flag;
      set @vproj_id = @old_proj_id;
    END

    select @vproject_flag=project_flag,@vorig_proj_id=orig_proj_id
    from project 
    where proj_id = @vproj_id;
    
    if @vorig_proj_id is not null 
	return 

    if @vproject_flag = 'Y'
      set @vmsg_type = 'PROJECT'
    else
      set @vmsg_type = 'EPS'

    if @inscnt=0 and @delcnt=1 -- Deleting
    BEGIN
      set @param1=ltrim(str(@old_wbs_id))
      set @param2=ltrim(str(@old_proj_id))

      exec prmqueue_add 'PROJWBS_SECURITY',@vmsg_type,'DELETE', @param1, @param2
    END
    else if @inscnt=1 and @delcnt=0 -- Inserting
    BEGIN
      select @vwbs_id=max(wbs_id) from obsproj where proj_id = @new_proj_id;
      if @vproject_flag  = 'Y' and @vwbs_id is not null
      BEGIN 
        insert into obsproj (obs_id, proj_id, wbs_id)
        values (@new_obs_id,@new_proj_id,@vwbs_id);
      END
      ELSE
      BEGIN
        insert into obsproj(obs_id,proj_id,wbs_id)
        select obs_id,@new_proj_id,@new_wbs_id
        from obsproj
        where wbs_id = @New_parent_wbs_id;

        if (select count(*) from obsproj where obs_id = @new_obs_id and proj_id = @new_proj_id) = 0
          insert into obsproj (obs_id, proj_id, wbs_id)
          values (@new_obs_id,@new_proj_id,@new_wbs_id);
      END

    END
    else if @inscnt=1 and @delcnt=1 -- Updating
    BEGIN
      select @vwbs_id=max(wbs_id) from obsproj where proj_id = @new_proj_id;
      if @old_parent_wbs_id <> @new_parent_wbs_id and @new_proj_node_flag = 'Y' 
      BEGIN
        set @param1=ltrim(str(@new_wbs_id))
        set @param2=ltrim(str(@new_proj_id))
        exec prmqueue_add 'PROJWBS_SECURITY',@vmsg_type,'UPDATE', @param1, @param2

        insert into obsproj(obs_id,proj_id,wbs_id)
        select obs_id,@new_proj_id,@vwbs_id
        from obsproj op
        where wbs_id = @new_parent_wbs_id
        and obs_id not in (select obs_id from obsproj where proj_id = @new_proj_id)        

        if (select count(*) from obsproj where proj_id =@new_proj_id and obs_id = @new_obs_id)=0
          insert into obsproj (obs_id, proj_id, wbs_id)
          values (@new_obs_id,@new_proj_id,@vwbs_id);

      END
      ELSE IF @old_obs_id <> @new_obs_id 
      BEGIN
        set @param1=ltrim(str(@new_wbs_id))
        set @param2=ltrim(str(@new_proj_id))
        exec prmqueue_add 'PROJWBS_SECURITY',@vmsg_type,'UPDATE', @param1, @param2
        if (select count(*) from obsproj where proj_id =@new_proj_id and obs_id = @new_obs_id)=0
          insert into obsproj (obs_id, proj_id, wbs_id)
          values (@new_obs_id,@new_proj_id,@vwbs_id);

      END
      ELSE IF @old_delete_session_id <> @new_delete_session_id 
      BEGIN
        set @param1=ltrim(str(@new_wbs_id))
        set @param2=ltrim(str(@new_proj_id))
        exec prmqueue_add 'PROJWBS_SECURITY',@vmsg_type,'UPDATE', @param1, @param2
        if (select count(*) from obsproj where proj_id =@new_proj_id and obs_id = @new_obs_id)=0
          insert into obsproj (obs_id, proj_id, wbs_id)
          values (@new_obs_id,@new_proj_id,@vwbs_id);

      END
    END

  END

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'TR_RSRCHOUR_LDI' and type='TR')
  DROP TRIGGER TR_RSRCHOUR_LDI

TR_RSRCHOUR_LDI
create trigger tr_rsrchour_ldi
on RSRCHOUR
for insert, update
as     
  declare @del_cnt int
  select @del_cnt=count(*) from deleted
  declare @del_sess_id int, @ins_sess_id int, @rsrc_id int, @taskrsrc_id int, @del_pk int, @ins_pk int

  declare  rs_c1 cursor local for
	select d.delete_session_id, i.delete_session_id, i.rsrc_id, i.taskrsrc_id, d.rsrc_hr_id, i.rsrc_hr_id
        from deleted d, inserted i
        where d.rsrc_hr_id =* i.rsrc_hr_id
  open rs_c1
  fetch rs_c1 into @del_sess_id, @ins_sess_id, @rsrc_id, @taskrsrc_id, @del_pk, @ins_pk
  while @@fetch_status >= 0
  begin
    if ( @del_pk is null ) or ( @ins_sess_id is null and @del_sess_id is not null )
    begin
      if exists (select rsrc_id from rsrc where rsrc_id = @rsrc_id and delete_session_id is not null)
      begin
        if @del_pk is null
        begin
          raiserror ('LDV Integrity Error. Cannot insert/restore rsrchour %d because rsrc %d is deleted',16,1,@ins_pk,@rsrc_id)
          rollback transaction
        end
        else
        begin
          update rsrchour set delete_session_id = @del_sess_id 
          where rsrc_hr_id = @del_pk
        end
      end
      if @taskrsrc_id is not null and
         exists (select taskrsrc_id from taskrsrc where taskrsrc_id = @taskrsrc_id and delete_session_id is not null)
      begin
        raiserror ('LDV Integrity Error. Cannot insert/restore rsrchour %d because taskrsrc %d is deleted',16,1,@ins_pk,@taskrsrc_id)
        rollback transaction
      end
    end

    fetch rs_c1 into @del_sess_id, @ins_sess_id, @rsrc_id, @taskrsrc_id, @del_pk, @ins_pk
  end
  deallocate rs_c1

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'TR_PROTECT_SPIDMAP' and type='TR')
  DROP TRIGGER TR_PROTECT_SPIDMAP

TR_PROTECT_SPIDMAP
CREATE TRIGGER tr_protect_spidmap
on spidmap
for update,insert,delete
as     
declare @cnt int

if not exists (select name 
from master..syslogins sl, master..sysprocesses sp
where sysadmin = 1 and sp.spid = @@spid
and sp.loginame = sl.name)
begin
  if exists (select * from inserted where spid<>@@spid)
  or exists (select * from deleted where spid<>@@spid)
  begin
    raiserror ('Illegal update of spid',16,1)
    rollback transaction
  end
end

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'TR_USERS_TSDELEGATE' and type='TR')
  DROP TRIGGER TR_USERS_TSDELEGATE

TR_USERS_TSDELEGATE
CREATE TRIGGER TR_USERS_TSDELEGATE
on USERS
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
delete from tsdelegate where user_id in      
 (select d.user_id from deleted d,tsdelegate tsd  where d.user_id=tsd.user_id)
delete from tsdelegate where ts_delegate_user_id in       
 (select d.user_id from deleted d,tsdelegate tsd where d.user_id=tsd.ts_delegate_user_id)
END

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'TR_USESSION_LOGOFF' and type='TR')
  DROP TRIGGER TR_USESSION_LOGOFF

TR_USESSION_LOGOFF
CREATE TRIGGER TR_USESSION_LOGOFF
on USESSION
for update, delete
as
   set nocount on
   declare @duser_id varchar(255),@dsession_id int,@vuser_name varchar(32),@audit int,@ins_cnt int,@del_cnt int,@oper varchar(1),@vcnt int
   exec settings_read_bool @audit OUTPUT, 'database.audit.LogOut','Enabled',1
   if @audit=0 RETURN

   select @ins_cnt=count(*) from inserted;
   select @del_cnt=count(*) from deleted;
   if @ins_cnt = @del_cnt 
     set @oper = 'U' 
   ELSE
     set @oper = 'D';
   select @duser_id=user_id,@dsession_id=session_id from deleted
   if @duser_id is not null 
     select @vuser_name=user_name  from users where user_id=@duser_id
   else
     set @duser_id = null

   if @oper = 'U' and update(delete_session_id) 
     insert into usessaud 
       (session_id,login_date,logout_date,last_active_time,user_name,user_id,host_name,app_name,hard_drive_code,db_engine_type,os_user_name)
     select session_id,login_time,getdate(),last_active_time,@vuser_name,user_id,host_name,app_name,hard_drive_code,db_engine_type,os_user_name from deleted   

   if @oper='D' 
     insert into usessaud  
       (session_id,login_date,logout_date,last_active_time,user_name,user_id,host_name,app_name,hard_drive_code,db_engine_type,os_user_name)
     select session_id,login_time,getdate(),last_active_time,@vuser_name,user_id,host_name,app_name,hard_drive_code,db_engine_type,os_user_name from deleted  where delete_session_id is null

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PROJRSRC_VIEW' and type='V')
  DROP VIEW PROJRSRC_VIEW

PROJRSRC_VIEW
create view projrsrc_view ( rsrc_id, proj_id ) as
SELECT tk.rsrc_id, tk.proj_id
FROM task tk
WHERE tk.rsrc_ID IS NOT NULL
UNION 
SELECT tr.rsrc_id, tr.proj_id
FROM taskrsrc tr
WHERE tr.rsrc_ID IS NOT NULL 
UNION 
SELECT pr.rsrc_id, pr.proj_id
FROM projrisk pr
WHERE pr.rsrc_ID IS NOT NULL 
UNION
SELECT pe.rsrc_id, pe.proj_id
FROM projest pe
WHERE pe.rsrc_ID IS NOT NULL 
UNION
SELECT ps.rsrc_id, ps.proj_id
FROM projissu ps
WHERE ps.rsrc_ID IS NOT NULL 
UNION
SELECT wr.rsrc_id, wr.proj_id
FROM wbsrsrc wr
WHERE wr.rsrc_ID IS NOT NULL 


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PROJROLE_VIEW' and type='V')
  DROP VIEW PROJROLE_VIEW

PROJROLE_VIEW
create view projrole_view ( role_id, proj_id ) as
SELECT tr.role_id, tr.proj_id
FROM taskrsrc tr
WHERE tr.role_id IS NOT NULL
UNION 
SELECT r.role_id, pr.proj_id
FROM projrsrc_view  pr, rsrc r
WHERE r.role_id IS NOT NULL 
AND r.rsrc_id = pr.rsrc_id
UNION
SELECT  r.role_id, pr.proj_id
FROM projrsrc_view pr,  rsrcrole r
WHERE r.role_id IS NOT NULL 
AND r.rsrc_id = pr.rsrc_id

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PROJRSRCROLE_VIEW' and type='V')
  DROP VIEW PROJRSRCROLE_VIEW

PROJRSRCROLE_VIEW
create view projrsrcrole_view ( rsrc_id, role_id, proj_id ) as
SELECT rr.rsrc_id, rr.role_id, pro.proj_id
FROM projrole_view pro,  rsrcrole rr
WHERE  rr.role_id = pro.role_id
UNION 
SELECT  rr.rsrc_id, rr.role_id, pr.proj_id
FROM projrsrc_view pr, rsrcrole rr
WHERE rr.rsrc_id = pr.rsrc_id

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PROJSHAR_BL_VIEW' and type='V')
  DROP VIEW PROJSHAR_BL_VIEW

PROJSHAR_BL_VIEW
CREATE VIEW projshar_bl_view
as
select ps.proj_id, session_id, access_level, load_status
from  project p, projshar ps
where ps.proj_id = p.proj_id
union
select p.proj_id, session_id, access_level, load_status
from  project p, projshar ps
where ps.proj_id = p.orig_proj_id


IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PROJRSRC_PS_VIEW' and type='V')
  DROP VIEW PROJRSRC_PS_VIEW

PROJRSRC_PS_VIEW
create view projrsrc_ps_view
as
SELECT rsrc_id, ps.proj_id, ps.session_id, ps.load_status
FROM task tk, projshar ps
WHERE tk.rsrc_ID IS NOT NULL
and ps.proj_id = tk.proj_id
UNION
SELECT rsrc_id, ps.proj_id, ps.session_id, ps.load_status
FROM taskrsrc tr, projshar ps
WHERE tr.rsrc_id IS NOT NULL
and ps.proj_id = tr.proj_id
UNION
SELECT rsrc_id, ps.proj_id, ps.session_id, ps.load_status
FROM projrisk pr, projshar ps
WHERE ps.proj_id = pr.proj_id
UNION
SELECT rsrc_id, ps.proj_id, ps.session_id, ps.load_status
FROM projest pe, projshar ps
WHERE ps.proj_id = pe.proj_id
UNION
SELECT rsrc_id, ps.proj_id, ps.session_id, ps.load_status
FROM projissu pi, projshar ps
WHERE ps.proj_id = pi.proj_id
UNION
SELECT rsrc_id, ps.proj_id, ps.session_id, ps.load_status
FROM wbsrsrc wr, projshar ps
WHERE ps.proj_id = wr.proj_id

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PROJROLE_PS_VIEW' and type='V')
  DROP VIEW PROJROLE_PS_VIEW

PROJROLE_PS_VIEW
CREATE VIEW projrole_ps_view 
AS
SELECT tr.role_id, tr.proj_id, ps.session_id, ps.load_status
FROM taskrsrc tr, projshar ps
WHERE tr.role_id IS NOT NULL 
and ps.proj_id = tr.proj_id
UNION 
SELECT r.role_id, pr.proj_id, pr.session_id, pr.load_status
FROM projrsrc_ps_view pr,rsrc r
WHERE r.role_id IS NOT NULL
AND r.rsrc_id = pr.rsrc_id
UNION
SELECT rs.role_id, pr.proj_id, pr.session_id, pr.load_status
FROM rsrcrole rs,  PROJRSRC_PS_VIEW pr
WHERE rs.role_id IS NOT NULL
and rs.rsrc_id = pr.rsrc_id
UNION
SELECT wr.role_id, ps.proj_id, ps.session_id, ps.load_status
FROM wbsrsrc wr, PROJSHAR ps
WHERE wr.role_id is NOT NULL
and ps.proj_id = wr.proj_id

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PROJRSRCROLE_PS_VIEW' and type='V')
  DROP VIEW PROJRSRCROLE_PS_VIEW

PROJRSRCROLE_PS_VIEW
CREATE VIEW projrsrcrole_ps_view 
AS
SELECT rr.rsrc_id, rr.role_id, pro.proj_id, pro.session_id, pro.load_status
FROM projrole_ps_view pro, rsrcrole rr
WHERE rr.role_id = pro.role_id
UNION 
SELECT rr.rsrc_id, rr.role_id, pr.proj_id, pr.session_id, pr.load_status
FROM projrsrc_ps_view pr, rsrcrole rr
WHERE rr.rsrc_id = pr.rsrc_id

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PFLOAD_VIEW' and type='V')
  DROP VIEW PFLOAD_VIEW

PFLOAD_VIEW
create view pfload_view
as
select prf.pfolio_id, pw.wbs_id, pw.proj_id
from prpfolio prf, projwbs pw
where prf.wbs_id = pw.wbs_id
union
select 0, pw.wbs_id, pw.proj_id
from projwbs pw, project p
where pw.proj_node_flag = 'Y'
and pw.proj_id = p.proj_id
and p.project_flag ='N'

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PFLOAD_IP_VIEW' and type='V')
  DROP VIEW PFLOAD_IP_VIEW

PFLOAD_IP_VIEW
create view pfload_ip_view
as
select prf.pfolio_id, pw.wbs_id, pw.proj_id
from projwbs pw, prpfolio prf
where prf.wbs_id = pw.wbs_id
union
select prf.pfolio_id, pw.wbs_id, pw.proj_id
from projwbs pw, projwbs pw2, prpfolio prf
where pw2.wbs_id = prf.wbs_id
and pw.wbs_id = pw2.parent_wbs_id

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PFLOAD_UACCESS_VIEW' and type='V')
  DROP VIEW PFLOAD_UACCESS_VIEW

PFLOAD_UACCESS_VIEW
create view pfload_uaccess_view
AS
select prf.pfolio_id, pw.wbs_id, pw.proj_id, ua.user_id, ua.access_flag
from prpfolio prf, projwbs pw, uaccess ua
where prf.wbs_id = pw.wbs_id
and pw.proj_id = ua.proj_id
union
select 0, pw.wbs_id, pw.proj_id, ua.user_id, ua.access_flag
from projwbs pw, project p, uaccess ua
where pw.proj_node_flag = 'Y'
and pw.proj_id = p.proj_id
and p.project_flag ='N'
and pw.proj_id = ua.proj_id

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'PFLOAD_IP_UACCESS_VIEW' and type='V')
  DROP VIEW PFLOAD_IP_UACCESS_VIEW

PFLOAD_IP_UACCESS_VIEW
create view pfload_ip_uaccess_view
AS
select prf.pfolio_id, pw.wbs_id, pw.proj_id, ua.user_id, ua.access_flag
from projwbs pw, prpfolio prf, uaccess ua
where prf.wbs_id = pw.wbs_id
and pw.proj_id = ua.proj_id
union
select prf.pfolio_id, pw.wbs_id, pw.proj_id, ua.user_id, ua.access_flag
from 
projwbs pw, projwbs pw2, prpfolio prf, uaccess ua
where pw2.wbs_id = prf.wbs_id
and pw.wbs_id = pw2.parent_wbs_id
and pw.proj_id = ua.proj_id

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'OPENING_OBS' and type='V')
  DROP VIEW OPENING_OBS

OPENING_OBS
CREATE VIEW opening_obs
AS
SELECT obs_id FROM dltobs WHERE session_id = dbo.current_session('SESSIONID')

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'OPENING_ROLE' and type='V')
  DROP VIEW OPENING_ROLE

OPENING_ROLE
CREATE VIEW opening_role
AS
SELECT role_id FROM dltrole WHERE session_id = dbo.current_session('SESSIONID')

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'OPENING_ACCOUNT' and type='V')
  DROP VIEW OPENING_ACCOUNT

OPENING_ACCOUNT
CREATE VIEW opening_account
AS
SELECT acct_id FROM dltacct WHERE session_id = dbo.current_session('SESSIONID')

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'OPENING_USERS' and type='V')
  DROP VIEW OPENING_USERS

OPENING_USERS
CREATE VIEW opening_users
AS
SELECT user_id FROM dltuser WHERE session_id = dbo.current_session('SESSIONID')

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'OPENING_RSRC' and type='V')
  DROP VIEW OPENING_RSRC

OPENING_RSRC
CREATE VIEW opening_rsrc
AS
SELECT rsrc_id FROM dltrsrc WHERE session_id = dbo.current_session('SESSIONID')

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'OPENING_ACTVCODE' and type='V')
  DROP VIEW OPENING_ACTVCODE

OPENING_ACTVCODE
CREATE VIEW opening_actvcode
AS
SELECT actv_code_id FROM dltactv WHERE session_id = dbo.current_session('SESSIONID')

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'OPENING_RSRCROLE' and type='V')
  DROP VIEW OPENING_RSRCROLE

OPENING_RSRCROLE
CREATE VIEW opening_rsrcrole
AS
SELECT rsrc_id,role_id FROM dltrsrl WHERE session_id = dbo.current_session('SESSIONID')

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_PROJ_BY_WEEK' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_PROJ_BY_WEEK

WBSRSRC_ASSGN_BY_PROJ_BY_WEEK
CREATE VIEW WBSRSRC_ASSGN_BY_PROJ_BY_WEEK
as 
select a.proj_id, b.week_start, sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id 
and a.delete_session_id is null and b.delete_session_id is null
group by a.proj_id, b.week_start

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_PROJ_BY_MONTH' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_PROJ_BY_MONTH

WBSRSRC_ASSGN_BY_PROJ_BY_MONTH
CREATE VIEW WBSRSRC_ASSGN_BY_PROJ_BY_MONTH
as 
select a.proj_id, b.month_start, sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id
and a.delete_session_id is null and b.delete_session_id is null 
group by a.proj_id, b.month_start

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_PROJ_BY_QTR' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_PROJ_BY_QTR

WBSRSRC_ASSGN_BY_PROJ_BY_QTR
CREATE VIEW WBSRSRC_ASSGN_BY_PROJ_BY_QTR
as 
select a.proj_id, dbo.get_first_day_of_quarter(month_start) qtr, sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id 
and a.delete_session_id is null and b.delete_session_id is null
group by a.proj_id,dbo.get_first_day_of_quarter(month_start) 

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_PROJ_BY_YEAR' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_PROJ_BY_YEAR

WBSRSRC_ASSGN_BY_PROJ_BY_YEAR
CREATE VIEW WBSRSRC_ASSGN_BY_PROJ_BY_YEAR
as 
select a.proj_id, 
cast(('01-01-' + cast(DATEPART (yy, month_start) as varchar(4))   ) as datetime) year , sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b where a.wbsrsrc_id = b.wbsrsrc_id 
and a.delete_session_id is null and b.delete_session_id is null
group by a.proj_id, cast(('01-01-' + cast(DATEPART (yy, month_start) as varchar(4))) as datetime)

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_RSRC_BY_WEEK' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_RSRC_BY_WEEK

WBSRSRC_ASSGN_BY_RSRC_BY_WEEK
CREATE VIEW WBSRSRC_ASSGN_BY_RSRC_BY_WEEK
as 
select a.rsrc_id, b.week_start, sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id
and a.delete_session_id is null and b.delete_session_id is null 
group by a.rsrc_id, b.week_start

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_RSRC_BY_MONTH' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_RSRC_BY_MONTH

WBSRSRC_ASSGN_BY_RSRC_BY_MONTH
CREATE VIEW WBSRSRC_ASSGN_BY_RSRC_BY_MONTH
as 
select a.rsrc_id, b.month_start, sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id
and a.delete_session_id is null and b.delete_session_id is null 
group by a.rsrc_id, b.month_start

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_RSRC_BY_QTR' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_RSRC_BY_QTR

WBSRSRC_ASSGN_BY_RSRC_BY_QTR
CREATE VIEW WBSRSRC_ASSGN_BY_RSRC_BY_QTR
as 
select a.rsrc_id, dbo.get_first_day_of_quarter(month_start) qtr, sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id 
and a.delete_session_id is null and b.delete_session_id is null
group by a.rsrc_id,dbo.get_first_day_of_quarter(month_start) 

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_RSRC_BY_YEAR' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_RSRC_BY_YEAR

WBSRSRC_ASSGN_BY_RSRC_BY_YEAR
CREATE VIEW WBSRSRC_ASSGN_BY_RSRC_BY_YEAR
as 
select a.rsrc_id, 
cast(('01-01-' + cast(DATEPART (yy, month_start) as varchar(4))   ) as datetime) year , sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b where a.wbsrsrc_id = b.wbsrsrc_id 
and a.delete_session_id is null and b.delete_session_id is null
group by a.rsrc_id, cast(('01-01-' + cast(DATEPART (yy, month_start) as varchar(4))) as datetime)

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_ROLE_BY_WEEK' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_ROLE_BY_WEEK

WBSRSRC_ASSGN_BY_ROLE_BY_WEEK
CREATE VIEW WBSRSRC_ASSGN_BY_ROLE_BY_WEEK
as 
select a.role_id, b.week_start, sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id 
and a.delete_session_id is null and b.delete_session_id is null
group by a.role_id, b.week_start

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_ROLE_BY_MONTH' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_ROLE_BY_MONTH

WBSRSRC_ASSGN_BY_ROLE_BY_MONTH
CREATE VIEW WBSRSRC_ASSGN_BY_ROLE_BY_MONTH
as 
select a.role_id, b.month_start, sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id 
and a.delete_session_id is null and b.delete_session_id is null
group by a.role_id, b.month_start

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_ROLE_BY_QTR' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_ROLE_BY_QTR

WBSRSRC_ASSGN_BY_ROLE_BY_QTR
CREATE VIEW WBSRSRC_ASSGN_BY_ROLE_BY_QTR
as 
select a.role_id, dbo.get_first_day_of_quarter(month_start) qtr, sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id 
and a.delete_session_id is null and b.delete_session_id is null
group by a.role_id,dbo.get_first_day_of_quarter(month_start) 

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_ROLE_BY_YEAR' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_ROLE_BY_YEAR

WBSRSRC_ASSGN_BY_ROLE_BY_YEAR
CREATE VIEW WBSRSRC_ASSGN_BY_ROLE_BY_YEAR
as 
select a.role_id, 
cast(('01-01-' + cast(DATEPART (yy, month_start) as varchar(4))   ) as datetime) year , sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b where a.wbsrsrc_id = b.wbsrsrc_id 
and a.delete_session_id is null and b.delete_session_id is null
group by a.role_id, cast(('01-01-' + cast(DATEPART (yy, month_start) as varchar(4))) as datetime)

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_PROJRSRC_WEEK' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_PROJRSRC_WEEK

WBSRSRC_ASSGN_BY_PROJRSRC_WEEK
CREATE VIEW WBSRSRC_ASSGN_BY_PROJRSRC_WEEK
(PROJ_ID, RSRC_ID, WEEK_START, PROJECT_SUMM_QTY)
AS 
select a.proj_id, a.rsrc_id, b.week_start , sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id
and a.delete_session_id is null and b.delete_session_id is null
group by a.proj_id,  a.rsrc_id, b.week_start

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_PROJRSRC_MON' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_PROJRSRC_MON

WBSRSRC_ASSGN_BY_PROJRSRC_MON
CREATE VIEW WBSRSRC_ASSGN_BY_PROJRSRC_MON
(PROJ_ID, RSRC_ID, MONTH_START, PROJECT_SUMM_QTY)
AS 
select a.proj_id, a.rsrc_id, b.month_start, sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id
and a.delete_session_id is null and b.delete_session_id is null
group by a.proj_id, a.rsrc_id, b.month_start

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_PROJRSRC_QTR' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_PROJRSRC_QTR

WBSRSRC_ASSGN_BY_PROJRSRC_QTR
CREATE VIEW WBSRSRC_ASSGN_BY_PROJRSRC_QTR
(PROJ_ID, RSRC_ID,QTR, PROJECT_SUMM_QTY)
AS 
select a.proj_id, a.rsrc_id, dbo.get_first_day_of_quarter(month_start) 
qtr, sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id
and a.delete_session_id is null and b.delete_session_id is null
group by a.proj_id,  a.rsrc_id, dbo.get_first_day_of_quarter(month_start)

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_PROJRSRC_YEAR' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_PROJRSRC_YEAR

WBSRSRC_ASSGN_BY_PROJRSRC_YEAR
CREATE VIEW WBSRSRC_ASSGN_BY_PROJRSRC_YEAR
(PROJ_ID, RSRC_ID, YEAR, PROJECT_SUMM_QTY)
AS 
select a.proj_id, a.rsrc_id,cast(('01-01-' + cast(DATEPART (yy, month_start) as varchar(4))) as datetime) year,
sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id
and a.delete_session_id is null and b.delete_session_id is null
group by  proj_id,  rsrc_id, cast(('01-01-' + cast(DATEPART (yy, month_start) as varchar(4))) as datetime)

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_PROJROLE_WEEK' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_PROJROLE_WEEK

WBSRSRC_ASSGN_BY_PROJROLE_WEEK
CREATE VIEW WBSRSRC_ASSGN_BY_PROJROLE_WEEK
(PROJ_ID, ROLE_ID, WEEK_START, PROJECT_SUMM_QTY)
AS 
select a.proj_id, a.role_id, b.week_start , sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id
and a.delete_session_id is null and b.delete_session_id is null
group by a.proj_id,  a.role_id, b.week_start

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_PROJROLE_MON' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_PROJROLE_MON

WBSRSRC_ASSGN_BY_PROJROLE_MON
CREATE VIEW WBSRSRC_ASSGN_BY_PROJROLE_MON
(PROJ_ID, ROLE_ID, MONTH_START, PROJECT_SUMM_QTY)
AS 
select a.proj_id, a.role_id, b.month_start, sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id
and a.delete_session_id is null and b.delete_session_id is null
group by a.proj_id, a.role_id, b.month_start

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_PROJROLE_QTR' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_PROJROLE_QTR

WBSRSRC_ASSGN_BY_PROJROLE_QTR
CREATE VIEW WBSRSRC_ASSGN_BY_PROJROLE_QTR
(PROJ_ID, ROLE_ID, QTR, PROJECT_SUMM_QTY)
AS 
select a.proj_id, a.role_id, dbo.get_first_day_of_quarter(month_start) 
qtr, sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id
and a.delete_session_id is null and b.delete_session_id is null
group by a.proj_id, a.role_id, dbo.get_first_day_of_quarter(month_start)

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_BY_PROJROLE_YEAR' and type='V')
  DROP VIEW WBSRSRC_ASSGN_BY_PROJROLE_YEAR

WBSRSRC_ASSGN_BY_PROJROLE_YEAR
CREATE VIEW WBSRSRC_ASSGN_BY_PROJROLE_YEAR
(PROJ_ID, ROLE_ID, YEAR, PROJECT_SUMM_QTY)
AS 
select a.proj_id, a.role_id, cast(('01-01-' + cast(DATEPART (yy, month_start) as varchar(4))) as datetime) Year,
sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id
and a.delete_session_id is null and b.delete_session_id is null
group by  a.proj_id,  a.role_id, cast(('01-01-' + cast(DATEPART (yy, month_start) as varchar(4))) as datetime)

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_SUMMARY_BY_MON' and type='V')
  DROP VIEW WBSRSRC_ASSGN_SUMMARY_BY_MON

WBSRSRC_ASSGN_SUMMARY_BY_MON
CREATE VIEW WBSRSRC_ASSGN_SUMMARY_BY_MON
as 
select proj_id, rsrc_id, role_id,  month_start, sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id
and a.delete_session_id is null and b.delete_session_id is null
group by proj_id, rsrc_id, role_id, month_start

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_SUMMARY_BY_QTR' and type='V')
  DROP VIEW WBSRSRC_ASSGN_SUMMARY_BY_QTR

WBSRSRC_ASSGN_SUMMARY_BY_QTR
CREATE VIEW WBSRSRC_ASSGN_SUMMARY_BY_QTR
as 
select a.proj_id, rsrc_id, role_id, dbo.get_first_day_of_quarter(month_start) qtr, sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id 
and a.delete_session_id is null and b.delete_session_id is null
group by a.proj_id, rsrc_id, role_id, dbo.get_first_day_of_quarter(month_start)

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_SUMMARY_BY_WEEK' and type='V')
  DROP VIEW WBSRSRC_ASSGN_SUMMARY_BY_WEEK

WBSRSRC_ASSGN_SUMMARY_BY_WEEK
CREATE VIEW WBSRSRC_ASSGN_SUMMARY_BY_WEEK
as 
select proj_id, rsrc_id, role_id,  week_start , sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b 
where a.wbsrsrc_id = b.wbsrsrc_id
and a.delete_session_id is null and b.delete_session_id is null
group by proj_id, rsrc_id,  role_id, week_start

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSGN_SUMMARY_BY_YEAR' and type='V')
  DROP VIEW WBSRSRC_ASSGN_SUMMARY_BY_YEAR

WBSRSRC_ASSGN_SUMMARY_BY_YEAR
CREATE VIEW WBSRSRC_ASSGN_SUMMARY_BY_YEAR
as 
select a.proj_id, rsrc_id, role_id,
cast(('01-01-' + cast(DATEPART (yy, month_start) as varchar(4))   ) as datetime) year , sum(qty) project_summ_qty
from wbsrsrc a, wbsrsrc_qty b where a.wbsrsrc_id = b.wbsrsrc_id 
and a.delete_session_id is null and b.delete_session_id is null
group by a.proj_id, rsrc_id, role_id,  cast(('01-01-' + cast(DATEPART (yy, month_start) as varchar(4))) as datetime)

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSN_BY_PROJ_BY_FP' and type='V')
  DROP VIEW WBSRSRC_ASSN_BY_PROJ_BY_FP

WBSRSRC_ASSN_BY_PROJ_BY_FP
CREATE VIEW WBSRSRC_ASSN_BY_PROJ_BY_FP
as 
SELECT proj_id, fin_dates_id, SUM(proj_summ_qty) AS proj_summ_qty
FROM  (SELECT r.proj_id, q.fin_dates_id1 AS fin_dates_id, q.fin_qty1 AS proj_summ_qty
       FROM WBSRSRC_QTY AS q INNER JOIN
            WBSRSRC AS r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
            PROJECT AS p ON r.proj_id = p.proj_id
       WHERE (q.fin_dates_id1 IS NOT NULL) AND (p.orig_proj_id IS NULL) AND (r.delete_session_id IS NULL) AND (q.delete_session_id IS NULL) AND (p.delete_session_id IS NULL)
       UNION ALL
       SELECT r.proj_id, q.fin_dates_id2 AS fin_dates_id, q.fin_qty2 AS proj_summ_qty
       FROM WBSRSRC_QTY AS q INNER JOIN
            WBSRSRC AS r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
            PROJECT AS p ON r.proj_id = p.proj_id
       WHERE (q.fin_dates_id2 IS NOT NULL) AND (p.orig_proj_id IS NULL) AND (r.delete_session_id IS NULL) AND (q.delete_session_id IS NULL) AND (p.delete_session_id IS NULL)
       UNION ALL
       SELECT r.proj_id, f.fin_dates_id, q.qty AS proj_summ_qty
       FROM WBSRSRC_QTY AS q INNER JOIN
            WBSRSRC AS r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
            FINDATES AS f ON q.week_start >= f.start_date AND q.week_start <= f.end_date INNER JOIN
            PROJECT AS p ON r.proj_id = p.proj_id
       WHERE (MONTH(q.month_start) = MONTH(q.week_start)) AND (q.fin_dates_id1 IS NULL) AND (q.fin_dates_id2 IS NULL) AND (p.orig_proj_id IS NULL) AND (r.delete_session_id IS NULL) AND (q.delete_session_id IS NULL) AND (p.delete_session_id IS NULL) AND (f.delete_session_id IS NULL)
       UNION ALL       
       SELECT r.proj_id, f.fin_dates_id, q.qty AS proj_summ_qty
       FROM WBSRSRC_QTY AS q INNER JOIN
            WBSRSRC AS r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
            FINDATES AS f ON q.month_start >= f.start_date AND q.month_start <= f.end_date INNER JOIN
            PROJECT AS p ON r.proj_id = p.proj_id
       WHERE (MONTH(q.month_start) <> MONTH(q.week_start)) AND (q.fin_dates_id1 IS NULL) AND (q.fin_dates_id2 IS NULL) AND (p.orig_proj_id IS NULL) AND (r.delete_session_id IS NULL) AND (q.delete_session_id IS NULL) AND (p.delete_session_id IS NULL) AND (f.delete_session_id IS NULL)) AS X
GROUP BY proj_id, fin_dates_id

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSN_BY_PROJROLE_BY_FP' and type='V')
  DROP VIEW WBSRSRC_ASSN_BY_PROJROLE_BY_FP

WBSRSRC_ASSN_BY_PROJROLE_BY_FP
CREATE VIEW WBSRSRC_ASSN_BY_PROJROLE_BY_FP
as 
SELECT proj_id, role_id, fin_dates_id, SUM(proj_summ_qty) AS proj_summ_qty
FROM (SELECT r.proj_id, r.role_id, q.fin_dates_id1 AS fin_dates_id, q.fin_qty1 AS proj_summ_qty
      FROM WBSRSRC_QTY AS q INNER JOIN
           WBSRSRC AS r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           PROJECT AS p ON r.proj_id = p.proj_id
      WHERE (q.fin_dates_id1 IS NOT NULL) AND (p.orig_proj_id IS NULL) AND (r.delete_session_id IS NULL) AND (q.delete_session_id IS NULL) AND (p.delete_session_id IS NULL)
      UNION ALL
      SELECT r.proj_id, r.role_id, q.fin_dates_id2 AS fin_dates_id, q.fin_qty2 AS proj_summ_qty
      FROM WBSRSRC_QTY AS q INNER JOIN
           WBSRSRC AS r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           PROJECT AS p ON r.proj_id = p.proj_id
      WHERE (q.fin_dates_id2 IS NOT NULL) AND (p.orig_proj_id IS NULL) AND (r.delete_session_id IS NULL) AND (q.delete_session_id IS NULL) AND (p.delete_session_id IS NULL)
      UNION ALL
      SELECT r.proj_id, r.role_id, f.fin_dates_id, q.qty AS proj_summ_qty
      FROM WBSRSRC_QTY AS q INNER JOIN
           WBSRSRC AS r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           FINDATES AS f ON q.week_start >= f.start_date AND q.week_start <= f.end_date INNER JOIN
           PROJECT AS p ON r.proj_id = p.proj_id
      WHERE (MONTH(q.month_start) = MONTH(q.week_start)) AND (q.fin_dates_id2 IS NULL) AND (p.orig_proj_id IS NULL) AND (r.delete_session_id IS NULL) AND (q.delete_session_id IS NULL) AND (p.delete_session_id IS NULL) AND (f.delete_session_id IS NULL) 
      UNION ALL
      SELECT r.proj_id, r.role_id, f.fin_dates_id, q.qty AS proj_summ_qty
      FROM WBSRSRC_QTY AS q INNER JOIN
           WBSRSRC AS r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           FINDATES AS f ON q.month_start >= f.start_date AND q.month_start <= f.end_date INNER JOIN
           PROJECT AS p ON r.proj_id = p.proj_id
      WHERE (MONTH(q.month_start) <> MONTH(q.week_start)) AND (q.fin_dates_id1 IS NULL) AND (q.fin_dates_id2 IS NULL) AND (p.orig_proj_id IS NULL) AND (r.delete_session_id IS NULL) AND (q.delete_session_id IS NULL) AND (p.delete_session_id IS NULL) AND (f.delete_session_id IS NULL)) AS X
GROUP BY proj_id, role_id, fin_dates_id

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSN_BY_PROJRSRC_BY_FP' and type='V')
  DROP VIEW WBSRSRC_ASSN_BY_PROJRSRC_BY_FP

WBSRSRC_ASSN_BY_PROJRSRC_BY_FP
CREATE VIEW WBSRSRC_ASSN_BY_PROJRSRC_BY_FP
as 
SELECT proj_id, rsrc_id, fin_dates_id, SUM(proj_summ_qty) AS proj_summ_qty
FROM (SELECT r.proj_id, r.rsrc_id, q.fin_dates_id1 AS fin_dates_id, q.fin_qty1 AS proj_summ_qty
      FROM WBSRSRC AS r INNER JOIN
           WBSRSRC_QTY AS q ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           PROJECT AS p ON r.proj_id = p.proj_id
      WHERE (q.fin_dates_id1 IS NOT NULL) AND (p.orig_proj_id IS NULL) AND (r.delete_session_id IS NULL) AND (q.delete_session_id IS NULL) AND (p.delete_session_id IS NULL)
      UNION ALL
      SELECT r.proj_id, r.rsrc_id, q.fin_dates_id2 AS fin_dates_id, q.fin_qty2 AS proj_summ_qty
      FROM WBSRSRC AS r INNER JOIN
           WBSRSRC_QTY AS q ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           PROJECT AS p ON r.proj_id = p.proj_id
      WHERE (q.fin_dates_id2 IS NOT NULL) AND (p.orig_proj_id IS NULL) AND (r.delete_session_id IS NULL) AND (q.delete_session_id IS NULL) AND (p.delete_session_id IS NULL)
      UNION ALL
      SELECT r.proj_id, r.rsrc_id, f.fin_dates_id, q.qty AS proj_summ_qty
      FROM WBSRSRC AS r INNER JOIN
           WBSRSRC_QTY AS q ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           FINDATES AS f ON q.week_start >= f.start_date AND q.week_start <= f.end_date INNER JOIN
           PROJECT AS p ON r.proj_id = p.proj_id
      WHERE (MONTH(q.month_start) = MONTH(q.week_start)) AND (q.fin_dates_id1 IS NULL) AND (q.fin_dates_id2 IS NULL) AND (p.orig_proj_id IS NULL) AND (r.delete_session_id IS NULL) AND (q.delete_session_id IS NULL) AND (p.delete_session_id IS NULL) AND (f.delete_session_id IS NULL) 
      UNION ALL
      SELECT r.proj_id, r.rsrc_id, f.fin_dates_id, q.qty AS proj_summ_qty
      FROM WBSRSRC AS r INNER JOIN
           WBSRSRC_QTY AS q ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           FINDATES AS f ON q.month_start >= f.start_date AND q.month_start <= f.end_date INNER JOIN
           PROJECT AS p ON r.proj_id = p.proj_id
      WHERE (MONTH(q.month_start) <> MONTH(q.week_start)) AND (q.fin_dates_id1 IS NULL) AND (q.fin_dates_id2 IS NULL) AND (p.orig_proj_id IS NULL) AND (r.delete_session_id IS NULL) AND (q.delete_session_id IS NULL) AND (p.delete_session_id IS NULL) AND (f.delete_session_id IS NULL)) AS X
GROUP BY proj_id, rsrc_id, fin_dates_id

IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'WBSRSRC_ASSN_SUMMARY_BY_FP' and type='V')
  DROP VIEW WBSRSRC_ASSN_SUMMARY_BY_FP

WBSRSRC_ASSN_SUMMARY_BY_FP
CREATE VIEW WBSRSRC_ASSN_SUMMARY_BY_FP
as 
SELECT proj_id, role_id, rsrc_id, fin_dates_id, SUM(proj_summ_qty) AS proj_summ_qty
FROM (SELECT r.proj_id, r.role_id, r.rsrc_id, q.fin_dates_id1 AS fin_dates_id, q.fin_qty1 AS proj_summ_qty
      FROM WBSRSRC_QTY AS q INNER JOIN
           WBSRSRC AS r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           PROJECT AS p ON r.proj_id = p.proj_id
      WHERE (q.fin_dates_id1 IS NOT NULL) AND (p.orig_proj_id IS NULL) AND (r.delete_session_id IS NULL) AND (q.delete_session_id IS NULL) AND (p.delete_session_id IS NULL)
      UNION ALL
      SELECT r.proj_id, r.role_id, r.rsrc_id, q.fin_dates_id2 AS fin_dates_id, q.fin_qty2 AS proj_summ_qty
      FROM WBSRSRC_QTY AS q INNER JOIN
           WBSRSRC AS r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           PROJECT AS p ON r.proj_id = p.proj_id
      WHERE (q.fin_dates_id2 IS NOT NULL) AND (p.orig_proj_id IS NULL) AND (r.delete_session_id IS NULL) AND (q.delete_session_id IS NULL) AND (p.delete_session_id IS NULL)
      UNION ALL
      SELECT r.proj_id, r.role_id, r.rsrc_id, f.fin_dates_id, q.qty AS proj_summ_qty
      FROM WBSRSRC_QTY AS q INNER JOIN
           WBSRSRC AS r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           FINDATES AS f ON q.week_start >= f.start_date AND q.week_start <= f.end_date INNER JOIN
           PROJECT AS p ON r.proj_id = p.proj_id
      WHERE (MONTH(q.month_start) = MONTH(q.week_start)) AND (q.fin_dates_id1 IS NULL) AND (q.fin_dates_id2 IS NULL) AND (p.orig_proj_id IS NULL) AND (r.delete_session_id IS NULL) AND (q.delete_session_id IS NULL) AND (p.delete_session_id IS NULL) AND (f.delete_session_id IS NULL) 
      UNION ALL
      SELECT r.proj_id, r.role_id, r.rsrc_id, f.fin_dates_id, q.qty AS proj_summ_qty
      FROM WBSRSRC_QTY AS q INNER JOIN
           WBSRSRC AS r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           FINDATES AS f ON q.month_start >= f.start_date AND q.month_start <= f.end_date INNER JOIN
           PROJECT AS p ON r.proj_id = p.proj_id
      WHERE (MONTH(q.month_start) <> MONTH(q.week_start)) AND (q.fin_dates_id1 IS NULL) AND (q.fin_dates_id2 IS NULL) AND (p.orig_proj_id IS NULL) AND (r.delete_session_id IS NULL) AND (q.delete_session_id IS NULL) AND (p.delete_session_id IS NULL) AND (f.delete_session_id IS NULL)) AS X
GROUP BY proj_id, role_id, rsrc_id, fin_dates_id

PRMAUD_ACCOUNT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_ACCOUNT' AND xtype = 'TR')
    DROP trigger PRMAUD_ACCOUNT

PRMAUD_ACCOUNT
create trigger PRMAUD_ACCOUNT
on ACCOUNT
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iacct_id varchar(255),@iacct_seq_num varchar(255),@iacct_short_name varchar(255),@iacct_name varchar(255),@iparent_acct_id varchar(255)

  declare @dacct_id varchar(255),@dacct_seq_num varchar(255),@dacct_short_name varchar(255),@dacct_name varchar(255),@dparent_acct_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(acct_id) and
			not update(acct_seq_num) and
			not update(acct_short_name) and
			not update(acct_name) and
			not update(parent_acct_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'ACCOUNT', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ACCOUNT',acct_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ACCOUNT', acct_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select acct_id,acct_seq_num,acct_short_name,acct_name,parent_acct_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select acct_id,acct_seq_num,acct_short_name,acct_name,parent_acct_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iacct_id,@iacct_seq_num,@iacct_short_name,@iacct_name,@iparent_acct_id, @idelete_session_id
  else
    fetch deleted_c into @dacct_id,@dacct_seq_num,@dacct_short_name,@dacct_name,@dparent_acct_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dacct_id;
				

    end else begin
    	set @pk1 = @iacct_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dacct_id,@dacct_seq_num,@dacct_short_name,@dacct_name,@dparent_acct_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(acct_id)  exec audit_data 'ACCOUNT','acct_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dacct_id,@iacct_id,@audit_data OUTPUT
      if (@loper='D') or  update(acct_seq_num)  exec audit_data 'ACCOUNT','acct_seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dacct_seq_num,@iacct_seq_num,@audit_data OUTPUT
      if (@loper='D') or  update(acct_short_name)  exec audit_data 'ACCOUNT','acct_short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dacct_short_name,@iacct_short_name,@audit_data OUTPUT
      if (@loper='D') or  update(acct_name)  exec audit_data 'ACCOUNT','acct_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dacct_name,@iacct_name,@audit_data OUTPUT
      if (@loper='D') or  update(parent_acct_id)  exec audit_data 'ACCOUNT','parent_acct_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_acct_id,@iparent_acct_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'ACCOUNT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'ACCOUNT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iacct_id,@iacct_seq_num,@iacct_short_name,@iacct_name,@iparent_acct_id, @idelete_session_id;
    else
     fetch deleted_c into @dacct_id,@dacct_seq_num,@dacct_short_name,@dacct_name,@dparent_acct_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_ACTVCODE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_ACTVCODE' AND xtype = 'TR')
    DROP trigger PRMAUD_ACTVCODE

PRMAUD_ACTVCODE
create trigger PRMAUD_ACTVCODE
on ACTVCODE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iactv_code_id varchar(255),@iactv_code_type_id varchar(255),@iseq_num varchar(255),@ishort_name varchar(255),@iparent_actv_code_id varchar(255),@iactv_code_name varchar(255),@icolor varchar(255)

  declare @dactv_code_id varchar(255),@dactv_code_type_id varchar(255),@dseq_num varchar(255),@dshort_name varchar(255),@dparent_actv_code_id varchar(255),@dactv_code_name varchar(255),@dcolor varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(actv_code_id) and
			not update(actv_code_type_id) and
			not update(seq_num) and
			not update(short_name) and
			not update(parent_actv_code_id) and
			not update(actv_code_name) and
			not update(color) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'ACTVCODE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ACTVCODE',actv_code_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ACTVCODE', actv_code_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select actv_code_id,actv_code_type_id,seq_num,short_name,parent_actv_code_id,actv_code_name,color
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select actv_code_id,actv_code_type_id,seq_num,short_name,parent_actv_code_id,actv_code_name,color
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iactv_code_id,@iactv_code_type_id,@iseq_num,@ishort_name,@iparent_actv_code_id,@iactv_code_name,@icolor, @idelete_session_id
  else
    fetch deleted_c into @dactv_code_id,@dactv_code_type_id,@dseq_num,@dshort_name,@dparent_actv_code_id,@dactv_code_name,@dcolor, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dactv_code_id;
				

    end else begin
    	set @pk1 = @iactv_code_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dactv_code_id,@dactv_code_type_id,@dseq_num,@dshort_name,@dparent_actv_code_id,@dactv_code_name,@dcolor, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(actv_code_id)  exec audit_data 'ACTVCODE','actv_code_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactv_code_id,@iactv_code_id,@audit_data OUTPUT
      if (@loper='D') or  update(actv_code_type_id)  exec audit_data 'ACTVCODE','actv_code_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactv_code_type_id,@iactv_code_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'ACTVCODE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(short_name)  exec audit_data 'ACTVCODE','short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dshort_name,@ishort_name,@audit_data OUTPUT
      if (@loper='D') or  update(parent_actv_code_id)  exec audit_data 'ACTVCODE','parent_actv_code_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_actv_code_id,@iparent_actv_code_id,@audit_data OUTPUT
      if (@loper='D') or  update(actv_code_name)  exec audit_data 'ACTVCODE','actv_code_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactv_code_name,@iactv_code_name,@audit_data OUTPUT
      if (@loper='D') or  update(color)  exec audit_data 'ACTVCODE','color',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcolor,@icolor,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'ACTVCODE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'ACTVCODE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iactv_code_id,@iactv_code_type_id,@iseq_num,@ishort_name,@iparent_actv_code_id,@iactv_code_name,@icolor, @idelete_session_id;
    else
     fetch deleted_c into @dactv_code_id,@dactv_code_type_id,@dseq_num,@dshort_name,@dparent_actv_code_id,@dactv_code_name,@dcolor, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_ACTVTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_ACTVTYPE' AND xtype = 'TR')
    DROP trigger PRMAUD_ACTVTYPE

PRMAUD_ACTVTYPE
create trigger PRMAUD_ACTVTYPE
on ACTVTYPE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iactv_code_type_id varchar(255),@iactv_short_len varchar(255),@iseq_num varchar(255),@iactv_code_type varchar(255),@iactv_code_type_scope varchar(255),@iproj_id varchar(255),@isuper_flag varchar(255)

  declare @dactv_code_type_id varchar(255),@dactv_short_len varchar(255),@dseq_num varchar(255),@dactv_code_type varchar(255),@dactv_code_type_scope varchar(255),@dproj_id varchar(255),@dsuper_flag varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(actv_code_type_id) and
			not update(actv_short_len) and
			not update(seq_num) and
			not update(actv_code_type) and
			not update(actv_code_type_scope) and
			not update(proj_id) and
			not update(super_flag) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'ACTVTYPE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ACTVTYPE',actv_code_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ACTVTYPE', actv_code_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select actv_code_type_id,actv_short_len,seq_num,actv_code_type,actv_code_type_scope,proj_id,super_flag
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select actv_code_type_id,actv_short_len,seq_num,actv_code_type,actv_code_type_scope,proj_id,super_flag
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iactv_code_type_id,@iactv_short_len,@iseq_num,@iactv_code_type,@iactv_code_type_scope,@iproj_id,@isuper_flag, @idelete_session_id
  else
    fetch deleted_c into @dactv_code_type_id,@dactv_short_len,@dseq_num,@dactv_code_type,@dactv_code_type_scope,@dproj_id,@dsuper_flag, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dactv_code_type_id;
				

    end else begin
    	set @pk1 = @iactv_code_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dactv_code_type_id,@dactv_short_len,@dseq_num,@dactv_code_type,@dactv_code_type_scope,@dproj_id,@dsuper_flag, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(actv_code_type_id)  exec audit_data 'ACTVTYPE','actv_code_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactv_code_type_id,@iactv_code_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(actv_short_len)  exec audit_data 'ACTVTYPE','actv_short_len',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactv_short_len,@iactv_short_len,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'ACTVTYPE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(actv_code_type)  exec audit_data 'ACTVTYPE','actv_code_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactv_code_type,@iactv_code_type,@audit_data OUTPUT
      if (@loper='D') or  update(actv_code_type_scope)  exec audit_data 'ACTVTYPE','actv_code_type_scope',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactv_code_type_scope,@iactv_code_type_scope,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'ACTVTYPE','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(super_flag)  exec audit_data 'ACTVTYPE','super_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsuper_flag,@isuper_flag,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'ACTVTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'ACTVTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iactv_code_type_id,@iactv_short_len,@iseq_num,@iactv_code_type,@iactv_code_type_scope,@iproj_id,@isuper_flag, @idelete_session_id;
    else
     fetch deleted_c into @dactv_code_type_id,@dactv_short_len,@dseq_num,@dactv_code_type,@dactv_code_type_scope,@dproj_id,@dsuper_flag, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_ADMIN_CONFIG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_ADMIN_CONFIG' AND xtype = 'TR')
    DROP trigger PRMAUD_ADMIN_CONFIG

PRMAUD_ADMIN_CONFIG
create trigger PRMAUD_ADMIN_CONFIG
on ADMIN_CONFIG
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iconfig_name varchar(255),@iconfig_type varchar(255),@ifactory_version varchar(255),@ilast_change_date varchar(255),@iconfig_value varchar(255)

  declare @dconfig_name varchar(255),@dconfig_type varchar(255),@dfactory_version varchar(255),@dlast_change_date varchar(255),@dconfig_value varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(config_name) and
			not update(config_type) and
			not update(factory_version) and
			not update(last_change_date) and
			not update(config_value) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'ADMIN_CONFIG', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ADMIN_CONFIG',config_name,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ADMIN_CONFIG', config_name,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select config_name,config_type,factory_version,last_change_date,config_value
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select config_name,config_type,factory_version,last_change_date,config_value
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iconfig_name,@iconfig_type,@ifactory_version,@ilast_change_date,@iconfig_value, @idelete_session_id
  else
    fetch deleted_c into @dconfig_name,@dconfig_type,@dfactory_version,@dlast_change_date,@dconfig_value, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dconfig_name;
				

    end else begin
    	set @pk1 = @iconfig_name;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dconfig_name,@dconfig_type,@dfactory_version,@dlast_change_date,@dconfig_value, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(config_name)  exec audit_data 'ADMIN_CONFIG','config_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dconfig_name,@iconfig_name,@audit_data OUTPUT
      if (@loper='D') or  update(config_type)  exec audit_data 'ADMIN_CONFIG','config_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dconfig_type,@iconfig_type,@audit_data OUTPUT
      if (@loper='D') or  update(factory_version)  exec audit_data 'ADMIN_CONFIG','factory_version',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfactory_version,@ifactory_version,@audit_data OUTPUT
      if (@loper='D') or  update(last_change_date)  exec audit_data 'ADMIN_CONFIG','last_change_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlast_change_date,@ilast_change_date,@audit_data OUTPUT
      if (@loper='D') or  update(config_value)  exec audit_data 'ADMIN_CONFIG','config_value',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dconfig_value,@iconfig_value,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'ADMIN_CONFIG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'ADMIN_CONFIG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iconfig_name,@iconfig_type,@ifactory_version,@ilast_change_date,@iconfig_value, @idelete_session_id;
    else
     fetch deleted_c into @dconfig_name,@dconfig_type,@dfactory_version,@dlast_change_date,@dconfig_value, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_BASETYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_BASETYPE' AND xtype = 'TR')
    DROP trigger PRMAUD_BASETYPE

PRMAUD_BASETYPE
create trigger PRMAUD_BASETYPE
on BASETYPE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ibase_type_id varchar(255),@ibase_type_seq_num varchar(255),@ibase_type varchar(255)

  declare @dbase_type_id varchar(255),@dbase_type_seq_num varchar(255),@dbase_type varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(base_type_id) and
			not update(base_type_seq_num) and
			not update(base_type) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'BASETYPE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'BASETYPE',base_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'BASETYPE', base_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select base_type_id,base_type_seq_num,base_type
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select base_type_id,base_type_seq_num,base_type
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ibase_type_id,@ibase_type_seq_num,@ibase_type, @idelete_session_id
  else
    fetch deleted_c into @dbase_type_id,@dbase_type_seq_num,@dbase_type, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dbase_type_id;
				

    end else begin
    	set @pk1 = @ibase_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dbase_type_id,@dbase_type_seq_num,@dbase_type, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(base_type_id)  exec audit_data 'BASETYPE','base_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_type_id,@ibase_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(base_type_seq_num)  exec audit_data 'BASETYPE','base_type_seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_type_seq_num,@ibase_type_seq_num,@audit_data OUTPUT
      if (@loper='D') or  update(base_type)  exec audit_data 'BASETYPE','base_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_type,@ibase_type,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'BASETYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'BASETYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ibase_type_id,@ibase_type_seq_num,@ibase_type, @idelete_session_id;
    else
     fetch deleted_c into @dbase_type_id,@dbase_type_seq_num,@dbase_type, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_BRE_REGISTRY
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_BRE_REGISTRY' AND xtype = 'TR')
    DROP trigger PRMAUD_BRE_REGISTRY

PRMAUD_BRE_REGISTRY
create trigger PRMAUD_BRE_REGISTRY
on BRE_REGISTRY
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ibre_registry_id varchar(255),@iip_address varchar(255),@istart_time varchar(255),@istatus_code varchar(255),@itorched_time varchar(255),@iconfig_name varchar(255),@iconfig_changed_flag varchar(255)

  declare @dbre_registry_id varchar(255),@dip_address varchar(255),@dstart_time varchar(255),@dstatus_code varchar(255),@dtorched_time varchar(255),@dconfig_name varchar(255),@dconfig_changed_flag varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(bre_registry_id) and
			not update(ip_address) and
			not update(start_time) and
			not update(status_code) and
			not update(torched_time) and
			not update(config_name) and
			not update(config_changed_flag) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'BRE_REGISTRY', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'BRE_REGISTRY',bre_registry_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'BRE_REGISTRY', bre_registry_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select bre_registry_id,ip_address,start_time,status_code,torched_time,config_name,config_changed_flag
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select bre_registry_id,ip_address,start_time,status_code,torched_time,config_name,config_changed_flag
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ibre_registry_id,@iip_address,@istart_time,@istatus_code,@itorched_time,@iconfig_name,@iconfig_changed_flag, @idelete_session_id
  else
    fetch deleted_c into @dbre_registry_id,@dip_address,@dstart_time,@dstatus_code,@dtorched_time,@dconfig_name,@dconfig_changed_flag, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dbre_registry_id;
				

    end else begin
    	set @pk1 = @ibre_registry_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dbre_registry_id,@dip_address,@dstart_time,@dstatus_code,@dtorched_time,@dconfig_name,@dconfig_changed_flag, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(bre_registry_id)  exec audit_data 'BRE_REGISTRY','bre_registry_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbre_registry_id,@ibre_registry_id,@audit_data OUTPUT
      if (@loper='D') or  update(ip_address)  exec audit_data 'BRE_REGISTRY','ip_address',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dip_address,@iip_address,@audit_data OUTPUT
      if (@loper='D') or  update(start_time)  exec audit_data 'BRE_REGISTRY','start_time',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstart_time,@istart_time,@audit_data OUTPUT
      if (@loper='D') or  update(status_code)  exec audit_data 'BRE_REGISTRY','status_code',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstatus_code,@istatus_code,@audit_data OUTPUT
      if (@loper='D') or  update(torched_time)  exec audit_data 'BRE_REGISTRY','torched_time',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtorched_time,@itorched_time,@audit_data OUTPUT
      if (@loper='D') or  update(config_name)  exec audit_data 'BRE_REGISTRY','config_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dconfig_name,@iconfig_name,@audit_data OUTPUT
      if (@loper='D') or  update(config_changed_flag)  exec audit_data 'BRE_REGISTRY','config_changed_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dconfig_changed_flag,@iconfig_changed_flag,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'BRE_REGISTRY', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'BRE_REGISTRY', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ibre_registry_id,@iip_address,@istart_time,@istatus_code,@itorched_time,@iconfig_name,@iconfig_changed_flag, @idelete_session_id;
    else
     fetch deleted_c into @dbre_registry_id,@dip_address,@dstart_time,@dstatus_code,@dtorched_time,@dconfig_name,@dconfig_changed_flag, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_BUDGCHNG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_BUDGCHNG' AND xtype = 'TR')
    DROP trigger PRMAUD_BUDGCHNG

PRMAUD_BUDGCHNG
create trigger PRMAUD_BUDGCHNG
on BUDGCHNG
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ibudg_chng_id varchar(255),@iproj_id varchar(255),@iwbs_id varchar(255),@ichng_date varchar(255),@ichng_short_name varchar(255),@ichng_cost varchar(255),@ichng_by_name varchar(255),@istatus_code varchar(255),@ichng_descr varchar(255)

  declare @dbudg_chng_id varchar(255),@dproj_id varchar(255),@dwbs_id varchar(255),@dchng_date varchar(255),@dchng_short_name varchar(255),@dchng_cost varchar(255),@dchng_by_name varchar(255),@dstatus_code varchar(255),@dchng_descr varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(budg_chng_id) and
			not update(proj_id) and
			not update(wbs_id) and
			not update(chng_date) and
			not update(chng_short_name) and
			not update(chng_cost) and
			not update(chng_by_name) and
			not update(status_code) and
			not update(chng_descr) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'BUDGCHNG', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'BUDGCHNG',budg_chng_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'BUDGCHNG', budg_chng_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select budg_chng_id,proj_id,wbs_id,chng_date,chng_short_name,chng_cost,chng_by_name,status_code,chng_descr
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select budg_chng_id,proj_id,wbs_id,chng_date,chng_short_name,chng_cost,chng_by_name,status_code,chng_descr
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ibudg_chng_id,@iproj_id,@iwbs_id,@ichng_date,@ichng_short_name,@ichng_cost,@ichng_by_name,@istatus_code,@ichng_descr, @idelete_session_id
  else
    fetch deleted_c into @dbudg_chng_id,@dproj_id,@dwbs_id,@dchng_date,@dchng_short_name,@dchng_cost,@dchng_by_name,@dstatus_code,@dchng_descr, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dbudg_chng_id;
				

    end else begin
    	set @pk1 = @ibudg_chng_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dbudg_chng_id,@dproj_id,@dwbs_id,@dchng_date,@dchng_short_name,@dchng_cost,@dchng_by_name,@dstatus_code,@dchng_descr, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(budg_chng_id)  exec audit_data 'BUDGCHNG','budg_chng_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbudg_chng_id,@ibudg_chng_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'BUDGCHNG','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_id)  exec audit_data 'BUDGCHNG','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(chng_date)  exec audit_data 'BUDGCHNG','chng_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dchng_date,@ichng_date,@audit_data OUTPUT
      if (@loper='D') or  update(chng_short_name)  exec audit_data 'BUDGCHNG','chng_short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dchng_short_name,@ichng_short_name,@audit_data OUTPUT
      if (@loper='D') or  update(chng_cost)  exec audit_data 'BUDGCHNG','chng_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dchng_cost,@ichng_cost,@audit_data OUTPUT
      if (@loper='D') or  update(chng_by_name)  exec audit_data 'BUDGCHNG','chng_by_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dchng_by_name,@ichng_by_name,@audit_data OUTPUT
      if (@loper='D') or  update(status_code)  exec audit_data 'BUDGCHNG','status_code',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstatus_code,@istatus_code,@audit_data OUTPUT
      if (@loper='D') or  update(chng_descr)  exec audit_data 'BUDGCHNG','chng_descr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dchng_descr,@ichng_descr,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'BUDGCHNG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'BUDGCHNG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ibudg_chng_id,@iproj_id,@iwbs_id,@ichng_date,@ichng_short_name,@ichng_cost,@ichng_by_name,@istatus_code,@ichng_descr, @idelete_session_id;
    else
     fetch deleted_c into @dbudg_chng_id,@dproj_id,@dwbs_id,@dchng_date,@dchng_short_name,@dchng_cost,@dchng_by_name,@dstatus_code,@dchng_descr, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_CALENDAR
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_CALENDAR' AND xtype = 'TR')
    DROP trigger PRMAUD_CALENDAR

PRMAUD_CALENDAR
create trigger PRMAUD_CALENDAR
on CALENDAR
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iclndr_id varchar(255),@idefault_flag varchar(255),@iclndr_name varchar(255),@iproj_id varchar(255),@ibase_clndr_id varchar(255),@ilast_chng_date varchar(255),@iclndr_type varchar(255),@iday_hr_cnt varchar(255),@iweek_hr_cnt varchar(255),@iyear_hr_cnt varchar(255),@imonth_hr_cnt varchar(255)

  declare @dclndr_id varchar(255),@ddefault_flag varchar(255),@dclndr_name varchar(255),@dproj_id varchar(255),@dbase_clndr_id varchar(255),@dlast_chng_date varchar(255),@dclndr_type varchar(255),@dday_hr_cnt varchar(255),@dweek_hr_cnt varchar(255),@dyear_hr_cnt varchar(255),@dmonth_hr_cnt varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(clndr_id) and
			not update(default_flag) and
			not update(clndr_name) and
			not update(proj_id) and
			not update(base_clndr_id) and
			not update(last_chng_date) and
			not update(clndr_type) and
			not update(day_hr_cnt) and
			not update(week_hr_cnt) and
			not update(year_hr_cnt) and
			not update(month_hr_cnt) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'CALENDAR', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'CALENDAR',clndr_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'CALENDAR', clndr_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select clndr_id,default_flag,clndr_name,proj_id,base_clndr_id,last_chng_date,clndr_type,day_hr_cnt,week_hr_cnt,year_hr_cnt,month_hr_cnt
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select clndr_id,default_flag,clndr_name,proj_id,base_clndr_id,last_chng_date,clndr_type,day_hr_cnt,week_hr_cnt,year_hr_cnt,month_hr_cnt
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iclndr_id,@idefault_flag,@iclndr_name,@iproj_id,@ibase_clndr_id,@ilast_chng_date,@iclndr_type,@iday_hr_cnt,@iweek_hr_cnt,@iyear_hr_cnt,@imonth_hr_cnt, @idelete_session_id
  else
    fetch deleted_c into @dclndr_id,@ddefault_flag,@dclndr_name,@dproj_id,@dbase_clndr_id,@dlast_chng_date,@dclndr_type,@dday_hr_cnt,@dweek_hr_cnt,@dyear_hr_cnt,@dmonth_hr_cnt, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dclndr_id;
				

    end else begin
    	set @pk1 = @iclndr_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dclndr_id,@ddefault_flag,@dclndr_name,@dproj_id,@dbase_clndr_id,@dlast_chng_date,@dclndr_type,@dday_hr_cnt,@dweek_hr_cnt,@dyear_hr_cnt,@dmonth_hr_cnt, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(clndr_id)  exec audit_data 'CALENDAR','clndr_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dclndr_id,@iclndr_id,@audit_data OUTPUT
      if (@loper='D') or  update(default_flag)  exec audit_data 'CALENDAR','default_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddefault_flag,@idefault_flag,@audit_data OUTPUT
      if (@loper='D') or  update(clndr_name)  exec audit_data 'CALENDAR','clndr_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dclndr_name,@iclndr_name,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'CALENDAR','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(base_clndr_id)  exec audit_data 'CALENDAR','base_clndr_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_clndr_id,@ibase_clndr_id,@audit_data OUTPUT
      if (@loper='D') or  update(last_chng_date)  exec audit_data 'CALENDAR','last_chng_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlast_chng_date,@ilast_chng_date,@audit_data OUTPUT
      if (@loper='D') or  update(clndr_type)  exec audit_data 'CALENDAR','clndr_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dclndr_type,@iclndr_type,@audit_data OUTPUT
      if (@loper='D') or  update(day_hr_cnt)  exec audit_data 'CALENDAR','day_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dday_hr_cnt,@iday_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(week_hr_cnt)  exec audit_data 'CALENDAR','week_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dweek_hr_cnt,@iweek_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(year_hr_cnt)  exec audit_data 'CALENDAR','year_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dyear_hr_cnt,@iyear_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(month_hr_cnt)  exec audit_data 'CALENDAR','month_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmonth_hr_cnt,@imonth_hr_cnt,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'CALENDAR', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'CALENDAR', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iclndr_id,@idefault_flag,@iclndr_name,@iproj_id,@ibase_clndr_id,@ilast_chng_date,@iclndr_type,@iday_hr_cnt,@iweek_hr_cnt,@iyear_hr_cnt,@imonth_hr_cnt, @idelete_session_id;
    else
     fetch deleted_c into @dclndr_id,@ddefault_flag,@dclndr_name,@dproj_id,@dbase_clndr_id,@dlast_chng_date,@dclndr_type,@dday_hr_cnt,@dweek_hr_cnt,@dyear_hr_cnt,@dmonth_hr_cnt, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_COSTTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_COSTTYPE' AND xtype = 'TR')
    DROP trigger PRMAUD_COSTTYPE

PRMAUD_COSTTYPE
create trigger PRMAUD_COSTTYPE
on COSTTYPE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @icost_type_id varchar(255),@iseq_num varchar(255),@icost_type varchar(255)

  declare @dcost_type_id varchar(255),@dseq_num varchar(255),@dcost_type varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(cost_type_id) and
			not update(seq_num) and
			not update(cost_type) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'COSTTYPE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'COSTTYPE',cost_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'COSTTYPE', cost_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select cost_type_id,seq_num,cost_type
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select cost_type_id,seq_num,cost_type
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @icost_type_id,@iseq_num,@icost_type, @idelete_session_id
  else
    fetch deleted_c into @dcost_type_id,@dseq_num,@dcost_type, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dcost_type_id;
				

    end else begin
    	set @pk1 = @icost_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dcost_type_id,@dseq_num,@dcost_type, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(cost_type_id)  exec audit_data 'COSTTYPE','cost_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_type_id,@icost_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'COSTTYPE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(cost_type)  exec audit_data 'COSTTYPE','cost_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_type,@icost_type,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'COSTTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'COSTTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @icost_type_id,@iseq_num,@icost_type, @idelete_session_id;
    else
     fetch deleted_c into @dcost_type_id,@dseq_num,@dcost_type, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_CURRTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_CURRTYPE' AND xtype = 'TR')
    DROP trigger PRMAUD_CURRTYPE

PRMAUD_CURRTYPE
create trigger PRMAUD_CURRTYPE
on CURRTYPE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @icurr_id varchar(255),@idecimal_digit_cnt varchar(255),@icurr_symbol varchar(255),@idecimal_symbol varchar(255),@idigit_group_symbol varchar(255),@ipos_curr_fmt_type varchar(255),@ineg_curr_fmt_type varchar(255),@icurr_type varchar(255),@icurr_short_name varchar(255),@igroup_digit_cnt varchar(255),@ibase_exch_rate varchar(255)

  declare @dcurr_id varchar(255),@ddecimal_digit_cnt varchar(255),@dcurr_symbol varchar(255),@ddecimal_symbol varchar(255),@ddigit_group_symbol varchar(255),@dpos_curr_fmt_type varchar(255),@dneg_curr_fmt_type varchar(255),@dcurr_type varchar(255),@dcurr_short_name varchar(255),@dgroup_digit_cnt varchar(255),@dbase_exch_rate varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(curr_id) and
			not update(decimal_digit_cnt) and
			not update(curr_symbol) and
			not update(decimal_symbol) and
			not update(digit_group_symbol) and
			not update(pos_curr_fmt_type) and
			not update(neg_curr_fmt_type) and
			not update(curr_type) and
			not update(curr_short_name) and
			not update(group_digit_cnt) and
			not update(base_exch_rate) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'CURRTYPE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'CURRTYPE',curr_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'CURRTYPE', curr_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select curr_id,decimal_digit_cnt,curr_symbol,decimal_symbol,digit_group_symbol,pos_curr_fmt_type,neg_curr_fmt_type,curr_type,curr_short_name,group_digit_cnt,base_exch_rate
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select curr_id,decimal_digit_cnt,curr_symbol,decimal_symbol,digit_group_symbol,pos_curr_fmt_type,neg_curr_fmt_type,curr_type,curr_short_name,group_digit_cnt,base_exch_rate
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @icurr_id,@idecimal_digit_cnt,@icurr_symbol,@idecimal_symbol,@idigit_group_symbol,@ipos_curr_fmt_type,@ineg_curr_fmt_type,@icurr_type,@icurr_short_name,@igroup_digit_cnt,@ibase_exch_rate, @idelete_session_id
  else
    fetch deleted_c into @dcurr_id,@ddecimal_digit_cnt,@dcurr_symbol,@ddecimal_symbol,@ddigit_group_symbol,@dpos_curr_fmt_type,@dneg_curr_fmt_type,@dcurr_type,@dcurr_short_name,@dgroup_digit_cnt,@dbase_exch_rate, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dcurr_id;
				

    end else begin
    	set @pk1 = @icurr_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dcurr_id,@ddecimal_digit_cnt,@dcurr_symbol,@ddecimal_symbol,@ddigit_group_symbol,@dpos_curr_fmt_type,@dneg_curr_fmt_type,@dcurr_type,@dcurr_short_name,@dgroup_digit_cnt,@dbase_exch_rate, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(curr_id)  exec audit_data 'CURRTYPE','curr_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcurr_id,@icurr_id,@audit_data OUTPUT
      if (@loper='D') or  update(decimal_digit_cnt)  exec audit_data 'CURRTYPE','decimal_digit_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddecimal_digit_cnt,@idecimal_digit_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(curr_symbol)  exec audit_data 'CURRTYPE','curr_symbol',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcurr_symbol,@icurr_symbol,@audit_data OUTPUT
      if (@loper='D') or  update(decimal_symbol)  exec audit_data 'CURRTYPE','decimal_symbol',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddecimal_symbol,@idecimal_symbol,@audit_data OUTPUT
      if (@loper='D') or  update(digit_group_symbol)  exec audit_data 'CURRTYPE','digit_group_symbol',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddigit_group_symbol,@idigit_group_symbol,@audit_data OUTPUT
      if (@loper='D') or  update(pos_curr_fmt_type)  exec audit_data 'CURRTYPE','pos_curr_fmt_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpos_curr_fmt_type,@ipos_curr_fmt_type,@audit_data OUTPUT
      if (@loper='D') or  update(neg_curr_fmt_type)  exec audit_data 'CURRTYPE','neg_curr_fmt_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dneg_curr_fmt_type,@ineg_curr_fmt_type,@audit_data OUTPUT
      if (@loper='D') or  update(curr_type)  exec audit_data 'CURRTYPE','curr_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcurr_type,@icurr_type,@audit_data OUTPUT
      if (@loper='D') or  update(curr_short_name)  exec audit_data 'CURRTYPE','curr_short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcurr_short_name,@icurr_short_name,@audit_data OUTPUT
      if (@loper='D') or  update(group_digit_cnt)  exec audit_data 'CURRTYPE','group_digit_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dgroup_digit_cnt,@igroup_digit_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(base_exch_rate)  exec audit_data 'CURRTYPE','base_exch_rate',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_exch_rate,@ibase_exch_rate,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'CURRTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'CURRTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @icurr_id,@idecimal_digit_cnt,@icurr_symbol,@idecimal_symbol,@idigit_group_symbol,@ipos_curr_fmt_type,@ineg_curr_fmt_type,@icurr_type,@icurr_short_name,@igroup_digit_cnt,@ibase_exch_rate, @idelete_session_id;
    else
     fetch deleted_c into @dcurr_id,@ddecimal_digit_cnt,@dcurr_symbol,@ddecimal_symbol,@ddigit_group_symbol,@dpos_curr_fmt_type,@dneg_curr_fmt_type,@dcurr_type,@dcurr_short_name,@dgroup_digit_cnt,@dbase_exch_rate, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_DASHBOARD
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_DASHBOARD' AND xtype = 'TR')
    DROP trigger PRMAUD_DASHBOARD

PRMAUD_DASHBOARD
create trigger PRMAUD_DASHBOARD
on DASHBOARD
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @idashboard_id varchar(255),@idashboard_name varchar(255),@iuser_id varchar(255),@itable_name varchar(255),@ifk_id varchar(255),@ilock_filter_flag varchar(255),@imax_rows_per_portlet varchar(255),@idashboard_layout_data varchar(4000)

  declare @ddashboard_id varchar(255),@ddashboard_name varchar(255),@duser_id varchar(255),@dtable_name varchar(255),@dfk_id varchar(255),@dlock_filter_flag varchar(255),@dmax_rows_per_portlet varchar(255),@ddashboard_layout_data varchar(4000)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(dashboard_id) and
			not update(dashboard_name) and
			not update(user_id) and
			not update(table_name) and
			not update(fk_id) and
			not update(lock_filter_flag) and
			not update(max_rows_per_portlet) and
			not update(dashboard_layout_data) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'DASHBOARD', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'DASHBOARD',dashboard_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'DASHBOARD', dashboard_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select dashboard_id,dashboard_name,user_id,table_name,fk_id,lock_filter_flag,max_rows_per_portlet,dashboard_layout_data
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select dashboard_id,dashboard_name,user_id,table_name,fk_id,lock_filter_flag,max_rows_per_portlet,dashboard_layout_data
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @idashboard_id,@idashboard_name,@iuser_id,@itable_name,@ifk_id,@ilock_filter_flag,@imax_rows_per_portlet,@idashboard_layout_data, @idelete_session_id
  else
    fetch deleted_c into @ddashboard_id,@ddashboard_name,@duser_id,@dtable_name,@dfk_id,@dlock_filter_flag,@dmax_rows_per_portlet,@ddashboard_layout_data, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @ddashboard_id;
				

    end else begin
    	set @pk1 = @idashboard_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @ddashboard_id,@ddashboard_name,@duser_id,@dtable_name,@dfk_id,@dlock_filter_flag,@dmax_rows_per_portlet,@ddashboard_layout_data, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(dashboard_id)  exec audit_data 'DASHBOARD','dashboard_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddashboard_id,@idashboard_id,@audit_data OUTPUT
      if (@loper='D') or  update(dashboard_name)  exec audit_data 'DASHBOARD','dashboard_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddashboard_name,@idashboard_name,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'DASHBOARD','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(table_name)  exec audit_data 'DASHBOARD','table_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtable_name,@itable_name,@audit_data OUTPUT
      if (@loper='D') or  update(fk_id)  exec audit_data 'DASHBOARD','fk_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfk_id,@ifk_id,@audit_data OUTPUT
      if (@loper='D') or  update(lock_filter_flag)  exec audit_data 'DASHBOARD','lock_filter_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlock_filter_flag,@ilock_filter_flag,@audit_data OUTPUT
      if (@loper='D') or  update(max_rows_per_portlet)  exec audit_data 'DASHBOARD','max_rows_per_portlet',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_rows_per_portlet,@imax_rows_per_portlet,@audit_data OUTPUT
      if (@loper='D') or  update(dashboard_layout_data)  exec audit_data 'DASHBOARD','dashboard_layout_data',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddashboard_layout_data,@idashboard_layout_data,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'DASHBOARD', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'DASHBOARD', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @idashboard_id,@idashboard_name,@iuser_id,@itable_name,@ifk_id,@ilock_filter_flag,@imax_rows_per_portlet,@idashboard_layout_data, @idelete_session_id;
    else
     fetch deleted_c into @ddashboard_id,@ddashboard_name,@duser_id,@dtable_name,@dfk_id,@dlock_filter_flag,@dmax_rows_per_portlet,@ddashboard_layout_data, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_DASHUSER
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_DASHUSER' AND xtype = 'TR')
    DROP trigger PRMAUD_DASHUSER

PRMAUD_DASHUSER
create trigger PRMAUD_DASHUSER
on DASHUSER
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @idashboard_id varchar(255),@iuser_id varchar(255)

  declare @ddashboard_id varchar(255),@duser_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(dashboard_id) and
			not update(user_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'DASHUSER', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'DASHUSER',dashboard_id,user_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'DASHUSER', dashboard_id,user_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select dashboard_id,user_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select dashboard_id,user_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @idashboard_id,@iuser_id, @idelete_session_id
  else
    fetch deleted_c into @ddashboard_id,@duser_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @ddashboard_id;
				
set @pk2 = @duser_id;
				

    end else begin
    	set @pk1 = @idashboard_id;
				
set @pk2 = @iuser_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @ddashboard_id,@duser_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(dashboard_id)  exec audit_data 'DASHUSER','dashboard_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddashboard_id,@idashboard_id,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'DASHUSER','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'DASHUSER', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'DASHUSER', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @idashboard_id,@iuser_id, @idelete_session_id;
    else
     fetch deleted_c into @ddashboard_id,@duser_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_DOCCATG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_DOCCATG' AND xtype = 'TR')
    DROP trigger PRMAUD_DOCCATG

PRMAUD_DOCCATG
create trigger PRMAUD_DOCCATG
on DOCCATG
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @idoc_catg_id varchar(255),@iseq_num varchar(255),@idoc_catg_name varchar(255)

  declare @ddoc_catg_id varchar(255),@dseq_num varchar(255),@ddoc_catg_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(doc_catg_id) and
			not update(seq_num) and
			not update(doc_catg_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'DOCCATG', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'DOCCATG',doc_catg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'DOCCATG', doc_catg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select doc_catg_id,seq_num,doc_catg_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select doc_catg_id,seq_num,doc_catg_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @idoc_catg_id,@iseq_num,@idoc_catg_name, @idelete_session_id
  else
    fetch deleted_c into @ddoc_catg_id,@dseq_num,@ddoc_catg_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @ddoc_catg_id;
				

    end else begin
    	set @pk1 = @idoc_catg_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @ddoc_catg_id,@dseq_num,@ddoc_catg_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(doc_catg_id)  exec audit_data 'DOCCATG','doc_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_catg_id,@idoc_catg_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'DOCCATG','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(doc_catg_name)  exec audit_data 'DOCCATG','doc_catg_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_catg_name,@idoc_catg_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'DOCCATG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'DOCCATG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @idoc_catg_id,@iseq_num,@idoc_catg_name, @idelete_session_id;
    else
     fetch deleted_c into @ddoc_catg_id,@dseq_num,@ddoc_catg_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_DOCSTAT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_DOCSTAT' AND xtype = 'TR')
    DROP trigger PRMAUD_DOCSTAT

PRMAUD_DOCSTAT
create trigger PRMAUD_DOCSTAT
on DOCSTAT
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @idoc_status_id varchar(255),@iseq_num varchar(255),@idoc_status_code varchar(255)

  declare @ddoc_status_id varchar(255),@dseq_num varchar(255),@ddoc_status_code varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(doc_status_id) and
			not update(seq_num) and
			not update(doc_status_code) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'DOCSTAT', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'DOCSTAT',doc_status_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'DOCSTAT', doc_status_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select doc_status_id,seq_num,doc_status_code
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select doc_status_id,seq_num,doc_status_code
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @idoc_status_id,@iseq_num,@idoc_status_code, @idelete_session_id
  else
    fetch deleted_c into @ddoc_status_id,@dseq_num,@ddoc_status_code, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @ddoc_status_id;
				

    end else begin
    	set @pk1 = @idoc_status_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @ddoc_status_id,@dseq_num,@ddoc_status_code, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(doc_status_id)  exec audit_data 'DOCSTAT','doc_status_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_status_id,@idoc_status_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'DOCSTAT','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(doc_status_code)  exec audit_data 'DOCSTAT','doc_status_code',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_status_code,@idoc_status_code,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'DOCSTAT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'DOCSTAT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @idoc_status_id,@iseq_num,@idoc_status_code, @idelete_session_id;
    else
     fetch deleted_c into @ddoc_status_id,@dseq_num,@ddoc_status_code, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_DOCUMENT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_DOCUMENT' AND xtype = 'TR')
    DROP trigger PRMAUD_DOCUMENT

PRMAUD_DOCUMENT
create trigger PRMAUD_DOCUMENT
on DOCUMENT
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @idoc_id varchar(255),@idoc_seq_num varchar(255),@ideliv_flag varchar(255),@idoc_name varchar(255),@iparent_doc_id varchar(255),@iproj_id varchar(255),@idoc_status_id varchar(255),@idoc_catg_id varchar(255),@idoc_date varchar(255),@iversion_name varchar(255),@iguid varchar(255),@itmpl_guid varchar(255),@idoc_short_name varchar(255),@iauthor_name varchar(255),@iprivate_loc varchar(255),@ipublic_loc varchar(255),@irsrc_id varchar(255),@idoc_mgmt_type varchar(255),@iexternal_doc_key varchar(4000),@icr_external_doc_key varchar(4000)

  declare @ddoc_id varchar(255),@ddoc_seq_num varchar(255),@ddeliv_flag varchar(255),@ddoc_name varchar(255),@dparent_doc_id varchar(255),@dproj_id varchar(255),@ddoc_status_id varchar(255),@ddoc_catg_id varchar(255),@ddoc_date varchar(255),@dversion_name varchar(255),@dguid varchar(255),@dtmpl_guid varchar(255),@ddoc_short_name varchar(255),@dauthor_name varchar(255),@dprivate_loc varchar(255),@dpublic_loc varchar(255),@drsrc_id varchar(255),@ddoc_mgmt_type varchar(255),@dexternal_doc_key varchar(4000),@dcr_external_doc_key varchar(4000)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(doc_id) and
			not update(doc_seq_num) and
			not update(deliv_flag) and
			not update(doc_name) and
			not update(parent_doc_id) and
			not update(proj_id) and
			not update(doc_status_id) and
			not update(doc_catg_id) and
			not update(doc_date) and
			not update(version_name) and
			not update(guid) and
			not update(tmpl_guid) and
			not update(doc_short_name) and
			not update(author_name) and
			not update(private_loc) and
			not update(public_loc) and
			not update(rsrc_id) and
			not update(doc_mgmt_type) and
			not update(external_doc_key) and
			not update(cr_external_doc_key) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'DOCUMENT', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'DOCUMENT',doc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'DOCUMENT', doc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select doc_id,doc_seq_num,deliv_flag,doc_name,parent_doc_id,proj_id,doc_status_id,doc_catg_id,doc_date,version_name,guid,tmpl_guid,doc_short_name,author_name,private_loc,public_loc,rsrc_id,doc_mgmt_type,external_doc_key,cr_external_doc_key
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select doc_id,doc_seq_num,deliv_flag,doc_name,parent_doc_id,proj_id,doc_status_id,doc_catg_id,doc_date,version_name,guid,tmpl_guid,doc_short_name,author_name,private_loc,public_loc,rsrc_id,doc_mgmt_type,external_doc_key,cr_external_doc_key
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @idoc_id,@idoc_seq_num,@ideliv_flag,@idoc_name,@iparent_doc_id,@iproj_id,@idoc_status_id,@idoc_catg_id,@idoc_date,@iversion_name,@iguid,@itmpl_guid,@idoc_short_name,@iauthor_name,@iprivate_loc,@ipublic_loc,@irsrc_id,@idoc_mgmt_type,@iexternal_doc_key,@icr_external_doc_key, @idelete_session_id
  else
    fetch deleted_c into @ddoc_id,@ddoc_seq_num,@ddeliv_flag,@ddoc_name,@dparent_doc_id,@dproj_id,@ddoc_status_id,@ddoc_catg_id,@ddoc_date,@dversion_name,@dguid,@dtmpl_guid,@ddoc_short_name,@dauthor_name,@dprivate_loc,@dpublic_loc,@drsrc_id,@ddoc_mgmt_type,@dexternal_doc_key,@dcr_external_doc_key, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @ddoc_id;
				

    end else begin
    	set @pk1 = @idoc_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @ddoc_id,@ddoc_seq_num,@ddeliv_flag,@ddoc_name,@dparent_doc_id,@dproj_id,@ddoc_status_id,@ddoc_catg_id,@ddoc_date,@dversion_name,@dguid,@dtmpl_guid,@ddoc_short_name,@dauthor_name,@dprivate_loc,@dpublic_loc,@drsrc_id,@ddoc_mgmt_type,@dexternal_doc_key,@dcr_external_doc_key, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(doc_id)  exec audit_data 'DOCUMENT','doc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_id,@idoc_id,@audit_data OUTPUT
      if (@loper='D') or  update(doc_seq_num)  exec audit_data 'DOCUMENT','doc_seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_seq_num,@idoc_seq_num,@audit_data OUTPUT
      if (@loper='D') or  update(deliv_flag)  exec audit_data 'DOCUMENT','deliv_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddeliv_flag,@ideliv_flag,@audit_data OUTPUT
      if (@loper='D') or  update(doc_name)  exec audit_data 'DOCUMENT','doc_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_name,@idoc_name,@audit_data OUTPUT
      if (@loper='D') or  update(parent_doc_id)  exec audit_data 'DOCUMENT','parent_doc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_doc_id,@iparent_doc_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'DOCUMENT','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(doc_status_id)  exec audit_data 'DOCUMENT','doc_status_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_status_id,@idoc_status_id,@audit_data OUTPUT
      if (@loper='D') or  update(doc_catg_id)  exec audit_data 'DOCUMENT','doc_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_catg_id,@idoc_catg_id,@audit_data OUTPUT
      if (@loper='D') or  update(doc_date)  exec audit_data 'DOCUMENT','doc_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_date,@idoc_date,@audit_data OUTPUT
      if (@loper='D') or  update(version_name)  exec audit_data 'DOCUMENT','version_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dversion_name,@iversion_name,@audit_data OUTPUT
      if (@loper='D') or  update(guid)  exec audit_data 'DOCUMENT','guid',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dguid,@iguid,@audit_data OUTPUT
      if (@loper='D') or  update(tmpl_guid)  exec audit_data 'DOCUMENT','tmpl_guid',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtmpl_guid,@itmpl_guid,@audit_data OUTPUT
      if (@loper='D') or  update(doc_short_name)  exec audit_data 'DOCUMENT','doc_short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_short_name,@idoc_short_name,@audit_data OUTPUT
      if (@loper='D') or  update(author_name)  exec audit_data 'DOCUMENT','author_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dauthor_name,@iauthor_name,@audit_data OUTPUT
      if (@loper='D') or  update(private_loc)  exec audit_data 'DOCUMENT','private_loc',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprivate_loc,@iprivate_loc,@audit_data OUTPUT
      if (@loper='D') or  update(public_loc)  exec audit_data 'DOCUMENT','public_loc',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpublic_loc,@ipublic_loc,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'DOCUMENT','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(doc_mgmt_type)  exec audit_data 'DOCUMENT','doc_mgmt_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_mgmt_type,@idoc_mgmt_type,@audit_data OUTPUT
      if (@loper='D') or  update(external_doc_key)  exec audit_data 'DOCUMENT','external_doc_key',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dexternal_doc_key,@iexternal_doc_key,@audit_data OUTPUT
      if (@loper='D') or  update(cr_external_doc_key)  exec audit_data 'DOCUMENT','cr_external_doc_key',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcr_external_doc_key,@icr_external_doc_key,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'DOCUMENT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'DOCUMENT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @idoc_id,@idoc_seq_num,@ideliv_flag,@idoc_name,@iparent_doc_id,@iproj_id,@idoc_status_id,@idoc_catg_id,@idoc_date,@iversion_name,@iguid,@itmpl_guid,@idoc_short_name,@iauthor_name,@iprivate_loc,@ipublic_loc,@irsrc_id,@idoc_mgmt_type,@iexternal_doc_key,@icr_external_doc_key, @idelete_session_id;
    else
     fetch deleted_c into @ddoc_id,@ddoc_seq_num,@ddeliv_flag,@ddoc_name,@dparent_doc_id,@dproj_id,@ddoc_status_id,@ddoc_catg_id,@ddoc_date,@dversion_name,@dguid,@dtmpl_guid,@ddoc_short_name,@dauthor_name,@dprivate_loc,@dpublic_loc,@drsrc_id,@ddoc_mgmt_type,@dexternal_doc_key,@dcr_external_doc_key, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_EXTAPP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_EXTAPP' AND xtype = 'TR')
    DROP trigger PRMAUD_EXTAPP

PRMAUD_EXTAPP
create trigger PRMAUD_EXTAPP
on EXTAPP
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iapp_id varchar(255),@ilogin_supply_flag varchar(255),@iapp_name varchar(255),@iapp_exe_name varchar(255),@iproj_id varchar(255),@iapp_user_name varchar(255),@iapp_passwd varchar(255),@iapp_data_name varchar(255),@iapp_parm_string varchar(255),@iapp_data_loc varchar(255)

  declare @dapp_id varchar(255),@dlogin_supply_flag varchar(255),@dapp_name varchar(255),@dapp_exe_name varchar(255),@dproj_id varchar(255),@dapp_user_name varchar(255),@dapp_passwd varchar(255),@dapp_data_name varchar(255),@dapp_parm_string varchar(255),@dapp_data_loc varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(app_id) and
			not update(login_supply_flag) and
			not update(app_name) and
			not update(app_exe_name) and
			not update(proj_id) and
			not update(app_user_name) and
			not update(app_passwd) and
			not update(app_data_name) and
			not update(app_parm_string) and
			not update(app_data_loc) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'EXTAPP', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'EXTAPP',app_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'EXTAPP', app_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select app_id,login_supply_flag,app_name,app_exe_name,proj_id,app_user_name,app_passwd,app_data_name,app_parm_string,app_data_loc
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select app_id,login_supply_flag,app_name,app_exe_name,proj_id,app_user_name,app_passwd,app_data_name,app_parm_string,app_data_loc
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iapp_id,@ilogin_supply_flag,@iapp_name,@iapp_exe_name,@iproj_id,@iapp_user_name,@iapp_passwd,@iapp_data_name,@iapp_parm_string,@iapp_data_loc, @idelete_session_id
  else
    fetch deleted_c into @dapp_id,@dlogin_supply_flag,@dapp_name,@dapp_exe_name,@dproj_id,@dapp_user_name,@dapp_passwd,@dapp_data_name,@dapp_parm_string,@dapp_data_loc, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dapp_id;
				

    end else begin
    	set @pk1 = @iapp_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dapp_id,@dlogin_supply_flag,@dapp_name,@dapp_exe_name,@dproj_id,@dapp_user_name,@dapp_passwd,@dapp_data_name,@dapp_parm_string,@dapp_data_loc, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(app_id)  exec audit_data 'EXTAPP','app_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dapp_id,@iapp_id,@audit_data OUTPUT
      if (@loper='D') or  update(login_supply_flag)  exec audit_data 'EXTAPP','login_supply_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlogin_supply_flag,@ilogin_supply_flag,@audit_data OUTPUT
      if (@loper='D') or  update(app_name)  exec audit_data 'EXTAPP','app_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dapp_name,@iapp_name,@audit_data OUTPUT
      if (@loper='D') or  update(app_exe_name)  exec audit_data 'EXTAPP','app_exe_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dapp_exe_name,@iapp_exe_name,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'EXTAPP','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(app_user_name)  exec audit_data 'EXTAPP','app_user_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dapp_user_name,@iapp_user_name,@audit_data OUTPUT
      if (@loper='D') or  update(app_passwd)  exec audit_data 'EXTAPP','app_passwd',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dapp_passwd,@iapp_passwd,@audit_data OUTPUT
      if (@loper='D') or  update(app_data_name)  exec audit_data 'EXTAPP','app_data_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dapp_data_name,@iapp_data_name,@audit_data OUTPUT
      if (@loper='D') or  update(app_parm_string)  exec audit_data 'EXTAPP','app_parm_string',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dapp_parm_string,@iapp_parm_string,@audit_data OUTPUT
      if (@loper='D') or  update(app_data_loc)  exec audit_data 'EXTAPP','app_data_loc',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dapp_data_loc,@iapp_data_loc,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'EXTAPP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'EXTAPP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iapp_id,@ilogin_supply_flag,@iapp_name,@iapp_exe_name,@iproj_id,@iapp_user_name,@iapp_passwd,@iapp_data_name,@iapp_parm_string,@iapp_data_loc, @idelete_session_id;
    else
     fetch deleted_c into @dapp_id,@dlogin_supply_flag,@dapp_name,@dapp_exe_name,@dproj_id,@dapp_user_name,@dapp_passwd,@dapp_data_name,@dapp_parm_string,@dapp_data_loc, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_EXPPROJ
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_EXPPROJ' AND xtype = 'TR')
    DROP trigger PRMAUD_EXPPROJ

PRMAUD_EXPPROJ
create trigger PRMAUD_EXPPROJ
on EXPPROJ
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iproj_id varchar(255),@iexp_group varchar(255),@iexp_proj_name varchar(255),@ilogin_supplied_flag varchar(255),@iexp_user_name varchar(255),@iexp_passwd varchar(255)

  declare @dproj_id varchar(255),@dexp_group varchar(255),@dexp_proj_name varchar(255),@dlogin_supplied_flag varchar(255),@dexp_user_name varchar(255),@dexp_passwd varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(proj_id) and
			not update(exp_group) and
			not update(exp_proj_name) and
			not update(login_supplied_flag) and
			not update(exp_user_name) and
			not update(exp_passwd) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'EXPPROJ', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'EXPPROJ',proj_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'EXPPROJ', proj_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select proj_id,exp_group,exp_proj_name,login_supplied_flag,exp_user_name,exp_passwd
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select proj_id,exp_group,exp_proj_name,login_supplied_flag,exp_user_name,exp_passwd
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iproj_id,@iexp_group,@iexp_proj_name,@ilogin_supplied_flag,@iexp_user_name,@iexp_passwd, @idelete_session_id
  else
    fetch deleted_c into @dproj_id,@dexp_group,@dexp_proj_name,@dlogin_supplied_flag,@dexp_user_name,@dexp_passwd, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dproj_id;
				

    end else begin
    	set @pk1 = @iproj_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dproj_id,@dexp_group,@dexp_proj_name,@dlogin_supplied_flag,@dexp_user_name,@dexp_passwd, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(proj_id)  exec audit_data 'EXPPROJ','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(exp_group)  exec audit_data 'EXPPROJ','exp_group',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dexp_group,@iexp_group,@audit_data OUTPUT
      if (@loper='D') or  update(exp_proj_name)  exec audit_data 'EXPPROJ','exp_proj_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dexp_proj_name,@iexp_proj_name,@audit_data OUTPUT
      if (@loper='D') or  update(login_supplied_flag)  exec audit_data 'EXPPROJ','login_supplied_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlogin_supplied_flag,@ilogin_supplied_flag,@audit_data OUTPUT
      if (@loper='D') or  update(exp_user_name)  exec audit_data 'EXPPROJ','exp_user_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dexp_user_name,@iexp_user_name,@audit_data OUTPUT
      if (@loper='D') or  update(exp_passwd)  exec audit_data 'EXPPROJ','exp_passwd',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dexp_passwd,@iexp_passwd,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'EXPPROJ', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'EXPPROJ', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iproj_id,@iexp_group,@iexp_proj_name,@ilogin_supplied_flag,@iexp_user_name,@iexp_passwd, @idelete_session_id;
    else
     fetch deleted_c into @dproj_id,@dexp_group,@dexp_proj_name,@dlogin_supplied_flag,@dexp_user_name,@dexp_passwd, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_FACTOR
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_FACTOR' AND xtype = 'TR')
    DROP trigger PRMAUD_FACTOR

PRMAUD_FACTOR
create trigger PRMAUD_FACTOR
on FACTOR
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ifact_id varchar(255),@ifact_seq_num varchar(255),@ifact_type varchar(255),@ifact_name varchar(255),@idef_fact_val_id varchar(255)

  declare @dfact_id varchar(255),@dfact_seq_num varchar(255),@dfact_type varchar(255),@dfact_name varchar(255),@ddef_fact_val_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(fact_id) and
			not update(fact_seq_num) and
			not update(fact_type) and
			not update(fact_name) and
			not update(def_fact_val_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'FACTOR', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FACTOR',fact_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FACTOR', fact_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select fact_id,fact_seq_num,fact_type,fact_name,def_fact_val_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select fact_id,fact_seq_num,fact_type,fact_name,def_fact_val_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ifact_id,@ifact_seq_num,@ifact_type,@ifact_name,@idef_fact_val_id, @idelete_session_id
  else
    fetch deleted_c into @dfact_id,@dfact_seq_num,@dfact_type,@dfact_name,@ddef_fact_val_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dfact_id;
				

    end else begin
    	set @pk1 = @ifact_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dfact_id,@dfact_seq_num,@dfact_type,@dfact_name,@ddef_fact_val_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(fact_id)  exec audit_data 'FACTOR','fact_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_id,@ifact_id,@audit_data OUTPUT
      if (@loper='D') or  update(fact_seq_num)  exec audit_data 'FACTOR','fact_seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_seq_num,@ifact_seq_num,@audit_data OUTPUT
      if (@loper='D') or  update(fact_type)  exec audit_data 'FACTOR','fact_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_type,@ifact_type,@audit_data OUTPUT
      if (@loper='D') or  update(fact_name)  exec audit_data 'FACTOR','fact_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_name,@ifact_name,@audit_data OUTPUT
      if (@loper='D') or  update(def_fact_val_id)  exec audit_data 'FACTOR','def_fact_val_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddef_fact_val_id,@idef_fact_val_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'FACTOR', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'FACTOR', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ifact_id,@ifact_seq_num,@ifact_type,@ifact_name,@idef_fact_val_id, @idelete_session_id;
    else
     fetch deleted_c into @dfact_id,@dfact_seq_num,@dfact_type,@dfact_name,@ddef_fact_val_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_FACTVAL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_FACTVAL' AND xtype = 'TR')
    DROP trigger PRMAUD_FACTVAL

PRMAUD_FACTVAL
create trigger PRMAUD_FACTVAL
on FACTVAL
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ifact_val_id varchar(255),@ifact_id varchar(255),@ifact_value varchar(255),@ifact_value_descr varchar(255)

  declare @dfact_val_id varchar(255),@dfact_id varchar(255),@dfact_value varchar(255),@dfact_value_descr varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(fact_val_id) and
			not update(fact_id) and
			not update(fact_value) and
			not update(fact_value_descr) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'FACTVAL', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FACTVAL',fact_val_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FACTVAL', fact_val_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select fact_val_id,fact_id,fact_value,fact_value_descr
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select fact_val_id,fact_id,fact_value,fact_value_descr
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ifact_val_id,@ifact_id,@ifact_value,@ifact_value_descr, @idelete_session_id
  else
    fetch deleted_c into @dfact_val_id,@dfact_id,@dfact_value,@dfact_value_descr, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dfact_val_id;
				

    end else begin
    	set @pk1 = @ifact_val_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dfact_val_id,@dfact_id,@dfact_value,@dfact_value_descr, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(fact_val_id)  exec audit_data 'FACTVAL','fact_val_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_val_id,@ifact_val_id,@audit_data OUTPUT
      if (@loper='D') or  update(fact_id)  exec audit_data 'FACTVAL','fact_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_id,@ifact_id,@audit_data OUTPUT
      if (@loper='D') or  update(fact_value)  exec audit_data 'FACTVAL','fact_value',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_value,@ifact_value,@audit_data OUTPUT
      if (@loper='D') or  update(fact_value_descr)  exec audit_data 'FACTVAL','fact_value_descr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfact_value_descr,@ifact_value_descr,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'FACTVAL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'FACTVAL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ifact_val_id,@ifact_id,@ifact_value,@ifact_value_descr, @idelete_session_id;
    else
     fetch deleted_c into @dfact_val_id,@dfact_id,@dfact_value,@dfact_value_descr, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_FILTPROP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_FILTPROP' AND xtype = 'TR')
    DROP trigger PRMAUD_FILTPROP

PRMAUD_FILTPROP
create trigger PRMAUD_FILTPROP
on FILTPROP
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ifilter_id varchar(255),@itable_name varchar(255),@ifilter_type varchar(255),@ifilter_name varchar(255),@iuser_id varchar(255)

  declare @dfilter_id varchar(255),@dtable_name varchar(255),@dfilter_type varchar(255),@dfilter_name varchar(255),@duser_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(filter_id) and
			not update(table_name) and
			not update(filter_type) and
			not update(filter_name) and
			not update(user_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'FILTPROP', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FILTPROP',filter_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FILTPROP', filter_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select filter_id,table_name,filter_type,filter_name,user_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select filter_id,table_name,filter_type,filter_name,user_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ifilter_id,@itable_name,@ifilter_type,@ifilter_name,@iuser_id, @idelete_session_id
  else
    fetch deleted_c into @dfilter_id,@dtable_name,@dfilter_type,@dfilter_name,@duser_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dfilter_id;
				

    end else begin
    	set @pk1 = @ifilter_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dfilter_id,@dtable_name,@dfilter_type,@dfilter_name,@duser_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(filter_id)  exec audit_data 'FILTPROP','filter_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfilter_id,@ifilter_id,@audit_data OUTPUT
      if (@loper='D') or  update(table_name)  exec audit_data 'FILTPROP','table_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtable_name,@itable_name,@audit_data OUTPUT
      if (@loper='D') or  update(filter_type)  exec audit_data 'FILTPROP','filter_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfilter_type,@ifilter_type,@audit_data OUTPUT
      if (@loper='D') or  update(filter_name)  exec audit_data 'FILTPROP','filter_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfilter_name,@ifilter_name,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'FILTPROP','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'FILTPROP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'FILTPROP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ifilter_id,@itable_name,@ifilter_type,@ifilter_name,@iuser_id, @idelete_session_id;
    else
     fetch deleted_c into @dfilter_id,@dtable_name,@dfilter_type,@dfilter_name,@duser_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_FINDATES
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_FINDATES' AND xtype = 'TR')
    DROP trigger PRMAUD_FINDATES

PRMAUD_FINDATES
create trigger PRMAUD_FINDATES
on FINDATES
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ifin_dates_id varchar(255),@ifin_dates_name varchar(255),@istart_date varchar(255),@iend_date varchar(255)

  declare @dfin_dates_id varchar(255),@dfin_dates_name varchar(255),@dstart_date varchar(255),@dend_date varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(fin_dates_id) and
			not update(fin_dates_name) and
			not update(start_date) and
			not update(end_date) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'FINDATES', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FINDATES',fin_dates_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FINDATES', fin_dates_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select fin_dates_id,fin_dates_name,start_date,end_date
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select fin_dates_id,fin_dates_name,start_date,end_date
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ifin_dates_id,@ifin_dates_name,@istart_date,@iend_date, @idelete_session_id
  else
    fetch deleted_c into @dfin_dates_id,@dfin_dates_name,@dstart_date,@dend_date, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dfin_dates_id;
				

    end else begin
    	set @pk1 = @ifin_dates_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dfin_dates_id,@dfin_dates_name,@dstart_date,@dend_date, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(fin_dates_id)  exec audit_data 'FINDATES','fin_dates_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfin_dates_id,@ifin_dates_id,@audit_data OUTPUT
      if (@loper='D') or  update(fin_dates_name)  exec audit_data 'FINDATES','fin_dates_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfin_dates_name,@ifin_dates_name,@audit_data OUTPUT
      if (@loper='D') or  update(start_date)  exec audit_data 'FINDATES','start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstart_date,@istart_date,@audit_data OUTPUT
      if (@loper='D') or  update(end_date)  exec audit_data 'FINDATES','end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dend_date,@iend_date,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'FINDATES', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'FINDATES', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ifin_dates_id,@ifin_dates_name,@istart_date,@iend_date, @idelete_session_id;
    else
     fetch deleted_c into @dfin_dates_id,@dfin_dates_name,@dstart_date,@dend_date, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_FORMCATG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_FORMCATG' AND xtype = 'TR')
    DROP trigger PRMAUD_FORMCATG

PRMAUD_FORMCATG
create trigger PRMAUD_FORMCATG
on FORMCATG
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iform_catg_id varchar(255),@iform_catg_name varchar(255)

  declare @dform_catg_id varchar(255),@dform_catg_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(form_catg_id) and
			not update(form_catg_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'FORMCATG', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FORMCATG',form_catg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FORMCATG', form_catg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select form_catg_id,form_catg_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select form_catg_id,form_catg_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iform_catg_id,@iform_catg_name, @idelete_session_id
  else
    fetch deleted_c into @dform_catg_id,@dform_catg_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dform_catg_id;
				

    end else begin
    	set @pk1 = @iform_catg_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dform_catg_id,@dform_catg_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(form_catg_id)  exec audit_data 'FORMCATG','form_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dform_catg_id,@iform_catg_id,@audit_data OUTPUT
      if (@loper='D') or  update(form_catg_name)  exec audit_data 'FORMCATG','form_catg_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dform_catg_name,@iform_catg_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'FORMCATG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'FORMCATG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iform_catg_id,@iform_catg_name, @idelete_session_id;
    else
     fetch deleted_c into @dform_catg_id,@dform_catg_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_FORMPROJ
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_FORMPROJ' AND xtype = 'TR')
    DROP trigger PRMAUD_FORMPROJ

PRMAUD_FORMPROJ
create trigger PRMAUD_FORMPROJ
on FORMPROJ
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iform_tmpl_id varchar(255),@iproj_id varchar(255)

  declare @dform_tmpl_id varchar(255),@dproj_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(form_tmpl_id) and
			not update(proj_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'FORMPROJ', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FORMPROJ',form_tmpl_id,proj_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FORMPROJ', form_tmpl_id,proj_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select form_tmpl_id,proj_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select form_tmpl_id,proj_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iform_tmpl_id,@iproj_id, @idelete_session_id
  else
    fetch deleted_c into @dform_tmpl_id,@dproj_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dform_tmpl_id;
				
set @pk2 = @dproj_id;
				

    end else begin
    	set @pk1 = @iform_tmpl_id;
				
set @pk2 = @iproj_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dform_tmpl_id,@dproj_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(form_tmpl_id)  exec audit_data 'FORMPROJ','form_tmpl_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dform_tmpl_id,@iform_tmpl_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'FORMPROJ','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'FORMPROJ', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'FORMPROJ', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iform_tmpl_id,@iproj_id, @idelete_session_id;
    else
     fetch deleted_c into @dform_tmpl_id,@dproj_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_FORMTMPL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_FORMTMPL' AND xtype = 'TR')
    DROP trigger PRMAUD_FORMTMPL

PRMAUD_FORMTMPL
create trigger PRMAUD_FORMTMPL
on FORMTMPL
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iform_tmpl_id varchar(255),@iform_tmpl_name varchar(255),@iform_tmpl_desc varchar(4000),@iform_catg_id varchar(255)

  declare @dform_tmpl_id varchar(255),@dform_tmpl_name varchar(255),@dform_tmpl_desc varchar(4000),@dform_catg_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(form_tmpl_id) and
			not update(form_tmpl_name) and
			not update(form_tmpl_desc) and
			not update(form_catg_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'FORMTMPL', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FORMTMPL',form_tmpl_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FORMTMPL', form_tmpl_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select form_tmpl_id,form_tmpl_name,form_tmpl_desc,form_catg_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select form_tmpl_id,form_tmpl_name,form_tmpl_desc,form_catg_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iform_tmpl_id,@iform_tmpl_name,@iform_tmpl_desc,@iform_catg_id, @idelete_session_id
  else
    fetch deleted_c into @dform_tmpl_id,@dform_tmpl_name,@dform_tmpl_desc,@dform_catg_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dform_tmpl_id;
				

    end else begin
    	set @pk1 = @iform_tmpl_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dform_tmpl_id,@dform_tmpl_name,@dform_tmpl_desc,@dform_catg_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(form_tmpl_id)  exec audit_data 'FORMTMPL','form_tmpl_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dform_tmpl_id,@iform_tmpl_id,@audit_data OUTPUT
      if (@loper='D') or  update(form_tmpl_name)  exec audit_data 'FORMTMPL','form_tmpl_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dform_tmpl_name,@iform_tmpl_name,@audit_data OUTPUT
      if (@loper='D') or  update(form_tmpl_desc)  exec audit_data 'FORMTMPL','form_tmpl_desc',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dform_tmpl_desc,@iform_tmpl_desc,@audit_data OUTPUT
      if (@loper='D') or  update(form_catg_id)  exec audit_data 'FORMTMPL','form_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dform_catg_id,@iform_catg_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'FORMTMPL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'FORMTMPL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iform_tmpl_id,@iform_tmpl_name,@iform_tmpl_desc,@iform_catg_id, @idelete_session_id;
    else
     fetch deleted_c into @dform_tmpl_id,@dform_tmpl_name,@dform_tmpl_desc,@dform_catg_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_FUNDSRC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_FUNDSRC' AND xtype = 'TR')
    DROP trigger PRMAUD_FUNDSRC

PRMAUD_FUNDSRC
create trigger PRMAUD_FUNDSRC
on FUNDSRC
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ifund_id varchar(255),@iseq_num varchar(255),@ifund_name varchar(255),@iparent_fund_id varchar(255)

  declare @dfund_id varchar(255),@dseq_num varchar(255),@dfund_name varchar(255),@dparent_fund_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(fund_id) and
			not update(seq_num) and
			not update(fund_name) and
			not update(parent_fund_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'FUNDSRC', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FUNDSRC',fund_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'FUNDSRC', fund_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select fund_id,seq_num,fund_name,parent_fund_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select fund_id,seq_num,fund_name,parent_fund_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ifund_id,@iseq_num,@ifund_name,@iparent_fund_id, @idelete_session_id
  else
    fetch deleted_c into @dfund_id,@dseq_num,@dfund_name,@dparent_fund_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dfund_id;
				

    end else begin
    	set @pk1 = @ifund_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dfund_id,@dseq_num,@dfund_name,@dparent_fund_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(fund_id)  exec audit_data 'FUNDSRC','fund_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfund_id,@ifund_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'FUNDSRC','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(fund_name)  exec audit_data 'FUNDSRC','fund_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfund_name,@ifund_name,@audit_data OUTPUT
      if (@loper='D') or  update(parent_fund_id)  exec audit_data 'FUNDSRC','parent_fund_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_fund_id,@iparent_fund_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'FUNDSRC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'FUNDSRC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ifund_id,@iseq_num,@ifund_name,@iparent_fund_id, @idelete_session_id;
    else
     fetch deleted_c into @dfund_id,@dseq_num,@dfund_name,@dparent_fund_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_GCHANGE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_GCHANGE' AND xtype = 'TR')
    DROP trigger PRMAUD_GCHANGE

PRMAUD_GCHANGE
create trigger PRMAUD_GCHANGE
on GCHANGE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @igchange_id varchar(255),@igchange_name varchar(255),@iuser_id varchar(255),@itable_name varchar(255)

  declare @dgchange_id varchar(255),@dgchange_name varchar(255),@duser_id varchar(255),@dtable_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(gchange_id) and
			not update(gchange_name) and
			not update(user_id) and
			not update(table_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'GCHANGE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'GCHANGE',gchange_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'GCHANGE', gchange_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select gchange_id,gchange_name,user_id,table_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select gchange_id,gchange_name,user_id,table_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @igchange_id,@igchange_name,@iuser_id,@itable_name, @idelete_session_id
  else
    fetch deleted_c into @dgchange_id,@dgchange_name,@duser_id,@dtable_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dgchange_id;
				

    end else begin
    	set @pk1 = @igchange_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dgchange_id,@dgchange_name,@duser_id,@dtable_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(gchange_id)  exec audit_data 'GCHANGE','gchange_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dgchange_id,@igchange_id,@audit_data OUTPUT
      if (@loper='D') or  update(gchange_name)  exec audit_data 'GCHANGE','gchange_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dgchange_name,@igchange_name,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'GCHANGE','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(table_name)  exec audit_data 'GCHANGE','table_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtable_name,@itable_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'GCHANGE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'GCHANGE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @igchange_id,@igchange_name,@iuser_id,@itable_name, @idelete_session_id;
    else
     fetch deleted_c into @dgchange_id,@dgchange_name,@duser_id,@dtable_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_ISSUHIST
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_ISSUHIST' AND xtype = 'TR')
    DROP trigger PRMAUD_ISSUHIST

PRMAUD_ISSUHIST
create trigger PRMAUD_ISSUHIST
on ISSUHIST
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iissue_id varchar(255),@iproj_id varchar(255)

  declare @dissue_id varchar(255),@dproj_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(issue_id) and
			not update(proj_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'ISSUHIST', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ISSUHIST',issue_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ISSUHIST', issue_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select issue_id,proj_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select issue_id,proj_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iissue_id,@iproj_id, @idelete_session_id
  else
    fetch deleted_c into @dissue_id,@dproj_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dissue_id;
				

    end else begin
    	set @pk1 = @iissue_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dissue_id,@dproj_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(issue_id)  exec audit_data 'ISSUHIST','issue_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dissue_id,@iissue_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'ISSUHIST','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'ISSUHIST', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'ISSUHIST', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iissue_id,@iproj_id, @idelete_session_id;
    else
     fetch deleted_c into @dissue_id,@dproj_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_ITERATION
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_ITERATION' AND xtype = 'TR')
    DROP trigger PRMAUD_ITERATION

PRMAUD_ITERATION
create trigger PRMAUD_ITERATION
on ITERATION
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iiteration_id varchar(255),@irelease_id varchar(255),@iiteration_name varchar(255),@istart_date varchar(255),@iend_date varchar(255),@itermination_date varchar(255),@icapacity_pct varchar(255),@iremain_qty varchar(255)

  declare @diteration_id varchar(255),@drelease_id varchar(255),@diteration_name varchar(255),@dstart_date varchar(255),@dend_date varchar(255),@dtermination_date varchar(255),@dcapacity_pct varchar(255),@dremain_qty varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(iteration_id) and
			not update(release_id) and
			not update(iteration_name) and
			not update(start_date) and
			not update(end_date) and
			not update(termination_date) and
			not update(capacity_pct) and
			not update(remain_qty) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'ITERATION', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ITERATION',iteration_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ITERATION', iteration_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select iteration_id,release_id,iteration_name,start_date,end_date,termination_date,capacity_pct,remain_qty
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select iteration_id,release_id,iteration_name,start_date,end_date,termination_date,capacity_pct,remain_qty
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iiteration_id,@irelease_id,@iiteration_name,@istart_date,@iend_date,@itermination_date,@icapacity_pct,@iremain_qty, @idelete_session_id
  else
    fetch deleted_c into @diteration_id,@drelease_id,@diteration_name,@dstart_date,@dend_date,@dtermination_date,@dcapacity_pct,@dremain_qty, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @diteration_id;
				

    end else begin
    	set @pk1 = @iiteration_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @diteration_id,@drelease_id,@diteration_name,@dstart_date,@dend_date,@dtermination_date,@dcapacity_pct,@dremain_qty, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(iteration_id)  exec audit_data 'ITERATION','iteration_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@diteration_id,@iiteration_id,@audit_data OUTPUT
      if (@loper='D') or  update(release_id)  exec audit_data 'ITERATION','release_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drelease_id,@irelease_id,@audit_data OUTPUT
      if (@loper='D') or  update(iteration_name)  exec audit_data 'ITERATION','iteration_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@diteration_name,@iiteration_name,@audit_data OUTPUT
      if (@loper='D') or  update(start_date)  exec audit_data 'ITERATION','start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstart_date,@istart_date,@audit_data OUTPUT
      if (@loper='D') or  update(end_date)  exec audit_data 'ITERATION','end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dend_date,@iend_date,@audit_data OUTPUT
      if (@loper='D') or  update(termination_date)  exec audit_data 'ITERATION','termination_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtermination_date,@itermination_date,@audit_data OUTPUT
      if (@loper='D') or  update(capacity_pct)  exec audit_data 'ITERATION','capacity_pct',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcapacity_pct,@icapacity_pct,@audit_data OUTPUT
      if (@loper='D') or  update(remain_qty)  exec audit_data 'ITERATION','remain_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_qty,@iremain_qty,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'ITERATION', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'ITERATION', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iiteration_id,@irelease_id,@iiteration_name,@istart_date,@iend_date,@itermination_date,@icapacity_pct,@iremain_qty, @idelete_session_id;
    else
     fetch deleted_c into @diteration_id,@drelease_id,@diteration_name,@dstart_date,@dend_date,@dtermination_date,@dcapacity_pct,@dremain_qty, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_ITERDAYS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_ITERDAYS' AND xtype = 'TR')
    DROP trigger PRMAUD_ITERDAYS

PRMAUD_ITERDAYS
create trigger PRMAUD_ITERDAYS
on ITERDAYS
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itask_id varchar(255),@iday_number varchar(255),@iproj_id varchar(255),@iiteration_id varchar(255),@iact_work_qty varchar(255),@iremain_work_qty varchar(255)

  declare @dtask_id varchar(255),@dday_number varchar(255),@dproj_id varchar(255),@diteration_id varchar(255),@dact_work_qty varchar(255),@dremain_work_qty varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(task_id) and
			not update(day_number) and
			not update(proj_id) and
			not update(iteration_id) and
			not update(act_work_qty) and
			not update(remain_work_qty) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'ITERDAYS', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ITERDAYS',task_id,day_number,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ITERDAYS', task_id,day_number,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select task_id,day_number,proj_id,iteration_id,act_work_qty,remain_work_qty
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select task_id,day_number,proj_id,iteration_id,act_work_qty,remain_work_qty
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itask_id,@iday_number,@iproj_id,@iiteration_id,@iact_work_qty,@iremain_work_qty, @idelete_session_id
  else
    fetch deleted_c into @dtask_id,@dday_number,@dproj_id,@diteration_id,@dact_work_qty,@dremain_work_qty, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtask_id;
				
set @pk2 = @dday_number;
				

    end else begin
    	set @pk1 = @itask_id;
				
set @pk2 = @iday_number;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtask_id,@dday_number,@dproj_id,@diteration_id,@dact_work_qty,@dremain_work_qty, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(task_id)  exec audit_data 'ITERDAYS','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(day_number)  exec audit_data 'ITERDAYS','day_number',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dday_number,@iday_number,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'ITERDAYS','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(iteration_id)  exec audit_data 'ITERDAYS','iteration_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@diteration_id,@iiteration_id,@audit_data OUTPUT
      if (@loper='D') or  update(act_work_qty)  exec audit_data 'ITERDAYS','act_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_work_qty,@iact_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(remain_work_qty)  exec audit_data 'ITERDAYS','remain_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_work_qty,@iremain_work_qty,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'ITERDAYS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'ITERDAYS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itask_id,@iday_number,@iproj_id,@iiteration_id,@iact_work_qty,@iremain_work_qty, @idelete_session_id;
    else
     fetch deleted_c into @dtask_id,@dday_number,@dproj_id,@diteration_id,@dact_work_qty,@dremain_work_qty, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_ITERGOAL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_ITERGOAL' AND xtype = 'TR')
    DROP trigger PRMAUD_ITERGOAL

PRMAUD_ITERGOAL
create trigger PRMAUD_ITERGOAL
on ITERGOAL
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iiter_goal_id varchar(255),@iiteration_id varchar(255),@igoal_name varchar(255),@igoal_descr varchar(4000),@istatus_code varchar(255),@irfolio_id varchar(255)

  declare @diter_goal_id varchar(255),@diteration_id varchar(255),@dgoal_name varchar(255),@dgoal_descr varchar(4000),@dstatus_code varchar(255),@drfolio_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(iter_goal_id) and
			not update(iteration_id) and
			not update(goal_name) and
			not update(goal_descr) and
			not update(status_code) and
			not update(rfolio_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'ITERGOAL', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ITERGOAL',iter_goal_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ITERGOAL', iter_goal_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select iter_goal_id,iteration_id,goal_name,goal_descr,status_code,rfolio_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select iter_goal_id,iteration_id,goal_name,goal_descr,status_code,rfolio_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iiter_goal_id,@iiteration_id,@igoal_name,@igoal_descr,@istatus_code,@irfolio_id, @idelete_session_id
  else
    fetch deleted_c into @diter_goal_id,@diteration_id,@dgoal_name,@dgoal_descr,@dstatus_code,@drfolio_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @diter_goal_id;
				

    end else begin
    	set @pk1 = @iiter_goal_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @diter_goal_id,@diteration_id,@dgoal_name,@dgoal_descr,@dstatus_code,@drfolio_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(iter_goal_id)  exec audit_data 'ITERGOAL','iter_goal_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@diter_goal_id,@iiter_goal_id,@audit_data OUTPUT
      if (@loper='D') or  update(iteration_id)  exec audit_data 'ITERGOAL','iteration_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@diteration_id,@iiteration_id,@audit_data OUTPUT
      if (@loper='D') or  update(goal_name)  exec audit_data 'ITERGOAL','goal_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dgoal_name,@igoal_name,@audit_data OUTPUT
      if (@loper='D') or  update(goal_descr)  exec audit_data 'ITERGOAL','goal_descr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dgoal_descr,@igoal_descr,@audit_data OUTPUT
      if (@loper='D') or  update(status_code)  exec audit_data 'ITERGOAL','status_code',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstatus_code,@istatus_code,@audit_data OUTPUT
      if (@loper='D') or  update(rfolio_id)  exec audit_data 'ITERGOAL','rfolio_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drfolio_id,@irfolio_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'ITERGOAL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'ITERGOAL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iiter_goal_id,@iiteration_id,@igoal_name,@igoal_descr,@istatus_code,@irfolio_id, @idelete_session_id;
    else
     fetch deleted_c into @diter_goal_id,@diteration_id,@dgoal_name,@dgoal_descr,@dstatus_code,@drfolio_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_JOBLOG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_JOBLOG' AND xtype = 'TR')
    DROP trigger PRMAUD_JOBLOG

PRMAUD_JOBLOG
create trigger PRMAUD_JOBLOG
on JOBLOG
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ijob_id varchar(255)

  declare @djob_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(job_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'JOBLOG', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'JOBLOG',job_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'JOBLOG', job_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select job_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select job_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ijob_id, @idelete_session_id
  else
    fetch deleted_c into @djob_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @djob_id;
				

    end else begin
    	set @pk1 = @ijob_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @djob_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(job_id)  exec audit_data 'JOBLOG','job_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@djob_id,@ijob_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'JOBLOG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'JOBLOG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ijob_id, @idelete_session_id;
    else
     fetch deleted_c into @djob_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_JOBSVC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_JOBSVC' AND xtype = 'TR')
    DROP trigger PRMAUD_JOBSVC

PRMAUD_JOBSVC
create trigger PRMAUD_JOBSVC
on JOBSVC
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ijob_id varchar(255),@iseq_num varchar(255),@iaudit_flag varchar(255),@ijob_type varchar(255),@ijob_name varchar(255),@iuser_id varchar(255),@ilast_run_date varchar(255),@istatus_code varchar(255),@irecur_data varchar(255),@irecur_type varchar(255),@isubmitted_date varchar(255),@ilast_error_descr varchar(255),@iaudit_file_path varchar(255)

  declare @djob_id varchar(255),@dseq_num varchar(255),@daudit_flag varchar(255),@djob_type varchar(255),@djob_name varchar(255),@duser_id varchar(255),@dlast_run_date varchar(255),@dstatus_code varchar(255),@drecur_data varchar(255),@drecur_type varchar(255),@dsubmitted_date varchar(255),@dlast_error_descr varchar(255),@daudit_file_path varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(job_id) and
			not update(seq_num) and
			not update(audit_flag) and
			not update(job_type) and
			not update(job_name) and
			not update(user_id) and
			not update(last_run_date) and
			not update(status_code) and
			not update(recur_data) and
			not update(recur_type) and
			not update(submitted_date) and
			not update(last_error_descr) and
			not update(audit_file_path) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'JOBSVC', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'JOBSVC',job_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'JOBSVC', job_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select job_id,seq_num,audit_flag,job_type,job_name,user_id,last_run_date,status_code,recur_data,recur_type,submitted_date,last_error_descr,audit_file_path
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select job_id,seq_num,audit_flag,job_type,job_name,user_id,last_run_date,status_code,recur_data,recur_type,submitted_date,last_error_descr,audit_file_path
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ijob_id,@iseq_num,@iaudit_flag,@ijob_type,@ijob_name,@iuser_id,@ilast_run_date,@istatus_code,@irecur_data,@irecur_type,@isubmitted_date,@ilast_error_descr,@iaudit_file_path, @idelete_session_id
  else
    fetch deleted_c into @djob_id,@dseq_num,@daudit_flag,@djob_type,@djob_name,@duser_id,@dlast_run_date,@dstatus_code,@drecur_data,@drecur_type,@dsubmitted_date,@dlast_error_descr,@daudit_file_path, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @djob_id;
				

    end else begin
    	set @pk1 = @ijob_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @djob_id,@dseq_num,@daudit_flag,@djob_type,@djob_name,@duser_id,@dlast_run_date,@dstatus_code,@drecur_data,@drecur_type,@dsubmitted_date,@dlast_error_descr,@daudit_file_path, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(job_id)  exec audit_data 'JOBSVC','job_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@djob_id,@ijob_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'JOBSVC','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(audit_flag)  exec audit_data 'JOBSVC','audit_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@daudit_flag,@iaudit_flag,@audit_data OUTPUT
      if (@loper='D') or  update(job_type)  exec audit_data 'JOBSVC','job_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@djob_type,@ijob_type,@audit_data OUTPUT
      if (@loper='D') or  update(job_name)  exec audit_data 'JOBSVC','job_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@djob_name,@ijob_name,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'JOBSVC','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(last_run_date)  exec audit_data 'JOBSVC','last_run_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlast_run_date,@ilast_run_date,@audit_data OUTPUT
      if (@loper='D') or  update(status_code)  exec audit_data 'JOBSVC','status_code',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstatus_code,@istatus_code,@audit_data OUTPUT
      if (@loper='D') or  update(recur_data)  exec audit_data 'JOBSVC','recur_data',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drecur_data,@irecur_data,@audit_data OUTPUT
      if (@loper='D') or  update(recur_type)  exec audit_data 'JOBSVC','recur_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drecur_type,@irecur_type,@audit_data OUTPUT
      if (@loper='D') or  update(submitted_date)  exec audit_data 'JOBSVC','submitted_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsubmitted_date,@isubmitted_date,@audit_data OUTPUT
      if (@loper='D') or  update(last_error_descr)  exec audit_data 'JOBSVC','last_error_descr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlast_error_descr,@ilast_error_descr,@audit_data OUTPUT
      if (@loper='D') or  update(audit_file_path)  exec audit_data 'JOBSVC','audit_file_path',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@daudit_file_path,@iaudit_file_path,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'JOBSVC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'JOBSVC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ijob_id,@iseq_num,@iaudit_flag,@ijob_type,@ijob_name,@iuser_id,@ilast_run_date,@istatus_code,@irecur_data,@irecur_type,@isubmitted_date,@ilast_error_descr,@iaudit_file_path, @idelete_session_id;
    else
     fetch deleted_c into @djob_id,@dseq_num,@daudit_flag,@djob_type,@djob_name,@duser_id,@dlast_run_date,@dstatus_code,@drecur_data,@drecur_type,@dsubmitted_date,@dlast_error_descr,@daudit_file_path, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_JOBRPT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_JOBRPT' AND xtype = 'TR')
    DROP trigger PRMAUD_JOBRPT

PRMAUD_JOBRPT
create trigger PRMAUD_JOBRPT
on JOBRPT
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ijob_id varchar(255),@irpt_id varchar(255),@itable_name varchar(255),@ifk_id varchar(255),@ipersonal_portal_flag varchar(255)

  declare @djob_id varchar(255),@drpt_id varchar(255),@dtable_name varchar(255),@dfk_id varchar(255),@dpersonal_portal_flag varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(job_id) and
			not update(rpt_id) and
			not update(table_name) and
			not update(fk_id) and
			not update(personal_portal_flag) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'JOBRPT', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'JOBRPT',job_id,rpt_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'JOBRPT', job_id,rpt_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select job_id,rpt_id,table_name,fk_id,personal_portal_flag
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select job_id,rpt_id,table_name,fk_id,personal_portal_flag
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ijob_id,@irpt_id,@itable_name,@ifk_id,@ipersonal_portal_flag, @idelete_session_id
  else
    fetch deleted_c into @djob_id,@drpt_id,@dtable_name,@dfk_id,@dpersonal_portal_flag, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @djob_id;
				
set @pk2 = @drpt_id;
				

    end else begin
    	set @pk1 = @ijob_id;
				
set @pk2 = @irpt_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @djob_id,@drpt_id,@dtable_name,@dfk_id,@dpersonal_portal_flag, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(job_id)  exec audit_data 'JOBRPT','job_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@djob_id,@ijob_id,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_id)  exec audit_data 'JOBRPT','rpt_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_id,@irpt_id,@audit_data OUTPUT
      if (@loper='D') or  update(table_name)  exec audit_data 'JOBRPT','table_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtable_name,@itable_name,@audit_data OUTPUT
      if (@loper='D') or  update(fk_id)  exec audit_data 'JOBRPT','fk_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfk_id,@ifk_id,@audit_data OUTPUT
      if (@loper='D') or  update(personal_portal_flag)  exec audit_data 'JOBRPT','personal_portal_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpersonal_portal_flag,@ipersonal_portal_flag,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'JOBRPT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'JOBRPT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ijob_id,@irpt_id,@itable_name,@ifk_id,@ipersonal_portal_flag, @idelete_session_id;
    else
     fetch deleted_c into @djob_id,@drpt_id,@dtable_name,@dfk_id,@dpersonal_portal_flag, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_MEMOTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_MEMOTYPE' AND xtype = 'TR')
    DROP trigger PRMAUD_MEMOTYPE

PRMAUD_MEMOTYPE
create trigger PRMAUD_MEMOTYPE
on MEMOTYPE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @imemo_type_id varchar(255),@iseq_num varchar(255),@ieps_flag varchar(255),@iproj_flag varchar(255),@iwbs_flag varchar(255),@itask_flag varchar(255),@imemo_type varchar(255)

  declare @dmemo_type_id varchar(255),@dseq_num varchar(255),@deps_flag varchar(255),@dproj_flag varchar(255),@dwbs_flag varchar(255),@dtask_flag varchar(255),@dmemo_type varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(memo_type_id) and
			not update(seq_num) and
			not update(eps_flag) and
			not update(proj_flag) and
			not update(wbs_flag) and
			not update(task_flag) and
			not update(memo_type) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'MEMOTYPE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'MEMOTYPE',memo_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'MEMOTYPE', memo_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select memo_type_id,seq_num,eps_flag,proj_flag,wbs_flag,task_flag,memo_type
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select memo_type_id,seq_num,eps_flag,proj_flag,wbs_flag,task_flag,memo_type
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @imemo_type_id,@iseq_num,@ieps_flag,@iproj_flag,@iwbs_flag,@itask_flag,@imemo_type, @idelete_session_id
  else
    fetch deleted_c into @dmemo_type_id,@dseq_num,@deps_flag,@dproj_flag,@dwbs_flag,@dtask_flag,@dmemo_type, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dmemo_type_id;
				

    end else begin
    	set @pk1 = @imemo_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dmemo_type_id,@dseq_num,@deps_flag,@dproj_flag,@dwbs_flag,@dtask_flag,@dmemo_type, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(memo_type_id)  exec audit_data 'MEMOTYPE','memo_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmemo_type_id,@imemo_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'MEMOTYPE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(eps_flag)  exec audit_data 'MEMOTYPE','eps_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@deps_flag,@ieps_flag,@audit_data OUTPUT
      if (@loper='D') or  update(proj_flag)  exec audit_data 'MEMOTYPE','proj_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_flag,@iproj_flag,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_flag)  exec audit_data 'MEMOTYPE','wbs_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_flag,@iwbs_flag,@audit_data OUTPUT
      if (@loper='D') or  update(task_flag)  exec audit_data 'MEMOTYPE','task_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_flag,@itask_flag,@audit_data OUTPUT
      if (@loper='D') or  update(memo_type)  exec audit_data 'MEMOTYPE','memo_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmemo_type,@imemo_type,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'MEMOTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'MEMOTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @imemo_type_id,@iseq_num,@ieps_flag,@iproj_flag,@iwbs_flag,@itask_flag,@imemo_type, @idelete_session_id;
    else
     fetch deleted_c into @dmemo_type_id,@dseq_num,@deps_flag,@dproj_flag,@dwbs_flag,@dtask_flag,@dmemo_type, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_NONWORK
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_NONWORK' AND xtype = 'TR')
    DROP trigger PRMAUD_NONWORK

PRMAUD_NONWORK
create trigger PRMAUD_NONWORK
on NONWORK
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @inonwork_type_id varchar(255),@iseq_num varchar(255),@inonwork_code varchar(255),@inonwork_type varchar(255)

  declare @dnonwork_type_id varchar(255),@dseq_num varchar(255),@dnonwork_code varchar(255),@dnonwork_type varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(nonwork_type_id) and
			not update(seq_num) and
			not update(nonwork_code) and
			not update(nonwork_type) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'NONWORK', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'NONWORK',nonwork_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'NONWORK', nonwork_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select nonwork_type_id,seq_num,nonwork_code,nonwork_type
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select nonwork_type_id,seq_num,nonwork_code,nonwork_type
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @inonwork_type_id,@iseq_num,@inonwork_code,@inonwork_type, @idelete_session_id
  else
    fetch deleted_c into @dnonwork_type_id,@dseq_num,@dnonwork_code,@dnonwork_type, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dnonwork_type_id;
				

    end else begin
    	set @pk1 = @inonwork_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dnonwork_type_id,@dseq_num,@dnonwork_code,@dnonwork_type, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(nonwork_type_id)  exec audit_data 'NONWORK','nonwork_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dnonwork_type_id,@inonwork_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'NONWORK','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(nonwork_code)  exec audit_data 'NONWORK','nonwork_code',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dnonwork_code,@inonwork_code,@audit_data OUTPUT
      if (@loper='D') or  update(nonwork_type)  exec audit_data 'NONWORK','nonwork_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dnonwork_type,@inonwork_type,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'NONWORK', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'NONWORK', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @inonwork_type_id,@iseq_num,@inonwork_code,@inonwork_type, @idelete_session_id;
    else
     fetch deleted_c into @dnonwork_type_id,@dseq_num,@dnonwork_code,@dnonwork_type, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_NOTE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_NOTE' AND xtype = 'TR')
    DROP trigger PRMAUD_NOTE

PRMAUD_NOTE
create trigger PRMAUD_NOTE
on NOTE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @inote_id varchar(255),@itable_name varchar(255),@itype_name varchar(255),@ifk_id varchar(255),@inote_date varchar(255),@inote_value varchar(4000),@iuser_name varchar(255)

  declare @dnote_id varchar(255),@dtable_name varchar(255),@dtype_name varchar(255),@dfk_id varchar(255),@dnote_date varchar(255),@dnote_value varchar(4000),@duser_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(note_id) and
			not update(table_name) and
			not update(type_name) and
			not update(fk_id) and
			not update(note_date) and
			not update(note_value) and
			not update(user_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'NOTE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'NOTE',note_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'NOTE', note_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select note_id,table_name,type_name,fk_id,note_date,note_value,user_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select note_id,table_name,type_name,fk_id,note_date,note_value,user_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @inote_id,@itable_name,@itype_name,@ifk_id,@inote_date,@inote_value,@iuser_name, @idelete_session_id
  else
    fetch deleted_c into @dnote_id,@dtable_name,@dtype_name,@dfk_id,@dnote_date,@dnote_value,@duser_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dnote_id;
				

    end else begin
    	set @pk1 = @inote_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dnote_id,@dtable_name,@dtype_name,@dfk_id,@dnote_date,@dnote_value,@duser_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(note_id)  exec audit_data 'NOTE','note_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dnote_id,@inote_id,@audit_data OUTPUT
      if (@loper='D') or  update(table_name)  exec audit_data 'NOTE','table_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtable_name,@itable_name,@audit_data OUTPUT
      if (@loper='D') or  update(type_name)  exec audit_data 'NOTE','type_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtype_name,@itype_name,@audit_data OUTPUT
      if (@loper='D') or  update(fk_id)  exec audit_data 'NOTE','fk_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfk_id,@ifk_id,@audit_data OUTPUT
      if (@loper='D') or  update(note_date)  exec audit_data 'NOTE','note_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dnote_date,@inote_date,@audit_data OUTPUT
      if (@loper='D') or  update(note_value)  exec audit_data 'NOTE','note_value',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dnote_value,@inote_value,@audit_data OUTPUT
      if (@loper='D') or  update(user_name)  exec audit_data 'NOTE','user_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_name,@iuser_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'NOTE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'NOTE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @inote_id,@itable_name,@itype_name,@ifk_id,@inote_date,@inote_value,@iuser_name, @idelete_session_id;
    else
     fetch deleted_c into @dnote_id,@dtable_name,@dtype_name,@dfk_id,@dnote_date,@dnote_value,@duser_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_OBS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_OBS' AND xtype = 'TR')
    DROP trigger PRMAUD_OBS

PRMAUD_OBS
create trigger PRMAUD_OBS
on OBS
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iobs_id varchar(255),@iseq_num varchar(255),@iobs_name varchar(255),@iparent_obs_id varchar(255),@iguid varchar(255)

  declare @dobs_id varchar(255),@dseq_num varchar(255),@dobs_name varchar(255),@dparent_obs_id varchar(255),@dguid varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(obs_id) and
			not update(seq_num) and
			not update(obs_name) and
			not update(parent_obs_id) and
			not update(guid) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'OBS', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'OBS',obs_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'OBS', obs_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select obs_id,seq_num,obs_name,parent_obs_id,guid
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select obs_id,seq_num,obs_name,parent_obs_id,guid
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iobs_id,@iseq_num,@iobs_name,@iparent_obs_id,@iguid, @idelete_session_id
  else
    fetch deleted_c into @dobs_id,@dseq_num,@dobs_name,@dparent_obs_id,@dguid, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dobs_id;
				

    end else begin
    	set @pk1 = @iobs_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dobs_id,@dseq_num,@dobs_name,@dparent_obs_id,@dguid, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(obs_id)  exec audit_data 'OBS','obs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dobs_id,@iobs_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'OBS','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(obs_name)  exec audit_data 'OBS','obs_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dobs_name,@iobs_name,@audit_data OUTPUT
      if (@loper='D') or  update(parent_obs_id)  exec audit_data 'OBS','parent_obs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_obs_id,@iparent_obs_id,@audit_data OUTPUT
      if (@loper='D') or  update(guid)  exec audit_data 'OBS','guid',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dguid,@iguid,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'OBS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'OBS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iobs_id,@iseq_num,@iobs_name,@iparent_obs_id,@iguid, @idelete_session_id;
    else
     fetch deleted_c into @dobs_id,@dseq_num,@dobs_name,@dparent_obs_id,@dguid, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PCATTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PCATTYPE' AND xtype = 'TR')
    DROP trigger PRMAUD_PCATTYPE

PRMAUD_PCATTYPE
create trigger PRMAUD_PCATTYPE
on PCATTYPE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iproj_catg_type_id varchar(255),@iseq_num varchar(255),@iproj_catg_short_len varchar(255),@iproj_catg_type varchar(255),@isuper_flag varchar(255),@iproj_catg_type_wt varchar(255),@imax_proj_catg_wt varchar(255)

  declare @dproj_catg_type_id varchar(255),@dseq_num varchar(255),@dproj_catg_short_len varchar(255),@dproj_catg_type varchar(255),@dsuper_flag varchar(255),@dproj_catg_type_wt varchar(255),@dmax_proj_catg_wt varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(proj_catg_type_id) and
			not update(seq_num) and
			not update(proj_catg_short_len) and
			not update(proj_catg_type) and
			not update(super_flag) and
			not update(proj_catg_type_wt) and
			not update(max_proj_catg_wt) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PCATTYPE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PCATTYPE',proj_catg_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PCATTYPE', proj_catg_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select proj_catg_type_id,seq_num,proj_catg_short_len,proj_catg_type,super_flag,proj_catg_type_wt,max_proj_catg_wt
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select proj_catg_type_id,seq_num,proj_catg_short_len,proj_catg_type,super_flag,proj_catg_type_wt,max_proj_catg_wt
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iproj_catg_type_id,@iseq_num,@iproj_catg_short_len,@iproj_catg_type,@isuper_flag,@iproj_catg_type_wt,@imax_proj_catg_wt, @idelete_session_id
  else
    fetch deleted_c into @dproj_catg_type_id,@dseq_num,@dproj_catg_short_len,@dproj_catg_type,@dsuper_flag,@dproj_catg_type_wt,@dmax_proj_catg_wt, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dproj_catg_type_id;
				

    end else begin
    	set @pk1 = @iproj_catg_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dproj_catg_type_id,@dseq_num,@dproj_catg_short_len,@dproj_catg_type,@dsuper_flag,@dproj_catg_type_wt,@dmax_proj_catg_wt, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(proj_catg_type_id)  exec audit_data 'PCATTYPE','proj_catg_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_catg_type_id,@iproj_catg_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'PCATTYPE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(proj_catg_short_len)  exec audit_data 'PCATTYPE','proj_catg_short_len',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_catg_short_len,@iproj_catg_short_len,@audit_data OUTPUT
      if (@loper='D') or  update(proj_catg_type)  exec audit_data 'PCATTYPE','proj_catg_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_catg_type,@iproj_catg_type,@audit_data OUTPUT
      if (@loper='D') or  update(super_flag)  exec audit_data 'PCATTYPE','super_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsuper_flag,@isuper_flag,@audit_data OUTPUT
      if (@loper='D') or  update(proj_catg_type_wt)  exec audit_data 'PCATTYPE','proj_catg_type_wt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_catg_type_wt,@iproj_catg_type_wt,@audit_data OUTPUT
      if (@loper='D') or  update(max_proj_catg_wt)  exec audit_data 'PCATTYPE','max_proj_catg_wt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_proj_catg_wt,@imax_proj_catg_wt,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PCATTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PCATTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iproj_catg_type_id,@iseq_num,@iproj_catg_short_len,@iproj_catg_type,@isuper_flag,@iproj_catg_type_wt,@imax_proj_catg_wt, @idelete_session_id;
    else
     fetch deleted_c into @dproj_catg_type_id,@dseq_num,@dproj_catg_short_len,@dproj_catg_type,@dsuper_flag,@dproj_catg_type_wt,@dmax_proj_catg_wt, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PCATUSER
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PCATUSER' AND xtype = 'TR')
    DROP trigger PRMAUD_PCATUSER

PRMAUD_PCATUSER
create trigger PRMAUD_PCATUSER
on PCATUSER
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iproj_catg_id varchar(255),@iuser_id varchar(255)

  declare @dproj_catg_id varchar(255),@duser_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(proj_catg_id) and
			not update(user_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PCATUSER', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PCATUSER',proj_catg_id,user_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PCATUSER', proj_catg_id,user_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select proj_catg_id,user_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select proj_catg_id,user_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iproj_catg_id,@iuser_id, @idelete_session_id
  else
    fetch deleted_c into @dproj_catg_id,@duser_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dproj_catg_id;
				
set @pk2 = @duser_id;
				

    end else begin
    	set @pk1 = @iproj_catg_id;
				
set @pk2 = @iuser_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dproj_catg_id,@duser_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(proj_catg_id)  exec audit_data 'PCATUSER','proj_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_catg_id,@iproj_catg_id,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'PCATUSER','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PCATUSER', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PCATUSER', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iproj_catg_id,@iuser_id, @idelete_session_id;
    else
     fetch deleted_c into @dproj_catg_id,@duser_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PCATVAL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PCATVAL' AND xtype = 'TR')
    DROP trigger PRMAUD_PCATVAL

PRMAUD_PCATVAL
create trigger PRMAUD_PCATVAL
on PCATVAL
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iproj_catg_id varchar(255),@iproj_catg_type_id varchar(255),@iseq_num varchar(255),@iproj_catg_short_name varchar(255),@iparent_proj_catg_id varchar(255),@iproj_catg_name varchar(255),@iproj_catg_wt varchar(255)

  declare @dproj_catg_id varchar(255),@dproj_catg_type_id varchar(255),@dseq_num varchar(255),@dproj_catg_short_name varchar(255),@dparent_proj_catg_id varchar(255),@dproj_catg_name varchar(255),@dproj_catg_wt varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(proj_catg_id) and
			not update(proj_catg_type_id) and
			not update(seq_num) and
			not update(proj_catg_short_name) and
			not update(parent_proj_catg_id) and
			not update(proj_catg_name) and
			not update(proj_catg_wt) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PCATVAL', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PCATVAL',proj_catg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PCATVAL', proj_catg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select proj_catg_id,proj_catg_type_id,seq_num,proj_catg_short_name,parent_proj_catg_id,proj_catg_name,proj_catg_wt
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select proj_catg_id,proj_catg_type_id,seq_num,proj_catg_short_name,parent_proj_catg_id,proj_catg_name,proj_catg_wt
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iproj_catg_id,@iproj_catg_type_id,@iseq_num,@iproj_catg_short_name,@iparent_proj_catg_id,@iproj_catg_name,@iproj_catg_wt, @idelete_session_id
  else
    fetch deleted_c into @dproj_catg_id,@dproj_catg_type_id,@dseq_num,@dproj_catg_short_name,@dparent_proj_catg_id,@dproj_catg_name,@dproj_catg_wt, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dproj_catg_id;
				

    end else begin
    	set @pk1 = @iproj_catg_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dproj_catg_id,@dproj_catg_type_id,@dseq_num,@dproj_catg_short_name,@dparent_proj_catg_id,@dproj_catg_name,@dproj_catg_wt, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(proj_catg_id)  exec audit_data 'PCATVAL','proj_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_catg_id,@iproj_catg_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_catg_type_id)  exec audit_data 'PCATVAL','proj_catg_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_catg_type_id,@iproj_catg_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'PCATVAL','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(proj_catg_short_name)  exec audit_data 'PCATVAL','proj_catg_short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_catg_short_name,@iproj_catg_short_name,@audit_data OUTPUT
      if (@loper='D') or  update(parent_proj_catg_id)  exec audit_data 'PCATVAL','parent_proj_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_proj_catg_id,@iparent_proj_catg_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_catg_name)  exec audit_data 'PCATVAL','proj_catg_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_catg_name,@iproj_catg_name,@audit_data OUTPUT
      if (@loper='D') or  update(proj_catg_wt)  exec audit_data 'PCATVAL','proj_catg_wt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_catg_wt,@iproj_catg_wt,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PCATVAL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PCATVAL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iproj_catg_id,@iproj_catg_type_id,@iseq_num,@iproj_catg_short_name,@iparent_proj_catg_id,@iproj_catg_name,@iproj_catg_wt, @idelete_session_id;
    else
     fetch deleted_c into @dproj_catg_id,@dproj_catg_type_id,@dseq_num,@dproj_catg_short_name,@dparent_proj_catg_id,@dproj_catg_name,@dproj_catg_wt, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PFOLIO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PFOLIO' AND xtype = 'TR')
    DROP trigger PRMAUD_PFOLIO

PRMAUD_PFOLIO
create trigger PRMAUD_PFOLIO
on PFOLIO
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ipfolio_id varchar(255),@iclosed_proj_flag varchar(255),@iwhatif_proj_flag varchar(255),@ipfolio_type varchar(255),@ipfolio_name varchar(255),@iuser_id varchar(255),@ipfolio_descr varchar(255),@ilast_refresh_date varchar(255)

  declare @dpfolio_id varchar(255),@dclosed_proj_flag varchar(255),@dwhatif_proj_flag varchar(255),@dpfolio_type varchar(255),@dpfolio_name varchar(255),@duser_id varchar(255),@dpfolio_descr varchar(255),@dlast_refresh_date varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(pfolio_id) and
			not update(closed_proj_flag) and
			not update(whatif_proj_flag) and
			not update(pfolio_type) and
			not update(pfolio_name) and
			not update(user_id) and
			not update(pfolio_descr) and
			not update(last_refresh_date) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PFOLIO', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PFOLIO',pfolio_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PFOLIO', pfolio_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select pfolio_id,closed_proj_flag,whatif_proj_flag,pfolio_type,pfolio_name,user_id,pfolio_descr,last_refresh_date
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select pfolio_id,closed_proj_flag,whatif_proj_flag,pfolio_type,pfolio_name,user_id,pfolio_descr,last_refresh_date
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ipfolio_id,@iclosed_proj_flag,@iwhatif_proj_flag,@ipfolio_type,@ipfolio_name,@iuser_id,@ipfolio_descr,@ilast_refresh_date, @idelete_session_id
  else
    fetch deleted_c into @dpfolio_id,@dclosed_proj_flag,@dwhatif_proj_flag,@dpfolio_type,@dpfolio_name,@duser_id,@dpfolio_descr,@dlast_refresh_date, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dpfolio_id;
				

    end else begin
    	set @pk1 = @ipfolio_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dpfolio_id,@dclosed_proj_flag,@dwhatif_proj_flag,@dpfolio_type,@dpfolio_name,@duser_id,@dpfolio_descr,@dlast_refresh_date, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(pfolio_id)  exec audit_data 'PFOLIO','pfolio_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpfolio_id,@ipfolio_id,@audit_data OUTPUT
      if (@loper='D') or  update(closed_proj_flag)  exec audit_data 'PFOLIO','closed_proj_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dclosed_proj_flag,@iclosed_proj_flag,@audit_data OUTPUT
      if (@loper='D') or  update(whatif_proj_flag)  exec audit_data 'PFOLIO','whatif_proj_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwhatif_proj_flag,@iwhatif_proj_flag,@audit_data OUTPUT
      if (@loper='D') or  update(pfolio_type)  exec audit_data 'PFOLIO','pfolio_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpfolio_type,@ipfolio_type,@audit_data OUTPUT
      if (@loper='D') or  update(pfolio_name)  exec audit_data 'PFOLIO','pfolio_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpfolio_name,@ipfolio_name,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'PFOLIO','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(pfolio_descr)  exec audit_data 'PFOLIO','pfolio_descr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpfolio_descr,@ipfolio_descr,@audit_data OUTPUT
      if (@loper='D') or  update(last_refresh_date)  exec audit_data 'PFOLIO','last_refresh_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlast_refresh_date,@ilast_refresh_date,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PFOLIO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PFOLIO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ipfolio_id,@iclosed_proj_flag,@iwhatif_proj_flag,@ipfolio_type,@ipfolio_name,@iuser_id,@ipfolio_descr,@ilast_refresh_date, @idelete_session_id;
    else
     fetch deleted_c into @dpfolio_id,@dclosed_proj_flag,@dwhatif_proj_flag,@dpfolio_type,@dpfolio_name,@duser_id,@dpfolio_descr,@dlast_refresh_date, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PHASE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PHASE' AND xtype = 'TR')
    DROP trigger PRMAUD_PHASE

PRMAUD_PHASE
create trigger PRMAUD_PHASE
on PHASE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iphase_id varchar(255),@iseq_num varchar(255),@iphase_name varchar(255)

  declare @dphase_id varchar(255),@dseq_num varchar(255),@dphase_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(phase_id) and
			not update(seq_num) and
			not update(phase_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PHASE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PHASE',phase_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PHASE', phase_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select phase_id,seq_num,phase_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select phase_id,seq_num,phase_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iphase_id,@iseq_num,@iphase_name, @idelete_session_id
  else
    fetch deleted_c into @dphase_id,@dseq_num,@dphase_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dphase_id;
				

    end else begin
    	set @pk1 = @iphase_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dphase_id,@dseq_num,@dphase_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(phase_id)  exec audit_data 'PHASE','phase_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dphase_id,@iphase_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'PHASE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(phase_name)  exec audit_data 'PHASE','phase_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dphase_name,@iphase_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PHASE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PHASE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iphase_id,@iseq_num,@iphase_name, @idelete_session_id;
    else
     fetch deleted_c into @dphase_id,@dseq_num,@dphase_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_POBS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_POBS' AND xtype = 'TR')
    DROP trigger PRMAUD_POBS

PRMAUD_POBS
create trigger PRMAUD_POBS
on POBS
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ipobs_id varchar(255),@iseq_num varchar(255),@ipobs_name varchar(255),@ipobs_parent_id varchar(255),@ipobs_descr varchar(255),@ipobs_manager varchar(255)

  declare @dpobs_id varchar(255),@dseq_num varchar(255),@dpobs_name varchar(255),@dpobs_parent_id varchar(255),@dpobs_descr varchar(255),@dpobs_manager varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(pobs_id) and
			not update(seq_num) and
			not update(pobs_name) and
			not update(pobs_parent_id) and
			not update(pobs_descr) and
			not update(pobs_manager) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'POBS', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'POBS',pobs_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'POBS', pobs_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select pobs_id,seq_num,pobs_name,pobs_parent_id,pobs_descr,pobs_manager
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select pobs_id,seq_num,pobs_name,pobs_parent_id,pobs_descr,pobs_manager
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ipobs_id,@iseq_num,@ipobs_name,@ipobs_parent_id,@ipobs_descr,@ipobs_manager, @idelete_session_id
  else
    fetch deleted_c into @dpobs_id,@dseq_num,@dpobs_name,@dpobs_parent_id,@dpobs_descr,@dpobs_manager, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dpobs_id;
				

    end else begin
    	set @pk1 = @ipobs_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dpobs_id,@dseq_num,@dpobs_name,@dpobs_parent_id,@dpobs_descr,@dpobs_manager, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(pobs_id)  exec audit_data 'POBS','pobs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpobs_id,@ipobs_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'POBS','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(pobs_name)  exec audit_data 'POBS','pobs_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpobs_name,@ipobs_name,@audit_data OUTPUT
      if (@loper='D') or  update(pobs_parent_id)  exec audit_data 'POBS','pobs_parent_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpobs_parent_id,@ipobs_parent_id,@audit_data OUTPUT
      if (@loper='D') or  update(pobs_descr)  exec audit_data 'POBS','pobs_descr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpobs_descr,@ipobs_descr,@audit_data OUTPUT
      if (@loper='D') or  update(pobs_manager)  exec audit_data 'POBS','pobs_manager',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpobs_manager,@ipobs_manager,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'POBS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'POBS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ipobs_id,@iseq_num,@ipobs_name,@ipobs_parent_id,@ipobs_descr,@ipobs_manager, @idelete_session_id;
    else
     fetch deleted_c into @dpobs_id,@dseq_num,@dpobs_name,@dpobs_parent_id,@dpobs_descr,@dpobs_manager, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PREFER
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PREFER' AND xtype = 'TR')
    DROP trigger PRMAUD_PREFER

PRMAUD_PREFER
create trigger PRMAUD_PREFER
on PREFER
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iprefer_id varchar(255),@ihr_decimal_cnt varchar(255),@ixfer_complete_day_cnt varchar(255),@ixfer_notstart_day_cnt varchar(255),@imax_wbs_level_cnt varchar(255),@imax_rsrc_level_cnt varchar(255),@imax_acct_level_cnt varchar(255),@imax_task_actv_type_cnt varchar(255),@ifuture_ts_cnt varchar(255),@imax_obs_level_cnt varchar(255),@iweek_start_day_num varchar(255),@its_approval_level varchar(255),@itask_code_len varchar(255),@iproj_short_len varchar(255),@iwbs_short_len varchar(255),@irsrc_short_len varchar(255),@iacct_short_len varchar(255),@irole_short_len varchar(255),@imax_base_cnt varchar(255),@idef_target_drtn_hr_cnt varchar(255),@iday_hr_cnt varchar(255),@iweek_hr_cnt varchar(255),@iyear_hr_cnt varchar(255),@imonth_hr_cnt varchar(255),@imax_actv_level_cnt varchar(255),@imax_eps_level_cnt varchar(255),@imax_pcat_level_cnt varchar(255),@imax_rcat_level_cnt varchar(255),@icomplete_task_hrs_flag varchar(255),@idefault_timesheet_flag varchar(255),@ifuture_ts_hrs_flag varchar(255),@iev_fix_cost_flag varchar(255),@its_daily_flag varchar(255),@inotstart_task_hrs_flag varchar(255),@iprestart_task_hrs_flag varchar(255),@ipostend_task_hrs_flag varchar(255),@iermm_enabled_flag varchar(255),@iname_sep_char varchar(255),@iyear_char varchar(255),@imonth_char varchar(255),@iweek_char varchar(255),@iday_char varchar(255),@ihour_char varchar(255),@iminute_char varchar(255),@its_approval_type varchar(255),@idb_name varchar(255),@itasksum_period_type varchar(255),@itrsrcsum_period_type varchar(255),@idatabase_version varchar(255),@iphase_label varchar(255),@its_approve_user_id varchar(255),@icurr_id varchar(255),@iev_user_pct varchar(255),@iev_etc_user_value varchar(255),@iev_compute_type varchar(255),@iev_etc_compute_type varchar(255),@irpt_header_1 varchar(255),@irpt_header_2 varchar(255),@irpt_header_3 varchar(255),@irpt_footer_1 varchar(255),@irpt_footer_2 varchar(255),@irpt_footer_3 varchar(255),@irpt_user_1 varchar(255),@irpt_user_2 varchar(255),@irpt_user_3 varchar(255),@imax_role_level_cnt varchar(255),@ipast_ts_cnt varchar(255),@iprojinit_admin_user_id varchar(255),@idefault_rsrc_sec_id varchar(255),@iallow_user_time_period_flag varchar(255),@iexp_root_url varchar(255),@its_rsrc_def_asgn_actv_flag varchar(255)

  declare @dprefer_id varchar(255),@dhr_decimal_cnt varchar(255),@dxfer_complete_day_cnt varchar(255),@dxfer_notstart_day_cnt varchar(255),@dmax_wbs_level_cnt varchar(255),@dmax_rsrc_level_cnt varchar(255),@dmax_acct_level_cnt varchar(255),@dmax_task_actv_type_cnt varchar(255),@dfuture_ts_cnt varchar(255),@dmax_obs_level_cnt varchar(255),@dweek_start_day_num varchar(255),@dts_approval_level varchar(255),@dtask_code_len varchar(255),@dproj_short_len varchar(255),@dwbs_short_len varchar(255),@drsrc_short_len varchar(255),@dacct_short_len varchar(255),@drole_short_len varchar(255),@dmax_base_cnt varchar(255),@ddef_target_drtn_hr_cnt varchar(255),@dday_hr_cnt varchar(255),@dweek_hr_cnt varchar(255),@dyear_hr_cnt varchar(255),@dmonth_hr_cnt varchar(255),@dmax_actv_level_cnt varchar(255),@dmax_eps_level_cnt varchar(255),@dmax_pcat_level_cnt varchar(255),@dmax_rcat_level_cnt varchar(255),@dcomplete_task_hrs_flag varchar(255),@ddefault_timesheet_flag varchar(255),@dfuture_ts_hrs_flag varchar(255),@dev_fix_cost_flag varchar(255),@dts_daily_flag varchar(255),@dnotstart_task_hrs_flag varchar(255),@dprestart_task_hrs_flag varchar(255),@dpostend_task_hrs_flag varchar(255),@dermm_enabled_flag varchar(255),@dname_sep_char varchar(255),@dyear_char varchar(255),@dmonth_char varchar(255),@dweek_char varchar(255),@dday_char varchar(255),@dhour_char varchar(255),@dminute_char varchar(255),@dts_approval_type varchar(255),@ddb_name varchar(255),@dtasksum_period_type varchar(255),@dtrsrcsum_period_type varchar(255),@ddatabase_version varchar(255),@dphase_label varchar(255),@dts_approve_user_id varchar(255),@dcurr_id varchar(255),@dev_user_pct varchar(255),@dev_etc_user_value varchar(255),@dev_compute_type varchar(255),@dev_etc_compute_type varchar(255),@drpt_header_1 varchar(255),@drpt_header_2 varchar(255),@drpt_header_3 varchar(255),@drpt_footer_1 varchar(255),@drpt_footer_2 varchar(255),@drpt_footer_3 varchar(255),@drpt_user_1 varchar(255),@drpt_user_2 varchar(255),@drpt_user_3 varchar(255),@dmax_role_level_cnt varchar(255),@dpast_ts_cnt varchar(255),@dprojinit_admin_user_id varchar(255),@ddefault_rsrc_sec_id varchar(255),@dallow_user_time_period_flag varchar(255),@dexp_root_url varchar(255),@dts_rsrc_def_asgn_actv_flag varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(prefer_id) and
			not update(hr_decimal_cnt) and
			not update(xfer_complete_day_cnt) and
			not update(xfer_notstart_day_cnt) and
			not update(max_wbs_level_cnt) and
			not update(max_rsrc_level_cnt) and
			not update(max_acct_level_cnt) and
			not update(max_task_actv_type_cnt) and
			not update(future_ts_cnt) and
			not update(max_obs_level_cnt) and
			not update(week_start_day_num) and
			not update(ts_approval_level) and
			not update(task_code_len) and
			not update(proj_short_len) and
			not update(wbs_short_len) and
			not update(rsrc_short_len) and
			not update(acct_short_len) and
			not update(role_short_len) and
			not update(max_base_cnt) and
			not update(def_target_drtn_hr_cnt) and
			not update(day_hr_cnt) and
			not update(week_hr_cnt) and
			not update(year_hr_cnt) and
			not update(month_hr_cnt) and
			not update(max_actv_level_cnt) and
			not update(max_eps_level_cnt) and
			not update(max_pcat_level_cnt) and
			not update(max_rcat_level_cnt) and
			not update(complete_task_hrs_flag) and
			not update(default_timesheet_flag) and
			not update(future_ts_hrs_flag) and
			not update(ev_fix_cost_flag) and
			not update(ts_daily_flag) and
			not update(notstart_task_hrs_flag) and
			not update(prestart_task_hrs_flag) and
			not update(postend_task_hrs_flag) and
			not update(ermm_enabled_flag) and
			not update(name_sep_char) and
			not update(year_char) and
			not update(month_char) and
			not update(week_char) and
			not update(day_char) and
			not update(hour_char) and
			not update(minute_char) and
			not update(ts_approval_type) and
			not update(db_name) and
			not update(tasksum_period_type) and
			not update(trsrcsum_period_type) and
			not update(database_version) and
			not update(phase_label) and
			not update(ts_approve_user_id) and
			not update(curr_id) and
			not update(ev_user_pct) and
			not update(ev_etc_user_value) and
			not update(ev_compute_type) and
			not update(ev_etc_compute_type) and
			not update(rpt_header_1) and
			not update(rpt_header_2) and
			not update(rpt_header_3) and
			not update(rpt_footer_1) and
			not update(rpt_footer_2) and
			not update(rpt_footer_3) and
			not update(rpt_user_1) and
			not update(rpt_user_2) and
			not update(rpt_user_3) and
			not update(max_role_level_cnt) and
			not update(past_ts_cnt) and
			not update(projinit_admin_user_id) and
			not update(default_rsrc_sec_id) and
			not update(allow_user_time_period_flag) and
			not update(exp_root_url) and
			not update(ts_rsrc_def_asgn_actv_flag) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PREFER', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PREFER',prefer_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PREFER', prefer_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select prefer_id,hr_decimal_cnt,xfer_complete_day_cnt,xfer_notstart_day_cnt,max_wbs_level_cnt,max_rsrc_level_cnt,max_acct_level_cnt,max_task_actv_type_cnt,future_ts_cnt,max_obs_level_cnt,week_start_day_num,ts_approval_level,task_code_len,proj_short_len,wbs_short_len,rsrc_short_len,acct_short_len,role_short_len,max_base_cnt,def_target_drtn_hr_cnt,day_hr_cnt,week_hr_cnt,year_hr_cnt,month_hr_cnt,max_actv_level_cnt,max_eps_level_cnt,max_pcat_level_cnt,max_rcat_level_cnt,complete_task_hrs_flag,default_timesheet_flag,future_ts_hrs_flag,ev_fix_cost_flag,ts_daily_flag,notstart_task_hrs_flag,prestart_task_hrs_flag,postend_task_hrs_flag,ermm_enabled_flag,name_sep_char,year_char,month_char,week_char,day_char,hour_char,minute_char,ts_approval_type,db_name,tasksum_period_type,trsrcsum_period_type,database_version,phase_label,ts_approve_user_id,curr_id,ev_user_pct,ev_etc_user_value,ev_compute_type,ev_etc_compute_type,rpt_header_1,rpt_header_2,rpt_header_3,rpt_footer_1,rpt_footer_2,rpt_footer_3,rpt_user_1,rpt_user_2,rpt_user_3,max_role_level_cnt,past_ts_cnt,projinit_admin_user_id,default_rsrc_sec_id,allow_user_time_period_flag,exp_root_url,ts_rsrc_def_asgn_actv_flag
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select prefer_id,hr_decimal_cnt,xfer_complete_day_cnt,xfer_notstart_day_cnt,max_wbs_level_cnt,max_rsrc_level_cnt,max_acct_level_cnt,max_task_actv_type_cnt,future_ts_cnt,max_obs_level_cnt,week_start_day_num,ts_approval_level,task_code_len,proj_short_len,wbs_short_len,rsrc_short_len,acct_short_len,role_short_len,max_base_cnt,def_target_drtn_hr_cnt,day_hr_cnt,week_hr_cnt,year_hr_cnt,month_hr_cnt,max_actv_level_cnt,max_eps_level_cnt,max_pcat_level_cnt,max_rcat_level_cnt,complete_task_hrs_flag,default_timesheet_flag,future_ts_hrs_flag,ev_fix_cost_flag,ts_daily_flag,notstart_task_hrs_flag,prestart_task_hrs_flag,postend_task_hrs_flag,ermm_enabled_flag,name_sep_char,year_char,month_char,week_char,day_char,hour_char,minute_char,ts_approval_type,db_name,tasksum_period_type,trsrcsum_period_type,database_version,phase_label,ts_approve_user_id,curr_id,ev_user_pct,ev_etc_user_value,ev_compute_type,ev_etc_compute_type,rpt_header_1,rpt_header_2,rpt_header_3,rpt_footer_1,rpt_footer_2,rpt_footer_3,rpt_user_1,rpt_user_2,rpt_user_3,max_role_level_cnt,past_ts_cnt,projinit_admin_user_id,default_rsrc_sec_id,allow_user_time_period_flag,exp_root_url,ts_rsrc_def_asgn_actv_flag
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iprefer_id,@ihr_decimal_cnt,@ixfer_complete_day_cnt,@ixfer_notstart_day_cnt,@imax_wbs_level_cnt,@imax_rsrc_level_cnt,@imax_acct_level_cnt,@imax_task_actv_type_cnt,@ifuture_ts_cnt,@imax_obs_level_cnt,@iweek_start_day_num,@its_approval_level,@itask_code_len,@iproj_short_len,@iwbs_short_len,@irsrc_short_len,@iacct_short_len,@irole_short_len,@imax_base_cnt,@idef_target_drtn_hr_cnt,@iday_hr_cnt,@iweek_hr_cnt,@iyear_hr_cnt,@imonth_hr_cnt,@imax_actv_level_cnt,@imax_eps_level_cnt,@imax_pcat_level_cnt,@imax_rcat_level_cnt,@icomplete_task_hrs_flag,@idefault_timesheet_flag,@ifuture_ts_hrs_flag,@iev_fix_cost_flag,@its_daily_flag,@inotstart_task_hrs_flag,@iprestart_task_hrs_flag,@ipostend_task_hrs_flag,@iermm_enabled_flag,@iname_sep_char,@iyear_char,@imonth_char,@iweek_char,@iday_char,@ihour_char,@iminute_char,@its_approval_type,@idb_name,@itasksum_period_type,@itrsrcsum_period_type,@idatabase_version,@iphase_label,@its_approve_user_id,@icurr_id,@iev_user_pct,@iev_etc_user_value,@iev_compute_type,@iev_etc_compute_type,@irpt_header_1,@irpt_header_2,@irpt_header_3,@irpt_footer_1,@irpt_footer_2,@irpt_footer_3,@irpt_user_1,@irpt_user_2,@irpt_user_3,@imax_role_level_cnt,@ipast_ts_cnt,@iprojinit_admin_user_id,@idefault_rsrc_sec_id,@iallow_user_time_period_flag,@iexp_root_url,@its_rsrc_def_asgn_actv_flag, @idelete_session_id
  else
    fetch deleted_c into @dprefer_id,@dhr_decimal_cnt,@dxfer_complete_day_cnt,@dxfer_notstart_day_cnt,@dmax_wbs_level_cnt,@dmax_rsrc_level_cnt,@dmax_acct_level_cnt,@dmax_task_actv_type_cnt,@dfuture_ts_cnt,@dmax_obs_level_cnt,@dweek_start_day_num,@dts_approval_level,@dtask_code_len,@dproj_short_len,@dwbs_short_len,@drsrc_short_len,@dacct_short_len,@drole_short_len,@dmax_base_cnt,@ddef_target_drtn_hr_cnt,@dday_hr_cnt,@dweek_hr_cnt,@dyear_hr_cnt,@dmonth_hr_cnt,@dmax_actv_level_cnt,@dmax_eps_level_cnt,@dmax_pcat_level_cnt,@dmax_rcat_level_cnt,@dcomplete_task_hrs_flag,@ddefault_timesheet_flag,@dfuture_ts_hrs_flag,@dev_fix_cost_flag,@dts_daily_flag,@dnotstart_task_hrs_flag,@dprestart_task_hrs_flag,@dpostend_task_hrs_flag,@dermm_enabled_flag,@dname_sep_char,@dyear_char,@dmonth_char,@dweek_char,@dday_char,@dhour_char,@dminute_char,@dts_approval_type,@ddb_name,@dtasksum_period_type,@dtrsrcsum_period_type,@ddatabase_version,@dphase_label,@dts_approve_user_id,@dcurr_id,@dev_user_pct,@dev_etc_user_value,@dev_compute_type,@dev_etc_compute_type,@drpt_header_1,@drpt_header_2,@drpt_header_3,@drpt_footer_1,@drpt_footer_2,@drpt_footer_3,@drpt_user_1,@drpt_user_2,@drpt_user_3,@dmax_role_level_cnt,@dpast_ts_cnt,@dprojinit_admin_user_id,@ddefault_rsrc_sec_id,@dallow_user_time_period_flag,@dexp_root_url,@dts_rsrc_def_asgn_actv_flag, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dprefer_id;
				

    end else begin
    	set @pk1 = @iprefer_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dprefer_id,@dhr_decimal_cnt,@dxfer_complete_day_cnt,@dxfer_notstart_day_cnt,@dmax_wbs_level_cnt,@dmax_rsrc_level_cnt,@dmax_acct_level_cnt,@dmax_task_actv_type_cnt,@dfuture_ts_cnt,@dmax_obs_level_cnt,@dweek_start_day_num,@dts_approval_level,@dtask_code_len,@dproj_short_len,@dwbs_short_len,@drsrc_short_len,@dacct_short_len,@drole_short_len,@dmax_base_cnt,@ddef_target_drtn_hr_cnt,@dday_hr_cnt,@dweek_hr_cnt,@dyear_hr_cnt,@dmonth_hr_cnt,@dmax_actv_level_cnt,@dmax_eps_level_cnt,@dmax_pcat_level_cnt,@dmax_rcat_level_cnt,@dcomplete_task_hrs_flag,@ddefault_timesheet_flag,@dfuture_ts_hrs_flag,@dev_fix_cost_flag,@dts_daily_flag,@dnotstart_task_hrs_flag,@dprestart_task_hrs_flag,@dpostend_task_hrs_flag,@dermm_enabled_flag,@dname_sep_char,@dyear_char,@dmonth_char,@dweek_char,@dday_char,@dhour_char,@dminute_char,@dts_approval_type,@ddb_name,@dtasksum_period_type,@dtrsrcsum_period_type,@ddatabase_version,@dphase_label,@dts_approve_user_id,@dcurr_id,@dev_user_pct,@dev_etc_user_value,@dev_compute_type,@dev_etc_compute_type,@drpt_header_1,@drpt_header_2,@drpt_header_3,@drpt_footer_1,@drpt_footer_2,@drpt_footer_3,@drpt_user_1,@drpt_user_2,@drpt_user_3,@dmax_role_level_cnt,@dpast_ts_cnt,@dprojinit_admin_user_id,@ddefault_rsrc_sec_id,@dallow_user_time_period_flag,@dexp_root_url,@dts_rsrc_def_asgn_actv_flag, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(prefer_id)  exec audit_data 'PREFER','prefer_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprefer_id,@iprefer_id,@audit_data OUTPUT
      if (@loper='D') or  update(hr_decimal_cnt)  exec audit_data 'PREFER','hr_decimal_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhr_decimal_cnt,@ihr_decimal_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(xfer_complete_day_cnt)  exec audit_data 'PREFER','xfer_complete_day_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dxfer_complete_day_cnt,@ixfer_complete_day_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(xfer_notstart_day_cnt)  exec audit_data 'PREFER','xfer_notstart_day_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dxfer_notstart_day_cnt,@ixfer_notstart_day_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(max_wbs_level_cnt)  exec audit_data 'PREFER','max_wbs_level_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_wbs_level_cnt,@imax_wbs_level_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(max_rsrc_level_cnt)  exec audit_data 'PREFER','max_rsrc_level_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_rsrc_level_cnt,@imax_rsrc_level_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(max_acct_level_cnt)  exec audit_data 'PREFER','max_acct_level_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_acct_level_cnt,@imax_acct_level_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(max_task_actv_type_cnt)  exec audit_data 'PREFER','max_task_actv_type_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_task_actv_type_cnt,@imax_task_actv_type_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(future_ts_cnt)  exec audit_data 'PREFER','future_ts_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfuture_ts_cnt,@ifuture_ts_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(max_obs_level_cnt)  exec audit_data 'PREFER','max_obs_level_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_obs_level_cnt,@imax_obs_level_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(week_start_day_num)  exec audit_data 'PREFER','week_start_day_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dweek_start_day_num,@iweek_start_day_num,@audit_data OUTPUT
      if (@loper='D') or  update(ts_approval_level)  exec audit_data 'PREFER','ts_approval_level',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dts_approval_level,@its_approval_level,@audit_data OUTPUT
      if (@loper='D') or  update(task_code_len)  exec audit_data 'PREFER','task_code_len',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_code_len,@itask_code_len,@audit_data OUTPUT
      if (@loper='D') or  update(proj_short_len)  exec audit_data 'PREFER','proj_short_len',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_short_len,@iproj_short_len,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_short_len)  exec audit_data 'PREFER','wbs_short_len',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_short_len,@iwbs_short_len,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_short_len)  exec audit_data 'PREFER','rsrc_short_len',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_short_len,@irsrc_short_len,@audit_data OUTPUT
      if (@loper='D') or  update(acct_short_len)  exec audit_data 'PREFER','acct_short_len',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dacct_short_len,@iacct_short_len,@audit_data OUTPUT
      if (@loper='D') or  update(role_short_len)  exec audit_data 'PREFER','role_short_len',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_short_len,@irole_short_len,@audit_data OUTPUT
      if (@loper='D') or  update(max_base_cnt)  exec audit_data 'PREFER','max_base_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_base_cnt,@imax_base_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(def_target_drtn_hr_cnt)  exec audit_data 'PREFER','def_target_drtn_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddef_target_drtn_hr_cnt,@idef_target_drtn_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(day_hr_cnt)  exec audit_data 'PREFER','day_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dday_hr_cnt,@iday_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(week_hr_cnt)  exec audit_data 'PREFER','week_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dweek_hr_cnt,@iweek_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(year_hr_cnt)  exec audit_data 'PREFER','year_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dyear_hr_cnt,@iyear_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(month_hr_cnt)  exec audit_data 'PREFER','month_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmonth_hr_cnt,@imonth_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(max_actv_level_cnt)  exec audit_data 'PREFER','max_actv_level_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_actv_level_cnt,@imax_actv_level_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(max_eps_level_cnt)  exec audit_data 'PREFER','max_eps_level_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_eps_level_cnt,@imax_eps_level_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(max_pcat_level_cnt)  exec audit_data 'PREFER','max_pcat_level_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_pcat_level_cnt,@imax_pcat_level_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(max_rcat_level_cnt)  exec audit_data 'PREFER','max_rcat_level_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_rcat_level_cnt,@imax_rcat_level_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(complete_task_hrs_flag)  exec audit_data 'PREFER','complete_task_hrs_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcomplete_task_hrs_flag,@icomplete_task_hrs_flag,@audit_data OUTPUT
      if (@loper='D') or  update(default_timesheet_flag)  exec audit_data 'PREFER','default_timesheet_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddefault_timesheet_flag,@idefault_timesheet_flag,@audit_data OUTPUT
      if (@loper='D') or  update(future_ts_hrs_flag)  exec audit_data 'PREFER','future_ts_hrs_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfuture_ts_hrs_flag,@ifuture_ts_hrs_flag,@audit_data OUTPUT
      if (@loper='D') or  update(ev_fix_cost_flag)  exec audit_data 'PREFER','ev_fix_cost_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dev_fix_cost_flag,@iev_fix_cost_flag,@audit_data OUTPUT
      if (@loper='D') or  update(ts_daily_flag)  exec audit_data 'PREFER','ts_daily_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dts_daily_flag,@its_daily_flag,@audit_data OUTPUT
      if (@loper='D') or  update(notstart_task_hrs_flag)  exec audit_data 'PREFER','notstart_task_hrs_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dnotstart_task_hrs_flag,@inotstart_task_hrs_flag,@audit_data OUTPUT
      if (@loper='D') or  update(prestart_task_hrs_flag)  exec audit_data 'PREFER','prestart_task_hrs_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprestart_task_hrs_flag,@iprestart_task_hrs_flag,@audit_data OUTPUT
      if (@loper='D') or  update(postend_task_hrs_flag)  exec audit_data 'PREFER','postend_task_hrs_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpostend_task_hrs_flag,@ipostend_task_hrs_flag,@audit_data OUTPUT
      if (@loper='D') or  update(ermm_enabled_flag)  exec audit_data 'PREFER','ermm_enabled_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dermm_enabled_flag,@iermm_enabled_flag,@audit_data OUTPUT
      if (@loper='D') or  update(name_sep_char)  exec audit_data 'PREFER','name_sep_char',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dname_sep_char,@iname_sep_char,@audit_data OUTPUT
      if (@loper='D') or  update(year_char)  exec audit_data 'PREFER','year_char',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dyear_char,@iyear_char,@audit_data OUTPUT
      if (@loper='D') or  update(month_char)  exec audit_data 'PREFER','month_char',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmonth_char,@imonth_char,@audit_data OUTPUT
      if (@loper='D') or  update(week_char)  exec audit_data 'PREFER','week_char',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dweek_char,@iweek_char,@audit_data OUTPUT
      if (@loper='D') or  update(day_char)  exec audit_data 'PREFER','day_char',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dday_char,@iday_char,@audit_data OUTPUT
      if (@loper='D') or  update(hour_char)  exec audit_data 'PREFER','hour_char',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhour_char,@ihour_char,@audit_data OUTPUT
      if (@loper='D') or  update(minute_char)  exec audit_data 'PREFER','minute_char',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dminute_char,@iminute_char,@audit_data OUTPUT
      if (@loper='D') or  update(ts_approval_type)  exec audit_data 'PREFER','ts_approval_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dts_approval_type,@its_approval_type,@audit_data OUTPUT
      if (@loper='D') or  update(db_name)  exec audit_data 'PREFER','db_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddb_name,@idb_name,@audit_data OUTPUT
      if (@loper='D') or  update(tasksum_period_type)  exec audit_data 'PREFER','tasksum_period_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtasksum_period_type,@itasksum_period_type,@audit_data OUTPUT
      if (@loper='D') or  update(trsrcsum_period_type)  exec audit_data 'PREFER','trsrcsum_period_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtrsrcsum_period_type,@itrsrcsum_period_type,@audit_data OUTPUT
      if (@loper='D') or  update(database_version)  exec audit_data 'PREFER','database_version',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddatabase_version,@idatabase_version,@audit_data OUTPUT
      if (@loper='D') or  update(phase_label)  exec audit_data 'PREFER','phase_label',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dphase_label,@iphase_label,@audit_data OUTPUT
      if (@loper='D') or  update(ts_approve_user_id)  exec audit_data 'PREFER','ts_approve_user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dts_approve_user_id,@its_approve_user_id,@audit_data OUTPUT
      if (@loper='D') or  update(curr_id)  exec audit_data 'PREFER','curr_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcurr_id,@icurr_id,@audit_data OUTPUT
      if (@loper='D') or  update(ev_user_pct)  exec audit_data 'PREFER','ev_user_pct',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dev_user_pct,@iev_user_pct,@audit_data OUTPUT
      if (@loper='D') or  update(ev_etc_user_value)  exec audit_data 'PREFER','ev_etc_user_value',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dev_etc_user_value,@iev_etc_user_value,@audit_data OUTPUT
      if (@loper='D') or  update(ev_compute_type)  exec audit_data 'PREFER','ev_compute_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dev_compute_type,@iev_compute_type,@audit_data OUTPUT
      if (@loper='D') or  update(ev_etc_compute_type)  exec audit_data 'PREFER','ev_etc_compute_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dev_etc_compute_type,@iev_etc_compute_type,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_header_1)  exec audit_data 'PREFER','rpt_header_1',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_header_1,@irpt_header_1,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_header_2)  exec audit_data 'PREFER','rpt_header_2',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_header_2,@irpt_header_2,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_header_3)  exec audit_data 'PREFER','rpt_header_3',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_header_3,@irpt_header_3,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_footer_1)  exec audit_data 'PREFER','rpt_footer_1',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_footer_1,@irpt_footer_1,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_footer_2)  exec audit_data 'PREFER','rpt_footer_2',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_footer_2,@irpt_footer_2,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_footer_3)  exec audit_data 'PREFER','rpt_footer_3',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_footer_3,@irpt_footer_3,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_user_1)  exec audit_data 'PREFER','rpt_user_1',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_user_1,@irpt_user_1,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_user_2)  exec audit_data 'PREFER','rpt_user_2',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_user_2,@irpt_user_2,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_user_3)  exec audit_data 'PREFER','rpt_user_3',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_user_3,@irpt_user_3,@audit_data OUTPUT
      if (@loper='D') or  update(max_role_level_cnt)  exec audit_data 'PREFER','max_role_level_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_role_level_cnt,@imax_role_level_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(past_ts_cnt)  exec audit_data 'PREFER','past_ts_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpast_ts_cnt,@ipast_ts_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(projinit_admin_user_id)  exec audit_data 'PREFER','projinit_admin_user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprojinit_admin_user_id,@iprojinit_admin_user_id,@audit_data OUTPUT
      if (@loper='D') or  update(default_rsrc_sec_id)  exec audit_data 'PREFER','default_rsrc_sec_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddefault_rsrc_sec_id,@idefault_rsrc_sec_id,@audit_data OUTPUT
      if (@loper='D') or  update(allow_user_time_period_flag)  exec audit_data 'PREFER','allow_user_time_period_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dallow_user_time_period_flag,@iallow_user_time_period_flag,@audit_data OUTPUT
      if (@loper='D') or  update(exp_root_url)  exec audit_data 'PREFER','exp_root_url',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dexp_root_url,@iexp_root_url,@audit_data OUTPUT
      if (@loper='D') or  update(ts_rsrc_def_asgn_actv_flag)  exec audit_data 'PREFER','ts_rsrc_def_asgn_actv_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dts_rsrc_def_asgn_actv_flag,@its_rsrc_def_asgn_actv_flag,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PREFER', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PREFER', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iprefer_id,@ihr_decimal_cnt,@ixfer_complete_day_cnt,@ixfer_notstart_day_cnt,@imax_wbs_level_cnt,@imax_rsrc_level_cnt,@imax_acct_level_cnt,@imax_task_actv_type_cnt,@ifuture_ts_cnt,@imax_obs_level_cnt,@iweek_start_day_num,@its_approval_level,@itask_code_len,@iproj_short_len,@iwbs_short_len,@irsrc_short_len,@iacct_short_len,@irole_short_len,@imax_base_cnt,@idef_target_drtn_hr_cnt,@iday_hr_cnt,@iweek_hr_cnt,@iyear_hr_cnt,@imonth_hr_cnt,@imax_actv_level_cnt,@imax_eps_level_cnt,@imax_pcat_level_cnt,@imax_rcat_level_cnt,@icomplete_task_hrs_flag,@idefault_timesheet_flag,@ifuture_ts_hrs_flag,@iev_fix_cost_flag,@its_daily_flag,@inotstart_task_hrs_flag,@iprestart_task_hrs_flag,@ipostend_task_hrs_flag,@iermm_enabled_flag,@iname_sep_char,@iyear_char,@imonth_char,@iweek_char,@iday_char,@ihour_char,@iminute_char,@its_approval_type,@idb_name,@itasksum_period_type,@itrsrcsum_period_type,@idatabase_version,@iphase_label,@its_approve_user_id,@icurr_id,@iev_user_pct,@iev_etc_user_value,@iev_compute_type,@iev_etc_compute_type,@irpt_header_1,@irpt_header_2,@irpt_header_3,@irpt_footer_1,@irpt_footer_2,@irpt_footer_3,@irpt_user_1,@irpt_user_2,@irpt_user_3,@imax_role_level_cnt,@ipast_ts_cnt,@iprojinit_admin_user_id,@idefault_rsrc_sec_id,@iallow_user_time_period_flag,@iexp_root_url,@its_rsrc_def_asgn_actv_flag, @idelete_session_id;
    else
     fetch deleted_c into @dprefer_id,@dhr_decimal_cnt,@dxfer_complete_day_cnt,@dxfer_notstart_day_cnt,@dmax_wbs_level_cnt,@dmax_rsrc_level_cnt,@dmax_acct_level_cnt,@dmax_task_actv_type_cnt,@dfuture_ts_cnt,@dmax_obs_level_cnt,@dweek_start_day_num,@dts_approval_level,@dtask_code_len,@dproj_short_len,@dwbs_short_len,@drsrc_short_len,@dacct_short_len,@drole_short_len,@dmax_base_cnt,@ddef_target_drtn_hr_cnt,@dday_hr_cnt,@dweek_hr_cnt,@dyear_hr_cnt,@dmonth_hr_cnt,@dmax_actv_level_cnt,@dmax_eps_level_cnt,@dmax_pcat_level_cnt,@dmax_rcat_level_cnt,@dcomplete_task_hrs_flag,@ddefault_timesheet_flag,@dfuture_ts_hrs_flag,@dev_fix_cost_flag,@dts_daily_flag,@dnotstart_task_hrs_flag,@dprestart_task_hrs_flag,@dpostend_task_hrs_flag,@dermm_enabled_flag,@dname_sep_char,@dyear_char,@dmonth_char,@dweek_char,@dday_char,@dhour_char,@dminute_char,@dts_approval_type,@ddb_name,@dtasksum_period_type,@dtrsrcsum_period_type,@ddatabase_version,@dphase_label,@dts_approve_user_id,@dcurr_id,@dev_user_pct,@dev_etc_user_value,@dev_compute_type,@dev_etc_compute_type,@drpt_header_1,@drpt_header_2,@drpt_header_3,@drpt_footer_1,@drpt_footer_2,@drpt_footer_3,@drpt_user_1,@drpt_user_2,@drpt_user_3,@dmax_role_level_cnt,@dpast_ts_cnt,@dprojinit_admin_user_id,@ddefault_rsrc_sec_id,@dallow_user_time_period_flag,@dexp_root_url,@dts_rsrc_def_asgn_actv_flag, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PROFILE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PROFILE' AND xtype = 'TR')
    DROP trigger PRMAUD_PROFILE

PRMAUD_PROFILE
create trigger PRMAUD_PROFILE
on PROFILE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iprof_id varchar(255),@idefault_flag varchar(255),@isuperuser_flag varchar(255),@iscope_type varchar(255),@iprof_name varchar(255)

  declare @dprof_id varchar(255),@ddefault_flag varchar(255),@dsuperuser_flag varchar(255),@dscope_type varchar(255),@dprof_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(prof_id) and
			not update(default_flag) and
			not update(superuser_flag) and
			not update(scope_type) and
			not update(prof_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PROFILE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROFILE',prof_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROFILE', prof_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select prof_id,default_flag,superuser_flag,scope_type,prof_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select prof_id,default_flag,superuser_flag,scope_type,prof_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iprof_id,@idefault_flag,@isuperuser_flag,@iscope_type,@iprof_name, @idelete_session_id
  else
    fetch deleted_c into @dprof_id,@ddefault_flag,@dsuperuser_flag,@dscope_type,@dprof_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dprof_id;
				

    end else begin
    	set @pk1 = @iprof_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dprof_id,@ddefault_flag,@dsuperuser_flag,@dscope_type,@dprof_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(prof_id)  exec audit_data 'PROFILE','prof_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprof_id,@iprof_id,@audit_data OUTPUT
      if (@loper='D') or  update(default_flag)  exec audit_data 'PROFILE','default_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddefault_flag,@idefault_flag,@audit_data OUTPUT
      if (@loper='D') or  update(superuser_flag)  exec audit_data 'PROFILE','superuser_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsuperuser_flag,@isuperuser_flag,@audit_data OUTPUT
      if (@loper='D') or  update(scope_type)  exec audit_data 'PROFILE','scope_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dscope_type,@iscope_type,@audit_data OUTPUT
      if (@loper='D') or  update(prof_name)  exec audit_data 'PROFILE','prof_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprof_name,@iprof_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PROFILE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PROFILE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iprof_id,@idefault_flag,@isuperuser_flag,@iscope_type,@iprof_name, @idelete_session_id;
    else
     fetch deleted_c into @dprof_id,@ddefault_flag,@dsuperuser_flag,@dscope_type,@dprof_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PROCGROUP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PROCGROUP' AND xtype = 'TR')
    DROP trigger PRMAUD_PROCGROUP

PRMAUD_PROCGROUP
create trigger PRMAUD_PROCGROUP
on PROCGROUP
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iproc_group_id varchar(255),@iseq_num varchar(255),@iproc_group_name varchar(255)

  declare @dproc_group_id varchar(255),@dseq_num varchar(255),@dproc_group_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(proc_group_id) and
			not update(seq_num) and
			not update(proc_group_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PROCGROUP', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROCGROUP',proc_group_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROCGROUP', proc_group_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select proc_group_id,seq_num,proc_group_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select proc_group_id,seq_num,proc_group_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iproc_group_id,@iseq_num,@iproc_group_name, @idelete_session_id
  else
    fetch deleted_c into @dproc_group_id,@dseq_num,@dproc_group_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dproc_group_id;
				

    end else begin
    	set @pk1 = @iproc_group_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dproc_group_id,@dseq_num,@dproc_group_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(proc_group_id)  exec audit_data 'PROCGROUP','proc_group_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproc_group_id,@iproc_group_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'PROCGROUP','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(proc_group_name)  exec audit_data 'PROCGROUP','proc_group_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproc_group_name,@iproc_group_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PROCGROUP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PROCGROUP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iproc_group_id,@iseq_num,@iproc_group_name, @idelete_session_id;
    else
     fetch deleted_c into @dproc_group_id,@dseq_num,@dproc_group_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PROCITEM
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PROCITEM' AND xtype = 'TR')
    DROP trigger PRMAUD_PROCITEM

PRMAUD_PROCITEM
create trigger PRMAUD_PROCITEM
on PROCITEM
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iproc_item_id varchar(255),@iproc_group_id varchar(255),@iseq_num varchar(255),@iproc_name varchar(255),@iproc_wt varchar(255)

  declare @dproc_item_id varchar(255),@dproc_group_id varchar(255),@dseq_num varchar(255),@dproc_name varchar(255),@dproc_wt varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(proc_item_id) and
			not update(proc_group_id) and
			not update(seq_num) and
			not update(proc_name) and
			not update(proc_wt) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PROCITEM', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROCITEM',proc_item_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROCITEM', proc_item_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select proc_item_id,proc_group_id,seq_num,proc_name,proc_wt
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select proc_item_id,proc_group_id,seq_num,proc_name,proc_wt
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iproc_item_id,@iproc_group_id,@iseq_num,@iproc_name,@iproc_wt, @idelete_session_id
  else
    fetch deleted_c into @dproc_item_id,@dproc_group_id,@dseq_num,@dproc_name,@dproc_wt, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dproc_item_id;
				

    end else begin
    	set @pk1 = @iproc_item_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dproc_item_id,@dproc_group_id,@dseq_num,@dproc_name,@dproc_wt, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(proc_item_id)  exec audit_data 'PROCITEM','proc_item_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproc_item_id,@iproc_item_id,@audit_data OUTPUT
      if (@loper='D') or  update(proc_group_id)  exec audit_data 'PROCITEM','proc_group_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproc_group_id,@iproc_group_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'PROCITEM','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(proc_name)  exec audit_data 'PROCITEM','proc_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproc_name,@iproc_name,@audit_data OUTPUT
      if (@loper='D') or  update(proc_wt)  exec audit_data 'PROCITEM','proc_wt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproc_wt,@iproc_wt,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PROCITEM', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PROCITEM', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iproc_item_id,@iproc_group_id,@iseq_num,@iproc_name,@iproc_wt, @idelete_session_id;
    else
     fetch deleted_c into @dproc_item_id,@dproc_group_id,@dseq_num,@dproc_name,@dproc_wt, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PROFPRIV
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PROFPRIV' AND xtype = 'TR')
    DROP trigger PRMAUD_PROFPRIV

PRMAUD_PROFPRIV
create trigger PRMAUD_PROFPRIV
on PROFPRIV
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iprof_id varchar(255),@ipriv_num varchar(255),@iallow_flag varchar(255)

  declare @dprof_id varchar(255),@dpriv_num varchar(255),@dallow_flag varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(prof_id) and
			not update(priv_num) and
			not update(allow_flag) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PROFPRIV', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROFPRIV',prof_id,priv_num,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROFPRIV', prof_id,priv_num,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select prof_id,priv_num,allow_flag
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select prof_id,priv_num,allow_flag
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iprof_id,@ipriv_num,@iallow_flag, @idelete_session_id
  else
    fetch deleted_c into @dprof_id,@dpriv_num,@dallow_flag, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dprof_id;
				
set @pk2 = @dpriv_num;
				

    end else begin
    	set @pk1 = @iprof_id;
				
set @pk2 = @ipriv_num;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dprof_id,@dpriv_num,@dallow_flag, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(prof_id)  exec audit_data 'PROFPRIV','prof_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprof_id,@iprof_id,@audit_data OUTPUT
      if (@loper='D') or  update(priv_num)  exec audit_data 'PROFPRIV','priv_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpriv_num,@ipriv_num,@audit_data OUTPUT
      if (@loper='D') or  update(allow_flag)  exec audit_data 'PROFPRIV','allow_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dallow_flag,@iallow_flag,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PROFPRIV', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PROFPRIV', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iprof_id,@ipriv_num,@iallow_flag, @idelete_session_id;
    else
     fetch deleted_c into @dprof_id,@dpriv_num,@dallow_flag, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PROJCOST
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PROJCOST' AND xtype = 'TR')
    DROP trigger PRMAUD_PROJCOST

PRMAUD_PROJCOST
create trigger PRMAUD_PROJCOST
on PROJCOST
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @icost_item_id varchar(255),@iproj_id varchar(255),@itask_id varchar(255),@iauto_compute_act_flag varchar(255),@icost_load_type varchar(255),@iacct_id varchar(255),@icost_type_id varchar(255),@itarget_cost varchar(255),@iact_cost varchar(255),@iremain_cost varchar(255),@iqty_name varchar(255),@itarget_qty varchar(255),@icost_per_qty varchar(255),@ipo_number varchar(255),@ivendor_name varchar(255),@icost_name varchar(255),@ipobs_id varchar(255)

  declare @dcost_item_id varchar(255),@dproj_id varchar(255),@dtask_id varchar(255),@dauto_compute_act_flag varchar(255),@dcost_load_type varchar(255),@dacct_id varchar(255),@dcost_type_id varchar(255),@dtarget_cost varchar(255),@dact_cost varchar(255),@dremain_cost varchar(255),@dqty_name varchar(255),@dtarget_qty varchar(255),@dcost_per_qty varchar(255),@dpo_number varchar(255),@dvendor_name varchar(255),@dcost_name varchar(255),@dpobs_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(cost_item_id) and
			not update(proj_id) and
			not update(task_id) and
			not update(auto_compute_act_flag) and
			not update(cost_load_type) and
			not update(acct_id) and
			not update(cost_type_id) and
			not update(target_cost) and
			not update(act_cost) and
			not update(remain_cost) and
			not update(qty_name) and
			not update(target_qty) and
			not update(cost_per_qty) and
			not update(po_number) and
			not update(vendor_name) and
			not update(cost_name) and
			not update(pobs_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PROJCOST', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJCOST',cost_item_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJCOST', cost_item_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select cost_item_id,proj_id,task_id,auto_compute_act_flag,cost_load_type,acct_id,cost_type_id,target_cost,act_cost,remain_cost,qty_name,target_qty,cost_per_qty,po_number,vendor_name,cost_name,pobs_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select cost_item_id,proj_id,task_id,auto_compute_act_flag,cost_load_type,acct_id,cost_type_id,target_cost,act_cost,remain_cost,qty_name,target_qty,cost_per_qty,po_number,vendor_name,cost_name,pobs_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @icost_item_id,@iproj_id,@itask_id,@iauto_compute_act_flag,@icost_load_type,@iacct_id,@icost_type_id,@itarget_cost,@iact_cost,@iremain_cost,@iqty_name,@itarget_qty,@icost_per_qty,@ipo_number,@ivendor_name,@icost_name,@ipobs_id, @idelete_session_id
  else
    fetch deleted_c into @dcost_item_id,@dproj_id,@dtask_id,@dauto_compute_act_flag,@dcost_load_type,@dacct_id,@dcost_type_id,@dtarget_cost,@dact_cost,@dremain_cost,@dqty_name,@dtarget_qty,@dcost_per_qty,@dpo_number,@dvendor_name,@dcost_name,@dpobs_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dcost_item_id;
				

    end else begin
    	set @pk1 = @icost_item_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dcost_item_id,@dproj_id,@dtask_id,@dauto_compute_act_flag,@dcost_load_type,@dacct_id,@dcost_type_id,@dtarget_cost,@dact_cost,@dremain_cost,@dqty_name,@dtarget_qty,@dcost_per_qty,@dpo_number,@dvendor_name,@dcost_name,@dpobs_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(cost_item_id)  exec audit_data 'PROJCOST','cost_item_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_item_id,@icost_item_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'PROJCOST','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(task_id)  exec audit_data 'PROJCOST','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(auto_compute_act_flag)  exec audit_data 'PROJCOST','auto_compute_act_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dauto_compute_act_flag,@iauto_compute_act_flag,@audit_data OUTPUT
      if (@loper='D') or  update(cost_load_type)  exec audit_data 'PROJCOST','cost_load_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_load_type,@icost_load_type,@audit_data OUTPUT
      if (@loper='D') or  update(acct_id)  exec audit_data 'PROJCOST','acct_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dacct_id,@iacct_id,@audit_data OUTPUT
      if (@loper='D') or  update(cost_type_id)  exec audit_data 'PROJCOST','cost_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_type_id,@icost_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(target_cost)  exec audit_data 'PROJCOST','target_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_cost,@itarget_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_cost)  exec audit_data 'PROJCOST','act_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_cost,@iact_cost,@audit_data OUTPUT
      if (@loper='D') or  update(remain_cost)  exec audit_data 'PROJCOST','remain_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_cost,@iremain_cost,@audit_data OUTPUT
      if (@loper='D') or  update(qty_name)  exec audit_data 'PROJCOST','qty_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dqty_name,@iqty_name,@audit_data OUTPUT
      if (@loper='D') or  update(target_qty)  exec audit_data 'PROJCOST','target_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_qty,@itarget_qty,@audit_data OUTPUT
      if (@loper='D') or  update(cost_per_qty)  exec audit_data 'PROJCOST','cost_per_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_per_qty,@icost_per_qty,@audit_data OUTPUT
      if (@loper='D') or  update(po_number)  exec audit_data 'PROJCOST','po_number',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpo_number,@ipo_number,@audit_data OUTPUT
      if (@loper='D') or  update(vendor_name)  exec audit_data 'PROJCOST','vendor_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dvendor_name,@ivendor_name,@audit_data OUTPUT
      if (@loper='D') or  update(cost_name)  exec audit_data 'PROJCOST','cost_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_name,@icost_name,@audit_data OUTPUT
      if (@loper='D') or  update(pobs_id)  exec audit_data 'PROJCOST','pobs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpobs_id,@ipobs_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PROJCOST', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PROJCOST', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @icost_item_id,@iproj_id,@itask_id,@iauto_compute_act_flag,@icost_load_type,@iacct_id,@icost_type_id,@itarget_cost,@iact_cost,@iremain_cost,@iqty_name,@itarget_qty,@icost_per_qty,@ipo_number,@ivendor_name,@icost_name,@ipobs_id, @idelete_session_id;
    else
     fetch deleted_c into @dcost_item_id,@dproj_id,@dtask_id,@dauto_compute_act_flag,@dcost_load_type,@dacct_id,@dcost_type_id,@dtarget_cost,@dact_cost,@dremain_cost,@dqty_name,@dtarget_qty,@dcost_per_qty,@dpo_number,@dvendor_name,@dcost_name,@dpobs_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PROJECT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PROJECT' AND xtype = 'TR')
    DROP trigger PRMAUD_PROJECT

PRMAUD_PROJECT
create trigger PRMAUD_PROJECT
on PROJECT
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iproj_id varchar(255),@ify_start_month_num varchar(255),@ichng_eff_cmp_pct_flag varchar(255),@irsrc_self_add_flag varchar(255),@iallow_complete_flag varchar(255),@irsrc_multi_assign_flag varchar(255),@icheckout_flag varchar(255),@iproject_flag varchar(255),@istep_complete_flag varchar(255),@icost_qty_recalc_flag varchar(255),@isum_only_flag varchar(255),@ibatch_sum_flag varchar(255),@iname_sep_char varchar(255),@idef_complete_pct_type varchar(255),@iproj_short_name varchar(255),@iacct_id varchar(255),@iorig_proj_id varchar(255),@isource_proj_id varchar(255),@ibase_type_id varchar(255),@iclndr_id varchar(255),@isum_base_proj_id varchar(255),@itask_code_base varchar(255),@itask_code_step varchar(255),@ipriority_num varchar(255),@iwbs_max_sum_level varchar(255),@irisk_level varchar(255),@istrgy_priority_num varchar(255),@ilast_checksum varchar(255),@icritical_drtn_hr_cnt varchar(255),@idef_cost_per_qty varchar(255),@ilast_recalc_date varchar(255),@iplan_start_date varchar(255),@iplan_end_date varchar(255),@iscd_end_date varchar(255),@iadd_date varchar(255),@isum_data_date varchar(255),@ilast_tasksum_date varchar(255),@ifcst_start_date varchar(255),@idef_duration_type varchar(255),@itask_code_prefix varchar(255),@iguid varchar(255),@idef_qty_type varchar(255),@iadd_by_name varchar(255),@iweb_local_root_path varchar(255),@iproj_url varchar(255),@idef_rate_type varchar(255),@iact_this_per_link_flag varchar(255),@idef_task_type varchar(255),@iact_pct_link_flag varchar(255),@iadd_act_remain_flag varchar(255),@icritical_path_type varchar(255),@itask_code_prefix_flag varchar(255),@idef_rollup_dates_flag varchar(255),@irem_target_link_flag varchar(255),@ireset_planned_flag varchar(255),@iallow_neg_act_flag varchar(255),@irsrc_id varchar(255),@imsp_managed_flag varchar(255),@imsp_update_actuals_flag varchar(255),@icheckout_date varchar(255),@icheckout_user_id varchar(255),@isum_assign_level varchar(255),@ilast_fin_dates_id varchar(255),@iuse_project_baseline_flag varchar(255),@ilast_baseline_update_date varchar(255),@its_rsrc_vw_compl_asgn_flag varchar(255),@its_rsrc_mark_act_finish_flag varchar(255),@its_rsrc_vw_inact_actv_flag varchar(255),@icr_external_key varchar(4000),@iapply_actuals_date varchar(255),@iintg_proj_type varchar(255)

  declare @dproj_id varchar(255),@dfy_start_month_num varchar(255),@dchng_eff_cmp_pct_flag varchar(255),@drsrc_self_add_flag varchar(255),@dallow_complete_flag varchar(255),@drsrc_multi_assign_flag varchar(255),@dcheckout_flag varchar(255),@dproject_flag varchar(255),@dstep_complete_flag varchar(255),@dcost_qty_recalc_flag varchar(255),@dsum_only_flag varchar(255),@dbatch_sum_flag varchar(255),@dname_sep_char varchar(255),@ddef_complete_pct_type varchar(255),@dproj_short_name varchar(255),@dacct_id varchar(255),@dorig_proj_id varchar(255),@dsource_proj_id varchar(255),@dbase_type_id varchar(255),@dclndr_id varchar(255),@dsum_base_proj_id varchar(255),@dtask_code_base varchar(255),@dtask_code_step varchar(255),@dpriority_num varchar(255),@dwbs_max_sum_level varchar(255),@drisk_level varchar(255),@dstrgy_priority_num varchar(255),@dlast_checksum varchar(255),@dcritical_drtn_hr_cnt varchar(255),@ddef_cost_per_qty varchar(255),@dlast_recalc_date varchar(255),@dplan_start_date varchar(255),@dplan_end_date varchar(255),@dscd_end_date varchar(255),@dadd_date varchar(255),@dsum_data_date varchar(255),@dlast_tasksum_date varchar(255),@dfcst_start_date varchar(255),@ddef_duration_type varchar(255),@dtask_code_prefix varchar(255),@dguid varchar(255),@ddef_qty_type varchar(255),@dadd_by_name varchar(255),@dweb_local_root_path varchar(255),@dproj_url varchar(255),@ddef_rate_type varchar(255),@dact_this_per_link_flag varchar(255),@ddef_task_type varchar(255),@dact_pct_link_flag varchar(255),@dadd_act_remain_flag varchar(255),@dcritical_path_type varchar(255),@dtask_code_prefix_flag varchar(255),@ddef_rollup_dates_flag varchar(255),@drem_target_link_flag varchar(255),@dreset_planned_flag varchar(255),@dallow_neg_act_flag varchar(255),@drsrc_id varchar(255),@dmsp_managed_flag varchar(255),@dmsp_update_actuals_flag varchar(255),@dcheckout_date varchar(255),@dcheckout_user_id varchar(255),@dsum_assign_level varchar(255),@dlast_fin_dates_id varchar(255),@duse_project_baseline_flag varchar(255),@dlast_baseline_update_date varchar(255),@dts_rsrc_vw_compl_asgn_flag varchar(255),@dts_rsrc_mark_act_finish_flag varchar(255),@dts_rsrc_vw_inact_actv_flag varchar(255),@dcr_external_key varchar(4000),@dapply_actuals_date varchar(255),@dintg_proj_type varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(proj_id) and
			not update(fy_start_month_num) and
			not update(chng_eff_cmp_pct_flag) and
			not update(rsrc_self_add_flag) and
			not update(allow_complete_flag) and
			not update(rsrc_multi_assign_flag) and
			not update(checkout_flag) and
			not update(project_flag) and
			not update(step_complete_flag) and
			not update(cost_qty_recalc_flag) and
			not update(sum_only_flag) and
			not update(batch_sum_flag) and
			not update(name_sep_char) and
			not update(def_complete_pct_type) and
			not update(proj_short_name) and
			not update(acct_id) and
			not update(orig_proj_id) and
			not update(source_proj_id) and
			not update(base_type_id) and
			not update(clndr_id) and
			not update(sum_base_proj_id) and
			not update(task_code_base) and
			not update(task_code_step) and
			not update(priority_num) and
			not update(wbs_max_sum_level) and
			not update(risk_level) and
			not update(strgy_priority_num) and
			not update(last_checksum) and
			not update(critical_drtn_hr_cnt) and
			not update(def_cost_per_qty) and
			not update(last_recalc_date) and
			not update(plan_start_date) and
			not update(plan_end_date) and
			not update(scd_end_date) and
			not update(add_date) and
			not update(sum_data_date) and
			not update(last_tasksum_date) and
			not update(fcst_start_date) and
			not update(def_duration_type) and
			not update(task_code_prefix) and
			not update(guid) and
			not update(def_qty_type) and
			not update(add_by_name) and
			not update(web_local_root_path) and
			not update(proj_url) and
			not update(def_rate_type) and
			not update(act_this_per_link_flag) and
			not update(def_task_type) and
			not update(act_pct_link_flag) and
			not update(add_act_remain_flag) and
			not update(critical_path_type) and
			not update(task_code_prefix_flag) and
			not update(def_rollup_dates_flag) and
			not update(rem_target_link_flag) and
			not update(reset_planned_flag) and
			not update(allow_neg_act_flag) and
			not update(rsrc_id) and
			not update(msp_managed_flag) and
			not update(msp_update_actuals_flag) and
			not update(checkout_date) and
			not update(checkout_user_id) and
			not update(sum_assign_level) and
			not update(last_fin_dates_id) and
			not update(use_project_baseline_flag) and
			not update(last_baseline_update_date) and
			not update(ts_rsrc_vw_compl_asgn_flag) and
			not update(ts_rsrc_mark_act_finish_flag) and
			not update(ts_rsrc_vw_inact_actv_flag) and
			not update(cr_external_key) and
			not update(apply_actuals_date) and
			not update(intg_proj_type) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PROJECT', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJECT',proj_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJECT', proj_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select proj_id,fy_start_month_num,chng_eff_cmp_pct_flag,rsrc_self_add_flag,allow_complete_flag,rsrc_multi_assign_flag,checkout_flag,project_flag,step_complete_flag,cost_qty_recalc_flag,sum_only_flag,batch_sum_flag,name_sep_char,def_complete_pct_type,proj_short_name,acct_id,orig_proj_id,source_proj_id,base_type_id,clndr_id,sum_base_proj_id,task_code_base,task_code_step,priority_num,wbs_max_sum_level,risk_level,strgy_priority_num,last_checksum,critical_drtn_hr_cnt,def_cost_per_qty,last_recalc_date,plan_start_date,plan_end_date,scd_end_date,add_date,sum_data_date,last_tasksum_date,fcst_start_date,def_duration_type,task_code_prefix,guid,def_qty_type,add_by_name,web_local_root_path,proj_url,def_rate_type,act_this_per_link_flag,def_task_type,act_pct_link_flag,add_act_remain_flag,critical_path_type,task_code_prefix_flag,def_rollup_dates_flag,rem_target_link_flag,reset_planned_flag,allow_neg_act_flag,rsrc_id,msp_managed_flag,msp_update_actuals_flag,checkout_date,checkout_user_id,sum_assign_level,last_fin_dates_id,use_project_baseline_flag,last_baseline_update_date,ts_rsrc_vw_compl_asgn_flag,ts_rsrc_mark_act_finish_flag,ts_rsrc_vw_inact_actv_flag,cr_external_key,apply_actuals_date,intg_proj_type
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select proj_id,fy_start_month_num,chng_eff_cmp_pct_flag,rsrc_self_add_flag,allow_complete_flag,rsrc_multi_assign_flag,checkout_flag,project_flag,step_complete_flag,cost_qty_recalc_flag,sum_only_flag,batch_sum_flag,name_sep_char,def_complete_pct_type,proj_short_name,acct_id,orig_proj_id,source_proj_id,base_type_id,clndr_id,sum_base_proj_id,task_code_base,task_code_step,priority_num,wbs_max_sum_level,risk_level,strgy_priority_num,last_checksum,critical_drtn_hr_cnt,def_cost_per_qty,last_recalc_date,plan_start_date,plan_end_date,scd_end_date,add_date,sum_data_date,last_tasksum_date,fcst_start_date,def_duration_type,task_code_prefix,guid,def_qty_type,add_by_name,web_local_root_path,proj_url,def_rate_type,act_this_per_link_flag,def_task_type,act_pct_link_flag,add_act_remain_flag,critical_path_type,task_code_prefix_flag,def_rollup_dates_flag,rem_target_link_flag,reset_planned_flag,allow_neg_act_flag,rsrc_id,msp_managed_flag,msp_update_actuals_flag,checkout_date,checkout_user_id,sum_assign_level,last_fin_dates_id,use_project_baseline_flag,last_baseline_update_date,ts_rsrc_vw_compl_asgn_flag,ts_rsrc_mark_act_finish_flag,ts_rsrc_vw_inact_actv_flag,cr_external_key,apply_actuals_date,intg_proj_type
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iproj_id,@ify_start_month_num,@ichng_eff_cmp_pct_flag,@irsrc_self_add_flag,@iallow_complete_flag,@irsrc_multi_assign_flag,@icheckout_flag,@iproject_flag,@istep_complete_flag,@icost_qty_recalc_flag,@isum_only_flag,@ibatch_sum_flag,@iname_sep_char,@idef_complete_pct_type,@iproj_short_name,@iacct_id,@iorig_proj_id,@isource_proj_id,@ibase_type_id,@iclndr_id,@isum_base_proj_id,@itask_code_base,@itask_code_step,@ipriority_num,@iwbs_max_sum_level,@irisk_level,@istrgy_priority_num,@ilast_checksum,@icritical_drtn_hr_cnt,@idef_cost_per_qty,@ilast_recalc_date,@iplan_start_date,@iplan_end_date,@iscd_end_date,@iadd_date,@isum_data_date,@ilast_tasksum_date,@ifcst_start_date,@idef_duration_type,@itask_code_prefix,@iguid,@idef_qty_type,@iadd_by_name,@iweb_local_root_path,@iproj_url,@idef_rate_type,@iact_this_per_link_flag,@idef_task_type,@iact_pct_link_flag,@iadd_act_remain_flag,@icritical_path_type,@itask_code_prefix_flag,@idef_rollup_dates_flag,@irem_target_link_flag,@ireset_planned_flag,@iallow_neg_act_flag,@irsrc_id,@imsp_managed_flag,@imsp_update_actuals_flag,@icheckout_date,@icheckout_user_id,@isum_assign_level,@ilast_fin_dates_id,@iuse_project_baseline_flag,@ilast_baseline_update_date,@its_rsrc_vw_compl_asgn_flag,@its_rsrc_mark_act_finish_flag,@its_rsrc_vw_inact_actv_flag,@icr_external_key,@iapply_actuals_date,@iintg_proj_type, @idelete_session_id
  else
    fetch deleted_c into @dproj_id,@dfy_start_month_num,@dchng_eff_cmp_pct_flag,@drsrc_self_add_flag,@dallow_complete_flag,@drsrc_multi_assign_flag,@dcheckout_flag,@dproject_flag,@dstep_complete_flag,@dcost_qty_recalc_flag,@dsum_only_flag,@dbatch_sum_flag,@dname_sep_char,@ddef_complete_pct_type,@dproj_short_name,@dacct_id,@dorig_proj_id,@dsource_proj_id,@dbase_type_id,@dclndr_id,@dsum_base_proj_id,@dtask_code_base,@dtask_code_step,@dpriority_num,@dwbs_max_sum_level,@drisk_level,@dstrgy_priority_num,@dlast_checksum,@dcritical_drtn_hr_cnt,@ddef_cost_per_qty,@dlast_recalc_date,@dplan_start_date,@dplan_end_date,@dscd_end_date,@dadd_date,@dsum_data_date,@dlast_tasksum_date,@dfcst_start_date,@ddef_duration_type,@dtask_code_prefix,@dguid,@ddef_qty_type,@dadd_by_name,@dweb_local_root_path,@dproj_url,@ddef_rate_type,@dact_this_per_link_flag,@ddef_task_type,@dact_pct_link_flag,@dadd_act_remain_flag,@dcritical_path_type,@dtask_code_prefix_flag,@ddef_rollup_dates_flag,@drem_target_link_flag,@dreset_planned_flag,@dallow_neg_act_flag,@drsrc_id,@dmsp_managed_flag,@dmsp_update_actuals_flag,@dcheckout_date,@dcheckout_user_id,@dsum_assign_level,@dlast_fin_dates_id,@duse_project_baseline_flag,@dlast_baseline_update_date,@dts_rsrc_vw_compl_asgn_flag,@dts_rsrc_mark_act_finish_flag,@dts_rsrc_vw_inact_actv_flag,@dcr_external_key,@dapply_actuals_date,@dintg_proj_type, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dproj_id;
				

    end else begin
    	set @pk1 = @iproj_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dproj_id,@dfy_start_month_num,@dchng_eff_cmp_pct_flag,@drsrc_self_add_flag,@dallow_complete_flag,@drsrc_multi_assign_flag,@dcheckout_flag,@dproject_flag,@dstep_complete_flag,@dcost_qty_recalc_flag,@dsum_only_flag,@dbatch_sum_flag,@dname_sep_char,@ddef_complete_pct_type,@dproj_short_name,@dacct_id,@dorig_proj_id,@dsource_proj_id,@dbase_type_id,@dclndr_id,@dsum_base_proj_id,@dtask_code_base,@dtask_code_step,@dpriority_num,@dwbs_max_sum_level,@drisk_level,@dstrgy_priority_num,@dlast_checksum,@dcritical_drtn_hr_cnt,@ddef_cost_per_qty,@dlast_recalc_date,@dplan_start_date,@dplan_end_date,@dscd_end_date,@dadd_date,@dsum_data_date,@dlast_tasksum_date,@dfcst_start_date,@ddef_duration_type,@dtask_code_prefix,@dguid,@ddef_qty_type,@dadd_by_name,@dweb_local_root_path,@dproj_url,@ddef_rate_type,@dact_this_per_link_flag,@ddef_task_type,@dact_pct_link_flag,@dadd_act_remain_flag,@dcritical_path_type,@dtask_code_prefix_flag,@ddef_rollup_dates_flag,@drem_target_link_flag,@dreset_planned_flag,@dallow_neg_act_flag,@drsrc_id,@dmsp_managed_flag,@dmsp_update_actuals_flag,@dcheckout_date,@dcheckout_user_id,@dsum_assign_level,@dlast_fin_dates_id,@duse_project_baseline_flag,@dlast_baseline_update_date,@dts_rsrc_vw_compl_asgn_flag,@dts_rsrc_mark_act_finish_flag,@dts_rsrc_vw_inact_actv_flag,@dcr_external_key,@dapply_actuals_date,@dintg_proj_type, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(proj_id)  exec audit_data 'PROJECT','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(fy_start_month_num)  exec audit_data 'PROJECT','fy_start_month_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfy_start_month_num,@ify_start_month_num,@audit_data OUTPUT
      if (@loper='D') or  update(chng_eff_cmp_pct_flag)  exec audit_data 'PROJECT','chng_eff_cmp_pct_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dchng_eff_cmp_pct_flag,@ichng_eff_cmp_pct_flag,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_self_add_flag)  exec audit_data 'PROJECT','rsrc_self_add_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_self_add_flag,@irsrc_self_add_flag,@audit_data OUTPUT
      if (@loper='D') or  update(allow_complete_flag)  exec audit_data 'PROJECT','allow_complete_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dallow_complete_flag,@iallow_complete_flag,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_multi_assign_flag)  exec audit_data 'PROJECT','rsrc_multi_assign_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_multi_assign_flag,@irsrc_multi_assign_flag,@audit_data OUTPUT
      if (@loper='D') or  update(checkout_flag)  exec audit_data 'PROJECT','checkout_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcheckout_flag,@icheckout_flag,@audit_data OUTPUT
      if (@loper='D') or  update(project_flag)  exec audit_data 'PROJECT','project_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproject_flag,@iproject_flag,@audit_data OUTPUT
      if (@loper='D') or  update(step_complete_flag)  exec audit_data 'PROJECT','step_complete_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstep_complete_flag,@istep_complete_flag,@audit_data OUTPUT
      if (@loper='D') or  update(cost_qty_recalc_flag)  exec audit_data 'PROJECT','cost_qty_recalc_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_qty_recalc_flag,@icost_qty_recalc_flag,@audit_data OUTPUT
      if (@loper='D') or  update(sum_only_flag)  exec audit_data 'PROJECT','sum_only_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsum_only_flag,@isum_only_flag,@audit_data OUTPUT
      if (@loper='D') or  update(batch_sum_flag)  exec audit_data 'PROJECT','batch_sum_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbatch_sum_flag,@ibatch_sum_flag,@audit_data OUTPUT
      if (@loper='D') or  update(name_sep_char)  exec audit_data 'PROJECT','name_sep_char',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dname_sep_char,@iname_sep_char,@audit_data OUTPUT
      if (@loper='D') or  update(def_complete_pct_type)  exec audit_data 'PROJECT','def_complete_pct_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddef_complete_pct_type,@idef_complete_pct_type,@audit_data OUTPUT
      if (@loper='D') or  update(proj_short_name)  exec audit_data 'PROJECT','proj_short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_short_name,@iproj_short_name,@audit_data OUTPUT
      if (@loper='D') or  update(acct_id)  exec audit_data 'PROJECT','acct_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dacct_id,@iacct_id,@audit_data OUTPUT
      if (@loper='D') or  update(orig_proj_id)  exec audit_data 'PROJECT','orig_proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dorig_proj_id,@iorig_proj_id,@audit_data OUTPUT
      if (@loper='D') or  update(source_proj_id)  exec audit_data 'PROJECT','source_proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsource_proj_id,@isource_proj_id,@audit_data OUTPUT
      if (@loper='D') or  update(base_type_id)  exec audit_data 'PROJECT','base_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_type_id,@ibase_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(clndr_id)  exec audit_data 'PROJECT','clndr_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dclndr_id,@iclndr_id,@audit_data OUTPUT
      if (@loper='D') or  update(sum_base_proj_id)  exec audit_data 'PROJECT','sum_base_proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsum_base_proj_id,@isum_base_proj_id,@audit_data OUTPUT
      if (@loper='D') or  update(task_code_base)  exec audit_data 'PROJECT','task_code_base',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_code_base,@itask_code_base,@audit_data OUTPUT
      if (@loper='D') or  update(task_code_step)  exec audit_data 'PROJECT','task_code_step',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_code_step,@itask_code_step,@audit_data OUTPUT
      if (@loper='D') or  update(priority_num)  exec audit_data 'PROJECT','priority_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpriority_num,@ipriority_num,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_max_sum_level)  exec audit_data 'PROJECT','wbs_max_sum_level',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_max_sum_level,@iwbs_max_sum_level,@audit_data OUTPUT
      if (@loper='D') or  update(risk_level)  exec audit_data 'PROJECT','risk_level',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drisk_level,@irisk_level,@audit_data OUTPUT
      if (@loper='D') or  update(strgy_priority_num)  exec audit_data 'PROJECT','strgy_priority_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstrgy_priority_num,@istrgy_priority_num,@audit_data OUTPUT
      if (@loper='D') or  update(last_checksum)  exec audit_data 'PROJECT','last_checksum',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlast_checksum,@ilast_checksum,@audit_data OUTPUT
      if (@loper='D') or  update(critical_drtn_hr_cnt)  exec audit_data 'PROJECT','critical_drtn_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcritical_drtn_hr_cnt,@icritical_drtn_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(def_cost_per_qty)  exec audit_data 'PROJECT','def_cost_per_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddef_cost_per_qty,@idef_cost_per_qty,@audit_data OUTPUT
      if (@loper='D') or  update(last_recalc_date)  exec audit_data 'PROJECT','last_recalc_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlast_recalc_date,@ilast_recalc_date,@audit_data OUTPUT
      if (@loper='D') or  update(plan_start_date)  exec audit_data 'PROJECT','plan_start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dplan_start_date,@iplan_start_date,@audit_data OUTPUT
      if (@loper='D') or  update(plan_end_date)  exec audit_data 'PROJECT','plan_end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dplan_end_date,@iplan_end_date,@audit_data OUTPUT
      if (@loper='D') or  update(scd_end_date)  exec audit_data 'PROJECT','scd_end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dscd_end_date,@iscd_end_date,@audit_data OUTPUT
      if (@loper='D') or  update(add_date)  exec audit_data 'PROJECT','add_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dadd_date,@iadd_date,@audit_data OUTPUT
      if (@loper='D') or  update(sum_data_date)  exec audit_data 'PROJECT','sum_data_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsum_data_date,@isum_data_date,@audit_data OUTPUT
      if (@loper='D') or  update(last_tasksum_date)  exec audit_data 'PROJECT','last_tasksum_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlast_tasksum_date,@ilast_tasksum_date,@audit_data OUTPUT
      if (@loper='D') or  update(fcst_start_date)  exec audit_data 'PROJECT','fcst_start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfcst_start_date,@ifcst_start_date,@audit_data OUTPUT
      if (@loper='D') or  update(def_duration_type)  exec audit_data 'PROJECT','def_duration_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddef_duration_type,@idef_duration_type,@audit_data OUTPUT
      if (@loper='D') or  update(task_code_prefix)  exec audit_data 'PROJECT','task_code_prefix',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_code_prefix,@itask_code_prefix,@audit_data OUTPUT
      if (@loper='D') or  update(guid)  exec audit_data 'PROJECT','guid',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dguid,@iguid,@audit_data OUTPUT
      if (@loper='D') or  update(def_qty_type)  exec audit_data 'PROJECT','def_qty_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddef_qty_type,@idef_qty_type,@audit_data OUTPUT
      if (@loper='D') or  update(add_by_name)  exec audit_data 'PROJECT','add_by_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dadd_by_name,@iadd_by_name,@audit_data OUTPUT
      if (@loper='D') or  update(web_local_root_path)  exec audit_data 'PROJECT','web_local_root_path',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dweb_local_root_path,@iweb_local_root_path,@audit_data OUTPUT
      if (@loper='D') or  update(proj_url)  exec audit_data 'PROJECT','proj_url',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_url,@iproj_url,@audit_data OUTPUT
      if (@loper='D') or  update(def_rate_type)  exec audit_data 'PROJECT','def_rate_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddef_rate_type,@idef_rate_type,@audit_data OUTPUT
      if (@loper='D') or  update(act_this_per_link_flag)  exec audit_data 'PROJECT','act_this_per_link_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_this_per_link_flag,@iact_this_per_link_flag,@audit_data OUTPUT
      if (@loper='D') or  update(def_task_type)  exec audit_data 'PROJECT','def_task_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddef_task_type,@idef_task_type,@audit_data OUTPUT
      if (@loper='D') or  update(act_pct_link_flag)  exec audit_data 'PROJECT','act_pct_link_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_pct_link_flag,@iact_pct_link_flag,@audit_data OUTPUT
      if (@loper='D') or  update(add_act_remain_flag)  exec audit_data 'PROJECT','add_act_remain_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dadd_act_remain_flag,@iadd_act_remain_flag,@audit_data OUTPUT
      if (@loper='D') or  update(critical_path_type)  exec audit_data 'PROJECT','critical_path_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcritical_path_type,@icritical_path_type,@audit_data OUTPUT
      if (@loper='D') or  update(task_code_prefix_flag)  exec audit_data 'PROJECT','task_code_prefix_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_code_prefix_flag,@itask_code_prefix_flag,@audit_data OUTPUT
      if (@loper='D') or  update(def_rollup_dates_flag)  exec audit_data 'PROJECT','def_rollup_dates_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddef_rollup_dates_flag,@idef_rollup_dates_flag,@audit_data OUTPUT
      if (@loper='D') or  update(rem_target_link_flag)  exec audit_data 'PROJECT','rem_target_link_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drem_target_link_flag,@irem_target_link_flag,@audit_data OUTPUT
      if (@loper='D') or  update(reset_planned_flag)  exec audit_data 'PROJECT','reset_planned_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dreset_planned_flag,@ireset_planned_flag,@audit_data OUTPUT
      if (@loper='D') or  update(allow_neg_act_flag)  exec audit_data 'PROJECT','allow_neg_act_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dallow_neg_act_flag,@iallow_neg_act_flag,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'PROJECT','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(msp_managed_flag)  exec audit_data 'PROJECT','msp_managed_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmsp_managed_flag,@imsp_managed_flag,@audit_data OUTPUT
      if (@loper='D') or  update(msp_update_actuals_flag)  exec audit_data 'PROJECT','msp_update_actuals_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmsp_update_actuals_flag,@imsp_update_actuals_flag,@audit_data OUTPUT
      if (@loper='D') or  update(checkout_date)  exec audit_data 'PROJECT','checkout_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcheckout_date,@icheckout_date,@audit_data OUTPUT
      if (@loper='D') or  update(checkout_user_id)  exec audit_data 'PROJECT','checkout_user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcheckout_user_id,@icheckout_user_id,@audit_data OUTPUT
      if (@loper='D') or  update(sum_assign_level)  exec audit_data 'PROJECT','sum_assign_level',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsum_assign_level,@isum_assign_level,@audit_data OUTPUT
      if (@loper='D') or  update(last_fin_dates_id)  exec audit_data 'PROJECT','last_fin_dates_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlast_fin_dates_id,@ilast_fin_dates_id,@audit_data OUTPUT
      if (@loper='D') or  update(use_project_baseline_flag)  exec audit_data 'PROJECT','use_project_baseline_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duse_project_baseline_flag,@iuse_project_baseline_flag,@audit_data OUTPUT
      if (@loper='D') or  update(last_baseline_update_date)  exec audit_data 'PROJECT','last_baseline_update_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlast_baseline_update_date,@ilast_baseline_update_date,@audit_data OUTPUT
      if (@loper='D') or  update(ts_rsrc_vw_compl_asgn_flag)  exec audit_data 'PROJECT','ts_rsrc_vw_compl_asgn_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dts_rsrc_vw_compl_asgn_flag,@its_rsrc_vw_compl_asgn_flag,@audit_data OUTPUT
      if (@loper='D') or  update(ts_rsrc_mark_act_finish_flag)  exec audit_data 'PROJECT','ts_rsrc_mark_act_finish_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dts_rsrc_mark_act_finish_flag,@its_rsrc_mark_act_finish_flag,@audit_data OUTPUT
      if (@loper='D') or  update(ts_rsrc_vw_inact_actv_flag)  exec audit_data 'PROJECT','ts_rsrc_vw_inact_actv_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dts_rsrc_vw_inact_actv_flag,@its_rsrc_vw_inact_actv_flag,@audit_data OUTPUT
      if (@loper='D') or  update(cr_external_key)  exec audit_data 'PROJECT','cr_external_key',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcr_external_key,@icr_external_key,@audit_data OUTPUT
      if (@loper='D') or  update(apply_actuals_date)  exec audit_data 'PROJECT','apply_actuals_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dapply_actuals_date,@iapply_actuals_date,@audit_data OUTPUT
      if (@loper='D') or  update(intg_proj_type)  exec audit_data 'PROJECT','intg_proj_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dintg_proj_type,@iintg_proj_type,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PROJECT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PROJECT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iproj_id,@ify_start_month_num,@ichng_eff_cmp_pct_flag,@irsrc_self_add_flag,@iallow_complete_flag,@irsrc_multi_assign_flag,@icheckout_flag,@iproject_flag,@istep_complete_flag,@icost_qty_recalc_flag,@isum_only_flag,@ibatch_sum_flag,@iname_sep_char,@idef_complete_pct_type,@iproj_short_name,@iacct_id,@iorig_proj_id,@isource_proj_id,@ibase_type_id,@iclndr_id,@isum_base_proj_id,@itask_code_base,@itask_code_step,@ipriority_num,@iwbs_max_sum_level,@irisk_level,@istrgy_priority_num,@ilast_checksum,@icritical_drtn_hr_cnt,@idef_cost_per_qty,@ilast_recalc_date,@iplan_start_date,@iplan_end_date,@iscd_end_date,@iadd_date,@isum_data_date,@ilast_tasksum_date,@ifcst_start_date,@idef_duration_type,@itask_code_prefix,@iguid,@idef_qty_type,@iadd_by_name,@iweb_local_root_path,@iproj_url,@idef_rate_type,@iact_this_per_link_flag,@idef_task_type,@iact_pct_link_flag,@iadd_act_remain_flag,@icritical_path_type,@itask_code_prefix_flag,@idef_rollup_dates_flag,@irem_target_link_flag,@ireset_planned_flag,@iallow_neg_act_flag,@irsrc_id,@imsp_managed_flag,@imsp_update_actuals_flag,@icheckout_date,@icheckout_user_id,@isum_assign_level,@ilast_fin_dates_id,@iuse_project_baseline_flag,@ilast_baseline_update_date,@its_rsrc_vw_compl_asgn_flag,@its_rsrc_mark_act_finish_flag,@its_rsrc_vw_inact_actv_flag,@icr_external_key,@iapply_actuals_date,@iintg_proj_type, @idelete_session_id;
    else
     fetch deleted_c into @dproj_id,@dfy_start_month_num,@dchng_eff_cmp_pct_flag,@drsrc_self_add_flag,@dallow_complete_flag,@drsrc_multi_assign_flag,@dcheckout_flag,@dproject_flag,@dstep_complete_flag,@dcost_qty_recalc_flag,@dsum_only_flag,@dbatch_sum_flag,@dname_sep_char,@ddef_complete_pct_type,@dproj_short_name,@dacct_id,@dorig_proj_id,@dsource_proj_id,@dbase_type_id,@dclndr_id,@dsum_base_proj_id,@dtask_code_base,@dtask_code_step,@dpriority_num,@dwbs_max_sum_level,@drisk_level,@dstrgy_priority_num,@dlast_checksum,@dcritical_drtn_hr_cnt,@ddef_cost_per_qty,@dlast_recalc_date,@dplan_start_date,@dplan_end_date,@dscd_end_date,@dadd_date,@dsum_data_date,@dlast_tasksum_date,@dfcst_start_date,@ddef_duration_type,@dtask_code_prefix,@dguid,@ddef_qty_type,@dadd_by_name,@dweb_local_root_path,@dproj_url,@ddef_rate_type,@dact_this_per_link_flag,@ddef_task_type,@dact_pct_link_flag,@dadd_act_remain_flag,@dcritical_path_type,@dtask_code_prefix_flag,@ddef_rollup_dates_flag,@drem_target_link_flag,@dreset_planned_flag,@dallow_neg_act_flag,@drsrc_id,@dmsp_managed_flag,@dmsp_update_actuals_flag,@dcheckout_date,@dcheckout_user_id,@dsum_assign_level,@dlast_fin_dates_id,@duse_project_baseline_flag,@dlast_baseline_update_date,@dts_rsrc_vw_compl_asgn_flag,@dts_rsrc_mark_act_finish_flag,@dts_rsrc_vw_inact_actv_flag,@dcr_external_key,@dapply_actuals_date,@dintg_proj_type, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PROJEST
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PROJEST' AND xtype = 'TR')
    DROP trigger PRMAUD_PROJEST

PRMAUD_PROJEST
create trigger PRMAUD_PROJEST
on PROJEST
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iproj_est_id varchar(255),@iproj_id varchar(255),@iwbs_id varchar(255),@iapplied_flag varchar(255),@irsrc_type varchar(255),@iest_type varchar(255),@iest_name varchar(255),@irsrc_id varchar(255),@ibu_cmplx_value varchar(255),@iadj_mult_pct varchar(255),@ifp_cnt varchar(255),@ifp_cmplx_value varchar(255),@ifp_unadj_cnt varchar(255),@iest_task_cnt varchar(255),@ifp_prod_avg_value varchar(255),@iest_qty varchar(255),@iest_date varchar(255)

  declare @dproj_est_id varchar(255),@dproj_id varchar(255),@dwbs_id varchar(255),@dapplied_flag varchar(255),@drsrc_type varchar(255),@dest_type varchar(255),@dest_name varchar(255),@drsrc_id varchar(255),@dbu_cmplx_value varchar(255),@dadj_mult_pct varchar(255),@dfp_cnt varchar(255),@dfp_cmplx_value varchar(255),@dfp_unadj_cnt varchar(255),@dest_task_cnt varchar(255),@dfp_prod_avg_value varchar(255),@dest_qty varchar(255),@dest_date varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(proj_est_id) and
			not update(proj_id) and
			not update(wbs_id) and
			not update(applied_flag) and
			not update(rsrc_type) and
			not update(est_type) and
			not update(est_name) and
			not update(rsrc_id) and
			not update(bu_cmplx_value) and
			not update(adj_mult_pct) and
			not update(fp_cnt) and
			not update(fp_cmplx_value) and
			not update(fp_unadj_cnt) and
			not update(est_task_cnt) and
			not update(fp_prod_avg_value) and
			not update(est_qty) and
			not update(est_date) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PROJEST', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJEST',proj_est_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJEST', proj_est_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select proj_est_id,proj_id,wbs_id,applied_flag,rsrc_type,est_type,est_name,rsrc_id,bu_cmplx_value,adj_mult_pct,fp_cnt,fp_cmplx_value,fp_unadj_cnt,est_task_cnt,fp_prod_avg_value,est_qty,est_date
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select proj_est_id,proj_id,wbs_id,applied_flag,rsrc_type,est_type,est_name,rsrc_id,bu_cmplx_value,adj_mult_pct,fp_cnt,fp_cmplx_value,fp_unadj_cnt,est_task_cnt,fp_prod_avg_value,est_qty,est_date
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iproj_est_id,@iproj_id,@iwbs_id,@iapplied_flag,@irsrc_type,@iest_type,@iest_name,@irsrc_id,@ibu_cmplx_value,@iadj_mult_pct,@ifp_cnt,@ifp_cmplx_value,@ifp_unadj_cnt,@iest_task_cnt,@ifp_prod_avg_value,@iest_qty,@iest_date, @idelete_session_id
  else
    fetch deleted_c into @dproj_est_id,@dproj_id,@dwbs_id,@dapplied_flag,@drsrc_type,@dest_type,@dest_name,@drsrc_id,@dbu_cmplx_value,@dadj_mult_pct,@dfp_cnt,@dfp_cmplx_value,@dfp_unadj_cnt,@dest_task_cnt,@dfp_prod_avg_value,@dest_qty,@dest_date, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dproj_est_id;
				

    end else begin
    	set @pk1 = @iproj_est_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dproj_est_id,@dproj_id,@dwbs_id,@dapplied_flag,@drsrc_type,@dest_type,@dest_name,@drsrc_id,@dbu_cmplx_value,@dadj_mult_pct,@dfp_cnt,@dfp_cmplx_value,@dfp_unadj_cnt,@dest_task_cnt,@dfp_prod_avg_value,@dest_qty,@dest_date, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(proj_est_id)  exec audit_data 'PROJEST','proj_est_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_est_id,@iproj_est_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'PROJEST','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_id)  exec audit_data 'PROJEST','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(applied_flag)  exec audit_data 'PROJEST','applied_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dapplied_flag,@iapplied_flag,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_type)  exec audit_data 'PROJEST','rsrc_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_type,@irsrc_type,@audit_data OUTPUT
      if (@loper='D') or  update(est_type)  exec audit_data 'PROJEST','est_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dest_type,@iest_type,@audit_data OUTPUT
      if (@loper='D') or  update(est_name)  exec audit_data 'PROJEST','est_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dest_name,@iest_name,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'PROJEST','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(bu_cmplx_value)  exec audit_data 'PROJEST','bu_cmplx_value',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbu_cmplx_value,@ibu_cmplx_value,@audit_data OUTPUT
      if (@loper='D') or  update(adj_mult_pct)  exec audit_data 'PROJEST','adj_mult_pct',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dadj_mult_pct,@iadj_mult_pct,@audit_data OUTPUT
      if (@loper='D') or  update(fp_cnt)  exec audit_data 'PROJEST','fp_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfp_cnt,@ifp_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(fp_cmplx_value)  exec audit_data 'PROJEST','fp_cmplx_value',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfp_cmplx_value,@ifp_cmplx_value,@audit_data OUTPUT
      if (@loper='D') or  update(fp_unadj_cnt)  exec audit_data 'PROJEST','fp_unadj_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfp_unadj_cnt,@ifp_unadj_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(est_task_cnt)  exec audit_data 'PROJEST','est_task_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dest_task_cnt,@iest_task_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(fp_prod_avg_value)  exec audit_data 'PROJEST','fp_prod_avg_value',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfp_prod_avg_value,@ifp_prod_avg_value,@audit_data OUTPUT
      if (@loper='D') or  update(est_qty)  exec audit_data 'PROJEST','est_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dest_qty,@iest_qty,@audit_data OUTPUT
      if (@loper='D') or  update(est_date)  exec audit_data 'PROJEST','est_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dest_date,@iest_date,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PROJEST', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PROJEST', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iproj_est_id,@iproj_id,@iwbs_id,@iapplied_flag,@irsrc_type,@iest_type,@iest_name,@irsrc_id,@ibu_cmplx_value,@iadj_mult_pct,@ifp_cnt,@ifp_cmplx_value,@ifp_unadj_cnt,@iest_task_cnt,@ifp_prod_avg_value,@iest_qty,@iest_date, @idelete_session_id;
    else
     fetch deleted_c into @dproj_est_id,@dproj_id,@dwbs_id,@dapplied_flag,@drsrc_type,@dest_type,@dest_name,@drsrc_id,@dbu_cmplx_value,@dadj_mult_pct,@dfp_cnt,@dfp_cmplx_value,@dfp_unadj_cnt,@dest_task_cnt,@dfp_prod_avg_value,@dest_qty,@dest_date, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PROJFUND
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PROJFUND' AND xtype = 'TR')
    DROP trigger PRMAUD_PROJFUND

PRMAUD_PROJFUND
create trigger PRMAUD_PROJFUND
on PROJFUND
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iproj_fund_id varchar(255),@ifund_id varchar(255),@iproj_id varchar(255),@ifund_cost varchar(255),@ifund_wt varchar(255)

  declare @dproj_fund_id varchar(255),@dfund_id varchar(255),@dproj_id varchar(255),@dfund_cost varchar(255),@dfund_wt varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(proj_fund_id) and
			not update(fund_id) and
			not update(proj_id) and
			not update(fund_cost) and
			not update(fund_wt) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PROJFUND', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJFUND',proj_fund_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJFUND', proj_fund_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select proj_fund_id,fund_id,proj_id,fund_cost,fund_wt
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select proj_fund_id,fund_id,proj_id,fund_cost,fund_wt
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iproj_fund_id,@ifund_id,@iproj_id,@ifund_cost,@ifund_wt, @idelete_session_id
  else
    fetch deleted_c into @dproj_fund_id,@dfund_id,@dproj_id,@dfund_cost,@dfund_wt, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dproj_fund_id;
				

    end else begin
    	set @pk1 = @iproj_fund_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dproj_fund_id,@dfund_id,@dproj_id,@dfund_cost,@dfund_wt, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(proj_fund_id)  exec audit_data 'PROJFUND','proj_fund_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_fund_id,@iproj_fund_id,@audit_data OUTPUT
      if (@loper='D') or  update(fund_id)  exec audit_data 'PROJFUND','fund_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfund_id,@ifund_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'PROJFUND','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(fund_cost)  exec audit_data 'PROJFUND','fund_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfund_cost,@ifund_cost,@audit_data OUTPUT
      if (@loper='D') or  update(fund_wt)  exec audit_data 'PROJFUND','fund_wt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfund_wt,@ifund_wt,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PROJFUND', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PROJFUND', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iproj_fund_id,@ifund_id,@iproj_id,@ifund_cost,@ifund_wt, @idelete_session_id;
    else
     fetch deleted_c into @dproj_fund_id,@dfund_id,@dproj_id,@dfund_cost,@dfund_wt, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PROJISSU
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PROJISSU' AND xtype = 'TR')
    DROP trigger PRMAUD_PROJISSU

PRMAUD_PROJISSU
create trigger PRMAUD_PROJISSU
on PROJISSU
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iissue_id varchar(255),@iproj_id varchar(255),@iobs_id varchar(255),@ipriority_type varchar(255),@istatus_code varchar(255),@iissue_name varchar(255),@ithresh_id varchar(255),@itrack_view_id varchar(255),@iwbs_id varchar(255),@itask_id varchar(255),@irsrc_id varchar(255),@ithresh_parm_id varchar(255),@ibase_proj_id varchar(255),@iworkspace_id varchar(255),@iissue_value varchar(255),@ilo_parm_value varchar(255),@ihi_parm_value varchar(255),@iadd_by_name varchar(255),@iresolv_date varchar(255),@iadd_date varchar(255)

  declare @dissue_id varchar(255),@dproj_id varchar(255),@dobs_id varchar(255),@dpriority_type varchar(255),@dstatus_code varchar(255),@dissue_name varchar(255),@dthresh_id varchar(255),@dtrack_view_id varchar(255),@dwbs_id varchar(255),@dtask_id varchar(255),@drsrc_id varchar(255),@dthresh_parm_id varchar(255),@dbase_proj_id varchar(255),@dworkspace_id varchar(255),@dissue_value varchar(255),@dlo_parm_value varchar(255),@dhi_parm_value varchar(255),@dadd_by_name varchar(255),@dresolv_date varchar(255),@dadd_date varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(issue_id) and
			not update(proj_id) and
			not update(obs_id) and
			not update(priority_type) and
			not update(status_code) and
			not update(issue_name) and
			not update(thresh_id) and
			not update(track_view_id) and
			not update(wbs_id) and
			not update(task_id) and
			not update(rsrc_id) and
			not update(thresh_parm_id) and
			not update(base_proj_id) and
			not update(workspace_id) and
			not update(issue_value) and
			not update(lo_parm_value) and
			not update(hi_parm_value) and
			not update(add_by_name) and
			not update(resolv_date) and
			not update(add_date) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PROJISSU', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJISSU',issue_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJISSU', issue_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select issue_id,proj_id,obs_id,priority_type,status_code,issue_name,thresh_id,track_view_id,wbs_id,task_id,rsrc_id,thresh_parm_id,base_proj_id,workspace_id,issue_value,lo_parm_value,hi_parm_value,add_by_name,resolv_date,add_date
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select issue_id,proj_id,obs_id,priority_type,status_code,issue_name,thresh_id,track_view_id,wbs_id,task_id,rsrc_id,thresh_parm_id,base_proj_id,workspace_id,issue_value,lo_parm_value,hi_parm_value,add_by_name,resolv_date,add_date
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iissue_id,@iproj_id,@iobs_id,@ipriority_type,@istatus_code,@iissue_name,@ithresh_id,@itrack_view_id,@iwbs_id,@itask_id,@irsrc_id,@ithresh_parm_id,@ibase_proj_id,@iworkspace_id,@iissue_value,@ilo_parm_value,@ihi_parm_value,@iadd_by_name,@iresolv_date,@iadd_date, @idelete_session_id
  else
    fetch deleted_c into @dissue_id,@dproj_id,@dobs_id,@dpriority_type,@dstatus_code,@dissue_name,@dthresh_id,@dtrack_view_id,@dwbs_id,@dtask_id,@drsrc_id,@dthresh_parm_id,@dbase_proj_id,@dworkspace_id,@dissue_value,@dlo_parm_value,@dhi_parm_value,@dadd_by_name,@dresolv_date,@dadd_date, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dissue_id;
				

    end else begin
    	set @pk1 = @iissue_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dissue_id,@dproj_id,@dobs_id,@dpriority_type,@dstatus_code,@dissue_name,@dthresh_id,@dtrack_view_id,@dwbs_id,@dtask_id,@drsrc_id,@dthresh_parm_id,@dbase_proj_id,@dworkspace_id,@dissue_value,@dlo_parm_value,@dhi_parm_value,@dadd_by_name,@dresolv_date,@dadd_date, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(issue_id)  exec audit_data 'PROJISSU','issue_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dissue_id,@iissue_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'PROJISSU','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(obs_id)  exec audit_data 'PROJISSU','obs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dobs_id,@iobs_id,@audit_data OUTPUT
      if (@loper='D') or  update(priority_type)  exec audit_data 'PROJISSU','priority_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpriority_type,@ipriority_type,@audit_data OUTPUT
      if (@loper='D') or  update(status_code)  exec audit_data 'PROJISSU','status_code',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstatus_code,@istatus_code,@audit_data OUTPUT
      if (@loper='D') or  update(issue_name)  exec audit_data 'PROJISSU','issue_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dissue_name,@iissue_name,@audit_data OUTPUT
      if (@loper='D') or  update(thresh_id)  exec audit_data 'PROJISSU','thresh_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dthresh_id,@ithresh_id,@audit_data OUTPUT
      if (@loper='D') or  update(track_view_id)  exec audit_data 'PROJISSU','track_view_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtrack_view_id,@itrack_view_id,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_id)  exec audit_data 'PROJISSU','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(task_id)  exec audit_data 'PROJISSU','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'PROJISSU','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(thresh_parm_id)  exec audit_data 'PROJISSU','thresh_parm_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dthresh_parm_id,@ithresh_parm_id,@audit_data OUTPUT
      if (@loper='D') or  update(base_proj_id)  exec audit_data 'PROJISSU','base_proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_proj_id,@ibase_proj_id,@audit_data OUTPUT
      if (@loper='D') or  update(workspace_id)  exec audit_data 'PROJISSU','workspace_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dworkspace_id,@iworkspace_id,@audit_data OUTPUT
      if (@loper='D') or  update(issue_value)  exec audit_data 'PROJISSU','issue_value',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dissue_value,@iissue_value,@audit_data OUTPUT
      if (@loper='D') or  update(lo_parm_value)  exec audit_data 'PROJISSU','lo_parm_value',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlo_parm_value,@ilo_parm_value,@audit_data OUTPUT
      if (@loper='D') or  update(hi_parm_value)  exec audit_data 'PROJISSU','hi_parm_value',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhi_parm_value,@ihi_parm_value,@audit_data OUTPUT
      if (@loper='D') or  update(add_by_name)  exec audit_data 'PROJISSU','add_by_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dadd_by_name,@iadd_by_name,@audit_data OUTPUT
      if (@loper='D') or  update(resolv_date)  exec audit_data 'PROJISSU','resolv_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dresolv_date,@iresolv_date,@audit_data OUTPUT
      if (@loper='D') or  update(add_date)  exec audit_data 'PROJISSU','add_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dadd_date,@iadd_date,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PROJISSU', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PROJISSU', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iissue_id,@iproj_id,@iobs_id,@ipriority_type,@istatus_code,@iissue_name,@ithresh_id,@itrack_view_id,@iwbs_id,@itask_id,@irsrc_id,@ithresh_parm_id,@ibase_proj_id,@iworkspace_id,@iissue_value,@ilo_parm_value,@ihi_parm_value,@iadd_by_name,@iresolv_date,@iadd_date, @idelete_session_id;
    else
     fetch deleted_c into @dissue_id,@dproj_id,@dobs_id,@dpriority_type,@dstatus_code,@dissue_name,@dthresh_id,@dtrack_view_id,@dwbs_id,@dtask_id,@drsrc_id,@dthresh_parm_id,@dbase_proj_id,@dworkspace_id,@dissue_value,@dlo_parm_value,@dhi_parm_value,@dadd_by_name,@dresolv_date,@dadd_date, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PROJPCAT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PROJPCAT' AND xtype = 'TR')
    DROP trigger PRMAUD_PROJPCAT

PRMAUD_PROJPCAT
create trigger PRMAUD_PROJPCAT
on PROJPCAT
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iproj_id varchar(255),@iproj_catg_type_id varchar(255),@iproj_catg_id varchar(255)

  declare @dproj_id varchar(255),@dproj_catg_type_id varchar(255),@dproj_catg_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(proj_id) and
			not update(proj_catg_type_id) and
			not update(proj_catg_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PROJPCAT', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJPCAT',proj_id,proj_catg_type_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJPCAT', proj_id,proj_catg_type_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select proj_id,proj_catg_type_id,proj_catg_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select proj_id,proj_catg_type_id,proj_catg_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iproj_id,@iproj_catg_type_id,@iproj_catg_id, @idelete_session_id
  else
    fetch deleted_c into @dproj_id,@dproj_catg_type_id,@dproj_catg_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dproj_id;
				
set @pk2 = @dproj_catg_type_id;
				

    end else begin
    	set @pk1 = @iproj_id;
				
set @pk2 = @iproj_catg_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dproj_id,@dproj_catg_type_id,@dproj_catg_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(proj_id)  exec audit_data 'PROJPCAT','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_catg_type_id)  exec audit_data 'PROJPCAT','proj_catg_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_catg_type_id,@iproj_catg_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_catg_id)  exec audit_data 'PROJPCAT','proj_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_catg_id,@iproj_catg_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PROJPCAT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PROJPCAT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iproj_id,@iproj_catg_type_id,@iproj_catg_id, @idelete_session_id;
    else
     fetch deleted_c into @dproj_id,@dproj_catg_type_id,@dproj_catg_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PROJPROP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PROJPROP' AND xtype = 'TR')
    DROP trigger PRMAUD_PROJPROP

PRMAUD_PROJPROP
create trigger PRMAUD_PROJPROP
on PROJPROP
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iproj_id varchar(255),@iprop_name varchar(255)

  declare @dproj_id varchar(255),@dprop_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(proj_id) and
			not update(prop_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PROJPROP', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJPROP',proj_id,prop_name,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJPROP', proj_id,prop_name,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select proj_id,prop_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select proj_id,prop_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iproj_id,@iprop_name, @idelete_session_id
  else
    fetch deleted_c into @dproj_id,@dprop_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dproj_id;
				
set @pk2 = @dprop_name;
				

    end else begin
    	set @pk1 = @iproj_id;
				
set @pk2 = @iprop_name;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dproj_id,@dprop_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(proj_id)  exec audit_data 'PROJPROP','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(prop_name)  exec audit_data 'PROJPROP','prop_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprop_name,@iprop_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PROJPROP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PROJPROP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iproj_id,@iprop_name, @idelete_session_id;
    else
     fetch deleted_c into @dproj_id,@dprop_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PROJRISK
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PROJRISK' AND xtype = 'TR')
    DROP trigger PRMAUD_PROJRISK

PRMAUD_PROJRISK
create trigger PRMAUD_PROJRISK
on PROJRISK
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irisk_id varchar(255),@iproj_id varchar(255),@iwbs_id varchar(255),@iadd_date varchar(255),@ipriority_type varchar(255),@istatus_code varchar(255),@irisk_name varchar(255),@irisk_type_id varchar(255),@iobs_id varchar(255),@irsrc_id varchar(255),@iprbly_pct varchar(255),@iimpact_work_qty varchar(255),@iimpact_equip_qty varchar(255),@iimpact_expense_cost varchar(255),@iimpact_date varchar(255),@iimpact_mat_qty varchar(255)

  declare @drisk_id varchar(255),@dproj_id varchar(255),@dwbs_id varchar(255),@dadd_date varchar(255),@dpriority_type varchar(255),@dstatus_code varchar(255),@drisk_name varchar(255),@drisk_type_id varchar(255),@dobs_id varchar(255),@drsrc_id varchar(255),@dprbly_pct varchar(255),@dimpact_work_qty varchar(255),@dimpact_equip_qty varchar(255),@dimpact_expense_cost varchar(255),@dimpact_date varchar(255),@dimpact_mat_qty varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(risk_id) and
			not update(proj_id) and
			not update(wbs_id) and
			not update(add_date) and
			not update(priority_type) and
			not update(status_code) and
			not update(risk_name) and
			not update(risk_type_id) and
			not update(obs_id) and
			not update(rsrc_id) and
			not update(prbly_pct) and
			not update(impact_work_qty) and
			not update(impact_equip_qty) and
			not update(impact_expense_cost) and
			not update(impact_date) and
			not update(impact_mat_qty) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PROJRISK', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJRISK',risk_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJRISK', risk_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select risk_id,proj_id,wbs_id,add_date,priority_type,status_code,risk_name,risk_type_id,obs_id,rsrc_id,prbly_pct,impact_work_qty,impact_equip_qty,impact_expense_cost,impact_date,impact_mat_qty
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select risk_id,proj_id,wbs_id,add_date,priority_type,status_code,risk_name,risk_type_id,obs_id,rsrc_id,prbly_pct,impact_work_qty,impact_equip_qty,impact_expense_cost,impact_date,impact_mat_qty
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irisk_id,@iproj_id,@iwbs_id,@iadd_date,@ipriority_type,@istatus_code,@irisk_name,@irisk_type_id,@iobs_id,@irsrc_id,@iprbly_pct,@iimpact_work_qty,@iimpact_equip_qty,@iimpact_expense_cost,@iimpact_date,@iimpact_mat_qty, @idelete_session_id
  else
    fetch deleted_c into @drisk_id,@dproj_id,@dwbs_id,@dadd_date,@dpriority_type,@dstatus_code,@drisk_name,@drisk_type_id,@dobs_id,@drsrc_id,@dprbly_pct,@dimpact_work_qty,@dimpact_equip_qty,@dimpact_expense_cost,@dimpact_date,@dimpact_mat_qty, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drisk_id;
				

    end else begin
    	set @pk1 = @irisk_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drisk_id,@dproj_id,@dwbs_id,@dadd_date,@dpriority_type,@dstatus_code,@drisk_name,@drisk_type_id,@dobs_id,@drsrc_id,@dprbly_pct,@dimpact_work_qty,@dimpact_equip_qty,@dimpact_expense_cost,@dimpact_date,@dimpact_mat_qty, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(risk_id)  exec audit_data 'PROJRISK','risk_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drisk_id,@irisk_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'PROJRISK','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_id)  exec audit_data 'PROJRISK','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(add_date)  exec audit_data 'PROJRISK','add_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dadd_date,@iadd_date,@audit_data OUTPUT
      if (@loper='D') or  update(priority_type)  exec audit_data 'PROJRISK','priority_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpriority_type,@ipriority_type,@audit_data OUTPUT
      if (@loper='D') or  update(status_code)  exec audit_data 'PROJRISK','status_code',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstatus_code,@istatus_code,@audit_data OUTPUT
      if (@loper='D') or  update(risk_name)  exec audit_data 'PROJRISK','risk_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drisk_name,@irisk_name,@audit_data OUTPUT
      if (@loper='D') or  update(risk_type_id)  exec audit_data 'PROJRISK','risk_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drisk_type_id,@irisk_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(obs_id)  exec audit_data 'PROJRISK','obs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dobs_id,@iobs_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'PROJRISK','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(prbly_pct)  exec audit_data 'PROJRISK','prbly_pct',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprbly_pct,@iprbly_pct,@audit_data OUTPUT
      if (@loper='D') or  update(impact_work_qty)  exec audit_data 'PROJRISK','impact_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dimpact_work_qty,@iimpact_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(impact_equip_qty)  exec audit_data 'PROJRISK','impact_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dimpact_equip_qty,@iimpact_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(impact_expense_cost)  exec audit_data 'PROJRISK','impact_expense_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dimpact_expense_cost,@iimpact_expense_cost,@audit_data OUTPUT
      if (@loper='D') or  update(impact_date)  exec audit_data 'PROJRISK','impact_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dimpact_date,@iimpact_date,@audit_data OUTPUT
      if (@loper='D') or  update(impact_mat_qty)  exec audit_data 'PROJRISK','impact_mat_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dimpact_mat_qty,@iimpact_mat_qty,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PROJRISK', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PROJRISK', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irisk_id,@iproj_id,@iwbs_id,@iadd_date,@ipriority_type,@istatus_code,@irisk_name,@irisk_type_id,@iobs_id,@irsrc_id,@iprbly_pct,@iimpact_work_qty,@iimpact_equip_qty,@iimpact_expense_cost,@iimpact_date,@iimpact_mat_qty, @idelete_session_id;
    else
     fetch deleted_c into @drisk_id,@dproj_id,@dwbs_id,@dadd_date,@dpriority_type,@dstatus_code,@drisk_name,@drisk_type_id,@dobs_id,@drsrc_id,@dprbly_pct,@dimpact_work_qty,@dimpact_equip_qty,@dimpact_expense_cost,@dimpact_date,@dimpact_mat_qty, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PROJTHRS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PROJTHRS' AND xtype = 'TR')
    DROP trigger PRMAUD_PROJTHRS

PRMAUD_PROJTHRS
create trigger PRMAUD_PROJTHRS
on PROJTHRS
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ithresh_id varchar(255),@iproj_id varchar(255),@iobs_id varchar(255),@ithresh_parm_id varchar(255),@istatus_code varchar(255),@ipriority_type varchar(255),@ithresh_type varchar(255),@iwbs_id varchar(255),@itrack_view_id varchar(255),@ilo_parm_value varchar(255),@ihi_parm_value varchar(255),@iwindow_start varchar(255),@iwindow_end varchar(255)

  declare @dthresh_id varchar(255),@dproj_id varchar(255),@dobs_id varchar(255),@dthresh_parm_id varchar(255),@dstatus_code varchar(255),@dpriority_type varchar(255),@dthresh_type varchar(255),@dwbs_id varchar(255),@dtrack_view_id varchar(255),@dlo_parm_value varchar(255),@dhi_parm_value varchar(255),@dwindow_start varchar(255),@dwindow_end varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(thresh_id) and
			not update(proj_id) and
			not update(obs_id) and
			not update(thresh_parm_id) and
			not update(status_code) and
			not update(priority_type) and
			not update(thresh_type) and
			not update(wbs_id) and
			not update(track_view_id) and
			not update(lo_parm_value) and
			not update(hi_parm_value) and
			not update(window_start) and
			not update(window_end) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PROJTHRS', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJTHRS',thresh_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJTHRS', thresh_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select thresh_id,proj_id,obs_id,thresh_parm_id,status_code,priority_type,thresh_type,wbs_id,track_view_id,lo_parm_value,hi_parm_value,window_start,window_end
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select thresh_id,proj_id,obs_id,thresh_parm_id,status_code,priority_type,thresh_type,wbs_id,track_view_id,lo_parm_value,hi_parm_value,window_start,window_end
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ithresh_id,@iproj_id,@iobs_id,@ithresh_parm_id,@istatus_code,@ipriority_type,@ithresh_type,@iwbs_id,@itrack_view_id,@ilo_parm_value,@ihi_parm_value,@iwindow_start,@iwindow_end, @idelete_session_id
  else
    fetch deleted_c into @dthresh_id,@dproj_id,@dobs_id,@dthresh_parm_id,@dstatus_code,@dpriority_type,@dthresh_type,@dwbs_id,@dtrack_view_id,@dlo_parm_value,@dhi_parm_value,@dwindow_start,@dwindow_end, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dthresh_id;
				

    end else begin
    	set @pk1 = @ithresh_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dthresh_id,@dproj_id,@dobs_id,@dthresh_parm_id,@dstatus_code,@dpriority_type,@dthresh_type,@dwbs_id,@dtrack_view_id,@dlo_parm_value,@dhi_parm_value,@dwindow_start,@dwindow_end, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(thresh_id)  exec audit_data 'PROJTHRS','thresh_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dthresh_id,@ithresh_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'PROJTHRS','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(obs_id)  exec audit_data 'PROJTHRS','obs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dobs_id,@iobs_id,@audit_data OUTPUT
      if (@loper='D') or  update(thresh_parm_id)  exec audit_data 'PROJTHRS','thresh_parm_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dthresh_parm_id,@ithresh_parm_id,@audit_data OUTPUT
      if (@loper='D') or  update(status_code)  exec audit_data 'PROJTHRS','status_code',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstatus_code,@istatus_code,@audit_data OUTPUT
      if (@loper='D') or  update(priority_type)  exec audit_data 'PROJTHRS','priority_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpriority_type,@ipriority_type,@audit_data OUTPUT
      if (@loper='D') or  update(thresh_type)  exec audit_data 'PROJTHRS','thresh_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dthresh_type,@ithresh_type,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_id)  exec audit_data 'PROJTHRS','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(track_view_id)  exec audit_data 'PROJTHRS','track_view_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtrack_view_id,@itrack_view_id,@audit_data OUTPUT
      if (@loper='D') or  update(lo_parm_value)  exec audit_data 'PROJTHRS','lo_parm_value',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlo_parm_value,@ilo_parm_value,@audit_data OUTPUT
      if (@loper='D') or  update(hi_parm_value)  exec audit_data 'PROJTHRS','hi_parm_value',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhi_parm_value,@ihi_parm_value,@audit_data OUTPUT
      if (@loper='D') or  update(window_start)  exec audit_data 'PROJTHRS','window_start',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwindow_start,@iwindow_start,@audit_data OUTPUT
      if (@loper='D') or  update(window_end)  exec audit_data 'PROJTHRS','window_end',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwindow_end,@iwindow_end,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PROJTHRS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PROJTHRS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ithresh_id,@iproj_id,@iobs_id,@ithresh_parm_id,@istatus_code,@ipriority_type,@ithresh_type,@iwbs_id,@itrack_view_id,@ilo_parm_value,@ihi_parm_value,@iwindow_start,@iwindow_end, @idelete_session_id;
    else
     fetch deleted_c into @dthresh_id,@dproj_id,@dobs_id,@dthresh_parm_id,@dstatus_code,@dpriority_type,@dthresh_type,@dwbs_id,@dtrack_view_id,@dlo_parm_value,@dhi_parm_value,@dwindow_start,@dwindow_end, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PROJWBS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PROJWBS' AND xtype = 'TR')
    DROP trigger PRMAUD_PROJWBS

PRMAUD_PROJWBS
create trigger PRMAUD_PROJWBS
on PROJWBS
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iwbs_id varchar(255),@iproj_id varchar(255),@iobs_id varchar(255),@iseq_num varchar(255),@iest_wt varchar(255),@iproj_node_flag varchar(255),@isum_data_flag varchar(255),@istatus_code varchar(255),@iwbs_short_name varchar(255),@iwbs_name varchar(255),@iphase_id varchar(255),@iparent_wbs_id varchar(255),@iev_user_pct varchar(255),@iev_etc_user_value varchar(255),@iorig_cost varchar(255),@iindep_remain_total_cost varchar(255),@iann_dscnt_rate_pct varchar(255),@idscnt_period_type varchar(255),@iindep_remain_work_qty varchar(255),@ianticip_start_date varchar(255),@ianticip_end_date varchar(255),@iev_compute_type varchar(255),@iev_etc_compute_type varchar(255),@iresp_team_id varchar(255),@iiteration_id varchar(255),@iguid varchar(255),@itmpl_guid varchar(255),@ioriginal_qty varchar(255),@irqmt_rem_qty varchar(255)

  declare @dwbs_id varchar(255),@dproj_id varchar(255),@dobs_id varchar(255),@dseq_num varchar(255),@dest_wt varchar(255),@dproj_node_flag varchar(255),@dsum_data_flag varchar(255),@dstatus_code varchar(255),@dwbs_short_name varchar(255),@dwbs_name varchar(255),@dphase_id varchar(255),@dparent_wbs_id varchar(255),@dev_user_pct varchar(255),@dev_etc_user_value varchar(255),@dorig_cost varchar(255),@dindep_remain_total_cost varchar(255),@dann_dscnt_rate_pct varchar(255),@ddscnt_period_type varchar(255),@dindep_remain_work_qty varchar(255),@danticip_start_date varchar(255),@danticip_end_date varchar(255),@dev_compute_type varchar(255),@dev_etc_compute_type varchar(255),@dresp_team_id varchar(255),@diteration_id varchar(255),@dguid varchar(255),@dtmpl_guid varchar(255),@doriginal_qty varchar(255),@drqmt_rem_qty varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(wbs_id) and
			not update(proj_id) and
			not update(obs_id) and
			not update(seq_num) and
			not update(est_wt) and
			not update(proj_node_flag) and
			not update(sum_data_flag) and
			not update(status_code) and
			not update(wbs_short_name) and
			not update(wbs_name) and
			not update(phase_id) and
			not update(parent_wbs_id) and
			not update(ev_user_pct) and
			not update(ev_etc_user_value) and
			not update(orig_cost) and
			not update(indep_remain_total_cost) and
			not update(ann_dscnt_rate_pct) and
			not update(dscnt_period_type) and
			not update(indep_remain_work_qty) and
			not update(anticip_start_date) and
			not update(anticip_end_date) and
			not update(ev_compute_type) and
			not update(ev_etc_compute_type) and
			not update(resp_team_id) and
			not update(iteration_id) and
			not update(guid) and
			not update(tmpl_guid) and
			not update(original_qty) and
			not update(rqmt_rem_qty) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PROJWBS', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJWBS',wbs_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJWBS', wbs_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select wbs_id,proj_id,obs_id,seq_num,est_wt,proj_node_flag,sum_data_flag,status_code,wbs_short_name,wbs_name,phase_id,parent_wbs_id,ev_user_pct,ev_etc_user_value,orig_cost,indep_remain_total_cost,ann_dscnt_rate_pct,dscnt_period_type,indep_remain_work_qty,anticip_start_date,anticip_end_date,ev_compute_type,ev_etc_compute_type,resp_team_id,iteration_id,guid,tmpl_guid,original_qty,rqmt_rem_qty
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select wbs_id,proj_id,obs_id,seq_num,est_wt,proj_node_flag,sum_data_flag,status_code,wbs_short_name,wbs_name,phase_id,parent_wbs_id,ev_user_pct,ev_etc_user_value,orig_cost,indep_remain_total_cost,ann_dscnt_rate_pct,dscnt_period_type,indep_remain_work_qty,anticip_start_date,anticip_end_date,ev_compute_type,ev_etc_compute_type,resp_team_id,iteration_id,guid,tmpl_guid,original_qty,rqmt_rem_qty
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iwbs_id,@iproj_id,@iobs_id,@iseq_num,@iest_wt,@iproj_node_flag,@isum_data_flag,@istatus_code,@iwbs_short_name,@iwbs_name,@iphase_id,@iparent_wbs_id,@iev_user_pct,@iev_etc_user_value,@iorig_cost,@iindep_remain_total_cost,@iann_dscnt_rate_pct,@idscnt_period_type,@iindep_remain_work_qty,@ianticip_start_date,@ianticip_end_date,@iev_compute_type,@iev_etc_compute_type,@iresp_team_id,@iiteration_id,@iguid,@itmpl_guid,@ioriginal_qty,@irqmt_rem_qty, @idelete_session_id
  else
    fetch deleted_c into @dwbs_id,@dproj_id,@dobs_id,@dseq_num,@dest_wt,@dproj_node_flag,@dsum_data_flag,@dstatus_code,@dwbs_short_name,@dwbs_name,@dphase_id,@dparent_wbs_id,@dev_user_pct,@dev_etc_user_value,@dorig_cost,@dindep_remain_total_cost,@dann_dscnt_rate_pct,@ddscnt_period_type,@dindep_remain_work_qty,@danticip_start_date,@danticip_end_date,@dev_compute_type,@dev_etc_compute_type,@dresp_team_id,@diteration_id,@dguid,@dtmpl_guid,@doriginal_qty,@drqmt_rem_qty, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dwbs_id;
				

    end else begin
    	set @pk1 = @iwbs_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dwbs_id,@dproj_id,@dobs_id,@dseq_num,@dest_wt,@dproj_node_flag,@dsum_data_flag,@dstatus_code,@dwbs_short_name,@dwbs_name,@dphase_id,@dparent_wbs_id,@dev_user_pct,@dev_etc_user_value,@dorig_cost,@dindep_remain_total_cost,@dann_dscnt_rate_pct,@ddscnt_period_type,@dindep_remain_work_qty,@danticip_start_date,@danticip_end_date,@dev_compute_type,@dev_etc_compute_type,@dresp_team_id,@diteration_id,@dguid,@dtmpl_guid,@doriginal_qty,@drqmt_rem_qty, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(wbs_id)  exec audit_data 'PROJWBS','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'PROJWBS','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(obs_id)  exec audit_data 'PROJWBS','obs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dobs_id,@iobs_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'PROJWBS','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(est_wt)  exec audit_data 'PROJWBS','est_wt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dest_wt,@iest_wt,@audit_data OUTPUT
      if (@loper='D') or  update(proj_node_flag)  exec audit_data 'PROJWBS','proj_node_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_node_flag,@iproj_node_flag,@audit_data OUTPUT
      if (@loper='D') or  update(sum_data_flag)  exec audit_data 'PROJWBS','sum_data_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsum_data_flag,@isum_data_flag,@audit_data OUTPUT
      if (@loper='D') or  update(status_code)  exec audit_data 'PROJWBS','status_code',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstatus_code,@istatus_code,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_short_name)  exec audit_data 'PROJWBS','wbs_short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_short_name,@iwbs_short_name,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_name)  exec audit_data 'PROJWBS','wbs_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_name,@iwbs_name,@audit_data OUTPUT
      if (@loper='D') or  update(phase_id)  exec audit_data 'PROJWBS','phase_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dphase_id,@iphase_id,@audit_data OUTPUT
      if (@loper='D') or  update(parent_wbs_id)  exec audit_data 'PROJWBS','parent_wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_wbs_id,@iparent_wbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(ev_user_pct)  exec audit_data 'PROJWBS','ev_user_pct',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dev_user_pct,@iev_user_pct,@audit_data OUTPUT
      if (@loper='D') or  update(ev_etc_user_value)  exec audit_data 'PROJWBS','ev_etc_user_value',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dev_etc_user_value,@iev_etc_user_value,@audit_data OUTPUT
      if (@loper='D') or  update(orig_cost)  exec audit_data 'PROJWBS','orig_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dorig_cost,@iorig_cost,@audit_data OUTPUT
      if (@loper='D') or  update(indep_remain_total_cost)  exec audit_data 'PROJWBS','indep_remain_total_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dindep_remain_total_cost,@iindep_remain_total_cost,@audit_data OUTPUT
      if (@loper='D') or  update(ann_dscnt_rate_pct)  exec audit_data 'PROJWBS','ann_dscnt_rate_pct',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dann_dscnt_rate_pct,@iann_dscnt_rate_pct,@audit_data OUTPUT
      if (@loper='D') or  update(dscnt_period_type)  exec audit_data 'PROJWBS','dscnt_period_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddscnt_period_type,@idscnt_period_type,@audit_data OUTPUT
      if (@loper='D') or  update(indep_remain_work_qty)  exec audit_data 'PROJWBS','indep_remain_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dindep_remain_work_qty,@iindep_remain_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(anticip_start_date)  exec audit_data 'PROJWBS','anticip_start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@danticip_start_date,@ianticip_start_date,@audit_data OUTPUT
      if (@loper='D') or  update(anticip_end_date)  exec audit_data 'PROJWBS','anticip_end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@danticip_end_date,@ianticip_end_date,@audit_data OUTPUT
      if (@loper='D') or  update(ev_compute_type)  exec audit_data 'PROJWBS','ev_compute_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dev_compute_type,@iev_compute_type,@audit_data OUTPUT
      if (@loper='D') or  update(ev_etc_compute_type)  exec audit_data 'PROJWBS','ev_etc_compute_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dev_etc_compute_type,@iev_etc_compute_type,@audit_data OUTPUT
      if (@loper='D') or  update(resp_team_id)  exec audit_data 'PROJWBS','resp_team_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dresp_team_id,@iresp_team_id,@audit_data OUTPUT
      if (@loper='D') or  update(iteration_id)  exec audit_data 'PROJWBS','iteration_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@diteration_id,@iiteration_id,@audit_data OUTPUT
      if (@loper='D') or  update(guid)  exec audit_data 'PROJWBS','guid',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dguid,@iguid,@audit_data OUTPUT
      if (@loper='D') or  update(tmpl_guid)  exec audit_data 'PROJWBS','tmpl_guid',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtmpl_guid,@itmpl_guid,@audit_data OUTPUT
      if (@loper='D') or  update(original_qty)  exec audit_data 'PROJWBS','original_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@doriginal_qty,@ioriginal_qty,@audit_data OUTPUT
      if (@loper='D') or  update(rqmt_rem_qty)  exec audit_data 'PROJWBS','rqmt_rem_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drqmt_rem_qty,@irqmt_rem_qty,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PROJWBS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PROJWBS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iwbs_id,@iproj_id,@iobs_id,@iseq_num,@iest_wt,@iproj_node_flag,@isum_data_flag,@istatus_code,@iwbs_short_name,@iwbs_name,@iphase_id,@iparent_wbs_id,@iev_user_pct,@iev_etc_user_value,@iorig_cost,@iindep_remain_total_cost,@iann_dscnt_rate_pct,@idscnt_period_type,@iindep_remain_work_qty,@ianticip_start_date,@ianticip_end_date,@iev_compute_type,@iev_etc_compute_type,@iresp_team_id,@iiteration_id,@iguid,@itmpl_guid,@ioriginal_qty,@irqmt_rem_qty, @idelete_session_id;
    else
     fetch deleted_c into @dwbs_id,@dproj_id,@dobs_id,@dseq_num,@dest_wt,@dproj_node_flag,@dsum_data_flag,@dstatus_code,@dwbs_short_name,@dwbs_name,@dphase_id,@dparent_wbs_id,@dev_user_pct,@dev_etc_user_value,@dorig_cost,@dindep_remain_total_cost,@dann_dscnt_rate_pct,@ddscnt_period_type,@dindep_remain_work_qty,@danticip_start_date,@danticip_end_date,@dev_compute_type,@dev_etc_compute_type,@dresp_team_id,@diteration_id,@dguid,@dtmpl_guid,@doriginal_qty,@drqmt_rem_qty, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PROJWSRPT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PROJWSRPT' AND xtype = 'TR')
    DROP trigger PRMAUD_PROJWSRPT

PRMAUD_PROJWSRPT
create trigger PRMAUD_PROJWSRPT
on PROJWSRPT
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irpt_id varchar(255),@iproj_id varchar(255)

  declare @drpt_id varchar(255),@dproj_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rpt_id) and
			not update(proj_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PROJWSRPT', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJWSRPT',rpt_id,proj_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PROJWSRPT', rpt_id,proj_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rpt_id,proj_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rpt_id,proj_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irpt_id,@iproj_id, @idelete_session_id
  else
    fetch deleted_c into @drpt_id,@dproj_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drpt_id;
				
set @pk2 = @dproj_id;
				

    end else begin
    	set @pk1 = @irpt_id;
				
set @pk2 = @iproj_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drpt_id,@dproj_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rpt_id)  exec audit_data 'PROJWSRPT','rpt_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_id,@irpt_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'PROJWSRPT','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PROJWSRPT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PROJWSRPT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irpt_id,@iproj_id, @idelete_session_id;
    else
     fetch deleted_c into @drpt_id,@dproj_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_PRPFOLIO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_PRPFOLIO' AND xtype = 'TR')
    DROP trigger PRMAUD_PRPFOLIO

PRMAUD_PRPFOLIO
create trigger PRMAUD_PRPFOLIO
on PRPFOLIO
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ipfolio_id varchar(255),@iwbs_id varchar(255)

  declare @dpfolio_id varchar(255),@dwbs_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(pfolio_id) and
			not update(wbs_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'PRPFOLIO', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PRPFOLIO',pfolio_id,wbs_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'PRPFOLIO', pfolio_id,wbs_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select pfolio_id,wbs_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select pfolio_id,wbs_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ipfolio_id,@iwbs_id, @idelete_session_id
  else
    fetch deleted_c into @dpfolio_id,@dwbs_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dpfolio_id;
				
set @pk2 = @dwbs_id;
				

    end else begin
    	set @pk1 = @ipfolio_id;
				
set @pk2 = @iwbs_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dpfolio_id,@dwbs_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(pfolio_id)  exec audit_data 'PRPFOLIO','pfolio_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpfolio_id,@ipfolio_id,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_id)  exec audit_data 'PRPFOLIO','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'PRPFOLIO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'PRPFOLIO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ipfolio_id,@iwbs_id, @idelete_session_id;
    else
     fetch deleted_c into @dpfolio_id,@dwbs_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_QUERYLIB
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_QUERYLIB' AND xtype = 'TR')
    DROP trigger PRMAUD_QUERYLIB

PRMAUD_QUERYLIB
create trigger PRMAUD_QUERYLIB
on QUERYLIB
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iquery_lib_id varchar(255),@iapp_name varchar(255),@icore_flag varchar(255),@imatch_sql varchar(4000),@ihints varchar(4000),@ireplacement_sql varchar(4000)

  declare @dquery_lib_id varchar(255),@dapp_name varchar(255),@dcore_flag varchar(255),@dmatch_sql varchar(4000),@dhints varchar(4000),@dreplacement_sql varchar(4000)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(query_lib_id) and
			not update(app_name) and
			not update(core_flag) and
			not update(match_sql) and
			not update(hints) and
			not update(replacement_sql) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'QUERYLIB', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'QUERYLIB',query_lib_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'QUERYLIB', query_lib_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select query_lib_id,app_name,core_flag,match_sql,hints,replacement_sql
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select query_lib_id,app_name,core_flag,match_sql,hints,replacement_sql
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iquery_lib_id,@iapp_name,@icore_flag,@imatch_sql,@ihints,@ireplacement_sql, @idelete_session_id
  else
    fetch deleted_c into @dquery_lib_id,@dapp_name,@dcore_flag,@dmatch_sql,@dhints,@dreplacement_sql, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dquery_lib_id;
				

    end else begin
    	set @pk1 = @iquery_lib_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dquery_lib_id,@dapp_name,@dcore_flag,@dmatch_sql,@dhints,@dreplacement_sql, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(query_lib_id)  exec audit_data 'QUERYLIB','query_lib_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dquery_lib_id,@iquery_lib_id,@audit_data OUTPUT
      if (@loper='D') or  update(app_name)  exec audit_data 'QUERYLIB','app_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dapp_name,@iapp_name,@audit_data OUTPUT
      if (@loper='D') or  update(core_flag)  exec audit_data 'QUERYLIB','core_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcore_flag,@icore_flag,@audit_data OUTPUT
      if (@loper='D') or  update(match_sql)  exec audit_data 'QUERYLIB','match_sql',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmatch_sql,@imatch_sql,@audit_data OUTPUT
      if (@loper='D') or  update(hints)  exec audit_data 'QUERYLIB','hints',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhints,@ihints,@audit_data OUTPUT
      if (@loper='D') or  update(replacement_sql)  exec audit_data 'QUERYLIB','replacement_sql',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dreplacement_sql,@ireplacement_sql,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'QUERYLIB', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'QUERYLIB', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iquery_lib_id,@iapp_name,@icore_flag,@imatch_sql,@ihints,@ireplacement_sql, @idelete_session_id;
    else
     fetch deleted_c into @dquery_lib_id,@dapp_name,@dcore_flag,@dmatch_sql,@dhints,@dreplacement_sql, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RCATTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RCATTYPE' AND xtype = 'TR')
    DROP trigger PRMAUD_RCATTYPE

PRMAUD_RCATTYPE
create trigger PRMAUD_RCATTYPE
on RCATTYPE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irsrc_catg_type_id varchar(255),@iseq_num varchar(255),@irsrc_catg_short_len varchar(255),@irsrc_catg_type varchar(255),@isuper_flag varchar(255)

  declare @drsrc_catg_type_id varchar(255),@dseq_num varchar(255),@drsrc_catg_short_len varchar(255),@drsrc_catg_type varchar(255),@dsuper_flag varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rsrc_catg_type_id) and
			not update(seq_num) and
			not update(rsrc_catg_short_len) and
			not update(rsrc_catg_type) and
			not update(super_flag) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RCATTYPE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RCATTYPE',rsrc_catg_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RCATTYPE', rsrc_catg_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rsrc_catg_type_id,seq_num,rsrc_catg_short_len,rsrc_catg_type,super_flag
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rsrc_catg_type_id,seq_num,rsrc_catg_short_len,rsrc_catg_type,super_flag
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irsrc_catg_type_id,@iseq_num,@irsrc_catg_short_len,@irsrc_catg_type,@isuper_flag, @idelete_session_id
  else
    fetch deleted_c into @drsrc_catg_type_id,@dseq_num,@drsrc_catg_short_len,@drsrc_catg_type,@dsuper_flag, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drsrc_catg_type_id;
				

    end else begin
    	set @pk1 = @irsrc_catg_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drsrc_catg_type_id,@dseq_num,@drsrc_catg_short_len,@drsrc_catg_type,@dsuper_flag, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rsrc_catg_type_id)  exec audit_data 'RCATTYPE','rsrc_catg_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_catg_type_id,@irsrc_catg_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'RCATTYPE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_catg_short_len)  exec audit_data 'RCATTYPE','rsrc_catg_short_len',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_catg_short_len,@irsrc_catg_short_len,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_catg_type)  exec audit_data 'RCATTYPE','rsrc_catg_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_catg_type,@irsrc_catg_type,@audit_data OUTPUT
      if (@loper='D') or  update(super_flag)  exec audit_data 'RCATTYPE','super_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsuper_flag,@isuper_flag,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RCATTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RCATTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irsrc_catg_type_id,@iseq_num,@irsrc_catg_short_len,@irsrc_catg_type,@isuper_flag, @idelete_session_id;
    else
     fetch deleted_c into @drsrc_catg_type_id,@dseq_num,@drsrc_catg_short_len,@drsrc_catg_type,@dsuper_flag, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RCATVAL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RCATVAL' AND xtype = 'TR')
    DROP trigger PRMAUD_RCATVAL

PRMAUD_RCATVAL
create trigger PRMAUD_RCATVAL
on RCATVAL
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irsrc_catg_id varchar(255),@irsrc_catg_type_id varchar(255),@iseq_num varchar(255),@irsrc_catg_short_name varchar(255),@irsrc_catg_name varchar(255),@iparent_rsrc_catg_id varchar(255)

  declare @drsrc_catg_id varchar(255),@drsrc_catg_type_id varchar(255),@dseq_num varchar(255),@drsrc_catg_short_name varchar(255),@drsrc_catg_name varchar(255),@dparent_rsrc_catg_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rsrc_catg_id) and
			not update(rsrc_catg_type_id) and
			not update(seq_num) and
			not update(rsrc_catg_short_name) and
			not update(rsrc_catg_name) and
			not update(parent_rsrc_catg_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RCATVAL', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RCATVAL',rsrc_catg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RCATVAL', rsrc_catg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rsrc_catg_id,rsrc_catg_type_id,seq_num,rsrc_catg_short_name,rsrc_catg_name,parent_rsrc_catg_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rsrc_catg_id,rsrc_catg_type_id,seq_num,rsrc_catg_short_name,rsrc_catg_name,parent_rsrc_catg_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irsrc_catg_id,@irsrc_catg_type_id,@iseq_num,@irsrc_catg_short_name,@irsrc_catg_name,@iparent_rsrc_catg_id, @idelete_session_id
  else
    fetch deleted_c into @drsrc_catg_id,@drsrc_catg_type_id,@dseq_num,@drsrc_catg_short_name,@drsrc_catg_name,@dparent_rsrc_catg_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drsrc_catg_id;
				

    end else begin
    	set @pk1 = @irsrc_catg_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drsrc_catg_id,@drsrc_catg_type_id,@dseq_num,@drsrc_catg_short_name,@drsrc_catg_name,@dparent_rsrc_catg_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rsrc_catg_id)  exec audit_data 'RCATVAL','rsrc_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_catg_id,@irsrc_catg_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_catg_type_id)  exec audit_data 'RCATVAL','rsrc_catg_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_catg_type_id,@irsrc_catg_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'RCATVAL','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_catg_short_name)  exec audit_data 'RCATVAL','rsrc_catg_short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_catg_short_name,@irsrc_catg_short_name,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_catg_name)  exec audit_data 'RCATVAL','rsrc_catg_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_catg_name,@irsrc_catg_name,@audit_data OUTPUT
      if (@loper='D') or  update(parent_rsrc_catg_id)  exec audit_data 'RCATVAL','parent_rsrc_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_rsrc_catg_id,@iparent_rsrc_catg_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RCATVAL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RCATVAL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irsrc_catg_id,@irsrc_catg_type_id,@iseq_num,@irsrc_catg_short_name,@irsrc_catg_name,@iparent_rsrc_catg_id, @idelete_session_id;
    else
     fetch deleted_c into @drsrc_catg_id,@drsrc_catg_type_id,@dseq_num,@drsrc_catg_short_name,@drsrc_catg_name,@dparent_rsrc_catg_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_REITTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_REITTYPE' AND xtype = 'TR')
    DROP trigger PRMAUD_REITTYPE

PRMAUD_REITTYPE
create trigger PRMAUD_REITTYPE
on REITTYPE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irelated_item_type_id varchar(255),@irelated_item varchar(255),@itable_name varchar(255)

  declare @drelated_item_type_id varchar(255),@drelated_item varchar(255),@dtable_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(related_item_type_id) and
			not update(related_item) and
			not update(table_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'REITTYPE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'REITTYPE',related_item_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'REITTYPE', related_item_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select related_item_type_id,related_item,table_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select related_item_type_id,related_item,table_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irelated_item_type_id,@irelated_item,@itable_name, @idelete_session_id
  else
    fetch deleted_c into @drelated_item_type_id,@drelated_item,@dtable_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drelated_item_type_id;
				

    end else begin
    	set @pk1 = @irelated_item_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drelated_item_type_id,@drelated_item,@dtable_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(related_item_type_id)  exec audit_data 'REITTYPE','related_item_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drelated_item_type_id,@irelated_item_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(related_item)  exec audit_data 'REITTYPE','related_item',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drelated_item,@irelated_item,@audit_data OUTPUT
      if (@loper='D') or  update(table_name)  exec audit_data 'REITTYPE','table_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtable_name,@itable_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'REITTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'REITTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irelated_item_type_id,@irelated_item,@itable_name, @idelete_session_id;
    else
     fetch deleted_c into @drelated_item_type_id,@drelated_item,@dtable_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RELEASE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RELEASE' AND xtype = 'TR')
    DROP trigger PRMAUD_RELEASE

PRMAUD_RELEASE
create trigger PRMAUD_RELEASE
on RELEASE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irelease_id varchar(255),@irfolio_id varchar(255),@irelease_name varchar(255),@istart_date varchar(255),@iproj_id varchar(255),@irelease_theme varchar(255)

  declare @drelease_id varchar(255),@drfolio_id varchar(255),@drelease_name varchar(255),@dstart_date varchar(255),@dproj_id varchar(255),@drelease_theme varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(release_id) and
			not update(rfolio_id) and
			not update(release_name) and
			not update(start_date) and
			not update(proj_id) and
			not update(release_theme) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RELEASE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RELEASE',release_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RELEASE', release_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select release_id,rfolio_id,release_name,start_date,proj_id,release_theme
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select release_id,rfolio_id,release_name,start_date,proj_id,release_theme
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irelease_id,@irfolio_id,@irelease_name,@istart_date,@iproj_id,@irelease_theme, @idelete_session_id
  else
    fetch deleted_c into @drelease_id,@drfolio_id,@drelease_name,@dstart_date,@dproj_id,@drelease_theme, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drelease_id;
				

    end else begin
    	set @pk1 = @irelease_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drelease_id,@drfolio_id,@drelease_name,@dstart_date,@dproj_id,@drelease_theme, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(release_id)  exec audit_data 'RELEASE','release_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drelease_id,@irelease_id,@audit_data OUTPUT
      if (@loper='D') or  update(rfolio_id)  exec audit_data 'RELEASE','rfolio_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drfolio_id,@irfolio_id,@audit_data OUTPUT
      if (@loper='D') or  update(release_name)  exec audit_data 'RELEASE','release_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drelease_name,@irelease_name,@audit_data OUTPUT
      if (@loper='D') or  update(start_date)  exec audit_data 'RELEASE','start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstart_date,@istart_date,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'RELEASE','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(release_theme)  exec audit_data 'RELEASE','release_theme',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drelease_theme,@irelease_theme,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RELEASE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RELEASE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irelease_id,@irfolio_id,@irelease_name,@istart_date,@iproj_id,@irelease_theme, @idelete_session_id;
    else
     fetch deleted_c into @drelease_id,@drfolio_id,@drelease_name,@dstart_date,@dproj_id,@drelease_theme, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RELITEMS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RELITEMS' AND xtype = 'TR')
    DROP trigger PRMAUD_RELITEMS

PRMAUD_RELITEMS
create trigger PRMAUD_RELITEMS
on RELITEMS
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iitem_type_id varchar(255),@ifk_id varchar(255),@irelated_item_type_id varchar(255),@irelated_fk_id varchar(255),@iproj_id varchar(255)

  declare @ditem_type_id varchar(255),@dfk_id varchar(255),@drelated_item_type_id varchar(255),@drelated_fk_id varchar(255),@dproj_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(item_type_id) and
			not update(fk_id) and
			not update(related_item_type_id) and
			not update(related_fk_id) and
			not update(proj_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RELITEMS', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RELITEMS',item_type_id,fk_id,related_item_type_id,related_fk_id , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RELITEMS', item_type_id,fk_id,related_item_type_id,related_fk_id , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select item_type_id,fk_id,related_item_type_id,related_fk_id,proj_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select item_type_id,fk_id,related_item_type_id,related_fk_id,proj_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iitem_type_id,@ifk_id,@irelated_item_type_id,@irelated_fk_id,@iproj_id, @idelete_session_id
  else
    fetch deleted_c into @ditem_type_id,@dfk_id,@drelated_item_type_id,@drelated_fk_id,@dproj_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @ditem_type_id;
				
set @pk2 = @dfk_id;
				
set @pk3 = @drelated_item_type_id;
				
set @pk4 = @drelated_fk_id;
				

    end else begin
    	set @pk1 = @iitem_type_id;
				
set @pk2 = @ifk_id;
				
set @pk3 = @irelated_item_type_id;
				
set @pk4 = @irelated_fk_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @ditem_type_id,@dfk_id,@drelated_item_type_id,@drelated_fk_id,@dproj_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(item_type_id)  exec audit_data 'RELITEMS','item_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ditem_type_id,@iitem_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(fk_id)  exec audit_data 'RELITEMS','fk_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfk_id,@ifk_id,@audit_data OUTPUT
      if (@loper='D') or  update(related_item_type_id)  exec audit_data 'RELITEMS','related_item_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drelated_item_type_id,@irelated_item_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(related_fk_id)  exec audit_data 'RELITEMS','related_fk_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drelated_fk_id,@irelated_fk_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'RELITEMS','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RELITEMS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RELITEMS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iitem_type_id,@ifk_id,@irelated_item_type_id,@irelated_fk_id,@iproj_id, @idelete_session_id;
    else
     fetch deleted_c into @ditem_type_id,@dfk_id,@drelated_item_type_id,@drelated_fk_id,@dproj_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RFOLIO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RFOLIO' AND xtype = 'TR')
    DROP trigger PRMAUD_RFOLIO

PRMAUD_RFOLIO
create trigger PRMAUD_RFOLIO
on RFOLIO
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irfolio_id varchar(255),@iuser_id varchar(255),@irfolio_name varchar(255),@irfolio_type varchar(255),@irfolio_descr varchar(255),@iteam_capacity_pct varchar(255),@iparent_rfolio_id varchar(255)

  declare @drfolio_id varchar(255),@duser_id varchar(255),@drfolio_name varchar(255),@drfolio_type varchar(255),@drfolio_descr varchar(255),@dteam_capacity_pct varchar(255),@dparent_rfolio_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rfolio_id) and
			not update(user_id) and
			not update(rfolio_name) and
			not update(rfolio_type) and
			not update(rfolio_descr) and
			not update(team_capacity_pct) and
			not update(parent_rfolio_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RFOLIO', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RFOLIO',rfolio_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RFOLIO', rfolio_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rfolio_id,user_id,rfolio_name,rfolio_type,rfolio_descr,team_capacity_pct,parent_rfolio_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rfolio_id,user_id,rfolio_name,rfolio_type,rfolio_descr,team_capacity_pct,parent_rfolio_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irfolio_id,@iuser_id,@irfolio_name,@irfolio_type,@irfolio_descr,@iteam_capacity_pct,@iparent_rfolio_id, @idelete_session_id
  else
    fetch deleted_c into @drfolio_id,@duser_id,@drfolio_name,@drfolio_type,@drfolio_descr,@dteam_capacity_pct,@dparent_rfolio_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drfolio_id;
				

    end else begin
    	set @pk1 = @irfolio_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drfolio_id,@duser_id,@drfolio_name,@drfolio_type,@drfolio_descr,@dteam_capacity_pct,@dparent_rfolio_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rfolio_id)  exec audit_data 'RFOLIO','rfolio_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drfolio_id,@irfolio_id,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'RFOLIO','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(rfolio_name)  exec audit_data 'RFOLIO','rfolio_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drfolio_name,@irfolio_name,@audit_data OUTPUT
      if (@loper='D') or  update(rfolio_type)  exec audit_data 'RFOLIO','rfolio_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drfolio_type,@irfolio_type,@audit_data OUTPUT
      if (@loper='D') or  update(rfolio_descr)  exec audit_data 'RFOLIO','rfolio_descr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drfolio_descr,@irfolio_descr,@audit_data OUTPUT
      if (@loper='D') or  update(team_capacity_pct)  exec audit_data 'RFOLIO','team_capacity_pct',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dteam_capacity_pct,@iteam_capacity_pct,@audit_data OUTPUT
      if (@loper='D') or  update(parent_rfolio_id)  exec audit_data 'RFOLIO','parent_rfolio_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_rfolio_id,@iparent_rfolio_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RFOLIO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RFOLIO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irfolio_id,@iuser_id,@irfolio_name,@irfolio_type,@irfolio_descr,@iteam_capacity_pct,@iparent_rfolio_id, @idelete_session_id;
    else
     fetch deleted_c into @drfolio_id,@duser_id,@drfolio_name,@drfolio_type,@drfolio_descr,@dteam_capacity_pct,@dparent_rfolio_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RISKCTRL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RISKCTRL' AND xtype = 'TR')
    DROP trigger PRMAUD_RISKCTRL

PRMAUD_RISKCTRL
create trigger PRMAUD_RISKCTRL
on RISKCTRL
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irisk_id varchar(255),@iproj_id varchar(255)

  declare @drisk_id varchar(255),@dproj_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(risk_id) and
			not update(proj_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RISKCTRL', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RISKCTRL',risk_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RISKCTRL', risk_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select risk_id,proj_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select risk_id,proj_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irisk_id,@iproj_id, @idelete_session_id
  else
    fetch deleted_c into @drisk_id,@dproj_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drisk_id;
				

    end else begin
    	set @pk1 = @irisk_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drisk_id,@dproj_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(risk_id)  exec audit_data 'RISKCTRL','risk_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drisk_id,@irisk_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'RISKCTRL','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RISKCTRL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RISKCTRL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irisk_id,@iproj_id, @idelete_session_id;
    else
     fetch deleted_c into @drisk_id,@dproj_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RISKTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RISKTYPE' AND xtype = 'TR')
    DROP trigger PRMAUD_RISKTYPE

PRMAUD_RISKTYPE
create trigger PRMAUD_RISKTYPE
on RISKTYPE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irisk_type_id varchar(255),@iseq_num varchar(255),@irisk_type varchar(255)

  declare @drisk_type_id varchar(255),@dseq_num varchar(255),@drisk_type varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(risk_type_id) and
			not update(seq_num) and
			not update(risk_type) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RISKTYPE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RISKTYPE',risk_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RISKTYPE', risk_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select risk_type_id,seq_num,risk_type
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select risk_type_id,seq_num,risk_type
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irisk_type_id,@iseq_num,@irisk_type, @idelete_session_id
  else
    fetch deleted_c into @drisk_type_id,@dseq_num,@drisk_type, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drisk_type_id;
				

    end else begin
    	set @pk1 = @irisk_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drisk_type_id,@dseq_num,@drisk_type, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(risk_type_id)  exec audit_data 'RISKTYPE','risk_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drisk_type_id,@irisk_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'RISKTYPE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(risk_type)  exec audit_data 'RISKTYPE','risk_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drisk_type,@irisk_type,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RISKTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RISKTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irisk_type_id,@iseq_num,@irisk_type, @idelete_session_id;
    else
     fetch deleted_c into @drisk_type_id,@dseq_num,@drisk_type, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RLFOLIO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RLFOLIO' AND xtype = 'TR')
    DROP trigger PRMAUD_RLFOLIO

PRMAUD_RLFOLIO
create trigger PRMAUD_RLFOLIO
on RLFOLIO
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irlfolio_id varchar(255),@iuser_id varchar(255),@irlfolio_name varchar(255),@irlfolio_type varchar(255),@irlfolio_descr varchar(255)

  declare @drlfolio_id varchar(255),@duser_id varchar(255),@drlfolio_name varchar(255),@drlfolio_type varchar(255),@drlfolio_descr varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rlfolio_id) and
			not update(user_id) and
			not update(rlfolio_name) and
			not update(rlfolio_type) and
			not update(rlfolio_descr) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RLFOLIO', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RLFOLIO',rlfolio_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RLFOLIO', rlfolio_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rlfolio_id,user_id,rlfolio_name,rlfolio_type,rlfolio_descr
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rlfolio_id,user_id,rlfolio_name,rlfolio_type,rlfolio_descr
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irlfolio_id,@iuser_id,@irlfolio_name,@irlfolio_type,@irlfolio_descr, @idelete_session_id
  else
    fetch deleted_c into @drlfolio_id,@duser_id,@drlfolio_name,@drlfolio_type,@drlfolio_descr, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drlfolio_id;
				

    end else begin
    	set @pk1 = @irlfolio_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drlfolio_id,@duser_id,@drlfolio_name,@drlfolio_type,@drlfolio_descr, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rlfolio_id)  exec audit_data 'RLFOLIO','rlfolio_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drlfolio_id,@irlfolio_id,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'RLFOLIO','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(rlfolio_name)  exec audit_data 'RLFOLIO','rlfolio_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drlfolio_name,@irlfolio_name,@audit_data OUTPUT
      if (@loper='D') or  update(rlfolio_type)  exec audit_data 'RLFOLIO','rlfolio_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drlfolio_type,@irlfolio_type,@audit_data OUTPUT
      if (@loper='D') or  update(rlfolio_descr)  exec audit_data 'RLFOLIO','rlfolio_descr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drlfolio_descr,@irlfolio_descr,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RLFOLIO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RLFOLIO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irlfolio_id,@iuser_id,@irlfolio_name,@irlfolio_type,@irlfolio_descr, @idelete_session_id;
    else
     fetch deleted_c into @drlfolio_id,@duser_id,@drlfolio_name,@drlfolio_type,@drlfolio_descr, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_ROLFOLIO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_ROLFOLIO' AND xtype = 'TR')
    DROP trigger PRMAUD_ROLFOLIO

PRMAUD_ROLFOLIO
create trigger PRMAUD_ROLFOLIO
on ROLFOLIO
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irlfolio_id varchar(255),@irole_id varchar(255)

  declare @drlfolio_id varchar(255),@drole_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rlfolio_id) and
			not update(role_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'ROLFOLIO', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ROLFOLIO',rlfolio_id,role_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ROLFOLIO', rlfolio_id,role_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rlfolio_id,role_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rlfolio_id,role_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irlfolio_id,@irole_id, @idelete_session_id
  else
    fetch deleted_c into @drlfolio_id,@drole_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drlfolio_id;
				
set @pk2 = @drole_id;
				

    end else begin
    	set @pk1 = @irlfolio_id;
				
set @pk2 = @irole_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drlfolio_id,@drole_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rlfolio_id)  exec audit_data 'ROLFOLIO','rlfolio_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drlfolio_id,@irlfolio_id,@audit_data OUTPUT
      if (@loper='D') or  update(role_id)  exec audit_data 'ROLFOLIO','role_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_id,@irole_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'ROLFOLIO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'ROLFOLIO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irlfolio_id,@irole_id, @idelete_session_id;
    else
     fetch deleted_c into @drlfolio_id,@drole_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_ROLERATE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_ROLERATE' AND xtype = 'TR')
    DROP trigger PRMAUD_ROLERATE

PRMAUD_ROLERATE
create trigger PRMAUD_ROLERATE
on ROLERATE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irole_rate_id varchar(255),@irole_id varchar(255),@icost_per_qty varchar(255),@icost_per_qty2 varchar(255),@icost_per_qty3 varchar(255),@icost_per_qty4 varchar(255),@icost_per_qty5 varchar(255)

  declare @drole_rate_id varchar(255),@drole_id varchar(255),@dcost_per_qty varchar(255),@dcost_per_qty2 varchar(255),@dcost_per_qty3 varchar(255),@dcost_per_qty4 varchar(255),@dcost_per_qty5 varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(role_rate_id) and
			not update(role_id) and
			not update(cost_per_qty) and
			not update(cost_per_qty2) and
			not update(cost_per_qty3) and
			not update(cost_per_qty4) and
			not update(cost_per_qty5) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'ROLERATE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ROLERATE',role_rate_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ROLERATE', role_rate_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select role_rate_id,role_id,cost_per_qty,cost_per_qty2,cost_per_qty3,cost_per_qty4,cost_per_qty5
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select role_rate_id,role_id,cost_per_qty,cost_per_qty2,cost_per_qty3,cost_per_qty4,cost_per_qty5
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irole_rate_id,@irole_id,@icost_per_qty,@icost_per_qty2,@icost_per_qty3,@icost_per_qty4,@icost_per_qty5, @idelete_session_id
  else
    fetch deleted_c into @drole_rate_id,@drole_id,@dcost_per_qty,@dcost_per_qty2,@dcost_per_qty3,@dcost_per_qty4,@dcost_per_qty5, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drole_rate_id;
				

    end else begin
    	set @pk1 = @irole_rate_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drole_rate_id,@drole_id,@dcost_per_qty,@dcost_per_qty2,@dcost_per_qty3,@dcost_per_qty4,@dcost_per_qty5, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(role_rate_id)  exec audit_data 'ROLERATE','role_rate_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_rate_id,@irole_rate_id,@audit_data OUTPUT
      if (@loper='D') or  update(role_id)  exec audit_data 'ROLERATE','role_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_id,@irole_id,@audit_data OUTPUT
      if (@loper='D') or  update(cost_per_qty)  exec audit_data 'ROLERATE','cost_per_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_per_qty,@icost_per_qty,@audit_data OUTPUT
      if (@loper='D') or  update(cost_per_qty2)  exec audit_data 'ROLERATE','cost_per_qty2',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_per_qty2,@icost_per_qty2,@audit_data OUTPUT
      if (@loper='D') or  update(cost_per_qty3)  exec audit_data 'ROLERATE','cost_per_qty3',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_per_qty3,@icost_per_qty3,@audit_data OUTPUT
      if (@loper='D') or  update(cost_per_qty4)  exec audit_data 'ROLERATE','cost_per_qty4',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_per_qty4,@icost_per_qty4,@audit_data OUTPUT
      if (@loper='D') or  update(cost_per_qty5)  exec audit_data 'ROLERATE','cost_per_qty5',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_per_qty5,@icost_per_qty5,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'ROLERATE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'ROLERATE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irole_rate_id,@irole_id,@icost_per_qty,@icost_per_qty2,@icost_per_qty3,@icost_per_qty4,@icost_per_qty5, @idelete_session_id;
    else
     fetch deleted_c into @drole_rate_id,@drole_id,@dcost_per_qty,@dcost_per_qty2,@dcost_per_qty3,@dcost_per_qty4,@dcost_per_qty5, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_ROLELIMIT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_ROLELIMIT' AND xtype = 'TR')
    DROP trigger PRMAUD_ROLELIMIT

PRMAUD_ROLELIMIT
create trigger PRMAUD_ROLELIMIT
on ROLELIMIT
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irolelimit_id varchar(255),@irole_id varchar(255),@istart_date varchar(255),@imax_qty_per_hr varchar(255)

  declare @drolelimit_id varchar(255),@drole_id varchar(255),@dstart_date varchar(255),@dmax_qty_per_hr varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rolelimit_id) and
			not update(role_id) and
			not update(start_date) and
			not update(max_qty_per_hr) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'ROLELIMIT', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ROLELIMIT',rolelimit_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ROLELIMIT', rolelimit_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rolelimit_id,role_id,start_date,max_qty_per_hr
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rolelimit_id,role_id,start_date,max_qty_per_hr
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irolelimit_id,@irole_id,@istart_date,@imax_qty_per_hr, @idelete_session_id
  else
    fetch deleted_c into @drolelimit_id,@drole_id,@dstart_date,@dmax_qty_per_hr, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drolelimit_id;
				

    end else begin
    	set @pk1 = @irolelimit_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drolelimit_id,@drole_id,@dstart_date,@dmax_qty_per_hr, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rolelimit_id)  exec audit_data 'ROLELIMIT','rolelimit_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drolelimit_id,@irolelimit_id,@audit_data OUTPUT
      if (@loper='D') or  update(role_id)  exec audit_data 'ROLELIMIT','role_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_id,@irole_id,@audit_data OUTPUT
      if (@loper='D') or  update(start_date)  exec audit_data 'ROLELIMIT','start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstart_date,@istart_date,@audit_data OUTPUT
      if (@loper='D') or  update(max_qty_per_hr)  exec audit_data 'ROLELIMIT','max_qty_per_hr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_qty_per_hr,@imax_qty_per_hr,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'ROLELIMIT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'ROLELIMIT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irolelimit_id,@irole_id,@istart_date,@imax_qty_per_hr, @idelete_session_id;
    else
     fetch deleted_c into @drolelimit_id,@drole_id,@dstart_date,@dmax_qty_per_hr, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_ROLES
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_ROLES' AND xtype = 'TR')
    DROP trigger PRMAUD_ROLES

PRMAUD_ROLES
create trigger PRMAUD_ROLES
on ROLES
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irole_id varchar(255),@irole_short_name varchar(255),@irole_name varchar(255),@iseq_num varchar(255),@iparent_role_id varchar(255),@idef_cost_qty_link_flag varchar(255),@icost_qty_type varchar(255),@ipobs_id varchar(255)

  declare @drole_id varchar(255),@drole_short_name varchar(255),@drole_name varchar(255),@dseq_num varchar(255),@dparent_role_id varchar(255),@ddef_cost_qty_link_flag varchar(255),@dcost_qty_type varchar(255),@dpobs_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(role_id) and
			not update(role_short_name) and
			not update(role_name) and
			not update(seq_num) and
			not update(parent_role_id) and
			not update(def_cost_qty_link_flag) and
			not update(cost_qty_type) and
			not update(pobs_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'ROLES', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ROLES',role_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'ROLES', role_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select role_id,role_short_name,role_name,seq_num,parent_role_id,def_cost_qty_link_flag,cost_qty_type,pobs_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select role_id,role_short_name,role_name,seq_num,parent_role_id,def_cost_qty_link_flag,cost_qty_type,pobs_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irole_id,@irole_short_name,@irole_name,@iseq_num,@iparent_role_id,@idef_cost_qty_link_flag,@icost_qty_type,@ipobs_id, @idelete_session_id
  else
    fetch deleted_c into @drole_id,@drole_short_name,@drole_name,@dseq_num,@dparent_role_id,@ddef_cost_qty_link_flag,@dcost_qty_type,@dpobs_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drole_id;
				

    end else begin
    	set @pk1 = @irole_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drole_id,@drole_short_name,@drole_name,@dseq_num,@dparent_role_id,@ddef_cost_qty_link_flag,@dcost_qty_type,@dpobs_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(role_id)  exec audit_data 'ROLES','role_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_id,@irole_id,@audit_data OUTPUT
      if (@loper='D') or  update(role_short_name)  exec audit_data 'ROLES','role_short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_short_name,@irole_short_name,@audit_data OUTPUT
      if (@loper='D') or  update(role_name)  exec audit_data 'ROLES','role_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_name,@irole_name,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'ROLES','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(parent_role_id)  exec audit_data 'ROLES','parent_role_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_role_id,@iparent_role_id,@audit_data OUTPUT
      if (@loper='D') or  update(def_cost_qty_link_flag)  exec audit_data 'ROLES','def_cost_qty_link_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddef_cost_qty_link_flag,@idef_cost_qty_link_flag,@audit_data OUTPUT
      if (@loper='D') or  update(cost_qty_type)  exec audit_data 'ROLES','cost_qty_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_qty_type,@icost_qty_type,@audit_data OUTPUT
      if (@loper='D') or  update(pobs_id)  exec audit_data 'ROLES','pobs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpobs_id,@ipobs_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'ROLES', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'ROLES', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irole_id,@irole_short_name,@irole_name,@iseq_num,@iparent_role_id,@idef_cost_qty_link_flag,@icost_qty_type,@ipobs_id, @idelete_session_id;
    else
     fetch deleted_c into @drole_id,@drole_short_name,@drole_name,@dseq_num,@dparent_role_id,@ddef_cost_qty_link_flag,@dcost_qty_type,@dpobs_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RPT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RPT' AND xtype = 'TR')
    DROP trigger PRMAUD_RPT

PRMAUD_RPT
create trigger PRMAUD_RPT
on RPT
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irpt_id varchar(255),@iglobal_flag varchar(255),@irpt_type varchar(255),@irpt_name varchar(255),@irpt_area varchar(255),@irpt_group_id varchar(255),@iproj_id varchar(255),@irpt_state varchar(255),@ilast_run_date varchar(255)

  declare @drpt_id varchar(255),@dglobal_flag varchar(255),@drpt_type varchar(255),@drpt_name varchar(255),@drpt_area varchar(255),@drpt_group_id varchar(255),@dproj_id varchar(255),@drpt_state varchar(255),@dlast_run_date varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rpt_id) and
			not update(global_flag) and
			not update(rpt_type) and
			not update(rpt_name) and
			not update(rpt_area) and
			not update(rpt_group_id) and
			not update(proj_id) and
			not update(rpt_state) and
			not update(last_run_date) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RPT', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RPT',rpt_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RPT', rpt_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rpt_id,global_flag,rpt_type,rpt_name,rpt_area,rpt_group_id,proj_id,rpt_state,last_run_date
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rpt_id,global_flag,rpt_type,rpt_name,rpt_area,rpt_group_id,proj_id,rpt_state,last_run_date
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irpt_id,@iglobal_flag,@irpt_type,@irpt_name,@irpt_area,@irpt_group_id,@iproj_id,@irpt_state,@ilast_run_date, @idelete_session_id
  else
    fetch deleted_c into @drpt_id,@dglobal_flag,@drpt_type,@drpt_name,@drpt_area,@drpt_group_id,@dproj_id,@drpt_state,@dlast_run_date, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drpt_id;
				

    end else begin
    	set @pk1 = @irpt_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drpt_id,@dglobal_flag,@drpt_type,@drpt_name,@drpt_area,@drpt_group_id,@dproj_id,@drpt_state,@dlast_run_date, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rpt_id)  exec audit_data 'RPT','rpt_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_id,@irpt_id,@audit_data OUTPUT
      if (@loper='D') or  update(global_flag)  exec audit_data 'RPT','global_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dglobal_flag,@iglobal_flag,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_type)  exec audit_data 'RPT','rpt_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_type,@irpt_type,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_name)  exec audit_data 'RPT','rpt_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_name,@irpt_name,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_area)  exec audit_data 'RPT','rpt_area',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_area,@irpt_area,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_group_id)  exec audit_data 'RPT','rpt_group_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_group_id,@irpt_group_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'RPT','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_state)  exec audit_data 'RPT','rpt_state',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_state,@irpt_state,@audit_data OUTPUT
      if (@loper='D') or  update(last_run_date)  exec audit_data 'RPT','last_run_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlast_run_date,@ilast_run_date,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RPT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RPT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irpt_id,@iglobal_flag,@irpt_type,@irpt_name,@irpt_area,@irpt_group_id,@iproj_id,@irpt_state,@ilast_run_date, @idelete_session_id;
    else
     fetch deleted_c into @drpt_id,@dglobal_flag,@drpt_type,@drpt_name,@drpt_area,@drpt_group_id,@dproj_id,@drpt_state,@dlast_run_date, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RPTBATCH
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RPTBATCH' AND xtype = 'TR')
    DROP trigger PRMAUD_RPTBATCH

PRMAUD_RPTBATCH
create trigger PRMAUD_RPTBATCH
on RPTBATCH
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irpt_batch_id varchar(255),@irpt_batch_name varchar(255),@iproj_id varchar(255)

  declare @drpt_batch_id varchar(255),@drpt_batch_name varchar(255),@dproj_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rpt_batch_id) and
			not update(rpt_batch_name) and
			not update(proj_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RPTBATCH', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RPTBATCH',rpt_batch_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RPTBATCH', rpt_batch_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rpt_batch_id,rpt_batch_name,proj_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rpt_batch_id,rpt_batch_name,proj_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irpt_batch_id,@irpt_batch_name,@iproj_id, @idelete_session_id
  else
    fetch deleted_c into @drpt_batch_id,@drpt_batch_name,@dproj_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drpt_batch_id;
				

    end else begin
    	set @pk1 = @irpt_batch_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drpt_batch_id,@drpt_batch_name,@dproj_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rpt_batch_id)  exec audit_data 'RPTBATCH','rpt_batch_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_batch_id,@irpt_batch_id,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_batch_name)  exec audit_data 'RPTBATCH','rpt_batch_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_batch_name,@irpt_batch_name,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'RPTBATCH','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RPTBATCH', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RPTBATCH', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irpt_batch_id,@irpt_batch_name,@iproj_id, @idelete_session_id;
    else
     fetch deleted_c into @drpt_batch_id,@drpt_batch_name,@dproj_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RPTGROUP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RPTGROUP' AND xtype = 'TR')
    DROP trigger PRMAUD_RPTGROUP

PRMAUD_RPTGROUP
create trigger PRMAUD_RPTGROUP
on RPTGROUP
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irpt_group_id varchar(255),@irpt_group_seq_num varchar(255),@irpt_group_name varchar(255),@iparent_group_id varchar(255)

  declare @drpt_group_id varchar(255),@drpt_group_seq_num varchar(255),@drpt_group_name varchar(255),@dparent_group_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rpt_group_id) and
			not update(rpt_group_seq_num) and
			not update(rpt_group_name) and
			not update(parent_group_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RPTGROUP', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RPTGROUP',rpt_group_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RPTGROUP', rpt_group_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rpt_group_id,rpt_group_seq_num,rpt_group_name,parent_group_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rpt_group_id,rpt_group_seq_num,rpt_group_name,parent_group_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irpt_group_id,@irpt_group_seq_num,@irpt_group_name,@iparent_group_id, @idelete_session_id
  else
    fetch deleted_c into @drpt_group_id,@drpt_group_seq_num,@drpt_group_name,@dparent_group_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drpt_group_id;
				

    end else begin
    	set @pk1 = @irpt_group_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drpt_group_id,@drpt_group_seq_num,@drpt_group_name,@dparent_group_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rpt_group_id)  exec audit_data 'RPTGROUP','rpt_group_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_group_id,@irpt_group_id,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_group_seq_num)  exec audit_data 'RPTGROUP','rpt_group_seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_group_seq_num,@irpt_group_seq_num,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_group_name)  exec audit_data 'RPTGROUP','rpt_group_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_group_name,@irpt_group_name,@audit_data OUTPUT
      if (@loper='D') or  update(parent_group_id)  exec audit_data 'RPTGROUP','parent_group_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_group_id,@iparent_group_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RPTGROUP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RPTGROUP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irpt_group_id,@irpt_group_seq_num,@irpt_group_name,@iparent_group_id, @idelete_session_id;
    else
     fetch deleted_c into @drpt_group_id,@drpt_group_seq_num,@drpt_group_name,@dparent_group_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RPTLIST
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RPTLIST' AND xtype = 'TR')
    DROP trigger PRMAUD_RPTLIST

PRMAUD_RPTLIST
create trigger PRMAUD_RPTLIST
on RPTLIST
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irpt_batch_id varchar(255),@irpt_id varchar(255),@iseq_num varchar(255)

  declare @drpt_batch_id varchar(255),@drpt_id varchar(255),@dseq_num varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rpt_batch_id) and
			not update(rpt_id) and
			not update(seq_num) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RPTLIST', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RPTLIST',rpt_batch_id,rpt_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RPTLIST', rpt_batch_id,rpt_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rpt_batch_id,rpt_id,seq_num
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rpt_batch_id,rpt_id,seq_num
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irpt_batch_id,@irpt_id,@iseq_num, @idelete_session_id
  else
    fetch deleted_c into @drpt_batch_id,@drpt_id,@dseq_num, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drpt_batch_id;
				
set @pk2 = @drpt_id;
				

    end else begin
    	set @pk1 = @irpt_batch_id;
				
set @pk2 = @irpt_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drpt_batch_id,@drpt_id,@dseq_num, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rpt_batch_id)  exec audit_data 'RPTLIST','rpt_batch_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_batch_id,@irpt_batch_id,@audit_data OUTPUT
      if (@loper='D') or  update(rpt_id)  exec audit_data 'RPTLIST','rpt_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drpt_id,@irpt_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'RPTLIST','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RPTLIST', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RPTLIST', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irpt_batch_id,@irpt_id,@iseq_num, @idelete_session_id;
    else
     fetch deleted_c into @drpt_batch_id,@drpt_id,@dseq_num, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RSRC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RSRC' AND xtype = 'TR')
    DROP trigger PRMAUD_RSRC

PRMAUD_RSRC
create trigger PRMAUD_RSRC
on RSRC
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irsrc_id varchar(255),@iclndr_id varchar(255),@irsrc_seq_num varchar(255),@itimesheet_flag varchar(255),@iactive_flag varchar(255),@irsrc_type varchar(255),@iauto_compute_act_flag varchar(255),@iot_flag varchar(255),@idef_cost_qty_link_flag varchar(255),@irsrc_short_name varchar(255),@irsrc_name varchar(255),@iparent_rsrc_id varchar(255),@ixfer_complete_day_cnt varchar(255),@ixfer_notstart_day_cnt varchar(255),@its_approve_user_id varchar(255),@iuser_id varchar(255),@irole_id varchar(255),@icurr_id varchar(255),@ilast_checksum varchar(255),@ishift_id varchar(255),@iot_factor varchar(255),@idef_qty_per_hr varchar(255),@iguid varchar(255),@icost_qty_type varchar(255),@ioffice_phone varchar(255),@iother_phone varchar(255),@iemployee_code varchar(255),@irsrc_title_name varchar(255),@iemail_addr varchar(255),@iunit_id varchar(255),@ipobs_id varchar(255)

  declare @drsrc_id varchar(255),@dclndr_id varchar(255),@drsrc_seq_num varchar(255),@dtimesheet_flag varchar(255),@dactive_flag varchar(255),@drsrc_type varchar(255),@dauto_compute_act_flag varchar(255),@dot_flag varchar(255),@ddef_cost_qty_link_flag varchar(255),@drsrc_short_name varchar(255),@drsrc_name varchar(255),@dparent_rsrc_id varchar(255),@dxfer_complete_day_cnt varchar(255),@dxfer_notstart_day_cnt varchar(255),@dts_approve_user_id varchar(255),@duser_id varchar(255),@drole_id varchar(255),@dcurr_id varchar(255),@dlast_checksum varchar(255),@dshift_id varchar(255),@dot_factor varchar(255),@ddef_qty_per_hr varchar(255),@dguid varchar(255),@dcost_qty_type varchar(255),@doffice_phone varchar(255),@dother_phone varchar(255),@demployee_code varchar(255),@drsrc_title_name varchar(255),@demail_addr varchar(255),@dunit_id varchar(255),@dpobs_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rsrc_id) and
			not update(clndr_id) and
			not update(rsrc_seq_num) and
			not update(timesheet_flag) and
			not update(active_flag) and
			not update(rsrc_type) and
			not update(auto_compute_act_flag) and
			not update(ot_flag) and
			not update(def_cost_qty_link_flag) and
			not update(rsrc_short_name) and
			not update(rsrc_name) and
			not update(parent_rsrc_id) and
			not update(xfer_complete_day_cnt) and
			not update(xfer_notstart_day_cnt) and
			not update(ts_approve_user_id) and
			not update(user_id) and
			not update(role_id) and
			not update(curr_id) and
			not update(last_checksum) and
			not update(shift_id) and
			not update(ot_factor) and
			not update(def_qty_per_hr) and
			not update(guid) and
			not update(cost_qty_type) and
			not update(office_phone) and
			not update(other_phone) and
			not update(employee_code) and
			not update(rsrc_title_name) and
			not update(email_addr) and
			not update(unit_id) and
			not update(pobs_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RSRC', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRC',rsrc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRC', rsrc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rsrc_id,clndr_id,rsrc_seq_num,timesheet_flag,active_flag,rsrc_type,auto_compute_act_flag,ot_flag,def_cost_qty_link_flag,rsrc_short_name,rsrc_name,parent_rsrc_id,xfer_complete_day_cnt,xfer_notstart_day_cnt,ts_approve_user_id,user_id,role_id,curr_id,last_checksum,shift_id,ot_factor,def_qty_per_hr,guid,cost_qty_type,office_phone,other_phone,employee_code,rsrc_title_name,email_addr,unit_id,pobs_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rsrc_id,clndr_id,rsrc_seq_num,timesheet_flag,active_flag,rsrc_type,auto_compute_act_flag,ot_flag,def_cost_qty_link_flag,rsrc_short_name,rsrc_name,parent_rsrc_id,xfer_complete_day_cnt,xfer_notstart_day_cnt,ts_approve_user_id,user_id,role_id,curr_id,last_checksum,shift_id,ot_factor,def_qty_per_hr,guid,cost_qty_type,office_phone,other_phone,employee_code,rsrc_title_name,email_addr,unit_id,pobs_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irsrc_id,@iclndr_id,@irsrc_seq_num,@itimesheet_flag,@iactive_flag,@irsrc_type,@iauto_compute_act_flag,@iot_flag,@idef_cost_qty_link_flag,@irsrc_short_name,@irsrc_name,@iparent_rsrc_id,@ixfer_complete_day_cnt,@ixfer_notstart_day_cnt,@its_approve_user_id,@iuser_id,@irole_id,@icurr_id,@ilast_checksum,@ishift_id,@iot_factor,@idef_qty_per_hr,@iguid,@icost_qty_type,@ioffice_phone,@iother_phone,@iemployee_code,@irsrc_title_name,@iemail_addr,@iunit_id,@ipobs_id, @idelete_session_id
  else
    fetch deleted_c into @drsrc_id,@dclndr_id,@drsrc_seq_num,@dtimesheet_flag,@dactive_flag,@drsrc_type,@dauto_compute_act_flag,@dot_flag,@ddef_cost_qty_link_flag,@drsrc_short_name,@drsrc_name,@dparent_rsrc_id,@dxfer_complete_day_cnt,@dxfer_notstart_day_cnt,@dts_approve_user_id,@duser_id,@drole_id,@dcurr_id,@dlast_checksum,@dshift_id,@dot_factor,@ddef_qty_per_hr,@dguid,@dcost_qty_type,@doffice_phone,@dother_phone,@demployee_code,@drsrc_title_name,@demail_addr,@dunit_id,@dpobs_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drsrc_id;
				

    end else begin
    	set @pk1 = @irsrc_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drsrc_id,@dclndr_id,@drsrc_seq_num,@dtimesheet_flag,@dactive_flag,@drsrc_type,@dauto_compute_act_flag,@dot_flag,@ddef_cost_qty_link_flag,@drsrc_short_name,@drsrc_name,@dparent_rsrc_id,@dxfer_complete_day_cnt,@dxfer_notstart_day_cnt,@dts_approve_user_id,@duser_id,@drole_id,@dcurr_id,@dlast_checksum,@dshift_id,@dot_factor,@ddef_qty_per_hr,@dguid,@dcost_qty_type,@doffice_phone,@dother_phone,@demployee_code,@drsrc_title_name,@demail_addr,@dunit_id,@dpobs_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'RSRC','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(clndr_id)  exec audit_data 'RSRC','clndr_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dclndr_id,@iclndr_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_seq_num)  exec audit_data 'RSRC','rsrc_seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_seq_num,@irsrc_seq_num,@audit_data OUTPUT
      if (@loper='D') or  update(timesheet_flag)  exec audit_data 'RSRC','timesheet_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtimesheet_flag,@itimesheet_flag,@audit_data OUTPUT
      if (@loper='D') or  update(active_flag)  exec audit_data 'RSRC','active_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactive_flag,@iactive_flag,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_type)  exec audit_data 'RSRC','rsrc_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_type,@irsrc_type,@audit_data OUTPUT
      if (@loper='D') or  update(auto_compute_act_flag)  exec audit_data 'RSRC','auto_compute_act_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dauto_compute_act_flag,@iauto_compute_act_flag,@audit_data OUTPUT
      if (@loper='D') or  update(ot_flag)  exec audit_data 'RSRC','ot_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dot_flag,@iot_flag,@audit_data OUTPUT
      if (@loper='D') or  update(def_cost_qty_link_flag)  exec audit_data 'RSRC','def_cost_qty_link_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddef_cost_qty_link_flag,@idef_cost_qty_link_flag,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_short_name)  exec audit_data 'RSRC','rsrc_short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_short_name,@irsrc_short_name,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_name)  exec audit_data 'RSRC','rsrc_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_name,@irsrc_name,@audit_data OUTPUT
      if (@loper='D') or  update(parent_rsrc_id)  exec audit_data 'RSRC','parent_rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_rsrc_id,@iparent_rsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(xfer_complete_day_cnt)  exec audit_data 'RSRC','xfer_complete_day_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dxfer_complete_day_cnt,@ixfer_complete_day_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(xfer_notstart_day_cnt)  exec audit_data 'RSRC','xfer_notstart_day_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dxfer_notstart_day_cnt,@ixfer_notstart_day_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(ts_approve_user_id)  exec audit_data 'RSRC','ts_approve_user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dts_approve_user_id,@its_approve_user_id,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'RSRC','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(role_id)  exec audit_data 'RSRC','role_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_id,@irole_id,@audit_data OUTPUT
      if (@loper='D') or  update(curr_id)  exec audit_data 'RSRC','curr_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcurr_id,@icurr_id,@audit_data OUTPUT
      if (@loper='D') or  update(last_checksum)  exec audit_data 'RSRC','last_checksum',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlast_checksum,@ilast_checksum,@audit_data OUTPUT
      if (@loper='D') or  update(shift_id)  exec audit_data 'RSRC','shift_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dshift_id,@ishift_id,@audit_data OUTPUT
      if (@loper='D') or  update(ot_factor)  exec audit_data 'RSRC','ot_factor',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dot_factor,@iot_factor,@audit_data OUTPUT
      if (@loper='D') or  update(def_qty_per_hr)  exec audit_data 'RSRC','def_qty_per_hr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddef_qty_per_hr,@idef_qty_per_hr,@audit_data OUTPUT
      if (@loper='D') or  update(guid)  exec audit_data 'RSRC','guid',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dguid,@iguid,@audit_data OUTPUT
      if (@loper='D') or  update(cost_qty_type)  exec audit_data 'RSRC','cost_qty_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_qty_type,@icost_qty_type,@audit_data OUTPUT
      if (@loper='D') or  update(office_phone)  exec audit_data 'RSRC','office_phone',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@doffice_phone,@ioffice_phone,@audit_data OUTPUT
      if (@loper='D') or  update(other_phone)  exec audit_data 'RSRC','other_phone',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dother_phone,@iother_phone,@audit_data OUTPUT
      if (@loper='D') or  update(employee_code)  exec audit_data 'RSRC','employee_code',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@demployee_code,@iemployee_code,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_title_name)  exec audit_data 'RSRC','rsrc_title_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_title_name,@irsrc_title_name,@audit_data OUTPUT
      if (@loper='D') or  update(email_addr)  exec audit_data 'RSRC','email_addr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@demail_addr,@iemail_addr,@audit_data OUTPUT
      if (@loper='D') or  update(unit_id)  exec audit_data 'RSRC','unit_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dunit_id,@iunit_id,@audit_data OUTPUT
      if (@loper='D') or  update(pobs_id)  exec audit_data 'RSRC','pobs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpobs_id,@ipobs_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RSRC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RSRC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irsrc_id,@iclndr_id,@irsrc_seq_num,@itimesheet_flag,@iactive_flag,@irsrc_type,@iauto_compute_act_flag,@iot_flag,@idef_cost_qty_link_flag,@irsrc_short_name,@irsrc_name,@iparent_rsrc_id,@ixfer_complete_day_cnt,@ixfer_notstart_day_cnt,@its_approve_user_id,@iuser_id,@irole_id,@icurr_id,@ilast_checksum,@ishift_id,@iot_factor,@idef_qty_per_hr,@iguid,@icost_qty_type,@ioffice_phone,@iother_phone,@iemployee_code,@irsrc_title_name,@iemail_addr,@iunit_id,@ipobs_id, @idelete_session_id;
    else
     fetch deleted_c into @drsrc_id,@dclndr_id,@drsrc_seq_num,@dtimesheet_flag,@dactive_flag,@drsrc_type,@dauto_compute_act_flag,@dot_flag,@ddef_cost_qty_link_flag,@drsrc_short_name,@drsrc_name,@dparent_rsrc_id,@dxfer_complete_day_cnt,@dxfer_notstart_day_cnt,@dts_approve_user_id,@duser_id,@drole_id,@dcurr_id,@dlast_checksum,@dshift_id,@dot_factor,@ddef_qty_per_hr,@dguid,@dcost_qty_type,@doffice_phone,@dother_phone,@demployee_code,@drsrc_title_name,@demail_addr,@dunit_id,@dpobs_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RSRCANDASH
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RSRCANDASH' AND xtype = 'TR')
    DROP trigger PRMAUD_RSRCANDASH

PRMAUD_RSRCANDASH
create trigger PRMAUD_RSRCANDASH
on RSRCANDASH
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @idashboard_id varchar(255),@irsrcan_view_id varchar(255),@iseq_num varchar(255)

  declare @ddashboard_id varchar(255),@drsrcan_view_id varchar(255),@dseq_num varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(dashboard_id) and
			not update(rsrcan_view_id) and
			not update(seq_num) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RSRCANDASH', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCANDASH',dashboard_id,rsrcan_view_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCANDASH', dashboard_id,rsrcan_view_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select dashboard_id,rsrcan_view_id,seq_num
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select dashboard_id,rsrcan_view_id,seq_num
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @idashboard_id,@irsrcan_view_id,@iseq_num, @idelete_session_id
  else
    fetch deleted_c into @ddashboard_id,@drsrcan_view_id,@dseq_num, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @ddashboard_id;
				
set @pk2 = @drsrcan_view_id;
				

    end else begin
    	set @pk1 = @idashboard_id;
				
set @pk2 = @irsrcan_view_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @ddashboard_id,@drsrcan_view_id,@dseq_num, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(dashboard_id)  exec audit_data 'RSRCANDASH','dashboard_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddashboard_id,@idashboard_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrcan_view_id)  exec audit_data 'RSRCANDASH','rsrcan_view_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrcan_view_id,@irsrcan_view_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'RSRCANDASH','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RSRCANDASH', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RSRCANDASH', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @idashboard_id,@irsrcan_view_id,@iseq_num, @idelete_session_id;
    else
     fetch deleted_c into @ddashboard_id,@drsrcan_view_id,@dseq_num, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RSRCANVIEW
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RSRCANVIEW' AND xtype = 'TR')
    DROP trigger PRMAUD_RSRCANVIEW

PRMAUD_RSRCANVIEW
create trigger PRMAUD_RSRCANVIEW
on RSRCANVIEW
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irsrcan_view_id varchar(255),@irsrcan_view_name varchar(255),@iuser_id varchar(255),@irsrcan_view_type varchar(255),@irsrcan_view_data varchar(4000)

  declare @drsrcan_view_id varchar(255),@drsrcan_view_name varchar(255),@duser_id varchar(255),@drsrcan_view_type varchar(255),@drsrcan_view_data varchar(4000)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rsrcan_view_id) and
			not update(rsrcan_view_name) and
			not update(user_id) and
			not update(rsrcan_view_type) and
			not update(rsrcan_view_data) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RSRCANVIEW', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCANVIEW',rsrcan_view_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCANVIEW', rsrcan_view_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rsrcan_view_id,rsrcan_view_name,user_id,rsrcan_view_type,rsrcan_view_data
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rsrcan_view_id,rsrcan_view_name,user_id,rsrcan_view_type,rsrcan_view_data
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irsrcan_view_id,@irsrcan_view_name,@iuser_id,@irsrcan_view_type,@irsrcan_view_data, @idelete_session_id
  else
    fetch deleted_c into @drsrcan_view_id,@drsrcan_view_name,@duser_id,@drsrcan_view_type,@drsrcan_view_data, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drsrcan_view_id;
				

    end else begin
    	set @pk1 = @irsrcan_view_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drsrcan_view_id,@drsrcan_view_name,@duser_id,@drsrcan_view_type,@drsrcan_view_data, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rsrcan_view_id)  exec audit_data 'RSRCANVIEW','rsrcan_view_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrcan_view_id,@irsrcan_view_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrcan_view_name)  exec audit_data 'RSRCANVIEW','rsrcan_view_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrcan_view_name,@irsrcan_view_name,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'RSRCANVIEW','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrcan_view_type)  exec audit_data 'RSRCANVIEW','rsrcan_view_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrcan_view_type,@irsrcan_view_type,@audit_data OUTPUT
      if (@loper='D') or  update(rsrcan_view_data)  exec audit_data 'RSRCANVIEW','rsrcan_view_data',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrcan_view_data,@irsrcan_view_data,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RSRCANVIEW', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RSRCANVIEW', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irsrcan_view_id,@irsrcan_view_name,@iuser_id,@irsrcan_view_type,@irsrcan_view_data, @idelete_session_id;
    else
     fetch deleted_c into @drsrcan_view_id,@drsrcan_view_name,@duser_id,@drsrcan_view_type,@drsrcan_view_data, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RSRCCURV
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RSRCCURV' AND xtype = 'TR')
    DROP trigger PRMAUD_RSRCCURV

PRMAUD_RSRCCURV
create trigger PRMAUD_RSRCCURV
on RSRCCURV
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @icurv_id varchar(255),@icurv_name varchar(255),@idefault_flag varchar(255)

  declare @dcurv_id varchar(255),@dcurv_name varchar(255),@ddefault_flag varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(curv_id) and
			not update(curv_name) and
			not update(default_flag) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RSRCCURV', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCCURV',curv_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCCURV', curv_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select curv_id,curv_name,default_flag
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select curv_id,curv_name,default_flag
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @icurv_id,@icurv_name,@idefault_flag, @idelete_session_id
  else
    fetch deleted_c into @dcurv_id,@dcurv_name,@ddefault_flag, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dcurv_id;
				

    end else begin
    	set @pk1 = @icurv_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dcurv_id,@dcurv_name,@ddefault_flag, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(curv_id)  exec audit_data 'RSRCCURV','curv_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcurv_id,@icurv_id,@audit_data OUTPUT
      if (@loper='D') or  update(curv_name)  exec audit_data 'RSRCCURV','curv_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcurv_name,@icurv_name,@audit_data OUTPUT
      if (@loper='D') or  update(default_flag)  exec audit_data 'RSRCCURV','default_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddefault_flag,@idefault_flag,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RSRCCURV', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RSRCCURV', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @icurv_id,@icurv_name,@idefault_flag, @idelete_session_id;
    else
     fetch deleted_c into @dcurv_id,@dcurv_name,@ddefault_flag, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RSRCHOUR
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RSRCHOUR' AND xtype = 'TR')
    DROP trigger PRMAUD_RSRCHOUR

PRMAUD_RSRCHOUR
create trigger PRMAUD_RSRCHOUR
on RSRCHOUR
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irsrc_hr_id varchar(255),@irsrc_id varchar(255),@its_id varchar(255),@itask_ts_flag varchar(255),@itaskrsrc_id varchar(255),@inonwork_type_id varchar(255),@iproj_id varchar(255),@ipend_hr_cnt varchar(255),@ihr_cnt varchar(255),@ipend_ot_hr_cnt varchar(255),@iot_hr_cnt varchar(255),@iwork_date varchar(255),@istatus_code varchar(255)

  declare @drsrc_hr_id varchar(255),@drsrc_id varchar(255),@dts_id varchar(255),@dtask_ts_flag varchar(255),@dtaskrsrc_id varchar(255),@dnonwork_type_id varchar(255),@dproj_id varchar(255),@dpend_hr_cnt varchar(255),@dhr_cnt varchar(255),@dpend_ot_hr_cnt varchar(255),@dot_hr_cnt varchar(255),@dwork_date varchar(255),@dstatus_code varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rsrc_hr_id) and
			not update(rsrc_id) and
			not update(ts_id) and
			not update(task_ts_flag) and
			not update(taskrsrc_id) and
			not update(nonwork_type_id) and
			not update(proj_id) and
			not update(pend_hr_cnt) and
			not update(hr_cnt) and
			not update(pend_ot_hr_cnt) and
			not update(ot_hr_cnt) and
			not update(work_date) and
			not update(status_code) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RSRCHOUR', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCHOUR',rsrc_hr_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCHOUR', rsrc_hr_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rsrc_hr_id,rsrc_id,ts_id,task_ts_flag,taskrsrc_id,nonwork_type_id,proj_id,pend_hr_cnt,hr_cnt,pend_ot_hr_cnt,ot_hr_cnt,work_date,status_code
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rsrc_hr_id,rsrc_id,ts_id,task_ts_flag,taskrsrc_id,nonwork_type_id,proj_id,pend_hr_cnt,hr_cnt,pend_ot_hr_cnt,ot_hr_cnt,work_date,status_code
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irsrc_hr_id,@irsrc_id,@its_id,@itask_ts_flag,@itaskrsrc_id,@inonwork_type_id,@iproj_id,@ipend_hr_cnt,@ihr_cnt,@ipend_ot_hr_cnt,@iot_hr_cnt,@iwork_date,@istatus_code, @idelete_session_id
  else
    fetch deleted_c into @drsrc_hr_id,@drsrc_id,@dts_id,@dtask_ts_flag,@dtaskrsrc_id,@dnonwork_type_id,@dproj_id,@dpend_hr_cnt,@dhr_cnt,@dpend_ot_hr_cnt,@dot_hr_cnt,@dwork_date,@dstatus_code, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drsrc_hr_id;
				

    end else begin
    	set @pk1 = @irsrc_hr_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drsrc_hr_id,@drsrc_id,@dts_id,@dtask_ts_flag,@dtaskrsrc_id,@dnonwork_type_id,@dproj_id,@dpend_hr_cnt,@dhr_cnt,@dpend_ot_hr_cnt,@dot_hr_cnt,@dwork_date,@dstatus_code, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rsrc_hr_id)  exec audit_data 'RSRCHOUR','rsrc_hr_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_hr_id,@irsrc_hr_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'RSRCHOUR','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(ts_id)  exec audit_data 'RSRCHOUR','ts_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dts_id,@its_id,@audit_data OUTPUT
      if (@loper='D') or  update(task_ts_flag)  exec audit_data 'RSRCHOUR','task_ts_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_ts_flag,@itask_ts_flag,@audit_data OUTPUT
      if (@loper='D') or  update(taskrsrc_id)  exec audit_data 'RSRCHOUR','taskrsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtaskrsrc_id,@itaskrsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(nonwork_type_id)  exec audit_data 'RSRCHOUR','nonwork_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dnonwork_type_id,@inonwork_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'RSRCHOUR','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(pend_hr_cnt)  exec audit_data 'RSRCHOUR','pend_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpend_hr_cnt,@ipend_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(hr_cnt)  exec audit_data 'RSRCHOUR','hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dhr_cnt,@ihr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(pend_ot_hr_cnt)  exec audit_data 'RSRCHOUR','pend_ot_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpend_ot_hr_cnt,@ipend_ot_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(ot_hr_cnt)  exec audit_data 'RSRCHOUR','ot_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dot_hr_cnt,@iot_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(work_date)  exec audit_data 'RSRCHOUR','work_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwork_date,@iwork_date,@audit_data OUTPUT
      if (@loper='D') or  update(status_code)  exec audit_data 'RSRCHOUR','status_code',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstatus_code,@istatus_code,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RSRCHOUR', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RSRCHOUR', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irsrc_hr_id,@irsrc_id,@its_id,@itask_ts_flag,@itaskrsrc_id,@inonwork_type_id,@iproj_id,@ipend_hr_cnt,@ihr_cnt,@ipend_ot_hr_cnt,@iot_hr_cnt,@iwork_date,@istatus_code, @idelete_session_id;
    else
     fetch deleted_c into @drsrc_hr_id,@drsrc_id,@dts_id,@dtask_ts_flag,@dtaskrsrc_id,@dnonwork_type_id,@dproj_id,@dpend_hr_cnt,@dhr_cnt,@dpend_ot_hr_cnt,@dot_hr_cnt,@dwork_date,@dstatus_code, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RSRCPROP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RSRCPROP' AND xtype = 'TR')
    DROP trigger PRMAUD_RSRCPROP

PRMAUD_RSRCPROP
create trigger PRMAUD_RSRCPROP
on RSRCPROP
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irsrc_id varchar(255),@iprop_name varchar(255),@iprop_value varchar(255)

  declare @drsrc_id varchar(255),@dprop_name varchar(255),@dprop_value varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rsrc_id) and
			not update(prop_name) and
			not update(prop_value) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RSRCPROP', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCPROP',rsrc_id,prop_name,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCPROP', rsrc_id,prop_name,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rsrc_id,prop_name,prop_value
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rsrc_id,prop_name,prop_value
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irsrc_id,@iprop_name,@iprop_value, @idelete_session_id
  else
    fetch deleted_c into @drsrc_id,@dprop_name,@dprop_value, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drsrc_id;
				
set @pk2 = @dprop_name;
				

    end else begin
    	set @pk1 = @irsrc_id;
				
set @pk2 = @iprop_name;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drsrc_id,@dprop_name,@dprop_value, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'RSRCPROP','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(prop_name)  exec audit_data 'RSRCPROP','prop_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprop_name,@iprop_name,@audit_data OUTPUT
      if (@loper='D') or  update(prop_value)  exec audit_data 'RSRCPROP','prop_value',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprop_value,@iprop_value,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RSRCPROP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RSRCPROP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irsrc_id,@iprop_name,@iprop_value, @idelete_session_id;
    else
     fetch deleted_c into @drsrc_id,@dprop_name,@dprop_value, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RSRCRATE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RSRCRATE' AND xtype = 'TR')
    DROP trigger PRMAUD_RSRCRATE

PRMAUD_RSRCRATE
create trigger PRMAUD_RSRCRATE
on RSRCRATE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irsrc_rate_id varchar(255),@irsrc_id varchar(255),@istart_date varchar(255),@ishift_period_id varchar(255),@imax_qty_per_hr varchar(255),@icost_per_qty varchar(255),@icost_per_qty2 varchar(255),@icost_per_qty3 varchar(255),@icost_per_qty4 varchar(255),@icost_per_qty5 varchar(255)

  declare @drsrc_rate_id varchar(255),@drsrc_id varchar(255),@dstart_date varchar(255),@dshift_period_id varchar(255),@dmax_qty_per_hr varchar(255),@dcost_per_qty varchar(255),@dcost_per_qty2 varchar(255),@dcost_per_qty3 varchar(255),@dcost_per_qty4 varchar(255),@dcost_per_qty5 varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rsrc_rate_id) and
			not update(rsrc_id) and
			not update(start_date) and
			not update(shift_period_id) and
			not update(max_qty_per_hr) and
			not update(cost_per_qty) and
			not update(cost_per_qty2) and
			not update(cost_per_qty3) and
			not update(cost_per_qty4) and
			not update(cost_per_qty5) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RSRCRATE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCRATE',rsrc_rate_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCRATE', rsrc_rate_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rsrc_rate_id,rsrc_id,start_date,shift_period_id,max_qty_per_hr,cost_per_qty,cost_per_qty2,cost_per_qty3,cost_per_qty4,cost_per_qty5
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rsrc_rate_id,rsrc_id,start_date,shift_period_id,max_qty_per_hr,cost_per_qty,cost_per_qty2,cost_per_qty3,cost_per_qty4,cost_per_qty5
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irsrc_rate_id,@irsrc_id,@istart_date,@ishift_period_id,@imax_qty_per_hr,@icost_per_qty,@icost_per_qty2,@icost_per_qty3,@icost_per_qty4,@icost_per_qty5, @idelete_session_id
  else
    fetch deleted_c into @drsrc_rate_id,@drsrc_id,@dstart_date,@dshift_period_id,@dmax_qty_per_hr,@dcost_per_qty,@dcost_per_qty2,@dcost_per_qty3,@dcost_per_qty4,@dcost_per_qty5, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drsrc_rate_id;
				

    end else begin
    	set @pk1 = @irsrc_rate_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drsrc_rate_id,@drsrc_id,@dstart_date,@dshift_period_id,@dmax_qty_per_hr,@dcost_per_qty,@dcost_per_qty2,@dcost_per_qty3,@dcost_per_qty4,@dcost_per_qty5, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rsrc_rate_id)  exec audit_data 'RSRCRATE','rsrc_rate_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_rate_id,@irsrc_rate_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'RSRCRATE','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(start_date)  exec audit_data 'RSRCRATE','start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstart_date,@istart_date,@audit_data OUTPUT
      if (@loper='D') or  update(shift_period_id)  exec audit_data 'RSRCRATE','shift_period_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dshift_period_id,@ishift_period_id,@audit_data OUTPUT
      if (@loper='D') or  update(max_qty_per_hr)  exec audit_data 'RSRCRATE','max_qty_per_hr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmax_qty_per_hr,@imax_qty_per_hr,@audit_data OUTPUT
      if (@loper='D') or  update(cost_per_qty)  exec audit_data 'RSRCRATE','cost_per_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_per_qty,@icost_per_qty,@audit_data OUTPUT
      if (@loper='D') or  update(cost_per_qty2)  exec audit_data 'RSRCRATE','cost_per_qty2',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_per_qty2,@icost_per_qty2,@audit_data OUTPUT
      if (@loper='D') or  update(cost_per_qty3)  exec audit_data 'RSRCRATE','cost_per_qty3',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_per_qty3,@icost_per_qty3,@audit_data OUTPUT
      if (@loper='D') or  update(cost_per_qty4)  exec audit_data 'RSRCRATE','cost_per_qty4',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_per_qty4,@icost_per_qty4,@audit_data OUTPUT
      if (@loper='D') or  update(cost_per_qty5)  exec audit_data 'RSRCRATE','cost_per_qty5',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_per_qty5,@icost_per_qty5,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RSRCRATE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RSRCRATE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irsrc_rate_id,@irsrc_id,@istart_date,@ishift_period_id,@imax_qty_per_hr,@icost_per_qty,@icost_per_qty2,@icost_per_qty3,@icost_per_qty4,@icost_per_qty5, @idelete_session_id;
    else
     fetch deleted_c into @drsrc_rate_id,@drsrc_id,@dstart_date,@dshift_period_id,@dmax_qty_per_hr,@dcost_per_qty,@dcost_per_qty2,@dcost_per_qty3,@dcost_per_qty4,@dcost_per_qty5, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RSRCRCAT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RSRCRCAT' AND xtype = 'TR')
    DROP trigger PRMAUD_RSRCRCAT

PRMAUD_RSRCRCAT
create trigger PRMAUD_RSRCRCAT
on RSRCRCAT
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irsrc_id varchar(255),@irsrc_catg_type_id varchar(255),@irsrc_catg_id varchar(255)

  declare @drsrc_id varchar(255),@drsrc_catg_type_id varchar(255),@drsrc_catg_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rsrc_id) and
			not update(rsrc_catg_type_id) and
			not update(rsrc_catg_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RSRCRCAT', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCRCAT',rsrc_id,rsrc_catg_type_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCRCAT', rsrc_id,rsrc_catg_type_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rsrc_id,rsrc_catg_type_id,rsrc_catg_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rsrc_id,rsrc_catg_type_id,rsrc_catg_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irsrc_id,@irsrc_catg_type_id,@irsrc_catg_id, @idelete_session_id
  else
    fetch deleted_c into @drsrc_id,@drsrc_catg_type_id,@drsrc_catg_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drsrc_id;
				
set @pk2 = @drsrc_catg_type_id;
				

    end else begin
    	set @pk1 = @irsrc_id;
				
set @pk2 = @irsrc_catg_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drsrc_id,@drsrc_catg_type_id,@drsrc_catg_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'RSRCRCAT','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_catg_type_id)  exec audit_data 'RSRCRCAT','rsrc_catg_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_catg_type_id,@irsrc_catg_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_catg_id)  exec audit_data 'RSRCRCAT','rsrc_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_catg_id,@irsrc_catg_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RSRCRCAT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RSRCRCAT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irsrc_id,@irsrc_catg_type_id,@irsrc_catg_id, @idelete_session_id;
    else
     fetch deleted_c into @drsrc_id,@drsrc_catg_type_id,@drsrc_catg_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RSRCROLE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RSRCROLE' AND xtype = 'TR')
    DROP trigger PRMAUD_RSRCROLE

PRMAUD_RSRCROLE
create trigger PRMAUD_RSRCROLE
on RSRCROLE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irsrc_id varchar(255),@irole_id varchar(255),@iskill_level varchar(255)

  declare @drsrc_id varchar(255),@drole_id varchar(255),@dskill_level varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rsrc_id) and
			not update(role_id) and
			not update(skill_level) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RSRCROLE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCROLE',rsrc_id,role_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCROLE', rsrc_id,role_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rsrc_id,role_id,skill_level
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rsrc_id,role_id,skill_level
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irsrc_id,@irole_id,@iskill_level, @idelete_session_id
  else
    fetch deleted_c into @drsrc_id,@drole_id,@dskill_level, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drsrc_id;
				
set @pk2 = @drole_id;
				

    end else begin
    	set @pk1 = @irsrc_id;
				
set @pk2 = @irole_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drsrc_id,@drole_id,@dskill_level, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'RSRCROLE','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(role_id)  exec audit_data 'RSRCROLE','role_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_id,@irole_id,@audit_data OUTPUT
      if (@loper='D') or  update(skill_level)  exec audit_data 'RSRCROLE','skill_level',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dskill_level,@iskill_level,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RSRCROLE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RSRCROLE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irsrc_id,@irole_id,@iskill_level, @idelete_session_id;
    else
     fetch deleted_c into @drsrc_id,@drole_id,@dskill_level, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RSRCSEC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RSRCSEC' AND xtype = 'TR')
    DROP trigger PRMAUD_RSRCSEC

PRMAUD_RSRCSEC
create trigger PRMAUD_RSRCSEC
on RSRCSEC
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iuser_id varchar(255),@irsrc_id varchar(255)

  declare @duser_id varchar(255),@drsrc_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(user_id) and
			not update(rsrc_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RSRCSEC', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCSEC',user_id,rsrc_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRCSEC', user_id,rsrc_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select user_id,rsrc_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select user_id,rsrc_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iuser_id,@irsrc_id, @idelete_session_id
  else
    fetch deleted_c into @duser_id,@drsrc_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @duser_id;
				
set @pk2 = @drsrc_id;
				

    end else begin
    	set @pk1 = @iuser_id;
				
set @pk2 = @irsrc_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @duser_id,@drsrc_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(user_id)  exec audit_data 'RSRCSEC','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'RSRCSEC','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RSRCSEC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RSRCSEC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iuser_id,@irsrc_id, @idelete_session_id;
    else
     fetch deleted_c into @duser_id,@drsrc_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_RSRFOLIO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_RSRFOLIO' AND xtype = 'TR')
    DROP trigger PRMAUD_RSRFOLIO

PRMAUD_RSRFOLIO
create trigger PRMAUD_RSRFOLIO
on RSRFOLIO
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @irfolio_id varchar(255),@irsrc_id varchar(255)

  declare @drfolio_id varchar(255),@drsrc_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(rfolio_id) and
			not update(rsrc_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'RSRFOLIO', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRFOLIO',rfolio_id,rsrc_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'RSRFOLIO', rfolio_id,rsrc_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select rfolio_id,rsrc_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select rfolio_id,rsrc_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @irfolio_id,@irsrc_id, @idelete_session_id
  else
    fetch deleted_c into @drfolio_id,@drsrc_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @drfolio_id;
				
set @pk2 = @drsrc_id;
				

    end else begin
    	set @pk1 = @irfolio_id;
				
set @pk2 = @irsrc_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @drfolio_id,@drsrc_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(rfolio_id)  exec audit_data 'RSRFOLIO','rfolio_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drfolio_id,@irfolio_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'RSRFOLIO','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'RSRFOLIO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'RSRFOLIO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @irfolio_id,@irsrc_id, @idelete_session_id;
    else
     fetch deleted_c into @drfolio_id,@drsrc_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_SCENARIO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_SCENARIO' AND xtype = 'TR')
    DROP trigger PRMAUD_SCENARIO

PRMAUD_SCENARIO
create trigger PRMAUD_SCENARIO
on SCENARIO
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iscenario_id varchar(255),@iscenario_name varchar(255),@iuser_id varchar(255),@itable_name varchar(255),@ifk_id varchar(255),@iscenario_type varchar(255),@iview_pref_id varchar(255),@iview_type varchar(255)

  declare @dscenario_id varchar(255),@dscenario_name varchar(255),@duser_id varchar(255),@dtable_name varchar(255),@dfk_id varchar(255),@dscenario_type varchar(255),@dview_pref_id varchar(255),@dview_type varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(scenario_id) and
			not update(scenario_name) and
			not update(user_id) and
			not update(table_name) and
			not update(fk_id) and
			not update(scenario_type) and
			not update(view_pref_id) and
			not update(view_type) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'SCENARIO', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'SCENARIO',scenario_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'SCENARIO', scenario_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select scenario_id,scenario_name,user_id,table_name,fk_id,scenario_type,view_pref_id,view_type
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select scenario_id,scenario_name,user_id,table_name,fk_id,scenario_type,view_pref_id,view_type
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iscenario_id,@iscenario_name,@iuser_id,@itable_name,@ifk_id,@iscenario_type,@iview_pref_id,@iview_type, @idelete_session_id
  else
    fetch deleted_c into @dscenario_id,@dscenario_name,@duser_id,@dtable_name,@dfk_id,@dscenario_type,@dview_pref_id,@dview_type, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dscenario_id;
				

    end else begin
    	set @pk1 = @iscenario_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dscenario_id,@dscenario_name,@duser_id,@dtable_name,@dfk_id,@dscenario_type,@dview_pref_id,@dview_type, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(scenario_id)  exec audit_data 'SCENARIO','scenario_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dscenario_id,@iscenario_id,@audit_data OUTPUT
      if (@loper='D') or  update(scenario_name)  exec audit_data 'SCENARIO','scenario_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dscenario_name,@iscenario_name,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'SCENARIO','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(table_name)  exec audit_data 'SCENARIO','table_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtable_name,@itable_name,@audit_data OUTPUT
      if (@loper='D') or  update(fk_id)  exec audit_data 'SCENARIO','fk_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfk_id,@ifk_id,@audit_data OUTPUT
      if (@loper='D') or  update(scenario_type)  exec audit_data 'SCENARIO','scenario_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dscenario_type,@iscenario_type,@audit_data OUTPUT
      if (@loper='D') or  update(view_pref_id)  exec audit_data 'SCENARIO','view_pref_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dview_pref_id,@iview_pref_id,@audit_data OUTPUT
      if (@loper='D') or  update(view_type)  exec audit_data 'SCENARIO','view_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dview_type,@iview_type,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'SCENARIO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'SCENARIO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iscenario_id,@iscenario_name,@iuser_id,@itable_name,@ifk_id,@iscenario_type,@iview_pref_id,@iview_type, @idelete_session_id;
    else
     fetch deleted_c into @dscenario_id,@dscenario_name,@duser_id,@dtable_name,@dfk_id,@dscenario_type,@dview_pref_id,@dview_type, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_SCENPROJ
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_SCENPROJ' AND xtype = 'TR')
    DROP trigger PRMAUD_SCENPROJ

PRMAUD_SCENPROJ
create trigger PRMAUD_SCENPROJ
on SCENPROJ
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iscenario_id varchar(255),@iproj_id varchar(255),@iselected_flag varchar(255)

  declare @dscenario_id varchar(255),@dproj_id varchar(255),@dselected_flag varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(scenario_id) and
			not update(proj_id) and
			not update(selected_flag) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'SCENPROJ', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'SCENPROJ',scenario_id,proj_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'SCENPROJ', scenario_id,proj_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select scenario_id,proj_id,selected_flag
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select scenario_id,proj_id,selected_flag
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iscenario_id,@iproj_id,@iselected_flag, @idelete_session_id
  else
    fetch deleted_c into @dscenario_id,@dproj_id,@dselected_flag, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dscenario_id;
				
set @pk2 = @dproj_id;
				

    end else begin
    	set @pk1 = @iscenario_id;
				
set @pk2 = @iproj_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dscenario_id,@dproj_id,@dselected_flag, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(scenario_id)  exec audit_data 'SCENPROJ','scenario_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dscenario_id,@iscenario_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'SCENPROJ','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(selected_flag)  exec audit_data 'SCENPROJ','selected_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dselected_flag,@iselected_flag,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'SCENPROJ', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'SCENPROJ', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iscenario_id,@iproj_id,@iselected_flag, @idelete_session_id;
    else
     fetch deleted_c into @dscenario_id,@dproj_id,@dselected_flag, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_SCENUSER
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_SCENUSER' AND xtype = 'TR')
    DROP trigger PRMAUD_SCENUSER

PRMAUD_SCENUSER
create trigger PRMAUD_SCENUSER
on SCENUSER
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iscenario_id varchar(255),@iuser_id varchar(255)

  declare @dscenario_id varchar(255),@duser_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(scenario_id) and
			not update(user_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'SCENUSER', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'SCENUSER',scenario_id,user_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'SCENUSER', scenario_id,user_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select scenario_id,user_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select scenario_id,user_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iscenario_id,@iuser_id, @idelete_session_id
  else
    fetch deleted_c into @dscenario_id,@duser_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dscenario_id;
				
set @pk2 = @duser_id;
				

    end else begin
    	set @pk1 = @iscenario_id;
				
set @pk2 = @iuser_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dscenario_id,@duser_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(scenario_id)  exec audit_data 'SCENUSER','scenario_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dscenario_id,@iscenario_id,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'SCENUSER','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'SCENUSER', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'SCENUSER', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iscenario_id,@iuser_id, @idelete_session_id;
    else
     fetch deleted_c into @dscenario_id,@duser_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_SCENROLE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_SCENROLE' AND xtype = 'TR')
    DROP trigger PRMAUD_SCENROLE

PRMAUD_SCENROLE
create trigger PRMAUD_SCENROLE
on SCENROLE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iscenario_id varchar(255),@irole_id varchar(255),@iselected_flag varchar(255)

  declare @dscenario_id varchar(255),@drole_id varchar(255),@dselected_flag varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(scenario_id) and
			not update(role_id) and
			not update(selected_flag) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'SCENROLE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'SCENROLE',scenario_id,role_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'SCENROLE', scenario_id,role_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select scenario_id,role_id,selected_flag
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select scenario_id,role_id,selected_flag
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iscenario_id,@irole_id,@iselected_flag, @idelete_session_id
  else
    fetch deleted_c into @dscenario_id,@drole_id,@dselected_flag, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dscenario_id;
				
set @pk2 = @drole_id;
				

    end else begin
    	set @pk1 = @iscenario_id;
				
set @pk2 = @irole_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dscenario_id,@drole_id,@dselected_flag, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(scenario_id)  exec audit_data 'SCENROLE','scenario_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dscenario_id,@iscenario_id,@audit_data OUTPUT
      if (@loper='D') or  update(role_id)  exec audit_data 'SCENROLE','role_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_id,@irole_id,@audit_data OUTPUT
      if (@loper='D') or  update(selected_flag)  exec audit_data 'SCENROLE','selected_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dselected_flag,@iselected_flag,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'SCENROLE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'SCENROLE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iscenario_id,@irole_id,@iselected_flag, @idelete_session_id;
    else
     fetch deleted_c into @dscenario_id,@drole_id,@dselected_flag, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_SHIFT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_SHIFT' AND xtype = 'TR')
    DROP trigger PRMAUD_SHIFT

PRMAUD_SHIFT
create trigger PRMAUD_SHIFT
on SHIFT
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ishift_id varchar(255),@ishift_name varchar(255)

  declare @dshift_id varchar(255),@dshift_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(shift_id) and
			not update(shift_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'SHIFT', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'SHIFT',shift_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'SHIFT', shift_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select shift_id,shift_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select shift_id,shift_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ishift_id,@ishift_name, @idelete_session_id
  else
    fetch deleted_c into @dshift_id,@dshift_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dshift_id;
				

    end else begin
    	set @pk1 = @ishift_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dshift_id,@dshift_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(shift_id)  exec audit_data 'SHIFT','shift_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dshift_id,@ishift_id,@audit_data OUTPUT
      if (@loper='D') or  update(shift_name)  exec audit_data 'SHIFT','shift_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dshift_name,@ishift_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'SHIFT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'SHIFT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ishift_id,@ishift_name, @idelete_session_id;
    else
     fetch deleted_c into @dshift_id,@dshift_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_SHIFTPER
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_SHIFTPER' AND xtype = 'TR')
    DROP trigger PRMAUD_SHIFTPER

PRMAUD_SHIFTPER
create trigger PRMAUD_SHIFTPER
on SHIFTPER
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ishift_period_id varchar(255),@ishift_id varchar(255),@ishift_start_hr_num varchar(255)

  declare @dshift_period_id varchar(255),@dshift_id varchar(255),@dshift_start_hr_num varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(shift_period_id) and
			not update(shift_id) and
			not update(shift_start_hr_num) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'SHIFTPER', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'SHIFTPER',shift_period_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'SHIFTPER', shift_period_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select shift_period_id,shift_id,shift_start_hr_num
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select shift_period_id,shift_id,shift_start_hr_num
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ishift_period_id,@ishift_id,@ishift_start_hr_num, @idelete_session_id
  else
    fetch deleted_c into @dshift_period_id,@dshift_id,@dshift_start_hr_num, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dshift_period_id;
				

    end else begin
    	set @pk1 = @ishift_period_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dshift_period_id,@dshift_id,@dshift_start_hr_num, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(shift_period_id)  exec audit_data 'SHIFTPER','shift_period_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dshift_period_id,@ishift_period_id,@audit_data OUTPUT
      if (@loper='D') or  update(shift_id)  exec audit_data 'SHIFTPER','shift_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dshift_id,@ishift_id,@audit_data OUTPUT
      if (@loper='D') or  update(shift_start_hr_num)  exec audit_data 'SHIFTPER','shift_start_hr_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dshift_start_hr_num,@ishift_start_hr_num,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'SHIFTPER', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'SHIFTPER', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ishift_period_id,@ishift_id,@ishift_start_hr_num, @idelete_session_id;
    else
     fetch deleted_c into @dshift_period_id,@dshift_id,@dshift_start_hr_num, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASK
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASK' AND xtype = 'TR')
    DROP trigger PRMAUD_TASK

PRMAUD_TASK
create trigger PRMAUD_TASK
on TASK
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itask_id varchar(255),@iproj_id varchar(255),@iwbs_id varchar(255),@iclndr_id varchar(255),@iest_wt varchar(255),@iphys_complete_pct varchar(255),@irev_fdbk_flag varchar(255),@ilock_plan_flag varchar(255),@iauto_compute_act_flag varchar(255),@icomplete_pct_type varchar(255),@itask_type varchar(255),@iduration_type varchar(255),@ireview_type varchar(255),@istatus_code varchar(255),@itask_code varchar(255),@itask_name varchar(255),@irsrc_id varchar(255),@itotal_float_hr_cnt varchar(255),@ifree_float_hr_cnt varchar(255),@iremain_drtn_hr_cnt varchar(255),@iact_work_qty varchar(255),@iremain_work_qty varchar(255),@itarget_work_qty varchar(255),@itarget_drtn_hr_cnt varchar(255),@itarget_equip_qty varchar(255),@iact_equip_qty varchar(255),@iremain_equip_qty varchar(255),@icstr_date varchar(255),@iact_start_date varchar(255),@iact_end_date varchar(255),@ilate_start_date varchar(255),@ilate_end_date varchar(255),@iexpect_end_date varchar(255),@iearly_start_date varchar(255),@iearly_end_date varchar(255),@irestart_date varchar(255),@ireend_date varchar(255),@itarget_start_date varchar(255),@itarget_end_date varchar(255),@ireview_end_date varchar(255),@irem_late_start_date varchar(255),@irem_late_end_date varchar(255),@icstr_type varchar(255),@ipriority_type varchar(255),@iguid varchar(255),@itmpl_guid varchar(255),@icstr_date2 varchar(255),@icstr_type2 varchar(255),@ifloat_path varchar(255),@ifloat_path_order varchar(255),@iact_this_per_work_qty varchar(255),@iact_this_per_equip_qty varchar(255),@idriving_path_flag varchar(255),@isuspend_date varchar(255),@iresume_date varchar(255),@iexternal_early_start_date varchar(255),@iexternal_late_end_date varchar(255)

  declare @dtask_id varchar(255),@dproj_id varchar(255),@dwbs_id varchar(255),@dclndr_id varchar(255),@dest_wt varchar(255),@dphys_complete_pct varchar(255),@drev_fdbk_flag varchar(255),@dlock_plan_flag varchar(255),@dauto_compute_act_flag varchar(255),@dcomplete_pct_type varchar(255),@dtask_type varchar(255),@dduration_type varchar(255),@dreview_type varchar(255),@dstatus_code varchar(255),@dtask_code varchar(255),@dtask_name varchar(255),@drsrc_id varchar(255),@dtotal_float_hr_cnt varchar(255),@dfree_float_hr_cnt varchar(255),@dremain_drtn_hr_cnt varchar(255),@dact_work_qty varchar(255),@dremain_work_qty varchar(255),@dtarget_work_qty varchar(255),@dtarget_drtn_hr_cnt varchar(255),@dtarget_equip_qty varchar(255),@dact_equip_qty varchar(255),@dremain_equip_qty varchar(255),@dcstr_date varchar(255),@dact_start_date varchar(255),@dact_end_date varchar(255),@dlate_start_date varchar(255),@dlate_end_date varchar(255),@dexpect_end_date varchar(255),@dearly_start_date varchar(255),@dearly_end_date varchar(255),@drestart_date varchar(255),@dreend_date varchar(255),@dtarget_start_date varchar(255),@dtarget_end_date varchar(255),@dreview_end_date varchar(255),@drem_late_start_date varchar(255),@drem_late_end_date varchar(255),@dcstr_type varchar(255),@dpriority_type varchar(255),@dguid varchar(255),@dtmpl_guid varchar(255),@dcstr_date2 varchar(255),@dcstr_type2 varchar(255),@dfloat_path varchar(255),@dfloat_path_order varchar(255),@dact_this_per_work_qty varchar(255),@dact_this_per_equip_qty varchar(255),@ddriving_path_flag varchar(255),@dsuspend_date varchar(255),@dresume_date varchar(255),@dexternal_early_start_date varchar(255),@dexternal_late_end_date varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(task_id) and
			not update(proj_id) and
			not update(wbs_id) and
			not update(clndr_id) and
			not update(est_wt) and
			not update(phys_complete_pct) and
			not update(rev_fdbk_flag) and
			not update(lock_plan_flag) and
			not update(auto_compute_act_flag) and
			not update(complete_pct_type) and
			not update(task_type) and
			not update(duration_type) and
			not update(review_type) and
			not update(status_code) and
			not update(task_code) and
			not update(task_name) and
			not update(rsrc_id) and
			not update(total_float_hr_cnt) and
			not update(free_float_hr_cnt) and
			not update(remain_drtn_hr_cnt) and
			not update(act_work_qty) and
			not update(remain_work_qty) and
			not update(target_work_qty) and
			not update(target_drtn_hr_cnt) and
			not update(target_equip_qty) and
			not update(act_equip_qty) and
			not update(remain_equip_qty) and
			not update(cstr_date) and
			not update(act_start_date) and
			not update(act_end_date) and
			not update(late_start_date) and
			not update(late_end_date) and
			not update(expect_end_date) and
			not update(early_start_date) and
			not update(early_end_date) and
			not update(restart_date) and
			not update(reend_date) and
			not update(target_start_date) and
			not update(target_end_date) and
			not update(review_end_date) and
			not update(rem_late_start_date) and
			not update(rem_late_end_date) and
			not update(cstr_type) and
			not update(priority_type) and
			not update(guid) and
			not update(tmpl_guid) and
			not update(cstr_date2) and
			not update(cstr_type2) and
			not update(float_path) and
			not update(float_path_order) and
			not update(act_this_per_work_qty) and
			not update(act_this_per_equip_qty) and
			not update(driving_path_flag) and
			not update(suspend_date) and
			not update(resume_date) and
			not update(external_early_start_date) and
			not update(external_late_end_date) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASK', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASK',task_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASK', task_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select task_id,proj_id,wbs_id,clndr_id,est_wt,phys_complete_pct,rev_fdbk_flag,lock_plan_flag,auto_compute_act_flag,complete_pct_type,task_type,duration_type,review_type,status_code,task_code,task_name,rsrc_id,total_float_hr_cnt,free_float_hr_cnt,remain_drtn_hr_cnt,act_work_qty,remain_work_qty,target_work_qty,target_drtn_hr_cnt,target_equip_qty,act_equip_qty,remain_equip_qty,cstr_date,act_start_date,act_end_date,late_start_date,late_end_date,expect_end_date,early_start_date,early_end_date,restart_date,reend_date,target_start_date,target_end_date,review_end_date,rem_late_start_date,rem_late_end_date,cstr_type,priority_type,guid,tmpl_guid,cstr_date2,cstr_type2,float_path,float_path_order,act_this_per_work_qty,act_this_per_equip_qty,driving_path_flag,suspend_date,resume_date,external_early_start_date,external_late_end_date
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select task_id,proj_id,wbs_id,clndr_id,est_wt,phys_complete_pct,rev_fdbk_flag,lock_plan_flag,auto_compute_act_flag,complete_pct_type,task_type,duration_type,review_type,status_code,task_code,task_name,rsrc_id,total_float_hr_cnt,free_float_hr_cnt,remain_drtn_hr_cnt,act_work_qty,remain_work_qty,target_work_qty,target_drtn_hr_cnt,target_equip_qty,act_equip_qty,remain_equip_qty,cstr_date,act_start_date,act_end_date,late_start_date,late_end_date,expect_end_date,early_start_date,early_end_date,restart_date,reend_date,target_start_date,target_end_date,review_end_date,rem_late_start_date,rem_late_end_date,cstr_type,priority_type,guid,tmpl_guid,cstr_date2,cstr_type2,float_path,float_path_order,act_this_per_work_qty,act_this_per_equip_qty,driving_path_flag,suspend_date,resume_date,external_early_start_date,external_late_end_date
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itask_id,@iproj_id,@iwbs_id,@iclndr_id,@iest_wt,@iphys_complete_pct,@irev_fdbk_flag,@ilock_plan_flag,@iauto_compute_act_flag,@icomplete_pct_type,@itask_type,@iduration_type,@ireview_type,@istatus_code,@itask_code,@itask_name,@irsrc_id,@itotal_float_hr_cnt,@ifree_float_hr_cnt,@iremain_drtn_hr_cnt,@iact_work_qty,@iremain_work_qty,@itarget_work_qty,@itarget_drtn_hr_cnt,@itarget_equip_qty,@iact_equip_qty,@iremain_equip_qty,@icstr_date,@iact_start_date,@iact_end_date,@ilate_start_date,@ilate_end_date,@iexpect_end_date,@iearly_start_date,@iearly_end_date,@irestart_date,@ireend_date,@itarget_start_date,@itarget_end_date,@ireview_end_date,@irem_late_start_date,@irem_late_end_date,@icstr_type,@ipriority_type,@iguid,@itmpl_guid,@icstr_date2,@icstr_type2,@ifloat_path,@ifloat_path_order,@iact_this_per_work_qty,@iact_this_per_equip_qty,@idriving_path_flag,@isuspend_date,@iresume_date,@iexternal_early_start_date,@iexternal_late_end_date, @idelete_session_id
  else
    fetch deleted_c into @dtask_id,@dproj_id,@dwbs_id,@dclndr_id,@dest_wt,@dphys_complete_pct,@drev_fdbk_flag,@dlock_plan_flag,@dauto_compute_act_flag,@dcomplete_pct_type,@dtask_type,@dduration_type,@dreview_type,@dstatus_code,@dtask_code,@dtask_name,@drsrc_id,@dtotal_float_hr_cnt,@dfree_float_hr_cnt,@dremain_drtn_hr_cnt,@dact_work_qty,@dremain_work_qty,@dtarget_work_qty,@dtarget_drtn_hr_cnt,@dtarget_equip_qty,@dact_equip_qty,@dremain_equip_qty,@dcstr_date,@dact_start_date,@dact_end_date,@dlate_start_date,@dlate_end_date,@dexpect_end_date,@dearly_start_date,@dearly_end_date,@drestart_date,@dreend_date,@dtarget_start_date,@dtarget_end_date,@dreview_end_date,@drem_late_start_date,@drem_late_end_date,@dcstr_type,@dpriority_type,@dguid,@dtmpl_guid,@dcstr_date2,@dcstr_type2,@dfloat_path,@dfloat_path_order,@dact_this_per_work_qty,@dact_this_per_equip_qty,@ddriving_path_flag,@dsuspend_date,@dresume_date,@dexternal_early_start_date,@dexternal_late_end_date, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtask_id;
				

    end else begin
    	set @pk1 = @itask_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtask_id,@dproj_id,@dwbs_id,@dclndr_id,@dest_wt,@dphys_complete_pct,@drev_fdbk_flag,@dlock_plan_flag,@dauto_compute_act_flag,@dcomplete_pct_type,@dtask_type,@dduration_type,@dreview_type,@dstatus_code,@dtask_code,@dtask_name,@drsrc_id,@dtotal_float_hr_cnt,@dfree_float_hr_cnt,@dremain_drtn_hr_cnt,@dact_work_qty,@dremain_work_qty,@dtarget_work_qty,@dtarget_drtn_hr_cnt,@dtarget_equip_qty,@dact_equip_qty,@dremain_equip_qty,@dcstr_date,@dact_start_date,@dact_end_date,@dlate_start_date,@dlate_end_date,@dexpect_end_date,@dearly_start_date,@dearly_end_date,@drestart_date,@dreend_date,@dtarget_start_date,@dtarget_end_date,@dreview_end_date,@drem_late_start_date,@drem_late_end_date,@dcstr_type,@dpriority_type,@dguid,@dtmpl_guid,@dcstr_date2,@dcstr_type2,@dfloat_path,@dfloat_path_order,@dact_this_per_work_qty,@dact_this_per_equip_qty,@ddriving_path_flag,@dsuspend_date,@dresume_date,@dexternal_early_start_date,@dexternal_late_end_date, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(task_id)  exec audit_data 'TASK','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'TASK','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_id)  exec audit_data 'TASK','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(clndr_id)  exec audit_data 'TASK','clndr_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dclndr_id,@iclndr_id,@audit_data OUTPUT
      if (@loper='D') or  update(est_wt)  exec audit_data 'TASK','est_wt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dest_wt,@iest_wt,@audit_data OUTPUT
      if (@loper='D') or  update(phys_complete_pct)  exec audit_data 'TASK','phys_complete_pct',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dphys_complete_pct,@iphys_complete_pct,@audit_data OUTPUT
      if (@loper='D') or  update(rev_fdbk_flag)  exec audit_data 'TASK','rev_fdbk_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drev_fdbk_flag,@irev_fdbk_flag,@audit_data OUTPUT
      if (@loper='D') or  update(lock_plan_flag)  exec audit_data 'TASK','lock_plan_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlock_plan_flag,@ilock_plan_flag,@audit_data OUTPUT
      if (@loper='D') or  update(auto_compute_act_flag)  exec audit_data 'TASK','auto_compute_act_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dauto_compute_act_flag,@iauto_compute_act_flag,@audit_data OUTPUT
      if (@loper='D') or  update(complete_pct_type)  exec audit_data 'TASK','complete_pct_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcomplete_pct_type,@icomplete_pct_type,@audit_data OUTPUT
      if (@loper='D') or  update(task_type)  exec audit_data 'TASK','task_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_type,@itask_type,@audit_data OUTPUT
      if (@loper='D') or  update(duration_type)  exec audit_data 'TASK','duration_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dduration_type,@iduration_type,@audit_data OUTPUT
      if (@loper='D') or  update(review_type)  exec audit_data 'TASK','review_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dreview_type,@ireview_type,@audit_data OUTPUT
      if (@loper='D') or  update(status_code)  exec audit_data 'TASK','status_code',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstatus_code,@istatus_code,@audit_data OUTPUT
      if (@loper='D') or  update(task_code)  exec audit_data 'TASK','task_code',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_code,@itask_code,@audit_data OUTPUT
      if (@loper='D') or  update(task_name)  exec audit_data 'TASK','task_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_name,@itask_name,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'TASK','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(total_float_hr_cnt)  exec audit_data 'TASK','total_float_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtotal_float_hr_cnt,@itotal_float_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(free_float_hr_cnt)  exec audit_data 'TASK','free_float_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfree_float_hr_cnt,@ifree_float_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(remain_drtn_hr_cnt)  exec audit_data 'TASK','remain_drtn_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_drtn_hr_cnt,@iremain_drtn_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(act_work_qty)  exec audit_data 'TASK','act_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_work_qty,@iact_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(remain_work_qty)  exec audit_data 'TASK','remain_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_work_qty,@iremain_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(target_work_qty)  exec audit_data 'TASK','target_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_work_qty,@itarget_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(target_drtn_hr_cnt)  exec audit_data 'TASK','target_drtn_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_drtn_hr_cnt,@itarget_drtn_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(target_equip_qty)  exec audit_data 'TASK','target_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_equip_qty,@itarget_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(act_equip_qty)  exec audit_data 'TASK','act_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_equip_qty,@iact_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(remain_equip_qty)  exec audit_data 'TASK','remain_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_equip_qty,@iremain_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(cstr_date)  exec audit_data 'TASK','cstr_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcstr_date,@icstr_date,@audit_data OUTPUT
      if (@loper='D') or  update(act_start_date)  exec audit_data 'TASK','act_start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_start_date,@iact_start_date,@audit_data OUTPUT
      if (@loper='D') or  update(act_end_date)  exec audit_data 'TASK','act_end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_end_date,@iact_end_date,@audit_data OUTPUT
      if (@loper='D') or  update(late_start_date)  exec audit_data 'TASK','late_start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlate_start_date,@ilate_start_date,@audit_data OUTPUT
      if (@loper='D') or  update(late_end_date)  exec audit_data 'TASK','late_end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlate_end_date,@ilate_end_date,@audit_data OUTPUT
      if (@loper='D') or  update(expect_end_date)  exec audit_data 'TASK','expect_end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dexpect_end_date,@iexpect_end_date,@audit_data OUTPUT
      if (@loper='D') or  update(early_start_date)  exec audit_data 'TASK','early_start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dearly_start_date,@iearly_start_date,@audit_data OUTPUT
      if (@loper='D') or  update(early_end_date)  exec audit_data 'TASK','early_end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dearly_end_date,@iearly_end_date,@audit_data OUTPUT
      if (@loper='D') or  update(restart_date)  exec audit_data 'TASK','restart_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drestart_date,@irestart_date,@audit_data OUTPUT
      if (@loper='D') or  update(reend_date)  exec audit_data 'TASK','reend_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dreend_date,@ireend_date,@audit_data OUTPUT
      if (@loper='D') or  update(target_start_date)  exec audit_data 'TASK','target_start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_start_date,@itarget_start_date,@audit_data OUTPUT
      if (@loper='D') or  update(target_end_date)  exec audit_data 'TASK','target_end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_end_date,@itarget_end_date,@audit_data OUTPUT
      if (@loper='D') or  update(review_end_date)  exec audit_data 'TASK','review_end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dreview_end_date,@ireview_end_date,@audit_data OUTPUT
      if (@loper='D') or  update(rem_late_start_date)  exec audit_data 'TASK','rem_late_start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drem_late_start_date,@irem_late_start_date,@audit_data OUTPUT
      if (@loper='D') or  update(rem_late_end_date)  exec audit_data 'TASK','rem_late_end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drem_late_end_date,@irem_late_end_date,@audit_data OUTPUT
      if (@loper='D') or  update(cstr_type)  exec audit_data 'TASK','cstr_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcstr_type,@icstr_type,@audit_data OUTPUT
      if (@loper='D') or  update(priority_type)  exec audit_data 'TASK','priority_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpriority_type,@ipriority_type,@audit_data OUTPUT
      if (@loper='D') or  update(guid)  exec audit_data 'TASK','guid',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dguid,@iguid,@audit_data OUTPUT
      if (@loper='D') or  update(tmpl_guid)  exec audit_data 'TASK','tmpl_guid',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtmpl_guid,@itmpl_guid,@audit_data OUTPUT
      if (@loper='D') or  update(cstr_date2)  exec audit_data 'TASK','cstr_date2',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcstr_date2,@icstr_date2,@audit_data OUTPUT
      if (@loper='D') or  update(cstr_type2)  exec audit_data 'TASK','cstr_type2',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcstr_type2,@icstr_type2,@audit_data OUTPUT
      if (@loper='D') or  update(float_path)  exec audit_data 'TASK','float_path',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfloat_path,@ifloat_path,@audit_data OUTPUT
      if (@loper='D') or  update(float_path_order)  exec audit_data 'TASK','float_path_order',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfloat_path_order,@ifloat_path_order,@audit_data OUTPUT
      if (@loper='D') or  update(act_this_per_work_qty)  exec audit_data 'TASK','act_this_per_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_this_per_work_qty,@iact_this_per_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(act_this_per_equip_qty)  exec audit_data 'TASK','act_this_per_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_this_per_equip_qty,@iact_this_per_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(driving_path_flag)  exec audit_data 'TASK','driving_path_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddriving_path_flag,@idriving_path_flag,@audit_data OUTPUT
      if (@loper='D') or  update(suspend_date)  exec audit_data 'TASK','suspend_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsuspend_date,@isuspend_date,@audit_data OUTPUT
      if (@loper='D') or  update(resume_date)  exec audit_data 'TASK','resume_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dresume_date,@iresume_date,@audit_data OUTPUT
      if (@loper='D') or  update(external_early_start_date)  exec audit_data 'TASK','external_early_start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dexternal_early_start_date,@iexternal_early_start_date,@audit_data OUTPUT
      if (@loper='D') or  update(external_late_end_date)  exec audit_data 'TASK','external_late_end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dexternal_late_end_date,@iexternal_late_end_date,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASK', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASK', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itask_id,@iproj_id,@iwbs_id,@iclndr_id,@iest_wt,@iphys_complete_pct,@irev_fdbk_flag,@ilock_plan_flag,@iauto_compute_act_flag,@icomplete_pct_type,@itask_type,@iduration_type,@ireview_type,@istatus_code,@itask_code,@itask_name,@irsrc_id,@itotal_float_hr_cnt,@ifree_float_hr_cnt,@iremain_drtn_hr_cnt,@iact_work_qty,@iremain_work_qty,@itarget_work_qty,@itarget_drtn_hr_cnt,@itarget_equip_qty,@iact_equip_qty,@iremain_equip_qty,@icstr_date,@iact_start_date,@iact_end_date,@ilate_start_date,@ilate_end_date,@iexpect_end_date,@iearly_start_date,@iearly_end_date,@irestart_date,@ireend_date,@itarget_start_date,@itarget_end_date,@ireview_end_date,@irem_late_start_date,@irem_late_end_date,@icstr_type,@ipriority_type,@iguid,@itmpl_guid,@icstr_date2,@icstr_type2,@ifloat_path,@ifloat_path_order,@iact_this_per_work_qty,@iact_this_per_equip_qty,@idriving_path_flag,@isuspend_date,@iresume_date,@iexternal_early_start_date,@iexternal_late_end_date, @idelete_session_id;
    else
     fetch deleted_c into @dtask_id,@dproj_id,@dwbs_id,@dclndr_id,@dest_wt,@dphys_complete_pct,@drev_fdbk_flag,@dlock_plan_flag,@dauto_compute_act_flag,@dcomplete_pct_type,@dtask_type,@dduration_type,@dreview_type,@dstatus_code,@dtask_code,@dtask_name,@drsrc_id,@dtotal_float_hr_cnt,@dfree_float_hr_cnt,@dremain_drtn_hr_cnt,@dact_work_qty,@dremain_work_qty,@dtarget_work_qty,@dtarget_drtn_hr_cnt,@dtarget_equip_qty,@dact_equip_qty,@dremain_equip_qty,@dcstr_date,@dact_start_date,@dact_end_date,@dlate_start_date,@dlate_end_date,@dexpect_end_date,@dearly_start_date,@dearly_end_date,@drestart_date,@dreend_date,@dtarget_start_date,@dtarget_end_date,@dreview_end_date,@drem_late_start_date,@drem_late_end_date,@dcstr_type,@dpriority_type,@dguid,@dtmpl_guid,@dcstr_date2,@dcstr_type2,@dfloat_path,@dfloat_path_order,@dact_this_per_work_qty,@dact_this_per_equip_qty,@ddriving_path_flag,@dsuspend_date,@dresume_date,@dexternal_early_start_date,@dexternal_late_end_date, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKACTV
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKACTV' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKACTV

PRMAUD_TASKACTV
create trigger PRMAUD_TASKACTV
on TASKACTV
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itask_id varchar(255),@iactv_code_type_id varchar(255),@iactv_code_id varchar(255),@iproj_id varchar(255)

  declare @dtask_id varchar(255),@dactv_code_type_id varchar(255),@dactv_code_id varchar(255),@dproj_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(task_id) and
			not update(actv_code_type_id) and
			not update(actv_code_id) and
			not update(proj_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKACTV', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKACTV',task_id,actv_code_type_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKACTV', task_id,actv_code_type_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select task_id,actv_code_type_id,actv_code_id,proj_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select task_id,actv_code_type_id,actv_code_id,proj_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itask_id,@iactv_code_type_id,@iactv_code_id,@iproj_id, @idelete_session_id
  else
    fetch deleted_c into @dtask_id,@dactv_code_type_id,@dactv_code_id,@dproj_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtask_id;
				
set @pk2 = @dactv_code_type_id;
				

    end else begin
    	set @pk1 = @itask_id;
				
set @pk2 = @iactv_code_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtask_id,@dactv_code_type_id,@dactv_code_id,@dproj_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(task_id)  exec audit_data 'TASKACTV','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(actv_code_type_id)  exec audit_data 'TASKACTV','actv_code_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactv_code_type_id,@iactv_code_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(actv_code_id)  exec audit_data 'TASKACTV','actv_code_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactv_code_id,@iactv_code_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'TASKACTV','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKACTV', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKACTV', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itask_id,@iactv_code_type_id,@iactv_code_id,@iproj_id, @idelete_session_id;
    else
     fetch deleted_c into @dtask_id,@dactv_code_type_id,@dactv_code_id,@dproj_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKDOC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKDOC' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKDOC

PRMAUD_TASKDOC
create trigger PRMAUD_TASKDOC
on TASKDOC
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itaskdoc_id varchar(255),@idoc_id varchar(255),@iproj_id varchar(255),@iwbs_id varchar(255),@iwp_flag varchar(255),@itask_id varchar(255)

  declare @dtaskdoc_id varchar(255),@ddoc_id varchar(255),@dproj_id varchar(255),@dwbs_id varchar(255),@dwp_flag varchar(255),@dtask_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(taskdoc_id) and
			not update(doc_id) and
			not update(proj_id) and
			not update(wbs_id) and
			not update(wp_flag) and
			not update(task_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKDOC', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKDOC',taskdoc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKDOC', taskdoc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select taskdoc_id,doc_id,proj_id,wbs_id,wp_flag,task_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select taskdoc_id,doc_id,proj_id,wbs_id,wp_flag,task_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itaskdoc_id,@idoc_id,@iproj_id,@iwbs_id,@iwp_flag,@itask_id, @idelete_session_id
  else
    fetch deleted_c into @dtaskdoc_id,@ddoc_id,@dproj_id,@dwbs_id,@dwp_flag,@dtask_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtaskdoc_id;
				

    end else begin
    	set @pk1 = @itaskdoc_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtaskdoc_id,@ddoc_id,@dproj_id,@dwbs_id,@dwp_flag,@dtask_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(taskdoc_id)  exec audit_data 'TASKDOC','taskdoc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtaskdoc_id,@itaskdoc_id,@audit_data OUTPUT
      if (@loper='D') or  update(doc_id)  exec audit_data 'TASKDOC','doc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddoc_id,@idoc_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'TASKDOC','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_id)  exec audit_data 'TASKDOC','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(wp_flag)  exec audit_data 'TASKDOC','wp_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwp_flag,@iwp_flag,@audit_data OUTPUT
      if (@loper='D') or  update(task_id)  exec audit_data 'TASKDOC','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKDOC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKDOC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itaskdoc_id,@idoc_id,@iproj_id,@iwbs_id,@iwp_flag,@itask_id, @idelete_session_id;
    else
     fetch deleted_c into @dtaskdoc_id,@ddoc_id,@dproj_id,@dwbs_id,@dwp_flag,@dtask_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKFDBK
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKFDBK' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKFDBK

PRMAUD_TASKFDBK
create trigger PRMAUD_TASKFDBK
on TASKFDBK
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itask_id varchar(255),@iproj_id varchar(255)

  declare @dtask_id varchar(255),@dproj_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(task_id) and
			not update(proj_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKFDBK', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKFDBK',task_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKFDBK', task_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select task_id,proj_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select task_id,proj_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itask_id,@iproj_id, @idelete_session_id
  else
    fetch deleted_c into @dtask_id,@dproj_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtask_id;
				

    end else begin
    	set @pk1 = @itask_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtask_id,@dproj_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(task_id)  exec audit_data 'TASKFDBK','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'TASKFDBK','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKFDBK', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKFDBK', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itask_id,@iproj_id, @idelete_session_id;
    else
     fetch deleted_c into @dtask_id,@dproj_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKFIN
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKFIN' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKFIN

PRMAUD_TASKFIN
create trigger PRMAUD_TASKFIN
on TASKFIN
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ifin_dates_id varchar(255),@itask_id varchar(255),@iproj_id varchar(255),@iact_work_qty varchar(255),@iact_work_cost varchar(255),@iact_equip_qty varchar(255),@iact_equip_cost varchar(255),@iact_mat_cost varchar(255),@iact_expense_cost varchar(255),@ibcwp varchar(255),@isched_work_qty varchar(255),@ibcws varchar(255),@iperfm_work_qty varchar(255)

  declare @dfin_dates_id varchar(255),@dtask_id varchar(255),@dproj_id varchar(255),@dact_work_qty varchar(255),@dact_work_cost varchar(255),@dact_equip_qty varchar(255),@dact_equip_cost varchar(255),@dact_mat_cost varchar(255),@dact_expense_cost varchar(255),@dbcwp varchar(255),@dsched_work_qty varchar(255),@dbcws varchar(255),@dperfm_work_qty varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(fin_dates_id) and
			not update(task_id) and
			not update(proj_id) and
			not update(act_work_qty) and
			not update(act_work_cost) and
			not update(act_equip_qty) and
			not update(act_equip_cost) and
			not update(act_mat_cost) and
			not update(act_expense_cost) and
			not update(bcwp) and
			not update(sched_work_qty) and
			not update(bcws) and
			not update(perfm_work_qty) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKFIN', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKFIN',fin_dates_id,task_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKFIN', fin_dates_id,task_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select fin_dates_id,task_id,proj_id,act_work_qty,act_work_cost,act_equip_qty,act_equip_cost,act_mat_cost,act_expense_cost,bcwp,sched_work_qty,bcws,perfm_work_qty
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select fin_dates_id,task_id,proj_id,act_work_qty,act_work_cost,act_equip_qty,act_equip_cost,act_mat_cost,act_expense_cost,bcwp,sched_work_qty,bcws,perfm_work_qty
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ifin_dates_id,@itask_id,@iproj_id,@iact_work_qty,@iact_work_cost,@iact_equip_qty,@iact_equip_cost,@iact_mat_cost,@iact_expense_cost,@ibcwp,@isched_work_qty,@ibcws,@iperfm_work_qty, @idelete_session_id
  else
    fetch deleted_c into @dfin_dates_id,@dtask_id,@dproj_id,@dact_work_qty,@dact_work_cost,@dact_equip_qty,@dact_equip_cost,@dact_mat_cost,@dact_expense_cost,@dbcwp,@dsched_work_qty,@dbcws,@dperfm_work_qty, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dfin_dates_id;
				
set @pk2 = @dtask_id;
				

    end else begin
    	set @pk1 = @ifin_dates_id;
				
set @pk2 = @itask_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dfin_dates_id,@dtask_id,@dproj_id,@dact_work_qty,@dact_work_cost,@dact_equip_qty,@dact_equip_cost,@dact_mat_cost,@dact_expense_cost,@dbcwp,@dsched_work_qty,@dbcws,@dperfm_work_qty, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(fin_dates_id)  exec audit_data 'TASKFIN','fin_dates_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfin_dates_id,@ifin_dates_id,@audit_data OUTPUT
      if (@loper='D') or  update(task_id)  exec audit_data 'TASKFIN','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'TASKFIN','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(act_work_qty)  exec audit_data 'TASKFIN','act_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_work_qty,@iact_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(act_work_cost)  exec audit_data 'TASKFIN','act_work_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_work_cost,@iact_work_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_equip_qty)  exec audit_data 'TASKFIN','act_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_equip_qty,@iact_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(act_equip_cost)  exec audit_data 'TASKFIN','act_equip_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_equip_cost,@iact_equip_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_mat_cost)  exec audit_data 'TASKFIN','act_mat_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_mat_cost,@iact_mat_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_expense_cost)  exec audit_data 'TASKFIN','act_expense_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_expense_cost,@iact_expense_cost,@audit_data OUTPUT
      if (@loper='D') or  update(bcwp)  exec audit_data 'TASKFIN','bcwp',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbcwp,@ibcwp,@audit_data OUTPUT
      if (@loper='D') or  update(sched_work_qty)  exec audit_data 'TASKFIN','sched_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsched_work_qty,@isched_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(bcws)  exec audit_data 'TASKFIN','bcws',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbcws,@ibcws,@audit_data OUTPUT
      if (@loper='D') or  update(perfm_work_qty)  exec audit_data 'TASKFIN','perfm_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dperfm_work_qty,@iperfm_work_qty,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKFIN', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKFIN', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ifin_dates_id,@itask_id,@iproj_id,@iact_work_qty,@iact_work_cost,@iact_equip_qty,@iact_equip_cost,@iact_mat_cost,@iact_expense_cost,@ibcwp,@isched_work_qty,@ibcws,@iperfm_work_qty, @idelete_session_id;
    else
     fetch deleted_c into @dfin_dates_id,@dtask_id,@dproj_id,@dact_work_qty,@dact_work_cost,@dact_equip_qty,@dact_equip_cost,@dact_mat_cost,@dact_expense_cost,@dbcwp,@dsched_work_qty,@dbcws,@dperfm_work_qty, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKMEMO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKMEMO' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKMEMO

PRMAUD_TASKMEMO
create trigger PRMAUD_TASKMEMO
on TASKMEMO
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @imemo_id varchar(255),@itask_id varchar(255),@imemo_type_id varchar(255),@iproj_id varchar(255)

  declare @dmemo_id varchar(255),@dtask_id varchar(255),@dmemo_type_id varchar(255),@dproj_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(memo_id) and
			not update(task_id) and
			not update(memo_type_id) and
			not update(proj_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKMEMO', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKMEMO',memo_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKMEMO', memo_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select memo_id,task_id,memo_type_id,proj_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select memo_id,task_id,memo_type_id,proj_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @imemo_id,@itask_id,@imemo_type_id,@iproj_id, @idelete_session_id
  else
    fetch deleted_c into @dmemo_id,@dtask_id,@dmemo_type_id,@dproj_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dmemo_id;
				

    end else begin
    	set @pk1 = @imemo_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dmemo_id,@dtask_id,@dmemo_type_id,@dproj_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(memo_id)  exec audit_data 'TASKMEMO','memo_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmemo_id,@imemo_id,@audit_data OUTPUT
      if (@loper='D') or  update(task_id)  exec audit_data 'TASKMEMO','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(memo_type_id)  exec audit_data 'TASKMEMO','memo_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmemo_type_id,@imemo_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'TASKMEMO','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKMEMO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKMEMO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @imemo_id,@itask_id,@imemo_type_id,@iproj_id, @idelete_session_id;
    else
     fetch deleted_c into @dmemo_id,@dtask_id,@dmemo_type_id,@dproj_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKNOTE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKNOTE' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKNOTE

PRMAUD_TASKNOTE
create trigger PRMAUD_TASKNOTE
on TASKNOTE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itask_id varchar(255),@iproj_id varchar(255)

  declare @dtask_id varchar(255),@dproj_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(task_id) and
			not update(proj_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKNOTE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKNOTE',task_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKNOTE', task_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select task_id,proj_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select task_id,proj_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itask_id,@iproj_id, @idelete_session_id
  else
    fetch deleted_c into @dtask_id,@dproj_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtask_id;
				

    end else begin
    	set @pk1 = @itask_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtask_id,@dproj_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(task_id)  exec audit_data 'TASKNOTE','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'TASKNOTE','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKNOTE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKNOTE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itask_id,@iproj_id, @idelete_session_id;
    else
     fetch deleted_c into @dtask_id,@dproj_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKPRED
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKPRED' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKPRED

PRMAUD_TASKPRED
create trigger PRMAUD_TASKPRED
on TASKPRED
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itask_pred_id varchar(255),@itask_id varchar(255),@ipred_task_id varchar(255),@iproj_id varchar(255),@ipred_proj_id varchar(255),@ipred_type varchar(255),@ilag_hr_cnt varchar(255)

  declare @dtask_pred_id varchar(255),@dtask_id varchar(255),@dpred_task_id varchar(255),@dproj_id varchar(255),@dpred_proj_id varchar(255),@dpred_type varchar(255),@dlag_hr_cnt varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(task_pred_id) and
			not update(task_id) and
			not update(pred_task_id) and
			not update(proj_id) and
			not update(pred_proj_id) and
			not update(pred_type) and
			not update(lag_hr_cnt) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKPRED', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKPRED',task_pred_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKPRED', task_pred_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select task_pred_id,task_id,pred_task_id,proj_id,pred_proj_id,pred_type,lag_hr_cnt
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select task_pred_id,task_id,pred_task_id,proj_id,pred_proj_id,pred_type,lag_hr_cnt
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itask_pred_id,@itask_id,@ipred_task_id,@iproj_id,@ipred_proj_id,@ipred_type,@ilag_hr_cnt, @idelete_session_id
  else
    fetch deleted_c into @dtask_pred_id,@dtask_id,@dpred_task_id,@dproj_id,@dpred_proj_id,@dpred_type,@dlag_hr_cnt, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtask_pred_id;
				

    end else begin
    	set @pk1 = @itask_pred_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtask_pred_id,@dtask_id,@dpred_task_id,@dproj_id,@dpred_proj_id,@dpred_type,@dlag_hr_cnt, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(task_pred_id)  exec audit_data 'TASKPRED','task_pred_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_pred_id,@itask_pred_id,@audit_data OUTPUT
      if (@loper='D') or  update(task_id)  exec audit_data 'TASKPRED','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(pred_task_id)  exec audit_data 'TASKPRED','pred_task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpred_task_id,@ipred_task_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'TASKPRED','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(pred_proj_id)  exec audit_data 'TASKPRED','pred_proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpred_proj_id,@ipred_proj_id,@audit_data OUTPUT
      if (@loper='D') or  update(pred_type)  exec audit_data 'TASKPRED','pred_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpred_type,@ipred_type,@audit_data OUTPUT
      if (@loper='D') or  update(lag_hr_cnt)  exec audit_data 'TASKPRED','lag_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlag_hr_cnt,@ilag_hr_cnt,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKPRED', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKPRED', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itask_pred_id,@itask_id,@ipred_task_id,@iproj_id,@ipred_proj_id,@ipred_type,@ilag_hr_cnt, @idelete_session_id;
    else
     fetch deleted_c into @dtask_pred_id,@dtask_id,@dpred_task_id,@dproj_id,@dpred_proj_id,@dpred_type,@dlag_hr_cnt, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKPROC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKPROC' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKPROC

PRMAUD_TASKPROC
create trigger PRMAUD_TASKPROC
on TASKPROC
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iproc_id varchar(255),@itask_id varchar(255),@iseq_num varchar(255),@iproj_id varchar(255),@icomplete_flag varchar(255),@iproc_name varchar(255),@iproc_wt varchar(255),@icomplete_pct varchar(255)

  declare @dproc_id varchar(255),@dtask_id varchar(255),@dseq_num varchar(255),@dproj_id varchar(255),@dcomplete_flag varchar(255),@dproc_name varchar(255),@dproc_wt varchar(255),@dcomplete_pct varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(proc_id) and
			not update(task_id) and
			not update(seq_num) and
			not update(proj_id) and
			not update(complete_flag) and
			not update(proc_name) and
			not update(proc_wt) and
			not update(complete_pct) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKPROC', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKPROC',proc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKPROC', proc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select proc_id,task_id,seq_num,proj_id,complete_flag,proc_name,proc_wt,complete_pct
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select proc_id,task_id,seq_num,proj_id,complete_flag,proc_name,proc_wt,complete_pct
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iproc_id,@itask_id,@iseq_num,@iproj_id,@icomplete_flag,@iproc_name,@iproc_wt,@icomplete_pct, @idelete_session_id
  else
    fetch deleted_c into @dproc_id,@dtask_id,@dseq_num,@dproj_id,@dcomplete_flag,@dproc_name,@dproc_wt,@dcomplete_pct, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dproc_id;
				

    end else begin
    	set @pk1 = @iproc_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dproc_id,@dtask_id,@dseq_num,@dproj_id,@dcomplete_flag,@dproc_name,@dproc_wt,@dcomplete_pct, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(proc_id)  exec audit_data 'TASKPROC','proc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproc_id,@iproc_id,@audit_data OUTPUT
      if (@loper='D') or  update(task_id)  exec audit_data 'TASKPROC','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'TASKPROC','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'TASKPROC','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(complete_flag)  exec audit_data 'TASKPROC','complete_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcomplete_flag,@icomplete_flag,@audit_data OUTPUT
      if (@loper='D') or  update(proc_name)  exec audit_data 'TASKPROC','proc_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproc_name,@iproc_name,@audit_data OUTPUT
      if (@loper='D') or  update(proc_wt)  exec audit_data 'TASKPROC','proc_wt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproc_wt,@iproc_wt,@audit_data OUTPUT
      if (@loper='D') or  update(complete_pct)  exec audit_data 'TASKPROC','complete_pct',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcomplete_pct,@icomplete_pct,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKPROC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKPROC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iproc_id,@itask_id,@iseq_num,@iproj_id,@icomplete_flag,@iproc_name,@iproc_wt,@icomplete_pct, @idelete_session_id;
    else
     fetch deleted_c into @dproc_id,@dtask_id,@dseq_num,@dproj_id,@dcomplete_flag,@dproc_name,@dproc_wt,@dcomplete_pct, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKRSRC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKRSRC' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKRSRC

PRMAUD_TASKRSRC
create trigger PRMAUD_TASKRSRC
on TASKRSRC
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itaskrsrc_id varchar(255),@itask_id varchar(255),@iproj_id varchar(255),@irsrc_type varchar(255),@icost_qty_link_flag varchar(255),@irole_id varchar(255),@iacct_id varchar(255),@irsrc_id varchar(255),@ipobs_id varchar(255),@iskill_level varchar(255),@ipend_complete_pct varchar(255),@iremain_qty varchar(255),@ipend_remain_qty varchar(255),@itarget_qty varchar(255),@iremain_qty_per_hr varchar(255),@ipend_act_reg_qty varchar(255),@itarget_lag_drtn_hr_cnt varchar(255),@itarget_qty_per_hr varchar(255),@iact_ot_qty varchar(255),@ipend_act_ot_qty varchar(255),@iact_reg_qty varchar(255),@irelag_drtn_hr_cnt varchar(255),@iot_factor varchar(255),@icost_per_qty varchar(255),@itarget_cost varchar(255),@iact_reg_cost varchar(255),@iact_ot_cost varchar(255),@iremain_cost varchar(255),@iact_start_date varchar(255),@iact_end_date varchar(255),@irestart_date varchar(255),@ireend_date varchar(255),@itarget_start_date varchar(255),@itarget_end_date varchar(255),@irem_late_start_date varchar(255),@irem_late_end_date varchar(255),@iguid varchar(255),@irate_type varchar(255),@iact_this_per_cost varchar(255),@iact_this_per_qty varchar(255),@icurv_id varchar(255),@irollup_dates_flag varchar(255),@icost_per_qty_source_type varchar(255),@iremain_crv varchar(4000),@itarget_crv varchar(4000),@iactual_crv varchar(4000),@its_pend_act_end_flag varchar(255),@iprior_ts_act_reg_qty varchar(255),@iprior_ts_act_ot_qty varchar(255)

  declare @dtaskrsrc_id varchar(255),@dtask_id varchar(255),@dproj_id varchar(255),@drsrc_type varchar(255),@dcost_qty_link_flag varchar(255),@drole_id varchar(255),@dacct_id varchar(255),@drsrc_id varchar(255),@dpobs_id varchar(255),@dskill_level varchar(255),@dpend_complete_pct varchar(255),@dremain_qty varchar(255),@dpend_remain_qty varchar(255),@dtarget_qty varchar(255),@dremain_qty_per_hr varchar(255),@dpend_act_reg_qty varchar(255),@dtarget_lag_drtn_hr_cnt varchar(255),@dtarget_qty_per_hr varchar(255),@dact_ot_qty varchar(255),@dpend_act_ot_qty varchar(255),@dact_reg_qty varchar(255),@drelag_drtn_hr_cnt varchar(255),@dot_factor varchar(255),@dcost_per_qty varchar(255),@dtarget_cost varchar(255),@dact_reg_cost varchar(255),@dact_ot_cost varchar(255),@dremain_cost varchar(255),@dact_start_date varchar(255),@dact_end_date varchar(255),@drestart_date varchar(255),@dreend_date varchar(255),@dtarget_start_date varchar(255),@dtarget_end_date varchar(255),@drem_late_start_date varchar(255),@drem_late_end_date varchar(255),@dguid varchar(255),@drate_type varchar(255),@dact_this_per_cost varchar(255),@dact_this_per_qty varchar(255),@dcurv_id varchar(255),@drollup_dates_flag varchar(255),@dcost_per_qty_source_type varchar(255),@dremain_crv varchar(4000),@dtarget_crv varchar(4000),@dactual_crv varchar(4000),@dts_pend_act_end_flag varchar(255),@dprior_ts_act_reg_qty varchar(255),@dprior_ts_act_ot_qty varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(taskrsrc_id) and
			not update(task_id) and
			not update(proj_id) and
			not update(rsrc_type) and
			not update(cost_qty_link_flag) and
			not update(role_id) and
			not update(acct_id) and
			not update(rsrc_id) and
			not update(pobs_id) and
			not update(skill_level) and
			not update(pend_complete_pct) and
			not update(remain_qty) and
			not update(pend_remain_qty) and
			not update(target_qty) and
			not update(remain_qty_per_hr) and
			not update(pend_act_reg_qty) and
			not update(target_lag_drtn_hr_cnt) and
			not update(target_qty_per_hr) and
			not update(act_ot_qty) and
			not update(pend_act_ot_qty) and
			not update(act_reg_qty) and
			not update(relag_drtn_hr_cnt) and
			not update(ot_factor) and
			not update(cost_per_qty) and
			not update(target_cost) and
			not update(act_reg_cost) and
			not update(act_ot_cost) and
			not update(remain_cost) and
			not update(act_start_date) and
			not update(act_end_date) and
			not update(restart_date) and
			not update(reend_date) and
			not update(target_start_date) and
			not update(target_end_date) and
			not update(rem_late_start_date) and
			not update(rem_late_end_date) and
			not update(guid) and
			not update(rate_type) and
			not update(act_this_per_cost) and
			not update(act_this_per_qty) and
			not update(curv_id) and
			not update(rollup_dates_flag) and
			not update(cost_per_qty_source_type) and
			not update(remain_crv) and
			not update(target_crv) and
			not update(actual_crv) and
			not update(ts_pend_act_end_flag) and
			not update(prior_ts_act_reg_qty) and
			not update(prior_ts_act_ot_qty) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKRSRC', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKRSRC',taskrsrc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKRSRC', taskrsrc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select taskrsrc_id,task_id,proj_id,rsrc_type,cost_qty_link_flag,role_id,acct_id,rsrc_id,pobs_id,skill_level,pend_complete_pct,remain_qty,pend_remain_qty,target_qty,remain_qty_per_hr,pend_act_reg_qty,target_lag_drtn_hr_cnt,target_qty_per_hr,act_ot_qty,pend_act_ot_qty,act_reg_qty,relag_drtn_hr_cnt,ot_factor,cost_per_qty,target_cost,act_reg_cost,act_ot_cost,remain_cost,act_start_date,act_end_date,restart_date,reend_date,target_start_date,target_end_date,rem_late_start_date,rem_late_end_date,guid,rate_type,act_this_per_cost,act_this_per_qty,curv_id,rollup_dates_flag,cost_per_qty_source_type,remain_crv,target_crv,actual_crv,ts_pend_act_end_flag,prior_ts_act_reg_qty,prior_ts_act_ot_qty
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select taskrsrc_id,task_id,proj_id,rsrc_type,cost_qty_link_flag,role_id,acct_id,rsrc_id,pobs_id,skill_level,pend_complete_pct,remain_qty,pend_remain_qty,target_qty,remain_qty_per_hr,pend_act_reg_qty,target_lag_drtn_hr_cnt,target_qty_per_hr,act_ot_qty,pend_act_ot_qty,act_reg_qty,relag_drtn_hr_cnt,ot_factor,cost_per_qty,target_cost,act_reg_cost,act_ot_cost,remain_cost,act_start_date,act_end_date,restart_date,reend_date,target_start_date,target_end_date,rem_late_start_date,rem_late_end_date,guid,rate_type,act_this_per_cost,act_this_per_qty,curv_id,rollup_dates_flag,cost_per_qty_source_type,remain_crv,target_crv,actual_crv,ts_pend_act_end_flag,prior_ts_act_reg_qty,prior_ts_act_ot_qty
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itaskrsrc_id,@itask_id,@iproj_id,@irsrc_type,@icost_qty_link_flag,@irole_id,@iacct_id,@irsrc_id,@ipobs_id,@iskill_level,@ipend_complete_pct,@iremain_qty,@ipend_remain_qty,@itarget_qty,@iremain_qty_per_hr,@ipend_act_reg_qty,@itarget_lag_drtn_hr_cnt,@itarget_qty_per_hr,@iact_ot_qty,@ipend_act_ot_qty,@iact_reg_qty,@irelag_drtn_hr_cnt,@iot_factor,@icost_per_qty,@itarget_cost,@iact_reg_cost,@iact_ot_cost,@iremain_cost,@iact_start_date,@iact_end_date,@irestart_date,@ireend_date,@itarget_start_date,@itarget_end_date,@irem_late_start_date,@irem_late_end_date,@iguid,@irate_type,@iact_this_per_cost,@iact_this_per_qty,@icurv_id,@irollup_dates_flag,@icost_per_qty_source_type,@iremain_crv,@itarget_crv,@iactual_crv,@its_pend_act_end_flag,@iprior_ts_act_reg_qty,@iprior_ts_act_ot_qty, @idelete_session_id
  else
    fetch deleted_c into @dtaskrsrc_id,@dtask_id,@dproj_id,@drsrc_type,@dcost_qty_link_flag,@drole_id,@dacct_id,@drsrc_id,@dpobs_id,@dskill_level,@dpend_complete_pct,@dremain_qty,@dpend_remain_qty,@dtarget_qty,@dremain_qty_per_hr,@dpend_act_reg_qty,@dtarget_lag_drtn_hr_cnt,@dtarget_qty_per_hr,@dact_ot_qty,@dpend_act_ot_qty,@dact_reg_qty,@drelag_drtn_hr_cnt,@dot_factor,@dcost_per_qty,@dtarget_cost,@dact_reg_cost,@dact_ot_cost,@dremain_cost,@dact_start_date,@dact_end_date,@drestart_date,@dreend_date,@dtarget_start_date,@dtarget_end_date,@drem_late_start_date,@drem_late_end_date,@dguid,@drate_type,@dact_this_per_cost,@dact_this_per_qty,@dcurv_id,@drollup_dates_flag,@dcost_per_qty_source_type,@dremain_crv,@dtarget_crv,@dactual_crv,@dts_pend_act_end_flag,@dprior_ts_act_reg_qty,@dprior_ts_act_ot_qty, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtaskrsrc_id;
				

    end else begin
    	set @pk1 = @itaskrsrc_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtaskrsrc_id,@dtask_id,@dproj_id,@drsrc_type,@dcost_qty_link_flag,@drole_id,@dacct_id,@drsrc_id,@dpobs_id,@dskill_level,@dpend_complete_pct,@dremain_qty,@dpend_remain_qty,@dtarget_qty,@dremain_qty_per_hr,@dpend_act_reg_qty,@dtarget_lag_drtn_hr_cnt,@dtarget_qty_per_hr,@dact_ot_qty,@dpend_act_ot_qty,@dact_reg_qty,@drelag_drtn_hr_cnt,@dot_factor,@dcost_per_qty,@dtarget_cost,@dact_reg_cost,@dact_ot_cost,@dremain_cost,@dact_start_date,@dact_end_date,@drestart_date,@dreend_date,@dtarget_start_date,@dtarget_end_date,@drem_late_start_date,@drem_late_end_date,@dguid,@drate_type,@dact_this_per_cost,@dact_this_per_qty,@dcurv_id,@drollup_dates_flag,@dcost_per_qty_source_type,@dremain_crv,@dtarget_crv,@dactual_crv,@dts_pend_act_end_flag,@dprior_ts_act_reg_qty,@dprior_ts_act_ot_qty, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(taskrsrc_id)  exec audit_data 'TASKRSRC','taskrsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtaskrsrc_id,@itaskrsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(task_id)  exec audit_data 'TASKRSRC','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'TASKRSRC','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_type)  exec audit_data 'TASKRSRC','rsrc_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_type,@irsrc_type,@audit_data OUTPUT
      if (@loper='D') or  update(cost_qty_link_flag)  exec audit_data 'TASKRSRC','cost_qty_link_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_qty_link_flag,@icost_qty_link_flag,@audit_data OUTPUT
      if (@loper='D') or  update(role_id)  exec audit_data 'TASKRSRC','role_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_id,@irole_id,@audit_data OUTPUT
      if (@loper='D') or  update(acct_id)  exec audit_data 'TASKRSRC','acct_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dacct_id,@iacct_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'TASKRSRC','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(pobs_id)  exec audit_data 'TASKRSRC','pobs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpobs_id,@ipobs_id,@audit_data OUTPUT
      if (@loper='D') or  update(skill_level)  exec audit_data 'TASKRSRC','skill_level',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dskill_level,@iskill_level,@audit_data OUTPUT
      if (@loper='D') or  update(pend_complete_pct)  exec audit_data 'TASKRSRC','pend_complete_pct',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpend_complete_pct,@ipend_complete_pct,@audit_data OUTPUT
      if (@loper='D') or  update(remain_qty)  exec audit_data 'TASKRSRC','remain_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_qty,@iremain_qty,@audit_data OUTPUT
      if (@loper='D') or  update(pend_remain_qty)  exec audit_data 'TASKRSRC','pend_remain_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpend_remain_qty,@ipend_remain_qty,@audit_data OUTPUT
      if (@loper='D') or  update(target_qty)  exec audit_data 'TASKRSRC','target_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_qty,@itarget_qty,@audit_data OUTPUT
      if (@loper='D') or  update(remain_qty_per_hr)  exec audit_data 'TASKRSRC','remain_qty_per_hr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_qty_per_hr,@iremain_qty_per_hr,@audit_data OUTPUT
      if (@loper='D') or  update(pend_act_reg_qty)  exec audit_data 'TASKRSRC','pend_act_reg_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpend_act_reg_qty,@ipend_act_reg_qty,@audit_data OUTPUT
      if (@loper='D') or  update(target_lag_drtn_hr_cnt)  exec audit_data 'TASKRSRC','target_lag_drtn_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_lag_drtn_hr_cnt,@itarget_lag_drtn_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(target_qty_per_hr)  exec audit_data 'TASKRSRC','target_qty_per_hr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_qty_per_hr,@itarget_qty_per_hr,@audit_data OUTPUT
      if (@loper='D') or  update(act_ot_qty)  exec audit_data 'TASKRSRC','act_ot_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_ot_qty,@iact_ot_qty,@audit_data OUTPUT
      if (@loper='D') or  update(pend_act_ot_qty)  exec audit_data 'TASKRSRC','pend_act_ot_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpend_act_ot_qty,@ipend_act_ot_qty,@audit_data OUTPUT
      if (@loper='D') or  update(act_reg_qty)  exec audit_data 'TASKRSRC','act_reg_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_reg_qty,@iact_reg_qty,@audit_data OUTPUT
      if (@loper='D') or  update(relag_drtn_hr_cnt)  exec audit_data 'TASKRSRC','relag_drtn_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drelag_drtn_hr_cnt,@irelag_drtn_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(ot_factor)  exec audit_data 'TASKRSRC','ot_factor',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dot_factor,@iot_factor,@audit_data OUTPUT
      if (@loper='D') or  update(cost_per_qty)  exec audit_data 'TASKRSRC','cost_per_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_per_qty,@icost_per_qty,@audit_data OUTPUT
      if (@loper='D') or  update(target_cost)  exec audit_data 'TASKRSRC','target_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_cost,@itarget_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_reg_cost)  exec audit_data 'TASKRSRC','act_reg_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_reg_cost,@iact_reg_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_ot_cost)  exec audit_data 'TASKRSRC','act_ot_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_ot_cost,@iact_ot_cost,@audit_data OUTPUT
      if (@loper='D') or  update(remain_cost)  exec audit_data 'TASKRSRC','remain_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_cost,@iremain_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_start_date)  exec audit_data 'TASKRSRC','act_start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_start_date,@iact_start_date,@audit_data OUTPUT
      if (@loper='D') or  update(act_end_date)  exec audit_data 'TASKRSRC','act_end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_end_date,@iact_end_date,@audit_data OUTPUT
      if (@loper='D') or  update(restart_date)  exec audit_data 'TASKRSRC','restart_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drestart_date,@irestart_date,@audit_data OUTPUT
      if (@loper='D') or  update(reend_date)  exec audit_data 'TASKRSRC','reend_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dreend_date,@ireend_date,@audit_data OUTPUT
      if (@loper='D') or  update(target_start_date)  exec audit_data 'TASKRSRC','target_start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_start_date,@itarget_start_date,@audit_data OUTPUT
      if (@loper='D') or  update(target_end_date)  exec audit_data 'TASKRSRC','target_end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_end_date,@itarget_end_date,@audit_data OUTPUT
      if (@loper='D') or  update(rem_late_start_date)  exec audit_data 'TASKRSRC','rem_late_start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drem_late_start_date,@irem_late_start_date,@audit_data OUTPUT
      if (@loper='D') or  update(rem_late_end_date)  exec audit_data 'TASKRSRC','rem_late_end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drem_late_end_date,@irem_late_end_date,@audit_data OUTPUT
      if (@loper='D') or  update(guid)  exec audit_data 'TASKRSRC','guid',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dguid,@iguid,@audit_data OUTPUT
      if (@loper='D') or  update(rate_type)  exec audit_data 'TASKRSRC','rate_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drate_type,@irate_type,@audit_data OUTPUT
      if (@loper='D') or  update(act_this_per_cost)  exec audit_data 'TASKRSRC','act_this_per_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_this_per_cost,@iact_this_per_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_this_per_qty)  exec audit_data 'TASKRSRC','act_this_per_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_this_per_qty,@iact_this_per_qty,@audit_data OUTPUT
      if (@loper='D') or  update(curv_id)  exec audit_data 'TASKRSRC','curv_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcurv_id,@icurv_id,@audit_data OUTPUT
      if (@loper='D') or  update(rollup_dates_flag)  exec audit_data 'TASKRSRC','rollup_dates_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drollup_dates_flag,@irollup_dates_flag,@audit_data OUTPUT
      if (@loper='D') or  update(cost_per_qty_source_type)  exec audit_data 'TASKRSRC','cost_per_qty_source_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcost_per_qty_source_type,@icost_per_qty_source_type,@audit_data OUTPUT
      if (@loper='D') or  update(remain_crv)  exec audit_data 'TASKRSRC','remain_crv',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_crv,@iremain_crv,@audit_data OUTPUT
      if (@loper='D') or  update(target_crv)  exec audit_data 'TASKRSRC','target_crv',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_crv,@itarget_crv,@audit_data OUTPUT
      if (@loper='D') or  update(actual_crv)  exec audit_data 'TASKRSRC','actual_crv',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactual_crv,@iactual_crv,@audit_data OUTPUT
      if (@loper='D') or  update(ts_pend_act_end_flag)  exec audit_data 'TASKRSRC','ts_pend_act_end_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dts_pend_act_end_flag,@its_pend_act_end_flag,@audit_data OUTPUT
      if (@loper='D') or  update(prior_ts_act_reg_qty)  exec audit_data 'TASKRSRC','prior_ts_act_reg_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprior_ts_act_reg_qty,@iprior_ts_act_reg_qty,@audit_data OUTPUT
      if (@loper='D') or  update(prior_ts_act_ot_qty)  exec audit_data 'TASKRSRC','prior_ts_act_ot_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprior_ts_act_ot_qty,@iprior_ts_act_ot_qty,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKRSRC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKRSRC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itaskrsrc_id,@itask_id,@iproj_id,@irsrc_type,@icost_qty_link_flag,@irole_id,@iacct_id,@irsrc_id,@ipobs_id,@iskill_level,@ipend_complete_pct,@iremain_qty,@ipend_remain_qty,@itarget_qty,@iremain_qty_per_hr,@ipend_act_reg_qty,@itarget_lag_drtn_hr_cnt,@itarget_qty_per_hr,@iact_ot_qty,@ipend_act_ot_qty,@iact_reg_qty,@irelag_drtn_hr_cnt,@iot_factor,@icost_per_qty,@itarget_cost,@iact_reg_cost,@iact_ot_cost,@iremain_cost,@iact_start_date,@iact_end_date,@irestart_date,@ireend_date,@itarget_start_date,@itarget_end_date,@irem_late_start_date,@irem_late_end_date,@iguid,@irate_type,@iact_this_per_cost,@iact_this_per_qty,@icurv_id,@irollup_dates_flag,@icost_per_qty_source_type,@iremain_crv,@itarget_crv,@iactual_crv,@its_pend_act_end_flag,@iprior_ts_act_reg_qty,@iprior_ts_act_ot_qty, @idelete_session_id;
    else
     fetch deleted_c into @dtaskrsrc_id,@dtask_id,@dproj_id,@drsrc_type,@dcost_qty_link_flag,@drole_id,@dacct_id,@drsrc_id,@dpobs_id,@dskill_level,@dpend_complete_pct,@dremain_qty,@dpend_remain_qty,@dtarget_qty,@dremain_qty_per_hr,@dpend_act_reg_qty,@dtarget_lag_drtn_hr_cnt,@dtarget_qty_per_hr,@dact_ot_qty,@dpend_act_ot_qty,@dact_reg_qty,@drelag_drtn_hr_cnt,@dot_factor,@dcost_per_qty,@dtarget_cost,@dact_reg_cost,@dact_ot_cost,@dremain_cost,@dact_start_date,@dact_end_date,@drestart_date,@dreend_date,@dtarget_start_date,@dtarget_end_date,@drem_late_start_date,@drem_late_end_date,@dguid,@drate_type,@dact_this_per_cost,@dact_this_per_qty,@dcurv_id,@drollup_dates_flag,@dcost_per_qty_source_type,@dremain_crv,@dtarget_crv,@dactual_crv,@dts_pend_act_end_flag,@dprior_ts_act_reg_qty,@dprior_ts_act_ot_qty, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKSUM
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKSUM' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKSUM

PRMAUD_TASKSUM
create trigger PRMAUD_TASKSUM
on TASKSUM
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itask_sum_id varchar(255),@iwbs_id varchar(255),@iproj_id varchar(255),@icomplete_cnt varchar(255),@iactive_cnt varchar(255),@inotstarted_cnt varchar(255),@ibase_complete_cnt varchar(255),@ibase_active_cnt varchar(255),@ibase_notstarted_cnt varchar(255),@iact_drtn_hr_cnt varchar(255),@iact_equip_qty varchar(255),@iact_work_qty varchar(255),@itotal_drtn_hr_cnt varchar(255),@ibase_drtn_hr_cnt varchar(255),@ibase_work_qty varchar(255),@ibase_equip_qty varchar(255),@ietc_work_qty varchar(255),@iremain_drtn_hr_cnt varchar(255),@iremain_work_qty varchar(255),@iremain_equip_qty varchar(255),@itotal_float_hr_cnt varchar(255),@iact_expense_cost varchar(255),@iact_work_cost varchar(255),@iact_equip_cost varchar(255),@ibase_expense_cost varchar(255),@ibase_work_cost varchar(255),@ibase_equip_cost varchar(255),@ibcwp varchar(255),@ietc varchar(255),@ibcws varchar(255),@iremain_expense_cost varchar(255),@iremain_work_cost varchar(255),@iremain_equip_cost varchar(255),@iperfm_work_qty varchar(255),@isched_work_qty varchar(255),@iact_end_date varchar(255),@iact_start_date varchar(255),@ibase_end_date varchar(255),@ibase_start_date varchar(255),@ireend_date varchar(255),@irestart_date varchar(255),@iact_this_per_work_cost varchar(255),@iact_this_per_work_qty varchar(255),@iact_this_per_equip_cost varchar(255),@iact_this_per_equip_qty varchar(255),@ibase_mat_cost varchar(255),@iremain_mat_cost varchar(255),@iact_mat_cost varchar(255),@iact_this_per_mat_cost varchar(255)

  declare @dtask_sum_id varchar(255),@dwbs_id varchar(255),@dproj_id varchar(255),@dcomplete_cnt varchar(255),@dactive_cnt varchar(255),@dnotstarted_cnt varchar(255),@dbase_complete_cnt varchar(255),@dbase_active_cnt varchar(255),@dbase_notstarted_cnt varchar(255),@dact_drtn_hr_cnt varchar(255),@dact_equip_qty varchar(255),@dact_work_qty varchar(255),@dtotal_drtn_hr_cnt varchar(255),@dbase_drtn_hr_cnt varchar(255),@dbase_work_qty varchar(255),@dbase_equip_qty varchar(255),@detc_work_qty varchar(255),@dremain_drtn_hr_cnt varchar(255),@dremain_work_qty varchar(255),@dremain_equip_qty varchar(255),@dtotal_float_hr_cnt varchar(255),@dact_expense_cost varchar(255),@dact_work_cost varchar(255),@dact_equip_cost varchar(255),@dbase_expense_cost varchar(255),@dbase_work_cost varchar(255),@dbase_equip_cost varchar(255),@dbcwp varchar(255),@detc varchar(255),@dbcws varchar(255),@dremain_expense_cost varchar(255),@dremain_work_cost varchar(255),@dremain_equip_cost varchar(255),@dperfm_work_qty varchar(255),@dsched_work_qty varchar(255),@dact_end_date varchar(255),@dact_start_date varchar(255),@dbase_end_date varchar(255),@dbase_start_date varchar(255),@dreend_date varchar(255),@drestart_date varchar(255),@dact_this_per_work_cost varchar(255),@dact_this_per_work_qty varchar(255),@dact_this_per_equip_cost varchar(255),@dact_this_per_equip_qty varchar(255),@dbase_mat_cost varchar(255),@dremain_mat_cost varchar(255),@dact_mat_cost varchar(255),@dact_this_per_mat_cost varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(task_sum_id) and
			not update(wbs_id) and
			not update(proj_id) and
			not update(complete_cnt) and
			not update(active_cnt) and
			not update(notstarted_cnt) and
			not update(base_complete_cnt) and
			not update(base_active_cnt) and
			not update(base_notstarted_cnt) and
			not update(act_drtn_hr_cnt) and
			not update(act_equip_qty) and
			not update(act_work_qty) and
			not update(total_drtn_hr_cnt) and
			not update(base_drtn_hr_cnt) and
			not update(base_work_qty) and
			not update(base_equip_qty) and
			not update(etc_work_qty) and
			not update(remain_drtn_hr_cnt) and
			not update(remain_work_qty) and
			not update(remain_equip_qty) and
			not update(total_float_hr_cnt) and
			not update(act_expense_cost) and
			not update(act_work_cost) and
			not update(act_equip_cost) and
			not update(base_expense_cost) and
			not update(base_work_cost) and
			not update(base_equip_cost) and
			not update(bcwp) and
			not update(etc) and
			not update(bcws) and
			not update(remain_expense_cost) and
			not update(remain_work_cost) and
			not update(remain_equip_cost) and
			not update(perfm_work_qty) and
			not update(sched_work_qty) and
			not update(act_end_date) and
			not update(act_start_date) and
			not update(base_end_date) and
			not update(base_start_date) and
			not update(reend_date) and
			not update(restart_date) and
			not update(act_this_per_work_cost) and
			not update(act_this_per_work_qty) and
			not update(act_this_per_equip_cost) and
			not update(act_this_per_equip_qty) and
			not update(base_mat_cost) and
			not update(remain_mat_cost) and
			not update(act_mat_cost) and
			not update(act_this_per_mat_cost) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKSUM', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKSUM',task_sum_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKSUM', task_sum_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select task_sum_id,wbs_id,proj_id,complete_cnt,active_cnt,notstarted_cnt,base_complete_cnt,base_active_cnt,base_notstarted_cnt,act_drtn_hr_cnt,act_equip_qty,act_work_qty,total_drtn_hr_cnt,base_drtn_hr_cnt,base_work_qty,base_equip_qty,etc_work_qty,remain_drtn_hr_cnt,remain_work_qty,remain_equip_qty,total_float_hr_cnt,act_expense_cost,act_work_cost,act_equip_cost,base_expense_cost,base_work_cost,base_equip_cost,bcwp,etc,bcws,remain_expense_cost,remain_work_cost,remain_equip_cost,perfm_work_qty,sched_work_qty,act_end_date,act_start_date,base_end_date,base_start_date,reend_date,restart_date,act_this_per_work_cost,act_this_per_work_qty,act_this_per_equip_cost,act_this_per_equip_qty,base_mat_cost,remain_mat_cost,act_mat_cost,act_this_per_mat_cost
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select task_sum_id,wbs_id,proj_id,complete_cnt,active_cnt,notstarted_cnt,base_complete_cnt,base_active_cnt,base_notstarted_cnt,act_drtn_hr_cnt,act_equip_qty,act_work_qty,total_drtn_hr_cnt,base_drtn_hr_cnt,base_work_qty,base_equip_qty,etc_work_qty,remain_drtn_hr_cnt,remain_work_qty,remain_equip_qty,total_float_hr_cnt,act_expense_cost,act_work_cost,act_equip_cost,base_expense_cost,base_work_cost,base_equip_cost,bcwp,etc,bcws,remain_expense_cost,remain_work_cost,remain_equip_cost,perfm_work_qty,sched_work_qty,act_end_date,act_start_date,base_end_date,base_start_date,reend_date,restart_date,act_this_per_work_cost,act_this_per_work_qty,act_this_per_equip_cost,act_this_per_equip_qty,base_mat_cost,remain_mat_cost,act_mat_cost,act_this_per_mat_cost
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itask_sum_id,@iwbs_id,@iproj_id,@icomplete_cnt,@iactive_cnt,@inotstarted_cnt,@ibase_complete_cnt,@ibase_active_cnt,@ibase_notstarted_cnt,@iact_drtn_hr_cnt,@iact_equip_qty,@iact_work_qty,@itotal_drtn_hr_cnt,@ibase_drtn_hr_cnt,@ibase_work_qty,@ibase_equip_qty,@ietc_work_qty,@iremain_drtn_hr_cnt,@iremain_work_qty,@iremain_equip_qty,@itotal_float_hr_cnt,@iact_expense_cost,@iact_work_cost,@iact_equip_cost,@ibase_expense_cost,@ibase_work_cost,@ibase_equip_cost,@ibcwp,@ietc,@ibcws,@iremain_expense_cost,@iremain_work_cost,@iremain_equip_cost,@iperfm_work_qty,@isched_work_qty,@iact_end_date,@iact_start_date,@ibase_end_date,@ibase_start_date,@ireend_date,@irestart_date,@iact_this_per_work_cost,@iact_this_per_work_qty,@iact_this_per_equip_cost,@iact_this_per_equip_qty,@ibase_mat_cost,@iremain_mat_cost,@iact_mat_cost,@iact_this_per_mat_cost, @idelete_session_id
  else
    fetch deleted_c into @dtask_sum_id,@dwbs_id,@dproj_id,@dcomplete_cnt,@dactive_cnt,@dnotstarted_cnt,@dbase_complete_cnt,@dbase_active_cnt,@dbase_notstarted_cnt,@dact_drtn_hr_cnt,@dact_equip_qty,@dact_work_qty,@dtotal_drtn_hr_cnt,@dbase_drtn_hr_cnt,@dbase_work_qty,@dbase_equip_qty,@detc_work_qty,@dremain_drtn_hr_cnt,@dremain_work_qty,@dremain_equip_qty,@dtotal_float_hr_cnt,@dact_expense_cost,@dact_work_cost,@dact_equip_cost,@dbase_expense_cost,@dbase_work_cost,@dbase_equip_cost,@dbcwp,@detc,@dbcws,@dremain_expense_cost,@dremain_work_cost,@dremain_equip_cost,@dperfm_work_qty,@dsched_work_qty,@dact_end_date,@dact_start_date,@dbase_end_date,@dbase_start_date,@dreend_date,@drestart_date,@dact_this_per_work_cost,@dact_this_per_work_qty,@dact_this_per_equip_cost,@dact_this_per_equip_qty,@dbase_mat_cost,@dremain_mat_cost,@dact_mat_cost,@dact_this_per_mat_cost, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtask_sum_id;
				

    end else begin
    	set @pk1 = @itask_sum_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtask_sum_id,@dwbs_id,@dproj_id,@dcomplete_cnt,@dactive_cnt,@dnotstarted_cnt,@dbase_complete_cnt,@dbase_active_cnt,@dbase_notstarted_cnt,@dact_drtn_hr_cnt,@dact_equip_qty,@dact_work_qty,@dtotal_drtn_hr_cnt,@dbase_drtn_hr_cnt,@dbase_work_qty,@dbase_equip_qty,@detc_work_qty,@dremain_drtn_hr_cnt,@dremain_work_qty,@dremain_equip_qty,@dtotal_float_hr_cnt,@dact_expense_cost,@dact_work_cost,@dact_equip_cost,@dbase_expense_cost,@dbase_work_cost,@dbase_equip_cost,@dbcwp,@detc,@dbcws,@dremain_expense_cost,@dremain_work_cost,@dremain_equip_cost,@dperfm_work_qty,@dsched_work_qty,@dact_end_date,@dact_start_date,@dbase_end_date,@dbase_start_date,@dreend_date,@drestart_date,@dact_this_per_work_cost,@dact_this_per_work_qty,@dact_this_per_equip_cost,@dact_this_per_equip_qty,@dbase_mat_cost,@dremain_mat_cost,@dact_mat_cost,@dact_this_per_mat_cost, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(task_sum_id)  exec audit_data 'TASKSUM','task_sum_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_sum_id,@itask_sum_id,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_id)  exec audit_data 'TASKSUM','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'TASKSUM','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(complete_cnt)  exec audit_data 'TASKSUM','complete_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcomplete_cnt,@icomplete_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(active_cnt)  exec audit_data 'TASKSUM','active_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactive_cnt,@iactive_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(notstarted_cnt)  exec audit_data 'TASKSUM','notstarted_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dnotstarted_cnt,@inotstarted_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(base_complete_cnt)  exec audit_data 'TASKSUM','base_complete_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_complete_cnt,@ibase_complete_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(base_active_cnt)  exec audit_data 'TASKSUM','base_active_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_active_cnt,@ibase_active_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(base_notstarted_cnt)  exec audit_data 'TASKSUM','base_notstarted_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_notstarted_cnt,@ibase_notstarted_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(act_drtn_hr_cnt)  exec audit_data 'TASKSUM','act_drtn_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_drtn_hr_cnt,@iact_drtn_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(act_equip_qty)  exec audit_data 'TASKSUM','act_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_equip_qty,@iact_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(act_work_qty)  exec audit_data 'TASKSUM','act_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_work_qty,@iact_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(total_drtn_hr_cnt)  exec audit_data 'TASKSUM','total_drtn_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtotal_drtn_hr_cnt,@itotal_drtn_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(base_drtn_hr_cnt)  exec audit_data 'TASKSUM','base_drtn_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_drtn_hr_cnt,@ibase_drtn_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(base_work_qty)  exec audit_data 'TASKSUM','base_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_work_qty,@ibase_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(base_equip_qty)  exec audit_data 'TASKSUM','base_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_equip_qty,@ibase_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(etc_work_qty)  exec audit_data 'TASKSUM','etc_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@detc_work_qty,@ietc_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(remain_drtn_hr_cnt)  exec audit_data 'TASKSUM','remain_drtn_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_drtn_hr_cnt,@iremain_drtn_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(remain_work_qty)  exec audit_data 'TASKSUM','remain_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_work_qty,@iremain_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(remain_equip_qty)  exec audit_data 'TASKSUM','remain_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_equip_qty,@iremain_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(total_float_hr_cnt)  exec audit_data 'TASKSUM','total_float_hr_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtotal_float_hr_cnt,@itotal_float_hr_cnt,@audit_data OUTPUT
      if (@loper='D') or  update(act_expense_cost)  exec audit_data 'TASKSUM','act_expense_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_expense_cost,@iact_expense_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_work_cost)  exec audit_data 'TASKSUM','act_work_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_work_cost,@iact_work_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_equip_cost)  exec audit_data 'TASKSUM','act_equip_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_equip_cost,@iact_equip_cost,@audit_data OUTPUT
      if (@loper='D') or  update(base_expense_cost)  exec audit_data 'TASKSUM','base_expense_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_expense_cost,@ibase_expense_cost,@audit_data OUTPUT
      if (@loper='D') or  update(base_work_cost)  exec audit_data 'TASKSUM','base_work_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_work_cost,@ibase_work_cost,@audit_data OUTPUT
      if (@loper='D') or  update(base_equip_cost)  exec audit_data 'TASKSUM','base_equip_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_equip_cost,@ibase_equip_cost,@audit_data OUTPUT
      if (@loper='D') or  update(bcwp)  exec audit_data 'TASKSUM','bcwp',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbcwp,@ibcwp,@audit_data OUTPUT
      if (@loper='D') or  update(etc)  exec audit_data 'TASKSUM','etc',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@detc,@ietc,@audit_data OUTPUT
      if (@loper='D') or  update(bcws)  exec audit_data 'TASKSUM','bcws',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbcws,@ibcws,@audit_data OUTPUT
      if (@loper='D') or  update(remain_expense_cost)  exec audit_data 'TASKSUM','remain_expense_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_expense_cost,@iremain_expense_cost,@audit_data OUTPUT
      if (@loper='D') or  update(remain_work_cost)  exec audit_data 'TASKSUM','remain_work_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_work_cost,@iremain_work_cost,@audit_data OUTPUT
      if (@loper='D') or  update(remain_equip_cost)  exec audit_data 'TASKSUM','remain_equip_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_equip_cost,@iremain_equip_cost,@audit_data OUTPUT
      if (@loper='D') or  update(perfm_work_qty)  exec audit_data 'TASKSUM','perfm_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dperfm_work_qty,@iperfm_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(sched_work_qty)  exec audit_data 'TASKSUM','sched_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsched_work_qty,@isched_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(act_end_date)  exec audit_data 'TASKSUM','act_end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_end_date,@iact_end_date,@audit_data OUTPUT
      if (@loper='D') or  update(act_start_date)  exec audit_data 'TASKSUM','act_start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_start_date,@iact_start_date,@audit_data OUTPUT
      if (@loper='D') or  update(base_end_date)  exec audit_data 'TASKSUM','base_end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_end_date,@ibase_end_date,@audit_data OUTPUT
      if (@loper='D') or  update(base_start_date)  exec audit_data 'TASKSUM','base_start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_start_date,@ibase_start_date,@audit_data OUTPUT
      if (@loper='D') or  update(reend_date)  exec audit_data 'TASKSUM','reend_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dreend_date,@ireend_date,@audit_data OUTPUT
      if (@loper='D') or  update(restart_date)  exec audit_data 'TASKSUM','restart_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drestart_date,@irestart_date,@audit_data OUTPUT
      if (@loper='D') or  update(act_this_per_work_cost)  exec audit_data 'TASKSUM','act_this_per_work_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_this_per_work_cost,@iact_this_per_work_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_this_per_work_qty)  exec audit_data 'TASKSUM','act_this_per_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_this_per_work_qty,@iact_this_per_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(act_this_per_equip_cost)  exec audit_data 'TASKSUM','act_this_per_equip_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_this_per_equip_cost,@iact_this_per_equip_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_this_per_equip_qty)  exec audit_data 'TASKSUM','act_this_per_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_this_per_equip_qty,@iact_this_per_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(base_mat_cost)  exec audit_data 'TASKSUM','base_mat_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_mat_cost,@ibase_mat_cost,@audit_data OUTPUT
      if (@loper='D') or  update(remain_mat_cost)  exec audit_data 'TASKSUM','remain_mat_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_mat_cost,@iremain_mat_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_mat_cost)  exec audit_data 'TASKSUM','act_mat_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_mat_cost,@iact_mat_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_this_per_mat_cost)  exec audit_data 'TASKSUM','act_this_per_mat_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_this_per_mat_cost,@iact_this_per_mat_cost,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKSUM', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKSUM', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itask_sum_id,@iwbs_id,@iproj_id,@icomplete_cnt,@iactive_cnt,@inotstarted_cnt,@ibase_complete_cnt,@ibase_active_cnt,@ibase_notstarted_cnt,@iact_drtn_hr_cnt,@iact_equip_qty,@iact_work_qty,@itotal_drtn_hr_cnt,@ibase_drtn_hr_cnt,@ibase_work_qty,@ibase_equip_qty,@ietc_work_qty,@iremain_drtn_hr_cnt,@iremain_work_qty,@iremain_equip_qty,@itotal_float_hr_cnt,@iact_expense_cost,@iact_work_cost,@iact_equip_cost,@ibase_expense_cost,@ibase_work_cost,@ibase_equip_cost,@ibcwp,@ietc,@ibcws,@iremain_expense_cost,@iremain_work_cost,@iremain_equip_cost,@iperfm_work_qty,@isched_work_qty,@iact_end_date,@iact_start_date,@ibase_end_date,@ibase_start_date,@ireend_date,@irestart_date,@iact_this_per_work_cost,@iact_this_per_work_qty,@iact_this_per_equip_cost,@iact_this_per_equip_qty,@ibase_mat_cost,@iremain_mat_cost,@iact_mat_cost,@iact_this_per_mat_cost, @idelete_session_id;
    else
     fetch deleted_c into @dtask_sum_id,@dwbs_id,@dproj_id,@dcomplete_cnt,@dactive_cnt,@dnotstarted_cnt,@dbase_complete_cnt,@dbase_active_cnt,@dbase_notstarted_cnt,@dact_drtn_hr_cnt,@dact_equip_qty,@dact_work_qty,@dtotal_drtn_hr_cnt,@dbase_drtn_hr_cnt,@dbase_work_qty,@dbase_equip_qty,@detc_work_qty,@dremain_drtn_hr_cnt,@dremain_work_qty,@dremain_equip_qty,@dtotal_float_hr_cnt,@dact_expense_cost,@dact_work_cost,@dact_equip_cost,@dbase_expense_cost,@dbase_work_cost,@dbase_equip_cost,@dbcwp,@detc,@dbcws,@dremain_expense_cost,@dremain_work_cost,@dremain_equip_cost,@dperfm_work_qty,@dsched_work_qty,@dact_end_date,@dact_start_date,@dbase_end_date,@dbase_start_date,@dreend_date,@drestart_date,@dact_this_per_work_cost,@dact_this_per_work_qty,@dact_this_per_equip_cost,@dact_this_per_equip_qty,@dbase_mat_cost,@dremain_mat_cost,@dact_mat_cost,@dact_this_per_mat_cost, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKSUMFIN
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKSUMFIN' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKSUMFIN

PRMAUD_TASKSUMFIN
create trigger PRMAUD_TASKSUMFIN
on TASKSUMFIN
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itask_sum_fin_id varchar(255),@ifin_dates_id varchar(255),@iwbs_id varchar(255),@iproj_id varchar(255),@itask_sum_id varchar(255),@iact_work_qty varchar(255),@iact_work_cost varchar(255),@iact_equip_qty varchar(255),@iact_equip_cost varchar(255),@iact_mat_cost varchar(255),@iact_expense_cost varchar(255),@itotal_work_qty varchar(255),@itotal_work_cost varchar(255),@itotal_equip_qty varchar(255),@itotal_equip_cost varchar(255),@itotal_mat_cost varchar(255),@itotal_expense_cost varchar(255),@itotal_cost varchar(255),@iact_cost varchar(255),@ibcwp varchar(255),@iperfm_work_qty varchar(255),@ietc varchar(255),@ietc_work_qty varchar(255),@ieac varchar(255),@ieac_work varchar(255),@ibcws varchar(255),@iacwp varchar(255),@isched_work_qty varchar(255),@ibase_cost varchar(255),@ibase_work_qty varchar(255),@ibase_work_cost varchar(255),@ibase_mat_cost varchar(255),@ibase_equip_cost varchar(255),@ibase_equip_qty varchar(255),@ibase_expense_cost varchar(255),@iremain_cost varchar(255),@iremain_work_qty varchar(255),@iremain_work_cost varchar(255),@iremain_mat_cost varchar(255),@iremain_equip_cost varchar(255),@iremain_equip_qty varchar(255),@iremain_expense_cost varchar(255),@itarget_cost varchar(255),@itarget_equip_cost varchar(255),@itarget_equip_qty varchar(255),@itarget_expense_cost varchar(255),@itarget_mat_cost varchar(255),@itarget_work_cost varchar(255),@itarget_work_qty varchar(255),@ilate_remain_work_qty varchar(255),@ilate_remain_work_cost varchar(255),@ilate_remain_equip_cost varchar(255),@ilate_remain_equip_qty varchar(255),@ilate_remain_cost varchar(255),@ilate_remain_mat_cost varchar(255),@ilate_remain_expense_cost varchar(255)

  declare @dtask_sum_fin_id varchar(255),@dfin_dates_id varchar(255),@dwbs_id varchar(255),@dproj_id varchar(255),@dtask_sum_id varchar(255),@dact_work_qty varchar(255),@dact_work_cost varchar(255),@dact_equip_qty varchar(255),@dact_equip_cost varchar(255),@dact_mat_cost varchar(255),@dact_expense_cost varchar(255),@dtotal_work_qty varchar(255),@dtotal_work_cost varchar(255),@dtotal_equip_qty varchar(255),@dtotal_equip_cost varchar(255),@dtotal_mat_cost varchar(255),@dtotal_expense_cost varchar(255),@dtotal_cost varchar(255),@dact_cost varchar(255),@dbcwp varchar(255),@dperfm_work_qty varchar(255),@detc varchar(255),@detc_work_qty varchar(255),@deac varchar(255),@deac_work varchar(255),@dbcws varchar(255),@dacwp varchar(255),@dsched_work_qty varchar(255),@dbase_cost varchar(255),@dbase_work_qty varchar(255),@dbase_work_cost varchar(255),@dbase_mat_cost varchar(255),@dbase_equip_cost varchar(255),@dbase_equip_qty varchar(255),@dbase_expense_cost varchar(255),@dremain_cost varchar(255),@dremain_work_qty varchar(255),@dremain_work_cost varchar(255),@dremain_mat_cost varchar(255),@dremain_equip_cost varchar(255),@dremain_equip_qty varchar(255),@dremain_expense_cost varchar(255),@dtarget_cost varchar(255),@dtarget_equip_cost varchar(255),@dtarget_equip_qty varchar(255),@dtarget_expense_cost varchar(255),@dtarget_mat_cost varchar(255),@dtarget_work_cost varchar(255),@dtarget_work_qty varchar(255),@dlate_remain_work_qty varchar(255),@dlate_remain_work_cost varchar(255),@dlate_remain_equip_cost varchar(255),@dlate_remain_equip_qty varchar(255),@dlate_remain_cost varchar(255),@dlate_remain_mat_cost varchar(255),@dlate_remain_expense_cost varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(task_sum_fin_id) and
			not update(fin_dates_id) and
			not update(wbs_id) and
			not update(proj_id) and
			not update(task_sum_id) and
			not update(act_work_qty) and
			not update(act_work_cost) and
			not update(act_equip_qty) and
			not update(act_equip_cost) and
			not update(act_mat_cost) and
			not update(act_expense_cost) and
			not update(total_work_qty) and
			not update(total_work_cost) and
			not update(total_equip_qty) and
			not update(total_equip_cost) and
			not update(total_mat_cost) and
			not update(total_expense_cost) and
			not update(total_cost) and
			not update(act_cost) and
			not update(bcwp) and
			not update(perfm_work_qty) and
			not update(etc) and
			not update(etc_work_qty) and
			not update(eac) and
			not update(eac_work) and
			not update(bcws) and
			not update(acwp) and
			not update(sched_work_qty) and
			not update(base_cost) and
			not update(base_work_qty) and
			not update(base_work_cost) and
			not update(base_mat_cost) and
			not update(base_equip_cost) and
			not update(base_equip_qty) and
			not update(base_expense_cost) and
			not update(remain_cost) and
			not update(remain_work_qty) and
			not update(remain_work_cost) and
			not update(remain_mat_cost) and
			not update(remain_equip_cost) and
			not update(remain_equip_qty) and
			not update(remain_expense_cost) and
			not update(target_cost) and
			not update(target_equip_cost) and
			not update(target_equip_qty) and
			not update(target_expense_cost) and
			not update(target_mat_cost) and
			not update(target_work_cost) and
			not update(target_work_qty) and
			not update(late_remain_work_qty) and
			not update(late_remain_work_cost) and
			not update(late_remain_equip_cost) and
			not update(late_remain_equip_qty) and
			not update(late_remain_cost) and
			not update(late_remain_mat_cost) and
			not update(late_remain_expense_cost) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKSUMFIN', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKSUMFIN',task_sum_fin_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKSUMFIN', task_sum_fin_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select task_sum_fin_id,fin_dates_id,wbs_id,proj_id,task_sum_id,act_work_qty,act_work_cost,act_equip_qty,act_equip_cost,act_mat_cost,act_expense_cost,total_work_qty,total_work_cost,total_equip_qty,total_equip_cost,total_mat_cost,total_expense_cost,total_cost,act_cost,bcwp,perfm_work_qty,etc,etc_work_qty,eac,eac_work,bcws,acwp,sched_work_qty,base_cost,base_work_qty,base_work_cost,base_mat_cost,base_equip_cost,base_equip_qty,base_expense_cost,remain_cost,remain_work_qty,remain_work_cost,remain_mat_cost,remain_equip_cost,remain_equip_qty,remain_expense_cost,target_cost,target_equip_cost,target_equip_qty,target_expense_cost,target_mat_cost,target_work_cost,target_work_qty,late_remain_work_qty,late_remain_work_cost,late_remain_equip_cost,late_remain_equip_qty,late_remain_cost,late_remain_mat_cost,late_remain_expense_cost
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select task_sum_fin_id,fin_dates_id,wbs_id,proj_id,task_sum_id,act_work_qty,act_work_cost,act_equip_qty,act_equip_cost,act_mat_cost,act_expense_cost,total_work_qty,total_work_cost,total_equip_qty,total_equip_cost,total_mat_cost,total_expense_cost,total_cost,act_cost,bcwp,perfm_work_qty,etc,etc_work_qty,eac,eac_work,bcws,acwp,sched_work_qty,base_cost,base_work_qty,base_work_cost,base_mat_cost,base_equip_cost,base_equip_qty,base_expense_cost,remain_cost,remain_work_qty,remain_work_cost,remain_mat_cost,remain_equip_cost,remain_equip_qty,remain_expense_cost,target_cost,target_equip_cost,target_equip_qty,target_expense_cost,target_mat_cost,target_work_cost,target_work_qty,late_remain_work_qty,late_remain_work_cost,late_remain_equip_cost,late_remain_equip_qty,late_remain_cost,late_remain_mat_cost,late_remain_expense_cost
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itask_sum_fin_id,@ifin_dates_id,@iwbs_id,@iproj_id,@itask_sum_id,@iact_work_qty,@iact_work_cost,@iact_equip_qty,@iact_equip_cost,@iact_mat_cost,@iact_expense_cost,@itotal_work_qty,@itotal_work_cost,@itotal_equip_qty,@itotal_equip_cost,@itotal_mat_cost,@itotal_expense_cost,@itotal_cost,@iact_cost,@ibcwp,@iperfm_work_qty,@ietc,@ietc_work_qty,@ieac,@ieac_work,@ibcws,@iacwp,@isched_work_qty,@ibase_cost,@ibase_work_qty,@ibase_work_cost,@ibase_mat_cost,@ibase_equip_cost,@ibase_equip_qty,@ibase_expense_cost,@iremain_cost,@iremain_work_qty,@iremain_work_cost,@iremain_mat_cost,@iremain_equip_cost,@iremain_equip_qty,@iremain_expense_cost,@itarget_cost,@itarget_equip_cost,@itarget_equip_qty,@itarget_expense_cost,@itarget_mat_cost,@itarget_work_cost,@itarget_work_qty,@ilate_remain_work_qty,@ilate_remain_work_cost,@ilate_remain_equip_cost,@ilate_remain_equip_qty,@ilate_remain_cost,@ilate_remain_mat_cost,@ilate_remain_expense_cost, @idelete_session_id
  else
    fetch deleted_c into @dtask_sum_fin_id,@dfin_dates_id,@dwbs_id,@dproj_id,@dtask_sum_id,@dact_work_qty,@dact_work_cost,@dact_equip_qty,@dact_equip_cost,@dact_mat_cost,@dact_expense_cost,@dtotal_work_qty,@dtotal_work_cost,@dtotal_equip_qty,@dtotal_equip_cost,@dtotal_mat_cost,@dtotal_expense_cost,@dtotal_cost,@dact_cost,@dbcwp,@dperfm_work_qty,@detc,@detc_work_qty,@deac,@deac_work,@dbcws,@dacwp,@dsched_work_qty,@dbase_cost,@dbase_work_qty,@dbase_work_cost,@dbase_mat_cost,@dbase_equip_cost,@dbase_equip_qty,@dbase_expense_cost,@dremain_cost,@dremain_work_qty,@dremain_work_cost,@dremain_mat_cost,@dremain_equip_cost,@dremain_equip_qty,@dremain_expense_cost,@dtarget_cost,@dtarget_equip_cost,@dtarget_equip_qty,@dtarget_expense_cost,@dtarget_mat_cost,@dtarget_work_cost,@dtarget_work_qty,@dlate_remain_work_qty,@dlate_remain_work_cost,@dlate_remain_equip_cost,@dlate_remain_equip_qty,@dlate_remain_cost,@dlate_remain_mat_cost,@dlate_remain_expense_cost, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtask_sum_fin_id;
				

    end else begin
    	set @pk1 = @itask_sum_fin_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtask_sum_fin_id,@dfin_dates_id,@dwbs_id,@dproj_id,@dtask_sum_id,@dact_work_qty,@dact_work_cost,@dact_equip_qty,@dact_equip_cost,@dact_mat_cost,@dact_expense_cost,@dtotal_work_qty,@dtotal_work_cost,@dtotal_equip_qty,@dtotal_equip_cost,@dtotal_mat_cost,@dtotal_expense_cost,@dtotal_cost,@dact_cost,@dbcwp,@dperfm_work_qty,@detc,@detc_work_qty,@deac,@deac_work,@dbcws,@dacwp,@dsched_work_qty,@dbase_cost,@dbase_work_qty,@dbase_work_cost,@dbase_mat_cost,@dbase_equip_cost,@dbase_equip_qty,@dbase_expense_cost,@dremain_cost,@dremain_work_qty,@dremain_work_cost,@dremain_mat_cost,@dremain_equip_cost,@dremain_equip_qty,@dremain_expense_cost,@dtarget_cost,@dtarget_equip_cost,@dtarget_equip_qty,@dtarget_expense_cost,@dtarget_mat_cost,@dtarget_work_cost,@dtarget_work_qty,@dlate_remain_work_qty,@dlate_remain_work_cost,@dlate_remain_equip_cost,@dlate_remain_equip_qty,@dlate_remain_cost,@dlate_remain_mat_cost,@dlate_remain_expense_cost, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(task_sum_fin_id)  exec audit_data 'TASKSUMFIN','task_sum_fin_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_sum_fin_id,@itask_sum_fin_id,@audit_data OUTPUT
      if (@loper='D') or  update(fin_dates_id)  exec audit_data 'TASKSUMFIN','fin_dates_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfin_dates_id,@ifin_dates_id,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_id)  exec audit_data 'TASKSUMFIN','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'TASKSUMFIN','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(task_sum_id)  exec audit_data 'TASKSUMFIN','task_sum_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_sum_id,@itask_sum_id,@audit_data OUTPUT
      if (@loper='D') or  update(act_work_qty)  exec audit_data 'TASKSUMFIN','act_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_work_qty,@iact_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(act_work_cost)  exec audit_data 'TASKSUMFIN','act_work_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_work_cost,@iact_work_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_equip_qty)  exec audit_data 'TASKSUMFIN','act_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_equip_qty,@iact_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(act_equip_cost)  exec audit_data 'TASKSUMFIN','act_equip_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_equip_cost,@iact_equip_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_mat_cost)  exec audit_data 'TASKSUMFIN','act_mat_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_mat_cost,@iact_mat_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_expense_cost)  exec audit_data 'TASKSUMFIN','act_expense_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_expense_cost,@iact_expense_cost,@audit_data OUTPUT
      if (@loper='D') or  update(total_work_qty)  exec audit_data 'TASKSUMFIN','total_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtotal_work_qty,@itotal_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(total_work_cost)  exec audit_data 'TASKSUMFIN','total_work_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtotal_work_cost,@itotal_work_cost,@audit_data OUTPUT
      if (@loper='D') or  update(total_equip_qty)  exec audit_data 'TASKSUMFIN','total_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtotal_equip_qty,@itotal_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(total_equip_cost)  exec audit_data 'TASKSUMFIN','total_equip_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtotal_equip_cost,@itotal_equip_cost,@audit_data OUTPUT
      if (@loper='D') or  update(total_mat_cost)  exec audit_data 'TASKSUMFIN','total_mat_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtotal_mat_cost,@itotal_mat_cost,@audit_data OUTPUT
      if (@loper='D') or  update(total_expense_cost)  exec audit_data 'TASKSUMFIN','total_expense_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtotal_expense_cost,@itotal_expense_cost,@audit_data OUTPUT
      if (@loper='D') or  update(total_cost)  exec audit_data 'TASKSUMFIN','total_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtotal_cost,@itotal_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_cost)  exec audit_data 'TASKSUMFIN','act_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_cost,@iact_cost,@audit_data OUTPUT
      if (@loper='D') or  update(bcwp)  exec audit_data 'TASKSUMFIN','bcwp',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbcwp,@ibcwp,@audit_data OUTPUT
      if (@loper='D') or  update(perfm_work_qty)  exec audit_data 'TASKSUMFIN','perfm_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dperfm_work_qty,@iperfm_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(etc)  exec audit_data 'TASKSUMFIN','etc',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@detc,@ietc,@audit_data OUTPUT
      if (@loper='D') or  update(etc_work_qty)  exec audit_data 'TASKSUMFIN','etc_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@detc_work_qty,@ietc_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(eac)  exec audit_data 'TASKSUMFIN','eac',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@deac,@ieac,@audit_data OUTPUT
      if (@loper='D') or  update(eac_work)  exec audit_data 'TASKSUMFIN','eac_work',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@deac_work,@ieac_work,@audit_data OUTPUT
      if (@loper='D') or  update(bcws)  exec audit_data 'TASKSUMFIN','bcws',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbcws,@ibcws,@audit_data OUTPUT
      if (@loper='D') or  update(acwp)  exec audit_data 'TASKSUMFIN','acwp',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dacwp,@iacwp,@audit_data OUTPUT
      if (@loper='D') or  update(sched_work_qty)  exec audit_data 'TASKSUMFIN','sched_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsched_work_qty,@isched_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(base_cost)  exec audit_data 'TASKSUMFIN','base_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_cost,@ibase_cost,@audit_data OUTPUT
      if (@loper='D') or  update(base_work_qty)  exec audit_data 'TASKSUMFIN','base_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_work_qty,@ibase_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(base_work_cost)  exec audit_data 'TASKSUMFIN','base_work_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_work_cost,@ibase_work_cost,@audit_data OUTPUT
      if (@loper='D') or  update(base_mat_cost)  exec audit_data 'TASKSUMFIN','base_mat_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_mat_cost,@ibase_mat_cost,@audit_data OUTPUT
      if (@loper='D') or  update(base_equip_cost)  exec audit_data 'TASKSUMFIN','base_equip_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_equip_cost,@ibase_equip_cost,@audit_data OUTPUT
      if (@loper='D') or  update(base_equip_qty)  exec audit_data 'TASKSUMFIN','base_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_equip_qty,@ibase_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(base_expense_cost)  exec audit_data 'TASKSUMFIN','base_expense_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbase_expense_cost,@ibase_expense_cost,@audit_data OUTPUT
      if (@loper='D') or  update(remain_cost)  exec audit_data 'TASKSUMFIN','remain_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_cost,@iremain_cost,@audit_data OUTPUT
      if (@loper='D') or  update(remain_work_qty)  exec audit_data 'TASKSUMFIN','remain_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_work_qty,@iremain_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(remain_work_cost)  exec audit_data 'TASKSUMFIN','remain_work_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_work_cost,@iremain_work_cost,@audit_data OUTPUT
      if (@loper='D') or  update(remain_mat_cost)  exec audit_data 'TASKSUMFIN','remain_mat_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_mat_cost,@iremain_mat_cost,@audit_data OUTPUT
      if (@loper='D') or  update(remain_equip_cost)  exec audit_data 'TASKSUMFIN','remain_equip_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_equip_cost,@iremain_equip_cost,@audit_data OUTPUT
      if (@loper='D') or  update(remain_equip_qty)  exec audit_data 'TASKSUMFIN','remain_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_equip_qty,@iremain_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(remain_expense_cost)  exec audit_data 'TASKSUMFIN','remain_expense_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_expense_cost,@iremain_expense_cost,@audit_data OUTPUT
      if (@loper='D') or  update(target_cost)  exec audit_data 'TASKSUMFIN','target_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_cost,@itarget_cost,@audit_data OUTPUT
      if (@loper='D') or  update(target_equip_cost)  exec audit_data 'TASKSUMFIN','target_equip_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_equip_cost,@itarget_equip_cost,@audit_data OUTPUT
      if (@loper='D') or  update(target_equip_qty)  exec audit_data 'TASKSUMFIN','target_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_equip_qty,@itarget_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(target_expense_cost)  exec audit_data 'TASKSUMFIN','target_expense_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_expense_cost,@itarget_expense_cost,@audit_data OUTPUT
      if (@loper='D') or  update(target_mat_cost)  exec audit_data 'TASKSUMFIN','target_mat_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_mat_cost,@itarget_mat_cost,@audit_data OUTPUT
      if (@loper='D') or  update(target_work_cost)  exec audit_data 'TASKSUMFIN','target_work_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_work_cost,@itarget_work_cost,@audit_data OUTPUT
      if (@loper='D') or  update(target_work_qty)  exec audit_data 'TASKSUMFIN','target_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_work_qty,@itarget_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(late_remain_work_qty)  exec audit_data 'TASKSUMFIN','late_remain_work_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlate_remain_work_qty,@ilate_remain_work_qty,@audit_data OUTPUT
      if (@loper='D') or  update(late_remain_work_cost)  exec audit_data 'TASKSUMFIN','late_remain_work_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlate_remain_work_cost,@ilate_remain_work_cost,@audit_data OUTPUT
      if (@loper='D') or  update(late_remain_equip_cost)  exec audit_data 'TASKSUMFIN','late_remain_equip_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlate_remain_equip_cost,@ilate_remain_equip_cost,@audit_data OUTPUT
      if (@loper='D') or  update(late_remain_equip_qty)  exec audit_data 'TASKSUMFIN','late_remain_equip_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlate_remain_equip_qty,@ilate_remain_equip_qty,@audit_data OUTPUT
      if (@loper='D') or  update(late_remain_cost)  exec audit_data 'TASKSUMFIN','late_remain_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlate_remain_cost,@ilate_remain_cost,@audit_data OUTPUT
      if (@loper='D') or  update(late_remain_mat_cost)  exec audit_data 'TASKSUMFIN','late_remain_mat_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlate_remain_mat_cost,@ilate_remain_mat_cost,@audit_data OUTPUT
      if (@loper='D') or  update(late_remain_expense_cost)  exec audit_data 'TASKSUMFIN','late_remain_expense_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlate_remain_expense_cost,@ilate_remain_expense_cost,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKSUMFIN', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKSUMFIN', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itask_sum_fin_id,@ifin_dates_id,@iwbs_id,@iproj_id,@itask_sum_id,@iact_work_qty,@iact_work_cost,@iact_equip_qty,@iact_equip_cost,@iact_mat_cost,@iact_expense_cost,@itotal_work_qty,@itotal_work_cost,@itotal_equip_qty,@itotal_equip_cost,@itotal_mat_cost,@itotal_expense_cost,@itotal_cost,@iact_cost,@ibcwp,@iperfm_work_qty,@ietc,@ietc_work_qty,@ieac,@ieac_work,@ibcws,@iacwp,@isched_work_qty,@ibase_cost,@ibase_work_qty,@ibase_work_cost,@ibase_mat_cost,@ibase_equip_cost,@ibase_equip_qty,@ibase_expense_cost,@iremain_cost,@iremain_work_qty,@iremain_work_cost,@iremain_mat_cost,@iremain_equip_cost,@iremain_equip_qty,@iremain_expense_cost,@itarget_cost,@itarget_equip_cost,@itarget_equip_qty,@itarget_expense_cost,@itarget_mat_cost,@itarget_work_cost,@itarget_work_qty,@ilate_remain_work_qty,@ilate_remain_work_cost,@ilate_remain_equip_cost,@ilate_remain_equip_qty,@ilate_remain_cost,@ilate_remain_mat_cost,@ilate_remain_expense_cost, @idelete_session_id;
    else
     fetch deleted_c into @dtask_sum_fin_id,@dfin_dates_id,@dwbs_id,@dproj_id,@dtask_sum_id,@dact_work_qty,@dact_work_cost,@dact_equip_qty,@dact_equip_cost,@dact_mat_cost,@dact_expense_cost,@dtotal_work_qty,@dtotal_work_cost,@dtotal_equip_qty,@dtotal_equip_cost,@dtotal_mat_cost,@dtotal_expense_cost,@dtotal_cost,@dact_cost,@dbcwp,@dperfm_work_qty,@detc,@detc_work_qty,@deac,@deac_work,@dbcws,@dacwp,@dsched_work_qty,@dbase_cost,@dbase_work_qty,@dbase_work_cost,@dbase_mat_cost,@dbase_equip_cost,@dbase_equip_qty,@dbase_expense_cost,@dremain_cost,@dremain_work_qty,@dremain_work_cost,@dremain_mat_cost,@dremain_equip_cost,@dremain_equip_qty,@dremain_expense_cost,@dtarget_cost,@dtarget_equip_cost,@dtarget_equip_qty,@dtarget_expense_cost,@dtarget_mat_cost,@dtarget_work_cost,@dtarget_work_qty,@dlate_remain_work_qty,@dlate_remain_work_cost,@dlate_remain_equip_cost,@dlate_remain_equip_qty,@dlate_remain_cost,@dlate_remain_mat_cost,@dlate_remain_expense_cost, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKUSER
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKUSER' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKUSER

PRMAUD_TASKUSER
create trigger PRMAUD_TASKUSER
on TASKUSER
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itask_id varchar(255),@iuser_id varchar(255),@iproj_id varchar(255)

  declare @dtask_id varchar(255),@duser_id varchar(255),@dproj_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(task_id) and
			not update(user_id) and
			not update(proj_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKUSER', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKUSER',task_id,user_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKUSER', task_id,user_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select task_id,user_id,proj_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select task_id,user_id,proj_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itask_id,@iuser_id,@iproj_id, @idelete_session_id
  else
    fetch deleted_c into @dtask_id,@duser_id,@dproj_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtask_id;
				
set @pk2 = @duser_id;
				

    end else begin
    	set @pk1 = @itask_id;
				
set @pk2 = @iuser_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtask_id,@duser_id,@dproj_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(task_id)  exec audit_data 'TASKUSER','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'TASKUSER','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'TASKUSER','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKUSER', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKUSER', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itask_id,@iuser_id,@iproj_id, @idelete_session_id;
    else
     fetch deleted_c into @dtask_id,@duser_id,@dproj_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TASKWKSP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TASKWKSP' AND xtype = 'TR')
    DROP trigger PRMAUD_TASKWKSP

PRMAUD_TASKWKSP
create trigger PRMAUD_TASKWKSP
on TASKWKSP
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iworkspace_id varchar(255),@itask_id varchar(255),@iproj_id varchar(255),@icr_external_key varchar(4000)

  declare @dworkspace_id varchar(255),@dtask_id varchar(255),@dproj_id varchar(255),@dcr_external_key varchar(4000)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(workspace_id) and
			not update(task_id) and
			not update(proj_id) and
			not update(cr_external_key) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TASKWKSP', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKWKSP',workspace_id,task_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TASKWKSP', workspace_id,task_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select workspace_id,task_id,proj_id,cr_external_key
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select workspace_id,task_id,proj_id,cr_external_key
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iworkspace_id,@itask_id,@iproj_id,@icr_external_key, @idelete_session_id
  else
    fetch deleted_c into @dworkspace_id,@dtask_id,@dproj_id,@dcr_external_key, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dworkspace_id;
				
set @pk2 = @dtask_id;
				

    end else begin
    	set @pk1 = @iworkspace_id;
				
set @pk2 = @itask_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dworkspace_id,@dtask_id,@dproj_id,@dcr_external_key, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(workspace_id)  exec audit_data 'TASKWKSP','workspace_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dworkspace_id,@iworkspace_id,@audit_data OUTPUT
      if (@loper='D') or  update(task_id)  exec audit_data 'TASKWKSP','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'TASKWKSP','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(cr_external_key)  exec audit_data 'TASKWKSP','cr_external_key',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcr_external_key,@icr_external_key,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TASKWKSP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TASKWKSP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iworkspace_id,@itask_id,@iproj_id,@icr_external_key, @idelete_session_id;
    else
     fetch deleted_c into @dworkspace_id,@dtask_id,@dproj_id,@dcr_external_key, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_THRSPARM
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_THRSPARM' AND xtype = 'TR')
    DROP trigger PRMAUD_THRSPARM

PRMAUD_THRSPARM
create trigger PRMAUD_THRSPARM
on THRSPARM
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ithresh_parm_id varchar(255),@iseq_num varchar(255),@iwbs_flag varchar(255),@itask_flag varchar(255),@irsrc_flag varchar(255),@ithresh_parm_type varchar(255),@ithresh_parm_name varchar(255),@ithresh_field_name varchar(255),@ithresh_short_name varchar(255)

  declare @dthresh_parm_id varchar(255),@dseq_num varchar(255),@dwbs_flag varchar(255),@dtask_flag varchar(255),@drsrc_flag varchar(255),@dthresh_parm_type varchar(255),@dthresh_parm_name varchar(255),@dthresh_field_name varchar(255),@dthresh_short_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(thresh_parm_id) and
			not update(seq_num) and
			not update(wbs_flag) and
			not update(task_flag) and
			not update(rsrc_flag) and
			not update(thresh_parm_type) and
			not update(thresh_parm_name) and
			not update(thresh_field_name) and
			not update(thresh_short_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'THRSPARM', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'THRSPARM',thresh_parm_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'THRSPARM', thresh_parm_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select thresh_parm_id,seq_num,wbs_flag,task_flag,rsrc_flag,thresh_parm_type,thresh_parm_name,thresh_field_name,thresh_short_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select thresh_parm_id,seq_num,wbs_flag,task_flag,rsrc_flag,thresh_parm_type,thresh_parm_name,thresh_field_name,thresh_short_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ithresh_parm_id,@iseq_num,@iwbs_flag,@itask_flag,@irsrc_flag,@ithresh_parm_type,@ithresh_parm_name,@ithresh_field_name,@ithresh_short_name, @idelete_session_id
  else
    fetch deleted_c into @dthresh_parm_id,@dseq_num,@dwbs_flag,@dtask_flag,@drsrc_flag,@dthresh_parm_type,@dthresh_parm_name,@dthresh_field_name,@dthresh_short_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dthresh_parm_id;
				

    end else begin
    	set @pk1 = @ithresh_parm_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dthresh_parm_id,@dseq_num,@dwbs_flag,@dtask_flag,@drsrc_flag,@dthresh_parm_type,@dthresh_parm_name,@dthresh_field_name,@dthresh_short_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(thresh_parm_id)  exec audit_data 'THRSPARM','thresh_parm_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dthresh_parm_id,@ithresh_parm_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'THRSPARM','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_flag)  exec audit_data 'THRSPARM','wbs_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_flag,@iwbs_flag,@audit_data OUTPUT
      if (@loper='D') or  update(task_flag)  exec audit_data 'THRSPARM','task_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_flag,@itask_flag,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_flag)  exec audit_data 'THRSPARM','rsrc_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_flag,@irsrc_flag,@audit_data OUTPUT
      if (@loper='D') or  update(thresh_parm_type)  exec audit_data 'THRSPARM','thresh_parm_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dthresh_parm_type,@ithresh_parm_type,@audit_data OUTPUT
      if (@loper='D') or  update(thresh_parm_name)  exec audit_data 'THRSPARM','thresh_parm_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dthresh_parm_name,@ithresh_parm_name,@audit_data OUTPUT
      if (@loper='D') or  update(thresh_field_name)  exec audit_data 'THRSPARM','thresh_field_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dthresh_field_name,@ithresh_field_name,@audit_data OUTPUT
      if (@loper='D') or  update(thresh_short_name)  exec audit_data 'THRSPARM','thresh_short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dthresh_short_name,@ithresh_short_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'THRSPARM', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'THRSPARM', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ithresh_parm_id,@iseq_num,@iwbs_flag,@itask_flag,@irsrc_flag,@ithresh_parm_type,@ithresh_parm_name,@ithresh_field_name,@ithresh_short_name, @idelete_session_id;
    else
     fetch deleted_c into @dthresh_parm_id,@dseq_num,@dwbs_flag,@dtask_flag,@drsrc_flag,@dthresh_parm_type,@dthresh_parm_name,@dthresh_field_name,@dthresh_short_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TIMESHT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TIMESHT' AND xtype = 'TR')
    DROP trigger PRMAUD_TIMESHT

PRMAUD_TIMESHT
create trigger PRMAUD_TIMESHT
on TIMESHT
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @its_id varchar(255),@irsrc_id varchar(255),@idaily_flag varchar(255),@istatus_code varchar(255),@iuser_id varchar(255),@ilast_recv_date varchar(255),@istatus_date varchar(255)

  declare @dts_id varchar(255),@drsrc_id varchar(255),@ddaily_flag varchar(255),@dstatus_code varchar(255),@duser_id varchar(255),@dlast_recv_date varchar(255),@dstatus_date varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(ts_id) and
			not update(rsrc_id) and
			not update(daily_flag) and
			not update(status_code) and
			not update(user_id) and
			not update(last_recv_date) and
			not update(status_date) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TIMESHT', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TIMESHT',ts_id,rsrc_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TIMESHT', ts_id,rsrc_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select ts_id,rsrc_id,daily_flag,status_code,user_id,last_recv_date,status_date
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select ts_id,rsrc_id,daily_flag,status_code,user_id,last_recv_date,status_date
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @its_id,@irsrc_id,@idaily_flag,@istatus_code,@iuser_id,@ilast_recv_date,@istatus_date, @idelete_session_id
  else
    fetch deleted_c into @dts_id,@drsrc_id,@ddaily_flag,@dstatus_code,@duser_id,@dlast_recv_date,@dstatus_date, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dts_id;
				
set @pk2 = @drsrc_id;
				

    end else begin
    	set @pk1 = @its_id;
				
set @pk2 = @irsrc_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dts_id,@drsrc_id,@ddaily_flag,@dstatus_code,@duser_id,@dlast_recv_date,@dstatus_date, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(ts_id)  exec audit_data 'TIMESHT','ts_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dts_id,@its_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'TIMESHT','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(daily_flag)  exec audit_data 'TIMESHT','daily_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddaily_flag,@idaily_flag,@audit_data OUTPUT
      if (@loper='D') or  update(status_code)  exec audit_data 'TIMESHT','status_code',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstatus_code,@istatus_code,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'TIMESHT','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(last_recv_date)  exec audit_data 'TIMESHT','last_recv_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlast_recv_date,@ilast_recv_date,@audit_data OUTPUT
      if (@loper='D') or  update(status_date)  exec audit_data 'TIMESHT','status_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstatus_date,@istatus_date,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TIMESHT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TIMESHT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @its_id,@irsrc_id,@idaily_flag,@istatus_code,@iuser_id,@ilast_recv_date,@istatus_date, @idelete_session_id;
    else
     fetch deleted_c into @dts_id,@drsrc_id,@ddaily_flag,@dstatus_code,@duser_id,@dlast_recv_date,@dstatus_date, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TMPLCATG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TMPLCATG' AND xtype = 'TR')
    DROP trigger PRMAUD_TMPLCATG

PRMAUD_TMPLCATG
create trigger PRMAUD_TMPLCATG
on TMPLCATG
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itmplcatg_catg_id varchar(255),@icatg_name varchar(255),@iproject_flag varchar(255),@iprocess_flag varchar(255)

  declare @dtmplcatg_catg_id varchar(255),@dcatg_name varchar(255),@dproject_flag varchar(255),@dprocess_flag varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(tmplcatg_catg_id) and
			not update(catg_name) and
			not update(project_flag) and
			not update(process_flag) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TMPLCATG', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TMPLCATG',tmplcatg_catg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TMPLCATG', tmplcatg_catg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select tmplcatg_catg_id,catg_name,project_flag,process_flag
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select tmplcatg_catg_id,catg_name,project_flag,process_flag
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itmplcatg_catg_id,@icatg_name,@iproject_flag,@iprocess_flag, @idelete_session_id
  else
    fetch deleted_c into @dtmplcatg_catg_id,@dcatg_name,@dproject_flag,@dprocess_flag, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtmplcatg_catg_id;
				

    end else begin
    	set @pk1 = @itmplcatg_catg_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtmplcatg_catg_id,@dcatg_name,@dproject_flag,@dprocess_flag, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(tmplcatg_catg_id)  exec audit_data 'TMPLCATG','tmplcatg_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtmplcatg_catg_id,@itmplcatg_catg_id,@audit_data OUTPUT
      if (@loper='D') or  update(catg_name)  exec audit_data 'TMPLCATG','catg_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcatg_name,@icatg_name,@audit_data OUTPUT
      if (@loper='D') or  update(project_flag)  exec audit_data 'TMPLCATG','project_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproject_flag,@iproject_flag,@audit_data OUTPUT
      if (@loper='D') or  update(process_flag)  exec audit_data 'TMPLCATG','process_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprocess_flag,@iprocess_flag,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TMPLCATG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TMPLCATG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itmplcatg_catg_id,@icatg_name,@iproject_flag,@iprocess_flag, @idelete_session_id;
    else
     fetch deleted_c into @dtmplcatg_catg_id,@dcatg_name,@dproject_flag,@dprocess_flag, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TRAKVIEW
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TRAKVIEW' AND xtype = 'TR')
    DROP trigger PRMAUD_TRAKVIEW

PRMAUD_TRAKVIEW
create trigger PRMAUD_TRAKVIEW
on TRAKVIEW
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itrack_view_id varchar(255),@idisplay_type varchar(255),@itrack_view_name varchar(255),@iweb_view_flag varchar(255),@iuser_id varchar(255)

  declare @dtrack_view_id varchar(255),@ddisplay_type varchar(255),@dtrack_view_name varchar(255),@dweb_view_flag varchar(255),@duser_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(track_view_id) and
			not update(display_type) and
			not update(track_view_name) and
			not update(web_view_flag) and
			not update(user_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TRAKVIEW', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TRAKVIEW',track_view_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TRAKVIEW', track_view_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select track_view_id,display_type,track_view_name,web_view_flag,user_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select track_view_id,display_type,track_view_name,web_view_flag,user_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itrack_view_id,@idisplay_type,@itrack_view_name,@iweb_view_flag,@iuser_id, @idelete_session_id
  else
    fetch deleted_c into @dtrack_view_id,@ddisplay_type,@dtrack_view_name,@dweb_view_flag,@duser_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtrack_view_id;
				

    end else begin
    	set @pk1 = @itrack_view_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtrack_view_id,@ddisplay_type,@dtrack_view_name,@dweb_view_flag,@duser_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(track_view_id)  exec audit_data 'TRAKVIEW','track_view_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtrack_view_id,@itrack_view_id,@audit_data OUTPUT
      if (@loper='D') or  update(display_type)  exec audit_data 'TRAKVIEW','display_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddisplay_type,@idisplay_type,@audit_data OUTPUT
      if (@loper='D') or  update(track_view_name)  exec audit_data 'TRAKVIEW','track_view_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtrack_view_name,@itrack_view_name,@audit_data OUTPUT
      if (@loper='D') or  update(web_view_flag)  exec audit_data 'TRAKVIEW','web_view_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dweb_view_flag,@iweb_view_flag,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'TRAKVIEW','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TRAKVIEW', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TRAKVIEW', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itrack_view_id,@idisplay_type,@itrack_view_name,@iweb_view_flag,@iuser_id, @idelete_session_id;
    else
     fetch deleted_c into @dtrack_view_id,@ddisplay_type,@dtrack_view_name,@dweb_view_flag,@duser_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TRSRCFIN
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TRSRCFIN' AND xtype = 'TR')
    DROP trigger PRMAUD_TRSRCFIN

PRMAUD_TRSRCFIN
create trigger PRMAUD_TRSRCFIN
on TRSRCFIN
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @ifin_dates_id varchar(255),@itaskrsrc_id varchar(255),@itask_id varchar(255),@iproj_id varchar(255),@iact_qty varchar(255),@iact_cost varchar(255)

  declare @dfin_dates_id varchar(255),@dtaskrsrc_id varchar(255),@dtask_id varchar(255),@dproj_id varchar(255),@dact_qty varchar(255),@dact_cost varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(fin_dates_id) and
			not update(taskrsrc_id) and
			not update(task_id) and
			not update(proj_id) and
			not update(act_qty) and
			not update(act_cost) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TRSRCFIN', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TRSRCFIN',fin_dates_id,taskrsrc_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TRSRCFIN', fin_dates_id,taskrsrc_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select fin_dates_id,taskrsrc_id,task_id,proj_id,act_qty,act_cost
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select fin_dates_id,taskrsrc_id,task_id,proj_id,act_qty,act_cost
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @ifin_dates_id,@itaskrsrc_id,@itask_id,@iproj_id,@iact_qty,@iact_cost, @idelete_session_id
  else
    fetch deleted_c into @dfin_dates_id,@dtaskrsrc_id,@dtask_id,@dproj_id,@dact_qty,@dact_cost, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dfin_dates_id;
				
set @pk2 = @dtaskrsrc_id;
				

    end else begin
    	set @pk1 = @ifin_dates_id;
				
set @pk2 = @itaskrsrc_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dfin_dates_id,@dtaskrsrc_id,@dtask_id,@dproj_id,@dact_qty,@dact_cost, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(fin_dates_id)  exec audit_data 'TRSRCFIN','fin_dates_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfin_dates_id,@ifin_dates_id,@audit_data OUTPUT
      if (@loper='D') or  update(taskrsrc_id)  exec audit_data 'TRSRCFIN','taskrsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtaskrsrc_id,@itaskrsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(task_id)  exec audit_data 'TRSRCFIN','task_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtask_id,@itask_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'TRSRCFIN','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(act_qty)  exec audit_data 'TRSRCFIN','act_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_qty,@iact_qty,@audit_data OUTPUT
      if (@loper='D') or  update(act_cost)  exec audit_data 'TRSRCFIN','act_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_cost,@iact_cost,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TRSRCFIN', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TRSRCFIN', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @ifin_dates_id,@itaskrsrc_id,@itask_id,@iproj_id,@iact_qty,@iact_cost, @idelete_session_id;
    else
     fetch deleted_c into @dfin_dates_id,@dtaskrsrc_id,@dtask_id,@dproj_id,@dact_qty,@dact_cost, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TRSRCSUM
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TRSRCSUM' AND xtype = 'TR')
    DROP trigger PRMAUD_TRSRCSUM

PRMAUD_TRSRCSUM
create trigger PRMAUD_TRSRCSUM
on TRSRCSUM
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itaskrsrc_sum_id varchar(255),@iproj_id varchar(255),@irsrc_id varchar(255),@irole_id varchar(255),@iskill_level varchar(255),@ioveralloc_date varchar(255)

  declare @dtaskrsrc_sum_id varchar(255),@dproj_id varchar(255),@drsrc_id varchar(255),@drole_id varchar(255),@dskill_level varchar(255),@doveralloc_date varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(taskrsrc_sum_id) and
			not update(proj_id) and
			not update(rsrc_id) and
			not update(role_id) and
			not update(skill_level) and
			not update(overalloc_date) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TRSRCSUM', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TRSRCSUM',taskrsrc_sum_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TRSRCSUM', taskrsrc_sum_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select taskrsrc_sum_id,proj_id,rsrc_id,role_id,skill_level,overalloc_date
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select taskrsrc_sum_id,proj_id,rsrc_id,role_id,skill_level,overalloc_date
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itaskrsrc_sum_id,@iproj_id,@irsrc_id,@irole_id,@iskill_level,@ioveralloc_date, @idelete_session_id
  else
    fetch deleted_c into @dtaskrsrc_sum_id,@dproj_id,@drsrc_id,@drole_id,@dskill_level,@doveralloc_date, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtaskrsrc_sum_id;
				

    end else begin
    	set @pk1 = @itaskrsrc_sum_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtaskrsrc_sum_id,@dproj_id,@drsrc_id,@drole_id,@dskill_level,@doveralloc_date, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(taskrsrc_sum_id)  exec audit_data 'TRSRCSUM','taskrsrc_sum_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtaskrsrc_sum_id,@itaskrsrc_sum_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'TRSRCSUM','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'TRSRCSUM','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(role_id)  exec audit_data 'TRSRCSUM','role_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_id,@irole_id,@audit_data OUTPUT
      if (@loper='D') or  update(skill_level)  exec audit_data 'TRSRCSUM','skill_level',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dskill_level,@iskill_level,@audit_data OUTPUT
      if (@loper='D') or  update(overalloc_date)  exec audit_data 'TRSRCSUM','overalloc_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@doveralloc_date,@ioveralloc_date,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TRSRCSUM', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TRSRCSUM', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itaskrsrc_sum_id,@iproj_id,@irsrc_id,@irole_id,@iskill_level,@ioveralloc_date, @idelete_session_id;
    else
     fetch deleted_c into @dtaskrsrc_sum_id,@dproj_id,@drsrc_id,@drole_id,@dskill_level,@doveralloc_date, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TRSRCSUMFN
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TRSRCSUMFN' AND xtype = 'TR')
    DROP trigger PRMAUD_TRSRCSUMFN

PRMAUD_TRSRCSUMFN
create trigger PRMAUD_TRSRCSUMFN
on TRSRCSUMFN
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @itrsrc_sum_fin_id varchar(255),@ifin_dates_id varchar(255),@iproj_id varchar(255),@irsrc_id varchar(255),@irole_id varchar(255),@itaskrsrc_sum_id varchar(255),@iact_qty varchar(255),@iact_cost varchar(255),@iact_ot_qty varchar(255),@iact_reg_qty varchar(255),@iact_ot_cost varchar(255),@iact_reg_cost varchar(255),@itotal_qty varchar(255),@itotal_cost varchar(255),@iremain_qty varchar(255),@iremain_cost varchar(255),@itarget_qty varchar(255),@itarget_cost varchar(255),@istaffed_remain_qty varchar(255),@iunstaffed_remain_qty varchar(255),@istaffed_remain_cost varchar(255),@iunstaffed_remain_cost varchar(255),@istaffed_late_remain_qty varchar(255),@iunstaffed_late_remain_qty varchar(255),@istaffed_late_remain_cost varchar(255),@iunstaffed_late_remain_cost varchar(255),@ilate_remain_qty varchar(255),@ilate_remain_cost varchar(255)

  declare @dtrsrc_sum_fin_id varchar(255),@dfin_dates_id varchar(255),@dproj_id varchar(255),@drsrc_id varchar(255),@drole_id varchar(255),@dtaskrsrc_sum_id varchar(255),@dact_qty varchar(255),@dact_cost varchar(255),@dact_ot_qty varchar(255),@dact_reg_qty varchar(255),@dact_ot_cost varchar(255),@dact_reg_cost varchar(255),@dtotal_qty varchar(255),@dtotal_cost varchar(255),@dremain_qty varchar(255),@dremain_cost varchar(255),@dtarget_qty varchar(255),@dtarget_cost varchar(255),@dstaffed_remain_qty varchar(255),@dunstaffed_remain_qty varchar(255),@dstaffed_remain_cost varchar(255),@dunstaffed_remain_cost varchar(255),@dstaffed_late_remain_qty varchar(255),@dunstaffed_late_remain_qty varchar(255),@dstaffed_late_remain_cost varchar(255),@dunstaffed_late_remain_cost varchar(255),@dlate_remain_qty varchar(255),@dlate_remain_cost varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(trsrc_sum_fin_id) and
			not update(fin_dates_id) and
			not update(proj_id) and
			not update(rsrc_id) and
			not update(role_id) and
			not update(taskrsrc_sum_id) and
			not update(act_qty) and
			not update(act_cost) and
			not update(act_ot_qty) and
			not update(act_reg_qty) and
			not update(act_ot_cost) and
			not update(act_reg_cost) and
			not update(total_qty) and
			not update(total_cost) and
			not update(remain_qty) and
			not update(remain_cost) and
			not update(target_qty) and
			not update(target_cost) and
			not update(staffed_remain_qty) and
			not update(unstaffed_remain_qty) and
			not update(staffed_remain_cost) and
			not update(unstaffed_remain_cost) and
			not update(staffed_late_remain_qty) and
			not update(unstaffed_late_remain_qty) and
			not update(staffed_late_remain_cost) and
			not update(unstaffed_late_remain_cost) and
			not update(late_remain_qty) and
			not update(late_remain_cost) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TRSRCSUMFN', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TRSRCSUMFN',trsrc_sum_fin_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TRSRCSUMFN', trsrc_sum_fin_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select trsrc_sum_fin_id,fin_dates_id,proj_id,rsrc_id,role_id,taskrsrc_sum_id,act_qty,act_cost,act_ot_qty,act_reg_qty,act_ot_cost,act_reg_cost,total_qty,total_cost,remain_qty,remain_cost,target_qty,target_cost,staffed_remain_qty,unstaffed_remain_qty,staffed_remain_cost,unstaffed_remain_cost,staffed_late_remain_qty,unstaffed_late_remain_qty,staffed_late_remain_cost,unstaffed_late_remain_cost,late_remain_qty,late_remain_cost
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select trsrc_sum_fin_id,fin_dates_id,proj_id,rsrc_id,role_id,taskrsrc_sum_id,act_qty,act_cost,act_ot_qty,act_reg_qty,act_ot_cost,act_reg_cost,total_qty,total_cost,remain_qty,remain_cost,target_qty,target_cost,staffed_remain_qty,unstaffed_remain_qty,staffed_remain_cost,unstaffed_remain_cost,staffed_late_remain_qty,unstaffed_late_remain_qty,staffed_late_remain_cost,unstaffed_late_remain_cost,late_remain_qty,late_remain_cost
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @itrsrc_sum_fin_id,@ifin_dates_id,@iproj_id,@irsrc_id,@irole_id,@itaskrsrc_sum_id,@iact_qty,@iact_cost,@iact_ot_qty,@iact_reg_qty,@iact_ot_cost,@iact_reg_cost,@itotal_qty,@itotal_cost,@iremain_qty,@iremain_cost,@itarget_qty,@itarget_cost,@istaffed_remain_qty,@iunstaffed_remain_qty,@istaffed_remain_cost,@iunstaffed_remain_cost,@istaffed_late_remain_qty,@iunstaffed_late_remain_qty,@istaffed_late_remain_cost,@iunstaffed_late_remain_cost,@ilate_remain_qty,@ilate_remain_cost, @idelete_session_id
  else
    fetch deleted_c into @dtrsrc_sum_fin_id,@dfin_dates_id,@dproj_id,@drsrc_id,@drole_id,@dtaskrsrc_sum_id,@dact_qty,@dact_cost,@dact_ot_qty,@dact_reg_qty,@dact_ot_cost,@dact_reg_cost,@dtotal_qty,@dtotal_cost,@dremain_qty,@dremain_cost,@dtarget_qty,@dtarget_cost,@dstaffed_remain_qty,@dunstaffed_remain_qty,@dstaffed_remain_cost,@dunstaffed_remain_cost,@dstaffed_late_remain_qty,@dunstaffed_late_remain_qty,@dstaffed_late_remain_cost,@dunstaffed_late_remain_cost,@dlate_remain_qty,@dlate_remain_cost, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dtrsrc_sum_fin_id;
				

    end else begin
    	set @pk1 = @itrsrc_sum_fin_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dtrsrc_sum_fin_id,@dfin_dates_id,@dproj_id,@drsrc_id,@drole_id,@dtaskrsrc_sum_id,@dact_qty,@dact_cost,@dact_ot_qty,@dact_reg_qty,@dact_ot_cost,@dact_reg_cost,@dtotal_qty,@dtotal_cost,@dremain_qty,@dremain_cost,@dtarget_qty,@dtarget_cost,@dstaffed_remain_qty,@dunstaffed_remain_qty,@dstaffed_remain_cost,@dunstaffed_remain_cost,@dstaffed_late_remain_qty,@dunstaffed_late_remain_qty,@dstaffed_late_remain_cost,@dunstaffed_late_remain_cost,@dlate_remain_qty,@dlate_remain_cost, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(trsrc_sum_fin_id)  exec audit_data 'TRSRCSUMFN','trsrc_sum_fin_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtrsrc_sum_fin_id,@itrsrc_sum_fin_id,@audit_data OUTPUT
      if (@loper='D') or  update(fin_dates_id)  exec audit_data 'TRSRCSUMFN','fin_dates_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfin_dates_id,@ifin_dates_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'TRSRCSUMFN','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'TRSRCSUMFN','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(role_id)  exec audit_data 'TRSRCSUMFN','role_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_id,@irole_id,@audit_data OUTPUT
      if (@loper='D') or  update(taskrsrc_sum_id)  exec audit_data 'TRSRCSUMFN','taskrsrc_sum_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtaskrsrc_sum_id,@itaskrsrc_sum_id,@audit_data OUTPUT
      if (@loper='D') or  update(act_qty)  exec audit_data 'TRSRCSUMFN','act_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_qty,@iact_qty,@audit_data OUTPUT
      if (@loper='D') or  update(act_cost)  exec audit_data 'TRSRCSUMFN','act_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_cost,@iact_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_ot_qty)  exec audit_data 'TRSRCSUMFN','act_ot_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_ot_qty,@iact_ot_qty,@audit_data OUTPUT
      if (@loper='D') or  update(act_reg_qty)  exec audit_data 'TRSRCSUMFN','act_reg_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_reg_qty,@iact_reg_qty,@audit_data OUTPUT
      if (@loper='D') or  update(act_ot_cost)  exec audit_data 'TRSRCSUMFN','act_ot_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_ot_cost,@iact_ot_cost,@audit_data OUTPUT
      if (@loper='D') or  update(act_reg_cost)  exec audit_data 'TRSRCSUMFN','act_reg_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dact_reg_cost,@iact_reg_cost,@audit_data OUTPUT
      if (@loper='D') or  update(total_qty)  exec audit_data 'TRSRCSUMFN','total_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtotal_qty,@itotal_qty,@audit_data OUTPUT
      if (@loper='D') or  update(total_cost)  exec audit_data 'TRSRCSUMFN','total_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtotal_cost,@itotal_cost,@audit_data OUTPUT
      if (@loper='D') or  update(remain_qty)  exec audit_data 'TRSRCSUMFN','remain_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_qty,@iremain_qty,@audit_data OUTPUT
      if (@loper='D') or  update(remain_cost)  exec audit_data 'TRSRCSUMFN','remain_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dremain_cost,@iremain_cost,@audit_data OUTPUT
      if (@loper='D') or  update(target_qty)  exec audit_data 'TRSRCSUMFN','target_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_qty,@itarget_qty,@audit_data OUTPUT
      if (@loper='D') or  update(target_cost)  exec audit_data 'TRSRCSUMFN','target_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtarget_cost,@itarget_cost,@audit_data OUTPUT
      if (@loper='D') or  update(staffed_remain_qty)  exec audit_data 'TRSRCSUMFN','staffed_remain_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstaffed_remain_qty,@istaffed_remain_qty,@audit_data OUTPUT
      if (@loper='D') or  update(unstaffed_remain_qty)  exec audit_data 'TRSRCSUMFN','unstaffed_remain_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dunstaffed_remain_qty,@iunstaffed_remain_qty,@audit_data OUTPUT
      if (@loper='D') or  update(staffed_remain_cost)  exec audit_data 'TRSRCSUMFN','staffed_remain_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstaffed_remain_cost,@istaffed_remain_cost,@audit_data OUTPUT
      if (@loper='D') or  update(unstaffed_remain_cost)  exec audit_data 'TRSRCSUMFN','unstaffed_remain_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dunstaffed_remain_cost,@iunstaffed_remain_cost,@audit_data OUTPUT
      if (@loper='D') or  update(staffed_late_remain_qty)  exec audit_data 'TRSRCSUMFN','staffed_late_remain_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstaffed_late_remain_qty,@istaffed_late_remain_qty,@audit_data OUTPUT
      if (@loper='D') or  update(unstaffed_late_remain_qty)  exec audit_data 'TRSRCSUMFN','unstaffed_late_remain_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dunstaffed_late_remain_qty,@iunstaffed_late_remain_qty,@audit_data OUTPUT
      if (@loper='D') or  update(staffed_late_remain_cost)  exec audit_data 'TRSRCSUMFN','staffed_late_remain_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstaffed_late_remain_cost,@istaffed_late_remain_cost,@audit_data OUTPUT
      if (@loper='D') or  update(unstaffed_late_remain_cost)  exec audit_data 'TRSRCSUMFN','unstaffed_late_remain_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dunstaffed_late_remain_cost,@iunstaffed_late_remain_cost,@audit_data OUTPUT
      if (@loper='D') or  update(late_remain_qty)  exec audit_data 'TRSRCSUMFN','late_remain_qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlate_remain_qty,@ilate_remain_qty,@audit_data OUTPUT
      if (@loper='D') or  update(late_remain_cost)  exec audit_data 'TRSRCSUMFN','late_remain_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlate_remain_cost,@ilate_remain_cost,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TRSRCSUMFN', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TRSRCSUMFN', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @itrsrc_sum_fin_id,@ifin_dates_id,@iproj_id,@irsrc_id,@irole_id,@itaskrsrc_sum_id,@iact_qty,@iact_cost,@iact_ot_qty,@iact_reg_qty,@iact_ot_cost,@iact_reg_cost,@itotal_qty,@itotal_cost,@iremain_qty,@iremain_cost,@itarget_qty,@itarget_cost,@istaffed_remain_qty,@iunstaffed_remain_qty,@istaffed_remain_cost,@iunstaffed_remain_cost,@istaffed_late_remain_qty,@iunstaffed_late_remain_qty,@istaffed_late_remain_cost,@iunstaffed_late_remain_cost,@ilate_remain_qty,@ilate_remain_cost, @idelete_session_id;
    else
     fetch deleted_c into @dtrsrc_sum_fin_id,@dfin_dates_id,@dproj_id,@drsrc_id,@drole_id,@dtaskrsrc_sum_id,@dact_qty,@dact_cost,@dact_ot_qty,@dact_reg_qty,@dact_ot_cost,@dact_reg_cost,@dtotal_qty,@dtotal_cost,@dremain_qty,@dremain_cost,@dtarget_qty,@dtarget_cost,@dstaffed_remain_qty,@dunstaffed_remain_qty,@dstaffed_remain_cost,@dunstaffed_remain_cost,@dstaffed_late_remain_qty,@dunstaffed_late_remain_qty,@dstaffed_late_remain_cost,@dunstaffed_late_remain_cost,@dlate_remain_qty,@dlate_remain_cost, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TSDATES
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TSDATES' AND xtype = 'TR')
    DROP trigger PRMAUD_TSDATES

PRMAUD_TSDATES
create trigger PRMAUD_TSDATES
on TSDATES
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @its_id varchar(255),@istart_date varchar(255),@iend_date varchar(255)

  declare @dts_id varchar(255),@dstart_date varchar(255),@dend_date varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(ts_id) and
			not update(start_date) and
			not update(end_date) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TSDATES', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TSDATES',ts_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TSDATES', ts_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select ts_id,start_date,end_date
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select ts_id,start_date,end_date
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @its_id,@istart_date,@iend_date, @idelete_session_id
  else
    fetch deleted_c into @dts_id,@dstart_date,@dend_date, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dts_id;
				

    end else begin
    	set @pk1 = @its_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dts_id,@dstart_date,@dend_date, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(ts_id)  exec audit_data 'TSDATES','ts_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dts_id,@its_id,@audit_data OUTPUT
      if (@loper='D') or  update(start_date)  exec audit_data 'TSDATES','start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstart_date,@istart_date,@audit_data OUTPUT
      if (@loper='D') or  update(end_date)  exec audit_data 'TSDATES','end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dend_date,@iend_date,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TSDATES', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TSDATES', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @its_id,@istart_date,@iend_date, @idelete_session_id;
    else
     fetch deleted_c into @dts_id,@dstart_date,@dend_date, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_TSDELEGATE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_TSDELEGATE' AND xtype = 'TR')
    DROP trigger PRMAUD_TSDELEGATE

PRMAUD_TSDELEGATE
create trigger PRMAUD_TSDELEGATE
on TSDELEGATE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @its_delegate_id varchar(255),@iuser_id varchar(255),@its_delegate_user_id varchar(255),@iproj_id varchar(255),@iactive_flag varchar(255)

  declare @dts_delegate_id varchar(255),@duser_id varchar(255),@dts_delegate_user_id varchar(255),@dproj_id varchar(255),@dactive_flag varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(ts_delegate_id) and
			not update(user_id) and
			not update(ts_delegate_user_id) and
			not update(proj_id) and
			not update(active_flag) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'TSDELEGATE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TSDELEGATE',ts_delegate_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'TSDELEGATE', ts_delegate_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select ts_delegate_id,user_id,ts_delegate_user_id,proj_id,active_flag
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select ts_delegate_id,user_id,ts_delegate_user_id,proj_id,active_flag
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @its_delegate_id,@iuser_id,@its_delegate_user_id,@iproj_id,@iactive_flag, @idelete_session_id
  else
    fetch deleted_c into @dts_delegate_id,@duser_id,@dts_delegate_user_id,@dproj_id,@dactive_flag, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dts_delegate_id;
				

    end else begin
    	set @pk1 = @its_delegate_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dts_delegate_id,@duser_id,@dts_delegate_user_id,@dproj_id,@dactive_flag, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(ts_delegate_id)  exec audit_data 'TSDELEGATE','ts_delegate_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dts_delegate_id,@its_delegate_id,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'TSDELEGATE','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(ts_delegate_user_id)  exec audit_data 'TSDELEGATE','ts_delegate_user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dts_delegate_user_id,@its_delegate_user_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'TSDELEGATE','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(active_flag)  exec audit_data 'TSDELEGATE','active_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactive_flag,@iactive_flag,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'TSDELEGATE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'TSDELEGATE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @its_delegate_id,@iuser_id,@its_delegate_user_id,@iproj_id,@iactive_flag, @idelete_session_id;
    else
     fetch deleted_c into @dts_delegate_id,@duser_id,@dts_delegate_user_id,@dproj_id,@dactive_flag, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_UDFCODE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_UDFCODE' AND xtype = 'TR')
    DROP trigger PRMAUD_UDFCODE

PRMAUD_UDFCODE
create trigger PRMAUD_UDFCODE
on UDFCODE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iudf_code_id varchar(255),@iudf_type_id varchar(255),@iseq_num varchar(255),@ishort_name varchar(255),@iudf_code_name varchar(255),@iparent_udf_code_id varchar(255)

  declare @dudf_code_id varchar(255),@dudf_type_id varchar(255),@dseq_num varchar(255),@dshort_name varchar(255),@dudf_code_name varchar(255),@dparent_udf_code_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(udf_code_id) and
			not update(udf_type_id) and
			not update(seq_num) and
			not update(short_name) and
			not update(udf_code_name) and
			not update(parent_udf_code_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'UDFCODE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'UDFCODE',udf_code_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'UDFCODE', udf_code_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select udf_code_id,udf_type_id,seq_num,short_name,udf_code_name,parent_udf_code_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select udf_code_id,udf_type_id,seq_num,short_name,udf_code_name,parent_udf_code_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iudf_code_id,@iudf_type_id,@iseq_num,@ishort_name,@iudf_code_name,@iparent_udf_code_id, @idelete_session_id
  else
    fetch deleted_c into @dudf_code_id,@dudf_type_id,@dseq_num,@dshort_name,@dudf_code_name,@dparent_udf_code_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dudf_code_id;
				

    end else begin
    	set @pk1 = @iudf_code_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dudf_code_id,@dudf_type_id,@dseq_num,@dshort_name,@dudf_code_name,@dparent_udf_code_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(udf_code_id)  exec audit_data 'UDFCODE','udf_code_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_code_id,@iudf_code_id,@audit_data OUTPUT
      if (@loper='D') or  update(udf_type_id)  exec audit_data 'UDFCODE','udf_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_type_id,@iudf_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'UDFCODE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(short_name)  exec audit_data 'UDFCODE','short_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dshort_name,@ishort_name,@audit_data OUTPUT
      if (@loper='D') or  update(udf_code_name)  exec audit_data 'UDFCODE','udf_code_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_code_name,@iudf_code_name,@audit_data OUTPUT
      if (@loper='D') or  update(parent_udf_code_id)  exec audit_data 'UDFCODE','parent_udf_code_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dparent_udf_code_id,@iparent_udf_code_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'UDFCODE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'UDFCODE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iudf_code_id,@iudf_type_id,@iseq_num,@ishort_name,@iudf_code_name,@iparent_udf_code_id, @idelete_session_id;
    else
     fetch deleted_c into @dudf_code_id,@dudf_type_id,@dseq_num,@dshort_name,@dudf_code_name,@dparent_udf_code_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_UDFTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_UDFTYPE' AND xtype = 'TR')
    DROP trigger PRMAUD_UDFTYPE

PRMAUD_UDFTYPE
create trigger PRMAUD_UDFTYPE
on UDFTYPE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iudf_type_id varchar(255),@itable_name varchar(255),@iudf_type_name varchar(255),@iudf_type_label varchar(255),@ilogical_data_type varchar(255),@isuper_flag varchar(255),@iudf_code_short_len varchar(255),@iformula varchar(4000),@iindicator_expression varchar(4000),@idisp_data_flag varchar(255),@idisp_indicator_flag varchar(255),@isummary_indicator_expression varchar(4000),@isummary_method varchar(255)

  declare @dudf_type_id varchar(255),@dtable_name varchar(255),@dudf_type_name varchar(255),@dudf_type_label varchar(255),@dlogical_data_type varchar(255),@dsuper_flag varchar(255),@dudf_code_short_len varchar(255),@dformula varchar(4000),@dindicator_expression varchar(4000),@ddisp_data_flag varchar(255),@ddisp_indicator_flag varchar(255),@dsummary_indicator_expression varchar(4000),@dsummary_method varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(udf_type_id) and
			not update(table_name) and
			not update(udf_type_name) and
			not update(udf_type_label) and
			not update(logical_data_type) and
			not update(super_flag) and
			not update(udf_code_short_len) and
			not update(formula) and
			not update(indicator_expression) and
			not update(disp_data_flag) and
			not update(disp_indicator_flag) and
			not update(summary_indicator_expression) and
			not update(summary_method) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'UDFTYPE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'UDFTYPE',udf_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'UDFTYPE', udf_type_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select udf_type_id,table_name,udf_type_name,udf_type_label,logical_data_type,super_flag,udf_code_short_len,formula,indicator_expression,disp_data_flag,disp_indicator_flag,summary_indicator_expression,summary_method
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select udf_type_id,table_name,udf_type_name,udf_type_label,logical_data_type,super_flag,udf_code_short_len,formula,indicator_expression,disp_data_flag,disp_indicator_flag,summary_indicator_expression,summary_method
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iudf_type_id,@itable_name,@iudf_type_name,@iudf_type_label,@ilogical_data_type,@isuper_flag,@iudf_code_short_len,@iformula,@iindicator_expression,@idisp_data_flag,@idisp_indicator_flag,@isummary_indicator_expression,@isummary_method, @idelete_session_id
  else
    fetch deleted_c into @dudf_type_id,@dtable_name,@dudf_type_name,@dudf_type_label,@dlogical_data_type,@dsuper_flag,@dudf_code_short_len,@dformula,@dindicator_expression,@ddisp_data_flag,@ddisp_indicator_flag,@dsummary_indicator_expression,@dsummary_method, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dudf_type_id;
				

    end else begin
    	set @pk1 = @iudf_type_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dudf_type_id,@dtable_name,@dudf_type_name,@dudf_type_label,@dlogical_data_type,@dsuper_flag,@dudf_code_short_len,@dformula,@dindicator_expression,@ddisp_data_flag,@ddisp_indicator_flag,@dsummary_indicator_expression,@dsummary_method, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(udf_type_id)  exec audit_data 'UDFTYPE','udf_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_type_id,@iudf_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(table_name)  exec audit_data 'UDFTYPE','table_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtable_name,@itable_name,@audit_data OUTPUT
      if (@loper='D') or  update(udf_type_name)  exec audit_data 'UDFTYPE','udf_type_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_type_name,@iudf_type_name,@audit_data OUTPUT
      if (@loper='D') or  update(udf_type_label)  exec audit_data 'UDFTYPE','udf_type_label',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_type_label,@iudf_type_label,@audit_data OUTPUT
      if (@loper='D') or  update(logical_data_type)  exec audit_data 'UDFTYPE','logical_data_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlogical_data_type,@ilogical_data_type,@audit_data OUTPUT
      if (@loper='D') or  update(super_flag)  exec audit_data 'UDFTYPE','super_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsuper_flag,@isuper_flag,@audit_data OUTPUT
      if (@loper='D') or  update(udf_code_short_len)  exec audit_data 'UDFTYPE','udf_code_short_len',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_code_short_len,@iudf_code_short_len,@audit_data OUTPUT
      if (@loper='D') or  update(formula)  exec audit_data 'UDFTYPE','formula',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dformula,@iformula,@audit_data OUTPUT
      if (@loper='D') or  update(indicator_expression)  exec audit_data 'UDFTYPE','indicator_expression',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dindicator_expression,@iindicator_expression,@audit_data OUTPUT
      if (@loper='D') or  update(disp_data_flag)  exec audit_data 'UDFTYPE','disp_data_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddisp_data_flag,@idisp_data_flag,@audit_data OUTPUT
      if (@loper='D') or  update(disp_indicator_flag)  exec audit_data 'UDFTYPE','disp_indicator_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddisp_indicator_flag,@idisp_indicator_flag,@audit_data OUTPUT
      if (@loper='D') or  update(summary_indicator_expression)  exec audit_data 'UDFTYPE','summary_indicator_expression',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsummary_indicator_expression,@isummary_indicator_expression,@audit_data OUTPUT
      if (@loper='D') or  update(summary_method)  exec audit_data 'UDFTYPE','summary_method',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dsummary_method,@isummary_method,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'UDFTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'UDFTYPE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iudf_type_id,@itable_name,@iudf_type_name,@iudf_type_label,@ilogical_data_type,@isuper_flag,@iudf_code_short_len,@iformula,@iindicator_expression,@idisp_data_flag,@idisp_indicator_flag,@isummary_indicator_expression,@isummary_method, @idelete_session_id;
    else
     fetch deleted_c into @dudf_type_id,@dtable_name,@dudf_type_name,@dudf_type_label,@dlogical_data_type,@dsuper_flag,@dudf_code_short_len,@dformula,@dindicator_expression,@ddisp_data_flag,@ddisp_indicator_flag,@dsummary_indicator_expression,@dsummary_method, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_UDFVALUE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_UDFVALUE' AND xtype = 'TR')
    DROP trigger PRMAUD_UDFVALUE

PRMAUD_UDFVALUE
create trigger PRMAUD_UDFVALUE
on UDFVALUE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iudf_type_id varchar(255),@ifk_id varchar(255),@iproj_id varchar(255),@iudf_date varchar(255),@iudf_text varchar(255),@iudf_number varchar(255),@iudf_code_id varchar(255),@itable_name varchar(255)

  declare @dudf_type_id varchar(255),@dfk_id varchar(255),@dproj_id varchar(255),@dudf_date varchar(255),@dudf_text varchar(255),@dudf_number varchar(255),@dudf_code_id varchar(255),@dtable_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(udf_type_id) and
			not update(fk_id) and
			not update(proj_id) and
			not update(udf_date) and
			not update(udf_text) and
			not update(udf_number) and
			not update(udf_code_id) and
			not update(table_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'UDFVALUE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'UDFVALUE',udf_type_id,fk_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'UDFVALUE', udf_type_id,fk_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select udf_type_id,fk_id,proj_id,udf_date,udf_text,udf_number,udf_code_id,table_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select udf_type_id,fk_id,proj_id,udf_date,udf_text,udf_number,udf_code_id,table_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iudf_type_id,@ifk_id,@iproj_id,@iudf_date,@iudf_text,@iudf_number,@iudf_code_id,@itable_name, @idelete_session_id
  else
    fetch deleted_c into @dudf_type_id,@dfk_id,@dproj_id,@dudf_date,@dudf_text,@dudf_number,@dudf_code_id,@dtable_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dudf_type_id;
				
set @pk2 = @dfk_id;
				

    end else begin
    	set @pk1 = @iudf_type_id;
				
set @pk2 = @ifk_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dudf_type_id,@dfk_id,@dproj_id,@dudf_date,@dudf_text,@dudf_number,@dudf_code_id,@dtable_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(udf_type_id)  exec audit_data 'UDFVALUE','udf_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_type_id,@iudf_type_id,@audit_data OUTPUT
      if (@loper='D') or  update(fk_id)  exec audit_data 'UDFVALUE','fk_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfk_id,@ifk_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'UDFVALUE','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(udf_date)  exec audit_data 'UDFVALUE','udf_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_date,@iudf_date,@audit_data OUTPUT
      if (@loper='D') or  update(udf_text)  exec audit_data 'UDFVALUE','udf_text',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_text,@iudf_text,@audit_data OUTPUT
      if (@loper='D') or  update(udf_number)  exec audit_data 'UDFVALUE','udf_number',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_number,@iudf_number,@audit_data OUTPUT
      if (@loper='D') or  update(udf_code_id)  exec audit_data 'UDFVALUE','udf_code_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dudf_code_id,@iudf_code_id,@audit_data OUTPUT
      if (@loper='D') or  update(table_name)  exec audit_data 'UDFVALUE','table_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtable_name,@itable_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'UDFVALUE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'UDFVALUE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iudf_type_id,@ifk_id,@iproj_id,@iudf_date,@iudf_text,@iudf_number,@iudf_code_id,@itable_name, @idelete_session_id;
    else
     fetch deleted_c into @dudf_type_id,@dfk_id,@dproj_id,@dudf_date,@dudf_text,@dudf_number,@dudf_code_id,@dtable_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_UMEASURE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_UMEASURE' AND xtype = 'TR')
    DROP trigger PRMAUD_UMEASURE

PRMAUD_UMEASURE
create trigger PRMAUD_UMEASURE
on UMEASURE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iunit_id varchar(255),@iseq_num varchar(255),@iunit_name varchar(255),@iunit_abbrev varchar(255)

  declare @dunit_id varchar(255),@dseq_num varchar(255),@dunit_name varchar(255),@dunit_abbrev varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(unit_id) and
			not update(seq_num) and
			not update(unit_name) and
			not update(unit_abbrev) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'UMEASURE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'UMEASURE',unit_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'UMEASURE', unit_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select unit_id,seq_num,unit_name,unit_abbrev
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select unit_id,seq_num,unit_name,unit_abbrev
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iunit_id,@iseq_num,@iunit_name,@iunit_abbrev, @idelete_session_id
  else
    fetch deleted_c into @dunit_id,@dseq_num,@dunit_name,@dunit_abbrev, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dunit_id;
				

    end else begin
    	set @pk1 = @iunit_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dunit_id,@dseq_num,@dunit_name,@dunit_abbrev, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(unit_id)  exec audit_data 'UMEASURE','unit_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dunit_id,@iunit_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'UMEASURE','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(unit_name)  exec audit_data 'UMEASURE','unit_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dunit_name,@iunit_name,@audit_data OUTPUT
      if (@loper='D') or  update(unit_abbrev)  exec audit_data 'UMEASURE','unit_abbrev',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dunit_abbrev,@iunit_abbrev,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'UMEASURE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'UMEASURE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iunit_id,@iseq_num,@iunit_name,@iunit_abbrev, @idelete_session_id;
    else
     fetch deleted_c into @dunit_id,@dseq_num,@dunit_name,@dunit_abbrev, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_USERCOL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_USERCOL' AND xtype = 'TR')
    DROP trigger PRMAUD_USERCOL

PRMAUD_USERCOL
create trigger PRMAUD_USERCOL
on USERCOL
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iuser_col_id varchar(255),@itable_name varchar(255),@ilogical_data_type varchar(255),@iuser_col_name varchar(255),@iuser_col_label varchar(255)

  declare @duser_col_id varchar(255),@dtable_name varchar(255),@dlogical_data_type varchar(255),@duser_col_name varchar(255),@duser_col_label varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(user_col_id) and
			not update(table_name) and
			not update(logical_data_type) and
			not update(user_col_name) and
			not update(user_col_label) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'USERCOL', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERCOL',user_col_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERCOL', user_col_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select user_col_id,table_name,logical_data_type,user_col_name,user_col_label
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select user_col_id,table_name,logical_data_type,user_col_name,user_col_label
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iuser_col_id,@itable_name,@ilogical_data_type,@iuser_col_name,@iuser_col_label, @idelete_session_id
  else
    fetch deleted_c into @duser_col_id,@dtable_name,@dlogical_data_type,@duser_col_name,@duser_col_label, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @duser_col_id;
				

    end else begin
    	set @pk1 = @iuser_col_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @duser_col_id,@dtable_name,@dlogical_data_type,@duser_col_name,@duser_col_label, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(user_col_id)  exec audit_data 'USERCOL','user_col_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_col_id,@iuser_col_id,@audit_data OUTPUT
      if (@loper='D') or  update(table_name)  exec audit_data 'USERCOL','table_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtable_name,@itable_name,@audit_data OUTPUT
      if (@loper='D') or  update(logical_data_type)  exec audit_data 'USERCOL','logical_data_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dlogical_data_type,@ilogical_data_type,@audit_data OUTPUT
      if (@loper='D') or  update(user_col_name)  exec audit_data 'USERCOL','user_col_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_col_name,@iuser_col_name,@audit_data OUTPUT
      if (@loper='D') or  update(user_col_label)  exec audit_data 'USERCOL','user_col_label',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_col_label,@iuser_col_label,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'USERCOL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'USERCOL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iuser_col_id,@itable_name,@ilogical_data_type,@iuser_col_name,@iuser_col_label, @idelete_session_id;
    else
     fetch deleted_c into @duser_col_id,@dtable_name,@dlogical_data_type,@duser_col_name,@duser_col_label, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_USERDATA
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_USERDATA' AND xtype = 'TR')
    DROP trigger PRMAUD_USERDATA

PRMAUD_USERDATA
create trigger PRMAUD_USERDATA
on USERDATA
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iuser_data_id varchar(255),@iuser_id varchar(255),@itopic_name varchar(255)

  declare @duser_data_id varchar(255),@duser_id varchar(255),@dtopic_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(user_data_id) and
			not update(user_id) and
			not update(topic_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'USERDATA', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERDATA',user_data_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERDATA', user_data_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select user_data_id,user_id,topic_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select user_data_id,user_id,topic_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iuser_data_id,@iuser_id,@itopic_name, @idelete_session_id
  else
    fetch deleted_c into @duser_data_id,@duser_id,@dtopic_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @duser_data_id;
				

    end else begin
    	set @pk1 = @iuser_data_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @duser_data_id,@duser_id,@dtopic_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(user_data_id)  exec audit_data 'USERDATA','user_data_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_data_id,@iuser_data_id,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'USERDATA','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(topic_name)  exec audit_data 'USERDATA','topic_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtopic_name,@itopic_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'USERDATA', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'USERDATA', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iuser_data_id,@iuser_id,@itopic_name, @idelete_session_id;
    else
     fetch deleted_c into @duser_data_id,@duser_id,@dtopic_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_USERENG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_USERENG' AND xtype = 'TR')
    DROP trigger PRMAUD_USERENG

PRMAUD_USERENG
create trigger PRMAUD_USERENG
on USERENG
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iuser_eng_id varchar(255),@iuser_id varchar(255),@idb_engine_type varchar(255)

  declare @duser_eng_id varchar(255),@duser_id varchar(255),@ddb_engine_type varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(user_eng_id) and
			not update(user_id) and
			not update(db_engine_type) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'USERENG', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERENG',user_eng_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERENG', user_eng_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select user_eng_id,user_id,db_engine_type
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select user_eng_id,user_id,db_engine_type
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iuser_eng_id,@iuser_id,@idb_engine_type, @idelete_session_id
  else
    fetch deleted_c into @duser_eng_id,@duser_id,@ddb_engine_type, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @duser_eng_id;
				

    end else begin
    	set @pk1 = @iuser_eng_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @duser_eng_id,@duser_id,@ddb_engine_type, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(user_eng_id)  exec audit_data 'USERENG','user_eng_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_eng_id,@iuser_eng_id,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'USERENG','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(db_engine_type)  exec audit_data 'USERENG','db_engine_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddb_engine_type,@idb_engine_type,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'USERENG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'USERENG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iuser_eng_id,@iuser_id,@idb_engine_type, @idelete_session_id;
    else
     fetch deleted_c into @duser_eng_id,@duser_id,@ddb_engine_type, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_USEROBS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_USEROBS' AND xtype = 'TR')
    DROP trigger PRMAUD_USEROBS

PRMAUD_USEROBS
create trigger PRMAUD_USEROBS
on USEROBS
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iuser_id varchar(255),@iobs_id varchar(255),@iprof_id varchar(255)

  declare @duser_id varchar(255),@dobs_id varchar(255),@dprof_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(user_id) and
			not update(obs_id) and
			not update(prof_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'USEROBS', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USEROBS',user_id,obs_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USEROBS', user_id,obs_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select user_id,obs_id,prof_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select user_id,obs_id,prof_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iuser_id,@iobs_id,@iprof_id, @idelete_session_id
  else
    fetch deleted_c into @duser_id,@dobs_id,@dprof_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @duser_id;
				
set @pk2 = @dobs_id;
				

    end else begin
    	set @pk1 = @iuser_id;
				
set @pk2 = @iobs_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @duser_id,@dobs_id,@dprof_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(user_id)  exec audit_data 'USEROBS','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(obs_id)  exec audit_data 'USEROBS','obs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dobs_id,@iobs_id,@audit_data OUTPUT
      if (@loper='D') or  update(prof_id)  exec audit_data 'USEROBS','prof_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprof_id,@iprof_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'USEROBS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'USEROBS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iuser_id,@iobs_id,@iprof_id, @idelete_session_id;
    else
     fetch deleted_c into @duser_id,@dobs_id,@dprof_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_USEROPEN
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_USEROPEN' AND xtype = 'TR')
    DROP trigger PRMAUD_USEROPEN

PRMAUD_USEROPEN
create trigger PRMAUD_USEROPEN
on USEROPEN
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iuser_open_id varchar(255),@iuser_open_name varchar(255),@iuser_id varchar(255)

  declare @duser_open_id varchar(255),@duser_open_name varchar(255),@duser_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(user_open_id) and
			not update(user_open_name) and
			not update(user_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'USEROPEN', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USEROPEN',user_open_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USEROPEN', user_open_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select user_open_id,user_open_name,user_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select user_open_id,user_open_name,user_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iuser_open_id,@iuser_open_name,@iuser_id, @idelete_session_id
  else
    fetch deleted_c into @duser_open_id,@duser_open_name,@duser_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @duser_open_id;
				

    end else begin
    	set @pk1 = @iuser_open_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @duser_open_id,@duser_open_name,@duser_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(user_open_id)  exec audit_data 'USEROPEN','user_open_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_open_id,@iuser_open_id,@audit_data OUTPUT
      if (@loper='D') or  update(user_open_name)  exec audit_data 'USEROPEN','user_open_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_open_name,@iuser_open_name,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'USEROPEN','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'USEROPEN', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'USEROPEN', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iuser_open_id,@iuser_open_name,@iuser_id, @idelete_session_id;
    else
     fetch deleted_c into @duser_open_id,@duser_open_name,@duser_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_USROPNVAL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_USROPNVAL' AND xtype = 'TR')
    DROP trigger PRMAUD_USROPNVAL

PRMAUD_USROPNVAL
create trigger PRMAUD_USROPNVAL
on USROPNVAL
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iuser_open_id varchar(255),@ipk_id varchar(255),@iusropn_type varchar(255)

  declare @duser_open_id varchar(255),@dpk_id varchar(255),@dusropn_type varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(user_open_id) and
			not update(pk_id) and
			not update(usropn_type) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'USROPNVAL', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USROPNVAL',user_open_id,pk_id,usropn_type,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USROPNVAL', user_open_id,pk_id,usropn_type,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select user_open_id,pk_id,usropn_type
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select user_open_id,pk_id,usropn_type
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iuser_open_id,@ipk_id,@iusropn_type, @idelete_session_id
  else
    fetch deleted_c into @duser_open_id,@dpk_id,@dusropn_type, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @duser_open_id;
				
set @pk2 = @dpk_id;
				
set @pk3 = @dusropn_type;
				

    end else begin
    	set @pk1 = @iuser_open_id;
				
set @pk2 = @ipk_id;
				
set @pk3 = @iusropn_type;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @duser_open_id,@dpk_id,@dusropn_type, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(user_open_id)  exec audit_data 'USROPNVAL','user_open_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_open_id,@iuser_open_id,@audit_data OUTPUT
      if (@loper='D') or  update(pk_id)  exec audit_data 'USROPNVAL','pk_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpk_id,@ipk_id,@audit_data OUTPUT
      if (@loper='D') or  update(usropn_type)  exec audit_data 'USROPNVAL','usropn_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dusropn_type,@iusropn_type,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'USROPNVAL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'USROPNVAL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iuser_open_id,@ipk_id,@iusropn_type, @idelete_session_id;
    else
     fetch deleted_c into @duser_open_id,@dpk_id,@dusropn_type, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_USERS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_USERS' AND xtype = 'TR')
    DROP trigger PRMAUD_USERS

PRMAUD_USERS
create trigger PRMAUD_USERS
on USERS
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iuser_id varchar(255),@iglobal_flag varchar(255),@iemail_type varchar(255),@iuser_name varchar(255),@iprof_id varchar(255),@icurr_id varchar(255),@iall_rsrc_access_flag varchar(255),@ireport_user_flag varchar(255),@iguid varchar(255),@iemail_srv_user_name varchar(255),@ioffice_phone varchar(255),@iactual_name varchar(255),@iemail_send_server varchar(255),@iemail_addr varchar(255),@iemail_srv_passwd varchar(255),@ipasswd varchar(255),@inotify_prefs varchar(255),@inavi_view_id varchar(255),@ioverride_naviview_flag varchar(255),@iui_view_pref_id varchar(255),@icr_external_key varchar(4000),@icr_user_name varchar(255),@ifailed_login_attempts_cnt varchar(255)

  declare @duser_id varchar(255),@dglobal_flag varchar(255),@demail_type varchar(255),@duser_name varchar(255),@dprof_id varchar(255),@dcurr_id varchar(255),@dall_rsrc_access_flag varchar(255),@dreport_user_flag varchar(255),@dguid varchar(255),@demail_srv_user_name varchar(255),@doffice_phone varchar(255),@dactual_name varchar(255),@demail_send_server varchar(255),@demail_addr varchar(255),@demail_srv_passwd varchar(255),@dpasswd varchar(255),@dnotify_prefs varchar(255),@dnavi_view_id varchar(255),@doverride_naviview_flag varchar(255),@dui_view_pref_id varchar(255),@dcr_external_key varchar(4000),@dcr_user_name varchar(255),@dfailed_login_attempts_cnt varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(user_id) and
			not update(global_flag) and
			not update(email_type) and
			not update(user_name) and
			not update(prof_id) and
			not update(curr_id) and
			not update(all_rsrc_access_flag) and
			not update(report_user_flag) and
			not update(guid) and
			not update(email_srv_user_name) and
			not update(office_phone) and
			not update(actual_name) and
			not update(email_send_server) and
			not update(email_addr) and
			not update(email_srv_passwd) and
			not update(passwd) and
			not update(notify_prefs) and
			not update(navi_view_id) and
			not update(override_naviview_flag) and
			not update(ui_view_pref_id) and
			not update(cr_external_key) and
			not update(cr_user_name) and
			not update(failed_login_attempts_cnt) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'USERS', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERS',user_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERS', user_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select user_id,global_flag,email_type,user_name,prof_id,curr_id,all_rsrc_access_flag,report_user_flag,guid,email_srv_user_name,office_phone,actual_name,email_send_server,email_addr,email_srv_passwd,passwd,notify_prefs,navi_view_id,override_naviview_flag,ui_view_pref_id,cr_external_key,cr_user_name,failed_login_attempts_cnt
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select user_id,global_flag,email_type,user_name,prof_id,curr_id,all_rsrc_access_flag,report_user_flag,guid,email_srv_user_name,office_phone,actual_name,email_send_server,email_addr,email_srv_passwd,passwd,notify_prefs,navi_view_id,override_naviview_flag,ui_view_pref_id,cr_external_key,cr_user_name,failed_login_attempts_cnt
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iuser_id,@iglobal_flag,@iemail_type,@iuser_name,@iprof_id,@icurr_id,@iall_rsrc_access_flag,@ireport_user_flag,@iguid,@iemail_srv_user_name,@ioffice_phone,@iactual_name,@iemail_send_server,@iemail_addr,@iemail_srv_passwd,@ipasswd,@inotify_prefs,@inavi_view_id,@ioverride_naviview_flag,@iui_view_pref_id,@icr_external_key,@icr_user_name,@ifailed_login_attempts_cnt, @idelete_session_id
  else
    fetch deleted_c into @duser_id,@dglobal_flag,@demail_type,@duser_name,@dprof_id,@dcurr_id,@dall_rsrc_access_flag,@dreport_user_flag,@dguid,@demail_srv_user_name,@doffice_phone,@dactual_name,@demail_send_server,@demail_addr,@demail_srv_passwd,@dpasswd,@dnotify_prefs,@dnavi_view_id,@doverride_naviview_flag,@dui_view_pref_id,@dcr_external_key,@dcr_user_name,@dfailed_login_attempts_cnt, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @duser_id;
				

    end else begin
    	set @pk1 = @iuser_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @duser_id,@dglobal_flag,@demail_type,@duser_name,@dprof_id,@dcurr_id,@dall_rsrc_access_flag,@dreport_user_flag,@dguid,@demail_srv_user_name,@doffice_phone,@dactual_name,@demail_send_server,@demail_addr,@demail_srv_passwd,@dpasswd,@dnotify_prefs,@dnavi_view_id,@doverride_naviview_flag,@dui_view_pref_id,@dcr_external_key,@dcr_user_name,@dfailed_login_attempts_cnt, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(user_id)  exec audit_data 'USERS','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(global_flag)  exec audit_data 'USERS','global_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dglobal_flag,@iglobal_flag,@audit_data OUTPUT
      if (@loper='D') or  update(email_type)  exec audit_data 'USERS','email_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@demail_type,@iemail_type,@audit_data OUTPUT
      if (@loper='D') or  update(user_name)  exec audit_data 'USERS','user_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_name,@iuser_name,@audit_data OUTPUT
      if (@loper='D') or  update(prof_id)  exec audit_data 'USERS','prof_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dprof_id,@iprof_id,@audit_data OUTPUT
      if (@loper='D') or  update(curr_id)  exec audit_data 'USERS','curr_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcurr_id,@icurr_id,@audit_data OUTPUT
      if (@loper='D') or  update(all_rsrc_access_flag)  exec audit_data 'USERS','all_rsrc_access_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dall_rsrc_access_flag,@iall_rsrc_access_flag,@audit_data OUTPUT
      if (@loper='D') or  update(report_user_flag)  exec audit_data 'USERS','report_user_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dreport_user_flag,@ireport_user_flag,@audit_data OUTPUT
      if (@loper='D') or  update(guid)  exec audit_data 'USERS','guid',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dguid,@iguid,@audit_data OUTPUT
      if (@loper='D') or  update(email_srv_user_name)  exec audit_data 'USERS','email_srv_user_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@demail_srv_user_name,@iemail_srv_user_name,@audit_data OUTPUT
      if (@loper='D') or  update(office_phone)  exec audit_data 'USERS','office_phone',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@doffice_phone,@ioffice_phone,@audit_data OUTPUT
      if (@loper='D') or  update(actual_name)  exec audit_data 'USERS','actual_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dactual_name,@iactual_name,@audit_data OUTPUT
      if (@loper='D') or  update(email_send_server)  exec audit_data 'USERS','email_send_server',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@demail_send_server,@iemail_send_server,@audit_data OUTPUT
      if (@loper='D') or  update(email_addr)  exec audit_data 'USERS','email_addr',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@demail_addr,@iemail_addr,@audit_data OUTPUT
      if (@loper='D') or  update(email_srv_passwd)  exec audit_data 'USERS','email_srv_passwd',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@demail_srv_passwd,@iemail_srv_passwd,@audit_data OUTPUT
      if (@loper='D') or  update(passwd)  exec audit_data 'USERS','passwd',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dpasswd,@ipasswd,@audit_data OUTPUT
      if (@loper='D') or  update(notify_prefs)  exec audit_data 'USERS','notify_prefs',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dnotify_prefs,@inotify_prefs,@audit_data OUTPUT
      if (@loper='D') or  update(navi_view_id)  exec audit_data 'USERS','navi_view_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dnavi_view_id,@inavi_view_id,@audit_data OUTPUT
      if (@loper='D') or  update(override_naviview_flag)  exec audit_data 'USERS','override_naviview_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@doverride_naviview_flag,@ioverride_naviview_flag,@audit_data OUTPUT
      if (@loper='D') or  update(ui_view_pref_id)  exec audit_data 'USERS','ui_view_pref_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dui_view_pref_id,@iui_view_pref_id,@audit_data OUTPUT
      if (@loper='D') or  update(cr_external_key)  exec audit_data 'USERS','cr_external_key',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcr_external_key,@icr_external_key,@audit_data OUTPUT
      if (@loper='D') or  update(cr_user_name)  exec audit_data 'USERS','cr_user_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcr_user_name,@icr_user_name,@audit_data OUTPUT
      if (@loper='D') or  update(failed_login_attempts_cnt)  exec audit_data 'USERS','failed_login_attempts_cnt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfailed_login_attempts_cnt,@ifailed_login_attempts_cnt,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'USERS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'USERS', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iuser_id,@iglobal_flag,@iemail_type,@iuser_name,@iprof_id,@icurr_id,@iall_rsrc_access_flag,@ireport_user_flag,@iguid,@iemail_srv_user_name,@ioffice_phone,@iactual_name,@iemail_send_server,@iemail_addr,@iemail_srv_passwd,@ipasswd,@inotify_prefs,@inavi_view_id,@ioverride_naviview_flag,@iui_view_pref_id,@icr_external_key,@icr_user_name,@ifailed_login_attempts_cnt, @idelete_session_id;
    else
     fetch deleted_c into @duser_id,@dglobal_flag,@demail_type,@duser_name,@dprof_id,@dcurr_id,@dall_rsrc_access_flag,@dreport_user_flag,@dguid,@demail_srv_user_name,@doffice_phone,@dactual_name,@demail_send_server,@demail_addr,@demail_srv_passwd,@dpasswd,@dnotify_prefs,@dnavi_view_id,@doverride_naviview_flag,@dui_view_pref_id,@dcr_external_key,@dcr_user_name,@dfailed_login_attempts_cnt, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_USERWKSP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_USERWKSP' AND xtype = 'TR')
    DROP trigger PRMAUD_USERWKSP

PRMAUD_USERWKSP
create trigger PRMAUD_USERWKSP
on USERWKSP
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iuser_id varchar(255),@iworkspace_id varchar(255),@iproj_id varchar(255)

  declare @duser_id varchar(255),@dworkspace_id varchar(255),@dproj_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(user_id) and
			not update(workspace_id) and
			not update(proj_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'USERWKSP', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERWKSP',user_id,workspace_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'USERWKSP', user_id,workspace_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select user_id,workspace_id,proj_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select user_id,workspace_id,proj_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iuser_id,@iworkspace_id,@iproj_id, @idelete_session_id
  else
    fetch deleted_c into @duser_id,@dworkspace_id,@dproj_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @duser_id;
				
set @pk2 = @dworkspace_id;
				

    end else begin
    	set @pk1 = @iuser_id;
				
set @pk2 = @iworkspace_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @duser_id,@dworkspace_id,@dproj_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(user_id)  exec audit_data 'USERWKSP','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(workspace_id)  exec audit_data 'USERWKSP','workspace_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dworkspace_id,@iworkspace_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'USERWKSP','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'USERWKSP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'USERWKSP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iuser_id,@iworkspace_id,@iproj_id, @idelete_session_id;
    else
     fetch deleted_c into @duser_id,@dworkspace_id,@dproj_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_VIEWPREF
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_VIEWPREF' AND xtype = 'TR')
    DROP trigger PRMAUD_VIEWPREF

PRMAUD_VIEWPREF
create trigger PRMAUD_VIEWPREF
on VIEWPREF
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iview_pref_id varchar(255),@iview_pref_name varchar(255),@iview_pref_type varchar(255),@iuser_id varchar(255)

  declare @dview_pref_id varchar(255),@dview_pref_name varchar(255),@dview_pref_type varchar(255),@duser_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(view_pref_id) and
			not update(view_pref_name) and
			not update(view_pref_type) and
			not update(user_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'VIEWPREF', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'VIEWPREF',view_pref_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'VIEWPREF', view_pref_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select view_pref_id,view_pref_name,view_pref_type,user_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select view_pref_id,view_pref_name,view_pref_type,user_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iview_pref_id,@iview_pref_name,@iview_pref_type,@iuser_id, @idelete_session_id
  else
    fetch deleted_c into @dview_pref_id,@dview_pref_name,@dview_pref_type,@duser_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dview_pref_id;
				

    end else begin
    	set @pk1 = @iview_pref_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dview_pref_id,@dview_pref_name,@dview_pref_type,@duser_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(view_pref_id)  exec audit_data 'VIEWPREF','view_pref_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dview_pref_id,@iview_pref_id,@audit_data OUTPUT
      if (@loper='D') or  update(view_pref_name)  exec audit_data 'VIEWPREF','view_pref_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dview_pref_name,@iview_pref_name,@audit_data OUTPUT
      if (@loper='D') or  update(view_pref_type)  exec audit_data 'VIEWPREF','view_pref_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dview_pref_type,@iview_pref_type,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'VIEWPREF','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'VIEWPREF', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'VIEWPREF', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iview_pref_id,@iview_pref_name,@iview_pref_type,@iuser_id, @idelete_session_id;
    else
     fetch deleted_c into @dview_pref_id,@dview_pref_name,@dview_pref_type,@duser_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_VWPREFDASH
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_VWPREFDASH' AND xtype = 'TR')
    DROP trigger PRMAUD_VWPREFDASH

PRMAUD_VWPREFDASH
create trigger PRMAUD_VWPREFDASH
on VWPREFDASH
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @idashboard_id varchar(255),@iview_pref_id varchar(255),@iseq_num varchar(255)

  declare @ddashboard_id varchar(255),@dview_pref_id varchar(255),@dseq_num varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(dashboard_id) and
			not update(view_pref_id) and
			not update(seq_num) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'VWPREFDASH', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'VWPREFDASH',dashboard_id,view_pref_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'VWPREFDASH', dashboard_id,view_pref_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select dashboard_id,view_pref_id,seq_num
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select dashboard_id,view_pref_id,seq_num
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @idashboard_id,@iview_pref_id,@iseq_num, @idelete_session_id
  else
    fetch deleted_c into @ddashboard_id,@dview_pref_id,@dseq_num, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @ddashboard_id;
				
set @pk2 = @dview_pref_id;
				

    end else begin
    	set @pk1 = @idashboard_id;
				
set @pk2 = @iview_pref_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @ddashboard_id,@dview_pref_id,@dseq_num, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(dashboard_id)  exec audit_data 'VWPREFDASH','dashboard_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@ddashboard_id,@idashboard_id,@audit_data OUTPUT
      if (@loper='D') or  update(view_pref_id)  exec audit_data 'VWPREFDASH','view_pref_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dview_pref_id,@iview_pref_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'VWPREFDASH','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'VWPREFDASH', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'VWPREFDASH', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @idashboard_id,@iview_pref_id,@iseq_num, @idelete_session_id;
    else
     fetch deleted_c into @ddashboard_id,@dview_pref_id,@dseq_num, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_VWPREFDATA
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_VWPREFDATA' AND xtype = 'TR')
    DROP trigger PRMAUD_VWPREFDATA

PRMAUD_VWPREFDATA
create trigger PRMAUD_VWPREFDATA
on VWPREFDATA
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iview_pref_id varchar(255),@iview_pref_key varchar(255),@iview_pref_value varchar(4000)

  declare @dview_pref_id varchar(255),@dview_pref_key varchar(255),@dview_pref_value varchar(4000)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(view_pref_id) and
			not update(view_pref_key) and
			not update(view_pref_value) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'VWPREFDATA', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'VWPREFDATA',view_pref_id,view_pref_key,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'VWPREFDATA', view_pref_id,view_pref_key,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select view_pref_id,view_pref_key,view_pref_value
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select view_pref_id,view_pref_key,view_pref_value
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iview_pref_id,@iview_pref_key,@iview_pref_value, @idelete_session_id
  else
    fetch deleted_c into @dview_pref_id,@dview_pref_key,@dview_pref_value, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dview_pref_id;
				
set @pk2 = @dview_pref_key;
				

    end else begin
    	set @pk1 = @iview_pref_id;
				
set @pk2 = @iview_pref_key;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dview_pref_id,@dview_pref_key,@dview_pref_value, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(view_pref_id)  exec audit_data 'VWPREFDATA','view_pref_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dview_pref_id,@iview_pref_id,@audit_data OUTPUT
      if (@loper='D') or  update(view_pref_key)  exec audit_data 'VWPREFDATA','view_pref_key',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dview_pref_key,@iview_pref_key,@audit_data OUTPUT
      if (@loper='D') or  update(view_pref_value)  exec audit_data 'VWPREFDATA','view_pref_value',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dview_pref_value,@iview_pref_value,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'VWPREFDATA', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'VWPREFDATA', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iview_pref_id,@iview_pref_key,@iview_pref_value, @idelete_session_id;
    else
     fetch deleted_c into @dview_pref_id,@dview_pref_key,@dview_pref_value, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_VWPREFUSER
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_VWPREFUSER' AND xtype = 'TR')
    DROP trigger PRMAUD_VWPREFUSER

PRMAUD_VWPREFUSER
create trigger PRMAUD_VWPREFUSER
on VWPREFUSER
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iview_pref_id varchar(255),@iuser_id varchar(255)

  declare @dview_pref_id varchar(255),@duser_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(view_pref_id) and
			not update(user_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'VWPREFUSER', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'VWPREFUSER',view_pref_id,user_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'VWPREFUSER', view_pref_id,user_id,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select view_pref_id,user_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select view_pref_id,user_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iview_pref_id,@iuser_id, @idelete_session_id
  else
    fetch deleted_c into @dview_pref_id,@duser_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dview_pref_id;
				
set @pk2 = @duser_id;
				

    end else begin
    	set @pk1 = @iview_pref_id;
				
set @pk2 = @iuser_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dview_pref_id,@duser_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(view_pref_id)  exec audit_data 'VWPREFUSER','view_pref_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dview_pref_id,@iview_pref_id,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'VWPREFUSER','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'VWPREFUSER', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'VWPREFUSER', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iview_pref_id,@iuser_id, @idelete_session_id;
    else
     fetch deleted_c into @dview_pref_id,@duser_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_VIEWPROP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_VIEWPROP' AND xtype = 'TR')
    DROP trigger PRMAUD_VIEWPROP

PRMAUD_VIEWPROP
create trigger PRMAUD_VIEWPROP
on VIEWPROP
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iview_id varchar(255),@iview_name varchar(255),@iuser_id varchar(255),@iproj_id varchar(255),@iview_type varchar(255)

  declare @dview_id varchar(255),@dview_name varchar(255),@duser_id varchar(255),@dproj_id varchar(255),@dview_type varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(view_id) and
			not update(view_name) and
			not update(user_id) and
			not update(proj_id) and
			not update(view_type) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'VIEWPROP', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'VIEWPROP',view_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'VIEWPROP', view_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select view_id,view_name,user_id,proj_id,view_type
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select view_id,view_name,user_id,proj_id,view_type
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iview_id,@iview_name,@iuser_id,@iproj_id,@iview_type, @idelete_session_id
  else
    fetch deleted_c into @dview_id,@dview_name,@duser_id,@dproj_id,@dview_type, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dview_id;
				

    end else begin
    	set @pk1 = @iview_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dview_id,@dview_name,@duser_id,@dproj_id,@dview_type, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(view_id)  exec audit_data 'VIEWPROP','view_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dview_id,@iview_id,@audit_data OUTPUT
      if (@loper='D') or  update(view_name)  exec audit_data 'VIEWPROP','view_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dview_name,@iview_name,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'VIEWPROP','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'VIEWPROP','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(view_type)  exec audit_data 'VIEWPROP','view_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dview_type,@iview_type,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'VIEWPROP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'VIEWPROP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iview_id,@iview_name,@iuser_id,@iproj_id,@iview_type, @idelete_session_id;
    else
     fetch deleted_c into @dview_id,@dview_name,@duser_id,@dproj_id,@dview_type, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_WBSBUDG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_WBSBUDG' AND xtype = 'TR')
    DROP trigger PRMAUD_WBSBUDG

PRMAUD_WBSBUDG
create trigger PRMAUD_WBSBUDG
on WBSBUDG
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iwbs_budg_id varchar(255),@iproj_id varchar(255),@iwbs_id varchar(255),@istart_date varchar(255),@ispend_cost varchar(255),@ibenefit_cost varchar(255)

  declare @dwbs_budg_id varchar(255),@dproj_id varchar(255),@dwbs_id varchar(255),@dstart_date varchar(255),@dspend_cost varchar(255),@dbenefit_cost varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(wbs_budg_id) and
			not update(proj_id) and
			not update(wbs_id) and
			not update(start_date) and
			not update(spend_cost) and
			not update(benefit_cost) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'WBSBUDG', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WBSBUDG',wbs_budg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WBSBUDG', wbs_budg_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select wbs_budg_id,proj_id,wbs_id,start_date,spend_cost,benefit_cost
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select wbs_budg_id,proj_id,wbs_id,start_date,spend_cost,benefit_cost
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iwbs_budg_id,@iproj_id,@iwbs_id,@istart_date,@ispend_cost,@ibenefit_cost, @idelete_session_id
  else
    fetch deleted_c into @dwbs_budg_id,@dproj_id,@dwbs_id,@dstart_date,@dspend_cost,@dbenefit_cost, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dwbs_budg_id;
				

    end else begin
    	set @pk1 = @iwbs_budg_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dwbs_budg_id,@dproj_id,@dwbs_id,@dstart_date,@dspend_cost,@dbenefit_cost, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(wbs_budg_id)  exec audit_data 'WBSBUDG','wbs_budg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_budg_id,@iwbs_budg_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'WBSBUDG','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_id)  exec audit_data 'WBSBUDG','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(start_date)  exec audit_data 'WBSBUDG','start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstart_date,@istart_date,@audit_data OUTPUT
      if (@loper='D') or  update(spend_cost)  exec audit_data 'WBSBUDG','spend_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dspend_cost,@ispend_cost,@audit_data OUTPUT
      if (@loper='D') or  update(benefit_cost)  exec audit_data 'WBSBUDG','benefit_cost',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dbenefit_cost,@ibenefit_cost,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'WBSBUDG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'WBSBUDG', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iwbs_budg_id,@iproj_id,@iwbs_id,@istart_date,@ispend_cost,@ibenefit_cost, @idelete_session_id;
    else
     fetch deleted_c into @dwbs_budg_id,@dproj_id,@dwbs_id,@dstart_date,@dspend_cost,@dbenefit_cost, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_WBSMEMO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_WBSMEMO' AND xtype = 'TR')
    DROP trigger PRMAUD_WBSMEMO

PRMAUD_WBSMEMO
create trigger PRMAUD_WBSMEMO
on WBSMEMO
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iwbs_memo_id varchar(255),@iproj_id varchar(255),@iwbs_id varchar(255),@imemo_type_id varchar(255)

  declare @dwbs_memo_id varchar(255),@dproj_id varchar(255),@dwbs_id varchar(255),@dmemo_type_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(wbs_memo_id) and
			not update(proj_id) and
			not update(wbs_id) and
			not update(memo_type_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'WBSMEMO', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WBSMEMO',wbs_memo_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WBSMEMO', wbs_memo_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select wbs_memo_id,proj_id,wbs_id,memo_type_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select wbs_memo_id,proj_id,wbs_id,memo_type_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iwbs_memo_id,@iproj_id,@iwbs_id,@imemo_type_id, @idelete_session_id
  else
    fetch deleted_c into @dwbs_memo_id,@dproj_id,@dwbs_id,@dmemo_type_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dwbs_memo_id;
				

    end else begin
    	set @pk1 = @iwbs_memo_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dwbs_memo_id,@dproj_id,@dwbs_id,@dmemo_type_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(wbs_memo_id)  exec audit_data 'WBSMEMO','wbs_memo_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_memo_id,@iwbs_memo_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'WBSMEMO','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_id)  exec audit_data 'WBSMEMO','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(memo_type_id)  exec audit_data 'WBSMEMO','memo_type_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmemo_type_id,@imemo_type_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'WBSMEMO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'WBSMEMO', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iwbs_memo_id,@iproj_id,@iwbs_id,@imemo_type_id, @idelete_session_id;
    else
     fetch deleted_c into @dwbs_memo_id,@dproj_id,@dwbs_id,@dmemo_type_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_WBRSCAT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_WBRSCAT' AND xtype = 'TR')
    DROP trigger PRMAUD_WBRSCAT

PRMAUD_WBRSCAT
create trigger PRMAUD_WBRSCAT
on WBRSCAT
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iwbrs_cat_id varchar(255),@iwbrs_cat_name varchar(255)

  declare @dwbrs_cat_id varchar(255),@dwbrs_cat_name varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(wbrs_cat_id) and
			not update(wbrs_cat_name) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'WBRSCAT', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WBRSCAT',wbrs_cat_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WBRSCAT', wbrs_cat_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select wbrs_cat_id,wbrs_cat_name
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select wbrs_cat_id,wbrs_cat_name
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iwbrs_cat_id,@iwbrs_cat_name, @idelete_session_id
  else
    fetch deleted_c into @dwbrs_cat_id,@dwbrs_cat_name, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dwbrs_cat_id;
				

    end else begin
    	set @pk1 = @iwbrs_cat_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dwbrs_cat_id,@dwbrs_cat_name, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(wbrs_cat_id)  exec audit_data 'WBRSCAT','wbrs_cat_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbrs_cat_id,@iwbrs_cat_id,@audit_data OUTPUT
      if (@loper='D') or  update(wbrs_cat_name)  exec audit_data 'WBRSCAT','wbrs_cat_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbrs_cat_name,@iwbrs_cat_name,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'WBRSCAT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'WBRSCAT', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iwbrs_cat_id,@iwbrs_cat_name, @idelete_session_id;
    else
     fetch deleted_c into @dwbrs_cat_id,@dwbrs_cat_name, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_WBSRSRC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_WBSRSRC' AND xtype = 'TR')
    DROP trigger PRMAUD_WBSRSRC

PRMAUD_WBSRSRC
create trigger PRMAUD_WBSRSRC
on WBSRSRC
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iwbsrsrc_id varchar(255),@iwbs_id varchar(255),@irsrc_id varchar(255),@iproj_id varchar(255),@icommitted_flag varchar(255),@istart_date varchar(255),@iend_date varchar(255),@iauto_compute_dates_flag varchar(255),@irole_id varchar(255),@irsrc_request_data varchar(4000),@iallocation_pct varchar(255),@iwbrs_cat_id varchar(255)

  declare @dwbsrsrc_id varchar(255),@dwbs_id varchar(255),@drsrc_id varchar(255),@dproj_id varchar(255),@dcommitted_flag varchar(255),@dstart_date varchar(255),@dend_date varchar(255),@dauto_compute_dates_flag varchar(255),@drole_id varchar(255),@drsrc_request_data varchar(4000),@dallocation_pct varchar(255),@dwbrs_cat_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(wbsrsrc_id) and
			not update(wbs_id) and
			not update(rsrc_id) and
			not update(proj_id) and
			not update(committed_flag) and
			not update(start_date) and
			not update(end_date) and
			not update(auto_compute_dates_flag) and
			not update(role_id) and
			not update(rsrc_request_data) and
			not update(allocation_pct) and
			not update(wbrs_cat_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'WBSRSRC', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WBSRSRC',wbsrsrc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WBSRSRC', wbsrsrc_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select wbsrsrc_id,wbs_id,rsrc_id,proj_id,committed_flag,start_date,end_date,auto_compute_dates_flag,role_id,rsrc_request_data,allocation_pct,wbrs_cat_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select wbsrsrc_id,wbs_id,rsrc_id,proj_id,committed_flag,start_date,end_date,auto_compute_dates_flag,role_id,rsrc_request_data,allocation_pct,wbrs_cat_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iwbsrsrc_id,@iwbs_id,@irsrc_id,@iproj_id,@icommitted_flag,@istart_date,@iend_date,@iauto_compute_dates_flag,@irole_id,@irsrc_request_data,@iallocation_pct,@iwbrs_cat_id, @idelete_session_id
  else
    fetch deleted_c into @dwbsrsrc_id,@dwbs_id,@drsrc_id,@dproj_id,@dcommitted_flag,@dstart_date,@dend_date,@dauto_compute_dates_flag,@drole_id,@drsrc_request_data,@dallocation_pct,@dwbrs_cat_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dwbsrsrc_id;
				

    end else begin
    	set @pk1 = @iwbsrsrc_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dwbsrsrc_id,@dwbs_id,@drsrc_id,@dproj_id,@dcommitted_flag,@dstart_date,@dend_date,@dauto_compute_dates_flag,@drole_id,@drsrc_request_data,@dallocation_pct,@dwbrs_cat_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(wbsrsrc_id)  exec audit_data 'WBSRSRC','wbsrsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbsrsrc_id,@iwbsrsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_id)  exec audit_data 'WBSRSRC','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_id)  exec audit_data 'WBSRSRC','rsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_id,@irsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'WBSRSRC','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(committed_flag)  exec audit_data 'WBSRSRC','committed_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcommitted_flag,@icommitted_flag,@audit_data OUTPUT
      if (@loper='D') or  update(start_date)  exec audit_data 'WBSRSRC','start_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstart_date,@istart_date,@audit_data OUTPUT
      if (@loper='D') or  update(end_date)  exec audit_data 'WBSRSRC','end_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dend_date,@iend_date,@audit_data OUTPUT
      if (@loper='D') or  update(auto_compute_dates_flag)  exec audit_data 'WBSRSRC','auto_compute_dates_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dauto_compute_dates_flag,@iauto_compute_dates_flag,@audit_data OUTPUT
      if (@loper='D') or  update(role_id)  exec audit_data 'WBSRSRC','role_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drole_id,@irole_id,@audit_data OUTPUT
      if (@loper='D') or  update(rsrc_request_data)  exec audit_data 'WBSRSRC','rsrc_request_data',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@drsrc_request_data,@irsrc_request_data,@audit_data OUTPUT
      if (@loper='D') or  update(allocation_pct)  exec audit_data 'WBSRSRC','allocation_pct',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dallocation_pct,@iallocation_pct,@audit_data OUTPUT
      if (@loper='D') or  update(wbrs_cat_id)  exec audit_data 'WBSRSRC','wbrs_cat_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbrs_cat_id,@iwbrs_cat_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'WBSRSRC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'WBSRSRC', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iwbsrsrc_id,@iwbs_id,@irsrc_id,@iproj_id,@icommitted_flag,@istart_date,@iend_date,@iauto_compute_dates_flag,@irole_id,@irsrc_request_data,@iallocation_pct,@iwbrs_cat_id, @idelete_session_id;
    else
     fetch deleted_c into @dwbsrsrc_id,@dwbs_id,@drsrc_id,@dproj_id,@dcommitted_flag,@dstart_date,@dend_date,@dauto_compute_dates_flag,@drole_id,@drsrc_request_data,@dallocation_pct,@dwbrs_cat_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_WBSRSRC_QTY
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_WBSRSRC_QTY' AND xtype = 'TR')
    DROP trigger PRMAUD_WBSRSRC_QTY

PRMAUD_WBSRSRC_QTY
create trigger PRMAUD_WBSRSRC_QTY
on WBSRSRC_QTY
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iwbsrsrc_id varchar(255),@iweek_start varchar(255),@imonth_start varchar(255),@iqty varchar(255),@ifin_dates_id1 varchar(255),@ifin_qty1 varchar(255),@ifin_dates_id2 varchar(255),@ifin_qty2 varchar(255)

  declare @dwbsrsrc_id varchar(255),@dweek_start varchar(255),@dmonth_start varchar(255),@dqty varchar(255),@dfin_dates_id1 varchar(255),@dfin_qty1 varchar(255),@dfin_dates_id2 varchar(255),@dfin_qty2 varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(wbsrsrc_id) and
			not update(week_start) and
			not update(month_start) and
			not update(qty) and
			not update(fin_dates_id1) and
			not update(fin_qty1) and
			not update(fin_dates_id2) and
			not update(fin_qty2) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'WBSRSRC_QTY', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WBSRSRC_QTY',wbsrsrc_id,week_start,month_start,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WBSRSRC_QTY', wbsrsrc_id,week_start,month_start,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select wbsrsrc_id,week_start,month_start,qty,fin_dates_id1,fin_qty1,fin_dates_id2,fin_qty2
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select wbsrsrc_id,week_start,month_start,qty,fin_dates_id1,fin_qty1,fin_dates_id2,fin_qty2
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iwbsrsrc_id,@iweek_start,@imonth_start,@iqty,@ifin_dates_id1,@ifin_qty1,@ifin_dates_id2,@ifin_qty2, @idelete_session_id
  else
    fetch deleted_c into @dwbsrsrc_id,@dweek_start,@dmonth_start,@dqty,@dfin_dates_id1,@dfin_qty1,@dfin_dates_id2,@dfin_qty2, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dwbsrsrc_id;
				
set @pk2 = @dweek_start;
				
set @pk3 = @dmonth_start;
				

    end else begin
    	set @pk1 = @iwbsrsrc_id;
				
set @pk2 = @iweek_start;
				
set @pk3 = @imonth_start;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dwbsrsrc_id,@dweek_start,@dmonth_start,@dqty,@dfin_dates_id1,@dfin_qty1,@dfin_dates_id2,@dfin_qty2, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(wbsrsrc_id)  exec audit_data 'WBSRSRC_QTY','wbsrsrc_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbsrsrc_id,@iwbsrsrc_id,@audit_data OUTPUT
      if (@loper='D') or  update(week_start)  exec audit_data 'WBSRSRC_QTY','week_start',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dweek_start,@iweek_start,@audit_data OUTPUT
      if (@loper='D') or  update(month_start)  exec audit_data 'WBSRSRC_QTY','month_start',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dmonth_start,@imonth_start,@audit_data OUTPUT
      if (@loper='D') or  update(qty)  exec audit_data 'WBSRSRC_QTY','qty',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dqty,@iqty,@audit_data OUTPUT
      if (@loper='D') or  update(fin_dates_id1)  exec audit_data 'WBSRSRC_QTY','fin_dates_id1',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfin_dates_id1,@ifin_dates_id1,@audit_data OUTPUT
      if (@loper='D') or  update(fin_qty1)  exec audit_data 'WBSRSRC_QTY','fin_qty1',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfin_qty1,@ifin_qty1,@audit_data OUTPUT
      if (@loper='D') or  update(fin_dates_id2)  exec audit_data 'WBSRSRC_QTY','fin_dates_id2',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfin_dates_id2,@ifin_dates_id2,@audit_data OUTPUT
      if (@loper='D') or  update(fin_qty2)  exec audit_data 'WBSRSRC_QTY','fin_qty2',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dfin_qty2,@ifin_qty2,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'WBSRSRC_QTY', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'WBSRSRC_QTY', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iwbsrsrc_id,@iweek_start,@imonth_start,@iqty,@ifin_dates_id1,@ifin_qty1,@ifin_dates_id2,@ifin_qty2, @idelete_session_id;
    else
     fetch deleted_c into @dwbsrsrc_id,@dweek_start,@dmonth_start,@dqty,@dfin_dates_id1,@dfin_qty1,@dfin_dates_id2,@dfin_qty2, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_WBSSTEP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_WBSSTEP' AND xtype = 'TR')
    DROP trigger PRMAUD_WBSSTEP

PRMAUD_WBSSTEP
create trigger PRMAUD_WBSSTEP
on WBSSTEP
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iwbs_step_id varchar(255),@iproj_id varchar(255),@iwbs_id varchar(255),@iseq_num varchar(255),@icomplete_flag varchar(255),@istep_name varchar(255),@istep_wt varchar(255)

  declare @dwbs_step_id varchar(255),@dproj_id varchar(255),@dwbs_id varchar(255),@dseq_num varchar(255),@dcomplete_flag varchar(255),@dstep_name varchar(255),@dstep_wt varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(wbs_step_id) and
			not update(proj_id) and
			not update(wbs_id) and
			not update(seq_num) and
			not update(complete_flag) and
			not update(step_name) and
			not update(step_wt) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'WBSSTEP', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WBSSTEP',wbs_step_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WBSSTEP', wbs_step_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select wbs_step_id,proj_id,wbs_id,seq_num,complete_flag,step_name,step_wt
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select wbs_step_id,proj_id,wbs_id,seq_num,complete_flag,step_name,step_wt
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iwbs_step_id,@iproj_id,@iwbs_id,@iseq_num,@icomplete_flag,@istep_name,@istep_wt, @idelete_session_id
  else
    fetch deleted_c into @dwbs_step_id,@dproj_id,@dwbs_id,@dseq_num,@dcomplete_flag,@dstep_name,@dstep_wt, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dwbs_step_id;
				

    end else begin
    	set @pk1 = @iwbs_step_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dwbs_step_id,@dproj_id,@dwbs_id,@dseq_num,@dcomplete_flag,@dstep_name,@dstep_wt, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(wbs_step_id)  exec audit_data 'WBSSTEP','wbs_step_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_step_id,@iwbs_step_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'WBSSTEP','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(wbs_id)  exec audit_data 'WBSSTEP','wbs_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwbs_id,@iwbs_id,@audit_data OUTPUT
      if (@loper='D') or  update(seq_num)  exec audit_data 'WBSSTEP','seq_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dseq_num,@iseq_num,@audit_data OUTPUT
      if (@loper='D') or  update(complete_flag)  exec audit_data 'WBSSTEP','complete_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcomplete_flag,@icomplete_flag,@audit_data OUTPUT
      if (@loper='D') or  update(step_name)  exec audit_data 'WBSSTEP','step_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstep_name,@istep_name,@audit_data OUTPUT
      if (@loper='D') or  update(step_wt)  exec audit_data 'WBSSTEP','step_wt',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstep_wt,@istep_wt,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'WBSSTEP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'WBSSTEP', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iwbs_step_id,@iproj_id,@iwbs_id,@iseq_num,@icomplete_flag,@istep_name,@istep_wt, @idelete_session_id;
    else
     fetch deleted_c into @dwbs_step_id,@dproj_id,@dwbs_id,@dseq_num,@dcomplete_flag,@dstep_name,@dstep_wt, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_WKFLTMPL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_WKFLTMPL' AND xtype = 'TR')
    DROP trigger PRMAUD_WKFLTMPL

PRMAUD_WKFLTMPL
create trigger PRMAUD_WKFLTMPL
on WKFLTMPL
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iwkfl_tmpl_id varchar(255),@itemplate_name varchar(255),@iproject_flag varchar(255),@iwk_external_key varchar(255),@itmplcatg_catg_id varchar(255)

  declare @dwkfl_tmpl_id varchar(255),@dtemplate_name varchar(255),@dproject_flag varchar(255),@dwk_external_key varchar(255),@dtmplcatg_catg_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(wkfl_tmpl_id) and
			not update(template_name) and
			not update(project_flag) and
			not update(wk_external_key) and
			not update(tmplcatg_catg_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'WKFLTMPL', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WKFLTMPL',wkfl_tmpl_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WKFLTMPL', wkfl_tmpl_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select wkfl_tmpl_id,template_name,project_flag,wk_external_key,tmplcatg_catg_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select wkfl_tmpl_id,template_name,project_flag,wk_external_key,tmplcatg_catg_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iwkfl_tmpl_id,@itemplate_name,@iproject_flag,@iwk_external_key,@itmplcatg_catg_id, @idelete_session_id
  else
    fetch deleted_c into @dwkfl_tmpl_id,@dtemplate_name,@dproject_flag,@dwk_external_key,@dtmplcatg_catg_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dwkfl_tmpl_id;
				

    end else begin
    	set @pk1 = @iwkfl_tmpl_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dwkfl_tmpl_id,@dtemplate_name,@dproject_flag,@dwk_external_key,@dtmplcatg_catg_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(wkfl_tmpl_id)  exec audit_data 'WKFLTMPL','wkfl_tmpl_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwkfl_tmpl_id,@iwkfl_tmpl_id,@audit_data OUTPUT
      if (@loper='D') or  update(template_name)  exec audit_data 'WKFLTMPL','template_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtemplate_name,@itemplate_name,@audit_data OUTPUT
      if (@loper='D') or  update(project_flag)  exec audit_data 'WKFLTMPL','project_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproject_flag,@iproject_flag,@audit_data OUTPUT
      if (@loper='D') or  update(wk_external_key)  exec audit_data 'WKFLTMPL','wk_external_key',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwk_external_key,@iwk_external_key,@audit_data OUTPUT
      if (@loper='D') or  update(tmplcatg_catg_id)  exec audit_data 'WKFLTMPL','tmplcatg_catg_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dtmplcatg_catg_id,@itmplcatg_catg_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'WKFLTMPL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'WKFLTMPL', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iwkfl_tmpl_id,@itemplate_name,@iproject_flag,@iwk_external_key,@itmplcatg_catg_id, @idelete_session_id;
    else
     fetch deleted_c into @dwkfl_tmpl_id,@dtemplate_name,@dproject_flag,@dwk_external_key,@dtmplcatg_catg_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_WKFLUSER
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_WKFLUSER' AND xtype = 'TR')
    DROP trigger PRMAUD_WKFLUSER

PRMAUD_WKFLUSER
create trigger PRMAUD_WKFLUSER
on WKFLUSER
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iwork_flow_id varchar(255),@iuser_id varchar(255),@istage_num varchar(255),@icomments varchar(4000)

  declare @dwork_flow_id varchar(255),@duser_id varchar(255),@dstage_num varchar(255),@dcomments varchar(4000)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(work_flow_id) and
			not update(user_id) and
			not update(stage_num) and
			not update(comments) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'WKFLUSER', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WKFLUSER',work_flow_id,user_id,stage_num,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WKFLUSER', work_flow_id,user_id,stage_num,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select work_flow_id,user_id,stage_num,comments
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select work_flow_id,user_id,stage_num,comments
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iwork_flow_id,@iuser_id,@istage_num,@icomments, @idelete_session_id
  else
    fetch deleted_c into @dwork_flow_id,@duser_id,@dstage_num,@dcomments, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dwork_flow_id;
				
set @pk2 = @duser_id;
				
set @pk3 = @dstage_num;
				

    end else begin
    	set @pk1 = @iwork_flow_id;
				
set @pk2 = @iuser_id;
				
set @pk3 = @istage_num;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dwork_flow_id,@duser_id,@dstage_num,@dcomments, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(work_flow_id)  exec audit_data 'WKFLUSER','work_flow_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwork_flow_id,@iwork_flow_id,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'WKFLUSER','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
      if (@loper='D') or  update(stage_num)  exec audit_data 'WKFLUSER','stage_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstage_num,@istage_num,@audit_data OUTPUT
      if (@loper='D') or  update(comments)  exec audit_data 'WKFLUSER','comments',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcomments,@icomments,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'WKFLUSER', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'WKFLUSER', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iwork_flow_id,@iuser_id,@istage_num,@icomments, @idelete_session_id;
    else
     fetch deleted_c into @dwork_flow_id,@duser_id,@dstage_num,@dcomments, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_WORKFLOW
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_WORKFLOW' AND xtype = 'TR')
    DROP trigger PRMAUD_WORKFLOW

PRMAUD_WORKFLOW
create trigger PRMAUD_WORKFLOW
on WORKFLOW
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iwork_flow_id varchar(255),@iproj_id varchar(255),@iworkflow_name varchar(255),@iexternal_key varchar(512),@istage_num varchar(255),@istatus varchar(255),@iexisting_project_flag varchar(255),@istage_name varchar(255),@istage_modified_flag varchar(255),@iinitiated_date varchar(255),@iworkspace_id varchar(255),@iuser_id varchar(255)

  declare @dwork_flow_id varchar(255),@dproj_id varchar(255),@dworkflow_name varchar(255),@dexternal_key varchar(512),@dstage_num varchar(255),@dstatus varchar(255),@dexisting_project_flag varchar(255),@dstage_name varchar(255),@dstage_modified_flag varchar(255),@dinitiated_date varchar(255),@dworkspace_id varchar(255),@duser_id varchar(255)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(work_flow_id) and
			not update(proj_id) and
			not update(workflow_name) and
			not update(external_key) and
			not update(stage_num) and
			not update(status) and
			not update(existing_project_flag) and
			not update(stage_name) and
			not update(stage_modified_flag) and
			not update(initiated_date) and
			not update(workspace_id) and
			not update(user_id) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'WORKFLOW', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WORKFLOW',work_flow_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WORKFLOW', work_flow_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select work_flow_id,proj_id,workflow_name,external_key,stage_num,status,existing_project_flag,stage_name,stage_modified_flag,initiated_date,workspace_id,user_id
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select work_flow_id,proj_id,workflow_name,external_key,stage_num,status,existing_project_flag,stage_name,stage_modified_flag,initiated_date,workspace_id,user_id
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iwork_flow_id,@iproj_id,@iworkflow_name,@iexternal_key,@istage_num,@istatus,@iexisting_project_flag,@istage_name,@istage_modified_flag,@iinitiated_date,@iworkspace_id,@iuser_id, @idelete_session_id
  else
    fetch deleted_c into @dwork_flow_id,@dproj_id,@dworkflow_name,@dexternal_key,@dstage_num,@dstatus,@dexisting_project_flag,@dstage_name,@dstage_modified_flag,@dinitiated_date,@dworkspace_id,@duser_id, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dwork_flow_id;
				

    end else begin
    	set @pk1 = @iwork_flow_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dwork_flow_id,@dproj_id,@dworkflow_name,@dexternal_key,@dstage_num,@dstatus,@dexisting_project_flag,@dstage_name,@dstage_modified_flag,@dinitiated_date,@dworkspace_id,@duser_id, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(work_flow_id)  exec audit_data 'WORKFLOW','work_flow_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dwork_flow_id,@iwork_flow_id,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'WORKFLOW','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(workflow_name)  exec audit_data 'WORKFLOW','workflow_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dworkflow_name,@iworkflow_name,@audit_data OUTPUT
      if (@loper='D') or  update(external_key)  exec audit_data 'WORKFLOW','external_key',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dexternal_key,@iexternal_key,@audit_data OUTPUT
      if (@loper='D') or  update(stage_num)  exec audit_data 'WORKFLOW','stage_num',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstage_num,@istage_num,@audit_data OUTPUT
      if (@loper='D') or  update(status)  exec audit_data 'WORKFLOW','status',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstatus,@istatus,@audit_data OUTPUT
      if (@loper='D') or  update(existing_project_flag)  exec audit_data 'WORKFLOW','existing_project_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dexisting_project_flag,@iexisting_project_flag,@audit_data OUTPUT
      if (@loper='D') or  update(stage_name)  exec audit_data 'WORKFLOW','stage_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstage_name,@istage_name,@audit_data OUTPUT
      if (@loper='D') or  update(stage_modified_flag)  exec audit_data 'WORKFLOW','stage_modified_flag',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dstage_modified_flag,@istage_modified_flag,@audit_data OUTPUT
      if (@loper='D') or  update(initiated_date)  exec audit_data 'WORKFLOW','initiated_date',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dinitiated_date,@iinitiated_date,@audit_data OUTPUT
      if (@loper='D') or  update(workspace_id)  exec audit_data 'WORKFLOW','workspace_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dworkspace_id,@iworkspace_id,@audit_data OUTPUT
      if (@loper='D') or  update(user_id)  exec audit_data 'WORKFLOW','user_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@duser_id,@iuser_id,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'WORKFLOW', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'WORKFLOW', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iwork_flow_id,@iproj_id,@iworkflow_name,@iexternal_key,@istage_num,@istatus,@iexisting_project_flag,@istage_name,@istage_modified_flag,@iinitiated_date,@iworkspace_id,@iuser_id, @idelete_session_id;
    else
     fetch deleted_c into @dwork_flow_id,@dproj_id,@dworkflow_name,@dexternal_key,@dstage_num,@dstatus,@dexisting_project_flag,@dstage_name,@dstage_modified_flag,@dinitiated_date,@dworkspace_id,@duser_id, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

PRMAUD_WORKSPACE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'PRMAUD_WORKSPACE' AND xtype = 'TR')
    DROP trigger PRMAUD_WORKSPACE

PRMAUD_WORKSPACE
create trigger PRMAUD_WORKSPACE
on WORKSPACE
for update, insert, delete
as     
  declare @oper char(1), @ins_cnt int, @del_cnt int, @logical_delete varchar(1), @sess_id int, @prm_user_name varchar(32), @app_name varchar(25)
  declare @program varchar(255), @hostname varchar(255), @netaddress varchar(24), @rdbms_user varchar(30), @os_user varchar(255)

  declare @pk1 varchar(255), @pk2 varchar(255), @pk3 varchar(255), @pk4 varchar(255)
  declare @audit int, @insert_level int, @update_level int, @delete_level int, @col_audit varchar(255)

  declare @iworkspace_id varchar(255),@iworkspace_type varchar(255),@iproj_id varchar(255),@iworkspace_name varchar(255),@icr_external_key varchar(4000)

  declare @dworkspace_id varchar(255),@dworkspace_type varchar(255),@dproj_id varchar(255),@dworkspace_name varchar(255),@dcr_external_key varchar(4000)

  declare @idelete_session_id int, @ddelete_session_id int, @audit_data varchar(4000), @loper char(1)

  select @ins_cnt=count(*) from inserted; select @del_cnt=count(*) from deleted;
  if @ins_cnt = @del_cnt set @oper = 'U'  ELSE IF @ins_cnt > 0 set @oper = 'I'  ELSE  set @oper = 'D';

	if @oper = 'U' and not update(workspace_id) and
			not update(workspace_type) and
			not update(proj_id) and
			not update(workspace_name) and
			not update(cr_external_key) and
			 not update(delete_session_id)
     return
         
  exec audit_tab_options 'WORKSPACE', @audit OUTPUT, @insert_level OUTPUT, @update_level OUTPUT, @delete_level OUTPUT, @col_audit OUTPUT

  if @audit < 1 RETURN

  exec audit_prm_user @sess_id OUTPUT, @prm_user_name OUTPUT, @app_name OUTPUT
  exec audit_proc_info @program OUTPUT, @hostname OUTPUT, @netaddress OUTPUT, @rdbms_user OUTPUT, @os_user OUTPUT

  set @loper = @oper;
  set @logical_delete = 'N'
  
    /* Handle ROW-level only */
  if (@oper = 'U' and @update_level = 1 ) or ( @oper = 'I' and @insert_level = 1 ) or (@oper = 'D' and @delete_level = 1 )
  begin 
    select top 1 @ddelete_session_id=delete_session_id from deleted
    select top 1 @idelete_session_id=delete_session_id from inserted

    if @ddelete_session_id is null and @idelete_session_id is not null 
    begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'

    if ( @oper = 'U' ) or ( @oper = 'I') 
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WORKSPACE',workspace_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from inserted
    else
      insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag)
      select getDate(),'WORKSPACE', workspace_id,null,null,null , @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete
      from deleted

    return

  end 


  if (select count(*) from spidmap where spid=@@spid)=0
    insert into spidmap (spid,audit_info_extended) values(@@spid,'')
  else
    update spidmap set audit_info_extended='' where spid=@@spid

  declare deleted_c cursor for 
  select workspace_id,workspace_type,proj_id,workspace_name,cr_external_key
		,delete_session_id
  from deleted;
  declare inserted_c cursor for 
  select workspace_id,workspace_type,proj_id,workspace_name,cr_external_key
		,delete_session_id
  from inserted;

  open inserted_c  open deleted_c
  
  if @oper = 'I' or @oper = 'U'
    fetch inserted_c into @iworkspace_id,@iworkspace_type,@iproj_id,@iworkspace_name,@icr_external_key, @idelete_session_id
  else
    fetch deleted_c into @dworkspace_id,@dworkspace_type,@dproj_id,@dworkspace_name,@dcr_external_key, @idelete_session_id

  while @@fetch_status = 0 
  begin

    set @audit_data=''

    if @oper = 'D' begin
    set @pk1 = @dworkspace_id;
				

    end else begin
    	set @pk1 = @iworkspace_id;
				

    end

    if @oper = 'U' 
    begin
      fetch deleted_c into @dworkspace_id,@dworkspace_type,@dproj_id,@dworkspace_name,@dcr_external_key, @ddelete_session_id
      if @ddelete_session_id is null and @idelete_session_id is not null 
      begin  set @logical_delete = 'Y' set @loper = 'D' end else set @logical_delete = 'N'
    end


    if (@loper = 'U' and @update_level >= 2 ) or ( @loper = 'I' and @insert_level >= 2) or (@loper = 'D' and @delete_level >= 2)
    begin
		
      if (@loper='D') or  update(workspace_id)  exec audit_data 'WORKSPACE','workspace_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dworkspace_id,@iworkspace_id,@audit_data OUTPUT
      if (@loper='D') or  update(workspace_type)  exec audit_data 'WORKSPACE','workspace_type',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dworkspace_type,@iworkspace_type,@audit_data OUTPUT
      if (@loper='D') or  update(proj_id)  exec audit_data 'WORKSPACE','proj_id',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dproj_id,@iproj_id,@audit_data OUTPUT
      if (@loper='D') or  update(workspace_name)  exec audit_data 'WORKSPACE','workspace_name',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dworkspace_name,@iworkspace_name,@audit_data OUTPUT
      if (@loper='D') or  update(cr_external_key)  exec audit_data 'WORKSPACE','cr_external_key',@loper,@pk1,@pk2,@pk3,@pk4,@prm_user_name
       ,@program,@hostname,@netaddress,@rdbms_user,@os_user,@app_name,1,@logical_delete,'Y'
       ,@dcr_external_key,@icr_external_key,@audit_data OUTPUT
 
      if @audit_data is null or len(@audit_data)<=4000
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info)
        values (getDate(),'WORKSPACE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data)
      else
        insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name,
                        prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended)
        select getDate(),'WORKSPACE', @pk1, @pk2, @pk3, @pk4, @loper, @rdbms_user, @app_name
          ,@prm_user_name, @os_user, @program, @hostname, @netaddress,@logical_delete, @audit_data
          ,audit_info_extended
       from spidmap where spid = @@spid
 
    end

    if @loper = 'I' or @loper = 'U'
    fetch inserted_c into @iworkspace_id,@iworkspace_type,@iproj_id,@iworkspace_name,@icr_external_key, @idelete_session_id;
    else
     fetch deleted_c into @dworkspace_id,@dworkspace_type,@dproj_id,@dworkspace_name,@dcr_external_key, @ddelete_session_id;
  end
  close deleted_c  close inserted_c  deallocate deleted_c  deallocate inserted_c

    

RT_ACCOUNT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_ACCOUNT' AND xtype = 'TR')
    DROP trigger RT_ACCOUNT

RT_ACCOUNT
create trigger RT_ACCOUNT
on ACCOUNT
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update ACCOUNT
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else ACCOUNT.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else ACCOUNT.create_date end
from inserted 
where ACCOUNT.acct_id = inserted.acct_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ACCOUNT',acct_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select acct_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'ACCOUNT'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_ACCOUNT_DEL
create trigger RT_ACCOUNT_DEL
on ACCOUNT
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ACCOUNT',acct_id,null,null,null
      from deleted
  	
END

RT_ACTVCODE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_ACTVCODE' AND xtype = 'TR')
    DROP trigger RT_ACTVCODE

RT_ACTVCODE
create trigger RT_ACTVCODE
on ACTVCODE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update ACTVCODE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else ACTVCODE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else ACTVCODE.create_date end
from inserted 
where ACTVCODE.actv_code_id = inserted.actv_code_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ACTVCODE',actv_code_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select actv_code_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'ACTVCODE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_ACTVCODE_DEL
create trigger RT_ACTVCODE_DEL
on ACTVCODE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ACTVCODE',actv_code_id,null,null,null
      from deleted
  	
END

RT_ACTVTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_ACTVTYPE' AND xtype = 'TR')
    DROP trigger RT_ACTVTYPE

RT_ACTVTYPE
create trigger RT_ACTVTYPE
on ACTVTYPE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update ACTVTYPE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else ACTVTYPE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else ACTVTYPE.create_date end
from inserted 
where ACTVTYPE.actv_code_type_id = inserted.actv_code_type_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'ACTVTYPE',actv_code_type_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select actv_code_type_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'ACTVTYPE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_ACTVTYPE_DEL
create trigger RT_ACTVTYPE_DEL
on ACTVTYPE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'ACTVTYPE',actv_code_type_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_ADMIN_CONFIG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_ADMIN_CONFIG' AND xtype = 'TR')
    DROP trigger RT_ADMIN_CONFIG

RT_ADMIN_CONFIG
create trigger RT_ADMIN_CONFIG
on ADMIN_CONFIG
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update ADMIN_CONFIG
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else ADMIN_CONFIG.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else ADMIN_CONFIG.create_date end
from inserted 
where ADMIN_CONFIG.config_name = inserted.config_name
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ADMIN_CONFIG',config_name,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select config_name,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'ADMIN_CONFIG'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_ADMIN_CONFIG_DEL
create trigger RT_ADMIN_CONFIG_DEL
on ADMIN_CONFIG
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ADMIN_CONFIG',config_name,null,null,null
      from deleted
  	
END

RT_BASETYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_BASETYPE' AND xtype = 'TR')
    DROP trigger RT_BASETYPE

RT_BASETYPE
create trigger RT_BASETYPE
on BASETYPE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update BASETYPE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else BASETYPE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else BASETYPE.create_date end
from inserted 
where BASETYPE.base_type_id = inserted.base_type_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'BASETYPE',base_type_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select base_type_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'BASETYPE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_BASETYPE_DEL
create trigger RT_BASETYPE_DEL
on BASETYPE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'BASETYPE',base_type_id,null,null,null
      from deleted
  	
END

RT_BRE_REGISTRY
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_BRE_REGISTRY' AND xtype = 'TR')
    DROP trigger RT_BRE_REGISTRY

RT_BRE_REGISTRY
create trigger RT_BRE_REGISTRY
on BRE_REGISTRY
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update BRE_REGISTRY
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else BRE_REGISTRY.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else BRE_REGISTRY.create_date end
from inserted 
where BRE_REGISTRY.bre_registry_id = inserted.bre_registry_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'BRE_REGISTRY',bre_registry_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select bre_registry_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'BRE_REGISTRY'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_BRE_REGISTRY_DEL
create trigger RT_BRE_REGISTRY_DEL
on BRE_REGISTRY
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'BRE_REGISTRY',bre_registry_id,null,null,null
      from deleted
  	
END

RT_BUDGCHNG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_BUDGCHNG' AND xtype = 'TR')
    DROP trigger RT_BUDGCHNG

RT_BUDGCHNG
create trigger RT_BUDGCHNG
on BUDGCHNG
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update BUDGCHNG
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else BUDGCHNG.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else BUDGCHNG.create_date end
from inserted 
where BUDGCHNG.budg_chng_id = inserted.budg_chng_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'BUDGCHNG',budg_chng_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select budg_chng_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'BUDGCHNG'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_BUDGCHNG_DEL
create trigger RT_BUDGCHNG_DEL
on BUDGCHNG
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'BUDGCHNG',budg_chng_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_CALENDAR
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_CALENDAR' AND xtype = 'TR')
    DROP trigger RT_CALENDAR

RT_CALENDAR
create trigger RT_CALENDAR
on CALENDAR
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update CALENDAR
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else CALENDAR.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else CALENDAR.create_date end
from inserted 
where CALENDAR.clndr_id = inserted.clndr_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'CALENDAR',clndr_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select clndr_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'CALENDAR'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_CALENDAR_DEL
create trigger RT_CALENDAR_DEL
on CALENDAR
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'CALENDAR',clndr_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_COSTTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_COSTTYPE' AND xtype = 'TR')
    DROP trigger RT_COSTTYPE

RT_COSTTYPE
create trigger RT_COSTTYPE
on COSTTYPE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update COSTTYPE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else COSTTYPE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else COSTTYPE.create_date end
from inserted 
where COSTTYPE.cost_type_id = inserted.cost_type_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'COSTTYPE',cost_type_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select cost_type_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'COSTTYPE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_COSTTYPE_DEL
create trigger RT_COSTTYPE_DEL
on COSTTYPE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'COSTTYPE',cost_type_id,null,null,null
      from deleted
  	
END

RT_CURRTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_CURRTYPE' AND xtype = 'TR')
    DROP trigger RT_CURRTYPE

RT_CURRTYPE
create trigger RT_CURRTYPE
on CURRTYPE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update CURRTYPE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else CURRTYPE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else CURRTYPE.create_date end
from inserted 
where CURRTYPE.curr_id = inserted.curr_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'CURRTYPE',curr_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select curr_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'CURRTYPE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_CURRTYPE_DEL
create trigger RT_CURRTYPE_DEL
on CURRTYPE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'CURRTYPE',curr_id,null,null,null
      from deleted
  	
END

RT_DASHBOARD
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_DASHBOARD' AND xtype = 'TR')
    DROP trigger RT_DASHBOARD

RT_DASHBOARD
create trigger RT_DASHBOARD
on DASHBOARD
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update DASHBOARD
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else DASHBOARD.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else DASHBOARD.create_date end
from inserted 
where DASHBOARD.dashboard_id = inserted.dashboard_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'DASHBOARD',dashboard_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select dashboard_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'DASHBOARD'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_DASHBOARD_DEL
create trigger RT_DASHBOARD_DEL
on DASHBOARD
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'DASHBOARD',dashboard_id,null,null,null
      from deleted
  	
END

RT_DASHUSER
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_DASHUSER' AND xtype = 'TR')
    DROP trigger RT_DASHUSER

RT_DASHUSER
create trigger RT_DASHUSER
on DASHUSER
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update DASHUSER
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else DASHUSER.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else DASHUSER.create_date end
from inserted 
where DASHUSER.dashboard_id = inserted.dashboard_id
and DASHUSER.user_id = inserted.user_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select dashboard_id,user_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'DASHUSER'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'DASHUSER',dashboard_id,user_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select dashboard_id,user_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'DASHUSER'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_DASHUSER_DEL
create trigger RT_DASHUSER_DEL
on DASHUSER
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'DASHUSER',dashboard_id,user_id,null,null
      from deleted
  	
END

RT_DOCCATG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_DOCCATG' AND xtype = 'TR')
    DROP trigger RT_DOCCATG

RT_DOCCATG
create trigger RT_DOCCATG
on DOCCATG
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update DOCCATG
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else DOCCATG.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else DOCCATG.create_date end
from inserted 
where DOCCATG.doc_catg_id = inserted.doc_catg_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'DOCCATG',doc_catg_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select doc_catg_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'DOCCATG'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_DOCCATG_DEL
create trigger RT_DOCCATG_DEL
on DOCCATG
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'DOCCATG',doc_catg_id,null,null,null
      from deleted
  	
END

RT_DOCSTAT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_DOCSTAT' AND xtype = 'TR')
    DROP trigger RT_DOCSTAT

RT_DOCSTAT
create trigger RT_DOCSTAT
on DOCSTAT
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update DOCSTAT
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else DOCSTAT.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else DOCSTAT.create_date end
from inserted 
where DOCSTAT.doc_status_id = inserted.doc_status_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'DOCSTAT',doc_status_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select doc_status_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'DOCSTAT'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_DOCSTAT_DEL
create trigger RT_DOCSTAT_DEL
on DOCSTAT
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'DOCSTAT',doc_status_id,null,null,null
      from deleted
  	
END

RT_DOCUMENT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_DOCUMENT' AND xtype = 'TR')
    DROP trigger RT_DOCUMENT

RT_DOCUMENT
create trigger RT_DOCUMENT
on DOCUMENT
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update DOCUMENT
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else DOCUMENT.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else DOCUMENT.create_date end
from inserted 
where DOCUMENT.doc_id = inserted.doc_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'DOCUMENT',doc_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select doc_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'DOCUMENT'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_DOCUMENT_DEL
create trigger RT_DOCUMENT_DEL
on DOCUMENT
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'DOCUMENT',doc_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_EXTAPP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_EXTAPP' AND xtype = 'TR')
    DROP trigger RT_EXTAPP

RT_EXTAPP
create trigger RT_EXTAPP
on EXTAPP
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update EXTAPP
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else EXTAPP.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else EXTAPP.create_date end
from inserted 
where EXTAPP.app_id = inserted.app_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'EXTAPP',app_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select app_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'EXTAPP'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_EXTAPP_DEL
create trigger RT_EXTAPP_DEL
on EXTAPP
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'EXTAPP',app_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_EXPPROJ
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_EXPPROJ' AND xtype = 'TR')
    DROP trigger RT_EXPPROJ

RT_EXPPROJ
create trigger RT_EXPPROJ
on EXPPROJ
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update EXPPROJ
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else EXPPROJ.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else EXPPROJ.create_date end
from inserted 
where EXPPROJ.proj_id = inserted.proj_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select proj_id,null,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'EXPPROJ'
    and  @pk1 = refrdel.pk1
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'EXPPROJ',proj_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select proj_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'EXPPROJ'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_EXPPROJ_DEL
create trigger RT_EXPPROJ_DEL
on EXPPROJ
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'EXPPROJ',proj_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_FACTOR
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_FACTOR' AND xtype = 'TR')
    DROP trigger RT_FACTOR

RT_FACTOR
create trigger RT_FACTOR
on FACTOR
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update FACTOR
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else FACTOR.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else FACTOR.create_date end
from inserted 
where FACTOR.fact_id = inserted.fact_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FACTOR',fact_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select fact_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'FACTOR'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_FACTOR_DEL
create trigger RT_FACTOR_DEL
on FACTOR
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FACTOR',fact_id,null,null,null
      from deleted
  	
END

RT_FACTVAL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_FACTVAL' AND xtype = 'TR')
    DROP trigger RT_FACTVAL

RT_FACTVAL
create trigger RT_FACTVAL
on FACTVAL
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update FACTVAL
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else FACTVAL.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else FACTVAL.create_date end
from inserted 
where FACTVAL.fact_val_id = inserted.fact_val_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FACTVAL',fact_val_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select fact_val_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'FACTVAL'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_FACTVAL_DEL
create trigger RT_FACTVAL_DEL
on FACTVAL
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FACTVAL',fact_val_id,null,null,null
      from deleted
  	
END

RT_FILTPROP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_FILTPROP' AND xtype = 'TR')
    DROP trigger RT_FILTPROP

RT_FILTPROP
create trigger RT_FILTPROP
on FILTPROP
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update FILTPROP
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else FILTPROP.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else FILTPROP.create_date end
from inserted 
where FILTPROP.filter_id = inserted.filter_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FILTPROP',filter_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select filter_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'FILTPROP'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_FILTPROP_DEL
create trigger RT_FILTPROP_DEL
on FILTPROP
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FILTPROP',filter_id,null,null,null
      from deleted
  	
END

RT_FINDATES
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_FINDATES' AND xtype = 'TR')
    DROP trigger RT_FINDATES

RT_FINDATES
create trigger RT_FINDATES
on FINDATES
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update FINDATES
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else FINDATES.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else FINDATES.create_date end
from inserted 
where FINDATES.fin_dates_id = inserted.fin_dates_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FINDATES',fin_dates_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select fin_dates_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'FINDATES'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_FINDATES_DEL
create trigger RT_FINDATES_DEL
on FINDATES
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FINDATES',fin_dates_id,null,null,null
      from deleted
  	
END

RT_FORMCATG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_FORMCATG' AND xtype = 'TR')
    DROP trigger RT_FORMCATG

RT_FORMCATG
create trigger RT_FORMCATG
on FORMCATG
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update FORMCATG
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else FORMCATG.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else FORMCATG.create_date end
from inserted 
where FORMCATG.form_catg_id = inserted.form_catg_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FORMCATG',form_catg_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select form_catg_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'FORMCATG'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_FORMCATG_DEL
create trigger RT_FORMCATG_DEL
on FORMCATG
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FORMCATG',form_catg_id,null,null,null
      from deleted
  	
END

RT_FORMPROJ
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_FORMPROJ' AND xtype = 'TR')
    DROP trigger RT_FORMPROJ

RT_FORMPROJ
create trigger RT_FORMPROJ
on FORMPROJ
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update FORMPROJ
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else FORMPROJ.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else FORMPROJ.create_date end
from inserted 
where FORMPROJ.form_tmpl_id = inserted.form_tmpl_id
and FORMPROJ.proj_id = inserted.proj_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select form_tmpl_id,proj_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'FORMPROJ'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'FORMPROJ',form_tmpl_id,proj_id,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select form_tmpl_id,proj_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'FORMPROJ'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_FORMPROJ_DEL
create trigger RT_FORMPROJ_DEL
on FORMPROJ
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'FORMPROJ',form_tmpl_id,proj_id,null,null
  	,proj_id
      from deleted
  	
END

RT_FORMTMPL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_FORMTMPL' AND xtype = 'TR')
    DROP trigger RT_FORMTMPL

RT_FORMTMPL
create trigger RT_FORMTMPL
on FORMTMPL
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update FORMTMPL
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else FORMTMPL.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else FORMTMPL.create_date end
from inserted 
where FORMTMPL.form_tmpl_id = inserted.form_tmpl_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FORMTMPL',form_tmpl_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select form_tmpl_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'FORMTMPL'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_FORMTMPL_DEL
create trigger RT_FORMTMPL_DEL
on FORMTMPL
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FORMTMPL',form_tmpl_id,null,null,null
      from deleted
  	
END

RT_FUNDSRC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_FUNDSRC' AND xtype = 'TR')
    DROP trigger RT_FUNDSRC

RT_FUNDSRC
create trigger RT_FUNDSRC
on FUNDSRC
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update FUNDSRC
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else FUNDSRC.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else FUNDSRC.create_date end
from inserted 
where FUNDSRC.fund_id = inserted.fund_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FUNDSRC',fund_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select fund_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'FUNDSRC'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_FUNDSRC_DEL
create trigger RT_FUNDSRC_DEL
on FUNDSRC
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'FUNDSRC',fund_id,null,null,null
      from deleted
  	
END

RT_GCHANGE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_GCHANGE' AND xtype = 'TR')
    DROP trigger RT_GCHANGE

RT_GCHANGE
create trigger RT_GCHANGE
on GCHANGE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update GCHANGE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else GCHANGE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else GCHANGE.create_date end
from inserted 
where GCHANGE.gchange_id = inserted.gchange_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'GCHANGE',gchange_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select gchange_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'GCHANGE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_GCHANGE_DEL
create trigger RT_GCHANGE_DEL
on GCHANGE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'GCHANGE',gchange_id,null,null,null
      from deleted
  	
END

RT_ISSUHIST
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_ISSUHIST' AND xtype = 'TR')
    DROP trigger RT_ISSUHIST

RT_ISSUHIST
create trigger RT_ISSUHIST
on ISSUHIST
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update ISSUHIST
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else ISSUHIST.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else ISSUHIST.create_date end
from inserted 
where ISSUHIST.issue_id = inserted.issue_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'ISSUHIST',issue_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select issue_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'ISSUHIST'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_ISSUHIST_DEL
create trigger RT_ISSUHIST_DEL
on ISSUHIST
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'ISSUHIST',issue_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_ITERATION
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_ITERATION' AND xtype = 'TR')
    DROP trigger RT_ITERATION

RT_ITERATION
create trigger RT_ITERATION
on ITERATION
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update ITERATION
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else ITERATION.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else ITERATION.create_date end
from inserted 
where ITERATION.iteration_id = inserted.iteration_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ITERATION',iteration_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select iteration_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'ITERATION'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_ITERATION_DEL
create trigger RT_ITERATION_DEL
on ITERATION
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ITERATION',iteration_id,null,null,null
      from deleted
  	
END

RT_ITERDAYS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_ITERDAYS' AND xtype = 'TR')
    DROP trigger RT_ITERDAYS

RT_ITERDAYS
create trigger RT_ITERDAYS
on ITERDAYS
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update ITERDAYS
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else ITERDAYS.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else ITERDAYS.create_date end
from inserted 
where ITERDAYS.task_id = inserted.task_id
and ITERDAYS.day_number = inserted.day_number
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select task_id,day_number,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'ITERDAYS'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'ITERDAYS',task_id,day_number,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select task_id,day_number,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'ITERDAYS'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_ITERDAYS_DEL
create trigger RT_ITERDAYS_DEL
on ITERDAYS
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'ITERDAYS',task_id,day_number,null,null
  	,proj_id
      from deleted
  	
END

RT_ITERGOAL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_ITERGOAL' AND xtype = 'TR')
    DROP trigger RT_ITERGOAL

RT_ITERGOAL
create trigger RT_ITERGOAL
on ITERGOAL
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update ITERGOAL
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else ITERGOAL.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else ITERGOAL.create_date end
from inserted 
where ITERGOAL.iter_goal_id = inserted.iter_goal_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ITERGOAL',iter_goal_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select iter_goal_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'ITERGOAL'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_ITERGOAL_DEL
create trigger RT_ITERGOAL_DEL
on ITERGOAL
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ITERGOAL',iter_goal_id,null,null,null
      from deleted
  	
END

RT_JOBLOG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_JOBLOG' AND xtype = 'TR')
    DROP trigger RT_JOBLOG

RT_JOBLOG
create trigger RT_JOBLOG
on JOBLOG
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update JOBLOG
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else JOBLOG.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else JOBLOG.create_date end
from inserted 
where JOBLOG.job_id = inserted.job_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'JOBLOG',job_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select job_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'JOBLOG'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_JOBLOG_DEL
create trigger RT_JOBLOG_DEL
on JOBLOG
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'JOBLOG',job_id,null,null,null
      from deleted
  	
END

RT_JOBSVC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_JOBSVC' AND xtype = 'TR')
    DROP trigger RT_JOBSVC

RT_JOBSVC
create trigger RT_JOBSVC
on JOBSVC
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update JOBSVC
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else JOBSVC.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else JOBSVC.create_date end
from inserted 
where JOBSVC.job_id = inserted.job_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'JOBSVC',job_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select job_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'JOBSVC'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_JOBSVC_DEL
create trigger RT_JOBSVC_DEL
on JOBSVC
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'JOBSVC',job_id,null,null,null
      from deleted
  	
END

RT_JOBRPT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_JOBRPT' AND xtype = 'TR')
    DROP trigger RT_JOBRPT

RT_JOBRPT
create trigger RT_JOBRPT
on JOBRPT
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update JOBRPT
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else JOBRPT.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else JOBRPT.create_date end
from inserted 
where JOBRPT.job_id = inserted.job_id
and JOBRPT.rpt_id = inserted.rpt_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select job_id,rpt_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'JOBRPT'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'JOBRPT',job_id,rpt_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select job_id,rpt_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'JOBRPT'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_JOBRPT_DEL
create trigger RT_JOBRPT_DEL
on JOBRPT
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'JOBRPT',job_id,rpt_id,null,null
      from deleted
  	
END

RT_MEMOTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_MEMOTYPE' AND xtype = 'TR')
    DROP trigger RT_MEMOTYPE

RT_MEMOTYPE
create trigger RT_MEMOTYPE
on MEMOTYPE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update MEMOTYPE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else MEMOTYPE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else MEMOTYPE.create_date end
from inserted 
where MEMOTYPE.memo_type_id = inserted.memo_type_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'MEMOTYPE',memo_type_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select memo_type_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'MEMOTYPE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_MEMOTYPE_DEL
create trigger RT_MEMOTYPE_DEL
on MEMOTYPE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'MEMOTYPE',memo_type_id,null,null,null
      from deleted
  	
END

RT_NONWORK
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_NONWORK' AND xtype = 'TR')
    DROP trigger RT_NONWORK

RT_NONWORK
create trigger RT_NONWORK
on NONWORK
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update NONWORK
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else NONWORK.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else NONWORK.create_date end
from inserted 
where NONWORK.nonwork_type_id = inserted.nonwork_type_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'NONWORK',nonwork_type_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select nonwork_type_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'NONWORK'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_NONWORK_DEL
create trigger RT_NONWORK_DEL
on NONWORK
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'NONWORK',nonwork_type_id,null,null,null
      from deleted
  	
END

RT_NOTE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_NOTE' AND xtype = 'TR')
    DROP trigger RT_NOTE

RT_NOTE
create trigger RT_NOTE
on NOTE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update NOTE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else NOTE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else NOTE.create_date end
from inserted 
where NOTE.note_id = inserted.note_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'NOTE',note_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select note_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'NOTE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_NOTE_DEL
create trigger RT_NOTE_DEL
on NOTE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'NOTE',note_id,null,null,null
      from deleted
  	
END

RT_OBS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_OBS' AND xtype = 'TR')
    DROP trigger RT_OBS

RT_OBS
create trigger RT_OBS
on OBS
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update OBS
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else OBS.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else OBS.create_date end
from inserted 
where OBS.obs_id = inserted.obs_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'OBS',obs_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select obs_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'OBS'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_OBS_DEL
create trigger RT_OBS_DEL
on OBS
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'OBS',obs_id,null,null,null
      from deleted
  	
END

RT_PCATTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PCATTYPE' AND xtype = 'TR')
    DROP trigger RT_PCATTYPE

RT_PCATTYPE
create trigger RT_PCATTYPE
on PCATTYPE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PCATTYPE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PCATTYPE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PCATTYPE.create_date end
from inserted 
where PCATTYPE.proj_catg_type_id = inserted.proj_catg_type_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PCATTYPE',proj_catg_type_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select proj_catg_type_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PCATTYPE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PCATTYPE_DEL
create trigger RT_PCATTYPE_DEL
on PCATTYPE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PCATTYPE',proj_catg_type_id,null,null,null
      from deleted
  	
END

RT_PCATUSER
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PCATUSER' AND xtype = 'TR')
    DROP trigger RT_PCATUSER

RT_PCATUSER
create trigger RT_PCATUSER
on PCATUSER
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PCATUSER
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PCATUSER.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PCATUSER.create_date end
from inserted 
where PCATUSER.proj_catg_id = inserted.proj_catg_id
and PCATUSER.user_id = inserted.user_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select proj_catg_id,user_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'PCATUSER'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PCATUSER',proj_catg_id,user_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select proj_catg_id,user_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PCATUSER'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PCATUSER_DEL
create trigger RT_PCATUSER_DEL
on PCATUSER
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PCATUSER',proj_catg_id,user_id,null,null
      from deleted
  	
END

RT_PCATVAL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PCATVAL' AND xtype = 'TR')
    DROP trigger RT_PCATVAL

RT_PCATVAL
create trigger RT_PCATVAL
on PCATVAL
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PCATVAL
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PCATVAL.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PCATVAL.create_date end
from inserted 
where PCATVAL.proj_catg_id = inserted.proj_catg_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PCATVAL',proj_catg_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select proj_catg_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PCATVAL'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PCATVAL_DEL
create trigger RT_PCATVAL_DEL
on PCATVAL
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PCATVAL',proj_catg_id,null,null,null
      from deleted
  	
END

RT_PFOLIO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PFOLIO' AND xtype = 'TR')
    DROP trigger RT_PFOLIO

RT_PFOLIO
create trigger RT_PFOLIO
on PFOLIO
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PFOLIO
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PFOLIO.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PFOLIO.create_date end
from inserted 
where PFOLIO.pfolio_id = inserted.pfolio_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PFOLIO',pfolio_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select pfolio_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PFOLIO'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PFOLIO_DEL
create trigger RT_PFOLIO_DEL
on PFOLIO
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PFOLIO',pfolio_id,null,null,null
      from deleted
  	
END

RT_PHASE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PHASE' AND xtype = 'TR')
    DROP trigger RT_PHASE

RT_PHASE
create trigger RT_PHASE
on PHASE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PHASE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PHASE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PHASE.create_date end
from inserted 
where PHASE.phase_id = inserted.phase_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PHASE',phase_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select phase_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PHASE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PHASE_DEL
create trigger RT_PHASE_DEL
on PHASE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PHASE',phase_id,null,null,null
      from deleted
  	
END

RT_POBS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_POBS' AND xtype = 'TR')
    DROP trigger RT_POBS

RT_POBS
create trigger RT_POBS
on POBS
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update POBS
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else POBS.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else POBS.create_date end
from inserted 
where POBS.pobs_id = inserted.pobs_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'POBS',pobs_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select pobs_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'POBS'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_POBS_DEL
create trigger RT_POBS_DEL
on POBS
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'POBS',pobs_id,null,null,null
      from deleted
  	
END

RT_PREFER
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PREFER' AND xtype = 'TR')
    DROP trigger RT_PREFER

RT_PREFER
create trigger RT_PREFER
on PREFER
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PREFER
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PREFER.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PREFER.create_date end
from inserted 
where PREFER.prefer_id = inserted.prefer_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PREFER',prefer_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select prefer_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PREFER'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PREFER_DEL
create trigger RT_PREFER_DEL
on PREFER
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PREFER',prefer_id,null,null,null
      from deleted
  	
END

RT_PROFILE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROFILE' AND xtype = 'TR')
    DROP trigger RT_PROFILE

RT_PROFILE
create trigger RT_PROFILE
on PROFILE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROFILE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROFILE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROFILE.create_date end
from inserted 
where PROFILE.prof_id = inserted.prof_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PROFILE',prof_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select prof_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROFILE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROFILE_DEL
create trigger RT_PROFILE_DEL
on PROFILE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PROFILE',prof_id,null,null,null
      from deleted
  	
END

RT_PROCGROUP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROCGROUP' AND xtype = 'TR')
    DROP trigger RT_PROCGROUP

RT_PROCGROUP
create trigger RT_PROCGROUP
on PROCGROUP
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROCGROUP
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROCGROUP.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROCGROUP.create_date end
from inserted 
where PROCGROUP.proc_group_id = inserted.proc_group_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PROCGROUP',proc_group_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select proc_group_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROCGROUP'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROCGROUP_DEL
create trigger RT_PROCGROUP_DEL
on PROCGROUP
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PROCGROUP',proc_group_id,null,null,null
      from deleted
  	
END

RT_PROCITEM
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROCITEM' AND xtype = 'TR')
    DROP trigger RT_PROCITEM

RT_PROCITEM
create trigger RT_PROCITEM
on PROCITEM
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROCITEM
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROCITEM.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROCITEM.create_date end
from inserted 
where PROCITEM.proc_item_id = inserted.proc_item_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PROCITEM',proc_item_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select proc_item_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROCITEM'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROCITEM_DEL
create trigger RT_PROCITEM_DEL
on PROCITEM
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PROCITEM',proc_item_id,null,null,null
      from deleted
  	
END

RT_PROFPRIV
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROFPRIV' AND xtype = 'TR')
    DROP trigger RT_PROFPRIV

RT_PROFPRIV
create trigger RT_PROFPRIV
on PROFPRIV
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROFPRIV
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROFPRIV.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROFPRIV.create_date end
from inserted 
where PROFPRIV.prof_id = inserted.prof_id
and PROFPRIV.priv_num = inserted.priv_num
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select prof_id,priv_num,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'PROFPRIV'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PROFPRIV',prof_id,priv_num,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select prof_id,priv_num,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROFPRIV'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROFPRIV_DEL
create trigger RT_PROFPRIV_DEL
on PROFPRIV
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PROFPRIV',prof_id,priv_num,null,null
      from deleted
  	
END

RT_PROJCOST
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROJCOST' AND xtype = 'TR')
    DROP trigger RT_PROJCOST

RT_PROJCOST
create trigger RT_PROJCOST
on PROJCOST
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROJCOST
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROJCOST.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROJCOST.create_date end
from inserted 
where PROJCOST.cost_item_id = inserted.cost_item_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJCOST',cost_item_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select cost_item_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROJCOST'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROJCOST_DEL
create trigger RT_PROJCOST_DEL
on PROJCOST
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJCOST',cost_item_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_PROJECT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROJECT' AND xtype = 'TR')
    DROP trigger RT_PROJECT

RT_PROJECT
create trigger RT_PROJECT
on PROJECT
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROJECT
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROJECT.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROJECT.create_date end
from inserted 
where PROJECT.proj_id = inserted.proj_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJECT',proj_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select proj_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROJECT'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROJECT_DEL
create trigger RT_PROJECT_DEL
on PROJECT
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJECT',proj_id,null,null,null,null
      from deleted
  	
END

RT_PROJECT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROJECT' AND xtype = 'TR')
    DROP trigger RT_PROJECT

RT_PROJECT
create trigger RT_PROJECT
on PROJECT
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROJECT
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROJECT.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROJECT.create_date end
from inserted 
where PROJECT.proj_id = inserted.proj_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJECT',proj_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select proj_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROJECT'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROJECT_DEL
create trigger RT_PROJECT_DEL
on PROJECT
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJECT',proj_id,null,null,null,null
      from deleted
  	
END

RT_PROJEST
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROJEST' AND xtype = 'TR')
    DROP trigger RT_PROJEST

RT_PROJEST
create trigger RT_PROJEST
on PROJEST
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROJEST
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROJEST.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROJEST.create_date end
from inserted 
where PROJEST.proj_est_id = inserted.proj_est_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJEST',proj_est_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select proj_est_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROJEST'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROJEST_DEL
create trigger RT_PROJEST_DEL
on PROJEST
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJEST',proj_est_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_PROJFUND
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROJFUND' AND xtype = 'TR')
    DROP trigger RT_PROJFUND

RT_PROJFUND
create trigger RT_PROJFUND
on PROJFUND
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROJFUND
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROJFUND.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROJFUND.create_date end
from inserted 
where PROJFUND.proj_fund_id = inserted.proj_fund_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJFUND',proj_fund_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select proj_fund_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROJFUND'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROJFUND_DEL
create trigger RT_PROJFUND_DEL
on PROJFUND
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJFUND',proj_fund_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_PROJISSU
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROJISSU' AND xtype = 'TR')
    DROP trigger RT_PROJISSU

RT_PROJISSU
create trigger RT_PROJISSU
on PROJISSU
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROJISSU
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROJISSU.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROJISSU.create_date end
from inserted 
where PROJISSU.issue_id = inserted.issue_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJISSU',issue_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select issue_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROJISSU'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROJISSU_DEL
create trigger RT_PROJISSU_DEL
on PROJISSU
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJISSU',issue_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_PROJPCAT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROJPCAT' AND xtype = 'TR')
    DROP trigger RT_PROJPCAT

RT_PROJPCAT
create trigger RT_PROJPCAT
on PROJPCAT
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROJPCAT
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROJPCAT.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROJPCAT.create_date end
from inserted 
where PROJPCAT.proj_id = inserted.proj_id
and PROJPCAT.proj_catg_type_id = inserted.proj_catg_type_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select proj_id,proj_catg_type_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'PROJPCAT'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJPCAT',proj_id,proj_catg_type_id,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select proj_id,proj_catg_type_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROJPCAT'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROJPCAT_DEL
create trigger RT_PROJPCAT_DEL
on PROJPCAT
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJPCAT',proj_id,proj_catg_type_id,null,null
  	,proj_id
      from deleted
  	
END

RT_PROJPROP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROJPROP' AND xtype = 'TR')
    DROP trigger RT_PROJPROP

RT_PROJPROP
create trigger RT_PROJPROP
on PROJPROP
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROJPROP
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROJPROP.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROJPROP.create_date end
from inserted 
where PROJPROP.proj_id = inserted.proj_id
and PROJPROP.prop_name = inserted.prop_name
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select proj_id,prop_name,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'PROJPROP'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJPROP',proj_id,prop_name,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select proj_id,prop_name,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROJPROP'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROJPROP_DEL
create trigger RT_PROJPROP_DEL
on PROJPROP
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJPROP',proj_id,prop_name,null,null
  	,proj_id
      from deleted
  	
END

RT_PROJRISK
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROJRISK' AND xtype = 'TR')
    DROP trigger RT_PROJRISK

RT_PROJRISK
create trigger RT_PROJRISK
on PROJRISK
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROJRISK
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROJRISK.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROJRISK.create_date end
from inserted 
where PROJRISK.risk_id = inserted.risk_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJRISK',risk_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select risk_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROJRISK'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROJRISK_DEL
create trigger RT_PROJRISK_DEL
on PROJRISK
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJRISK',risk_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_PROJTHRS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROJTHRS' AND xtype = 'TR')
    DROP trigger RT_PROJTHRS

RT_PROJTHRS
create trigger RT_PROJTHRS
on PROJTHRS
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROJTHRS
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROJTHRS.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROJTHRS.create_date end
from inserted 
where PROJTHRS.thresh_id = inserted.thresh_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJTHRS',thresh_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select thresh_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROJTHRS'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROJTHRS_DEL
create trigger RT_PROJTHRS_DEL
on PROJTHRS
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJTHRS',thresh_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_PROJWBS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROJWBS' AND xtype = 'TR')
    DROP trigger RT_PROJWBS

RT_PROJWBS
create trigger RT_PROJWBS
on PROJWBS
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROJWBS
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROJWBS.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROJWBS.create_date end
from inserted 
where PROJWBS.wbs_id = inserted.wbs_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJWBS',wbs_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select wbs_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROJWBS'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROJWBS_DEL
create trigger RT_PROJWBS_DEL
on PROJWBS
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJWBS',wbs_id,null,null,null,case when proj_node_flag = 'N' then proj_id else null end
      from deleted
  	
END

RT_PROJWSRPT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PROJWSRPT' AND xtype = 'TR')
    DROP trigger RT_PROJWSRPT

RT_PROJWSRPT
create trigger RT_PROJWSRPT
on PROJWSRPT
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PROJWSRPT
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PROJWSRPT.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PROJWSRPT.create_date end
from inserted 
where PROJWSRPT.rpt_id = inserted.rpt_id
and PROJWSRPT.proj_id = inserted.proj_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select rpt_id,proj_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'PROJWSRPT'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJWSRPT',rpt_id,proj_id,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rpt_id,proj_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PROJWSRPT'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PROJWSRPT_DEL
create trigger RT_PROJWSRPT_DEL
on PROJWSRPT
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'PROJWSRPT',rpt_id,proj_id,null,null
  	,proj_id
      from deleted
  	
END

RT_PRPFOLIO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_PRPFOLIO' AND xtype = 'TR')
    DROP trigger RT_PRPFOLIO

RT_PRPFOLIO
create trigger RT_PRPFOLIO
on PRPFOLIO
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update PRPFOLIO
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else PRPFOLIO.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else PRPFOLIO.create_date end
from inserted 
where PRPFOLIO.pfolio_id = inserted.pfolio_id
and PRPFOLIO.wbs_id = inserted.wbs_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select pfolio_id,wbs_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'PRPFOLIO'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PRPFOLIO',pfolio_id,wbs_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select pfolio_id,wbs_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'PRPFOLIO'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_PRPFOLIO_DEL
create trigger RT_PRPFOLIO_DEL
on PRPFOLIO
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'PRPFOLIO',pfolio_id,wbs_id,null,null
      from deleted
  	
END

RT_QUERYLIB
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_QUERYLIB' AND xtype = 'TR')
    DROP trigger RT_QUERYLIB

RT_QUERYLIB
create trigger RT_QUERYLIB
on QUERYLIB
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update QUERYLIB
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else QUERYLIB.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else QUERYLIB.create_date end
from inserted 
where QUERYLIB.query_lib_id = inserted.query_lib_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'QUERYLIB',query_lib_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select query_lib_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'QUERYLIB'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_QUERYLIB_DEL
create trigger RT_QUERYLIB_DEL
on QUERYLIB
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'QUERYLIB',query_lib_id,null,null,null
      from deleted
  	
END

RT_RCATTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RCATTYPE' AND xtype = 'TR')
    DROP trigger RT_RCATTYPE

RT_RCATTYPE
create trigger RT_RCATTYPE
on RCATTYPE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RCATTYPE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RCATTYPE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RCATTYPE.create_date end
from inserted 
where RCATTYPE.rsrc_catg_type_id = inserted.rsrc_catg_type_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RCATTYPE',rsrc_catg_type_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rsrc_catg_type_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RCATTYPE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RCATTYPE_DEL
create trigger RT_RCATTYPE_DEL
on RCATTYPE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RCATTYPE',rsrc_catg_type_id,null,null,null
      from deleted
  	
END

RT_RCATVAL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RCATVAL' AND xtype = 'TR')
    DROP trigger RT_RCATVAL

RT_RCATVAL
create trigger RT_RCATVAL
on RCATVAL
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RCATVAL
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RCATVAL.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RCATVAL.create_date end
from inserted 
where RCATVAL.rsrc_catg_id = inserted.rsrc_catg_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RCATVAL',rsrc_catg_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rsrc_catg_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RCATVAL'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RCATVAL_DEL
create trigger RT_RCATVAL_DEL
on RCATVAL
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RCATVAL',rsrc_catg_id,null,null,null
      from deleted
  	
END

RT_REITTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_REITTYPE' AND xtype = 'TR')
    DROP trigger RT_REITTYPE

RT_REITTYPE
create trigger RT_REITTYPE
on REITTYPE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update REITTYPE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else REITTYPE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else REITTYPE.create_date end
from inserted 
where REITTYPE.related_item_type_id = inserted.related_item_type_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'REITTYPE',related_item_type_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select related_item_type_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'REITTYPE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_REITTYPE_DEL
create trigger RT_REITTYPE_DEL
on REITTYPE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'REITTYPE',related_item_type_id,null,null,null
      from deleted
  	
END

RT_RELEASE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RELEASE' AND xtype = 'TR')
    DROP trigger RT_RELEASE

RT_RELEASE
create trigger RT_RELEASE
on RELEASE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RELEASE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RELEASE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RELEASE.create_date end
from inserted 
where RELEASE.release_id = inserted.release_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'RELEASE',release_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select release_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RELEASE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RELEASE_DEL
create trigger RT_RELEASE_DEL
on RELEASE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'RELEASE',release_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_RELITEMS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RELITEMS' AND xtype = 'TR')
    DROP trigger RT_RELITEMS

RT_RELITEMS
create trigger RT_RELITEMS
on RELITEMS
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RELITEMS
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RELITEMS.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RELITEMS.create_date end
from inserted 
where RELITEMS.item_type_id = inserted.item_type_id
and RELITEMS.fk_id = inserted.fk_id
and RELITEMS.related_item_type_id = inserted.related_item_type_id
and RELITEMS.related_fk_id = inserted.related_fk_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select item_type_id,fk_id,related_item_type_id,related_fk_id from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'RELITEMS'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
and @pk3 = refrdel.pk3
and @pk4 = refrdel.pk4
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'RELITEMS',item_type_id,fk_id,related_item_type_id,related_fk_id
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select item_type_id,fk_id,related_item_type_id,related_fk_id from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RELITEMS'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
and @pk3 = refrdel.pk3
and @pk4 = refrdel.pk4
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RELITEMS_DEL
create trigger RT_RELITEMS_DEL
on RELITEMS
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'RELITEMS',item_type_id,fk_id,related_item_type_id,related_fk_id
  	,proj_id
      from deleted
  	
END

RT_RFOLIO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RFOLIO' AND xtype = 'TR')
    DROP trigger RT_RFOLIO

RT_RFOLIO
create trigger RT_RFOLIO
on RFOLIO
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RFOLIO
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RFOLIO.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RFOLIO.create_date end
from inserted 
where RFOLIO.rfolio_id = inserted.rfolio_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RFOLIO',rfolio_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rfolio_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RFOLIO'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RFOLIO_DEL
create trigger RT_RFOLIO_DEL
on RFOLIO
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RFOLIO',rfolio_id,null,null,null
      from deleted
  	
END

RT_RISKCTRL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RISKCTRL' AND xtype = 'TR')
    DROP trigger RT_RISKCTRL

RT_RISKCTRL
create trigger RT_RISKCTRL
on RISKCTRL
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RISKCTRL
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RISKCTRL.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RISKCTRL.create_date end
from inserted 
where RISKCTRL.risk_id = inserted.risk_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'RISKCTRL',risk_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select risk_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RISKCTRL'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RISKCTRL_DEL
create trigger RT_RISKCTRL_DEL
on RISKCTRL
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'RISKCTRL',risk_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_RISKTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RISKTYPE' AND xtype = 'TR')
    DROP trigger RT_RISKTYPE

RT_RISKTYPE
create trigger RT_RISKTYPE
on RISKTYPE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RISKTYPE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RISKTYPE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RISKTYPE.create_date end
from inserted 
where RISKTYPE.risk_type_id = inserted.risk_type_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RISKTYPE',risk_type_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select risk_type_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RISKTYPE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RISKTYPE_DEL
create trigger RT_RISKTYPE_DEL
on RISKTYPE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RISKTYPE',risk_type_id,null,null,null
      from deleted
  	
END

RT_RLFOLIO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RLFOLIO' AND xtype = 'TR')
    DROP trigger RT_RLFOLIO

RT_RLFOLIO
create trigger RT_RLFOLIO
on RLFOLIO
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RLFOLIO
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RLFOLIO.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RLFOLIO.create_date end
from inserted 
where RLFOLIO.rlfolio_id = inserted.rlfolio_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RLFOLIO',rlfolio_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rlfolio_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RLFOLIO'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RLFOLIO_DEL
create trigger RT_RLFOLIO_DEL
on RLFOLIO
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RLFOLIO',rlfolio_id,null,null,null
      from deleted
  	
END

RT_ROLFOLIO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_ROLFOLIO' AND xtype = 'TR')
    DROP trigger RT_ROLFOLIO

RT_ROLFOLIO
create trigger RT_ROLFOLIO
on ROLFOLIO
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update ROLFOLIO
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else ROLFOLIO.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else ROLFOLIO.create_date end
from inserted 
where ROLFOLIO.rlfolio_id = inserted.rlfolio_id
and ROLFOLIO.role_id = inserted.role_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select rlfolio_id,role_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'ROLFOLIO'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ROLFOLIO',rlfolio_id,role_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rlfolio_id,role_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'ROLFOLIO'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_ROLFOLIO_DEL
create trigger RT_ROLFOLIO_DEL
on ROLFOLIO
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ROLFOLIO',rlfolio_id,role_id,null,null
      from deleted
  	
END

RT_ROLERATE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_ROLERATE' AND xtype = 'TR')
    DROP trigger RT_ROLERATE

RT_ROLERATE
create trigger RT_ROLERATE
on ROLERATE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update ROLERATE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else ROLERATE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else ROLERATE.create_date end
from inserted 
where ROLERATE.role_rate_id = inserted.role_rate_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ROLERATE',role_rate_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select role_rate_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'ROLERATE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_ROLERATE_DEL
create trigger RT_ROLERATE_DEL
on ROLERATE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ROLERATE',role_rate_id,null,null,null
      from deleted
  	
END

RT_ROLELIMIT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_ROLELIMIT' AND xtype = 'TR')
    DROP trigger RT_ROLELIMIT

RT_ROLELIMIT
create trigger RT_ROLELIMIT
on ROLELIMIT
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update ROLELIMIT
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else ROLELIMIT.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else ROLELIMIT.create_date end
from inserted 
where ROLELIMIT.rolelimit_id = inserted.rolelimit_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ROLELIMIT',rolelimit_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rolelimit_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'ROLELIMIT'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_ROLELIMIT_DEL
create trigger RT_ROLELIMIT_DEL
on ROLELIMIT
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ROLELIMIT',rolelimit_id,null,null,null
      from deleted
  	
END

RT_ROLES
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_ROLES' AND xtype = 'TR')
    DROP trigger RT_ROLES

RT_ROLES
create trigger RT_ROLES
on ROLES
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update ROLES
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else ROLES.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else ROLES.create_date end
from inserted 
where ROLES.role_id = inserted.role_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ROLES',role_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select role_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'ROLES'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_ROLES_DEL
create trigger RT_ROLES_DEL
on ROLES
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'ROLES',role_id,null,null,null
      from deleted
  	
END

RT_RPT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RPT' AND xtype = 'TR')
    DROP trigger RT_RPT

RT_RPT
create trigger RT_RPT
on RPT
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RPT
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RPT.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RPT.create_date end
from inserted 
where RPT.rpt_id = inserted.rpt_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'RPT',rpt_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rpt_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RPT'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RPT_DEL
create trigger RT_RPT_DEL
on RPT
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'RPT',rpt_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_RPTBATCH
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RPTBATCH' AND xtype = 'TR')
    DROP trigger RT_RPTBATCH

RT_RPTBATCH
create trigger RT_RPTBATCH
on RPTBATCH
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RPTBATCH
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RPTBATCH.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RPTBATCH.create_date end
from inserted 
where RPTBATCH.rpt_batch_id = inserted.rpt_batch_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'RPTBATCH',rpt_batch_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rpt_batch_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RPTBATCH'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RPTBATCH_DEL
create trigger RT_RPTBATCH_DEL
on RPTBATCH
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'RPTBATCH',rpt_batch_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_RPTGROUP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RPTGROUP' AND xtype = 'TR')
    DROP trigger RT_RPTGROUP

RT_RPTGROUP
create trigger RT_RPTGROUP
on RPTGROUP
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RPTGROUP
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RPTGROUP.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RPTGROUP.create_date end
from inserted 
where RPTGROUP.rpt_group_id = inserted.rpt_group_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RPTGROUP',rpt_group_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rpt_group_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RPTGROUP'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RPTGROUP_DEL
create trigger RT_RPTGROUP_DEL
on RPTGROUP
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RPTGROUP',rpt_group_id,null,null,null
      from deleted
  	
END

RT_RPTLIST
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RPTLIST' AND xtype = 'TR')
    DROP trigger RT_RPTLIST

RT_RPTLIST
create trigger RT_RPTLIST
on RPTLIST
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RPTLIST
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RPTLIST.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RPTLIST.create_date end
from inserted 
where RPTLIST.rpt_batch_id = inserted.rpt_batch_id
and RPTLIST.rpt_id = inserted.rpt_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select rpt_batch_id,rpt_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'RPTLIST'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RPTLIST',rpt_batch_id,rpt_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rpt_batch_id,rpt_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RPTLIST'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RPTLIST_DEL
create trigger RT_RPTLIST_DEL
on RPTLIST
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RPTLIST',rpt_batch_id,rpt_id,null,null
      from deleted
  	
END

RT_RSRC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RSRC' AND xtype = 'TR')
    DROP trigger RT_RSRC

RT_RSRC
create trigger RT_RSRC
on RSRC
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RSRC
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RSRC.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RSRC.create_date end
from inserted 
where RSRC.rsrc_id = inserted.rsrc_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRC',rsrc_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rsrc_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RSRC'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RSRC_DEL
create trigger RT_RSRC_DEL
on RSRC
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRC',rsrc_id,null,null,null
      from deleted
  	
END

RT_RSRCANDASH
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RSRCANDASH' AND xtype = 'TR')
    DROP trigger RT_RSRCANDASH

RT_RSRCANDASH
create trigger RT_RSRCANDASH
on RSRCANDASH
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RSRCANDASH
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RSRCANDASH.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RSRCANDASH.create_date end
from inserted 
where RSRCANDASH.dashboard_id = inserted.dashboard_id
and RSRCANDASH.rsrcan_view_id = inserted.rsrcan_view_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select dashboard_id,rsrcan_view_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'RSRCANDASH'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCANDASH',dashboard_id,rsrcan_view_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select dashboard_id,rsrcan_view_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RSRCANDASH'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RSRCANDASH_DEL
create trigger RT_RSRCANDASH_DEL
on RSRCANDASH
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCANDASH',dashboard_id,rsrcan_view_id,null,null
      from deleted
  	
END

RT_RSRCANVIEW
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RSRCANVIEW' AND xtype = 'TR')
    DROP trigger RT_RSRCANVIEW

RT_RSRCANVIEW
create trigger RT_RSRCANVIEW
on RSRCANVIEW
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RSRCANVIEW
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RSRCANVIEW.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RSRCANVIEW.create_date end
from inserted 
where RSRCANVIEW.rsrcan_view_id = inserted.rsrcan_view_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCANVIEW',rsrcan_view_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rsrcan_view_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RSRCANVIEW'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RSRCANVIEW_DEL
create trigger RT_RSRCANVIEW_DEL
on RSRCANVIEW
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCANVIEW',rsrcan_view_id,null,null,null
      from deleted
  	
END

RT_RSRCCURV
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RSRCCURV' AND xtype = 'TR')
    DROP trigger RT_RSRCCURV

RT_RSRCCURV
create trigger RT_RSRCCURV
on RSRCCURV
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RSRCCURV
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RSRCCURV.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RSRCCURV.create_date end
from inserted 
where RSRCCURV.curv_id = inserted.curv_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCCURV',curv_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select curv_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RSRCCURV'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RSRCCURV_DEL
create trigger RT_RSRCCURV_DEL
on RSRCCURV
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCCURV',curv_id,null,null,null
      from deleted
  	
END

RT_RSRCHOUR
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RSRCHOUR' AND xtype = 'TR')
    DROP trigger RT_RSRCHOUR

RT_RSRCHOUR
create trigger RT_RSRCHOUR
on RSRCHOUR
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RSRCHOUR
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RSRCHOUR.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RSRCHOUR.create_date end
from inserted 
where RSRCHOUR.rsrc_hr_id = inserted.rsrc_hr_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'RSRCHOUR',rsrc_hr_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rsrc_hr_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RSRCHOUR'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RSRCHOUR_DEL
create trigger RT_RSRCHOUR_DEL
on RSRCHOUR
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'RSRCHOUR',rsrc_hr_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_RSRCPROP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RSRCPROP' AND xtype = 'TR')
    DROP trigger RT_RSRCPROP

RT_RSRCPROP
create trigger RT_RSRCPROP
on RSRCPROP
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RSRCPROP
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RSRCPROP.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RSRCPROP.create_date end
from inserted 
where RSRCPROP.rsrc_id = inserted.rsrc_id
and RSRCPROP.prop_name = inserted.prop_name
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select rsrc_id,prop_name,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'RSRCPROP'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCPROP',rsrc_id,prop_name,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rsrc_id,prop_name,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RSRCPROP'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RSRCPROP_DEL
create trigger RT_RSRCPROP_DEL
on RSRCPROP
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCPROP',rsrc_id,prop_name,null,null
      from deleted
  	
END

RT_RSRCRATE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RSRCRATE' AND xtype = 'TR')
    DROP trigger RT_RSRCRATE

RT_RSRCRATE
create trigger RT_RSRCRATE
on RSRCRATE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RSRCRATE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RSRCRATE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RSRCRATE.create_date end
from inserted 
where RSRCRATE.rsrc_rate_id = inserted.rsrc_rate_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCRATE',rsrc_rate_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rsrc_rate_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RSRCRATE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RSRCRATE_DEL
create trigger RT_RSRCRATE_DEL
on RSRCRATE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCRATE',rsrc_rate_id,null,null,null
      from deleted
  	
END

RT_RSRCRCAT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RSRCRCAT' AND xtype = 'TR')
    DROP trigger RT_RSRCRCAT

RT_RSRCRCAT
create trigger RT_RSRCRCAT
on RSRCRCAT
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RSRCRCAT
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RSRCRCAT.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RSRCRCAT.create_date end
from inserted 
where RSRCRCAT.rsrc_id = inserted.rsrc_id
and RSRCRCAT.rsrc_catg_type_id = inserted.rsrc_catg_type_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select rsrc_id,rsrc_catg_type_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'RSRCRCAT'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCRCAT',rsrc_id,rsrc_catg_type_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rsrc_id,rsrc_catg_type_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RSRCRCAT'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RSRCRCAT_DEL
create trigger RT_RSRCRCAT_DEL
on RSRCRCAT
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCRCAT',rsrc_id,rsrc_catg_type_id,null,null
      from deleted
  	
END

RT_RSRCROLE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RSRCROLE' AND xtype = 'TR')
    DROP trigger RT_RSRCROLE

RT_RSRCROLE
create trigger RT_RSRCROLE
on RSRCROLE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RSRCROLE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RSRCROLE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RSRCROLE.create_date end
from inserted 
where RSRCROLE.rsrc_id = inserted.rsrc_id
and RSRCROLE.role_id = inserted.role_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select rsrc_id,role_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'RSRCROLE'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCROLE',rsrc_id,role_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rsrc_id,role_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RSRCROLE'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RSRCROLE_DEL
create trigger RT_RSRCROLE_DEL
on RSRCROLE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCROLE',rsrc_id,role_id,null,null
      from deleted
  	
END

RT_RSRCSEC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RSRCSEC' AND xtype = 'TR')
    DROP trigger RT_RSRCSEC

RT_RSRCSEC
create trigger RT_RSRCSEC
on RSRCSEC
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RSRCSEC
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RSRCSEC.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RSRCSEC.create_date end
from inserted 
where RSRCSEC.user_id = inserted.user_id
and RSRCSEC.rsrc_id = inserted.rsrc_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select user_id,rsrc_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'RSRCSEC'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCSEC',user_id,rsrc_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select user_id,rsrc_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RSRCSEC'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RSRCSEC_DEL
create trigger RT_RSRCSEC_DEL
on RSRCSEC
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRCSEC',user_id,rsrc_id,null,null
      from deleted
  	
END

RT_RSRFOLIO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_RSRFOLIO' AND xtype = 'TR')
    DROP trigger RT_RSRFOLIO

RT_RSRFOLIO
create trigger RT_RSRFOLIO
on RSRFOLIO
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update RSRFOLIO
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else RSRFOLIO.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else RSRFOLIO.create_date end
from inserted 
where RSRFOLIO.rfolio_id = inserted.rfolio_id
and RSRFOLIO.rsrc_id = inserted.rsrc_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select rfolio_id,rsrc_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'RSRFOLIO'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRFOLIO',rfolio_id,rsrc_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select rfolio_id,rsrc_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'RSRFOLIO'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_RSRFOLIO_DEL
create trigger RT_RSRFOLIO_DEL
on RSRFOLIO
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'RSRFOLIO',rfolio_id,rsrc_id,null,null
      from deleted
  	
END

RT_SCENARIO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_SCENARIO' AND xtype = 'TR')
    DROP trigger RT_SCENARIO

RT_SCENARIO
create trigger RT_SCENARIO
on SCENARIO
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update SCENARIO
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else SCENARIO.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else SCENARIO.create_date end
from inserted 
where SCENARIO.scenario_id = inserted.scenario_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'SCENARIO',scenario_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select scenario_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'SCENARIO'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_SCENARIO_DEL
create trigger RT_SCENARIO_DEL
on SCENARIO
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'SCENARIO',scenario_id,null,null,null
      from deleted
  	
END

RT_SCENPROJ
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_SCENPROJ' AND xtype = 'TR')
    DROP trigger RT_SCENPROJ

RT_SCENPROJ
create trigger RT_SCENPROJ
on SCENPROJ
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update SCENPROJ
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else SCENPROJ.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else SCENPROJ.create_date end
from inserted 
where SCENPROJ.scenario_id = inserted.scenario_id
and SCENPROJ.proj_id = inserted.proj_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select scenario_id,proj_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'SCENPROJ'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'SCENPROJ',scenario_id,proj_id,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select scenario_id,proj_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'SCENPROJ'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_SCENPROJ_DEL
create trigger RT_SCENPROJ_DEL
on SCENPROJ
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'SCENPROJ',scenario_id,proj_id,null,null
  	,proj_id
      from deleted
  	
END

RT_SCENUSER
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_SCENUSER' AND xtype = 'TR')
    DROP trigger RT_SCENUSER

RT_SCENUSER
create trigger RT_SCENUSER
on SCENUSER
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update SCENUSER
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else SCENUSER.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else SCENUSER.create_date end
from inserted 
where SCENUSER.scenario_id = inserted.scenario_id
and SCENUSER.user_id = inserted.user_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select scenario_id,user_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'SCENUSER'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'SCENUSER',scenario_id,user_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select scenario_id,user_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'SCENUSER'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_SCENUSER_DEL
create trigger RT_SCENUSER_DEL
on SCENUSER
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'SCENUSER',scenario_id,user_id,null,null
      from deleted
  	
END

RT_SCENROLE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_SCENROLE' AND xtype = 'TR')
    DROP trigger RT_SCENROLE

RT_SCENROLE
create trigger RT_SCENROLE
on SCENROLE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update SCENROLE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else SCENROLE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else SCENROLE.create_date end
from inserted 
where SCENROLE.scenario_id = inserted.scenario_id
and SCENROLE.role_id = inserted.role_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select scenario_id,role_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'SCENROLE'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'SCENROLE',scenario_id,role_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select scenario_id,role_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'SCENROLE'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_SCENROLE_DEL
create trigger RT_SCENROLE_DEL
on SCENROLE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'SCENROLE',scenario_id,role_id,null,null
      from deleted
  	
END

RT_SETTINGS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_SETTINGS' AND xtype = 'TR')
    DROP trigger RT_SETTINGS

RT_SETTINGS
create trigger RT_SETTINGS
on SETTINGS
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update SETTINGS
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else SETTINGS.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else SETTINGS.create_date end
from inserted 
where SETTINGS.namespace = inserted.namespace
and SETTINGS.setting_name = inserted.setting_name
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select namespace,setting_name,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'SETTINGS'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'SETTINGS',namespace,setting_name,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select namespace,setting_name,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'SETTINGS'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_SETTINGS_DEL
create trigger RT_SETTINGS_DEL
on SETTINGS
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'SETTINGS',namespace,setting_name,null,null
      from deleted
  	
END

RT_SHIFT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_SHIFT' AND xtype = 'TR')
    DROP trigger RT_SHIFT

RT_SHIFT
create trigger RT_SHIFT
on SHIFT
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update SHIFT
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else SHIFT.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else SHIFT.create_date end
from inserted 
where SHIFT.shift_id = inserted.shift_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'SHIFT',shift_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select shift_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'SHIFT'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_SHIFT_DEL
create trigger RT_SHIFT_DEL
on SHIFT
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'SHIFT',shift_id,null,null,null
      from deleted
  	
END

RT_SHIFTPER
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_SHIFTPER' AND xtype = 'TR')
    DROP trigger RT_SHIFTPER

RT_SHIFTPER
create trigger RT_SHIFTPER
on SHIFTPER
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update SHIFTPER
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else SHIFTPER.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else SHIFTPER.create_date end
from inserted 
where SHIFTPER.shift_period_id = inserted.shift_period_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'SHIFTPER',shift_period_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select shift_period_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'SHIFTPER'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_SHIFTPER_DEL
create trigger RT_SHIFTPER_DEL
on SHIFTPER
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'SHIFTPER',shift_period_id,null,null,null
      from deleted
  	
END

RT_TASK
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASK' AND xtype = 'TR')
    DROP trigger RT_TASK

RT_TASK
create trigger RT_TASK
on TASK
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASK
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASK.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASK.create_date end
from inserted 
where TASK.task_id = inserted.task_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASK',task_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select task_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASK'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASK_DEL
create trigger RT_TASK_DEL
on TASK
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASK',task_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_TASKACTV
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKACTV' AND xtype = 'TR')
    DROP trigger RT_TASKACTV

RT_TASKACTV
create trigger RT_TASKACTV
on TASKACTV
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKACTV
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKACTV.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKACTV.create_date end
from inserted 
where TASKACTV.task_id = inserted.task_id
and TASKACTV.actv_code_type_id = inserted.actv_code_type_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select task_id,actv_code_type_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'TASKACTV'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKACTV',task_id,actv_code_type_id,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select task_id,actv_code_type_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKACTV'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKACTV_DEL
create trigger RT_TASKACTV_DEL
on TASKACTV
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKACTV',task_id,actv_code_type_id,null,null
  	,proj_id
      from deleted
  	
END

RT_TASKDOC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKDOC' AND xtype = 'TR')
    DROP trigger RT_TASKDOC

RT_TASKDOC
create trigger RT_TASKDOC
on TASKDOC
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKDOC
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKDOC.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKDOC.create_date end
from inserted 
where TASKDOC.taskdoc_id = inserted.taskdoc_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKDOC',taskdoc_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select taskdoc_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKDOC'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKDOC_DEL
create trigger RT_TASKDOC_DEL
on TASKDOC
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKDOC',taskdoc_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_TASKFDBK
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKFDBK' AND xtype = 'TR')
    DROP trigger RT_TASKFDBK

RT_TASKFDBK
create trigger RT_TASKFDBK
on TASKFDBK
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKFDBK
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKFDBK.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKFDBK.create_date end
from inserted 
where TASKFDBK.task_id = inserted.task_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKFDBK',task_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select task_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKFDBK'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKFDBK_DEL
create trigger RT_TASKFDBK_DEL
on TASKFDBK
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKFDBK',task_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_TASKFIN
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKFIN' AND xtype = 'TR')
    DROP trigger RT_TASKFIN

RT_TASKFIN
create trigger RT_TASKFIN
on TASKFIN
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKFIN
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKFIN.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKFIN.create_date end
from inserted 
where TASKFIN.fin_dates_id = inserted.fin_dates_id
and TASKFIN.task_id = inserted.task_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select fin_dates_id,task_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'TASKFIN'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKFIN',fin_dates_id,task_id,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select fin_dates_id,task_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKFIN'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKFIN_DEL
create trigger RT_TASKFIN_DEL
on TASKFIN
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKFIN',fin_dates_id,task_id,null,null
  	,proj_id
      from deleted
  	
END

RT_TASKMEMO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKMEMO' AND xtype = 'TR')
    DROP trigger RT_TASKMEMO

RT_TASKMEMO
create trigger RT_TASKMEMO
on TASKMEMO
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKMEMO
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKMEMO.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKMEMO.create_date end
from inserted 
where TASKMEMO.memo_id = inserted.memo_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKMEMO',memo_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select memo_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKMEMO'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKMEMO_DEL
create trigger RT_TASKMEMO_DEL
on TASKMEMO
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKMEMO',memo_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_TASKNOTE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKNOTE' AND xtype = 'TR')
    DROP trigger RT_TASKNOTE

RT_TASKNOTE
create trigger RT_TASKNOTE
on TASKNOTE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKNOTE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKNOTE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKNOTE.create_date end
from inserted 
where TASKNOTE.task_id = inserted.task_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKNOTE',task_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select task_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKNOTE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKNOTE_DEL
create trigger RT_TASKNOTE_DEL
on TASKNOTE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKNOTE',task_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_TASKPRED
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKPRED' AND xtype = 'TR')
    DROP trigger RT_TASKPRED

RT_TASKPRED
create trigger RT_TASKPRED
on TASKPRED
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKPRED
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKPRED.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKPRED.create_date end
from inserted 
where TASKPRED.task_pred_id = inserted.task_pred_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKPRED',task_pred_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKPRED',task_pred_id,null,null,null
  	,pred_proj_id
      from inserted
      where pred_proj_id != proj_id
      and delete_session_id is not null
  	
  	
    declare ins cursor  for select task_pred_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKPRED'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKPRED_DEL
create trigger RT_TASKPRED_DEL
on TASKPRED
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKPRED',task_pred_id,null,null,null
  	,proj_id
      from deleted
  	
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKPRED',task_pred_id,null,null,null
  	,pred_proj_id
      from deleted
      where pred_proj_id != proj_id
END

RT_TASKPROC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKPROC' AND xtype = 'TR')
    DROP trigger RT_TASKPROC

RT_TASKPROC
create trigger RT_TASKPROC
on TASKPROC
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKPROC
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKPROC.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKPROC.create_date end
from inserted 
where TASKPROC.proc_id = inserted.proc_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKPROC',proc_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select proc_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKPROC'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKPROC_DEL
create trigger RT_TASKPROC_DEL
on TASKPROC
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKPROC',proc_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_TASKRSRC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKRSRC' AND xtype = 'TR')
    DROP trigger RT_TASKRSRC

RT_TASKRSRC
create trigger RT_TASKRSRC
on TASKRSRC
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKRSRC
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKRSRC.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKRSRC.create_date end
from inserted 
where TASKRSRC.taskrsrc_id = inserted.taskrsrc_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKRSRC',taskrsrc_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select taskrsrc_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKRSRC'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKRSRC_DEL
create trigger RT_TASKRSRC_DEL
on TASKRSRC
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKRSRC',taskrsrc_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_TASKSUM
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKSUM' AND xtype = 'TR')
    DROP trigger RT_TASKSUM

RT_TASKSUM
create trigger RT_TASKSUM
on TASKSUM
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKSUM
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKSUM.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKSUM.create_date end
from inserted 
where TASKSUM.task_sum_id = inserted.task_sum_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKSUM',task_sum_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select task_sum_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKSUM'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKSUM_DEL
create trigger RT_TASKSUM_DEL
on TASKSUM
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKSUM',task_sum_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_TASKSUMFIN
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKSUMFIN' AND xtype = 'TR')
    DROP trigger RT_TASKSUMFIN

RT_TASKSUMFIN
create trigger RT_TASKSUMFIN
on TASKSUMFIN
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKSUMFIN
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKSUMFIN.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKSUMFIN.create_date end
from inserted 
where TASKSUMFIN.task_sum_fin_id = inserted.task_sum_fin_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKSUMFIN',task_sum_fin_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select task_sum_fin_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKSUMFIN'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKSUMFIN_DEL
create trigger RT_TASKSUMFIN_DEL
on TASKSUMFIN
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKSUMFIN',task_sum_fin_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_TASKUSER
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKUSER' AND xtype = 'TR')
    DROP trigger RT_TASKUSER

RT_TASKUSER
create trigger RT_TASKUSER
on TASKUSER
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKUSER
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKUSER.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKUSER.create_date end
from inserted 
where TASKUSER.task_id = inserted.task_id
and TASKUSER.user_id = inserted.user_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select task_id,user_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'TASKUSER'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKUSER',task_id,user_id,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select task_id,user_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKUSER'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKUSER_DEL
create trigger RT_TASKUSER_DEL
on TASKUSER
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKUSER',task_id,user_id,null,null
  	,proj_id
      from deleted
  	
END

RT_TASKWKSP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TASKWKSP' AND xtype = 'TR')
    DROP trigger RT_TASKWKSP

RT_TASKWKSP
create trigger RT_TASKWKSP
on TASKWKSP
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TASKWKSP
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TASKWKSP.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TASKWKSP.create_date end
from inserted 
where TASKWKSP.workspace_id = inserted.workspace_id
and TASKWKSP.task_id = inserted.task_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select workspace_id,task_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'TASKWKSP'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKWKSP',workspace_id,task_id,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select workspace_id,task_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TASKWKSP'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TASKWKSP_DEL
create trigger RT_TASKWKSP_DEL
on TASKWKSP
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TASKWKSP',workspace_id,task_id,null,null
  	,proj_id
      from deleted
  	
END

RT_THRSPARM
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_THRSPARM' AND xtype = 'TR')
    DROP trigger RT_THRSPARM

RT_THRSPARM
create trigger RT_THRSPARM
on THRSPARM
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update THRSPARM
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else THRSPARM.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else THRSPARM.create_date end
from inserted 
where THRSPARM.thresh_parm_id = inserted.thresh_parm_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'THRSPARM',thresh_parm_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select thresh_parm_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'THRSPARM'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_THRSPARM_DEL
create trigger RT_THRSPARM_DEL
on THRSPARM
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'THRSPARM',thresh_parm_id,null,null,null
      from deleted
  	
END

RT_TIMESHT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TIMESHT' AND xtype = 'TR')
    DROP trigger RT_TIMESHT

RT_TIMESHT
create trigger RT_TIMESHT
on TIMESHT
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TIMESHT
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TIMESHT.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TIMESHT.create_date end
from inserted 
where TIMESHT.ts_id = inserted.ts_id
and TIMESHT.rsrc_id = inserted.rsrc_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select ts_id,rsrc_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'TIMESHT'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'TIMESHT',ts_id,rsrc_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select ts_id,rsrc_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TIMESHT'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TIMESHT_DEL
create trigger RT_TIMESHT_DEL
on TIMESHT
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'TIMESHT',ts_id,rsrc_id,null,null
      from deleted
  	
END

RT_TMPLCATG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TMPLCATG' AND xtype = 'TR')
    DROP trigger RT_TMPLCATG

RT_TMPLCATG
create trigger RT_TMPLCATG
on TMPLCATG
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TMPLCATG
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TMPLCATG.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TMPLCATG.create_date end
from inserted 
where TMPLCATG.tmplcatg_catg_id = inserted.tmplcatg_catg_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'TMPLCATG',tmplcatg_catg_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select tmplcatg_catg_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TMPLCATG'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TMPLCATG_DEL
create trigger RT_TMPLCATG_DEL
on TMPLCATG
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'TMPLCATG',tmplcatg_catg_id,null,null,null
      from deleted
  	
END

RT_TRAKVIEW
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TRAKVIEW' AND xtype = 'TR')
    DROP trigger RT_TRAKVIEW

RT_TRAKVIEW
create trigger RT_TRAKVIEW
on TRAKVIEW
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TRAKVIEW
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TRAKVIEW.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TRAKVIEW.create_date end
from inserted 
where TRAKVIEW.track_view_id = inserted.track_view_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'TRAKVIEW',track_view_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select track_view_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TRAKVIEW'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TRAKVIEW_DEL
create trigger RT_TRAKVIEW_DEL
on TRAKVIEW
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'TRAKVIEW',track_view_id,null,null,null
      from deleted
  	
END

RT_TRSRCFIN
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TRSRCFIN' AND xtype = 'TR')
    DROP trigger RT_TRSRCFIN

RT_TRSRCFIN
create trigger RT_TRSRCFIN
on TRSRCFIN
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TRSRCFIN
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TRSRCFIN.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TRSRCFIN.create_date end
from inserted 
where TRSRCFIN.fin_dates_id = inserted.fin_dates_id
and TRSRCFIN.taskrsrc_id = inserted.taskrsrc_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select fin_dates_id,taskrsrc_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'TRSRCFIN'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TRSRCFIN',fin_dates_id,taskrsrc_id,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select fin_dates_id,taskrsrc_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TRSRCFIN'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TRSRCFIN_DEL
create trigger RT_TRSRCFIN_DEL
on TRSRCFIN
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TRSRCFIN',fin_dates_id,taskrsrc_id,null,null
  	,proj_id
      from deleted
  	
END

RT_TRSRCSUM
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TRSRCSUM' AND xtype = 'TR')
    DROP trigger RT_TRSRCSUM

RT_TRSRCSUM
create trigger RT_TRSRCSUM
on TRSRCSUM
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TRSRCSUM
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TRSRCSUM.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TRSRCSUM.create_date end
from inserted 
where TRSRCSUM.taskrsrc_sum_id = inserted.taskrsrc_sum_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TRSRCSUM',taskrsrc_sum_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select taskrsrc_sum_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TRSRCSUM'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TRSRCSUM_DEL
create trigger RT_TRSRCSUM_DEL
on TRSRCSUM
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TRSRCSUM',taskrsrc_sum_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_TRSRCSUMFN
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TRSRCSUMFN' AND xtype = 'TR')
    DROP trigger RT_TRSRCSUMFN

RT_TRSRCSUMFN
create trigger RT_TRSRCSUMFN
on TRSRCSUMFN
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TRSRCSUMFN
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TRSRCSUMFN.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TRSRCSUMFN.create_date end
from inserted 
where TRSRCSUMFN.trsrc_sum_fin_id = inserted.trsrc_sum_fin_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TRSRCSUMFN',trsrc_sum_fin_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select trsrc_sum_fin_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TRSRCSUMFN'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TRSRCSUMFN_DEL
create trigger RT_TRSRCSUMFN_DEL
on TRSRCSUMFN
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TRSRCSUMFN',trsrc_sum_fin_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_TSDATES
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TSDATES' AND xtype = 'TR')
    DROP trigger RT_TSDATES

RT_TSDATES
create trigger RT_TSDATES
on TSDATES
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TSDATES
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TSDATES.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TSDATES.create_date end
from inserted 
where TSDATES.ts_id = inserted.ts_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'TSDATES',ts_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select ts_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TSDATES'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TSDATES_DEL
create trigger RT_TSDATES_DEL
on TSDATES
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'TSDATES',ts_id,null,null,null
      from deleted
  	
END

RT_TSDELEGATE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_TSDELEGATE' AND xtype = 'TR')
    DROP trigger RT_TSDELEGATE

RT_TSDELEGATE
create trigger RT_TSDELEGATE
on TSDELEGATE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update TSDELEGATE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else TSDELEGATE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else TSDELEGATE.create_date end
from inserted 
where TSDELEGATE.ts_delegate_id = inserted.ts_delegate_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TSDELEGATE',ts_delegate_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select ts_delegate_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'TSDELEGATE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_TSDELEGATE_DEL
create trigger RT_TSDELEGATE_DEL
on TSDELEGATE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'TSDELEGATE',ts_delegate_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_UDFCODE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_UDFCODE' AND xtype = 'TR')
    DROP trigger RT_UDFCODE

RT_UDFCODE
create trigger RT_UDFCODE
on UDFCODE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update UDFCODE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else UDFCODE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else UDFCODE.create_date end
from inserted 
where UDFCODE.udf_code_id = inserted.udf_code_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'UDFCODE',udf_code_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select udf_code_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'UDFCODE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_UDFCODE_DEL
create trigger RT_UDFCODE_DEL
on UDFCODE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'UDFCODE',udf_code_id,null,null,null
      from deleted
  	
END

RT_UDFTYPE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_UDFTYPE' AND xtype = 'TR')
    DROP trigger RT_UDFTYPE

RT_UDFTYPE
create trigger RT_UDFTYPE
on UDFTYPE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update UDFTYPE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else UDFTYPE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else UDFTYPE.create_date end
from inserted 
where UDFTYPE.udf_type_id = inserted.udf_type_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'UDFTYPE',udf_type_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select udf_type_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'UDFTYPE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_UDFTYPE_DEL
create trigger RT_UDFTYPE_DEL
on UDFTYPE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'UDFTYPE',udf_type_id,null,null,null
      from deleted
  	
END

RT_UDFVALUE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_UDFVALUE' AND xtype = 'TR')
    DROP trigger RT_UDFVALUE

RT_UDFVALUE
create trigger RT_UDFVALUE
on UDFVALUE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update UDFVALUE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else UDFVALUE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else UDFVALUE.create_date end
from inserted 
where UDFVALUE.udf_type_id = inserted.udf_type_id
and UDFVALUE.fk_id = inserted.fk_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select udf_type_id,fk_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'UDFVALUE'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'UDFVALUE',udf_type_id,fk_id,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select udf_type_id,fk_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'UDFVALUE'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_UDFVALUE_DEL
create trigger RT_UDFVALUE_DEL
on UDFVALUE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'UDFVALUE',udf_type_id,fk_id,null,null
  	,proj_id
      from deleted
  	
END

RT_UMEASURE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_UMEASURE' AND xtype = 'TR')
    DROP trigger RT_UMEASURE

RT_UMEASURE
create trigger RT_UMEASURE
on UMEASURE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update UMEASURE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else UMEASURE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else UMEASURE.create_date end
from inserted 
where UMEASURE.unit_id = inserted.unit_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'UMEASURE',unit_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select unit_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'UMEASURE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_UMEASURE_DEL
create trigger RT_UMEASURE_DEL
on UMEASURE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'UMEASURE',unit_id,null,null,null
      from deleted
  	
END

RT_USERCOL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_USERCOL' AND xtype = 'TR')
    DROP trigger RT_USERCOL

RT_USERCOL
create trigger RT_USERCOL
on USERCOL
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update USERCOL
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else USERCOL.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else USERCOL.create_date end
from inserted 
where USERCOL.user_col_id = inserted.user_col_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USERCOL',user_col_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select user_col_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'USERCOL'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_USERCOL_DEL
create trigger RT_USERCOL_DEL
on USERCOL
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USERCOL',user_col_id,null,null,null
      from deleted
  	
END

RT_USERDATA
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_USERDATA' AND xtype = 'TR')
    DROP trigger RT_USERDATA

RT_USERDATA
create trigger RT_USERDATA
on USERDATA
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update USERDATA
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else USERDATA.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else USERDATA.create_date end
from inserted 
where USERDATA.user_data_id = inserted.user_data_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USERDATA',user_data_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select user_data_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'USERDATA'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_USERDATA_DEL
create trigger RT_USERDATA_DEL
on USERDATA
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USERDATA',user_data_id,null,null,null
      from deleted
  	
END

RT_USERENG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_USERENG' AND xtype = 'TR')
    DROP trigger RT_USERENG

RT_USERENG
create trigger RT_USERENG
on USERENG
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update USERENG
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else USERENG.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else USERENG.create_date end
from inserted 
where USERENG.user_eng_id = inserted.user_eng_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USERENG',user_eng_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select user_eng_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'USERENG'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_USERENG_DEL
create trigger RT_USERENG_DEL
on USERENG
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USERENG',user_eng_id,null,null,null
      from deleted
  	
END

RT_USEROBS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_USEROBS' AND xtype = 'TR')
    DROP trigger RT_USEROBS

RT_USEROBS
create trigger RT_USEROBS
on USEROBS
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update USEROBS
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else USEROBS.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else USEROBS.create_date end
from inserted 
where USEROBS.user_id = inserted.user_id
and USEROBS.obs_id = inserted.obs_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select user_id,obs_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'USEROBS'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USEROBS',user_id,obs_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select user_id,obs_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'USEROBS'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_USEROBS_DEL
create trigger RT_USEROBS_DEL
on USEROBS
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USEROBS',user_id,obs_id,null,null
      from deleted
  	
END

RT_USEROPEN
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_USEROPEN' AND xtype = 'TR')
    DROP trigger RT_USEROPEN

RT_USEROPEN
create trigger RT_USEROPEN
on USEROPEN
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update USEROPEN
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else USEROPEN.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else USEROPEN.create_date end
from inserted 
where USEROPEN.user_open_id = inserted.user_open_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USEROPEN',user_open_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select user_open_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'USEROPEN'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_USEROPEN_DEL
create trigger RT_USEROPEN_DEL
on USEROPEN
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USEROPEN',user_open_id,null,null,null
      from deleted
  	
END

RT_USROPNVAL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_USROPNVAL' AND xtype = 'TR')
    DROP trigger RT_USROPNVAL

RT_USROPNVAL
create trigger RT_USROPNVAL
on USROPNVAL
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update USROPNVAL
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else USROPNVAL.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else USROPNVAL.create_date end
from inserted 
where USROPNVAL.user_open_id = inserted.user_open_id
and USROPNVAL.pk_id = inserted.pk_id
and USROPNVAL.usropn_type = inserted.usropn_type
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select user_open_id,pk_id,usropn_type,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'USROPNVAL'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
and @pk3 = refrdel.pk3
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USROPNVAL',user_open_id,pk_id,usropn_type,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select user_open_id,pk_id,usropn_type,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'USROPNVAL'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
and @pk3 = refrdel.pk3
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_USROPNVAL_DEL
create trigger RT_USROPNVAL_DEL
on USROPNVAL
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USROPNVAL',user_open_id,pk_id,usropn_type,null
      from deleted
  	
END

RT_USERS
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_USERS' AND xtype = 'TR')
    DROP trigger RT_USERS

RT_USERS
create trigger RT_USERS
on USERS
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update USERS
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else USERS.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else USERS.create_date end
from inserted 
where USERS.user_id = inserted.user_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USERS',user_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select user_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'USERS'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_USERS_DEL
create trigger RT_USERS_DEL
on USERS
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USERS',user_id,null,null,null
      from deleted
  	
END

RT_USERSET
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_USERSET' AND xtype = 'TR')
    DROP trigger RT_USERSET

RT_USERSET
create trigger RT_USERSET
on USERSET
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update USERSET
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else USERSET.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else USERSET.create_date end
from inserted 
where USERSET.namespace = inserted.namespace
and USERSET.setting_name = inserted.setting_name
and USERSET.user_id = inserted.user_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select namespace,setting_name,user_id,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'USERSET'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
and @pk3 = refrdel.pk3
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USERSET',namespace,setting_name,user_id,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select namespace,setting_name,user_id,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'USERSET'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
and @pk3 = refrdel.pk3
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_USERSET_DEL
create trigger RT_USERSET_DEL
on USERSET
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USERSET',namespace,setting_name,user_id,null
      from deleted
  	
END

RT_USERWKSP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_USERWKSP' AND xtype = 'TR')
    DROP trigger RT_USERWKSP

RT_USERWKSP
create trigger RT_USERWKSP
on USERWKSP
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update USERWKSP
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else USERWKSP.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else USERWKSP.create_date end
from inserted 
where USERWKSP.user_id = inserted.user_id
and USERWKSP.workspace_id = inserted.workspace_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select user_id,workspace_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'USERWKSP'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'USERWKSP',user_id,workspace_id,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select user_id,workspace_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'USERWKSP'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_USERWKSP_DEL
create trigger RT_USERWKSP_DEL
on USERWKSP
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'USERWKSP',user_id,workspace_id,null,null
  	,proj_id
      from deleted
  	
END

RT_USESSION
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_USESSION' AND xtype = 'TR')
    DROP trigger RT_USESSION

RT_USESSION
create trigger RT_USESSION
on USESSION
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update USESSION
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else USESSION.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else USESSION.create_date end
from inserted 
where USESSION.session_id = inserted.session_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USESSION',session_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select session_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'USESSION'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_USESSION_DEL
create trigger RT_USESSION_DEL
on USESSION
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'USESSION',session_id,null,null,null
      from deleted
  	
END

RT_VIEWPREF
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_VIEWPREF' AND xtype = 'TR')
    DROP trigger RT_VIEWPREF

RT_VIEWPREF
create trigger RT_VIEWPREF
on VIEWPREF
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update VIEWPREF
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else VIEWPREF.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else VIEWPREF.create_date end
from inserted 
where VIEWPREF.view_pref_id = inserted.view_pref_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'VIEWPREF',view_pref_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select view_pref_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'VIEWPREF'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_VIEWPREF_DEL
create trigger RT_VIEWPREF_DEL
on VIEWPREF
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'VIEWPREF',view_pref_id,null,null,null
      from deleted
  	
END

RT_VWPREFDASH
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_VWPREFDASH' AND xtype = 'TR')
    DROP trigger RT_VWPREFDASH

RT_VWPREFDASH
create trigger RT_VWPREFDASH
on VWPREFDASH
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update VWPREFDASH
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else VWPREFDASH.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else VWPREFDASH.create_date end
from inserted 
where VWPREFDASH.dashboard_id = inserted.dashboard_id
and VWPREFDASH.view_pref_id = inserted.view_pref_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select dashboard_id,view_pref_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'VWPREFDASH'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'VWPREFDASH',dashboard_id,view_pref_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select dashboard_id,view_pref_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'VWPREFDASH'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_VWPREFDASH_DEL
create trigger RT_VWPREFDASH_DEL
on VWPREFDASH
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'VWPREFDASH',dashboard_id,view_pref_id,null,null
      from deleted
  	
END

RT_VWPREFDATA
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_VWPREFDATA' AND xtype = 'TR')
    DROP trigger RT_VWPREFDATA

RT_VWPREFDATA
create trigger RT_VWPREFDATA
on VWPREFDATA
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update VWPREFDATA
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else VWPREFDATA.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else VWPREFDATA.create_date end
from inserted 
where VWPREFDATA.view_pref_id = inserted.view_pref_id
and VWPREFDATA.view_pref_key = inserted.view_pref_key
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select view_pref_id,view_pref_key,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'VWPREFDATA'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'VWPREFDATA',view_pref_id,view_pref_key,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select view_pref_id,view_pref_key,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'VWPREFDATA'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_VWPREFDATA_DEL
create trigger RT_VWPREFDATA_DEL
on VWPREFDATA
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'VWPREFDATA',view_pref_id,view_pref_key,null,null
      from deleted
  	
END

RT_VWPREFUSER
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_VWPREFUSER' AND xtype = 'TR')
    DROP trigger RT_VWPREFUSER

RT_VWPREFUSER
create trigger RT_VWPREFUSER
on VWPREFUSER
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update VWPREFUSER
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else VWPREFUSER.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else VWPREFUSER.create_date end
from inserted 
where VWPREFUSER.view_pref_id = inserted.view_pref_id
and VWPREFUSER.user_id = inserted.user_id
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select view_pref_id,user_id,null,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'VWPREFUSER'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'VWPREFUSER',view_pref_id,user_id,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select view_pref_id,user_id,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'VWPREFUSER'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_VWPREFUSER_DEL
create trigger RT_VWPREFUSER_DEL
on VWPREFUSER
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'VWPREFUSER',view_pref_id,user_id,null,null
      from deleted
  	
END

RT_VIEWPROP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_VIEWPROP' AND xtype = 'TR')
    DROP trigger RT_VIEWPROP

RT_VIEWPROP
create trigger RT_VIEWPROP
on VIEWPROP
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update VIEWPROP
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else VIEWPROP.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else VIEWPROP.create_date end
from inserted 
where VIEWPROP.view_id = inserted.view_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'VIEWPROP',view_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select view_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'VIEWPROP'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_VIEWPROP_DEL
create trigger RT_VIEWPROP_DEL
on VIEWPROP
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'VIEWPROP',view_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_WBSBUDG
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_WBSBUDG' AND xtype = 'TR')
    DROP trigger RT_WBSBUDG

RT_WBSBUDG
create trigger RT_WBSBUDG
on WBSBUDG
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update WBSBUDG
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else WBSBUDG.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else WBSBUDG.create_date end
from inserted 
where WBSBUDG.wbs_budg_id = inserted.wbs_budg_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'WBSBUDG',wbs_budg_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select wbs_budg_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'WBSBUDG'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_WBSBUDG_DEL
create trigger RT_WBSBUDG_DEL
on WBSBUDG
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'WBSBUDG',wbs_budg_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_WBSMEMO
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_WBSMEMO' AND xtype = 'TR')
    DROP trigger RT_WBSMEMO

RT_WBSMEMO
create trigger RT_WBSMEMO
on WBSMEMO
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update WBSMEMO
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else WBSMEMO.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else WBSMEMO.create_date end
from inserted 
where WBSMEMO.wbs_memo_id = inserted.wbs_memo_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'WBSMEMO',wbs_memo_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select wbs_memo_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'WBSMEMO'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_WBSMEMO_DEL
create trigger RT_WBSMEMO_DEL
on WBSMEMO
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'WBSMEMO',wbs_memo_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_WBRSCAT
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_WBRSCAT' AND xtype = 'TR')
    DROP trigger RT_WBRSCAT

RT_WBRSCAT
create trigger RT_WBRSCAT
on WBRSCAT
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update WBRSCAT
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else WBRSCAT.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else WBRSCAT.create_date end
from inserted 
where WBRSCAT.wbrs_cat_id = inserted.wbrs_cat_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'WBRSCAT',wbrs_cat_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select wbrs_cat_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'WBRSCAT'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_WBRSCAT_DEL
create trigger RT_WBRSCAT_DEL
on WBRSCAT
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'WBRSCAT',wbrs_cat_id,null,null,null
      from deleted
  	
END

RT_WBSRSRC
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_WBSRSRC' AND xtype = 'TR')
    DROP trigger RT_WBSRSRC

RT_WBSRSRC
create trigger RT_WBSRSRC
on WBSRSRC
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update WBSRSRC
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else WBSRSRC.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else WBSRSRC.create_date end
from inserted 
where WBSRSRC.wbsrsrc_id = inserted.wbsrsrc_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'WBSRSRC',wbsrsrc_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select wbsrsrc_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'WBSRSRC'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_WBSRSRC_DEL
create trigger RT_WBSRSRC_DEL
on WBSRSRC
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'WBSRSRC',wbsrsrc_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_WBSRSRC_QTY
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_WBSRSRC_QTY' AND xtype = 'TR')
    DROP trigger RT_WBSRSRC_QTY

RT_WBSRSRC_QTY
create trigger RT_WBSRSRC_QTY
on WBSRSRC_QTY
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update WBSRSRC_QTY
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else WBSRSRC_QTY.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else WBSRSRC_QTY.create_date end
from inserted 
where WBSRSRC_QTY.wbsrsrc_id = inserted.wbsrsrc_id
and WBSRSRC_QTY.week_start = inserted.week_start
and WBSRSRC_QTY.month_start = inserted.month_start
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select wbsrsrc_id,week_start,month_start,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'WBSRSRC_QTY'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
and @pk3 = refrdel.pk3
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'WBSRSRC_QTY',wbsrsrc_id,week_start,month_start,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select wbsrsrc_id,week_start,month_start,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'WBSRSRC_QTY'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
and @pk3 = refrdel.pk3
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_WBSRSRC_QTY_DEL
create trigger RT_WBSRSRC_QTY_DEL
on WBSRSRC_QTY
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'WBSRSRC_QTY',wbsrsrc_id,week_start,month_start,null
      from deleted
  	
END

RT_WBSSTEP
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_WBSSTEP' AND xtype = 'TR')
    DROP trigger RT_WBSSTEP

RT_WBSSTEP
create trigger RT_WBSSTEP
on WBSSTEP
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update WBSSTEP
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else WBSSTEP.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else WBSSTEP.create_date end
from inserted 
where WBSSTEP.wbs_step_id = inserted.wbs_step_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'WBSSTEP',wbs_step_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select wbs_step_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'WBSSTEP'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_WBSSTEP_DEL
create trigger RT_WBSSTEP_DEL
on WBSSTEP
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'WBSSTEP',wbs_step_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_WKFLTMPL
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_WKFLTMPL' AND xtype = 'TR')
    DROP trigger RT_WKFLTMPL

RT_WKFLTMPL
create trigger RT_WKFLTMPL
on WKFLTMPL
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update WKFLTMPL
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else WKFLTMPL.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else WKFLTMPL.create_date end
from inserted 
where WKFLTMPL.wkfl_tmpl_id = inserted.wkfl_tmpl_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'WKFLTMPL',wkfl_tmpl_id,null,null,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select wkfl_tmpl_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'WKFLTMPL'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_WKFLTMPL_DEL
create trigger RT_WKFLTMPL_DEL
on WKFLTMPL
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'WKFLTMPL',wkfl_tmpl_id,null,null,null
      from deleted
  	
END

RT_WKFLUSER
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_WKFLUSER' AND xtype = 'TR')
    DROP trigger RT_WKFLUSER

RT_WKFLUSER
create trigger RT_WKFLUSER
on WKFLUSER
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update WKFLUSER
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else WKFLUSER.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else WKFLUSER.create_date end
from inserted 
where WKFLUSER.work_flow_id = inserted.work_flow_id
and WKFLUSER.user_id = inserted.user_id
and WKFLUSER.stage_num = inserted.stage_num
if @del_cnt = 0 and (select count(*) from inserted) > 0 
begin
  declare ins cursor  for select work_flow_id,user_id,stage_num,null from inserted
  open ins
  fetch next from ins into @pk1,@pk2,@pk3,@pk4
  while  @@fetch_status = 0
  begin
    DELETE FROM REFRDEL WHERE table_name = 'WKFLUSER'
    and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
and @pk3 = refrdel.pk3
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
  end
  close ins deallocate ins                  
end             

if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'WKFLUSER',work_flow_id,user_id,stage_num,null
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select work_flow_id,user_id,stage_num,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'WKFLUSER'
      and  @pk1 = refrdel.pk1
and @pk2 = refrdel.pk2
and @pk3 = refrdel.pk3
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_WKFLUSER_DEL
create trigger RT_WKFLUSER_DEL
on WKFLUSER
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      select getDate(),'WKFLUSER',work_flow_id,user_id,stage_num,null
      from deleted
  	
END

RT_WORKFLOW
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_WORKFLOW' AND xtype = 'TR')
    DROP trigger RT_WORKFLOW

RT_WORKFLOW
create trigger RT_WORKFLOW
on WORKFLOW
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update WORKFLOW
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else WORKFLOW.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else WORKFLOW.create_date end
from inserted 
where WORKFLOW.work_flow_id = inserted.work_flow_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'WORKFLOW',work_flow_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select work_flow_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'WORKFLOW'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_WORKFLOW_DEL
create trigger RT_WORKFLOW_DEL
on WORKFLOW
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'WORKFLOW',work_flow_id,null,null,null
  	,proj_id
      from deleted
  	
END

RT_WORKSPACE
IF EXISTS (SELECT name FROM sysobjects 
            WHERE upper(name) = 'RT_WORKSPACE' AND xtype = 'TR')
    DROP trigger RT_WORKSPACE

RT_WORKSPACE
create trigger RT_WORKSPACE
on WORKSPACE
for update,insert
as     
declare @sid integer, @app_name varchar(25), @user_name varchar(32), @del_cnt integer
declare @pk1 varchar(255), @pk2 varchar(255),@pk3 varchar(255), @pk4 varchar(255)
exec audit_prm_user @sid output, @user_name output , @app_name output
select @del_cnt=count(*) from deleted;

update WORKSPACE
set update_date = getdate(), update_user = @user_name
, create_user =  case @del_cnt WHEN 0 then @user_name else WORKSPACE.create_user end
, create_date =  case @del_cnt WHEN 0 then getdate() else WORKSPACE.create_date end
from inserted 
where WORKSPACE.workspace_id = inserted.workspace_id
if @del_cnt > 0 and update(delete_session_id)
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'WORKSPACE',workspace_id,null,null,null
  	,proj_id
      from inserted
      where delete_session_id is not null
  	
  	
    declare ins cursor  for select workspace_id,null,null,null from inserted where delete_session_id is null
    open ins
    fetch next from ins into @pk1,@pk2,@pk3,@pk4
    while  @@fetch_status = 0
    begin
      DELETE FROM REFRDEL WHERE table_name = 'WORKSPACE'
      and  @pk1 = refrdel.pk1
      fetch next from ins into @pk1,@pk2,@pk3,@pk4
    end
    close ins deallocate ins                  

END



RT_WORKSPACE_DEL
create trigger RT_WORKSPACE_DEL
on WORKSPACE
for delete
as     
if (select count(*) from inserted) = 0
BEGIN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      select getDate(),'WORKSPACE',workspace_id,null,null,null
  	,proj_id
      from deleted
  	
END

INITIALIZE_BACKGROUND_PROCS
exec initialize_background_procs 

OBSPROJ_FULL_REBUILD
declare @pret_val int,@pret_msg varchar(255) if (select count(1) from obsproj)=0  exec obsproj_full_rebuild @pret_val,@pret_msg