Source Code
PACKAGE: UTILS
PACKAGE: UTILS
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
FUNCTION: PROJSHAR_INSERT_REC
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
PACKAGE: GUID
PACKAGE: GUID
PACKAGE: COPY_UTILS
PACKAGE: TASK_COPY_PKG
PACKAGE: PROJECT_COPY_PKG
PROCEDURE: MULTI_PROJECT_COPY
PROCEDURE: PROJECT_COPY
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
PACKAGE: BLOB_INTERFACE
PACKAGE: BLOB_INTERFACE
PROCEDURE: GS_SAVE_BLOB
PROCEDURE: GS_GET_BLOB
PROCEDURE: GS_GET_BLOB_NEXT
PROCEDURE: GET_SAFETY_DATE
PROCEDURE: POPULATE_DELAYED_LOADING
PROCEDURE: GLOBAL_TABLE_CHANGE
PROCEDURE: OPEN_TABLE_CHANGE
PROCEDURE: CHECK_LAST_SUMM
PROCEDURE: REFRDEL_CLEANUP
PACKAGE: PRM_AUDIT
PACKAGE: PRM_AUDIT
PROCEDURE: AUDIT_IDENTITY
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: CHECK_SYS_PRIVS
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_USER_ENABLE
PROCEDURE: SQL_TRACE_USER_DISABLE
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
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_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_ACTVCODE
TRIGGER: PRMAUD_ACTVTYPE
TRIGGER: PRMAUD_ADMIN_CONFIG
TRIGGER: PRMAUD_BASETYPE
TRIGGER: PRMAUD_BRE_REGISTRY
TRIGGER: PRMAUD_BUDGCHNG
TRIGGER: PRMAUD_CALENDAR
TRIGGER: PRMAUD_COSTTYPE
TRIGGER: PRMAUD_CURRTYPE
TRIGGER: PRMAUD_DASHBOARD
TRIGGER: PRMAUD_DASHUSER
TRIGGER: PRMAUD_DOCCATG
TRIGGER: PRMAUD_DOCSTAT
TRIGGER: PRMAUD_DOCUMENT
TRIGGER: PRMAUD_EXTAPP
TRIGGER: PRMAUD_EXPPROJ
TRIGGER: PRMAUD_FACTOR
TRIGGER: PRMAUD_FACTVAL
TRIGGER: PRMAUD_FILTPROP
TRIGGER: PRMAUD_FINDATES
TRIGGER: PRMAUD_FORMCATG
TRIGGER: PRMAUD_FORMPROJ
TRIGGER: PRMAUD_FORMTMPL
TRIGGER: PRMAUD_FUNDSRC
TRIGGER: PRMAUD_GCHANGE
TRIGGER: PRMAUD_ISSUHIST
TRIGGER: PRMAUD_ITERATION
TRIGGER: PRMAUD_ITERDAYS
TRIGGER: PRMAUD_ITERGOAL
TRIGGER: PRMAUD_JOBLOG
TRIGGER: PRMAUD_JOBSVC
TRIGGER: PRMAUD_JOBRPT
TRIGGER: PRMAUD_MEMOTYPE
TRIGGER: PRMAUD_NONWORK
TRIGGER: PRMAUD_NOTE
TRIGGER: PRMAUD_OBS
TRIGGER: PRMAUD_PCATTYPE
TRIGGER: PRMAUD_PCATUSER
TRIGGER: PRMAUD_PCATVAL
TRIGGER: PRMAUD_PFOLIO
TRIGGER: PRMAUD_PHASE
TRIGGER: PRMAUD_POBS
TRIGGER: PRMAUD_PREFER
TRIGGER: PRMAUD_PROFILE
TRIGGER: PRMAUD_PROCGROUP
TRIGGER: PRMAUD_PROCITEM
TRIGGER: PRMAUD_PROFPRIV
TRIGGER: PRMAUD_PROJCOST
TRIGGER: PRMAUD_PROJECT
TRIGGER: PRMAUD_PROJEST
TRIGGER: PRMAUD_PROJFUND
TRIGGER: PRMAUD_PROJISSU
TRIGGER: PRMAUD_PROJPCAT
TRIGGER: PRMAUD_PROJPROP
TRIGGER: PRMAUD_PROJRISK
TRIGGER: PRMAUD_PROJTHRS
TRIGGER: PRMAUD_PROJWBS
TRIGGER: PRMAUD_PROJWSRPT
TRIGGER: PRMAUD_PRPFOLIO
TRIGGER: PRMAUD_QUERYLIB
TRIGGER: PRMAUD_RCATTYPE
TRIGGER: PRMAUD_RCATVAL
TRIGGER: PRMAUD_REITTYPE
TRIGGER: PRMAUD_RELEASE
TRIGGER: PRMAUD_RELITEMS
TRIGGER: PRMAUD_RFOLIO
TRIGGER: PRMAUD_RISKCTRL
TRIGGER: PRMAUD_RISKTYPE
TRIGGER: PRMAUD_RLFOLIO
TRIGGER: PRMAUD_ROLFOLIO
TRIGGER: PRMAUD_ROLERATE
TRIGGER: PRMAUD_ROLELIMIT
TRIGGER: PRMAUD_ROLES
TRIGGER: PRMAUD_RPT
TRIGGER: PRMAUD_RPTBATCH
TRIGGER: PRMAUD_RPTGROUP
TRIGGER: PRMAUD_RPTLIST
TRIGGER: PRMAUD_RSRC
TRIGGER: PRMAUD_RSRCANDASH
TRIGGER: PRMAUD_RSRCANVIEW
TRIGGER: PRMAUD_RSRCCURV
TRIGGER: PRMAUD_RSRCHOUR
TRIGGER: PRMAUD_RSRCPROP
TRIGGER: PRMAUD_RSRCRATE
TRIGGER: PRMAUD_RSRCRCAT
TRIGGER: PRMAUD_RSRCROLE
TRIGGER: PRMAUD_RSRCSEC
TRIGGER: PRMAUD_RSRFOLIO
TRIGGER: PRMAUD_SCENARIO
TRIGGER: PRMAUD_SCENPROJ
TRIGGER: PRMAUD_SCENUSER
TRIGGER: PRMAUD_SCENROLE
TRIGGER: PRMAUD_SHIFT
TRIGGER: PRMAUD_SHIFTPER
TRIGGER: PRMAUD_TASK
TRIGGER: PRMAUD_TASKACTV
TRIGGER: PRMAUD_TASKDOC
TRIGGER: PRMAUD_TASKFDBK
TRIGGER: PRMAUD_TASKFIN
TRIGGER: PRMAUD_TASKMEMO
TRIGGER: PRMAUD_TASKNOTE
TRIGGER: PRMAUD_TASKPRED
TRIGGER: PRMAUD_TASKPROC
TRIGGER: PRMAUD_TASKRSRC
TRIGGER: PRMAUD_TASKSUM
TRIGGER: PRMAUD_TASKSUMFIN
TRIGGER: PRMAUD_TASKUSER
TRIGGER: PRMAUD_TASKWKSP
TRIGGER: PRMAUD_THRSPARM
TRIGGER: PRMAUD_TIMESHT
TRIGGER: PRMAUD_TMPLCATG
TRIGGER: PRMAUD_TRAKVIEW
TRIGGER: PRMAUD_TRSRCFIN
TRIGGER: PRMAUD_TRSRCSUM
TRIGGER: PRMAUD_TRSRCSUMFN
TRIGGER: PRMAUD_TSDATES
TRIGGER: PRMAUD_TSDELEGATE
TRIGGER: PRMAUD_UDFCODE
TRIGGER: PRMAUD_UDFTYPE
TRIGGER: PRMAUD_UDFVALUE
TRIGGER: PRMAUD_UMEASURE
TRIGGER: PRMAUD_USERCOL
TRIGGER: PRMAUD_USERDATA
TRIGGER: PRMAUD_USERENG
TRIGGER: PRMAUD_USEROBS
TRIGGER: PRMAUD_USEROPEN
TRIGGER: PRMAUD_USROPNVAL
TRIGGER: PRMAUD_USERS
TRIGGER: PRMAUD_USERWKSP
TRIGGER: PRMAUD_VIEWPREF
TRIGGER: PRMAUD_VWPREFDASH
TRIGGER: PRMAUD_VWPREFDATA
TRIGGER: PRMAUD_VWPREFUSER
TRIGGER: PRMAUD_VIEWPROP
TRIGGER: PRMAUD_WBSBUDG
TRIGGER: PRMAUD_WBSMEMO
TRIGGER: PRMAUD_WBRSCAT
TRIGGER: PRMAUD_WBSRSRC
TRIGGER: PRMAUD_WBSRSRC_QTY
TRIGGER: PRMAUD_WBSSTEP
TRIGGER: PRMAUD_WKFLTMPL
TRIGGER: PRMAUD_WKFLUSER
TRIGGER: PRMAUD_WORKFLOW
TRIGGER: PRMAUD_WORKSPACE
TRIGGER: RT_ACCOUNT
TRIGGER: RT_ACCOUNT_DEL
TRIGGER: RT_ACTVCODE
TRIGGER: RT_ACTVCODE_DEL
TRIGGER: RT_ACTVTYPE
TRIGGER: RT_ACTVTYPE_DEL
TRIGGER: RT_ADMIN_CONFIG
TRIGGER: RT_ADMIN_CONFIG_DEL
TRIGGER: RT_BASETYPE
TRIGGER: RT_BASETYPE_DEL
TRIGGER: RT_BRE_REGISTRY
TRIGGER: RT_BRE_REGISTRY_DEL
TRIGGER: RT_BUDGCHNG
TRIGGER: RT_BUDGCHNG_DEL
TRIGGER: RT_CALENDAR
TRIGGER: RT_CALENDAR_DEL
TRIGGER: RT_COSTTYPE
TRIGGER: RT_COSTTYPE_DEL
TRIGGER: RT_CURRTYPE
TRIGGER: RT_CURRTYPE_DEL
TRIGGER: RT_DASHBOARD
TRIGGER: RT_DASHBOARD_DEL
TRIGGER: RT_DASHUSER
TRIGGER: RT_DASHUSER_DEL
TRIGGER: RT_DOCCATG
TRIGGER: RT_DOCCATG_DEL
TRIGGER: RT_DOCSTAT
TRIGGER: RT_DOCSTAT_DEL
TRIGGER: RT_DOCUMENT
TRIGGER: RT_DOCUMENT_DEL
TRIGGER: RT_EXTAPP
TRIGGER: RT_EXTAPP_DEL
TRIGGER: RT_EXPPROJ
TRIGGER: RT_EXPPROJ_DEL
TRIGGER: RT_FACTOR
TRIGGER: RT_FACTOR_DEL
TRIGGER: RT_FACTVAL
TRIGGER: RT_FACTVAL_DEL
TRIGGER: RT_FILTPROP
TRIGGER: RT_FILTPROP_DEL
TRIGGER: RT_FINDATES
TRIGGER: RT_FINDATES_DEL
TRIGGER: RT_FORMCATG
TRIGGER: RT_FORMCATG_DEL
TRIGGER: RT_FORMPROJ
TRIGGER: RT_FORMPROJ_DEL
TRIGGER: RT_FORMTMPL
TRIGGER: RT_FORMTMPL_DEL
TRIGGER: RT_FUNDSRC
TRIGGER: RT_FUNDSRC_DEL
TRIGGER: RT_GCHANGE
TRIGGER: RT_GCHANGE_DEL
TRIGGER: RT_ISSUHIST
TRIGGER: RT_ISSUHIST_DEL
TRIGGER: RT_ITERATION
TRIGGER: RT_ITERATION_DEL
TRIGGER: RT_ITERDAYS
TRIGGER: RT_ITERDAYS_DEL
TRIGGER: RT_ITERGOAL
TRIGGER: RT_ITERGOAL_DEL
TRIGGER: RT_JOBLOG
TRIGGER: RT_JOBLOG_DEL
TRIGGER: RT_JOBSVC
TRIGGER: RT_JOBSVC_DEL
TRIGGER: RT_JOBRPT
TRIGGER: RT_JOBRPT_DEL
TRIGGER: RT_MEMOTYPE
TRIGGER: RT_MEMOTYPE_DEL
TRIGGER: RT_NONWORK
TRIGGER: RT_NONWORK_DEL
TRIGGER: RT_NOTE
TRIGGER: RT_NOTE_DEL
TRIGGER: RT_OBS
TRIGGER: RT_OBS_DEL
TRIGGER: RT_PCATTYPE
TRIGGER: RT_PCATTYPE_DEL
TRIGGER: RT_PCATUSER
TRIGGER: RT_PCATUSER_DEL
TRIGGER: RT_PCATVAL
TRIGGER: RT_PCATVAL_DEL
TRIGGER: RT_PFOLIO
TRIGGER: RT_PFOLIO_DEL
TRIGGER: RT_PHASE
TRIGGER: RT_PHASE_DEL
TRIGGER: RT_POBS
TRIGGER: RT_POBS_DEL
TRIGGER: RT_PREFER
TRIGGER: RT_PREFER_DEL
TRIGGER: RT_PROFILE
TRIGGER: RT_PROFILE_DEL
TRIGGER: RT_PROCGROUP
TRIGGER: RT_PROCGROUP_DEL
TRIGGER: RT_PROCITEM
TRIGGER: RT_PROCITEM_DEL
TRIGGER: RT_PROFPRIV
TRIGGER: RT_PROFPRIV_DEL
TRIGGER: RT_PROJCOST
TRIGGER: RT_PROJCOST_DEL
TRIGGER: RT_PROJECT
TRIGGER: RT_PROJECT_DEL
TRIGGER: RT_PROJECT
TRIGGER: RT_PROJECT_DEL
TRIGGER: RT_PROJEST
TRIGGER: RT_PROJEST_DEL
TRIGGER: RT_PROJFUND
TRIGGER: RT_PROJFUND_DEL
TRIGGER: RT_PROJISSU
TRIGGER: RT_PROJISSU_DEL
TRIGGER: RT_PROJPCAT
TRIGGER: RT_PROJPCAT_DEL
TRIGGER: RT_PROJPROP
TRIGGER: RT_PROJPROP_DEL
TRIGGER: RT_PROJRISK
TRIGGER: RT_PROJRISK_DEL
TRIGGER: RT_PROJTHRS
TRIGGER: RT_PROJTHRS_DEL
TRIGGER: RT_PROJWBS
TRIGGER: RT_PROJWBS_DEL
TRIGGER: RT_PROJWSRPT
TRIGGER: RT_PROJWSRPT_DEL
TRIGGER: RT_PRPFOLIO
TRIGGER: RT_PRPFOLIO_DEL
TRIGGER: RT_QUERYLIB
TRIGGER: RT_QUERYLIB_DEL
TRIGGER: RT_RCATTYPE
TRIGGER: RT_RCATTYPE_DEL
TRIGGER: RT_RCATVAL
TRIGGER: RT_RCATVAL_DEL
TRIGGER: RT_REITTYPE
TRIGGER: RT_REITTYPE_DEL
TRIGGER: RT_RELEASE
TRIGGER: RT_RELEASE_DEL
TRIGGER: RT_RELITEMS
TRIGGER: RT_RELITEMS_DEL
TRIGGER: RT_RFOLIO
TRIGGER: RT_RFOLIO_DEL
TRIGGER: RT_RISKCTRL
TRIGGER: RT_RISKCTRL_DEL
TRIGGER: RT_RISKTYPE
TRIGGER: RT_RISKTYPE_DEL
TRIGGER: RT_RLFOLIO
TRIGGER: RT_RLFOLIO_DEL
TRIGGER: RT_ROLFOLIO
TRIGGER: RT_ROLFOLIO_DEL
TRIGGER: RT_ROLERATE
TRIGGER: RT_ROLERATE_DEL
TRIGGER: RT_ROLELIMIT
TRIGGER: RT_ROLELIMIT_DEL
TRIGGER: RT_ROLES
TRIGGER: RT_ROLES_DEL
TRIGGER: RT_RPT
TRIGGER: RT_RPT_DEL
TRIGGER: RT_RPTBATCH
TRIGGER: RT_RPTBATCH_DEL
TRIGGER: RT_RPTGROUP
TRIGGER: RT_RPTGROUP_DEL
TRIGGER: RT_RPTLIST
TRIGGER: RT_RPTLIST_DEL
TRIGGER: RT_RSRC
TRIGGER: RT_RSRC_DEL
TRIGGER: RT_RSRCANDASH
TRIGGER: RT_RSRCANDASH_DEL
TRIGGER: RT_RSRCANVIEW
TRIGGER: RT_RSRCANVIEW_DEL
TRIGGER: RT_RSRCCURV
TRIGGER: RT_RSRCCURV_DEL
TRIGGER: RT_RSRCHOUR
TRIGGER: RT_RSRCHOUR_DEL
TRIGGER: RT_RSRCPROP
TRIGGER: RT_RSRCPROP_DEL
TRIGGER: RT_RSRCRATE
TRIGGER: RT_RSRCRATE_DEL
TRIGGER: RT_RSRCRCAT
TRIGGER: RT_RSRCRCAT_DEL
TRIGGER: RT_RSRCROLE
TRIGGER: RT_RSRCROLE_DEL
TRIGGER: RT_RSRCSEC
TRIGGER: RT_RSRCSEC_DEL
TRIGGER: RT_RSRFOLIO
TRIGGER: RT_RSRFOLIO_DEL
TRIGGER: RT_SCENARIO
TRIGGER: RT_SCENARIO_DEL
TRIGGER: RT_SCENPROJ
TRIGGER: RT_SCENPROJ_DEL
TRIGGER: RT_SCENUSER
TRIGGER: RT_SCENUSER_DEL
TRIGGER: RT_SCENROLE
TRIGGER: RT_SCENROLE_DEL
TRIGGER: RT_SETTINGS
TRIGGER: RT_SETTINGS_DEL
TRIGGER: RT_SHIFT
TRIGGER: RT_SHIFT_DEL
TRIGGER: RT_SHIFTPER
TRIGGER: RT_SHIFTPER_DEL
TRIGGER: RT_TASK
TRIGGER: RT_TASK_DEL
TRIGGER: RT_TASKACTV
TRIGGER: RT_TASKACTV_DEL
TRIGGER: RT_TASKDOC
TRIGGER: RT_TASKDOC_DEL
TRIGGER: RT_TASKFDBK
TRIGGER: RT_TASKFDBK_DEL
TRIGGER: RT_TASKFIN
TRIGGER: RT_TASKFIN_DEL
TRIGGER: RT_TASKMEMO
TRIGGER: RT_TASKMEMO_DEL
TRIGGER: RT_TASKNOTE
TRIGGER: RT_TASKNOTE_DEL
TRIGGER: RT_TASKPRED
TRIGGER: RT_TASKPRED_DEL
TRIGGER: RT_TASKPROC
TRIGGER: RT_TASKPROC_DEL
TRIGGER: RT_TASKRSRC
TRIGGER: RT_TASKRSRC_DEL
TRIGGER: RT_TASKSUM
TRIGGER: RT_TASKSUM_DEL
TRIGGER: RT_TASKSUMFIN
TRIGGER: RT_TASKSUMFIN_DEL
TRIGGER: RT_TASKUSER
TRIGGER: RT_TASKUSER_DEL
TRIGGER: RT_TASKWKSP
TRIGGER: RT_TASKWKSP_DEL
TRIGGER: RT_THRSPARM
TRIGGER: RT_THRSPARM_DEL
TRIGGER: RT_TIMESHT
TRIGGER: RT_TIMESHT_DEL
TRIGGER: RT_TMPLCATG
TRIGGER: RT_TMPLCATG_DEL
TRIGGER: RT_TRAKVIEW
TRIGGER: RT_TRAKVIEW_DEL
TRIGGER: RT_TRSRCFIN
TRIGGER: RT_TRSRCFIN_DEL
TRIGGER: RT_TRSRCSUM
TRIGGER: RT_TRSRCSUM_DEL
TRIGGER: RT_TRSRCSUMFN
TRIGGER: RT_TRSRCSUMFN_DEL
TRIGGER: RT_TSDATES
TRIGGER: RT_TSDATES_DEL
TRIGGER: RT_TSDELEGATE
TRIGGER: RT_TSDELEGATE_DEL
TRIGGER: RT_UDFCODE
TRIGGER: RT_UDFCODE_DEL
TRIGGER: RT_UDFTYPE
TRIGGER: RT_UDFTYPE_DEL
TRIGGER: RT_UDFVALUE
TRIGGER: RT_UDFVALUE_DEL
TRIGGER: RT_UMEASURE
TRIGGER: RT_UMEASURE_DEL
TRIGGER: RT_USERCOL
TRIGGER: RT_USERCOL_DEL
TRIGGER: RT_USERDATA
TRIGGER: RT_USERDATA_DEL
TRIGGER: RT_USERENG
TRIGGER: RT_USERENG_DEL
TRIGGER: RT_USEROBS
TRIGGER: RT_USEROBS_DEL
TRIGGER: RT_USEROPEN
TRIGGER: RT_USEROPEN_DEL
TRIGGER: RT_USROPNVAL
TRIGGER: RT_USROPNVAL_DEL
TRIGGER: RT_USERS
TRIGGER: RT_USERS_DEL
TRIGGER: RT_USERSET
TRIGGER: RT_USERSET_DEL
TRIGGER: RT_USERWKSP
TRIGGER: RT_USERWKSP_DEL
TRIGGER: RT_USESSION
TRIGGER: RT_USESSION_DEL
TRIGGER: RT_VIEWPREF
TRIGGER: RT_VIEWPREF_DEL
TRIGGER: RT_VWPREFDASH
TRIGGER: RT_VWPREFDASH_DEL
TRIGGER: RT_VWPREFDATA
TRIGGER: RT_VWPREFDATA_DEL
TRIGGER: RT_VWPREFUSER
TRIGGER: RT_VWPREFUSER_DEL
TRIGGER: RT_VIEWPROP
TRIGGER: RT_VIEWPROP_DEL
TRIGGER: RT_WBSBUDG
TRIGGER: RT_WBSBUDG_DEL
TRIGGER: RT_WBSMEMO
TRIGGER: RT_WBSMEMO_DEL
TRIGGER: RT_WBRSCAT
TRIGGER: RT_WBRSCAT_DEL
TRIGGER: RT_WBSRSRC
TRIGGER: RT_WBSRSRC_DEL
TRIGGER: RT_WBSRSRC_QTY
TRIGGER: RT_WBSRSRC_QTY_DEL
TRIGGER: RT_WBSSTEP
TRIGGER: RT_WBSSTEP_DEL
TRIGGER: RT_WKFLTMPL
TRIGGER: RT_WKFLTMPL_DEL
TRIGGER: RT_WKFLUSER
TRIGGER: RT_WKFLUSER_DEL
TRIGGER: RT_WORKFLOW
TRIGGER: RT_WORKFLOW_DEL
TRIGGER: RT_WORKSPACE
TRIGGER: RT_WORKSPACE_DEL
: INITIALIZE_BACKGROUND_PROCS
: OBSPROJ_FULL_REBUILD
UTILS
create or replace package utils
AS
  -- Created : 7/1/2007 9:16:10 AM
  -- Purpose : utility package
  procedure util_setlist(cslist varchar2);
  procedure util_setproperties(propname varchar2, propval varchar2);
  function util_getcount return number;
  function util_getnextlistval return number;
  procedure util_getcount(retval OUT number);
  TYPE properties IS TABLE OF VARCHAR2(32767) INDEX BY VARCHAR2(64);
  procedure util_initproperties;
  function util_getproperties return properties;
  procedure util_getparamvalue(p        properties,
                               propname varchar2,
                               propval  OUT varchar2);
  procedure util_getstrvalue(p        properties,
                             propname varchar2,
                             propval  OUT varchar2);
  procedure util_getintvalue(p        properties,
                             propname varchar2,
                             propval  OUT pls_integer);
  procedure test_getparamvalue(propname varchar2, propval OUT varchar2);
end utils;

UTILS
create or replace package body utils
AS
  lstrlist long := NULL;
  type mytabtype is table of number;
  ldata  mytabtype;
  ln     number := 0;
  gcount pls_integer := 0;
  currid pls_integer := 1;

  prop properties;

  procedure util_initproperties as
  begin
    prop.delete;
  end;

  procedure util_setproperties(propname varchar2, propval varchar2) as
  begin
    prop.delete(propname);
    prop(propname) := propval;
  end;

  function util_getproperties return properties as
  begin
    return prop;
  end;

  procedure test_getparamvalue(propname varchar2, propval OUT varchar2) as
  begin
    utils.util_getparamvalue(util_getproperties, propname, propval);
  end;

  procedure util_getparamvalue(p        properties,
                               propname varchar2,
                               propval  OUT varchar2) as
    --propval varchar2(32);
  begin
    if p.exists(propname) then
      propval := p(propname);
      dbms_output.put_line(propname || ': ' || propval);
    else
      dbms_output.put_line(propname || ':does not exist');
    end if;
  end;

  procedure util_getstrvalue(p        properties,
                             propname varchar2,
                             propval  OUT varchar2) as
  begin
    if p.exists(propname) then
      propval := p(propname);
      dbms_output.put_line(propname || ': ' || propval);
    else
      dbms_output.put_line(propname || ':does not exist');
      propval := null;
    end if;
  end;

  procedure util_getintvalue(p        properties,
                             propname varchar2,
                             propval  OUT pls_integer) as
  begin
    if p.exists(propname) then
      propval := to_number(p(propname));
      dbms_output.put_line(propname || ': ' || propval);
    else
      dbms_output.put_line(propname || ':does not exist');
      propval := 0;
    end if;
  exception
    when VALUE_ERROR then
      RAISE;
  end;

  procedure util_setlist(cslist varchar2) as
  begin
    ldata := mytabtype();
    ldata.delete;
    ln       := 0;
    gcount   := 0;
    currid   := 1;
    lstrlist := cslist;
    ln       := instr(lstrlist, ',');
    if nvl(ln, 0) = 0 then
      ldata.extend;
      ldata(ldata.count) := to_number(ltrim(rtrim(lstrlist)));
    else
      loop
        ln := instr(lstrlist, ',');
        exit when(nvl(ln, 0) = 0);
        ldata.extend;
        ldata(ldata.count) := to_number(ltrim(rtrim(substr(lstrlist,
                                                           1,
                                                           ln - 1))));
        lstrlist := substr(lstrlist, ln + 1);
      end loop;
      if lstrlist is not null then
        ldata.extend;
        ldata(ldata.count) := to_number(ltrim(rtrim(lstrlist)));
      end if;
    end if;
  
    if length(lstrlist) > 0 then
      gcount := ldata.count;
    else
      gcount := 0;
    end if;
  exception
    when VALUE_ERROR then
      ldata.delete;
      RAISE;
    when OTHERS then
      ldata.delete;
      RAISE;
  end;

  function util_getcount return number as
  begin
    return gcount;
  end;

  procedure util_getcount(retval OUT number) as
  begin
    retval := gcount;
  end;

  function util_getnextlistval return number as
    id number := 0;
  begin
    if currid > gcount and currid > 1 then
      currid := 1;
      gcount := 0;
      return - 1;
    else
      if (currid = 1) then
        id     := nvl(ldata(1), 0);
        currid := currid + 1;
      else
        id     := ldata(currid);
        currid := currid + 1;
      end if;
      return id;
    end if;
  end;
end utils;

SETTINGS_READ_STRING
CREATE OR REPLACE PROCEDURE settings_read_string
(result OUT varchar2, pnamespace IN varchar2
,pname IN varchar2, default_value IN varchar2 default null
,puser_id int default null)
AS
begin
  if puser_id is null then
    select setting_value into result 
    from settings
    where namespace = pnamespace
    and setting_name = pname;
  else
    select setting_value into result 
    from settings
    where namespace = pnamespace
    and setting_name = pname
    and user_id = puser_id;
  end if;
exception
  when no_data_found then
    result := default_value;
end;

SETTINGS_READ_NUMBER
CREATE OR REPLACE PROCEDURE settings_read_number
(result OUT number, pnamespace IN varchar2
,pname IN varchar2, default_value IN number default null
,puser_id int default null)
AS
  sresult varchar2(100);
begin
  settings_read_string(sresult ,pnamespace,pname,to_char(default_value),puser_id);
  result := to_number(sresult);
end;

SETTINGS_READ_BOOL
CREATE OR REPLACE PROCEDURE settings_read_bool
(result OUT int, pnamespace IN varchar2
,pname IN varchar2, default_value IN int default 0
,puser_id int default null)
AS
  sresult varchar2(100);
  sdefault varchar2(5);
begin
  if default_value > 0 then
    sdefault := 'TRUE';
  else
    sdefault := 'FALSE';
  end if;
  settings_read_string(sresult ,pnamespace,pname,sdefault,puser_id);
  sresult := upper(sresult);
  if sresult = 'TRUE' or sresult = 'T' 
     or sresult = '1' or sresult = 'Y'
     or sresult = 'YES' or sresult = 'ON'
    then
    result := 1;
  else
    result := 0;
  end if;
end;

SETTINGS_READ_DATE
CREATE OR REPLACE PROCEDURE settings_read_date
(result OUT date, pnamespace IN varchar2
,pname IN varchar2, default_value IN date default null
,puser_id int default null)
AS
  sresult varchar2(100);
  sdefault varchar2(100);
begin
  sdefault := to_char(default_value,'yyyy-mm-dd hh24:mi:ss');
  settings_read_string(sresult ,pnamespace,pname,sdefault,puser_id);
  result := to_date(sresult,'yyyy-mm-dd hh24:mi:ss');
end;

SETTINGS_WRITE_STRING
CREATE OR REPLACE PROCEDURE settings_write_string
(pvalue IN varchar2 , pnamespace IN varchar2
,pname IN varchar2, puser_id IN int default null)
as
begin
  if puser_id is null then
    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;
  end if;
  if SQL%ROWCOUNT = 0 then 
    insert into settings (namespace,setting_name,setting_value,user_id)
    values(pnamespace,pname,pvalue,puser_id);
  end if;
end;

SETTINGS_WRITE_NUMBER
CREATE OR REPLACE PROCEDURE settings_write_number
(pvalue IN number , pnamespace IN varchar2
,pname IN varchar2, puser_id IN int default null)
as
begin
  settings_write_string(to_char(pvalue),pnamespace,pname,puser_id);
end;

SETTINGS_WRITE_BOOL
CREATE OR REPLACE PROCEDURE settings_write_bool
(pvalue IN int,  pnamespace IN varchar2
,pname IN varchar2, puser_id IN int default null)
as
  boolstr varchar2(5);
begin
  if pvalue > 0 then
    boolstr := 'TRUE';
  else
    boolstr := 'FALSE';
  end if;

  settings_write_string(boolstr,pnamespace,pname,puser_id);
end;

SETTINGS_WRITE_DATE
CREATE OR REPLACE PROCEDURE settings_write_date
(pvalue IN date, pnamespace IN varchar2
,pname IN varchar2, puser_id IN int default null)
as
  datestr varchar2(30);
begin
  datestr := to_char(pvalue,'yyyy-mm-dd hh24:mi:ss');
  settings_write_string(datestr,pnamespace,pname,puser_id);
 
end;

BGP_WRITE_TO_LOG
CREATE OR REPLACE PROCEDURE bgp_write_to_log
  (psource varchar2, pdesc varchar, ptype varchar default 'INFORMATION'
   ,perror_ret number default null, perror_msg varchar2 default null,pbegindate date default null)
is
  PRAGMA AUTONOMOUS_TRANSACTION;
  msg 	varchar2(4000);
  newtype varchar(255);
  penddate date;
  elatime integer;
begin
  penddate := sysdate;
  if ptype is not null then
    newtype := ptype;
  else
     newtype := 'INFORMATION';
  end if;
  if perror_ret is null then
    msg := pdesc;
  else
    if perror_ret < 0 then
      msg := 'ERROR (' || trim(to_char(perror_ret)) || '): ' || 
               perror_msg || '(' || pdesc || ')';
      newtype := 'ERROR';
    else
      msg := pdesc || ' (' || trim(to_char(perror_ret)) || ')';
      if newtype is null then
        newtype := 'INFORMATION';
      end if;
    end if;
  end if;
   if (pbegindate is not null and ptype = 'ELAPSED TIME') then
          elatime := ((TO_NUMBER(TO_CHAR(penddate, 'J')) -
                     TO_NUMBER(TO_CHAR(pbegindate, 'J'))) * 86400) +
                     (TO_NUMBER(TO_CHAR(penddate, 'SSSSS')) -
                     TO_NUMBER(TO_CHAR(pbegindate, 'SSSSS')));
          msg     := msg || '-' || elatime || ' Sec';
        end if;
  insert into bgplog (log_time, source, type, description)
  values (sysdate,psource,newtype,msg);
  commit;
end;

CURRENT_SESSION
create or replace function current_session (context IN varchar2)
return number
as
  sess_id number;
  uid number;
begin
  if ( upper(context) = 'SESSIONID' ) then
    sess_id := 0;

    begin
      select session_id into sess_id 
      from usession where spid=userenv('sessionid') and delete_session_id is null;
    exception
      when others then return 0;
    end;

    return sess_id;
  end if;
  if ( upper(context) = 'USERID' ) then
    uid := 0;

    begin
      select user_id into uid 
      from usession where spid=userenv('sessionid') and delete_session_id is null;
    exception
      when others then return 0;
    end;

    return uid ;
  end if;
  return 0;
end;

GET_INTERVAL_DIFFERENCE
CREATE OR REPLACE PROCEDURE get_interval_difference 
  (pinterval_val IN varchar2, pdifference OUT number, pday_adjust number default 0.5)
AS
  time_code varchar(1);
  interval number;
  scale number;
BEGIN
  time_code := substr(pinterval_val,length(pinterval_val),1);
  interval := to_number(substr(pinterval_val,1,length(pinterval_val)-1));
  if time_code = 'm' then
    scale := 1440;
  elsif time_code = 's' then
    scale := 86400;
  elsif time_code = 'h' then
    scale := 24;
  elsif time_code = 'd' then
    pdifference := (interval-pday_adjust);
    return;
  else
    raise_application_error(-20501,'get_interval_difference: Invalid time code');
  end if;

  pdifference:=interval/scale;
END;

APPLY_ACTUALS_TASK
create or replace procedure APPLY_ACTUALS_TASK
(p_task_id           number,
 p_status_code       char,
 p_act_start_date    date,
 p_act_end_date      date,
 p_restart_date      date,
 p_reend_date        date,
 p_target_start_date date,
 p_target_end_date   date,
 p_act_work_qty      number default 0,
 p_remain_work_qty   number default 0,
 p_act_equip_qty     number default 0,
 p_remain_equip_qty  number default 0
)
as
begin

  update task
  set    status_code         = p_status_code,
         act_start_date      = p_act_start_date,
         act_end_date        = p_act_end_date,
         restart_date        = p_restart_date,
         reend_date          = p_reend_date,
         target_start_date   = p_target_start_date,
         target_end_date     = p_target_end_date,
         act_work_qty        = p_act_work_qty,
         remain_work_qty     = p_remain_work_qty,
         act_equip_qty       = p_act_equip_qty,
         remain_equip_qty    = p_remain_equip_qty
  where  task_id             = p_task_id;

end;

APPLY_ACTUALS_TASKRSRC
create or replace procedure APPLY_ACTUALS_TASKRSRC
(p_taskrsrc_id       number,
 p_target_start_date date,
 p_target_end_date   date,
 p_restart_date      date,
 p_reend_date        date,
 p_act_start_date    date,
 p_act_end_date      date,
 p_act_reg_qty       number default 0,
 p_act_ot_qty        number default 0,
 p_remain_qty        number default 0
)
as
begin

  update taskrsrc
  set    target_start_date   = p_target_start_date,
         target_end_date     = p_target_end_date,
         restart_date        = p_restart_date,
         reend_date          = p_reend_date,
         act_start_date      = p_act_start_date,
         act_end_date        = p_act_end_date,
         act_reg_qty         = p_act_reg_qty,
         act_ot_qty          = p_act_ot_qty,
         remain_qty          = p_remain_qty
  where  taskrsrc_id         = p_taskrsrc_id;

end;

APPLY_ESTIMATE_TASK
create or replace procedure APPLY_ESTIMATE_TASK
(p_task_id            number,
 p_reend_date         date,
 p_target_end_date    date,
 p_target_work_qty    number default 0,
 p_remain_work_qty    number default 0,
 p_target_equip_qty   number default 0,
 p_remain_equip_qty   number default 0,
 p_target_drtn_hr_cnt number default 0,
 p_remain_drtn_hr_cnt number default 0
)
as
begin

  update task
  set    reend_date          = p_reend_date,
         target_end_date     = p_target_end_date,
         target_work_qty     = p_target_work_qty,
         remain_work_qty     = p_remain_work_qty,
         target_equip_qty    = p_target_equip_qty,
         remain_equip_qty    = p_remain_equip_qty,
         target_drtn_hr_cnt  = p_target_drtn_hr_cnt,
         remain_drtn_hr_cnt  = p_remain_drtn_hr_cnt
  where  task_id             = p_task_id;

end;

APPLY_ESTIMATE_TASKRSRC
create or replace procedure APPLY_ESTIMATE_TASKRSRC
(p_taskrsrc_id        number,
 p_target_end_date    date,
 p_reend_date         date,
 p_target_qty         number default 0,
 p_target_qty_per_hr  number default 0,
 p_remain_qty         number default 0,
 p_remain_qty_per_hr  number default 0
)
as
begin

  update taskrsrc
  set    target_end_date    = p_target_end_date,
         reend_date         = p_reend_date,
         remain_qty         = p_remain_qty,
         remain_qty_per_hr  = p_remain_qty_per_hr,
         target_qty         = p_target_qty,
         target_qty_per_hr  = p_target_qty_per_hr
  where  taskrsrc_id        = p_taskrsrc_id;

end;

PROJSHAR_INSERT_REC
CREATE OR REPLACE FUNCTION projshar_insert_rec ( pwbs_id number,
			paccess_level number, psession_id number,
			pload_status varchar2,
			ppfolio_id IN number DEFAULT null)
return number
as
  cursor wbs
  is
    select wbs_id
    from projwbs pw
    where PARENT_WBS_ID = pwbs_id
    and proj_node_flag = 'Y'
    and delete_session_id is null;

  acnt number;
  vproj_id number;
  vproj_flag char(1);
  vorig_proj_id number;
  vtmp number;
  vret number;
  vdo_project 	boolean;
begin
  begin
    select p.proj_id , p.project_flag, p.orig_proj_id
    into vproj_id, vproj_flag , vorig_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 p.delete_session_id is null and pw.delete_session_id is null;
  exception
    when no_data_found then
      rollback;
      return -3;
  end;

  -- Only process insert if this is a project and not a baseline

  if vproj_flag = 'Y' and vorig_proj_id is null then
    if ppfolio_id is null then
      vdo_project := true;
    else
      begin  
        select wbs_id into vtmp
        from prpfolio
        where wbs_id = pwbs_id
        and pfolio_id = ppfolio_id
        and delete_session_id is null;
        vdo_project := true;
      exception
        when no_data_found then
          vdo_project := false;
      end;
    end if;
    if not vdo_project then
      return 0;
    end if;

    -- if requested access level is '1' then check for exclusive
    if paccess_level >= 1 then
      if paccess_level = 1 then
        select count(*)
        into acnt
        from projshar
        where proj_id = vproj_id
        and session_id <> psession_id 
        and access_level = 2;

        if acnt > 0  then
          rollback;
          return -2;
        end if;
      -- if requested access level is '2' then check for 1 or 2
      elsif paccess_level = 2 then
        select count(*)
        into acnt
        from projshar
        where proj_id = vproj_id
        and session_id <> psession_id 
        and access_level > 0;
        if acnt > 0  then
          rollback;
          return -2;
        end if;
 
      end if;
    end if;

    -- verify that there is not a previous record in the projshar table.
    -- I think projshar should be cleared (deleted) before running
    begin
      select proj_id
      into vtmp
      from projshar
      where proj_id = vproj_id
      and session_id= psession_id;
      -- AKAKAK****** 07
      update projshar set ACCESS_LEVEL = paccess_level, LOAD_status = pload_status
        where proj_id = vproj_id and session_id = psession_id;
      -- AKAKAK 07
    exception
      when no_data_found then
        insert into projshar (PROJ_ID,SESSION_ID,ACCESS_LEVEL,LOAD_status)
         values (vproj_id, psession_id, paccess_level, pload_status ) ;
    end;
    -- return because projects are always leaves.
    return 0;
  end if;


    for wbs_rec in wbs loop
      vret := projshar_insert_rec ( wbs_rec.wbs_id, paccess_level, psession_id, pload_status , ppfolio_id) ;
      if vret < 0 then
        return vret;
      end if;
    end loop;

  return 0;
end;

PROJSHAR_INSERT
create or replace procedure projshar_insert ( pwbs_id number, 
			paccess_level number, 
			psession_id number,
			pret_val OUT number,
			ppfolio_id IN number DEFAULT null) 
as
  ps_cnt number;
  vload_status char(1) := 'L';
  vpfolio_id number;
begin
  begin
    -- bkd 30-apr-01:  commenting out because I think load_status should always be "L:"
    -- 			when inserting
    /*
    select count(*) 
    into ps_cnt
    from projshar
    where session_id = psession_id;

    if ps_cnt > 0 then
      vload_status := 'L';
    end if;
    */
    if ppfolio_id is not null then
      begin
        select pfolio_id into vpfolio_id
        from pfolio
        where pfolio_id = ppfolio_id
        and delete_session_id is null;
      exception
        when no_data_found then
          vpfolio_id := null;
      end;
    end if;
    pret_val := projshar_insert_rec ( pwbs_id, paccess_level,
				psession_id, vload_status, vpfolio_id ) ;


  exception
    when others then
      pret_val := -1;
  end;
end;

PROJSHAR_INSERT_UPD
CREATE OR REPLACE PROCEDURE projshar_insert_upd ( psession_id number,
						pload_status varchar2,
						pret_val OUT number) 
as
begin
  update projshar
  set load_status = pload_status
  where session_id = psession_id
  and load_status <> pload_status;
  pret_val := 0;

exception
  when others then
    pret_val := -1;
end;

POPULATE_UACCESS
create or replace procedure populate_uaccess 
(puser_id IN number, pret_val OUT number
,padd_parents IN varchar2 default 'N')
as
  cursor roots
  is
  SELECT  WBS_ID 
  FROM UACCESS ua 
  WHERE USER_ID = puser_id
  and not exists (select  * from uaccess uc where uc.user_id = ua.user_id and uc.wbs_id = ua.parent_wbs_id);

  vparent_wbs_id number;
  vins_wbs_id number;
  vproj_id number;
  vcnt pls_integer;
begin
  delete from uaccess where user_id = puser_id;


  insert into uaccess (user_id,proj_id,access_flag,wbs_id,parent_wbs_id)
  select distinct puser_id,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 uo.obs_id from userobs uo where uo.user_id =puser_id);


  if padd_parents = 'Y' then
    for rrec in roots loop
      begin
        select parent_wbs_id into vparent_wbs_id from projwbs where wbs_id = rrec.wbs_id;

        while vparent_wbs_id is not null loop
          vins_wbs_id := vparent_wbs_id;

          select parent_wbs_id, proj_id into vparent_wbs_id, vproj_id from projwbs where wbs_id = vparent_wbs_id;

          select count(*) into vcnt from uaccess where user_id = puser_id and proj_id = vproj_id;
          if vcnt = 0 then
            insert into uaccess (user_id,proj_id,access_flag,wbs_id)
            values (puser_id,vproj_id,'N',vins_wbs_id);
          end if;
 
        end loop;
      exception
        when no_data_found then
          null;  -- In case the parent does not exists ignore and continue
      end;

    end loop;
  end if;
  pret_val := 0;
end;

UACCESS_MAINTAIN_FOR_USER
CREATE OR REPLACE PROCEDURE uaccess_maintain_for_user
( puser_id IN number, pret_val OUT number,padd_parents IN varchar2 default 'N')
as
begin
populate_uaccess (puser_id,pret_val,padd_parents);
end;

UPDATE_TASKACTV
create or replace procedure UPDATE_TASKACTV
(
p_task_id           in number, 
p_actv_code_type_id in number, 
p_actv_code_id      in number
)
as
begin

  update taskactv
  set    actv_code_id      = p_actv_code_id
  where  task_id           = p_task_id 
  and    actv_code_type_id = p_actv_code_type_id;

end;

GETNEXTKEYS
CREATE OR REPLACE PROCEDURE getnextkeys( tabcol IN varchar2
  , numkeys IN number, startkey OUT number)
IS
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  UPDATE nextkey SET key_seq_num = (key_seq_num + numKeys) WHERE key_name = tabcol;
  SELECT key_seq_num-numkeys  INTO startkey FROM nextkey WHERE key_name = tabcol;
  commit;
EXCEPTION
  WHEN OTHERS THEN
    startkey := -1;
END;

BRE_ADD
CREATE OR REPLACE PROCEDURE bre_add (bre_id in char,ipaddr in char, config in char, ret_Status out varchar)
   IS
	g varchar2(50);
	i varchar2(30);
   	d date;
	s char(1);
	c varchar2(50);
	f char(1);
   BEGIN
	g := bre_id;
	i := ipaddr;
	s := 'A';
	c := config;
	f := 'N';
    select sysdate into d from dual;
    insert into bre_registry (bre_registry_id,ip_address,start_time,status_code, last_time, config_name, config_changed_flag) values 
	(g,i,d,s,d,c,f);
    commit;
   ret_status := 'BRE '||g||' IS REGISTERED';
EXCEPTION
  WHEN OTHERS THEN
	ret_status := 'ERROR: BRE '||g||' WAS NOT REGISTERED';
 END;

BRE_CHECKCHANGE
CREATE OR REPLACE PROCEDURE bre_checkChange (gu_id in char, changed out varchar)
	IS
		cursor c1 is select bre_registry_id, config_changed_flag from bre_registry 
			where config_changed_flag = 'Y' and bre_registry_id = gu_id;
	BEGIN
		FOR update_rec in c1 LOOP
			update bre_registry set config_changed_flag = 'N' where bre_registry_id = gu_id;
			commit;
			changed := 'Y';
			return;
		END LOOP;
		changed := 'N';
		return;
	EXCEPTION
	   WHEN OTHERS THEN
       		changed := '-1';
		return;
	END;

BRE_REMOVE
CREATE OR REPLACE PROCEDURE bre_remove (gu_id in char, ret_Status out int)
   IS
    del_amount number := 0;
   BEGIN
    select decode(count(*),0,0,1) into del_amount 
        from bre_registry where bre_registry_id = gu_id;
    delete from bre_registry where bre_registry_id = gu_id;
    commit;
	ret_status := del_amount;
  EXCEPTION
  WHEN OTHERS THEN
	ret_status := -1;
 END;

BRE_KEEPALIVE
CREATE OR REPLACE PROCEDURE bre_keepalive (gu_id in char, ret_Status out varchar)
   IS
   BEGIN
    update bre_registry set last_time = sysdate where bre_registry_id = gu_id;
    commit;
        ret_status := 'BRE TIME UPDATED';
  EXCEPTION
  WHEN OTHERS THEN
	ret_status := 'ERROR: BRE WAS NOT UPDATED';
 END ;

BRE_PING
CREATE OR REPLACE PROCEDURE bre_ping (timeout_sec in int, ret_Status out int)
  IS
	cursor c1 is select bre_registry_id from bre_registry where torched_time is null and status_code = 'A' and
             (sysdate-last_time)*(60*60*24) > timeout_sec; 
        run_time date;
        history integer := 1;
	torch_count integer :=0;
  BEGIN
    select sysdate into run_time from dual;
    delete from bre_registry where status_code = 'T' and sysdate-torched_time > history;
    FOR torch_rec in c1 LOOP
       torch_count := torch_count + 1;
       update bre_registry set torched_time = run_time, status_code = 'T' 
	  where bre_registry_id = torch_rec.bre_registry_id; 
       commit;
    END LOOP;
       ret_status := torch_count;
EXCEPTION
  WHEN OTHERS THEN
	ret_status := -1 ;
 END;

COUNT_RSRC_LVLS
CREATE OR REPLACE PROCEDURE count_rsrc_lvls (  rsrc_num IN number, levels OUT integer )
IS
    maxlvl integer;
  begin
    select MAX(LEVEL)  INTO maxlvl
    from rsrc r
    where delete_session_id is null
    start with r.rsrc_id = rsrc_num
    connect by prior r.rsrc_id = r.parent_rsrc_id;
    levels := maxlvl;
  end;

GET_RSRC_ASSOC_TYPES
CREATE OR REPLACE PROCEDURE GET_RSRC_ASSOC_TYPES ( rsrc_id_ IN int, 
      typelist OUT varchar2 )
IS
  St   integer;   
  tab  varchar2(30);
  sqls varchar2(1000);
  qtys number;
  TYPE TabList IS VARRAY(20) OF varchar2(30);
  tabs TabList := TabList('TASKRSRC','PROJEST','PROJRISK','PROJISSU','TIMESHT','RSRFOLIO',
		'PROJECT','DOCUMENT','WBSRSRC');
BEGIN
  FOR i IN tabs.FIRST..tabs.LAST LOOP
     St := 0;   
     tab := tabs(i);
     sqls := 'select count(*) from dual where exists 
     ( select rsrc_id from '||tab||' t0 
        WHERE delete_session_id is null and
        rsrc_id in 
        ( select rsrc_id from rsrc t1
        start with t1.rsrc_id = '||rsrc_id_||'
        connect by prior t1.rsrc_id = t1.parent_rsrc_id ))' ;
     EXECUTE IMMEDIATE sqls into St;
     IF St > 0 THEN
        typelist := typelist||','||tab;
     END IF;
  END LOOP;
  select count(*) into qtys from dual where exists 
    ( select rsrc_id from TASKRSRC 
        where delete_session_id is null
    and nvl(act_reg_qty + act_ot_qty,0) > 0
    and rsrc_id in
    ( select rsrc_id from rsrc t1
        start with t1.rsrc_id = rsrc_id_
        connect by prior t1.rsrc_id = t1.parent_rsrc_id ));
  IF qtys > 0 THEN
     typelist := typelist||',TSACTUALS';
  END IF;
  typelist := LTRIM(typelist,',');
END;

GUID
create or replace package guid
as
  type num_array  is table of binary_integer index by binary_integer;  
  type cbuf is table of char(1) index by binary_integer;
  type base64MapType is varray(64) of char;
  base64Map  base64MapType;

  function guid_encode ( pguid RAW) return varchar2;

  function get_guid return varchar2;

  function mime_encode ( pbuf varchar2, padding varchar2 default 'N') return varchar2 ;
  function mime_decode ( pbuf varchar2) return varchar2 ;

  --Expose these because they are useful

  function lshift (p_value in number, p_times in number default 1) return number;
  function rshift (p_value in number, p_times in number default 1) return number;
  function bitor(p_dec1 number, p_dec2 number) return number;
  function bitxor(p_dec1 number, p_dec2 number) return number;

end;

GUID
create or replace package body guid
as
  bPadding boolean := false;

  /* prototypes */
  FUNCTION hex_to_dec (hexin IN VARCHAR2) RETURN NUMBER;
  FUNCTION dec_to_hex (decin IN NUMBER) RETURN VARCHAR2;
  function mime_encode_num ( buf num_array ) return varchar2; 
  /* end prototypes */

  procedure initialize_base64Map 
  is
  begin
   Base64Map := base64MapType 
      ( 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',  
        'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',   
        'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',  
        'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',  
        'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',   
        'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7',   
        '8', '9', '+', '/' );     
  end;

  function mime_encode ( pbuf varchar2, padding varchar2 default 'N') return varchar2 
  as
   i  binary_integer;
    EncBytes 	num_array;
    ret varchar2(2000);
  begin
    if upper (padding ) = 'Y' then
      bpadding := true;
   else
      bpadding := false;
   end if;
 
--   dbms_output.put_line ( pbuf) ;
    for i in 0..length(pbuf) -1 loop
      EncBytes(i) := ascii( substr(pbuf,i+1,1) );       
--      dbms_output.put_line ( EncBytes(i));
    end loop;
    ret :=  mime_encode_num( EncBytes ) ;
    return ret;
  end;



  function mime_decode ( pbuf varchar2) return varchar2 
  as
  begin
    null;
  end;


  function mime_encode_num ( buf num_array ) return varchar2 
  as
    EncStr 	varchar2(32767);
    k 		binary_integer;
    i		binary_integer;
    n		binary_integer;
    n3byt	binary_integer;
    nrest 	binary_integer;
    b		cbuf;   
    J 		number;  			-- for auto bail!
    z		binary_integer;
  begin
    initialize_base64Map;
    EncStr := '';
    n := buf.count;
    n3byt := trunc(n/3);
    nrest := mod (n,3);
    k := n3byt * 3;
    i := 0;
    J := 1;

    while ( i < k ) loop
       b(0) := Base64Map ( rshift ( bitand( buf(i),252) , 2 )  + 1 );
       b(1) := Base64Map ( ( bitor (   lshift ( bitand( buf(i), 3 ),4 ) , 
			rshift( bitand ( buf(i+1), 240 ),4 )  ) ) + 1);
       b(2) := Base64Map ( ( bitor (   lshift ( bitand( buf(i+1), 15 ),2 ) , 
			rshift( bitand ( buf(i+2), 192 ),6 )  ) )+1);
       b(3) := Base64Map ( (  bitand( buf(i+2),63)  ) +1  );
       EncStr := EncStr || b(0) || b(1)|| b(2)|| b(3);
       i:= i + 3; 
    end loop;
  if nrest = 2 then
       b(0) := Base64Map ( ( rshift ( bitand( buf(k),252) , 2 ) )+1 );
       b(1) := Base64Map ( ( bitor (   lshift ( bitand( buf(k), 3 ),4 ) , 
			rshift( bitand ( buf(k+1), 240 ),4 )  ) ) + 1);
       b(2) := Base64Map ( ( lshift ( bitand( buf(k+1), 15 ),2 ) )+1);
       EncStr := EncStr || b(0) || b(1)|| b(2);
    if bpadding then
      EncStr := EncStr || '=';
    end if;
  elsif nrest = 1 then  -- nrest=1
      b(0) := Base64Map ( (  rshift ( bitand( buf(k),252) , 2 ) )+1 );
       b(1) := Base64Map ( ( lshift ( bitand( buf(k), 3 ),4 ) )+1 );
       EncStr := EncStr || b(0) || b(1);
    if bpadding then
      EncStr := EncStr || '==';
    end if;
  end if;
    return EncStr;
  end;

  function guid_encode ( pguid RAW) return varchar2
  as
    EncResult 	varchar2(30);
    hChar 	varchar2(20);
    sGUID  	varchar2(100);
    n 		number;
    EncBytes 	num_array;
  
  begin
    EncBytes.Delete;    
    sGUID := RAWTOHEX(pguid);
    for i in 0..15 loop
      hchar := substr( sGUID,(i*2)+1,2); 
      EncBytes(i) := hex_to_dec( hChar); 
    end loop;
    bPadding := false;
    EncResult := mime_encode_num ( EncBytes) ;

    return EncResult;
  end;

  function get_guid return varchar2
  as
  begin
    return guid_encode ( sys_guid() ) ;

  end;

  function lshift (p_value in number, p_times in number default 1) return number is    
     v_value number := 0;    
  begin    
    
      -- left shift    
      v_value := p_value * (2**(p_times));    
    
      -- truncate high bits greater than the preferred word size    
      -- the value 4294967295 == FFFFFFFF in hex or the maximum  
      -- possible value in a 4 byte / 32 bit integer (WORD).  
      if (v_value > 4294967295) then    
          v_value := mod(v_value, 4294967296);    
      end if;    
    
      -- return the result    
      return v_value;    
   
   exception                              
     when others then                              
       dbms_output.put_line('Error: '||sqlerrm);                              
   end lshift;    


   function rshift (p_value in number, p_times in number default 1) return number is    
      v_value number := 0;    
   begin    
  
      v_value := p_value;  
    
      -- truncate high bits greater than the preferred word size    
      -- the value 4294967295 == FFFFFFFF in hex or the maximum  
      -- possible value in a 4 byte / 32 bit integer (WORD).  
      if (v_value > 4294967295) then    
          v_value := mod(v_value, 4294967296);    
      end if;  
  
      -- right shift    
      v_value := v_value / (2**(p_times));    
    
      -- truncate right side    
      v_value := trunc(v_value);    
    
      -- return the result    
      return v_value;    
    
   exception                              
     when others then                              
       dbms_output.put_line('Error: '||sqlerrm);                              
   end rshift;  


   function bitor(p_dec1 number, p_dec2 number) return number is
   begin
     return p_dec1-bitand(p_dec1,p_dec2)+p_dec2;
   end;

   function bitxor(p_dec1 number, p_dec2 number) return number is
   begin
     return bitor(p_dec1,p_dec2)-bitand(p_dec1,p_dec2);
     -- or you could use: return p_dec1-2*bitand(p_dec1,p_dec2)+p_dec2;
   end;

FUNCTION hex_to_dec (hexin IN VARCHAR2) RETURN NUMBER IS
  v_charpos NUMBER;
  v_charval CHAR(1);
  v_return NUMBER DEFAULT 0;
  v_power NUMBER DEFAULT 0;
  v_string VARCHAR2(2000);
BEGIN
  v_string := UPPER(hexin);
  v_charpos := LENGTH(v_string);
  WHILE v_charpos > 0 LOOP
    v_charval := SUBSTR(v_string,v_charpos,1);
    IF v_charval BETWEEN '0' AND '9' THEN
      v_return := v_return + TO_NUMBER(v_charval) * POWER(16,v_power);
    ELSE
      IF v_charval = 'A' THEN 
        v_return := v_return + 10 * POWER(16,v_power); 
      ELSIF v_charval = 'B' THEN 
        v_return := v_return + 11 * POWER(16,v_power); 
      ELSIF v_charval = 'C' THEN 
        v_return := v_return + 12 * POWER(16,v_power);
      ELSIF v_charval = 'D' THEN 
        v_return := v_return + 13 * POWER(16,v_power);
      ELSIF v_charval = 'E' THEN 
        v_return := v_return + 14 * POWER(16,v_power);
      ELSIF v_charval = 'F' THEN 
        v_return := v_return + 15 * POWER(16,v_power);
      ELSE 
        raise_application_error(-20621,'Invalid input');
      END IF;
    END IF;
    v_charpos := v_charpos - 1;
    v_power := v_power + 1;
  END LOOP;
  RETURN v_return;
END hex_to_dec;

FUNCTION dec_to_hex (decin IN NUMBER) RETURN VARCHAR2 IS
  v_decin NUMBER;
  v_next_digit NUMBER;
  v_result varchar(2000);
BEGIN
  v_decin := decin;
  WHILE v_decin > 0 LOOP
    v_next_digit := mod(v_decin,16);
    IF v_next_digit > 9 THEN
      IF v_next_digit = 10 THEN v_result := 'A' || v_result;
      ELSIF v_next_digit = 11 THEN v_result := 'B' || v_result;
      ELSIF v_next_digit = 12 THEN v_result := 'C' || v_result;
      ELSIF v_next_digit = 13 THEN v_result := 'D' || v_result;
      ELSIF v_next_digit = 14 THEN v_result := 'E' || v_result;
      ELSIF v_next_digit = 15 THEN v_result := 'F' || v_result;
      ELSE raise_application_error(-20600,'Untrapped exception');
      END IF;
    ELSE
      v_result := to_char(v_next_digit) || v_result;
    END IF;
    v_decin := floor(v_decin / 16);
  END LOOP;
  RETURN v_result;
END dec_to_hex;

end;

COPY_UTILS
create or replace package copy_utils
as
  function Get_Next_Key ( pkey_name VARCHAR2 )   return number;
  procedure Set_Next_Key ( pkey_name VARCHAR2, pvalue NUMBER );
  procedure set_error_msg ( pmsg varchar2, pdb_msg varchar2, perror_msg IN OUT varchar2) ;
  function fset_error_msg (pmsg varchar2, pdb_msg varchar2, perror_msg IN OUT varchar2)   return varchar2 ;
  function Get_temp_work_id return number;
  procedure insert_udf ( ptable_name IN varchar2, pfk IN number, 
			pnew_fk IN number, pnew_proj_id IN number);
end;

COPY_UTILS
create or replace package body copy_utils
as
  vlog_seq number := 0;

  function Get_Next_Key ( pkey_name VARCHAR2 ) 
  return number
  as
    PRAGMA AUTONOMOUS_TRANSACTION;
    vkey number;
    vsql varchar2 (256);

  begin
      update nextkey
      set key_seq_num = key_seq_num + 1
      where key_name = pkey_name; 

      select key_seq_num - 1 into vkey
      from nextkey
      where key_name = pkey_name;
    
      commit;

    return vkey;
  end;

  procedure Set_Next_Key ( pkey_name VARCHAR2, pvalue NUMBER ) 
  as
  begin
    update nextkey
    set key_seq_num = pvalue
    where key_name = pkey_name; 
  end;    

  procedure set_error_msg ( pmsg varchar2, pdb_msg varchar2, perror_msg IN OUT varchar2) 
  as
  begin

    if length( perror_msg ) > 0 then
      perror_msg := perror_msg || '|' || pmsg ;
    else 
      perror_msg := pmsg;
    end if;

    if length ( pdb_msg ) > 0 then

      if length( perror_msg ) > 0 then
        perror_msg := perror_msg || '|' || pdb_msg ;
      else 
        perror_msg := pdb_msg;
      end if;

    end if;
  end;

  function fset_error_msg (pmsg varchar2, pdb_msg varchar2, perror_msg IN OUT varchar2) 
  return varchar2 
  as
  begin
    set_error_msg ( pmsg, pdb_msg, perror_msg ) ;
    return perror_msg;
  end;

  function Get_temp_work_id return number
  as 
    pwork_id number;
  begin
    select to_number( USERENV('SESSIONID') ) 
    into pwork_id
    from dual;
    return pwork_id;
  end;

  procedure insert_udf ( ptable_name IN varchar2, pfk IN number
      , pnew_fk IN number, pnew_proj_id IN number)
  as
  begin
      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;
  end;

end;

TASK_COPY_PKG
create or replace package task_copy_pkg
as
  TYPE TaskListTable IS TABLE of NUMBER INDEX BY BINARY_INTEGER;
  TYPE DocIDRec IS RECORD
    (old_doc_id  NUMBER,
     new_doc_id  NUMBER ) ;
  TYPE DocIDType IS TABLE OF DocIDRec
	INDEX BY BINARY_INTEGER;
   
  procedure activity_copy ( 	pproj_id	number,	
				pwbs_id		number,
				ptask_id	number,		-- task to copy
				copy_bit	varchar2,
				pwork_id	number,		-- Current work seq
				pret_val		OUT number,
				pret_msg OUT varchar2) ;

  procedure activity_copy ( 	ptask_id	number,		-- task to copy
				copy_bit	varchar2,
				pwork_id	number,		-- Current work seq
				pret_val		OUT number,
				pret_msg OUT varchar2) ;

-- for api activity copy, one at a time
  procedure activity_copy_api ( ptask_id	number,	-- task to copy
				pwbs_id		number,	  	-- wbs where the task copied to
				ptask_code	varchar2,	-- unique per project, generate if not passed in
				copy_bit	varchar2,
				pret_val	OUT number,
				pret_msg 	OUT varchar2) ;


  procedure by_wbs (	pproj_id	number,		-- destination project
			pwbs_id		number,		-- destination wbs 
			porig_wbs_id	number,		-- wbs to copy
			copy_bit	varchar2,
			pwork_id	number,
			dopred		varchar2,
			pret_val		OUT number,
				pret_msg OUT varchar2 ) ;

  procedure by_string_list (	plist		varchar2,
--				pproj_id	number,	
--				pwbs_id		number,
				copy_bit	varchar2,
				pret_val		OUT number,
				pret_msg OUT varchar2 ) ;

  procedure taskpred_copy (	pwork_id  	number,
				ponly_copied	boolean,
				b_is_baseline_create boolean,
				pret_val		OUT number,
				pret_msg OUT varchar2 );

  procedure set_doc_id ( pdocID DocIDType, pret_val OUT number );

  function string_list_parse ( plist 	varchar2, plt OUT TaskListTable ) 
  return number;

  DocID DocIDType;
  DocIDidx BINARY_INTEGER;
  gb_use_seq	boolean :=FALSE;
end;

TASK_COPY_PKG
create or replace PACKAGE BODY TASK_COPY_PKG 
as
  b_taskrsrc             boolean := false;
  b_taskdoc              boolean := false;
  b_taskmemo             boolean := false;
  b_taskproc             boolean := false;
  b_taskactv             boolean := false;
  b_projcost             boolean := false;
  b_taskpred             boolean := false;
  b_taskpred_only_copied boolean := false;
  b_is_baseline_create   boolean := false;
  -- projissu added for task related projissues...
  b_projissu      boolean := false;
  b_baseline_copy boolean := false;
  b_taskfin       boolean := false;

  -- Error Related
  gerror_msg varchar2(4000);

  /* Prototypes */

  procedure set_doc_id(pdocID DocIDType, pret_val OUT number) as
  begin
    DocID    := pdocID;
    DocIDidx := DocID.COUNT;
    pret_val := 0;
  exception
    when others then
      pret_val := -1;
      return;
  end;

  function get_new_doc_id(pold_doc_id number) return number as
    i binary_integer;
  begin
    if DocIDidx = 0 then
      return 0;
    end if;

    for i in 1 .. DocIDidx loop
      if pold_doc_id = DocID(i).old_doc_id then
        return DocID(i) .new_doc_id;
      end if;
    end loop;
    return 0;
  end;

  procedure parse_copy_bit(pcopy_bit varchar2) as
  begin
    b_taskrsrc             := false;
    b_taskdoc              := false;
    b_taskmemo             := false;
    b_taskproc             := false;
    b_taskactv             := false;
    b_projcost             := false;
    b_taskpred             := false;
    b_taskpred_only_copied := false;
    b_taskfin              := false;
    b_is_baseline_create   := false;
    if substr(pcopy_bit, 1, 1) = '1' then
      b_taskrsrc := true;
    end if;
    if substr(pcopy_bit, 2, 1) = '1' then
      b_taskpred := true;
    end if;
    if substr(pcopy_bit, 3, 1) = '1' then
      b_taskactv := true;
    end if;
    if substr(pcopy_bit, 4, 1) = '1' then
      b_taskmemo := true;
    end if;
    if substr(pcopy_bit, 5, 1) = '1' then
      b_projcost := true;
    end if;
    if substr(pcopy_bit, 6, 1) = '1' then
      b_taskproc := true;
    end if;
    if substr(pcopy_bit, 7, 1) = '1' then
      b_taskdoc := true;
    end if;
    if substr(pcopy_bit, 8, 1) = '1' then
      b_taskpred_only_copied := true;
    end if;
    if substr(pcopy_bit, 9, 1) = '1' then
      b_projissu := true;
    end if;
    if substr(pcopy_bit, 10, 1) = '1' then
      b_baseline_copy := true;
    end if;
    if substr(pcopy_bit, 11, 1) = '1' then
      b_taskfin := true;
    end if;
    if substr(pcopy_bit, 12, 1) <> '0' then
      b_is_baseline_create := true;
    end if;
  end;

  procedure activity_copy(ptask_id number, -- task to copy
                          copy_bit varchar2,
                          pwork_id number, -- Current work seq
                          pret_val OUT number,
                          pret_msg OUT varchar2) as
    vproj_id number;
    vwbs_id  number;

  begin
    begin
      select proj_id, wbs_id
        into vproj_id, vwbs_id
        from task
       where task_id = ptask_id
         and delete_session_id is null;

      activity_copy(vproj_id,
                    vwbs_id,
                    ptask_id,
                    copy_bit,
                    pwork_id,
                    pret_val,
                    pret_msg);
    exception
      when others then
        pret_val := -1;
        return;
    end;
  end;


function get_unique_task_code (ptask_code varchar2, pproj_id number) 
return varchar2 
as
    i binary_integer;
    vtask_code	  varchar2(40);
    vtmp	  varchar2(4);
    vtmp2	  varchar2(4);
    vtmpnum	  number;
    j number;
  begin
    vtask_code := trim(ptask_code);
    if length(vtask_code) < 4 then
       vtask_code := vtask_code || '1000';
    end if;

      vtmp := substr(vtask_code, length(vtask_code) - 3, 4);
      vtmp2 := '';
      for i in 1 .. 4 loop
        if substr(vtmp, i, 1) >= '0' and substr(vtmp, i, 1) <= '9' then
          vtmp2 := trim(nvl(vtmp2, ' ') || substr(vtmp, i, 1));
        end if;
      end loop;     

      if vtmp2 is null then
         vtmpnum := 1000;
      else
         vtmpnum := vtmp2;
      end if;
	
      for i in 1 .. 1000 loop
          vtmpnum := vtmpnum + 10;
          select count(1) into j
          from task where proj_id = pproj_id and delete_session_id is null 
            and task_code = substr(vtask_code, 1, length(vtask_code) - 4) || vtmpnum;
            
          EXIT when j = 0;
      end loop;

    if i = 1000 then
      select TO_NUMBER(TO_CHAR(sysdate, 'SSSSS')) into vtmpnum from dual;
    end if;

    vtask_code := substr(vtask_code, 1, length(vtask_code) - 4) || vtmpnum;
    return vtask_code;

  end;

-- for api activity copy, one at a time
  procedure activity_copy_api ( 	ptask_id	number,		-- task to copy
				pwbs_id		number,	  	-- wbs where the task copied to
				ptask_code	varchar2,	-- unique per project, generate if not passed in
				copy_bit	varchar2,
				pret_val	OUT number,
				pret_msg 	OUT varchar2) 
as
    vproj_id_from number;
    vproj_id_to   number;
    vtask_code	  varchar2(40);
    vclndr_id_default   number;
    vclndr_id         number;
    cursor tr is
      select taskrsrc_id
        from taskrsrc
       where task_id = ptask_id
         and delete_session_id is null;

    cursor tm is
      select memo_id, memo_type_id, task_memo
        from taskmemo
       where task_id = ptask_id
         and delete_session_id is null
       order by memo_id;

    cursor td is
      select doc_id, wp_flag
        from taskdoc
       where task_id = ptask_id
         and delete_session_id is null
       order by doc_id;

    cursor tp is
      select *
        from taskproc
       where task_id = ptask_id
         and delete_session_id is null
       order by proc_id;

    cursor pc is
      select *
        from projcost
       where task_id = ptask_id
         and delete_session_id is null
       order by cost_item_id;

    cursor tpred is
      select task_id,
             proj_id,
             pred_task_id,
             pred_proj_id,
             pred_type,
             lag_hr_cnt
        from taskpred
       where task_id = ptask_id
         and delete_session_id is null;

    cursor tsucc is
      select task_id,
             proj_id,
             pred_task_id,
             pred_proj_id,
             pred_type,
             lag_hr_cnt
        from taskpred
       where pred_task_id = ptask_id
         and delete_session_id is null;
         
    cursor pi is
      select issue_id
        from projissu
       where task_id = ptask_id
         and delete_session_id is null
       order by issue_id;

    v_new_task_id     number;
    vcnt_tr           number;
    v_new_taskrsrc_id number;
    vpk_id            number;
    vnew_doc_id       number;
    vtemp_guid        varchar2(22);
    vclndr_type       varchar2(16 CHAR);
    
begin
    -- only do copy bit if supplied, otherwise use default (false).
    if copy_bit is not null then
      parse_copy_bit(copy_bit);
    end if;

    begin

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

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


      if ptask_code is not null then
        vtask_code := ptask_code;
      else
        vtask_code := get_unique_task_code (vtask_code, vproj_id_to);
      end if;

--dbms_output.put_line(vtask_code );

    exception
      when others then
        pret_val := -1;
        return;
    end;

    begin
      v_new_task_id := copy_utils.Get_Next_Key('task_task_id');
      vtemp_guid := guid.get_guid();

      if vproj_id_to <> vproj_id_from then
      select clndr_type
             into vclndr_type
             from calendar
             where clndr_id = vclndr_id;
        if vclndr_type = 'CA_Base' then
          vclndr_id_default := vclndr_id;
        else  
          select clndr_id into vclndr_id_default
          from calendar 
          where default_flag = 'Y';
        end if;  
      end if;
      
      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,
               decode(vproj_id_to, vproj_id_from, CLNDR_ID, vclndr_id_default),
               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,
               vtemp_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
          from task
         where task_id = ptask_id;

  /* bug fix 6919 */
  if vproj_id_to = vproj_id_from then
    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;
  end if;
  
      /* bug PSa5575 */
      if not b_taskrsrc then
        update task
           set rsrc_id = null
         where task_id = v_new_task_id
           and rsrc_id is not null;
      end if;
    exception
      when others then
        copy_utils.set_error_msg('Error inserting into TASK',
                                 SQLERRM,
                                 pret_msg);
        pret_val := -1;
        return;
    end;
    
--    begin
--      if b_taskpred and pwork_id is not null then
--        insert into pkxref
--          (system_id, context_name, pk1, pk2, old_pk1, old_pk2, add_date)
--          select pwork_id,
--                 'T',
--                 vproj_id_to,
--                 v_new_task_id,
--                 t.proj_id,
--                 t.task_id,
--                 sysdate
--            from task t
--           where task_id = ptask_id
--             and delete_session_id is null;
--
--      end if;
--    exception
--      when others then
--        copy_utils.set_error_msg('Error inserting into TASKPRED',
--                                 SQLERRM,
--                                 pret_msg);
--        pret_val := -1;
--        return;
--    end;

    begin
      if b_taskactv  and vproj_id_to = vproj_id_from then -- copy within same project only
        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;
        elsif b_taskactv then -- if diff projects, copy only if ACTVTYPE.Actv_code_type_scope = AS_Global
        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 if;
    exception
      when others then
        copy_utils.set_error_msg('Error inserting into TASKACTV',
                                 SQLERRM,
                                 pret_msg);
        pret_val := -1;
        return;
    end;

    begin
      if b_taskfin then
        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 if;
    exception
      when others then
        copy_utils.set_error_msg('Error inserting into TASKFIN',
                                 SQLERRM,
                                 pret_msg);
        pret_val := -1;
        return;
    end;

    begin
      if b_taskrsrc then
        vcnt_tr := 0;
        for tr_rec in tr loop
          v_new_taskrsrc_id := copy_utils.Get_Next_Key('taskrsrc_taskrsrc_id');
          insert into taskrsrc
            (TASKRSRC_ID,
             TASK_ID,
             PROJ_ID,
             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,
             RSRC_REQUEST_DATA,
             RSRC_TYPE,
             ROLLUP_DATES_FLAG,
             COST_PER_QTY_SOURCE_TYPE,
             TARGET_CRV,
             REMAIN_CRV,
             ACTUAL_CRV)
            select v_new_taskrsrc_id,
                   v_new_task_id,
                   vproj_id_to,
                   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.get_guid(),
                   RATE_TYPE,
                   ACT_THIS_PER_COST,
                   ACT_THIS_PER_QTY,
                   CURV_ID,
                   RSRC_REQUEST_DATA,
                   RSRC_TYPE,
                   ROLLUP_DATES_FLAG,
                   COST_PER_QTY_SOURCE_TYPE,
                   TARGET_CRV,
                   REMAIN_CRV,
                   ACTUAL_CRV
              from taskrsrc
             where taskrsrc_id = tr_rec.taskrsrc_id;
          copy_utils.insert_udf('taskrsrc',
                                tr_rec.taskrsrc_id,
                                v_new_taskrsrc_id,
                                vproj_id_to);

          if b_taskfin then
            insert into trsrcfin
              (FIN_DATES_ID,
               TASKRSRC_ID,
               TASK_ID,
               PROJ_ID,
               ACT_QTY,
               ACT_COST)
              select FIN_DATES_ID,
                     v_new_taskrsrc_id,
                     v_new_task_id,
                     vproj_id_to,
                     ACT_QTY,
                     ACT_COST
                from trsrcfin
               where taskrsrc_id = tr_rec.taskrsrc_id;
          end if;

          vcnt_tr := vcnt_tr + 1;
        end loop;
      end if;
    exception
      when others then
        copy_utils.set_error_msg('Error inserting into TASKRSRC',
                                 SQLERRM,
                                 pret_msg);
        pret_val := -1;
        return;
    end;

    if b_taskmemo then
      for tm_rec in tm loop
        begin
          vpk_id := copy_utils.Get_Next_Key('taskmemo_memo_id');

          insert into taskmemo
            (memo_id, task_id, memo_type_id, proj_id, task_memo)
          values
            (vpk_id,
             v_new_task_id,
             tm_rec.memo_type_id,
             vproj_id_to,
             tm_rec.task_memo);
        exception
          when others then
            copy_utils.set_error_msg('Error inserting into TASKMEMO',
                                     SQLERRM,
                                     pret_msg);
            pret_val := -1;
            return;
        end;

      end loop;
    end if;

    if b_taskdoc and vproj_id_to = vproj_id_from then
      begin
        for td_rec in td loop
          vpk_id      := copy_utils.Get_Next_Key('taskdoc_taskdoc_id');
          vnew_doc_id := copy_utils.Get_Next_Key('document_doc_id');
        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 vnew_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,
                 guid.get_guid(),
                 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 = td_rec.doc_id;
           
           copy_utils.insert_udf('document',
                              td_rec.doc_id,
                              vnew_doc_id,
                              vproj_id_to);
                              
            insert into taskdoc
              (taskdoc_id, doc_id, proj_id, wbs_id, wp_flag, task_id)
            values
              (vpk_id,
               vnew_doc_id,
               vproj_id_to,
               pwbs_id,
               td_rec.wp_flag,
               v_new_task_id);

        end loop;
      exception
        when others then
          copy_utils.set_error_msg('Error inserting into TASKDOC',
                                   SQLERRM,
                                   pret_msg);
          pret_val := -1;
          return;
      end;
    end if;
    
    if b_taskproc then
      for tp_rec in tp loop
        begin
          vpk_id := copy_utils.Get_Next_Key('taskproc_proc_id');

          insert into taskproc
            (PROC_ID,
             TASK_ID,
             SEQ_NUM,
             PROJ_ID,
             COMPLETE_FLAG,
             PROC_NAME,
             PROC_WT,
             COMPLETE_PCT,
             PROC_DESCR)
          values
            (vpk_id,
             v_new_task_id,
             tp_rec.seq_num,
             vproj_id_to,
             tp_rec.complete_flag,
             tp_rec.proc_name,
             tp_rec.proc_wt,
             tp_rec.COMPLETE_PCT,
             tp_rec.proc_descr);

          copy_utils.insert_udf('taskproc',
                                tp_rec.proc_id,
                                vpk_id,
                                vproj_id_to);

        exception
          when others then
            copy_utils.set_error_msg('Error inserting into TASKPROC',
                                     SQLERRM,
                                     pret_msg);
            pret_val := -1;
            return;
        end;

      end loop;
    end if;

    if b_projcost then
      for pc_rec in pc loop
        begin
          vpk_id := copy_utils.Get_Next_Key('projcost_cost_item_id');

          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)

          values
            (vpk_id,
             vproj_id_to,
             v_new_task_id,
             pc_rec.auto_compute_act_flag,
             pc_rec.cost_load_type,
             pc_rec.acct_id,
             pc_rec.cost_type_id,
             pc_rec.target_cost,
             pc_rec.act_cost,
             pc_rec.remain_cost,
             pc_rec.qty_name,
             pc_rec.target_qty,
             pc_rec.cost_per_qty,
             pc_rec.po_number,
             pc_rec.vendor_name,
             pc_rec.cost_name,
             pc_rec.cost_descr);

          copy_utils.insert_udf('projcost',
                                pc_rec.cost_item_id,
                                vpk_id,
                                vproj_id_to);
        exception
          when others then
            copy_utils.set_error_msg('Error inserting into PROJCOST',
                                     SQLERRM,
                                     pret_msg);
            pret_val := -1;
            return;
        end;

      end loop;
    end if;

    if b_projissu then
      for pi_rec in pi loop
        vpk_id := copy_utils.Get_Next_Key('projissu_issue_id');
        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 vpk_id,
                 vproj_id_to,
                 OBS_ID,
                 PRIORITY_TYPE,
                 STATUS_CODE,
                 ISSUE_NAME,
                 THRESH_ID,
                 TRACK_VIEW_ID,
                 pwbs_id,
                 v_new_task_id,
                 RSRC_ID,
                 decode(vproj_id_to, vproj_id_from, THRESH_PARM_ID, null),
                 decode(vproj_id_to, vproj_id_from, BASE_PROJ_ID, null),
                 decode(vproj_id_to, vproj_id_from, WORKSPACE_ID, null),
                 ISSUE_VALUE,
                 LO_PARM_VALUE,
                 HI_PARM_VALUE,
                 ADD_BY_NAME,
                 RESOLV_DATE,
                 ADD_DATE,
                 ISSUE_NOTES
            from projissu
           where issue_id = pi_rec.issue_id;

        insert into issuhist
          (issue_id, proj_id, issue_history)
          select vpk_id, vproj_id_to, issue_history
            from issuhist
           where issue_id = pi_rec.issue_id
             and delete_session_id is null;
         copy_utils.insert_udf('projissu', pi_rec.issue_id, vpk_id, vproj_id_to);
      end loop;

    end if;

-- taskpred copy

    if b_taskpred then
      for tpred_rec in tpred loop
        begin
          vpk_id := copy_utils.Get_Next_Key('taskpred_task_pred_id');

          insert into taskpred
            (task_pred_id,
             task_id,
             pred_task_id,
             proj_id,
             pred_proj_id,
             pred_type,
             lag_hr_cnt)
          values
            (vpk_id,
             v_new_task_id,
             tpred_rec.pred_task_id,
             vproj_id_to,
             tpred_rec.pred_proj_id,
             tpred_rec.pred_type,
             tpred_rec.lag_hr_cnt);

        exception
          when others then
            copy_utils.set_error_msg('Error inserting into TASKPRED',
                                     SQLERRM,
                                     pret_msg);
            pret_val := -1;
            return;
        end;

      end loop;
      
      for tsucc_rec in tsucc loop
        begin
          vpk_id := copy_utils.Get_Next_Key('taskpred_task_pred_id');

          insert into taskpred
            (task_pred_id,
             task_id,
             pred_task_id,
             proj_id,
             pred_proj_id,
             pred_type,
             lag_hr_cnt)
          values
            (vpk_id,
             tsucc_rec.task_id,
             v_new_task_id,
             tsucc_rec.proj_id,
             vproj_id_to,
             tsucc_rec.pred_type,
             tsucc_rec.lag_hr_cnt);

        exception
          when others then
            copy_utils.set_error_msg('Error inserting into TASKPRED',
                                     SQLERRM,
                                     pret_msg);
            pret_val := -1;
            return;
        end;

      end loop;
    end if;
    

    -- Copy UDF
    copy_utils.insert_udf('task', ptask_id, v_new_task_id, vproj_id_to);

    pret_val := v_new_task_id; 

  exception
    when others then
      pret_msg := copy_utils.fset_error_msg('General error in ACTIVITY_COPY',
                                            SQLERRM,
                                            gerror_msg);
      pret_val := -1;
      return;

end;


  procedure activity_copy(pproj_id number,
                          pwbs_id  number,
                          ptask_id number, -- task to copy
                          copy_bit varchar2,
                          pwork_id number, -- Current work seq
                          pret_val OUT number,
                          pret_msg OUT varchar2) as
    cursor tr is
      select taskrsrc_id
        from taskrsrc
       where task_id = ptask_id
         and delete_session_id is null;

    cursor tm is
      select memo_id, memo_type_id, task_memo
        from taskmemo
       where task_id = ptask_id
         and delete_session_id is null
       order by memo_id;

    cursor td is
      select doc_id, wp_flag
        from taskdoc
       where task_id = ptask_id
         and delete_session_id is null
       order by doc_id;

    cursor tp is
      select *
        from taskproc
       where task_id = ptask_id
         and delete_session_id is null
       order by proc_id;

    cursor pc is
      select *
        from projcost
       where task_id = ptask_id
         and delete_session_id is null
       order by cost_item_id;

    cursor tpred is
      select task_id,
             proj_id,
             pred_task_id,
             pred_proj_id,
             pred_type,
             lag_hr_cnt
        from taskpred
       where task_id = ptask_id
         and delete_session_id is null;

    cursor pi is
      select issue_id
        from projissu
       where task_id = ptask_id
         and delete_session_id is null
       order by issue_id;

    v_new_task_id     number;
    vcnt_tr           number;
    v_new_taskrsrc_id number;
    vpk_id            number;
    vnew_doc_id       number;
    vtemp_guid        varchar2(22);
  begin

    -- only do copy bit if supplied, otherwise use existing/default.
    if copy_bit is not null then
      parse_copy_bit(copy_bit);
    end if;
    begin
      v_new_task_id := copy_utils.Get_Next_Key('task_task_id');
      if b_baseline_copy then
        vtemp_guid := null;
      else
        vtemp_guid := guid.get_guid();
      end if;

      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,
               decode(vtemp_guid, null, guid, vtemp_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
          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;

      /* bug PSa5575 */

-- keep this logic

      if not b_taskrsrc then
        update task
           set rsrc_id = null
         where task_id = v_new_task_id
           and rsrc_id is not null;
      end if;
    exception
      when others then
        copy_utils.set_error_msg('Error inserting into TASK',
                                 SQLERRM,
                                 pret_msg);
        pret_val := -1;
        return;
    end;
    begin
      if b_taskpred and pwork_id is not null then
        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,
                 sysdate
            from task t
           where task_id = ptask_id
             and delete_session_id is null;
        /*  Removed -bkd 3/18/2002
             elsif not b_taskpred_only_copied then
                 for tpred_rec in tpred loop
                    vpk_id := copy_utils.Get_Next_Key ('taskpred_task_pred_id') ;
                    insert into taskpred
            ( task_pred_id, task_id, pred_task_id, proj_id
            ,pred_Proj_id, pred_type, lag_hr_cnt )
                    values (vpk_id, v_new_task_id, tpred_rec.pred_task_id, pproj_id,
              tpred_rec.pred_proj_id, tpred_rec.pred_type,
              tpred_rec.lag_hr_cnt );

                 end loop;
        */
      end if;
    exception
      when others then
        copy_utils.set_error_msg('Error inserting into TASKPRED',
                                 SQLERRM,
                                 pret_msg);
        pret_val := -1;
        return;
    end;

    begin
      if b_taskactv then
        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 if;
    exception
      when others then
        copy_utils.set_error_msg('Error inserting into TASKACTV',
                                 SQLERRM,
                                 pret_msg);
        pret_val := -1;
        return;
    end;

    begin
      if b_taskfin then
        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 if;
    exception
      when others then
        copy_utils.set_error_msg('Error inserting into TASKFIN',
                                 SQLERRM,
                                 pret_msg);
        pret_val := -1;
        return;
    end;

    begin
      if b_taskrsrc then
        vcnt_tr := 0;
        for tr_rec in tr loop
          v_new_taskrsrc_id := copy_utils.Get_Next_Key('taskrsrc_taskrsrc_id');
          insert into taskrsrc
            (TASKRSRC_ID,
             TASK_ID,
             PROJ_ID,
             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,
             RSRC_REQUEST_DATA,
             RSRC_TYPE,
             ROLLUP_DATES_FLAG,
             COST_PER_QTY_SOURCE_TYPE,
             TARGET_CRV,
             REMAIN_CRV,
             ACTUAL_CRV)
            select v_new_taskrsrc_id,
                   v_new_task_id,
                   pproj_id,
                   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.get_guid(),
                   RATE_TYPE,
                   ACT_THIS_PER_COST,
                   ACT_THIS_PER_QTY,
                   CURV_ID,
                   RSRC_REQUEST_DATA,
                   RSRC_TYPE,
                   ROLLUP_DATES_FLAG,
                   COST_PER_QTY_SOURCE_TYPE,
                   TARGET_CRV,
                   REMAIN_CRV,
                   ACTUAL_CRV
              from taskrsrc
             where taskrsrc_id = tr_rec.taskrsrc_id;
          copy_utils.insert_udf('taskrsrc',
                                tr_rec.taskrsrc_id,
                                v_new_taskrsrc_id,
                                pproj_id);

          if b_taskfin then
            insert into trsrcfin
              (FIN_DATES_ID,
               TASKRSRC_ID,
               TASK_ID,
               PROJ_ID,
               ACT_QTY,
               ACT_COST)
              select FIN_DATES_ID,
                     v_new_taskrsrc_id,
                     v_new_task_id,
                     pproj_id,
                     ACT_QTY,
                     ACT_COST
                from trsrcfin
               where taskrsrc_id = tr_rec.taskrsrc_id;
          end if;

          vcnt_tr := vcnt_tr + 1;
        end loop;
      end if;
    exception
      when others then
        copy_utils.set_error_msg('Error inserting into TASKRSRC',
                                 SQLERRM,
                                 pret_msg);
        pret_val := -1;
        return;
    end;

    if b_taskmemo then
      for tm_rec in tm loop
        begin
          vpk_id := copy_utils.Get_Next_Key('taskmemo_memo_id');

          insert into taskmemo
            (memo_id, task_id, memo_type_id, proj_id, task_memo)
          values
            (vpk_id,
             v_new_task_id,
             tm_rec.memo_type_id,
             pproj_id,
             tm_rec.task_memo);
        exception
          when others then
            copy_utils.set_error_msg('Error inserting into TASKMEMO',
                                     SQLERRM,
                                     pret_msg);
            pret_val := -1;
            return;
        end;

      end loop;
    end if;

    if b_taskdoc then
      begin
        for td_rec in td loop
          vpk_id      := copy_utils.Get_Next_Key('taskdoc_taskdoc_id');
          vnew_doc_id := get_new_doc_id(td_rec.doc_id);
          if vnew_doc_id > 0 then
            insert into taskdoc
              (taskdoc_id, doc_id, proj_id, wbs_id, wp_flag, task_id)
            values
              (vpk_id,
               vnew_doc_id,
               pproj_id,
               pwbs_id,
               td_rec.wp_flag,
               v_new_task_id);
          end if;
        end loop;
      exception
        when others then
          copy_utils.set_error_msg('Error inserting into TASKDOC',
                                   SQLERRM,
                                   pret_msg);
          pret_val := -1;
          return;
      end;
    end if;

    if b_taskproc then
      for tp_rec in tp loop
        begin
          vpk_id := copy_utils.Get_Next_Key('taskproc_proc_id');

          insert into taskproc
            (PROC_ID,
             TASK_ID,
             SEQ_NUM,
             PROJ_ID,
             COMPLETE_FLAG,
             PROC_NAME,
             PROC_WT,
             COMPLETE_PCT,
             PROC_DESCR)
          values
            (vpk_id,
             v_new_task_id,
             tp_rec.seq_num,
             pproj_id,
             tp_rec.complete_flag,
             tp_rec.proc_name,
             tp_rec.proc_wt,
             tp_rec.COMPLETE_PCT,
             tp_rec.proc_descr);

          copy_utils.insert_udf('taskproc',
                                tp_rec.proc_id,
                                vpk_id,
                                pproj_id);

        exception
          when others then
            copy_utils.set_error_msg('Error inserting into TASKPROC',
                                     SQLERRM,
                                     pret_msg);
            pret_val := -1;
            return;
        end;

      end loop;
    end if;

    if b_projcost then
      for pc_rec in pc loop
        begin
          vpk_id := copy_utils.Get_Next_Key('projcost_cost_item_id');

          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)

          values
            (vpk_id,
             pproj_id,
             v_new_task_id,
             pc_rec.auto_compute_act_flag,
             pc_rec.cost_load_type,
             pc_rec.acct_id,
             pc_rec.cost_type_id,
             pc_rec.target_cost,
             pc_rec.act_cost,
             pc_rec.remain_cost,
             pc_rec.qty_name,
             pc_rec.target_qty,
             pc_rec.cost_per_qty,
             pc_rec.po_number,
             pc_rec.vendor_name,
             pc_rec.cost_name,
             pc_rec.cost_descr);

          copy_utils.insert_udf('projcost',
                                pc_rec.cost_item_id,
                                vpk_id,
                                pproj_id);
        exception
          when others then
            copy_utils.set_error_msg('Error inserting into PROJCOST',
                                     SQLERRM,
                                     pret_msg);
            pret_val := -1;
            return;
        end;

      end loop;
    end if;

    if b_projissu then
      for pi_rec in pi loop
        vpk_id := copy_utils.Get_Next_Key('projissu_issue_id');
        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 vpk_id,
                 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,
                 null,
                 ISSUE_VALUE,
                 LO_PARM_VALUE,
                 HI_PARM_VALUE,
                 ADD_BY_NAME,
                 RESOLV_DATE,
                 ADD_DATE,
                 ISSUE_NOTES
            from projissu
           where issue_id = pi_rec.issue_id;

        insert into issuhist
          (issue_id, proj_id, issue_history)
          select vpk_id, pproj_id, issue_history
            from issuhist
           where issue_id = pi_rec.issue_id
             and delete_session_id is null;
         copy_utils.insert_udf('projissu', pi_rec.issue_id, vpk_id, pproj_id);
      end loop;

    end if;

    -- Copy UDF
    copy_utils.insert_udf('task', ptask_id, v_new_task_id, pproj_id);

    pret_val := 0;

  exception
    when others then
      pret_msg := copy_utils.fset_error_msg('General error in ACTIVITY_COPY',
                                            SQLERRM,
                                            gerror_msg);
      pret_val := -1;
      return;

  end;

  procedure by_wbs(pproj_id     number, -- destination project
                   pwbs_id      number, -- destination wbs
                   porig_wbs_id number, -- wbs to copy
                   copy_bit     varchar2,
                   pwork_id     number,
                   dopred       varchar2,
                   pret_val     OUT number,
                   pret_msg     OUT varchar2) as
    cursor wbs_tasks is
      select task_id
        from task
       where wbs_id = porig_wbs_id
         and delete_session_id is null;
    vret number;
    vcnt number := 0;
  begin
    parse_copy_bit(copy_bit);
    for wbs_tasks_rec in wbs_tasks loop
      activity_copy(pproj_id,
                    pwbs_id,
                    wbs_tasks_rec.task_id,
                    null,
                    pwork_id,
                    vret,
                    pret_msg);
      if vret < 0 then
        pret_val := -1;
        return;
      end if;
      vcnt := vcnt + 1;
    end loop;
    if UPPER(dopred) = 'Y' then
      taskpred_copy(pwork_id,
                    b_taskpred_only_copied,
                    b_is_baseline_create,
                    vret,
                    pret_msg);
      if vret < 0 then
        pret_val := -1;
        return;
      end if;
    end if;
    pret_val := vcnt;
  exception
    when others then
      pret_msg := copy_utils.fset_error_msg('General error in BY_WBS',
                                            SQLERRM,
                                            gerror_msg);
      pret_val := -1;
      return;
  end;

  procedure taskpred_copy(pwork_id             number,
                          ponly_copied         boolean,
                          b_is_baseline_create boolean,
                          pret_val             OUT number,
                          pret_msg             OUT varchar2) as
    cursor tpc is
      select DISTINCT 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) or
             (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;

    vtask_pred_id number;

    vproj_id      number;
    vtask_id      number;
    vpred_task_id number;
    vpred_proj_id number;
    bin_copied    boolean;
    do_copy       boolean;
  begin
    for tpc_rec in tpc LOOP
      bin_copied := true;
      do_copy    := true;

      begin
        select proj_id
          into vproj_id
          from project
         where proj_id = tpc_rec.proj_id
           and orig_proj_id is null;

        select proj_id
          into vproj_id
          from project
         where proj_id = tpc_rec.pred_proj_id
           and orig_proj_id is null;
      exception
        when no_data_found then
          if b_is_baseline_create = true then
            do_copy := true;
          else
            do_copy := false;
          end if;
      end;

      begin
        select pk2, pk1
          into vtask_id, vproj_id
          from pkxref
         where old_pk1 = tpc_rec.proj_id
           and old_pk2 = tpc_rec.task_id
           and system_id = pwork_id
           and context_name = 'T';
      exception
        when no_data_found then
          bin_copied := false;
          vtask_id   := tpc_rec.task_id;
          vproj_id   := tpc_rec.proj_id;
      end;

      begin
        select pk2, pk1
          into vpred_task_id, vpred_proj_id
          from pkxref
         where old_pk1 = tpc_rec.pred_proj_id
           and old_pk2 = tpc_rec.pred_task_id
           and system_id = pwork_id
           and context_name = 'T';
      exception
        when no_data_found then
          if bin_copied then
            bin_copied    := false;
            vpred_task_id := tpc_rec.pred_task_id;
            vpred_proj_id := tpc_rec.pred_proj_id;
          else
            -- this is a severe error of not finding either record in PKXREF
            pret_msg := copy_utils.fset_error_msg('Severe error.  TASKPRED not found in PKREF',
                                                  SQLERRM,
                                                  gerror_msg);
            pret_val := -1;
            return;
          end if;
      end;
      --dbms_output.put ( 'Proj_id: ' || to_char(vproj_id) || '-Task id: ' || to_char(vtask_id) ) ;
      --dbms_output.put_line ( 'PredProj_id: ' || to_char(vpred_proj_id) || '-PredTask id: ' || to_char(vpred_task_id) ) ;
      if do_copy then
        if (not b_taskpred_only_copied) or
           (b_taskpred_only_copied and bin_copied) then

          vtask_pred_id := copy_utils.Get_Next_Key('taskpred_task_pred_id');
          insert into taskpred
            (task_pred_id,
             task_id,
             pred_task_id,
             proj_id,
             pred_proj_id,
             pred_type,
             lag_hr_cnt)
          values
            (vtask_pred_id,
             vtask_id,
             vpred_task_id,
             vproj_id,
             vpred_proj_id,
             tpc_rec.pred_type,
             tpc_rec.lag_hr_cnt);
        end if;
      end if;
    end loop;
    pret_val := 0;

  exception
    when others then
      pret_msg := copy_utils.fset_error_msg('General error in TASKPRED_COPY',
                                            SQLERRM,
                                            gerror_msg);
      pret_val := -1;
      return;
  end;

  function string_list_parse(plist varchar2, plt OUT TaskListTable)
    return number as
    pos    number;
    lpos   number;
    i      number := 1;
    vc_num varchar2(20);
  begin
    lpos := 1;
    pos  := instr(plist, ',', lpos);
    while pos <> 0 loop
      vc_num := substr(plist, lpos, pos - lpos);
      plt(i) := to_number(vc_num);

      dbms_output.put_line(vc_num);
      lpos := pos + 1;
      pos  := instr(plist, ',', lpos);

      -- safety net
      i := i + 1;
      if i > 10000 then
        EXIT;
      end if;
    end loop;
    vc_num := substr(plist, lpos, (length(plist) + 1) - lpos);
    plt(i) := to_number(vc_num);
    dbms_output.put_line(vc_num);

    return 0;
  exception
    when others then
      return - 1;
  end;

  procedure by_string_list(plist varchar2,
                           --        pproj_id  number,
                           --        pwbs_id   number,
                           copy_bit varchar2,
                           pret_val OUT number,
                           pret_msg OUT varchar2) as
    vlt           TaskListTable;
    vret          number;
    vtemp_work_id number;
  begin
    if length(plist) < 1 then
      pret_val := -1;
      return;
    end if;

    vret := string_list_parse(plist, vlt);
    if vret < 0 then
      pret_val := vret;
      RETURN;
    end if;

    parse_copy_bit(copy_bit);
    vtemp_work_id := copy_utils.Get_temp_work_id;

    for i in vlt.FIRST .. vlt.COUNT loop
      activity_copy(vlt(i), vtemp_work_id, copy_bit, vret, pret_msg);
    end loop;

    if b_taskpred then
      taskpred_copy(vtemp_work_id,
                    b_taskpred_only_copied,
                    b_is_baseline_create,
                    vret,
                    pret_msg);
      if vret <> 0 then
        pret_val := -1;
        return;
      end if;
    end if;
    pret_val := 0;

  exception
    when others then
      pret_msg := copy_utils.fset_error_msg('General error in BY_STRING_LIST',
                                            SQLERRM,
                                            gerror_msg);
      pret_val := -1;
      return;
  end;

end;


PROJECT_COPY_PKG
CREATE OR REPLACE PACKAGE PROJECT_COPY_PKG
AS
  procedure copy(prop utils.properties);
  procedure copy_by_wbs(pwbs_id       NUMBER,
                        dest_wbs_id   number,
                        copy_bit      varchar2,
                        pret_val      OUT number,
                        pret_msg      OUT varchar2,
                        ppfolio_id    IN number DEFAULT null,
                        psession_id   IN number DEFAULT null,
                        prepl_proj_id number default null);

  DocID    task_copy_pkg.DocIDType;
  DocIDidx BINARY_INTEGER;
  TYPE threshIDRec IS RECORD(
    old_thresh_id NUMBER,
    new_thresh_id NUMBER);
  TYPE threshIDType IS TABLE OF threshIDRec INDEX BY BINARY_INTEGER;
  threshid    threshIDType;
  threshididx binary_integer;

  gb_use_seq boolean := FALSE;

end;

PROJECT_COPY_PKG
CREATE OR REPLACE PACKAGE BODY PROJECT_COPY_PKG
AS
  vproj_count   number := 0;
  vtask_count   number := 0;
  vlog_seq      number := 0;
  vmax_wbs_id   number := 0;
  vtpredcpy_seq number := 0;
  g_proj_suffix varchar2(5);

  g_proj_id_ret      number;
  vsource_proj_id    pls_integer := 0;
  vdest_proj_id      pls_integer := 0;
  vdest_wbs_id       pls_integer := 0;
  baseline_orig_proj_id          number := 0;	
  v_sum_base_proj_id pls_integer; --for storing project baseline
  b_wbs_name         projwbs.wbs_name%TYPE;
  b_is_proj_baseline boolean := false;
  v_session_id       pls_integer := NULL;
  -- flags for what to copy
  default_copy_bit varchar2(20) := '111111111111111111';

  -- Project bits
  b_projrisk boolean := false; -- 1
  b_projissu boolean := false;
  b_projthrs boolean := false;
  b_rpt      boolean := false;
  b_document boolean := false;
  b_projfund boolean := false; -- 6

  -- wbs bits
  b_wbsmemo boolean := false; -- 7
  b_wbsstep boolean := false;
  b_wbsdoc  boolean := false;
  b_task    boolean := false; -- 10

  -- task bits
  b_taskrsrc boolean := false; -- 11
  b_taskdoc  boolean := false;
  b_taskmemo boolean := false;
  b_taskproc boolean := false;
  b_taskactv boolean := false;
  b_projcost boolean := false;
  b_taskpred boolean := false; --17

  b_taskpred_only_copied boolean := false; -- 18

  b_baseline_copy boolean := false; -- 19

  b_requested_copy boolean := false; -- 20

  b_ppa_copy boolean := false; -- 21

  b_wbsrsrc_copy boolean := false; --22

  b_scenario_baseline boolean := false; --23

  b_is_baseline_create boolean := false; --24
  b_trsrcsum           boolean := false; --25
  b_tasksum boolean  :=false; --26
  gtask_copy_bit       varchar2(20);

  -- Portfolio and usession related
  gpfolio_id number;
  guser_name varchar2(32);

  -- Error Related
  gerror_msg varchar2(4000);

  procedure parse_copy_bit(pcopy_bit varchar2) as
    i   number;
    bit char(1);
  begin
    b_projrisk             := false; -- 1
    b_projissu             := false;
    b_projthrs             := false;
    b_rpt                  := false;
    b_document             := false;
    b_projfund             := false; -- 6
    b_wbsmemo              := false; -- 7
    b_wbsstep              := false;
    b_wbsdoc               := false;
    b_task                 := false; -- 10
    b_taskrsrc             := false; -- 11
    b_taskdoc              := false;
    b_taskmemo             := false;
    b_taskproc             := false;
    b_taskactv             := false;
    b_projcost             := false;
    b_taskpred             := false; --17
    b_taskpred_only_copied := false; -- 18
    b_baseline_copy        := false; -- 19
    b_requested_copy       := false; -- 20
    b_ppa_copy             := false; -- 21
    b_wbsrsrc_copy         := false; -- 22
    b_is_baseline_create   := false; --24
    b_trsrcsum             := false; --25 
    b_tasksum	     :=false; --26 
    if substr(pcopy_bit, 1, 1) = '1' then
      b_projrisk := true;
    end if;
    if substr(pcopy_bit, 2, 1) = '1' then
      b_projissu := true;
    end if;
    if substr(pcopy_bit, 3, 1) = '1' then
      b_projthrs := true;
    end if;
    if substr(pcopy_bit, 4, 1) = '1' then
      b_rpt := true;
    end if;
    if substr(pcopy_bit, 5, 1) = '1' then
      b_document := true;
    end if;
    if substr(pcopy_bit, 6, 1) = '1' then
      b_projfund := true;
    end if;
  
    if substr(pcopy_bit, 7, 1) = '1' then
      b_wbsmemo := true;
    end if;
    if substr(pcopy_bit, 8, 1) = '1' then
      b_wbsstep := true;
    end if;
    if substr(pcopy_bit, 9, 1) = '1' then
      b_wbsdoc := true;
    end if;
    if substr(pcopy_bit, 10, 1) = '1' then
      b_task := true;
    end if;
  
    if substr(pcopy_bit, 11, 1) = '1' then
      b_taskrsrc := true;
    end if;
    if substr(pcopy_bit, 12, 1) = '1' then
      b_taskpred := true;
    end if;
    if substr(pcopy_bit, 13, 1) = '1' then
      b_taskactv := true;
    end if;
    if substr(pcopy_bit, 14, 1) = '1' then
      b_taskmemo := true;
    end if;
    if substr(pcopy_bit, 15, 1) = '1' then
      b_projcost := true;
    end if;
    if substr(pcopy_bit, 16, 1) = '1' then
      b_taskproc := true;
    end if;
    if substr(pcopy_bit, 17, 1) = '1' then
      b_taskdoc := true;
    end if;
    if substr(pcopy_bit, 18, 1) = '1' then
      b_taskpred_only_copied := true;
    end if;
  
    gtask_copy_bit := substr(pcopy_bit, 11, 8) || substr(pcopy_bit, 2, 1);
  
    if substr(pcopy_bit, 19, 1) = '1' then
      b_baseline_copy := true;
      gtask_copy_bit  := gtask_copy_bit || '1';
    else
      b_baseline_copy := false;
      gtask_copy_bit  := gtask_copy_bit || '0';
    end if;
  
    if substr(pcopy_bit, 20, 1) = '1' then
      b_requested_copy := true;
    end if;
    if substr(pcopy_bit, 21, 1) = '1' then
      b_ppa_copy := true;
    end if;
    if substr(pcopy_bit, 22, 1) = '1' then
      b_wbsrsrc_copy := true;
    end if;
    if substr(pcopy_bit, 23, 1) = '1' then
      b_scenario_baseline := true;
    else
      b_scenario_baseline := false;	
    end if;
    if substr(pcopy_bit, 24, 1) <> '0' then
      b_is_baseline_create := true;
    end if;
    if substr(pcopy_bit, 25, 1) = '1' then
      b_trsrcsum := true;
    end if;
    if substr(pcopy_bit, 26, 1) = '1' then
      b_tasksum := true;
    end if;
        
    gtask_copy_bit := gtask_copy_bit || substr(pcopy_bit, 21, 1) ||
                      substr(pcopy_bit, 24, 1);
    /* original copy bit for task
     if substr(pcopy_bit,9,1) = '1' then b_task := true; end if;
     if substr(pcopy_bit,10,1) = '1' then b_taskrsrc := true; end if;
     if substr(pcopy_bit,11,1) = '1' then b_taskpred := true; end if;
     if substr(pcopy_bit,12,1) = '1' then b_taskactv := true; end if;
     if substr(pcopy_bit,13,1) = '1' then b_taskmemo := true; end if;
     if substr(pcopy_bit,14,1) = '1' then b_projcost := true; end if;
     if substr(pcopy_bit,15,1) = '1' then b_taskproc := true; end if;
     if substr(pcopy_bit,16,1) = '1' then b_taskdoc := true; end if;
    */
  end;

  function get_new_doc_id(pold_doc_id number) return number as
    i binary_integer;
  begin
    if DocIDidx = 0 then
      return 0;
    end if;
  
    for i in 1 .. DocIDidx loop
      if pold_doc_id = DocID(i).old_doc_id then
        return DocID(i) .new_doc_id;
      end if;
    end loop;
    return 0;
  end;

  function get_new_thresh_id(pold_thresh_id number) return number as
    i binary_integer;
  begin
    if threshIDidx = 0 then
      return 0;
    end if;
  
    for i in 1 .. threshididx loop
      if pold_thresh_id = threshID(i).old_thresh_id then
        return threshID(i) .new_thresh_id;
      end if;
    end loop;
    return 0;
  end;

  function new_proj_short_name(pproj_id         number,
                               pbaseline        boolean DEFAULT false,
                               pbaseline_suffix varchar2 default ' - B')
    return varchar2 as
    vsuff_num       number;
    v_proj_suffix   varchar2(9);
    vdummy          varchar2(40 CHAR);
    vold_short_name varchar2(40 CHAR);
    vsn_no_suffix   varchar2(40 CHAR);
    vsn_suffix      varchar2(40 CHAR);
    vsn_number      number;
    vnew_short_name varchar2(40 CHAR);
    vsuff_term      varchar2(10);
  begin
    if pbaseline then
      vsuff_term := pbaseline_suffix;
    else
      vsuff_term := '-';
    end if;
    select proj_short_name,
           substr(proj_short_name,
                  1,
                  instr(proj_short_name, vsuff_term, -1) - 1),
           substr(proj_short_name,
                  instr(proj_short_name, vsuff_term, -1) + 1,
                  length(proj_short_name))
      into vold_short_name, vsn_no_suffix, vsn_suffix
      from project
     where proj_id = pproj_id;
     if (instr(vold_short_name, vsuff_term, -1)) > 0 and pbaseline then
      vold_short_name := substr(vold_short_name,1,instr(vold_short_name, vsuff_term, -1) - 1);
    end if;
    if vsn_no_suffix is not null then
      begin
        vsn_number      := to_number(vsn_suffix);
        vold_short_name := vsn_no_suffix;
      exception
        when others then
          null;
      end;
    end if;
    for vsuff_num IN 1 .. 99999 LOOP
      v_proj_suffix := vsuff_term || ltrim(to_char(vsuff_num, '99999'));
      if length(vold_short_name || v_proj_suffix) > 40 then
        vnew_short_name := substr(vold_short_name,
                                  1,
                                  40 - length(v_proj_suffix)) ||
                           v_proj_suffix;
      else
        vnew_short_name := vold_short_name || v_proj_suffix;
      end if;
      begin
        select 'X'
          into vdummy
          from project
         where proj_short_name = vnew_short_name
           and delete_session_id is null;
      exception
        when no_data_found then
          return vnew_short_name;
        when too_many_rows then
          null;
      end;
    end loop;
    return vold_short_name;
  end;

  -- ************************ Prototypes  ***********************

  function process_level(pwbs_id            NUMBER,
                         pparent_wbs_id     NUMBER,
                         plevel             NUMBER,
                         pnew_parent_wbs_id IN OUT NUMBER,
                         pnew_proj_id       NUMBER,
                         prepl_proj_id      number default null)
    return number;

  function new_project(pold_proj_id  number,
                       prepl_proj_id number default null) return number;
  function new_wbs(pold_wbs_id    number,
                   pproj_id       number,
                   pparent_wbs_id IN OUT number,
                   pproject_flag  varchar2,
                   prepl_proj_id  number default null) return number;

  function new_project_codes(pold_proj_id number, pnew_proj_id number)
    return number;
  function new_actvcode(pold_type_id number,
                        pold_code_id number,
                        pnew_type_id number,
                        pnew_code_id number,
                        pnew_proj_id number) return number;

  -- **********************  end prototypes *****************************

  procedure copy(prop utils.properties) as
    root_wbs_id   number := 0;
    pproj_id      number := 0;
    dest_wbs_id   number := 0;
    copy_bit      varchar2(30) := NULL;
    ppfolio_id    number := 0;
    psession_id   number := 0;
    prepl_proj_id number := 0;
    pscenario_id  number := 0;
    base_proj_id  number := 0;
    cproj_id      number := 0;
    pret_val      number;
    pret_msg      varchar2(2000);
    vret          number;
    vmsg          varchar2(2000);
    proj_list     varchar2(32767);
    new_proj_list varchar2(32767);
    proj_baseline varchar2(5);
    copy_by_wbs_exception exception;
    taskpred_copy_exception exception;
  begin
    vtask_count := 0;
    vproj_count := 0;
    utils.util_getstrvalue(prop, 'proj_list', proj_list);
    utils.util_setlist(proj_list);
    while (cproj_id > -1) loop
      cproj_id := utils.util_getnextlistval;
      if (cproj_id = -1) then
        exit;
      end if;
      utils.util_getintvalue(prop, 'dest_wbs_id', dest_wbs_id);
      utils.util_getstrvalue(prop, 'copy_bit', copy_bit);
      utils.util_getintvalue(prop, 'ppfolio_id', ppfolio_id);
      utils.util_getintvalue(prop, 'psession_id', psession_id);
      utils.util_getintvalue(prop, 'prepl_proj_id', prepl_proj_id);
      utils.util_getintvalue(prop, 'base_proj_id', base_proj_id);
      if base_proj_id <> 0 then
        utils.util_getintvalue(prop, 'src_proj_id', vsource_proj_id);
        utils.util_getintvalue(prop, 'dest_proj_id', vdest_proj_id);
        utils.util_getintvalue(prop, 'dest_wbs_id', vdest_wbs_id);
        utils.util_getstrvalue(prop, 'is_project_baseline', proj_baseline);
        if upper(proj_baseline) = 'TRUE' then
          b_is_proj_baseline := TRUE;
        else
          b_is_proj_baseline := FALSE;
        end if;
        cproj_id := base_proj_id;
      end if;
      begin
        select wbs_id
          into root_wbs_id
          from projwbs
         where proj_id = cproj_id
           and proj_node_flag = 'Y'
           and delete_session_id is null;
      exception
        when no_data_found then
          pret_val := -1;
          pret_msg := 'Proj id: ' || base_proj_id || ' does not exist';
          rollback;
        when others then
          pret_val := -1;
          pret_msg := copy_utils.fset_error_msg('General error in COPY',
                                                SQLERRM,
                                                gerror_msg);
          rollback;
      end;
    
      if prepl_proj_id = 0 then
        prepl_proj_id := NULL;
      end if;
      copy_by_wbs(root_wbs_id,
                  dest_wbs_id,
                  copy_bit,
                  pret_val,
                  pret_msg,
                  ppfolio_id,
                  psession_id,
                  prepl_proj_id);
      if pret_val < 0 then
        Raise copy_by_wbs_exception;
      end if;
      utils.util_setproperties('pret_val', to_char(pret_val));
      utils.util_setproperties('pret_msg', pret_msg);
      if new_proj_list is null then
        new_proj_list := trim(to_char(pret_val));
      else
        new_proj_list := new_proj_list || ',' || trim(to_char(pret_val));
      end if;
      if b_scenario_baseline then
        utils.util_getintvalue(prop, 'pscenario_id', pscenario_id);
        insert into scenproj
          (scenario_id, proj_id)
        values
          (pscenario_id, pret_val);
      end if;
    end loop;
    utils.util_setproperties('new_proj_list', new_proj_list);
    if b_baseline_copy then 
       b_is_baseline_create :=TRUE;
    end if;
    task_copy_pkg.taskpred_copy(vtpredcpy_seq,
                                b_taskpred_only_copied,
                                b_is_baseline_create,
                                vret,
                                vmsg);
    if vret <> 0 then
      pret_val := -1;
      pret_msg := vmsg;
      Raise taskpred_copy_exception;
    end if;
  
    -- Counts
    dbms_output.put_line('Summary Counts');
    dbms_output.put_line('Projects Created: ' || vproj_count);
    dbms_output.put_line('Tasks Created:    ' || vtask_count);
    begin
      delete from pkxref
       where system_id = vtpredcpy_seq
         and context_name = 'T';
    exception
      when others then
        pret_val := -1;
        pret_msg := 'Error deleting rows from PKXREF for system_id ' ||
                    to_char(vtpredcpy_seq);
        rollback;
        return;
    end;
    --end if;
  exception
    when copy_by_wbs_exception then
      utils.util_setproperties('pret_val', to_char(pret_val));
      utils.util_setproperties('pret_msg', pret_msg);
    when taskpred_copy_exception then
      utils.util_setproperties('pret_val', to_char(pret_val));
      utils.util_setproperties('pret_msg', pret_msg);
  end;

  procedure copy_by_wbs(pwbs_id       NUMBER,
                        dest_wbs_id   number,
                        copy_bit      varchar2,
                        pret_val      OUT number,
                        pret_msg      OUT varchar2,
                        ppfolio_id    IN number DEFAULT null,
                        psession_id   IN number DEFAULT null,
                        prepl_proj_id number default null) as
    vproj_id       number;
    vdest_wbs_id   number;
    vret           number;
    vmsg           varchar2(4000);
    vparent_wbs_id number;
  begin
    gerror_msg := null;
  
    -- Do some init
    vlog_seq := 0;
  
    DocID.DELETE;
    DocIDidx := 0;
    threshid.DELETE;
    threshIDidx := 0;
  
    select USERENV('SESSIONID') into vtpredcpy_seq from dual;
  
    begin
      delete from pkxref
       where system_id = vtpredcpy_seq
         and (context_name = 'TASKSUMID' or context_name = 'TRSRCSUMID');
    exception
      when others then
        pret_val := -1;
        pret_msg := 'Error deleting rows from PKXREF for system_id ' ||
                    to_char(vtpredcpy_seq);
        rollback;
        return;
    end;
  
    begin
      select proj_id, parent_wbs_id
        into vproj_id, vparent_wbs_id
        from projwbs
       where wbs_id = pwbs_id
         and proj_node_flag = 'Y'
         and delete_session_id is null;
    exception
      when no_data_found then
        pret_val := -1;
        pret_msg := copy_utils.fset_error_msg('Error in COPY. No proj_id found for wbs ' ||
                                              to_char(pwbs_id),
                                              SQLERRM,
                                              gerror_msg);
        rollback;
        return;
      when others then
        pret_val := -1;
        pret_msg := copy_utils.fset_error_msg('Error in COPY',
                                              SQLERRM,
                                              gerror_msg);
        rollback;
        return;
    end;
  
    dbms_output.put_line('parent: ' || to_char(vparent_wbs_id));
    parse_copy_bit(copy_bit);
  
    -- only allow copy of baseline if the PROJECT_FLAG = 'Y' for source proj_id
    if b_baseline_copy and not b_scenario_baseline then
    
      begin
        select proj_id,orig_proj_id
          into vproj_id,baseline_orig_proj_id
          from project
         where proj_id = vproj_id
           and project_flag = 'Y'
           and delete_session_id is null;
      exception
        when no_data_found then
          pret_val := -1;
          pret_msg := copy_utils.fset_error_msg('Cannot copy baseline from an EPS Node. ',
                                                SQLERRM,
                                                gerror_msg);
          rollback;
          return;
        when others then
          pret_val := -1;
          pret_msg := copy_utils.fset_error_msg('Error in COPY',
                                                SQLERRM,
                                                gerror_msg);
          rollback;
          return;
      end;
    end if;
  
    -- Change dest_wbs_id if it is a PROJECT node
    begin
      select pw.parent_wbs_id
        into vdest_wbs_id
        from project p, projwbs pw
       where p.proj_id = pw.proj_id
         and pw.wbs_id = dest_wbs_id
         and project_flag = 'Y'
         and pw.delete_session_id is null;
    exception
      when no_data_found then
        if b_scenario_baseline then
          vdest_wbs_id := vparent_wbs_id;
        else
          vdest_wbs_id := dest_wbs_id;
        end if;
      when others then
        pret_val := -1;
        pret_msg := copy_utils.fset_error_msg('Error in COPY',
                                              SQLERRM,
                                              gerror_msg);
        rollback;
        return;
    end;
  
    -- TODO : Do Suffix logic for each project
    g_proj_suffix := '-1';
    g_proj_id_ret := null;
    -- Set the max wbs to prevent infinite recursion
    select max(wbs_id) into vmax_wbs_id from projwbs;
  
    -- for portfolio
    if ppfolio_id is not null then
      begin
        select pfolio_id
          into gpfolio_id
          from pfolio
         where pfolio_id = ppfolio_id
           and delete_session_id is null;
      exception
        when no_data_found then
          gpfolio_id := null;
      end;
    else
      gpfolio_id := null;
    end if;
  
    -- Get user if session_id is provided
    if psession_id is not null then
      begin
        select user_name
          into guser_name
          from users u, usession us
         where u.user_id = us.user_id
           and us.session_id = psession_id
           and u.delete_session_id is null;
      exception
        when no_data_found then
          guser_name := 'system';
        when others then
          pret_val := -1;
          pret_msg := copy_utils.fset_error_msg('Error in COPY finding USER_NAME',
                                                SQLERRM,
                                                gerror_msg);
          rollback;
          return;
      end;
      v_session_id := psession_id;
    else
      guser_name   := 'system';
      v_session_id := 0;
    end if;
  
    vret := process_level(pwbs_id,
                          vdest_wbs_id,
                          0,
                          vdest_wbs_id,
                          vproj_id,
                          prepl_proj_id);
  
    if vret <> 0 then
      dbms_output.put_line('process level fail');
      pret_val := -1;
      pret_msg := gerror_msg;
      rollback;
      return;
    end if;
    pret_val := g_proj_id_ret;
    pret_msg := 'Projects: ' || vproj_count || ' Tasks: ' || vtask_count;
  
  exception
    when others then
      pret_val := -1;
      pret_msg := copy_utils.fset_error_msg('General error in COPY',
                                            SQLERRM,
                                            gerror_msg);
      rollback;
      return;
  end;

  function process_level(pwbs_id            NUMBER,
                         pparent_wbs_id     NUMBER,
                         plevel             NUMBER,
                         pnew_parent_wbs_id IN OUT NUMBER,
                         pnew_proj_id       NUMBER,
                         prepl_proj_id      number default null)
    return number as
    cursor mywbs is
      select wbs_id
        from projwbs
       where parent_wbs_id = pwbs_id
         and wbs_id <= vmax_wbs_id
         and delete_session_id is null;
  
    cursor cal(pold_proj_id number) is
      select clndr_id
        from calendar
       where proj_id = pold_proj_id
         and delete_session_id is null
       order by clndr_id;
  
    cursor pissue(pold_proj_id number) is
      select issue_id, thresh_id
        from projissu
       where proj_id = pold_proj_id
         and delete_session_id is null
       order by issue_id;
  
    vpflag        char(1); -- project flag
    vproj_id      number;
    v_new_proj_id number;
    vnode_flag    char(1);
    vLevel        number;
    vNew_wbs_id   number;
    vWBS_NAME     projwbs.wbs_name%type;
  
    vtext                varchar2(100);
    vret                 number;
    vorig_proj_id        number;
    vid                  number;
    vcnt                 number;
    vprojwbs_status_code varchar2(20);
    vwbs_max_sum_level   number;
    vrecurse_tree        boolean;
  begin
    vLevel      := plevel + 1;
    vNew_wbs_id := 0;
    select p.project_flag,
           p.proj_id,
           wbs_name,
           pw.proj_node_flag,
           p.orig_proj_id,
           pw.status_code,
           wbs_max_sum_level
      into vpflag,
           vproj_id,
           vWBS_NAME,
           vnode_flag,
           vorig_proj_id,
           vprojwbs_status_code,
           vwbs_max_sum_level
      from project p, projwbs pw
     where p.proj_id = pw.proj_id
       and pw.wbs_id = pwbs_id;
  
    if vwbs_max_sum_level <> 0 and b_scenario_baseline and
       vlevel > vwbs_max_sum_level then
      return 0;
    end if;
  
    -- bail out if it is a baseline and baseline copy bit not set
    if vorig_proj_id is not null and not b_is_baseline_create and not b_baseline_copy then
      return 0;
    end if;
  
    -- Exit if this is a project node and the project is not in the pfolio
    -- 6-Oct-2003 - Should be a proj_node in WBS
    if gpfolio_id is not null and vpflag = 'Y' and vnode_flag = 'Y' then
      select count(*)
        into vcnt
        from prpfolio
       where pfolio_id = gpfolio_id
         and wbs_id = pwbs_id
         and delete_session_id is null;
      if vcnt = 0 then
        return 0;
      end if;
    end if;
  
    -- Exit if not copying requested and this is a requested project
    if not b_requested_copy and vprojwbs_status_code = 'WS_Requested' then
      return 0;
    end if;
  
    if vnode_flag = 'Y' then
      -- Insert a new project
      v_new_proj_id := new_project(vproj_id, prepl_proj_id);
      if NOT v_new_proj_id > 0 then
        copy_utils.set_error_msg('Error creating new Project',
                                 null,
                                 gerror_msg);
        return - 1;
      end if;
      vNew_wbs_id := new_wbs(pwbs_id,
                             v_new_proj_id,
                             pnew_parent_wbs_id,
                             vpflag,
                             prepl_proj_id);
      if NOT vNew_wbs_id > 0 then
        copy_utils.set_error_msg('Error creating new wbs',
                                 null,
                                 gerror_msg);
        return - 1;
      end if;
    
      if NOT b_is_baseline_create then
        select count(1)
          into vcnt
          from tprojmap
         where source_proj_id = vproj_id
           and session_id = v_session_id;
        if vcnt = 0 then
          insert into tprojmap
          values
            (v_session_id, 1, vproj_id, v_new_proj_id, vNew_wbs_id);
          dbms_output.put_line('projectmap :' || 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 = v_session_id;
        end if;
      end if;
      -- Add to portfolio if exists
      if gpfolio_id is not null and vpflag = 'Y' then
        insert into prpfolio
          (pfolio_id, wbs_id)
        values
          (gpfolio_id, vnew_wbs_id);
      end if;
      vproj_count := vproj_count + 1;
    else
      v_new_proj_id := pnew_proj_id;
      vNew_wbs_id   := new_wbs(pwbs_id,
                               v_new_proj_id,
                               pnew_parent_wbs_id,
                               vpflag);
      if NOT vNew_wbs_id > 0 then
        copy_utils.set_error_msg('Error creating new wbs',
                                 null,
                                 gerror_msg);
        return - 1;
      end if;
    end if;
  
    -- set g_proj_id_ret
    if g_proj_id_ret is null then
      g_proj_id_ret := v_new_proj_id;
    end if;
  
    if b_scenario_baseline and vpflag = 'N' then
      vrecurse_tree := false;
    else
      vrecurse_tree := true;
    end if;
  
    if vrecurse_tree then
      for mywbs_rec in mywbs loop
        vret := process_level(mywbs_rec.wbs_id,
                              pwbs_id,
                              vLevel,
                              vNew_wbs_id,
                              v_new_proj_id);
        if vret <> 0 then
          return vret;
        end if;
      end loop;
    end if;
    if vnode_flag = 'Y' then
      vret := new_project_codes(vproj_id, v_new_proj_id);
      if vret <> 0 then
        copy_utils.set_error_msg('Error creating new project codes',
                                 null,
                                 gerror_msg);
        return vret;
      end if;
      vtext := 'Prjs=' || vproj_count || ' tsks=' || vtask_count;
    
      --fix issues
      for pi_rec in pissue(v_new_proj_id) LOOP
        vid := null;
        for i in 1 .. threshIDidx loop
          if pi_rec.thresh_id = threshID(i).old_thresh_id then
            vid := threshID(i).new_thresh_id;
          end if;
        end loop;
      
        update projissu
           set thresh_id = vid
         where issue_id = pi_rec.issue_id;
      end loop;
    
      -- copy project level calendars and
      -- update the tasks with the new clndr_id
      for cal_rec in cal(vproj_id) LOOP
        vid := copy_utils.Get_Next_Key('calendar_clndr_id');
        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 = cal_rec.clndr_id;
        -- Update new tasks with CLNDR_ID
        update task
           set clndr_id = vid
         where clndr_id = cal_rec.clndr_id
           and proj_id = v_new_proj_id;
        -- Bug AGu4D4C
        update project
           set clndr_id = vid
         where clndr_id = cal_rec.clndr_id
           and proj_id = v_new_proj_id;
      end loop;
    
    end if;
  
    return 0;
  
  exception
    when others then
      copy_utils.set_error_msg('General error in PROCESS_LEVEL',
                               SQLERRM,
                               gerror_msg);
      return - 1;
  end;

  function new_wbs(pold_wbs_id    number,
                   pproj_id       number,
                   pparent_wbs_id IN OUT number,
                   pproject_flag  varchar2,
                   prepl_proj_id  number default null) return number -- new wbs
   as
    cursor pr is
      select risk_id
        from projrisk
       where wbs_id = pold_wbs_id
         and delete_session_id is null
       order by risk_id;
  
    cursor pi is
      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;
  
    cursor pt is
      select thresh_id
        from projthrs
       where wbs_id = pold_wbs_id
         and delete_session_id is null
       order by thresh_id;
  
    cursor wm is
      select wbs_memo_id, memo_type_id, wbs_memo
        from wbsmemo
       where wbs_id = pold_wbs_id
         and delete_session_id is null
       order by wbs_memo_id;
  
    cursor ws is
      select wbs_step_id, seq_num, complete_flag, step_name, step_wt
        from wbsstep
       where wbs_id = pold_wbs_id
         and delete_session_id is null
       order by wbs_step_id;
  
    cursor td is
      select taskdoc_id, doc_id, wp_flag
        from taskdoc
       where wbs_id = pold_wbs_id
         and task_id is null
         and delete_session_id is null
       order by taskdoc_id;
  
    -- TO_DO: chng_descr is becoming varchar2(130)...
  
    cursor bc is
      select budg_chng_id,
             chng_date,
             chng_short_name,
             chng_cost,
             chng_by_name,
             status_code,
             chng_descr
        from budgchng
       where wbs_id = pold_wbs_id
         and delete_session_id is null
       order by budg_chng_id;
  
    cursor wb is
      select wbs_budg_id, start_date, spend_cost, benefit_cost
        from wbsbudg
       where wbs_id = pold_wbs_id
         and delete_session_id is null
       order by wbs_budg_id;
  
    cursor ts is
      select task_sum_id
        from tasksum
       where wbs_id = pold_wbs_id
         and delete_session_id is null
       order by task_sum_id;
  
    cursor tsf is
      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;
  
    cursor wr is
      select wbsrsrc_id,
             rsrc_id,
             role_id,
             committed_flag,
             start_date,
             end_date,
             auto_compute_dates_flag,
             rsrc_request_data
        from wbsrsrc
       where wbs_id = pold_wbs_id
         and delete_session_id is null
       order by wbsrsrc_id;
  
    v_new_wbs_id number;
    vcnt         number;
    --    vcnt_tr   number;
    vid           number;
    vret          number;
    new_doc_id    number;
    new_thresh_id number;
    vmsg          varchar2(4000);
  
    v_bl_flag            char(1);
    vnew_proj_short_name varchar2(40 CHAR);
    vnew_wbs_name        varchar2(100 CHAR);
    vSuffix              varchar2(10);
    vNodeFlag            char(1);
  begin
  
    select proj_short_name
      into vnew_proj_short_name
      from project
     where proj_id = pproj_id;
    select wbs_name
      into vnew_wbs_name
      from projwbs
     where wbs_id = pold_wbs_id;
  
    if prepl_proj_id is null then
    
      v_new_wbs_id := copy_utils.Get_Next_Key('projwbs_wbs_id');
    
      if b_scenario_baseline then
        select wbs_short_name, proj_node_flag
          into vnew_proj_short_name, vNodeFlag
          from projwbs
         where wbs_id = pold_wbs_id;
      elsif b_baseline_copy then
        v_bl_flag := 'Y';
	if baseline_orig_proj_id is not null then
          vnew_wbs_name := nvl(substr(vnew_wbs_name, 1, instr(vnew_wbs_name, ' - B', -1) - 1), vnew_wbs_name);
        end if;
        vSuffix   := substr(vnew_proj_short_name,
                            instr(vnew_proj_short_name, ' - B', -1),
                            length(vnew_proj_short_name));
        if length(vnew_wbs_name || vSuffix) > 100 then
          vnew_wbs_name := substr(vnew_wbs_name,
                                  1,
                                  length(vnew_wbs_name) - length(vSuffix)) ||
                           vsuffix;
        else
          vnew_wbs_name := vnew_wbs_name || vsuffix;
        end if;
      
      elsif b_is_baseline_create then
        v_bl_flag := 'Y';
        vSuffix   := substr(vnew_proj_short_name,
                            instr(vnew_proj_short_name, ' - B', -1),
                            length(vnew_proj_short_name));
        -- if length(b_wbs_name || vSuffix) > 100 then
        --   vnew_wbs_name := substr(b_wbs_name,
        --                           1,
        --                          length(b_wbs_name) - length(vSuffix)) ||
        --                    vsuffix;
        -- else
        vnew_wbs_name := b_wbs_name;
        -- end if;
      else
        v_bl_flag := 'N';
      end if;
      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,
               decode(proj_node_flag,
                      'Y',
                      vnew_proj_short_name,
                      wbs_short_name),
               decode(v_bl_flag,
                      'Y',
                      decode(proj_node_flag, 'Y', vnew_wbs_name, wbs_name),
                      WBS_NAME),
               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,
               guid.get_guid(),
               TMPL_GUID,
               ORIGINAL_QTY
          from projwbs
         where wbs_id = pold_wbs_id;
    else
      select wbs_id
        into v_new_wbs_id
        from projwbs
       where proj_id = prepl_proj_id
         and proj_node_flag = 'Y';
    
      UPDATE PROJWBS
         SET (seq_num, est_wt, proj_node_flag, sum_data_flag, status_code, phase_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, tmpl_guid, original_qty, rqmt_rem_qty) = (SELECT seq_num,
                                                                                                                                                                                                                                                                                                                                                                                est_wt,
                                                                                                                                                                                                                                                                                                                                                                                proj_node_flag,
                                                                                                                                                                                                                                                                                                                                                                                sum_data_flag,
                                                                                                                                                                                                                                                                                                                                                                                status_code,
                                                                                                                                                                                                                                                                                                                                                                                phase_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,
                                                                                                                                                                                                                                                                                                                                                                                tmpl_guid,
                                                                                                                                                                                                                                                                                                                                                                                original_qty,
                                                                                                                                                                                                                                                                                                                                                                                rqmt_rem_qty
                                                                                                                                                                                                                                                                                                                                                                           FROM projwbs
                                                                                                                                                                                                                                                                                                                                                                          WHERE wbs_id =
                                                                                                                                                                                                                                                                                                                                                                                pold_wbs_id)
       WHERE wbs_id = v_new_wbs_id;
    
    end if;
  
    if b_scenario_baseline then
      update projwbs set phase_id = null where wbs_id = v_new_wbs_id;
    end if;
  
    if b_projrisk then
      for pr_rec in pr loop
        vid := copy_utils.Get_Next_Key('projrisk_risk_id');
        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 = pr_rec.risk_id;
      
        -- 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 = pr_rec.risk_id
             and delete_session_id is null;
      
        copy_utils.insert_udf('projrisk', pr_rec.risk_id, vid, pproj_id);
      end loop;
    end if;
    if b_projissu then
      for pi_rec in pi loop
        vid := copy_utils.Get_Next_Key('projissu_issue_id');
        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,
                 null,
                 ISSUE_VALUE,
                 LO_PARM_VALUE,
                 HI_PARM_VALUE,
                 ADD_BY_NAME,
                 RESOLV_DATE,
                 ADD_DATE,
                 ISSUE_NOTES
            from projissu
           where issue_id = pi_rec.issue_id;
      
        insert into issuhist
          (issue_id, proj_id, issue_history)
          select vid, pproj_id, issue_history
            from issuhist
           where issue_id = pi_rec.issue_id
             and delete_session_id is null;
      
        copy_utils.insert_udf('projissu', pi_rec.issue_id, vid, pproj_id);
      end loop;
    end if;
  
    if b_projthrs then
      for pt_rec in pt LOOP
        vid := copy_utils.Get_Next_Key('projthrs_thresh_id');
        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 = pt_rec.thresh_id;
        threshIDidx := threshIDidx + 1;
        threshID(threshiDidx).old_thresh_id := pt_rec.thresh_id;
        threshID(threshIDidx).new_thresh_id := vid;
        new_thresh_id := get_new_thresh_id(pt_rec.thresh_id);
      end loop;
    end if;
  
    if b_wbsmemo then
      for wm_rec in wm LOOP
        vid := copy_utils.Get_Next_Key('wbsmemo_wbs_memo_id');
        insert into wbsmemo
          (WBS_MEMO_ID, PROJ_ID, WBS_ID, MEMO_TYPE_ID, WBS_MEMO)
        values
          (vid,
           pproj_id,
           v_new_wbs_id,
           wm_rec.memo_type_id,
           wm_rec.wbs_memo);
        -- Attempt to get long and update
      end loop;
    end if;
  
    if b_wbsstep then
      for ws_rec in ws LOOP
        vid := copy_utils.Get_Next_Key('wbsstep_wbs_step_id');
        insert into wbsstep
          (WBS_STEP_ID,
           PROJ_ID,
           WBS_ID,
           SEQ_NUM,
           COMPLETE_FLAG,
           STEP_NAME,
           STEP_WT)
        values
          (vid,
           pproj_id,
           v_new_wbs_id,
           ws_rec.seq_num,
           ws_rec.complete_flag,
           ws_rec.step_name,
           ws_rec.step_wt);
      end loop;
    end if;
  
    if b_taskdoc then
      for td_rec in td LOOP
        vid        := copy_utils.Get_Next_Key('taskdoc_taskdoc_id');
        new_doc_id := get_new_doc_id(td_rec.doc_id);
        if new_doc_id > 0 then
          insert into taskdoc
            (TASKDOC_ID, DOC_ID, PROJ_ID, WBS_ID, WP_FLAG, TASK_ID)
          values
            (vid, new_doc_id, pproj_id, v_new_wbs_id, td_rec.wp_flag, null);
        end if;
      end loop;
    end if;
  
    -- These copies are always done for a project copy:WBSBUDG,BUDGCHNG
    for bc_rec in bc LOOP
      vid := copy_utils.Get_Next_Key('budgchng_budg_chng_id');
      insert into budgchng
        (BUDG_CHNG_ID,
         PROJ_ID,
         WBS_ID,
         CHNG_DATE,
         CHNG_SHORT_NAME,
         CHNG_COST,
         CHNG_BY_NAME,
         STATUS_CODE,
         chng_descr)
      values
        (vid,
         pproj_id,
         v_new_wbs_id,
         bc_rec.chng_date,
         bc_rec.chng_short_name,
         bc_rec.chng_cost,
         bc_rec.chng_by_name,
         bc_rec.status_code,
         bc_rec.chng_descr);
    end loop;
    for wb_rec in wb LOOP
      vid := copy_utils.Get_Next_Key('wbsbudg_wbs_budg_id');
      insert into wbsbudg
        (WBS_BUDG_ID,
         PROJ_ID,
         WBS_ID,
         START_DATE,
         SPEND_COST,
         BENEFIT_COST)
      values
        (vid,
         pproj_id,
         v_new_wbs_id,
         wb_rec.start_date,
         wb_rec.spend_cost,
         wb_rec.benefit_cost);
    end loop;
  
    if b_wbsrsrc_copy then
      for wr_rec in wr LOOP
        vid := copy_utils.Get_Next_Key('wbsrsrc_wbsrsrc_id');
        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)
        values
          (vid,
           v_new_wbs_id,
           wr_rec.rsrc_id,
           wr_rec.role_id,
           pproj_id,
           wr_rec.COMMITTED_FLAG,
           wr_rec.start_date,
           wr_rec.end_date,
           wr_rec.AUTO_COMPUTE_DATES_FLAG,
           wr_rec.RSRC_REQUEST_DATA);
      
        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 = wr_rec.wbsrsrc_id;
      end loop;
    end if;
  
    if pproject_flag = 'Y' and b_task then
      --  Insert the tasks !!!!!
      task_copy_pkg.Set_doc_id(DocID, vret);
    
      -- Use task copy package
      task_copy_pkg.by_wbs(pproj_id,
                           v_new_wbs_id,
                           pold_wbs_id,
                           gtask_copy_bit,
                           vtpredcpy_seq, -- work id
                           'N',
                           vret,
                           vmsg);
      if vret < 0 then
        copy_utils.set_error_msg(vmsg, null, gerror_msg);
        copy_utils.set_error_msg('Unable to copy tasks in NEW_WBS',
                                 null,
                                 gerror_msg);
        return - 1;
      end if;
      vtask_count := vtask_count + vret;
    
    end if;
    if b_tasksum or b_scenario_baseline then
      for ts_rec in ts loop
        vid := copy_utils.Get_Next_Key('tasksum_task_sum_id');
        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,
           SPREAD_DATA,
           BASE_MAT_COST,
           REMAIN_MAT_COST,
           ACT_MAT_COST,
           ACT_THIS_PER_MAT_COST)
          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,
                 SPREAD_DATA,
                 BASE_MAT_COST,
                 REMAIN_MAT_COST,
                 ACT_MAT_COST,
                 ACT_THIS_PER_MAT_COST
            from tasksum
           where task_sum_id = ts_rec.task_sum_id;
        insert into pkxref
          (system_id, context_name, pk1, pk2)
        values
          (vtpredcpy_seq, 'TASKSUMID', ts_rec.task_sum_id, vid);
      end loop;
    
      --Copy tasksumfin
    
      for ts_rec in tsf loop
        vid := copy_utils.Get_Next_Key('tasksumfin_task_sum_fin_id');
        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,
                 pkxref.pk2,
                 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, pkxref
           where task_sum_fin_id = ts_rec.task_sum_fin_id
             and pkxref.system_id = vtpredcpy_seq
             and pkxref.context_name = 'TASKSUMID'
             and pkxref.pk1 = tf.task_sum_id;
      end loop;
    end if;
  
    -- Copy UDF
    copy_utils.insert_udf('projwbs', pold_wbs_id, v_new_wbs_id, pproj_id);
  
    return v_new_wbs_id;
  
  exception
    when others then
      copy_utils.set_error_msg('General error in NEW_WBS',
                               SQLERRM,
                               gerror_msg);
      return - 1;
  end;

  function new_project(pold_proj_id  number,
                       prepl_proj_id number default null) return number -- new project ID
   as
    cursor pi is
      select issue_id
        from projissu
       where proj_id = pold_proj_id
         and delete_session_id is null
       order by issue_id;
  
    cursor pt is
      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;
  
    cursor doc(pdocid number) is
      select doc_id, parent_doc_id
        from document
       where proj_id = pdocid
         and DOC_MGMT_TYPE = 'DM_Local'
         and delete_session_id is null
       order by doc_id;
  
    cursor pf is
      select proj_fund_id, fund_id, fund_cost, fund_wt
        from projfund
       where proj_id = pold_proj_id
         and delete_session_id is null
       order by proj_fund_id;
  
    cursor rpt is
      select rpt_id
        from rpt
       where proj_id = pold_proj_id
         and delete_session_id is null
       order by rpt_id;
  
    cursor trs is
      select taskrsrc_sum_id
        from trsrcsum
       where proj_id = pold_proj_id
         and delete_session_id is null
       order by taskrsrc_sum_id;
  
    cursor trsf is
      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;
  
    cursor layout is
      select view_id
        from viewprop
       where proj_id = pold_proj_id
         and delete_session_id is null
       order by view_id;

   -- cursor prprop is
   --  select proj_id, prop_name
   --    from projprop
   --   where proj_id = pold_proj_id
   --    and delete_session_id is null
   --   order by proj_id;
    
    v_new_proj_id        number;
    vid                  number;
    v_orig_proj_id       number;
    vnew_proj_short_name varchar2(40 CHAR);
    new_thresh_id        number;
    vret                 number;
    

    
   begin
    -- If creation of baseline then make the orig_proj_id the old proj_id
    -- any project with orig_proj_id not null should never get here, so
    -- set to null otherwise.
  
    if prepl_proj_id is null then
      v_new_proj_id := copy_utils.Get_Next_Key('project_proj_id');
    
      if b_scenario_baseline then
        v_orig_proj_id       := v_new_proj_id;
        vnew_proj_short_name := new_proj_short_name(pold_proj_id,
                                                    true,
                                                    ' - S');
      elsif b_baseline_copy then
	if baseline_orig_proj_id is not null then
           v_orig_proj_id       := baseline_orig_proj_id;
	else
           v_orig_proj_id       := pold_proj_id;
	end if;
        vnew_proj_short_name := new_proj_short_name(pold_proj_id, true);
        --change to assign baseline to new project
      elsif b_is_baseline_create then
        v_orig_proj_id := vdest_proj_id;
        select wbs_name
          into b_wbs_name
          from projwbs
         where proj_id = pold_proj_id
           and proj_node_flag = 'Y'
           and delete_session_id is null;
        vnew_proj_short_name := new_proj_short_name(v_orig_proj_id, true);
      else
        v_orig_proj_id       := null;
        vnew_proj_short_name := new_proj_short_name(pold_proj_id, false);
      end if;
    
      begin
        select proj_id
          into vid
          from project
         where proj_id = pold_proj_id
           and proj_short_name = vnew_proj_short_name
           and delete_session_id is null
           and rownum = 1;
        copy_utils.set_error_msg('Generated duplicate project short name.',
                                 SQLERRM,
                                 gerror_msg);
      
        return - 1;
      exception
        when no_data_found then
          null;
      end;
      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,
               sysdate,
               SUM_DATA_DATE,
               LAST_TASKSUM_DATE,
               FCST_START_DATE,
               DEF_DURATION_TYPE,
               TASK_CODE_PREFIX,
               guid.get_guid(),
               DEF_QTY_TYPE,
               guser_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,
               null LAST_BASELINE_UPDATE_DATE,
               TS_RSRC_MARK_ACT_FINISH_FLAG,
               TS_RSRC_VW_INACT_ACTV_FLAG
          from project
         where proj_id = pold_proj_id;
    else
      v_new_proj_id := prepl_proj_id;
    
      UPDATE PROJECT
         SET (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, acct_id, base_type_id, clndr_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, sum_data_date, last_tasksum_date, fcst_start_date, def_duration_type, task_code_prefix, def_qty_type, 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, checkout_date, checkout_user_id, sum_assign_level, last_fin_dates_id, use_project_baseline_flag, ts_rsrc_vw_compl_asgn_flag, ts_rsrc_mark_act_finish_flag, ts_rsrc_vw_inact_actv_flag) = (SELECT 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,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            acct_id,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            base_type_id,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            clndr_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,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            sum_data_date,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            last_tasksum_date,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            fcst_start_date,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            def_duration_type,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            task_code_prefix,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            def_qty_type,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            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,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            checkout_date,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            checkout_user_id,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            sum_assign_level,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            last_fin_dates_id,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            use_project_baseline_flag,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ts_rsrc_vw_compl_asgn_flag,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ts_rsrc_mark_act_finish_flag,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ts_rsrc_vw_inact_actv_flag
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       FROM project
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WHERE proj_id =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            pold_proj_id)
       WHERE proj_id = v_new_proj_id;
    
    end if;
  
    if b_scenario_baseline then
      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;
    end if;
  
    if b_baseline_copy  and baseline_orig_proj_id is null then
      update project
         set last_baseline_update_date = sysdate
       where proj_id = v_new_proj_id;
    end if;
    if b_is_baseline_create then
      update project
         set last_baseline_update_date = sysdate
       where proj_id = v_new_proj_id;
    end if;
    if b_is_proj_baseline then
      update project
         set sum_base_proj_id = v_new_proj_id
       where proj_id = vdest_proj_id;
    end if;
    if b_document then
      for doc_rec in doc(pold_proj_id) LOOP
        vid := copy_utils.Get_Next_Key('document_doc_id');
        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,
                 guid.get_guid(),
                 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 = doc_rec.doc_id;
      
        DocIDidx := DocIDidx + 1;
        DocID(DocIDidx).old_doc_id := doc_rec.doc_id;
        DocID(DocIDidx).new_doc_id := vid;
      
        copy_utils.insert_udf('document',
                              doc_rec.doc_id,
                              vid,
                              v_new_proj_id);
      
      end loop;
    
      -- Re-establish Hierachy.
    
      for doc_rec in doc(v_new_proj_id) LOOP
        vid := null;
        for i in 1 .. DocIDidx loop
          if doc_rec.parent_doc_id = DocID(i).old_doc_id then
            vid := DocID(i).new_doc_id;
          end if;
        end loop;
      
        update document
           set parent_doc_id = vid
         where doc_id = doc_rec.doc_id;
      end loop;
    
    end if;
  
    if b_projthrs then
      for pt_rec in pt LOOP
        vid := copy_utils.Get_Next_Key('projthrs_thresh_id');
        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 = pt_rec.thresh_id;
        threshIDidx := threshIDidx + 1;
        threshID(threshiDidx).old_thresh_id := pt_rec.thresh_id;
        threshID(threshIDidx).new_thresh_id := vid;
        new_thresh_id := get_new_thresh_id(pt_rec.thresh_id);
      end loop;
    end if;
  
    if b_projfund then
      for pf_rec in pf loop
        vid := copy_utils.Get_Next_Key('projfund_proj_fund_id');
        insert into projfund
          (PROJ_FUND_ID, FUND_ID, PROJ_ID, FUND_COST, FUND_WT)
        values
          (vid,
           pf_rec.fund_id,
           v_new_proj_id,
           pf_rec.fund_cost,
           pf_rec.fund_wt);
      end loop;
    end if;
  
    if b_rpt then
      for rpt_rec in rpt loop
        vid := copy_utils.Get_Next_Key('rpt_rpt_id');
        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 = rpt_rec.rpt_id;
      end loop;
    end if;
  
    -- copy TRSRCSUM if we are copying TASKRSRC
  
    if b_trsrcsum or b_scenario_baseline then
      for trs_rec in trs loop
        vid := copy_utils.Get_Next_Key('trsrcsum_taskrsrc_sum_id');
        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 = trs_rec.taskrsrc_sum_id;
        insert into pkxref
          (system_id, context_name, pk1, pk2)
        values
          (vtpredcpy_seq, 'TRSRCSUMID', trs_rec.taskrsrc_sum_id, vid);
      end loop;
    
      --Copy trsrcsumfin 
      for trs_rec in trsf loop
        vid := copy_utils.Get_Next_Key('trsrcsumfn_trsrc_sum_fin_id');
        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,
                 pkxref.pk2,
                 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 trf, pkxref
           where trsrc_sum_fin_id = trs_rec.trsrc_sum_fin_id
             and pkxref.system_id = vtpredcpy_seq
             and pkxref.context_name = 'TRSRCSUMID'
             and pkxref.pk1 = trf.taskrsrc_sum_id;
      end loop;
    end if;
  
    if b_scenario_baseline then
      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;
    end if;

--copy project scheduler settings
     if not b_scenario_baseline then
        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;
     end if; 	  
  
    --copy project layouts
    for layout_rec in layout loop
      vid := copy_utils.Get_Next_Key('viewprop_view_id');
      insert into viewprop
        (view_id, view_name, proj_id, view_type, view_data)
        select vid, view_name, v_new_proj_id, view_type, view_data
          from viewprop
         where view_id = layout_rec.view_id;
    end loop;

    
  
    -- Copy UDF
    copy_utils.insert_udf('project',
                          pold_proj_id,
                          v_new_proj_id,
                          v_new_proj_id);
  
    return v_new_proj_id;
  
  exception
    when others then
      copy_utils.set_error_msg('General error in NEW_PROJECT',
                               SQLERRM,
                               gerror_msg);
      return - 1;
  end;

  function has_eps_code_access(pcode_wbs_id   IN number,
                               ptarget_wbs_id In number) return boolean as
    v_new_wbs_id number;
  begin
  
    if pcode_wbs_id = ptarget_wbs_id then
      return true;
    end if;
  
    begin
      select parent_wbs_id
        into v_new_wbs_id
        from projwbs
       where wbs_id = ptarget_wbs_id
         and parent_wbs_id is not null;
    exception
      when no_data_found then
        return false;
    end;
  
    return has_eps_code_access(pcode_wbs_id, v_new_wbs_id);
  end;

  function new_project_codes(pold_proj_id number, pnew_proj_id number)
    return number as
    CURSOR pcodes is
      select a.actv_code_type_id,
             a.actv_short_len,
             a.seq_num,
             a.actv_code_type,
             a.actv_code_type_scope,
             a.proj_id,
             a.super_flag
        from actvtype a
       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 a.actv_code_type_id,
             a.actv_short_len,
             a.seq_num,
             a.actv_code_type,
             a.actv_code_type_scope,
             a.proj_id,
             a.super_flag
        from actvtype a, taskactv ta
       where ta.proj_id = pnew_proj_id
         and a.actv_code_type_id = ta.actv_code_type_id
         and a.actv_code_type_scope = 'AS_EPS';
  
    v_new_actv_code_type_id number;
    vret                    number;
    vcreate_new_code        boolean;
    v_new_wbs_id            number;
    v_code_wbs_id           number;
    v_scope                 varchar2(10);
  begin
    for pcode_rec in pcodes loop
      vcreate_new_code := false;
    
      if pcode_rec.actv_code_type_scope = 'AS_Project' then
        vcreate_new_code := true;
        v_scope          := pcode_rec.actv_code_type_scope;
      else
        select wbs_id
          into v_new_wbs_id
          from projwbs
         where proj_id = pnew_proj_id
           and proj_node_flag = 'Y';
      
        select wbs_id
          into v_code_wbs_id
          from projwbs
         where proj_id = pcode_rec.proj_id
           and proj_node_flag = 'Y';
      
        vcreate_new_code := not
                             has_eps_code_access(v_code_wbs_id, v_new_wbs_id);
      
        v_scope := 'AS_Project';
      
      end if;
    
      if vcreate_new_code then
        v_new_actv_code_type_id := copy_utils.Get_Next_Key('actvtype_actv_code_type_id');
        insert into actvtype
          (ACTV_CODE_TYPE_ID,
           ACTV_SHORT_LEN,
           SEQ_NUM,
           ACTV_CODE_TYPE,
           PROJ_ID,
           SUPER_FLAG,
           ACTV_CODE_TYPE_SCOPE)
        values
          (v_new_actv_code_type_id,
           pcode_rec.actv_short_len,
           pcode_rec.seq_num,
           pcode_rec.actv_code_type,
           pnew_proj_id,
           pcode_rec.super_flag,
           v_scope);
      
        vret := new_actvcode(pcode_rec.actv_code_type_id,
                             null,
                             v_new_actv_code_type_id,
                             null,
                             pnew_proj_id);
        if vret <> 0 then
          return vret;
        end if;
      end if;
    end loop;
    return 0;
  exception
    when others then
      copy_utils.set_error_msg('General error in NEW_PROJECT_CODES',
                               SQLERRM,
                               gerror_msg);
      return - 1;
  end;

  function new_actvcode(pold_type_id number,
                        pold_code_id number,
                        pnew_type_id number,
                        pnew_code_id number,
                        pnew_proj_id number) return number as
    cursor acodes is
      select *
        from actvcode
       where actv_code_type_id = pold_type_id
         and nvl(parent_actv_code_id, -1) = nvl(pold_code_id, -1)
         and delete_session_id is null;
    v_new_actv_code_id number;
    vcnt               number;
  
    vret number;
  begin
    for acode_rec in acodes loop
      v_new_actv_code_id := copy_utils.Get_Next_Key('actvcode_actv_code_id');
      insert into actvcode
        (ACTV_CODE_ID,
         ACTV_CODE_TYPE_ID,
         SEQ_NUM,
         SHORT_NAME,
         PARENT_ACTV_CODE_ID,
         ACTV_CODE_NAME,
         COLOR)
      values
        (v_new_actv_code_id,
         pnew_type_id,
         acode_rec.seq_num,
         acode_rec.short_name,
         pnew_code_id,
         acode_rec.actv_code_name,
         acode_rec.color);
      vret := new_actvcode(pold_type_id,
                           acode_rec.actv_code_id,
                           pnew_type_id,
                           v_new_actv_code_id,
                           pnew_proj_id);
      if vret <> 0 then
        return vret;
      end if;
      update taskactv
         set actv_code_type_id = pnew_type_id,
             actv_code_id      = v_new_actv_code_id
      --      select count(*) into vcnt from taskactv
       where proj_id = pnew_proj_id
         and actv_code_type_id = pold_type_id
         and actv_code_id = ACODE_REC.ACTV_CODE_ID;
    
    end loop;
    return 0;
  exception
    when others then
      copy_utils.set_error_msg('General error in NEW_ACTVCODE',
                               SQLERRM,
                               gerror_msg);
      return - 1;
  end;

end; -- PROJECT_COPY_PKG BODY

MULTI_PROJECT_COPY
CREATE OR REPLACE PROCEDURE MULTI_PROJECT_COPY(PROJ_LIST     VARCHAR2,
                                               dest_wbs_id   number,
                                               copy_bit      varchar2,
                                               pret_val      OUT number,
                                               pret_msg      OUT varchar2,
                                               ppfolio_id    IN number DEFAULT null,
                                               psession_id   IN number DEFAULT null,
                                               prepl_proj_id number default null) as
  p utils.properties;
begin
  utils.util_initproperties;
  utils.util_setproperties('proj_list', PROJ_LIST);
  utils.util_setproperties('dest_wbs_id', dest_wbs_id);
  utils.util_setproperties('copy_bit', copy_bit);
  utils.util_setproperties('ppfolio_id', ppfolio_id);
  utils.util_setproperties('psession_id', psession_id);
  utils.util_setproperties('prepl_proj_id', prepl_proj_id);
  p := utils.util_getproperties;
  project_copy_pkg.copy(p);
  p := utils.util_getproperties;
  utils.util_getintvalue(p, 'pret_val', pret_val);
  utils.util_getstrvalue(p, 'pret_msg', pret_msg);
exception
  when others then
    raise;
end;

PROJECT_COPY
CREATE OR REPLACE PROCEDURE PROJECT_COPY(PPROJ_ID      NUMBER,
                                         dest_wbs_id   number,
                                         copy_bit      varchar2,
                                         pret_val      OUT number,
                                         pret_msg      OUT varchar2,
                                         ppfolio_id    IN number DEFAULT null,
                                         psession_id   IN number DEFAULT null,
                                         prepl_proj_id number default null) as
begin
  multi_project_copy(to_char(pproj_id),
                     dest_wbs_id,
                     copy_bit,
                     pret_val,
                     pret_msg,
                     ppfolio_id,
                     psession_id,
                     prepl_proj_id);
end;

TIME_APPROVAL_WBS
CREATE OR REPLACE PROCEDURE time_approval_wbs 
		( puser_id number, psession_id number, pcontext_id number,
		ppriv_num number, ret_val OUT number, pret_msg OUT varchar ) 
as
begin
  delete from upklist where session_id = psession_id
  and context_id = pcontext_id;

  insert into upklist (session_id, context_id, pk_id)
  select  distinct psession_id, pcontext_id ,wbs_id
  from projwbs
  where delete_session_id is null
  connect by prior wbs_id = parent_wbs_id
  start with obs_id in (select obs_id
  from userobs uo, profpriv pp
  where user_id = puser_id
  and pp.prof_id = uo.prof_id
  and pp.priv_num=ppriv_num
  and pp.allow_flag = 'Y');
end;

PV_WBS_ROOT_PROC_CAND
create or replace procedure pv_wbs_root_proc_cand
(puser_id number, pwbs_id number, pret_val OUT number)
as
  pwid  number;
  oid number;
  cnt binary_integer;
begin
  pret_val := 0;
  begin
    select parent_wbs_id , obs_id
    into pwid, oid
    from projwbs
    where wbs_id = pwbs_id
    and delete_session_id is null;
  exception 
    when no_data_found then
      return;
  end;

  select count(*) into cnt
  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 then
    pret_val := 1;
    return;
  else
    pv_wbs_root_proc_cand ( puser_id, pwid, pret_val);
  end if;
end;

PV_WBS_ROOT_NODES
create or replace procedure pv_wbs_root_nodes
(puser_id number, pwbs_list OUT varchar,
pwbs_list2 OUT varchar ,pret_val OUT number ,pret_msg OUT varchar2 )
as
  cursor ua 
  is 
  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 );
  
  cursor cand_root
  is
  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);
  cnt  binary_integer;
  cntList2 binary_integer;
  vstepmsg  varchar2(60);  
begin
  pwbs_list := null;
  pwbs_list2 := null;
  cntList2 :=0;
  vstepmsg := 'POPULATE_UACCESS procedure.';
  populate_uaccess (puser_id, pret_val);
  if pret_val <> 0 then
   pret_msg := 'Error running POPULATE_UACCESS procedure';
   return;
  end if;
  commit;
  vstepmsg := ' project node query loop.';
  for ua_rec in ua loop
    if pwbs_list is null then
      pwbs_list := to_char(ua_rec.wbs_id);
    else
        pwbs_list :=pwbs_list ||',' || to_char(ua_rec.wbs_id);
    end if;      
  end loop;

  vstepmsg := 'candidate financial node query loop.';
  for cr_rec in cand_root loop
    pv_wbs_root_proc_cand ( puser_id, cr_rec.parent_wbs_id, pret_val);
    if pret_val = 0 then 	-- add to list
      cntList2 := cntList2 + 1;
      if pwbs_list2 is null then
        pwbs_list2 := to_char(cr_rec.wbs_id);
      else
         pwbs_list2 :=pwbs_list2 ||',' || to_char(cr_rec.wbs_id);
      end if;      
    end if;
  end loop;
  
  dbms_output.put_line ( 'Root Nodes with Priv: ' || to_char(cntList2) ) ;
exception 
  when others then
    pret_val := -1;
    pret_msg := 'Error running ' || vstepmsg || '|' || SQLERRM;
end;

WBS_TREE_HAS_RSRC_ASSGN
CREATE or REPLACE PROCEDURE wbs_tree_has_rsrc_assgn(
                    pwbs_id IN number, 
                    prsrc_id IN number,
                    pret_val OUT number, 
                    pret_msg OUT varchar2)
as
  cursor child_wbs
  is select wbs_id
     from projwbs
     where parent_wbs_id = pwbs_id 
     and delete_session_id is null;

  vcnt  number;

begin
    pret_val := 0;

    if prsrc_id = -1 then
      select count(*) into vcnt
      from wbsrsrc 
      where wbs_id = pwbs_id
      and delete_session_id is null;
    else
      select count(*) into vcnt
      from wbsrsrc 
      where wbs_id = pwbs_id
      and rsrc_id = prsrc_id
      and delete_session_id is null;
    end if;

    if vcnt != 0 then
      pret_msg := 'WBS Resource Assignments found';
      pret_val := 1;
      return;
    end if;

    for child_wbs_rec in child_wbs loop
      if prsrc_id = -1 then
        select count(*) into vcnt
        from wbsrsrc 
        where wbs_id = child_wbs_rec.wbs_id
        and delete_session_id is null;
      else
        select count(*) into vcnt
        from wbsrsrc 
        where wbs_id = child_wbs_rec.wbs_id
        and rsrc_id = prsrc_id
        and delete_session_id is null;  
      end if;

      if vcnt != 0 then
        pret_msg := 'WBS Resource Assignments found';
        pret_val := 1;
        return;
      else
        wbs_tree_has_rsrc_assgn(child_wbs_rec.wbs_id, prsrc_id, pret_val, pret_msg); 

        if pret_val <> 0 then
          return;
        end if;

      end if;
    end loop;

exception
  when others then 
    pret_val := -1;
    pret_msg := SQLERRM;


end;

WBS_TREE_HAS_ROLE_ASSGN
CREATE OR REPLACE PROCEDURE WBS_TREE_HAS_ROLE_ASSGN(
                    pwbs_id IN number,
                    prole_id IN number,
                    pret_val OUT number,
                    pret_msg OUT varchar2)
AS
  cursor child_wbs
  is select wbs_id
     from projwbs
     where parent_wbs_id = pwbs_id
     and delete_session_id is null;
  vcnt  number;
begin
    pret_val := 0;
    if prole_id = -1 then
      select count(*) into vcnt
      from wbsrsrc
      where wbs_id = pwbs_id
      and delete_session_id is null;
    else
      select count(*) into vcnt
      from wbsrsrc
      where wbs_id = pwbs_id
      and role_id = prole_id
      and delete_session_id is null;
    end if;
    if vcnt != 0 then
      pret_msg := 'WBS Role Assignments found';
      pret_val := 1;
      return;
    end if;
    for child_wbs_rec in child_wbs loop
      if prole_id = -1 then
        select count(*) into vcnt
        from wbsrsrc
        where wbs_id = child_wbs_rec.wbs_id
        and delete_session_id is null;
      else
        select count(*) into vcnt
        from wbsrsrc
        where wbs_id = child_wbs_rec.wbs_id
        and role_id = prole_id
        and delete_session_id is null;
      end if;
      if vcnt != 0 then
        pret_msg := 'WBS Role Assignments found';
        pret_val := 1;
        return;
      else
        wbs_tree_has_role_assgn(child_wbs_rec.wbs_id, prole_id, pret_val, pret_msg);
        if pret_val <> 0 then
          return;
        end if;
      end if;
    end loop;
exception
  when others then
    pret_val := -1;
    pret_msg := SQLERRM;
end;

DB_TO_IANA_CHARSET
create or replace procedure db_to_iana_charset ( pcharset out varchar2 ) 
as
  vcharset                  varchar2(64);
begin
  select value
  into vcharset
  from v$nls_parameters 
  where parameter = 'NLS_CHARACTERSET';

  if instr(vcharset,'ISO8859') > 0 then
    pcharset := 'ISO-8859-' || substr(vcharset,-1,1);
  elsif instr(vcharset,'MSWIN12') > 0 then
    pcharset := 'windows-' || substr(vcharset,-4,4);
  elsif vcharset = 'UTF8' then  -- UTF-8
    pcharset := 'utf-8';
  elsif vcharset = 'US7ASCII' then  -- US-ASCII
    pcharset := 'US-ASCII';
  elsif vcharset = 'JA16SJIS' then  -- Shift JIS
    pcharset := 'Shift_JIS';
  elsif vcharset = 'ZHT16BIG5' or vcharset = 'ZHT16MSWIN950' then  -- Traditional Chinese
    pcharset := 'Big5';
  elsif vcharset = 'ZHS16GBK'  then  -- Simplified Chinese
    pcharset := 'GBK';
  elsif vcharset = 'AL32UTF8' then
    pcharset := 'utf-8'; 
--  elsif vcharset = 'KO16MSWIN949'  then  -- Korean
--    pcharset := '';
  else
    pcharset := '';
  end if;
  
end;

BLOB_INTERFACE
CREATE OR REPLACE PACKAGE blob_interface 
as
  PROCEDURE get_blob (pdata OUT raw, pcolumn_name IN varchar2
                     , ptable_name IN varchar2, ppk_columns IN varchar2
                     , ppk_id IN number, ppk_id2 IN number, pchunk_size IN number
                     , pdest_charset IN varchar2, pret_val OUT number, pret_msg OUT varchar2);
  PROCEDURE get_blob_next ( pdata OUT raw, pret_val OUT number,
                            pret_msg OUT number);
	
  procedure save_blob (pdata IN raw, pcolumn_name IN varchar2
                      , ptable_name IN varchar2, ppk_columns IN varchar2
                      , ppk_id IN number, ppk_id2 IN number, poffset IN number
                      , psource_charset IN varchar2, pret_val OUT number, pret_msg OUT varchar2);

  -- variables
  gdb_charset           varchar2(64) := null;
  glanguage             varchar2(64) := null;
  gterritory            varchar2(64) := null;
  glocal_str            varchar2(194);
  gutf8_str             varchar2(194);
  gdest_str             varchar2(194);
  gsource_str           varchar2(194);
  gblob                 blob;
  gchunk_size           binary_integer;
  gnext                 binary_integer;
  gdest_charset         varchar2(64) := 'WE8ISO8859P1';
  gsource_charset       varchar2(64) := 'WE8ISO8859P1';
  gneed_conversion      boolean := false;
  gis_multibyte         boolean := false;
end;

BLOB_INTERFACE
CREATE OR REPLACE PACKAGE BODY blob_interface 
as
  gpk_col1      varchar2(30);
  gpk_col2      varchar2(30);
  gsql          varchar2(1000);

  gc_max_low_ascii            raw(1) := '7F';
  gc_min_utf_lead             raw(1) := 'C0';
  
  PROCEDURE internal_get_blob (pdata OUT raw, poffset IN OUT number, pret_val OUT number, pret_msg OUT varchar2);
  procedure internal_save_blob (pdata IN raw, poffset IN number, pret_val OUT number, pret_msg OUT varchar2);

  procedure get_database_charset
  as
    cc_code varchar2(2);
  begin
    select value into gdb_charset 
    from v$nls_parameters where parameter = 'NLS_CHARACTERSET';
    select value into glanguage 
    from v$nls_parameters where parameter = 'NLS_LANGUAGE';
    select value into gterritory 
    from v$nls_parameters where parameter = 'NLS_TERRITORY';

    glocal_str := glanguage || '_' || gterritory || '.' || gdb_charset;
    gutf8_str :=  glanguage || '_' || gterritory || '.UTF8';

    cc_code := substr( gdb_charset,1,2);
    if gdb_charset = 'UTF8' or cc_code in ('JA','ZH') then
      gis_multibyte := true;
    end if;
  end;

  function is_valid_charset ( pcharset IN varchar2 ) return boolean
  as
    vdummy varchar2(64);
  begin
    
    select value into vdummy
    from v$nls_valid_values
    where parameter = 'CHARACTERSET'
    and value = upper(pcharset);
    return true;
  exception
    when no_data_found then
      return false;
  end;

  procedure parse_pk_columns (ppk_columns IN varchar2)
  as
    cpos binary_integer;
  begin
    cpos := instr(ppk_columns,',');
    if cpos > 0 then
      gpk_col1 := substr(ppk_columns,1,cpos-1);
      gpk_col2 := substr(ppk_columns,cpos+1,length(ppk_columns));
    else
      gpk_col1 := ppk_columns;
      gpk_col2 := null;
    end if;
  end; 

  PROCEDURE get_blob (pdata OUT raw, pcolumn_name IN varchar2
                     , ptable_name IN varchar2, ppk_columns IN varchar2
                     , ppk_id IN number, ppk_id2 IN number, pchunk_size IN number
                     , pdest_charset IN varchar2, pret_val OUT number, pret_msg OUT varchar2)
  as
    voffset          binary_integer := 1;
  begin
    gnext := 1;
    if gdb_charset is null then
      get_database_charset;
    end if;

    if gdest_charset != pdest_charset then
      if not is_valid_charset ( pdest_charset ) then
        pret_val := -1;
        return;
      end if;
      gdest_charset := upper(pdest_charset);      
      gdest_str := glanguage || '_' || gterritory || '.' || gdest_charset;
      if pdest_charset = gdb_charset then
        gneed_conversion := false;
      elsif (pdest_charset = 'WE8ISO8859P1' or pdest_charset = 'WE8MSWIN1252')
            and gdb_charset = 'UTF8' then
        gneed_conversion := false;
      else
        gneed_conversion := true;
      end if;
    end if;
    parse_pk_columns(ppk_columns);
    begin
      gsql := 'select ' || pcolumn_name || ' from ' || ptable_name
              || ' where ' || gpk_col1 || ' = :pk';
      if gpk_col2 is null then
        execute immediate gsql into gblob using ppk_id;
      else 
        gsql := gsql || ' and ' || gpk_col2 || ' = :pk2';
        execute immediate gsql into gblob using ppk_id, ppk_id2;
      end if;
    exception
      when no_data_found then
        pret_val := -1;
        pret_msg := 'No data found for key ' || to_char(ppk_id);
        return;
    end;
    gchunk_size := pchunk_size;
    internal_get_blob ( pdata, gnext, pret_val, pret_msg );
--    gnext := gchunk_size + voffset;
  end;

  PROCEDURE get_blob_next ( pdata OUT raw, pret_val OUT number,
                            pret_msg OUT number)
  as
  begin
    internal_get_blob ( pdata, gnext, pret_val, pret_msg );
--    gnext := gnext + gchunk_size;
  end;

  procedure save_blob (pdata IN raw, pcolumn_name IN varchar2
                      , ptable_name IN varchar2, ppk_columns IN varchar2
                      , ppk_id IN number, ppk_id2 IN number, poffset IN number
                      , psource_charset IN varchar2, pret_val OUT number, pret_msg OUT varchar2)
  as
    procedure get_blob_column 
    as
    begin
      begin
        gsql := 'select ' || pcolumn_name || ' from ' || ptable_name
                || ' where ' || gpk_col1 || ' = :pk';
        if gpk_col2 is null then
          gsql := gsql || ' for update';
          execute immediate gsql into gblob using ppk_id;
        else 
          gsql := gsql || ' and ' || gpk_col2 || ' = :pk2 for update';
          execute immediate gsql into gblob using ppk_id, ppk_id2;
        end if;
      exception
        when no_data_found then
          pret_val := -1;
          pret_msg := 'No data found for key ' || to_char(ppk_id);
          return;
      end;
    end;
  begin
    if gdb_charset is null then
      get_database_charset;
    end if;
    if gsource_charset != psource_charset then
      if not is_valid_charset ( psource_charset ) then
        pret_val := -1;
        pret_msg := 'Source characterset (' || psource_charset || ') is invalid';
        return;
      end if;
      gsource_charset := upper(psource_charset);      
      gsource_str := glanguage || '_' || gterritory || '.' || gsource_charset;
      if psource_charset = gdb_charset then
        gneed_conversion := false;
      elsif (psource_charset = 'WE8ISO8859P1' or psource_charset = 'WE8MSWIN1252')
            and gdb_charset = 'UTF8' then
        gneed_conversion := false;
      else
        gneed_conversion := true;
      end if;
    end if;
    parse_pk_columns(ppk_columns);
    get_blob_column;
    if gblob is null then
      gsql := 'update ' || ptable_name || ' set ' || pcolumn_name || ' = empty_blob() '
                || ' where ' || gpk_col1 || ' = :pk';
      if gpk_col2 is null then
        execute immediate gsql using ppk_id;
      else 
        gsql := gsql || ' and ' || gpk_col2 || ' = :pk2';
        execute immediate gsql using ppk_id, ppk_id2;
      end if;
      get_blob_column;
    end if;
    internal_save_blob ( pdata, poffset, pret_val, pret_msg );
  end;

  PROCEDURE internal_get_blob (pdata OUT raw, poffset IN OUT number, pret_val OUT number, pret_msg OUT varchar2)
  as
    tmpraw                raw(32767);
    vdatalen              binary_integer;
    vloblen               binary_integer;
    vlastbyte             raw(1);
    vexlen                binary_integer;
    vexoff                binary_integer;
  begin
    if gblob is null then
      pdata := null;
      pret_val := 0;
    end if;
    vloblen := gchunk_size;
    begin
      dbms_lob.read(gblob,vloblen,poffset,tmpraw);
    exception
      when no_data_found then
        pret_val := 0;
        pdata := null;
        return;
    end;
    pret_val := vloblen;
    if vloblen = 0 then
      dbms_lob.close(gblob);
      return;
    end if;

    poffset := poffset + vloblen;

    if gis_multibyte and gneed_conversion  then
      vlastbyte := utl_raw.substr(tmpraw,vloblen,1);
      if vlastbyte > gc_max_low_ascii then
        vexoff := 1;
        vexlen := 1;
        loop
          dbms_lob.read(gblob,vexlen,vloblen+vexoff,vlastbyte);
          vexoff := vexoff + 1;

          if vexlen = 0 or vexoff > 3 then
            exit;
          end if;


          if gdb_charset <> 'UTF8' then
            tmpraw := tmpraw || vlastbyte;
            poffset := poffset + 1;       
            exit;   
          else -- is UTF-8
            if vlastbyte >= gc_min_utf_lead or vlastbyte <= gc_max_low_ascii then
              exit;
            end if;
            tmpraw := tmpraw || vlastbyte;
            poffset := poffset + 1;       
          end if;

        end loop;
      end if;   
    end if;

    if gneed_conversion then
      pdata := utl_raw.convert( tmpraw, gdest_str, glocal_str);
    else
      pdata := tmpraw;
    end if;
    pret_val := utl_raw.length(pdata);
  exception
    when others then
      pret_msg := 'Error in internal_get_blob: ' || SQLERRM; 
      pret_val := -1 ;
  end;

  procedure internal_save_blob (pdata IN raw, poffset IN number, pret_val OUT number, pret_msg OUT varchar2)
  as
    vdata                 raw(32767);
    vdatalen              binary_integer;
    vloblen               binary_integer;
  begin
    if gneed_conversion then
      vdata := utl_raw.convert( pdata, glocal_str, gsource_str);
    else
      vdata := pdata;
    end if;

    vdatalen := utl_raw.length(vdata);
    if poffset = 1 then
      dbms_lob.trim(gblob,0);
      vloblen := dbms_lob.getlength(gblob);
      dbms_lob.write(gblob, vdatalen,1, vdata);
    else
      dbms_lob.writeappend(gblob, vdatalen, vdata);
    end if;
    pret_val := vdatalen;


  exception
    when others then
      pret_msg := 'Error in internal_save_blob: ' || SQLERRM; 
      pret_val := -1;
  end;

end;

GS_SAVE_BLOB
create or replace procedure gs_save_blob
(pdata IN raw, pcolumn_name IN varchar2, ptable_name IN varchar2
, ppk_columns IN varchar2, ppk_id IN number, ppk_id2 IN number
, poffset IN number, pret_val OUT number, pret_msg OUT varchar2)
as
begin
  blob_interface.save_blob(pdata,pcolumn_name,ptable_name,ppk_columns,
                          ppk_id,ppk_id2,poffset,'UTF8',pret_val,pret_msg); 
end;

GS_GET_BLOB
create or replace procedure gs_get_blob
(pdata OUT raw, pcolumn_name IN varchar2, ptable_name IN varchar2, ppk_columns IN varchar2
, ppk_id IN number, ppk_id2 IN number, pchunk_size IN number, pret_val OUT number, pret_msg OUT varchar2)
as
begin
  blob_interface.get_blob(pdata,pcolumn_name,ptable_name,ppk_columns,
                          ppk_id,ppk_id2,pchunk_size,'UTF8',pret_val,pret_msg); 
end;

GS_GET_BLOB_NEXT
create or replace procedure gs_get_blob_next
(pdata OUT raw, pret_val OUT number, pret_msg OUT varchar2)
as
begin
  blob_interface.get_blob_next(pdata,pret_val,pret_msg); 
end;

GET_SAFETY_DATE
create or replace procedure get_safety_date ( psafety_date OUT date,
							pret_val OUT number,
							pret_msg OUT varchar2 ) 

as
  currtime date;
begin
  currtime := sysdate-(1/86400);
  begin
    execute immediate 'SELECT MIN(to_date(start_time,''mm/dd/yy hh24:mi:ss'') -(1/17280) ) from v$transaction' 
		into psafety_date;  
	  if psafety_date is null then
	    psafety_date := currtime;
	  end if;
    return;
  exception
    when others then
      if sqlcode != -942 then
        pret_val := sqlcode;
        psafety_date := null;
	return;
      end if;
  end;
  execute immediate 'select min(login_time) from usession where delete_session_id is null' into psafety_date;  
  if psafety_date is null then
    psafety_date := currtime;
  end if;
end;

POPULATE_DELAYED_LOADING
CREATE OR REPLACE PROCEDURE populate_delayed_loading
	(psession_id IN number, pret_val OUT number, pret_msg OUT varchar2,
        pchange_bits IN VARCHAR2 default 'ALL')
as
  updated_rsrc boolean;
  updated_role boolean;
  updated_obs boolean;
  vuser_id number;
begin
  updated_rsrc := false;
  updated_role := false;
  updated_obs := false;

  if pchange_bits = 'ALL'
     or substr(pchange_bits,72,1) = '1'		--task
     or substr(pchange_bits,80,1) = '1'		--taskrsrc
     or substr(pchange_bits,42,1) = '1'		--projrisk
     or substr(pchange_bits,37,1) = '1'		--projest
     or substr(pchange_bits,39,1) = '1'		--projissu
     or substr(pchange_bits,119,1) = '1'		--wbsrsrc
  then
    updated_rsrc := true;

    delete from dltrsrc where session_id = psession_id;
  
    insert into DLTRSRC (session_id, rsrc_id)  
    SELECT psession_id, rsrc_id FROM task t, projshar ps  
    WHERE ps.proj_id = t.proj_id and t.rsrc_id is not null and ps.session_id = psession_id
    UNION SELECT psession_id, rsrc_id FROM taskrsrc tr, projshar ps 
    WHERE ps.proj_id = tr.proj_id and tr.rsrc_id is not null and ps.session_id = psession_id
    UNION SELECT psession_id, rsrc_id FROM projrisk pr, projshar ps 
    WHERE ps.proj_id = pr.proj_id and pr.rsrc_id is not null and ps.session_id = psession_id
    UNION SELECT psession_id, rsrc_id FROM projest pe, projshar ps 
    WHERE ps.proj_id = pe.proj_id and pe.rsrc_id is not null and ps.session_id = psession_id
    UNION SELECT psession_id, rsrc_id FROM projissu pi, projshar ps 
    WHERE ps.proj_id = pi.proj_id and pi.rsrc_id is not null and ps.session_id = psession_id
    UNION SELECT psession_id, rsrc_id FROM trsrcsum tr, projshar ps 
    WHERE ps.proj_id = tr.proj_id and tr.rsrc_id is not null and ps.session_id = psession_id
    UNION SELECT psession_id, rsrc_id FROM wbsrsrc wr, projshar ps 
    WHERE ps.proj_id = wr.proj_id and wr.rsrc_id is not null and ps.session_id = psession_id;
    commit;
  end if;

  if pchange_bits = 'ALL' or updated_rsrc 
     or substr(pchange_bits,80,1) = '1'		--taskrsrc
     or substr(pchange_bits,119,1) = '1'		--wbsrsrc
  then
    updated_role := true;

    delete from dltrole where session_id = psession_id;
 
    insert into DLTROLE (session_id, role_id)  
    SELECT psession_id, role_id FROM taskrsrc tr, projshar ps 
    WHERE ps.proj_id = tr.proj_id and tr.role_id IS NOT NULL and ps.session_id = psession_id
    UNION SELECT psession_id, role_id FROM dltrsrc dr,rsrc r 
    WHERE r.rsrc_id = dr.rsrc_id and r.role_id IS NOT NULL and dr.session_id = psession_id
    UNION SELECT psession_id, role_id FROM rsrcrole rs,  dltrsrc dr
    WHERE rs.rsrc_id = dr.rsrc_id and  rs.role_id IS NOT NULL and dr.session_id = psession_id
    UNION SELECT psession_id, role_id FROM trsrcsum tr, projshar ps 
    WHERE ps.proj_id = tr.proj_id and tr.role_id is not null and ps.session_id = psession_id
    UNION SELECT psession_id, role_id FROM wbsrsrc wr, PROJSHAR ps
    WHERE ps.proj_id = wr.proj_id and wr.role_id is NOT NULL and ps.session_id = psession_id;
    commit;
  end if;

  if pchange_bits = 'ALL' or updated_rsrc or updated_role then
    delete from dltrsrl where session_id = psession_id;
 
    insert into DLTRSRL (session_id, rsrc_id, role_id)  
    SELECT psession_id, rr.rsrc_id, rr.role_id FROM dltrole drl, rsrcrole rr
    WHERE rr.role_id = drl.role_id and drl.session_id = psession_id
    UNION SELECT psession_id, rr.rsrc_id, rr.role_id FROM dltrsrc dr, rsrcrole rr
    WHERE rr.rsrc_id = dr.rsrc_id and dr.session_id = psession_id;

    commit;
  end if;

  if pchange_bits = 'ALL'
     or substr(pchange_bits,45,1) = '1'		--projwbs
     or substr(pchange_bits,42,1) = '1'		--projrisk
     or substr(pchange_bits,44,1) = '1'		--projthrs
     or substr(pchange_bits,39,1) = '1'		--projissu
  then
    updated_obs := true;

    delete from dltobs where session_id = psession_id;
 
    insert into DLTOBS (session_id, obs_id)  
    SELECT psession_id, obs_id from projwbs pw, projshar ps 
    where ps.proj_id = pw.proj_id and ps.session_id = psession_id    
    UNION SELECT psession_id, obs_id from projissu pi, projshar ps 
    where ps.proj_id = pi.proj_id and ps.session_id = psession_id    
    UNION SELECT psession_id, obs_id from projthrs pt, projshar ps 
    where ps.proj_id = pt.proj_id and ps.session_id = psession_id    
    UNION SELECT psession_id, obs_id from projrisk pr, projshar ps 
     where ps.proj_id = pr.proj_id and ps.session_id = psession_id and pr.obs_id is not null;	--bug fix 3026

    commit;
  end if;

  if pchange_bits = 'ALL'
     or substr(pchange_bits,36,1) = '1'		--project
     or substr(pchange_bits,80,1) = '1'		--taskrsrc
     or substr(pchange_bits,35,1) = '1'		--projcost
  then
    delete from dltacct where session_id = psession_id;
 
    insert into DLTACCT (session_id, acct_id)  
    SELECT psession_id, acct_id from taskrsrc tr, projshar ps 
    where ps.proj_id = tr.proj_id and ps.session_id = psession_id and acct_id is not null
    UNION SELECT psession_id, acct_id from project p, projshar ps 
    where ps.proj_id = p.proj_id and ps.session_id = psession_id and acct_id is not null    
    UNION SELECT psession_id, acct_id from projcost pc, projshar ps 
    where ps.proj_id = pc.proj_id and ps.session_id = psession_id and acct_id is not null;

    commit;
  end if;

  if pchange_bits = 'ALL' or updated_obs
     or substr(pchange_bits,62,1) = '1'		--rsrc
     or substr(pchange_bits,97,1) = '1'		--userobs
  then
    begin
      select user_id into vuser_id from usession where session_id = psession_id;
    exception
      when no_data_found then
        pret_msg := 'No user found for session ' || to_char(psession_id);
        pret_val := -1;
        return;
    end;

    delete from dltuser where session_id = psession_id;
 
    insert into DLTUSER (session_id, user_id)  
    SELECT psession_id, vuser_id from dual
    UNION SELECT psession_id, user_id from dltrsrc dr, rsrc r
    where dr.rsrc_id = r.rsrc_id and dr.session_id = psession_id and user_id is not null
    UNION SELECT psession_id, ts_approve_user_id from dltrsrc dr, rsrc r
    where dr.rsrc_id = r.rsrc_id and dr.session_id = psession_id and ts_approve_user_id is not null
    UNION SELECT psession_id, user_id from dltobs dr, userobs uo
    where uo.obs_id = dr.obs_id and dr.session_id = psession_id;

    commit;
  end if;


  if pchange_bits = 'ALL' 
     or substr(pchange_bits,73,1) = '1'		--taskactv
     or substr(pchange_bits,2,1) = '1'		--actvcode
     or substr(pchange_bits,3,1) = '1'		--actvtype
  then
    delete from dltactv where session_id = psession_id;

    insert into DLTACTV (session_id, actv_code_id)  
    SELECT psession_id, actv_code_id from taskactv ta, projshar ps 
    where ps.proj_id = ta.proj_id and ps.session_id = psession_id
    UNION SELECT psession_id, actv_code_id from actvcode ac, actvtype at, projshar ps 
    where ps.proj_id = at.proj_id and ac.actv_code_type_id = at.actv_code_type_id 
    and ps.session_id = psession_id;

  end if;

  commit;
  pret_val:=0;
exception
  when others then
     pret_msg := 'Error in dl_refresh: ' || sqlerrm;
     pret_val := -1;
     rollback;
end;

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

OPEN_TABLE_CHANGE
create or replace procedure open_table_change
			(pTS IN date,
			psession_id	IN number,
			pload_status IN varchar2,
			pchange_bits	OUT varchar2,
			psafety_date	OUT date,
			pret_val	OUT number,
			pret_msg	OUT varchar2 ) 
as
  vCnt	pls_integer;
  procedure set_bit ( pos IN number)
  as
  begin   
    if pos = 1 then
       pChange_bits:='1'|| substr(pChange_bits,2,174);
    else
       pChange_bits:=substr(pChange_bits,1,pos-1) || '1' ||substr(pChange_bits,pos+1,174);
    end if;
  end;
begin
  get_safety_date ( psafety_date, pret_val, pret_msg);
  pChange_bits := '000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
				
	select count(*) into vCnt from dual 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 then set_bit(2); end if;
	select count(*) into vCnt from dual 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 then set_bit(3); end if;
	select count(*) into vCnt from dual 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 then set_bit(7); end if;
	select count(*) into vCnt from dual 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 then set_bit(8); end if;
	select count(*) into vCnt from dual 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 then set_bit(13); end if;
	select count(*) into vCnt from dual 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 then set_bit(14); end if;
	select count(*) into vCnt from dual 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 then set_bit(129); end if;
	select count(*) into vCnt from dual 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 then set_bit(20); end if;
	select count(*) into vCnt from dual 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 then set_bit(35); end if;
	select count(*) into vCnt from dual 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 then set_bit(36); end if;
	select count(*) into vCnt from dual 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 then set_bit(37); end if;
	select count(*) into vCnt from dual 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 then set_bit(38); end if;
	select count(*) into vCnt from dual 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 then set_bit(39); end if;
	select count(*) into vCnt from dual 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 then set_bit(41); end if;
	select count(*) into vCnt from dual 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 then set_bit(42); end if;
	select count(*) into vCnt from dual 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 then set_bit(44); end if;
	select count(*) into vCnt from dual 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 then set_bit(45); end if;
	select count(*) into vCnt from dual 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 then set_bit(131); end if;
	select count(*) into vCnt from dual 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 then set_bit(53); end if;
	select count(*) into vCnt from dual 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 then set_bit(58); end if;
	select count(*) into vCnt from dual 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 then set_bit(72); end if;
	select count(*) into vCnt from dual 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 then set_bit(73); end if;
	select count(*) into vCnt from dual 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 then set_bit(74); end if;
	select count(*) into vCnt from dual 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 then set_bit(75); end if;
	select count(*) into vCnt from dual 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 then set_bit(116); end if;
	select count(*) into vCnt from dual 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 then set_bit(76); end if;
	select count(*) into vCnt from dual 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 then set_bit(77); end if;
	select count(*) into vCnt from dual 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 then set_bit(78); end if;
	select count(*) into vCnt from dual 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 then set_bit(78); end if;
	select count(*) into vCnt from dual 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 then set_bit(79); end if;
	select count(*) into vCnt from dual 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 then set_bit(80); end if;
	select count(*) into vCnt from dual 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 then set_bit(81); end if;
	select count(*) into vCnt from dual 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 then set_bit(169); end if;
	select count(*) into vCnt from dual 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 then set_bit(117); end if;
	select count(*) into vCnt from dual 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 then set_bit(87); end if;
	select count(*) into vCnt from dual 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 then set_bit(170); end if;
	select count(*) into vCnt from dual 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 then set_bit(91); end if;
	select count(*) into vCnt from dual 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 then set_bit(102); end if;
	select count(*) into vCnt from dual 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 then set_bit(103); end if;
	select count(*) into vCnt from dual 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 then set_bit(109); end if;
	select count(*) into vCnt from dual 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 then set_bit(104); end if;
         --Run delayed loading procedure if this is PM
		populate_delayed_loading(psession_id,pret_val,pret_msg,pchange_bits);
  
exception
  when others then
    pret_val := -1;
    pret_msg := 'Error in Open Refresh Change |' || SQLERRM;
end;

CHECK_LAST_SUMM
create or replace procedure CHECK_LAST_SUMM
(pproj_id IN number, pret_val OUT number, pret_msg OUT varchar2)
as
  lts date;
  cnt number;
  summ_level varchar2(12);
begin
  select count(*) into cnt
  from project
  where proj_id = pproj_id;
  if cnt = 0 then
    pret_msg := 'Project id ' || to_char(pproj_id) || ' does not exist';
    pret_val := -1;
    return;
  end if;

  select last_tasksum_date 
  into lts
  from project
  where proj_id = pproj_id;
  if lts is null then
    pret_val := 1;
    return;
  end if;

  select sum_assign_level
  into summ_level
  from project
  where proj_id = pproj_id;  

  pret_val := 0;
  select count(*) into cnt
  from dual
  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')
		);
  if cnt > 0 then
    pret_val := 1;
    return;
  end if;
  select count(*) into cnt
  from dual where exists (select * from prefer where update_date > lts);
  if cnt > 0 then
    pret_val := 1;
    return;
  end if;
  select count(*) into cnt
  from dual 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');
  if cnt > 0 then
    pret_val := 1;
  end if;
exception
  when others then
    pret_val := -1;
    pret_msg := 'Error in check_last_summ: ' || SQLERRM;
end;

REFRDEL_CLEANUP
create or replace procedure REFRDEL_CLEANUP(pret_val OUT number,
                                                pret_msg OUT varchar2) as
  curr_time            date := sysdate;
  vdiff                number;
  vinterval_date       date;
  vset                 varchar2(20);
  vsetnum              number;
  min_refrdel_date     date;
  delete_target        date;
  max_minutes_to_sweep NUMBER;
  interval_step        NUMBER;
  cnt                  PLS_INTEGER := 0;
  i                    PLS_INTEGER := 1;
  total_cleared        PLS_INTEGER := 0;
begin
  settings_read_number(max_minutes_to_sweep,
                       'database.cleanup.Refrdel',
                       'DaysToDelete',
                       '1');
  settings_read_number(interval_step,
                       'database.cleanup.Refrdel',
                       'IntervalStep',
                       '15');
  settings_read_string(vset,
                       'database.cleanup.Refrdel',
                       'KeepInterval',
                       '5d');
  max_minutes_to_sweep := max_minutes_to_sweep * 1440;
  get_interval_difference(vset, vdiff);
  vinterval_date := curr_time - vdiff;
  dbms_output.put_line('Keep Date: ' ||
                       to_char(vinterval_date, 'mm/dd/yyyy hh24:mi:ss'));

  select min(delete_date) into min_refrdel_date from refrdel;
  dbms_output.put_line('Oldest Refrdel: ' ||
                       to_char(min_refrdel_date, 'mm/dd/yyyy hh24:mi:ss'));

  delete_target := min_refrdel_date;
  if min_refrdel_date is not null then
    while (i <= max_minutes_to_sweep and delete_target < vinterval_date) loop
      delete_target := delete_target + (interval_step / 1440);
    
      delete from refrdel where delete_date < delete_target;
    
      total_cleared := total_cleared + sql%rowcount;
      commit;
      i := i + interval_step;
    end loop;
  
    dbms_output.put_line('Cleared: ' ||
                         to_char(total_cleared, 'fm999,999,999,999') ||
                         ' records from ' ||
                         to_char(min_refrdel_date, 'mm/dd/yyyy hh24:mi:ss') ||
                         ' to ' ||
                         to_char(delete_target, 'mm/dd/yyyy hh24:mi:ss'));
  else
    dbms_output.put_line('Nothing to Delete');
  end if;
  pret_msg := to_char(total_cleared) || ' record(s) deleted.';
  pret_val := 0;
exception
  when others then
    pret_val := -1;
    pret_msg := 'Error in REFRDEL_CLEANUP ' || SQLERRM;
end;

PRM_AUDIT
create or replace package prm_audit 
as
  procedure tab_options (ptable_name IN varchar, paudit OUT number, pins_audit OUT number,
                         pupd_audit OUT number, pdel_audit OUT number, column_audit OUT varchar2);
  procedure prm_user (psession_id OUT number, pprm_user_name OUT varchar2, papp_name OUT varchar2);
  procedure proc_info (pprogram OUT varchar2, phostname OUT varchar2, pnetaddress OUT varchar2,
                       prdbms_user OUT varchar2, pos_user OUT varchar2);
  procedure audit_data (ptable_name IN varchar2, pcolumn_name IN varchar2, poper IN varchar2,
                        ppk1 IN varchar2, ppk2 IN varchar2, ppk3 IN varchar2, ppk4 IN varchar2, pprm_user_name varchar2,
                        pprogram IN varchar2, phostname IN varchar2, pnetaddress IN varchar2,
                        prdbms_user IN varchar2, pos_user IN varchar2, papp_name IN varchar2,
                        pcolaud IN number,plogical_delete varchar2,pprimary_record varchar2,
                        pbefore_value IN varchar2, pafter_value varchar2);
  procedure audit_blob (ptable_name IN varchar2, pcolumn_name IN varchar2, poper IN varchar2,
                        ppk1 IN varchar2, ppk2 IN varchar2, ppk3 IN varchar2, ppk4 IN varchar2, pprm_user_name varchar2,
                        pprogram IN varchar2, phostname IN varchar2, pnetaddress IN varchar2,
                        prdbms_user IN varchar2, pos_user IN varchar2, papp_name IN varchar2,
                        pcolaud IN number,plogical_delete varchar2,pprimary_record varchar2,
                        pbefore_value IN blob, pafter_value IN blob);
  procedure audit_row (ptable_name IN varchar2, poper IN varchar2,
                        ppk1 IN varchar2, ppk2 IN varchar2, ppk3 IN varchar2, ppk4 IN varchar2, pprm_user_name varchar2,
                        pprogram IN varchar2, phostname IN varchar2, pnetaddress IN varchar2,
                        prdbms_user IN varchar2, pos_user IN varchar2, papp_name IN varchar2,
                        plogical_delete varchar2,pprimary_record varchar2);
  function get_sid return number;
  function get_user return varchar2;
  procedure audit_identity ( psession_id IN number, puser_id IN number default null,
                             puser_name IN varchar2 default null);
  g_prm_user_name       varchar2(32):='unknown';
  g_audit_extended      BLOB;
  g_audit_data		varchar2(4000);
end;

PRM_AUDIT
create or replace package body prm_audit
as
  g_session_id 		number :=null;
  g_app_name            varchar2(25):='unk';

  gprogram              varchar2(64);
  ghostname		varchar2(64);
  gnetaddress		varchar2(16);
  grdbms_user           varchar2(30) := null;
  gos_user              varchar2(30) := 'unknown';

  g_sid                 number := null;


  procedure tab_options (ptable_name IN varchar, paudit OUT number, pins_audit OUT number,
                         pupd_audit OUT number, pdel_audit OUT number, column_audit OUT varchar2)
  as
    vaudit_str varchar2(4);
    pmaudit         number;
    gins_audit      number;
    gupd_audit      number;
    gdel_audit      number;
    g_audit_enabled boolean := null;
  begin
if g_audit_enabled is null then
      settings_read_bool(pmaudit, 'database.audit', 'Enabled', 0);
      if pmaudit = 1 then
        g_audit_enabled := true;
        settings_read_string(vaudit_str,
                             'database.audit.' || ptable_name,
                             'Options',
                             '000');
        gins_audit := substr(vaudit_str, 1, 1);
        gupd_audit := substr(vaudit_str, 2, 1);
        gdel_audit := substr(vaudit_str, 3, 1);
        if (nvl(gins_audit, 0) = 0 and nvl(gupd_audit, 0) = 0 and
           nvl(gdel_audit, 0) = 0) then
          paudit := 0;
        end if;
      else
        g_audit_enabled := false;
      end if;
      if g_audit_enabled then
        paudit := 1;
      else
        paudit := 0;
      end if;
    end if;

    pins_audit := gins_audit;
    pupd_audit := gupd_audit;
    pdel_audit := gdel_audit;
  end;

  function get_user return varchar2
  as
    vprm_user_name    varchar2(32);
    vapp_name         varchar2(25);
    vsession_id       number(10);
  begin
    prm_user ( vsession_id, vprm_user_name, vapp_name);
    return vprm_user_name;
  end;

  procedure audit_identity ( psession_id IN number, puser_id IN number default null,
                             puser_name IN varchar2 default null )
  as
  begin
    if puser_name is not null then
      g_prm_user_name := puser_name;
    elsif puser_id is not null then
      begin
        select user_name 
        into g_prm_user_name
        from users
        where user_id = puser_id
        and delete_session_id is null;
      exception
        when no_data_found then
          g_prm_user_name := 'NotPrmUser';
      end;
    else
      if g_SID is null then
        g_SID := get_sid;
      end if;    

      update usession 
      set spid=g_SID 
      where session_id = psession_id
      returning app_name into g_app_name;

      if SQL%ROWCOUNT = 1 then
        g_session_id := psession_id;
        begin
          select user_name 
          into g_prm_user_name 
          from users u , usession us
          where u.user_id = us.user_id
          and us.session_id = psession_id
          and u.delete_session_id is null and us.delete_session_id is null;
        exception
          when no_data_found then
            g_prm_user_name := 'NotPrmUser';
        end;
     
      end if;
    end if;
    dbms_session.set_identifier(g_prm_user_name);
  end;

  procedure prm_user (psession_id OUT number, pprm_user_name OUT varchar2, papp_name OUT varchar2)
  as
  begin
    if g_prm_user_name <> 'unknown' then
      pprm_user_name := g_prm_user_name;
    else 
      if g_SID is null then
        g_SID := get_sid;
      end if;
      if g_session_id is null then
        begin
          select session_id, user_name, app_name
          into g_session_id, g_prm_user_name, g_app_name
          from users u , usession us
          where u.user_id = us.user_id
          and us.spid = g_SID
          and u.delete_session_id is null and us.delete_session_id is null;
          if lower(g_app_name) = 'project management' then
            g_app_name := 'PM';
          elsif lower(g_app_name) = 'methodology management' then
            g_app_name := 'MM';
          end if;
        exception
          when no_data_found then
            g_session_id := 0;
            psession_id := 0;  
            g_prm_user_name := 'NotPrmUser';
            pprm_user_name := 'NotPrmUser';
            papp_name := '';
        end;
      end if;
    end if;
    psession_id := g_session_id;
    pprm_user_name := g_prm_user_name;
    papp_name := g_app_name;
  end;

  procedure proc_info (pprogram OUT varchar2, phostname OUT varchar2, pnetaddress OUT varchar2,
                       prdbms_user OUT varchar2, pos_user OUT varchar2)
  as
  begin

    if grdbms_user is null then
      select sys_context('USERENV','HOST'),sys_context('USERENV','IP_ADDRESS'),sys_context('USERENV','SESSION_USER'),
             sys_context('USERENV','OS_USER')
      into ghostname,gnetaddress,grdbms_user,gos_user
      from dual;
      if grdbms_user is null then
        grdbms_user := 'unk';       -- Set in case for some reason session_user is null
      end if;
      begin
        execute immediate 'select program from sys.v_$session where audsid = USERENV(''SESSIONID'')'
              into gprogram;

      exception
        when others then
          null;
      end;
    end if;
    pprogram := gprogram;
    phostname := ghostname;
    pnetaddress := gnetaddress;
    prdbms_user := grdbms_user;
    pos_user := gos_user;
  end;

  procedure audit_data (ptable_name IN varchar2, pcolumn_name IN varchar2, poper IN varchar2,
                        ppk1 IN varchar2, ppk2 IN varchar2, ppk3 IN varchar2, ppk4 IN varchar2, pprm_user_name varchar2,
                        pprogram IN varchar2, phostname IN varchar2, pnetaddress IN varchar2,
                        prdbms_user IN varchar2, pos_user IN varchar2, papp_name IN varchar2,
                        pcolaud IN number,plogical_delete varchar2,pprimary_record varchar2,
                        pbefore_value IN varchar2, pafter_value varchar2)
  as 
    vsql varchar2(4000);
    vaudit_data varchar2(9000);
  begin
    if pcolaud is null or pcolaud = 1 then
      vaudit_data:='';
      if pbefore_value is not null and (poper='U' or poper='D') then
        vaudit_data := vaudit_data||':O'||pcolumn_name||':'||lpad(to_char(length(pbefore_value)),4,' ')||':'||pbefore_value;
      end if;
      if pafter_value is not null and (poper='U' or poper='I') then
        vaudit_data := vaudit_data||':N'||pcolumn_name||':'||lpad(to_char(length(pafter_value)),4,' ')||':'||pafter_value;
      end if;
      
      if vaudit_data is not null then
        if g_audit_data is null and length(vaudit_data)<=4000 then
          g_audit_data := vaudit_data;
        elsif length(g_audit_data)+length(vaudit_data) <=4000 then
          g_audit_data := g_audit_data || vaudit_data;
        else  
         --BLOB Processing
          dbms_lob.writeappend(prm_audit.g_audit_extended,length(vaudit_data),utl_raw.cast_to_raw(vaudit_data));
        end if;
      end if;
    end if;

  end;

  procedure audit_blob (ptable_name IN varchar2, pcolumn_name IN varchar2, poper IN varchar2,
                        ppk1 IN varchar2, ppk2 IN varchar2, ppk3 IN varchar2, ppk4 IN varchar2, pprm_user_name varchar2,
                        pprogram IN varchar2, phostname IN varchar2, pnetaddress IN varchar2,
                        prdbms_user IN varchar2, pos_user IN varchar2, papp_name IN varchar2,
                        pcolaud IN number,plogical_delete varchar2,pprimary_record varchar2,
                        pbefore_value IN blob, pafter_value IN blob)
  as 
    vadd_data varchar2(255);
  begin
    if pcolaud is null or pcolaud = 1 then
      if pbefore_value is not null then
        vadd_data := ':BLOBO'||pcolumn_name||lpad(to_char(dbms_lob.getlength(pbefore_value)),10,' ')||':';
        dbms_lob.writeappend(prm_audit.g_audit_extended,length(vadd_data),utl_raw.cast_to_raw(vadd_data));
        dbms_lob.append(prm_audit.g_audit_extended,pbefore_value);
      end if;
      if pafter_value is not null then
        vadd_data := ':BLOBO'||pcolumn_name||lpad(to_char(dbms_lob.getlength(pafter_value)),10,' ')||':';
        dbms_lob.writeappend(prm_audit.g_audit_extended,length(vadd_data),utl_raw.cast_to_raw(vadd_data));
        dbms_lob.append(prm_audit.g_audit_extended,pafter_value);
      end if;
    end if;

  end;

  procedure audit_row (ptable_name IN varchar2, poper IN varchar2,
                        ppk1 IN varchar2, ppk2 IN varchar2, ppk3 IN varchar2, ppk4 IN varchar2, pprm_user_name varchar2,
                        pprogram IN varchar2, phostname IN varchar2, pnetaddress IN varchar2,
                        prdbms_user IN varchar2, pos_user IN varchar2, papp_name IN varchar2,
                        plogical_delete varchar2,pprimary_record varchar2)
  as 
    vsql varchar2(1000);
    vblank_blob blob;
  begin


    vsql := 'insert into prmaudit (audit_date,table_name,pk1,pk2,pk3,pk4,oper,rdbms_user_name, app_name, ';
    vsql := vsql||'prm_user_name,os_user_name,program,host_name,netaddress,logical_delete_flag,audit_info,audit_info_extended) ';
    vsql := vsql||'values (sysdate,:ptable_name, :ppk1, :ppk2, :ppk3, :ppk4, :poper, :prdbms_user, :papp_name ';
    vsql := vsql||' ,:pprm_user_name, :pos_user, :pprogram, :phostname, :pnetaddress, :logical_delete, :auditinfo, :auditinfoextended)';

    if dbms_lob.getlength(g_audit_extended) > 0 then
      execute immediate vsql using ptable_name,ppk1, ppk2, ppk3, ppk4, poper, prdbms_user, papp_name
          ,pprm_user_name, pos_user, pprogram, phostname, pnetaddress,plogical_delete,g_audit_data,g_audit_extended;
    else
      execute immediate vsql using ptable_name,ppk1, ppk2, ppk3, ppk4, poper, prdbms_user, papp_name
          ,pprm_user_name, pos_user, pprogram, phostname, pnetaddress,plogical_delete,g_audit_data,vblank_blob;
    end if;
  end;

  function get_sid return number
  as
    vsid number;
  begin
--    execute immediate 'select sid from sys.v_$session where audsid = USERENV(''SESSIONID'')'
    execute immediate 'select USERENV(''SESSIONID'') from dual'
            into vsid;
    return vsid;
  exception
    when others then
      return 0;
  end;

end;

AUDIT_IDENTITY
create or replace procedure audit_identity (psession_id IN number, puser_id IN number default null,
                                            puser_name IN varchar2 default null)
as
begin
  prm_audit.audit_identity(psession_id,puser_id,puser_name);
end;

INTERNAL_AUDITING_SETTING
CREATE OR REPLACE PROCEDURE internal_auditing_setting 
( penable IN boolean, ptable_name IN varchar2 default null, plevel IN number default 1)
as
  cursor tab 
  is
  select table_name 
  from user_tables ut
  where exists (select * 
                from user_tab_columns utc
                where utc.table_name = ut.table_name
                and column_name = 'UPDATE_DATE')
  and ut.table_name not in ('BRE_REGISTRY');
  vlevel varchar2(3);
begin

  if plevel > 3 or plevel < 0 then
    raise_application_error(-20502,'ERROR: PLEVEL must be between 0 and 3');
  end if;


  if penable then
    settings_write_bool (1,'database.audit','Enabled');

    vlevel := substr(to_char(plevel),1,1) || substr(to_char(plevel),1,1) ||  substr(to_char(plevel),1,1);

    if ptable_name is not null then
      settings_write_string( vlevel,'database.audit.' || upper(ptable_name),'Options' );
    else
      for tabrec in tab loop
        settings_write_string( vlevel,'database.audit.' || upper(tabrec.table_name),'Options' );
      end loop;
    end if;


  else
    if ptable_name is null then
      settings_write_bool (0,'database.audit','Enabled') ;
    else
      settings_write_string( '000','database.audit.' || upper(ptable_name),'Options' );
    end if;       
  end if;

  commit;
end;

AUDITING_ENABLE
CREATE OR REPLACE PROCEDURE auditing_enable
( ptable_name IN varchar2 default null, plevel IN number default 1)
as
begin
  internal_auditing_setting(true,ptable_name,plevel);
end;

AUDITING_DISABLE
CREATE OR REPLACE PROCEDURE auditing_disable
( ptable_name IN varchar2 default null)
as
begin
  internal_auditing_setting(false,ptable_name);
end;

CLEANUP_USESSAUD
CREATE OR REPLACE PROCEDURE CLEANUP_USESSAUD
(pret_val OUT number,pret_msg OUT varchar2)
IS
  vset           varchar2(20);
  vdiff          number(20, 6);
  vdelete_time   date;
  vdelcnt        pls_integer;
  vdelete_all    boolean;
  vdelete_thresh number;
  vdelete_pct    number;
  vrowcount      pls_integer;
  vdelete_rows   pls_integer;
  vmax_to_delete number;
  vtmpnum        pls_integer;
  type usessaudtype is record(
   logout_date dbms_sql.Date_Table);
  usessaudrec usessaudtype;
  cursor rd is
    select logout_date
      from usessaud
     where logout_date < vdelete_time
       and rownum <= vdelete_rows;
begin
  settings_read_string(vset,
                       'database.cleanup.Usessaud',
                       'KeepInterval',
                       '5d');
  get_interval_difference(vset, vdiff);
  vdelete_time := sysdate - vdiff;
  settings_read_bool(vtmpnum, 'database.cleanup.Usessaud', 'DeleteAll', 0);
  vdelete_all := (vtmpnum = 1);
  vdelcnt     := 0;
  settings_read_number(vdelete_thresh,
                       'database.cleanup.Usessaud',
                       'DeleteAllThreshold',
                       1000);
  settings_read_number(vdelete_pct,
                       'database.cleanup.Usessaud',
                       'DeletePercentage',
                       10);
  settings_read_number(vmax_to_delete,
                       'database.cleanup.Usessaud',
                       'MaxRowsToDelete',
                       10000);
  select count(1)
    into vrowcount
    from usessaud
   where logout_date < vdelete_time;
  if vdelete_all or vrowcount < vdelete_thresh then
    delete from usessaud where logout_date < vdelete_time;
    pret_val := SQL%ROWCOUNT;
  else
    vdelete_rows := vrowcount * (vdelete_pct * .01);
    if vdelete_rows > vmax_to_delete then
      vdelete_rows := vmax_to_delete;
    elsif vdelete_rows < vdelete_thresh then
      vdelete_rows := vdelete_thresh;
    end if;
    open rd;
    loop
      fetch rd bulk collect
        into usessaudrec.logout_date limit 1000;
      forall i in 1 .. usessaudrec.logout_date.count
        delete from usessaud
         where logout_date = usessaudrec.logout_date(i);
      vdelcnt := vdelcnt + usessaudrec.logout_date.count;
      exit when rd%NOTFOUND;
    end loop;
    close rd;
    pret_val := vdelcnt;
  end if;
  pret_msg := to_char(pret_val) || ' record(s) deleted.';
exception
  when others then
    pret_val := -1;
    pret_msg := 'Error in CLEANUP_USESSAUD ' || SQLERRM;
end;

USESSAUD_ENABLE
CREATE OR REPLACE PROCEDURE usessaud_enable
as
begin
      settings_write_bool(1, 'database.audit.LogOut', 'Enabled');
      commit;
end;

USESSAUD_DISABLE
CREATE OR REPLACE PROCEDURE usessaud_disable
as
begin
      settings_write_bool(0, 'database.audit.LogOut', 'Enabled');
      commit;
end;

HAS_RSRC_ACCESS
create or replace procedure has_rsrc_access ( 
                        puser_id IN number, 
			prsrc_id IN number, 
			pret_val OUT number,
			pret_msg OUT varchar2,
                        pfirst_run IN number default -1) 
as
  v_parent_rsrc_id       number;
  v_rsrcsec_rsrc_id      number;
  v_access               char(1);
  v_is_superuser        char(1);
begin
  if pfirst_run = -1 then  
    -- Check RSRC Id.
    begin
      select rsrc_id into v_rsrcsec_rsrc_id
      from rsrc
      where rsrc_id = prsrc_id
      and delete_session_id is null;
    exception
      when no_data_found then
        pret_msg := 'Resource Id ' || to_char(prsrc_id) || ' does not exist';
        pret_val := -2;
        return;
    end;

    -- Check for all access
    begin
      select ALL_RSRC_ACCESS_FLAG, p.superuser_flag
      into v_access, v_is_superuser
      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;
    exception
      when no_data_found then
        pret_msg := 'User ' || to_char(puser_id) || ' does not exist';
        pret_val := -1;
        return;
    end;

    if v_access = 'Y' or v_is_superuser = 'Y' then
      pret_val := 1;
      return;
    end if;
  end if;

  pret_val := 0;

  begin
    select r.parent_rsrc_id, rs.rsrc_id
    into v_parent_rsrc_id, v_rsrcsec_rsrc_id
    from rsrc r , rsrcsec rs
    where r.rsrc_id = rs.rsrc_id (+)
    and rs.user_id (+)= puser_id
    and r.rsrc_id = prsrc_id
    and r.delete_session_id is null;
  exception
    when no_data_found then
      pret_msg := 'Resource Id ' || to_char(prsrc_id) || ' does not exist';
      pret_val := -2;
      return;
  end;

  if v_rsrcsec_rsrc_id is not null then
    pret_val := 1;
    return;
  elsif v_parent_rsrc_id is not null then 
    has_rsrc_access(puser_id, v_parent_rsrc_id, pret_val, pret_msg,1);
  end if;

exception 
  when others then
    pret_val := -1;
    pret_msg := SQLERRM;
end;

UPDATE_RSRC_SECURITY
create or replace procedure update_rsrc_security ( 
                        puser_id IN number, 
			psession_id IN number, 
			pcontext_id IN number, 
			pret_val OUT number,
			pret_msg OUT varchar2,
                        prsrc_id IN number default -1) 
as
  cursor rs is
  select rsrc_id 
  from rsrcsec
  where user_id = puser_id
  and delete_session_id is null;

  cursor rchild is
  select rsrc_id 
  from rsrc
  where parent_rsrc_id = prsrc_id
  and delete_session_id is null;

  v_access               char(1);
  v_is_superuser        char(1);
begin
  if prsrc_id = -1 then  
    delete from upklist 
    where session_id = psession_id and context_id = pcontext_id;

    -- Check for all access
    begin
      select ALL_RSRC_ACCESS_FLAG, p.superuser_flag
      into v_access, v_is_superuser
      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;
    exception
      when no_data_found then
        pret_msg := 'User ' || to_char(puser_id) || ' does not exist';
        pret_val := -1;
        rollback;
        return;
    end;

    if v_access = 'Y' or v_is_superuser = 'Y' then
      pret_val := 1;
      return;
    end if;

    for rs_rec in rs loop
      update_rsrc_security ( puser_id, psession_id, pcontext_id, pret_val, pret_msg, rs_rec.rsrc_id );
    end loop;

  else
    insert into upklist (session_id, context_id, pk_id ) 
    values ( psession_id, pcontext_id, prsrc_id);

    for rchild_rec in rchild loop
      update_rsrc_security ( puser_id, psession_id, pcontext_id, pret_val, pret_msg, rchild_rec.rsrc_id );
      if pret_val <> 0 then
        rollback;
        return;
      end if;
    end loop;
  end if;


  -- TODO: Do the recursive work

  pret_val := 0;  
exception 
  when others then
    pret_val := -1;
    pret_msg := SQLERRM;
    rollback;
end;

GET_PRIMARY_KEY
CREATE OR REPLACE PROCEDURE get_primary_key
	(tab_name varchar2, key_cnt OUT number, pk1 OUT varchar2 , pk2 OUT varchar2
         , pk3 OUT varchar2 , pk4 OUT varchar2)
as
  vkey_name varchar2(30);
begin
  /* BKD - For performance I'm breaking this into separate queries and using the 
     constraint name directly.  Currently GCHANGE and RFOLIO */
  if tab_name != 'GCHANGE' and tab_name != 'RLFOLIO' then
    vkey_name := 'PK_' || tab_name;
  else
    vkey_name := 'PK_' || tab_name || '_ID';
  end if;

  select max(position) into key_cnt
  from user_cons_columns
  where constraint_name = vkey_name;

  if key_cnt = 1 then
    SELECT column_name into pk1
    from user_cons_columns
    where constraint_name = vkey_name and position = 1;
  elsif key_cnt = 2 then
    SELECT uc1.column_name, uc2.column_name INTO pk1,pk2
    from user_cons_columns uc1, user_cons_columns uc2
    where uc1.constraint_name = vkey_name and uc1.position = 1
    and uc1.constraint_name = uc2.constraint_name and uc2.position = 2;
  elsif key_cnt = 3 then
    SELECT uc1.column_name, uc2.column_name, uc3.column_name INTO pk1,pk2,pk3
    from user_cons_columns uc1, user_cons_columns uc2, user_cons_columns uc3
    where uc1.constraint_name = vkey_name and uc1.position = 1
    and uc2.constraint_name = uc1.constraint_name and uc2.position = 2
    and uc3.constraint_name = uc1.constraint_name and uc3.position = 3;
  elsif key_cnt = 4 then
    SELECT uc1.column_name, uc2.column_name, uc3.column_name, uc4.column_name INTO pk1,pk2,pk3,pk4
    from user_cons_columns uc1, user_cons_columns uc2, user_cons_columns uc3, user_cons_columns uc4
    where uc1.constraint_name = vkey_name and uc1.position = 1
    and uc2.constraint_name = uc1.constraint_name and uc2.position = 2
    and uc3.constraint_name = uc1.constraint_name and uc3.position = 3
    and uc4.constraint_name = uc1.constraint_name and uc4.position = 4;
  end if;
end;

CASCADE_DELETE_CHILD
CREATE OR REPLACE PROCEDURE cascade_delete_child
	(ptab_name IN varchar2, pparent_tab_name IN varchar2, pfk1 IN varchar2, pfk2 IN varchar2
	,psubquery IN varchar2, pdelstmt IN varchar2, pupdstmt IN varchar2
	,perrorlevel IN int, pret_val IN OUT number, pret_msg OUT varchar2
        , pmax_to_delete IN number
        ,pparam1 IN varchar2 default null,pparam2 IN varchar2 default null
        ,pkey_cnt IN number default 0)
as
  cursor child 
  is
  select c.table_name, cc1.column_name col1, cc2.column_name col2
  from user_cons_columns cc2, user_cons_columns cc1
  ,user_constraints r, user_constraints c
  where r.owner = c.r_owner and r.constraint_name = c.r_constraint_name
  and r.table_name = ptab_name and r.constraint_type = 'P'
  and cc1.constraint_name = c.constraint_name  and  cc1.position= 1
  and cc2.constraint_name (+) = c.constraint_name  and cc2.position (+) = 2;

  vnew_delstmt       varchar2(4000);
  vnew_subquery      varchar2(4000);
  vsub1              varchar2(4000);
  vnew_updquery      varchar2(4000);
  vis_nullable    boolean;
  vdummy          varchar2(30);
  vcntquery          varchar2(4000);
  vcnt               number;
  vkey_cnt           binary_integer;
  vdel_nullable      boolean;
  vpk_col1           varchar2(30);
  vpk_col2           varchar2(30);
  vpk_col3           varchar2(30);
  vpk_col4           varchar2(30);
begin


  vcntquery := 'select count(*) ' || substr(psubquery,instr(psubquery,'from'),length(psubquery) );

  begin
    if pkey_cnt = 0 then
      execute immediate vcntquery into vcnt;
    elsif pkey_cnt = 1 then
      execute immediate vcntquery into vcnt using pparam1;
    elsif pkey_cnt = 2 then
      execute immediate vcntquery into vcnt using pparam1, pparam2;
    end if;
  exception
    when others then
      pret_msg := 'Error "' || SQLERRM || ' for count statement: ' || vcntquery;
      pret_val := -1;
      return;
  end;

  if vcnt = 0 then   
    return;
  end if;

  vdel_nullable := false;

  if (pparent_tab_name = 'PROJECT') 
    or (pparent_tab_name = 'TASK') 
    or (pparent_tab_name = 'TASKRSRC') 
    or (pparent_tab_name = 'UDFCODE') 
    or (pparent_tab_name = 'USERS' AND ptab_name = 'USESSION') 
    or (pparent_tab_name = 'PROJWBS' AND ptab_name = 'PROJISSU') 
    or (pparent_tab_name = 'PROJWBS' AND ptab_name = 'PROJTHRS') 
    or ( (pparent_tab_name = 'RSRC' OR pparent_tab_name = 'ROLE') 
          AND ( ptab_name = 'TASKRSRC' OR ptab_name = 'TRSRCSUM' )) then
    vdel_nullable := true;
  end if;
  


  vis_nullable := false;

  if pfk1 is not null and pfk2 is null then 
    select nullable into vdummy
    from user_tab_columns
    where table_name = ptab_name 
    and column_name = pfk1;
    if vdummy = 'Y' then
      vis_nullable := true;
    end if ;
  end if;


  if vis_nullable and not vdel_nullable then

    begin
      if pkey_cnt = 0 then
        execute immediate pupdstmt;
      elsif pkey_cnt = 1 then
        execute immediate pupdstmt using pparam1;
      elsif pkey_cnt = 2 then
        execute immediate pupdstmt using pparam1, pparam2;
      end if;
      pret_val := pret_val + SQL%ROWCOUNT;
      if SQL%ROWCOUNT > 0 then
        dbms_output.put_line( to_char(SQL%ROWCOUNT)|| ' FK Rows updated to null for table ' || ptab_name );
      end if;
      return;
    exception
      when others then
        pret_msg := SQLERRM || ' occured on update to null for table ' || ptab_name;
        pret_val := -1;
        return;
    end;

  end if;

  for child_rec in child loop

    if child_rec.col2 is null  then
      vsub1:=child_rec.col1 || ' in (' || psubquery || ')';
    else
      vsub1:='('||child_rec.col1||','||child_rec.col2
                ||') in (' || psubquery || ')';
    end if;


    vnew_delstmt:='delete from ' || child_rec.table_name|| ' where ' || vsub1;
    if perrorlevel > 0 then
      begin
        select table_name into vdummy
        from user_tab_columns
        where table_name = child_rec.table_name
        and column_name = 'DELETE_SESSION_ID';
        vnew_delstmt  :=  vnew_delstmt || ' and delete_session_id is not null';
      exception
        when no_data_found then null;
      end;
    end if;

    vnew_updquery:='update ' || child_rec.table_name||' set ' || child_rec.col1 || '=null where ' || vsub1;

    get_primary_key(child_rec.table_name, vkey_cnt, vpk_col1, vpk_col2, vpk_col3, vpk_col4);

    if vkey_cnt = 1 then
      vnew_subquery := 'select ' || vpk_col1 || ' from ' || child_rec.table_name || ' where ' || vsub1;
    else
      vnew_subquery := 'select ' ||vpk_col1||','||vpk_col2|| ' from ' || child_rec.table_name || ' where ' || vsub1;
    end if;

    cascade_delete_child (child_rec.table_name, ptab_name, child_rec.col1, child_rec.col2, vnew_subquery, vnew_delstmt
                      ,vnew_updquery, perrorlevel, pret_val, pret_msg, pmax_to_delete, pparam1, pparam2, pkey_cnt  );

    if pret_val < 0 then
      return;
    end if;

  end loop;

  /* Handle udfvalues */
  select count(*) into vcnt from udftype where table_name = ptab_name;
  if vcnt > 0 then
    begin
      vnew_delstmt := 'delete from udfvalue';
      vnew_delstmt := vnew_delstmt|| ' where udf_type_id in (select udf_type_id from udftype where table_name = ''' || ptab_name || ''')';
      vnew_delstmt := vnew_delstmt|| ' and fk_id in (' || psubquery || ')';
      if pkey_cnt = 0 then
        execute immediate vnew_delstmt;
      elsif pkey_cnt = 1 then
        execute immediate vnew_delstmt using pparam1;
      elsif pkey_cnt = 2 then
        execute immediate vnew_delstmt using pparam1, pparam2;
      end if;
      pret_val := pret_val + SQL%ROWCOUNT;
      if SQL%ROWCOUNT > 0 then
        dbms_output.put_line( to_char(SQL%ROWCOUNT)|| ' UDF Rows deleted for table ' || ptab_name );
      end if;
    exception
      when others then
        pret_msg := SQLERRM || ' occured on delete UDF for table ' || ptab_name;
        pret_val := -1;
        return;
    end;
  end if;

  begin
    if pkey_cnt = 0 then
      execute immediate pdelstmt;
    elsif pkey_cnt = 1 then
      execute immediate pdelstmt using pparam1;
    elsif pkey_cnt = 2 then
      execute immediate pdelstmt using pparam1, pparam2;
    end if;
    pret_val := pret_val + SQL%ROWCOUNT;
    if SQL%ROWCOUNT > 0 then
      dbms_output.put_line( to_char(SQL%ROWCOUNT)|| ' FK Rows deleted for table ' || ptab_name );
    end if;
    commit;  --Commit the leaf deletes
  exception
    when others then
      pret_msg := SQLERRM || ' occured on delete for table ' || ptab_name;
      pret_val := -1;
      rollback;
      return;
  end;
exception
  when others then
    pret_msg := SQLERRM || ' occured on table ' || ptab_name;
    pret_val := -1;
 end;

CASCADE_DELETE
CREATE OR REPLACE PROCEDURE cascade_delete
    (tab_name varchar2, pk1 varchar2, pret_val OUT number, pret_msg OUT varchar2
     , pmax_to_delete IN number default 999999999
     , pk2 varchar2 default null, pk3 varchar2 default null, pk4 varchar2 default null )
as
  vrows_changed   number;
  vpk_col1        varchar2(30);
  vpk_col2        varchar2(30);
  vpk_col3        varchar2(30);
  vpk_col4        varchar2(30);
  vkey_cnt        binary_integer;
  vsubquery       varchar2(4000);
  vdelstmt        varchar2(4000);
  vsub1           varchar2(4000);
  vdelete_date    date;
  vmin_date       date;
  vdummy          varchar2(255);
begin
  pret_val := 0;

  begin
    select table_name into vdummy
    from user_tables 
    where table_name = tab_name;
  exception
    when no_data_found then
      pret_msg := 'Table ' || tab_name || ' does not exist';
      pret_val := -1;
      return;
  end;

  get_primary_key(tab_name,vkey_cnt,vpk_col1,vpk_col2,vpk_col3,vpk_col4);

  vsub1 := vpk_col1 || ' = :pk1 ';
  if vkey_cnt = 2 then
    vsub1 := vsub1 || ' and ' || vpk_col2 || ' = :pk2 ';
  elsif vkey_cnt = 3 then
    vsub1 := vsub1 || ' and ' || vpk_col2 || ' = :pk2 and ' || vpk_col3 || ' = :pk3 ';
  elsif vkey_cnt = 4 then
    vsub1 := vsub1 || ' and ' || vpk_col2 || ' = :pk2 and ' || vpk_col3 || ' = :pk3 and '
             || vpk_col4 || ' = :pk4';
  end if;

  vdelstmt := 'delete from ' || tab_name || ' where ' || vsub1;

  if vkey_cnt <= 2 then
    if vkey_cnt = 1 then
      vsubquery := 'select ' || vpk_col1 || ' from ' || tab_name || ' where ' || vsub1;
    else
      vsubquery := 'select ' || vpk_col1 ||','|| vpk_col2 || ' from ' || tab_name || ' where ' || vsub1;
    end if;

   -- bug fix 3472   
   if (tab_name = 'USERS' ) then
    delete from gchange where user_id = pk1;
    delete from viewprop where user_id = pk1;
   end if;

    cascade_delete_child ( tab_name, null, null, null, vsubquery, vdelstmt, null, 0,
                         pret_val, pret_msg, pmax_to_delete, pk1, pk2, vkey_cnt );
  else
    begin
      if vkey_cnt = 3 then
        execute immediate vdelstmt using pk1,pk2,pk3;
      else
        execute immediate vdelstmt using pk1,pk2,pk3,pk4;
      end if;
      pret_val := pret_val + SQL%ROWCOUNT;
      if SQL%ROWCOUNT > 0 then
        dbms_output.put_line( to_char(SQL%ROWCOUNT)|| ' FK Rows deleted for table ' || tab_name );
      end if;
    exception
      when others then
        pret_msg := 'Error ' || SQLERRM || ' occured deleted from table ' || tab_name;
        pret_val := -1;
    end;
  end if;
  commit; -- Committing here because child deletes are committed
exception
  when others then
    pret_msg := SQLERRM;
    pret_val := -1;
    rollback;
end;

CLEANUP_LOGICAL_DELETES
CREATE OR REPLACE PROCEDURE cleanup_logical_deletes
		( pret_val OUT number, pret_msg OUT varchar
                 , perrorlevel IN number default 1, pdays IN number default null ) 
as
  cursor del
  is 
  select table_name
  from user_tab_columns
  where column_name = 'DELETE_SESSION_ID'
  and table_name not like 'BIN$%'  --bug fix for oracle 10g (3078)
  order by 1;

  vrows_changed   number;
  vpk1            varchar2(30);
  vpk2            varchar2(30);
  vpk3            varchar2(30);
  vpk4            varchar2(30);
  vkey_cnt        binary_integer;
  vsubquery       varchar2(4000);
  vdelstmt        varchar2(4000);
  vsub1           varchar2(4000);
  vdelete_date    date;
  vmin_date       date;

  vdiff           number;
  vset            varchar2(20);
  curr_time       date;
  vdelete_all     boolean;
  vdelete_thresh  pls_integer;
  vdelete_pct     number;
  vrowcount       pls_integer;
  vdelete_rows    pls_integer;
  vdelete_cnt     pls_integer;
  vmax_to_delete  pls_integer;
  vtmpnum         pls_integer;

begin
  
  vrows_changed := 0;
  pret_val := 0;

  curr_time := sysdate;

  if pdays is null then
    settings_read_string( vset,'database.cleanup.LogicalDelete','KeepInterval','5d');
    get_interval_difference(vset, vdiff);
    vdelete_date := curr_time-vdiff;
  else
    vdelete_date:=curr_time-pdays;
  end if;

  settings_read_bool(vtmpnum,'database.cleanup.LogicalDelete','DeleteAll',0);
  vdelete_all := (vtmpnum=1);
  if vdelete_all then
    vmax_to_delete := 999999999;
  else
    settings_read_number( vmax_to_delete,'database.cleanup.LogicalDelete','MaxRowsToDelete',10000);
  end if;


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

  if vmin_date is null or vmin_date > sysdate then
    vmin_date := sysdate;
  end if;

  if vdelete_date > vmin_date then
    vdelete_date := vmin_date;
  end if;

  for del_rec in del loop

    get_primary_key(del_rec.table_name,vkey_cnt,vpk1,vpk2,vpk3,vpk4);

    /* Only process tables with 1 or 2 keys */

    if vkey_cnt <= 2 then

      vsub1 := 'delete_session_id is not null and update_date <= to_date(''' 
             || to_char(vdelete_date,'mm/dd/yyyy hh24:mi:ss') 
             || ''',''mm/dd/yyyy hh24:mi:ss'')'
             || ' and delete_session_id not in (select session_id from usession where delete_session_id is null)'
             || ' and delete_session_id >= 0'	;

      if vpk2 is null then
        vsubquery := 'select ' || vpk1 || ' from ' || del_rec.table_name || ' where ' || vsub1;      
      else
        vsubquery := 'select ' || vpk1 ||','||vpk2 || ' from ' || del_rec.table_name || ' where ' || vsub1;      
      end if;

      vdelstmt := 'delete from ' || del_rec.table_name || ' where ' || vsub1;

      cascade_delete_child(del_rec.table_name,null,null,null, vsubquery, vdelstmt, null, perrorlevel
                         , pret_val, pret_msg, vmax_to_delete);
      if pret_val < 0 then
        return;
      end if;
      vrows_changed := vrows_changed + pret_val;
      if vrows_changed >= vmax_to_delete then
        exit;
      end if;
    end if;
  end loop;

  dbms_output.put_line('Total Rows Deleted/Changed: ' || to_char(vrows_changed ) );
exception
  when others then
    pret_msg := SQLERRM;
    pret_val := -1;
end;

HQUERY_PROCESS_REC
CREATE OR REPLACE PROCEDURE HQUERY_PROCESS_REC 
(psession_id number, pcontext_id number,orig_pk number, pk number,pname varchar2,
counter IN OUT number, plevels number,pret_val OUT number,pret_msg OUT varchar2,
ptable_name varchar2, pkey_column varchar2,pname_column varchar2,pfilter varchar2)
as
  vsql           varchar2(1000);
  vparent_id     number;
  vname          varchar2(255);
  vcheck         number;
begin
   
    select count(*) into vcheck
    from hqdata
    where session_id = psession_id and context_id = pcontext_id
    		and fk_id = pk and value=orig_pk;

  if vcheck = 0 then
    EXECUTE IMMEDIATE 'INSERT INTO hqdata(session_id,context_id,fk_id,value) values(:a,:b,:c,:d)' 
  			USING psession_id, pcontext_id, pk, orig_pk;
  end if;
  dbms_output.put_line('entering ' || to_char(pk) ||','||pname ||' cnt=' || to_char(counter) );

  if upper(ptable_name) = 'PROJWBS' then
    vsql :=  'select decode(proj_node_flag,''Y'',null,parent_' || pkey_column || ')'
            || ',' || pname_column  ||  ' from ' || ptable_name
            || ' where ' || pkey_column || ' = :pkid' || ' and ' ||pfilter;
  else
    vsql :=  'select parent_' || pkey_column || ',' || pname_column
          ||  ' from ' || ptable_name
          || ' where ' || pkey_column || ' = :pkid';
  end if;
  begin
    EXECUTE IMMEDIATE vsql INTO vparent_id, vname USING pk;
  exception
    when no_data_found then
      dbms_output.put_line('NO DATA FOUND');
      vparent_id := null;
  end;
  dbms_output.put_line ('select parent values: ' || to_char(vparent_id) ||','|| vname); 

  if vparent_id is not null then
    hquery_process_rec (psession_id,pcontext_id,orig_pk,vparent_id,vname,counter,plevels,pret_val,pret_msg
                        ,ptable_name,pkey_column,pname_column,pfilter);
    counter:=counter+1;
  else
    counter:=0;
  end if;
  dbms_output.put_line('Spin out count = ' || to_char(counter) ||',pname=>' || pname || ',name=>' ||vname );

  select count(*) into vcheck
  from hquery
  where session_id = psession_id and context_id = pcontext_id
  and fk_id = pk;

  if vcheck = 0 then
    if counter = 0 then
      dbms_output.put_line('count is 0');
      insert into hquery (session_id,context_id,fk_id,order_value,order_ids)
      values (psession_id,pcontext_id,pk,vname,pk);
    else
      dbms_output.put_line('count is >0');

      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 = vparent_id;

      if counter < plevels then
        vsql := 'update hquery set order_value = order_value||chr(1)||:ord_val,order_ids=order_ids||chr(1)||:order_id '
              ||'where session_id = :sess_id and context_id = :con_id '
              ||'and fk_id = :fkid';
        execute immediate vsql using vname, pk, psession_id, pcontext_id, pk;
       
      end if;
      
    end if;
  end if;
end;

HQUERY_POPULATE
CREATE OR REPLACE PROCEDURE HQUERY_POPULATE
(psession_id number, pcontext_id number,ptable_name varchar2, 
pkey_column varchar2,pname_column varchar2,pfilter varchar2,
plevels number, pret_val OUT number,pret_msg OUT varchar2)
as
   TYPE PtabCur IS REF CURSOR;
   ptab_cv   PtabCur;
   vsql     varchar2(1000);
   vpk       number;
   vname     varchar2(255);
   vcnt      number;
begin
  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;
  
  vsql := 'select ' || pkey_column || ',' || pname_column
          ||  ' from ' || ptable_name
          || ' where ' || pfilter;
  open ptab_cv for vsql;
  LOOP
    FETCH ptab_cv INTO vpk,vname;
    EXIT WHEN ptab_cv%NOTFOUND;  
    vcnt := 0;
    dbms_output.put_line('Process id=' || to_char(vpk)||','||vname);
    hquery_process_rec (psession_id,pcontext_id,vpk,vpk,vname,vcnt,plevels,pret_val,pret_msg
                        ,ptable_name,pkey_column,pname_column,pfilter);
  END LOOP;
  close ptab_cv;
end;

CHECK_SYS_PRIVS
CREATE OR REPLACE PROCEDURE CHECK_SYS_PRIVS
	( pret_val OUT number, pret_msg OUT varchar)
as
  cnt number;
begin
  begin
    execute immediate 'SELECT count(*) from v$transaction' 
		into cnt;
    pret_val := 1;
  exception
    when others then
      pret_msg := SQLERRM;
      pret_val := 0;
  end;
end;

HAS_TIMESHEETS
CREATE OR REPLACE PROCEDURE has_timesheets
       (pwbs_id number, pret_val OUT number, pret_msg OUT varchar2)
as
  cursor child_wbs 
  is select wbs_id
     from projwbs
     where parent_wbs_id = pwbs_id;

  vproj_node_flag         char(1);
  vproj_id                number;
  vproject_flag           char(1);
  vcnt                    number;
begin
  pret_val := 0;

  begin
    select pw.proj_node_flag, p.proj_id, p.project_flag
    into vproj_node_flag, vproj_id, vproject_flag
    from projwbs pw, project p
    where wbs_id = pwbs_id
    and pw.proj_id = p.proj_id;
  exception
    when no_data_found then
      pret_val := -1;
      pret_msg := 'WBS id ' || to_char(pwbs_id) || ' does not exist';
  end;

  if vproj_node_flag = 'Y' and vproject_flag = 'Y' then
    select count(*) into vcnt
    from rsrchour
    where proj_id = vproj_id
    and task_ts_flag = 'N';

    if vcnt > 0 then
      pret_val := 1;
    end if;
  else

    select count(*) into vcnt
    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 vcnt > 0 then
      pret_val := 1;
      return;
    end if;

    for child_wbs_rec in child_wbs loop
      has_timesheets(child_wbs_rec.wbs_id, pret_val , pret_msg );
      if pret_val = 1 then
        return;
      end if;
    end loop;

  end if;
end;

SYNC_UDFTYPE
create or replace procedure sync_udftype ( pret_val OUT number, pret_msg OUT varchar )
as
  cursor ut is
    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);

  vkeys          number;
  vstartkey      number;
  vcnt           number;
  vexisting_udf_type_id number;
  vexisting_data_type varchar2(20);
begin
  select count(*) into pret_val 
  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);

  vkeys := pret_val;

  select count(*) + pret_val into pret_val
  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 then
    return;
  end if;

  -- Get nextkeys for inserts
  getnextkeys('udftype_udf_type_id', vkeys, vstartkey);
  commit;

  -- 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)
                       );

  dbms_output.put_line ( 'Deleted ' || to_char(SQL%ROWCOUNT) || ' row(s)');

  for ut_rec in ut loop

    select count(*) into vcnt
    from udftype 
    where table_name = 'PROCITEM' 
    and udf_type_name = ut_rec.udf_type_name;

  DBMS_OUTPUT.PUT_LINE (VCNT);

    if vcnt = 0 then
      insert into udftype (udf_type_id, table_name, udf_type_name, udf_type_label,
                         logical_data_type, super_flag, udf_code_short_len )
      select vstartkey, 'PROCITEM', udf_type_name, udf_type_label,
                         logical_data_type, super_flag, udf_code_short_len
      from udftype
      where udf_type_id = ut_rec.udf_type_id;
      vstartkey := vstartkey + 1;
    elsif vcnt > 1 then
      pret_msg := 'Too many values for type ' || ut_rec.udf_type_name;
      pret_val := -1;
      return;
    else
      dbms_output.put_line (' for update ');
      select udf_type_id, logical_data_type
      into vexisting_udf_type_id, vexisting_data_type
      from udftype 
      where table_name = 'PROCITEM' 
      and udf_type_name = ut_rec.udf_type_name;

      if ut_rec.logical_data_type <> vexisting_data_type then
        delete from udfvalue where udf_type_id = vexisting_udf_type_id;
      end if;

      update udftype
      set udf_type_label = ut_rec.udf_type_label, logical_data_type = ut_rec.logical_data_type
          , super_flag = ut_rec.super_flag
      where udf_type_id = vexisting_udf_type_id;

    end if;

  end loop;

  commit;
exception
  when others then
    pret_val := -1;
    pret_msg := SQLERRM;
    rollback;
end;

USESSION_CLEANUP
CREATE OR REPLACE PROCEDURE usession_cleanup
  (psession_id IN NUMBER DEFAULT NULL
   ,pwhere_clause IN varchar2 DEFAULT NULL
   ,pmark_delete IN VARCHAR2 DEFAULT 'Y'
   ,pret_val OUT NUMBER
   ,pret_msg OUT varchar2 )
AS
  cursor todel 
  is select pk1 from pkxref 
  where system_id = userenv('sessionid')
  and context_name = 'UC';
  vsql varchar2(2000);
BEGIN
  pret_val := 0;
  if psession_id is null and pwhere_clause is null then
    pret_val := -1;
    pret_msg := 'Must specify psession_id or pwhere_clause';
    return;
  end if;
  delete from pkxref where system_id=userenv('sessionid') and context_name = 'UC';
  if psession_id is not null then
    insert into pkxref (system_id,context_name,pk1)
    values(userenv('sessionid'),'UC',psession_id);
  else
    vsql := 'insert into pkxref (system_id,context_name,pk1) '
         || 'select userenv(''sessionid''),''UC'', session_id '
         || 'from usession where ' || pwhere_clause;
    execute immediate vsql;
  end if;

  for todel_rec in todel loop
    if pmark_delete = 'Y' then
      update usession set delete_session_id = 0, delete_date = sysdate
      where session_id = todel_rec.pk1;
    else
      delete from upklist where session_id = todel_rec.pk1;
      delete from projshar where session_id = todel_rec.pk1;
      delete from usession where session_id = todel_rec.pk1;
    end if;
  end loop;

  delete from pkxref where system_id=userenv('sessionid') and context_name = 'UC';
exception
  when others then
    pret_msg := SQLERRM;
    pret_val := -1;
END;

USESSION_CLEAR_LOGICAL_DELETES
CREATE OR REPLACE PROCEDURE usession_clear_logical_deletes
  (pret_val OUT number , pret_msg OUT varchar2 )
AS
  cursor todel 
  is select pk1 from pkxref 
  where system_id = userenv('sessionid')
  and context_name = 'UC';
BEGIN
  pret_val := 0;
  delete from pkxref where system_id=userenv('sessionid') and context_name = 'UC';

  insert into pkxref (system_id,context_name,pk1)
  select userenv('sessionid'),'UC', session_id
  from usession
  where delete_session_id is not null;

  for todel_rec in todel loop
    delete from upklist where session_id = todel_rec.pk1;
    delete from projshar where session_id = todel_rec.pk1;
    delete from usession where session_id = todel_rec.pk1;
    pret_val := pret_val + 1;
  end loop;

  delete from pkxref where system_id=userenv('sessionid') and context_name = 'UC';
exception
  when others then
    pret_msg := SQLERRM;
    pret_val := -1;
END;

USESSION_CLEANUP_EXPIRED
CREATE OR REPLACE PROCEDURE usession_cleanup_expired
  (pret_val OUT number , pret_msg OUT varchar2 )
AS
  vset varchar2(20);
  diff number;
  delete_time date;
  date_str varchar2(30);
begin
  pret_val := 0;
  settings_read_string(vset,'database.cleanup.Usession','ExpiredSessionTimeout','2h');
  get_interval_difference(vset,diff);
  delete_time:=sysdate-diff;
  date_str := to_char(delete_time,'yyyy-mm-dd hh24:mi:ss');
  usession_cleanup (null,'last_active_time < to_date('''
			 || date_str || ''',''yyyy-mm-dd hh24:mi:ss'')' 
                         || ' and nvl(long_operation_flag,''Y'') <> ''Y'''
			, 'Y', pret_val, pret_msg);
  settings_read_string(vset,'database.cleanup.Usession','ExpiredLongSessionTimeout','12h');
  get_interval_difference(vset,diff);
  delete_time:=sysdate-diff;
  date_str := to_char(delete_time,'yyyy-mm-dd hh24:mi:ss');
  usession_cleanup (null,'last_active_time < to_date('''
			 || date_str || ''',''yyyy-mm-dd hh24:mi:ss'')' 
                         || ' and nvl(long_operation_flag,''Y'') = ''Y'''
			, 'Y', pret_val, pret_msg);

exception
  when others then
    pret_msg := SQLERRM;
    pret_val := -1;
end;

USER_DEFINED_BACKGROUND
CREATE OR REPLACE PROCEDURE user_defined_background
is
begin
  null;  
  -- THIS PROCEDURE INTENTIONALLY LEFT BLANK
  -- Procedure is called by data_monitor.  Customer 
  -- specific code can go here.
end;

CLEANUP_OLD_DATA
CREATE OR REPLACE PROCEDURE cleanup_old_data
is
begin
  null;  
  -- 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
end;

BGPLOG_CLEANUP
CREATE OR REPLACE PROCEDURE bgplog_cleanup
(pret_val OUT number, pret_msg OUT varchar2)
IS
  vset varchar2(20);
  vdiff number(20,6);
  vdelete_time date;
  vdelcnt pls_integer;
begin
  settings_read_string(vset,'database.cleanup.BackGroundProcessLog','KeepInterval','5d');
  get_interval_difference(vset, vdiff);
  vdelete_time:=sysdate-vdiff;
  delete from bgplog where log_time < vdelete_time;
  vdelcnt := SQL%ROWCOUNT;
  pret_val:=vdelcnt;
end;

PROJECT_COPY_LIST
CREATE OR REPLACE PROCEDURE PROJECT_COPY_LIST(PROJ_LIST    VARCHAR2,
                                              dest_wbs_id  number,
                                              copy_bit     varchar2,
                                              pret_val     OUT number,
                                              pret_msg     OUT varchar2,
                                              pscenario_id IN number DEFAULT null,
                                              ppfolio_id   IN number DEFAULT null,
                                              psession_id  IN number DEFAULT null) as

  p utils.properties;
begin
  if substr(copy_bit, 23, 1) = '1' and pscenario_id is null
  then
    pret_val := -1;
    pret_msg := 'Must specify scenario_id for scenario copy';
    return;
  end if;
  utils.util_initproperties;
  utils.util_setproperties('proj_list', PROJ_LIST);
  utils.util_setproperties('dest_wbs_id', dest_wbs_id);
  utils.util_setproperties('copy_bit', copy_bit);
  utils.util_setproperties('pscenario_id', pscenario_id);
  utils.util_setproperties('ppfolio_id', ppfolio_id);
  utils.util_setproperties('psession_id', psession_id);
  p := utils.util_getproperties;
  project_copy_pkg.copy(p);
  p := utils.util_getproperties;
  utils.util_getintvalue(p, 'pret_val', pret_val);
  utils.util_getstrvalue(p, 'new_proj_list', pret_msg);
  dbms_output.put_line(pret_msg);
exception
  when others then
    raise;
end;

ADD_DATABASE_JOB
create or replace PROCEDURE ADD_DATABASE_JOB(pjob_name IN varchar2,
                                               pcommand  IN varchar2,
                                               status    OUT varchar2,
                                               pinterval IN varchar2,
                                               precreate IN boolean default FALSE,
                                               prun      IN boolean default TRUE) is
  time_int          pls_integer;
  time_code         char(1);
  diff_str          varchar(255);
  pjob_name_created varchar(255);
begin
  dbms_output.put_line('Creating job ' || pjob_name);
  time_code := upper(substr(pinterval, length(pinterval), 1));

  begin
    time_int := to_number(substr(pinterval, 1, length(pinterval) - 1));
  exception
    when others then
      null;
  end;

  if time_code = 'S' then
    diff_str := 'SYSTIMESTAMP + ' || to_char(time_int) || '/86400';
  elsif time_code = 'M' then
    diff_str := 'SYSTIMESTAMP + ' || to_char(time_int) || '/1440';
  elsif time_code = 'H' then
    diff_str := 'SYSTIMESTAMP + ' || to_char(time_int) || '/24';
  elsif time_code = 'D' then
    diff_str := 'SYSTIMESTAMP + ' || to_char(time_int);
  else
    diff_str := pinterval;
  end if;
  begin
  
    select job_name
      into pjob_name_created
      from user_scheduler_jobs
     where upper(job_action) = upper(pcommand);
  exception
    when no_data_found then
      pjob_name_created := null;
  end;
  if precreate and pjob_name_created is not null then
    DBMS_SCHEDULER.drop_job(job_name => pjob_name_created, force => TRUE);
    dbms_output.put_line('Existing job with same name removed');
  elsif not precreate and pjob_name_created is not null then
    status := 'Job Already Exists';
    return;
  end if;
  DBMS_SCHEDULER.create_job(job_name        => pjob_name,
                            job_type        => 'STORED_PROCEDURE',
                            job_action      => pcommand,
                            start_date      => SYSTIMESTAMP + 2 / 1440,
                            repeat_interval => diff_str,
                            enabled         => TRUE);

  pjob_name_created := pjob_name;
  status            := 'New Job Created (' || pjob_name || ')';
  if prun then
    DBMS_SCHEDULER.run_job(job_name            => pjob_name,
                           use_current_session => FALSE);
  end if;
exception

  when others then
    dbms_output.put_line('Failed to add Database Job,Check the settings table for valid interval values for dbms_scheduler');
end;

DELETE_PROJECT_CODE_SCENARIOS
CREATE OR REPLACE PROCEDURE delete_project_code_scenarios 
	(pproj_catg_type_id IN number ,pret_val OUT number
	,pret_msg OUT varchar2 )
as
  type scen_list_type is table of number index by pls_integer;
  cursor scen 
  is
  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 = pproj_catg_type_id
  order by 1;
  
  vscenlist     scen_list_type;
  vdelcnt	pls_integer;
  vsql		varchar2(255);
  vproj_id	number;
  vret 		pls_integer;
  vmsg 		varchar2(4000);
  vscencnt      pls_integer;
  last_scen     number;
  i 		pls_integer;
begin
  vdelcnt := 0;
  vscencnt := 0;

  last_scen := 0;
  for screc in scen loop
    cascade_delete('PROJECT',screc.proj_id,pret_val,pret_msg );
    if pret_val < 0 then
      return;
    end if;
    if last_scen <> screc.scenario_id then
      vscencnt := vscencnt +1;
      vscenlist(vscencnt) := screc.scenario_id;
      last_scen := screc.scenario_id;
    end if;
    vdelcnt:=vdelcnt+1;
  end loop;

  if vscenlist.Count > 0 then
    for i in vscenlist.First..vscenlist.Last loop
      delete from scenproj where scenario_id = vscenlist(i);
      delete from scenuser where scenario_id = vscenlist(i);
      delete from scenario where scenario_id = vscenlist(i);
    end loop;
  end if;

  pret_val := 0;
  pret_msg := 'Deleted ' || to_char(vdelcnt) || ' project(s)'  ;
end;

INITIALIZE_BACKGROUND_PROCS
CREATE OR REPLACE PROCEDURE initialize_background_procs is
  vset   varchar2(255);
  status varchar2(2000);
begin
  settings_read_string(vset, 'database.background.Symon', 'Interval', 'XX');
  if vset = 'XX' then
    vset := '1m';
    settings_write_string(vset, 'database.background.Symon', 'Interval');
  end if;
  add_database_job(pjob_name => 'Symon',
                   pcommand  => 'system_monitor',
                   status    => status,
                   pinterval => vset,
                   precreate => TRUE,
                   prun      => TRUE);
  dbms_output.put_line(status);
  settings_read_string(vset, 'database.background.Damon', 'Interval', 'XX');
  if vset = 'XX' then
    vset := 'FREQ=WEEKLY;BYDAY=SAT';
    settings_write_string(vset, 'database.background.Damon', 'Interval');
  end if;
  add_database_job(pjob_name => 'Damon',
                   pcommand  => 'data_monitor',
                   status    => status,
                   pinterval => vset,
                   precreate => TRUE,
                   prun      => TRUE);
  dbms_output.put_line(status);
end;

DROP_BACKGROUND_PROCS
CREATE OR REPLACE PROCEDURE drop_background_procs
is
  procedure drop_job ( pcommand  varchar2)
  as
    vjob_id 	number;
  begin
    begin
      select job into vjob_id
      from user_jobs
      where upper(what) = upper(pcommand);
    exception
      when no_data_found then
        return;
    end;
    dbms_job.remove(vjob_id);
    dbms_output.put_line('Dropped job ' || pcommand || '(id='
                          || to_char(vjob_id) || ')');
  end;
BEGIN
  drop_job('system_monitor;');
  drop_job('data_monitor;');
END;

PRMAUDIT_CLEANUP
CREATE OR REPLACE PROCEDURE PRMAUDIT_CLEANUP
(pret_val OUT number, pret_msg OUT varchar2)
IS
  vset varchar2(20);
  vdiff number(20,6);
  vdelete_time date;
  vdelcnt pls_integer;
  vtmpnum pls_integer;
  vauditstatus boolean;
begin
  settings_read_bool(vtmpnum,'database.cleanup.auditing','Enabled',1);
  vauditstatus := (vtmpnum=1);	
  if vauditstatus then 
  settings_read_string(vset,'database.cleanup.auditing','KeepInterval','30d');
  get_interval_difference(vset, vdiff);
  vdelete_time:=sysdate-vdiff;
  delete from PRMAUDIT where audit_date < vdelete_time;
  vdelcnt := SQL%ROWCOUNT;
  pret_val:=vdelcnt;
  end if;
end;

PV_LOGIN
create or replace procedure pv_login
(puser_id number, pwbs_list OUT varchar2,pret_val OUT number ,pret_msg OUT varchar2 )
as
  TYPE WbsListType IS TABLE of NUMBER INDEX BY BINARY_INTEGER;
  WbsList WbsListType;

  cursor proj 
  is
  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)
  order by 1;

  vlist varchar2(32000);
  i pls_integer;
  psession_id number;
begin
  select userenv('sessionid') into psession_id from dual;
  vlist := null;
  i := 1;
  for proj_rec in proj loop
    if vlist is null then
      vlist := proj_rec.wbs_id;
    else
      vlist := vlist || ',' || to_char(proj_rec.wbs_id);
    end if;
    WbsList(i) := proj_rec.wbs_id;
    i := i + 1;
  end loop;
  if length(vlist) > 4000 then
    pwbs_list:=null;
    delete from pkxref where system_id = psession_id and context_name = 'PVROOT';
    for i in WbsList.FIRST..WbsList.COUNT loop
      insert into pkxref (system_id,context_name,pk1) values (psession_id,'PVROOT',WbsList(i));
    end loop;
    pret_val := psession_id;
    pret_msg := 'node list returned in pkxref table';
  else
    pwbs_list := vlist;
    pret_msg := 'node list returned in variable';
    pret_val := 0;
  end if;
end;

SQL_TRACE_USER_ENABLE
CREATE OR REPLACE PROCEDURE SQL_TRACE_USER_ENABLE
(puser_name      varchar2,papp_name       varchar2,poperation_name varchar2,ptrace_level    number
,plocation       varchar2 default null,pret_val        OUT number,pret_msg        OUT varchar)
as
  puser_id number;
  vcnt     pls_integer;
begin
  select user_id into puser_id from users where user_name = puser_name;
  if puser_id is not null then
    select count(*)
      into vcnt
      from uevntreg
     where user_id = puser_id
       and app_name = papp_name
       and operation_name = poperation_name
       and action_name = 'TRACE';
    if vcnt = 0 then
      insert into uevntreg
      values
        (puser_id,
         papp_name,
         poperation_name,
         'TRACE',
         ptrace_level,
         puser_name,
         plocation);
    else
      update uevntreg
         set action_level = ptrace_level, event_reg_data = plocation
       where user_id = puser_id
         and app_name = papp_name
         and operation_name = poperation_name
         and action_name = 'TRACE';
    end if;
  end if;
exception
  when no_data_found then
    pret_val := -1;
    pret_msg := 'User ' || puser_name ||
                ' does not exist in the users table';
  when others then
    pret_val := SQLCODE;
    pret_msg := SQLERRM;
end;

SQL_TRACE_USER_DISABLE
CREATE OR REPLACE PROCEDURE SQL_TRACE_USER_DISABLE
(puser_name  varchar2,papp_name  varchar2,poperation_name varchar2,pret_val  OUT number,pret_msg OUT varchar)
as
begin
  if puser_name is null then
    return;
  elsif papp_name is null then
    delete from uevntreg where user_name = puser_name;
  elsif poperation_name is null then
    delete from uevntreg
     where user_name = puser_name
       and app_name = papp_name;
  else
    delete from uevntreg
     where user_name = puser_name
       and app_name = papp_name
       and operation_name = poperation_name
       and action_name = 'TRACE';
  end if;
  commit;
exception
  when others then
    pret_val := SQLCODE;
    pret_msg := SQLERRM;
end;

SQL_TRACE_START
CREATE OR REPLACE PROCEDURE SQL_TRACE_START
(trace_level in int,puser_name  in varchar2,poperation  in varchar2,plocation   in string default null)
as
  sqlstr varchar2(255);
begin
  sqlstr := 'ALTER SESSION SET timed_statistics=true';
  execute immediate sqlstr;
  sqlstr := 'ALTER SESSION SET tracefile_identifier =' || puser_name || '_' ||
            replace(poperation, ' ', '');
  execute immediate sqlstr;
  sqlstr := 'ALTER session SET events ' || '''' ||
            '10046 trace name context forever,level ' || trace_level || '''';
  execute immediate sqlstr;
end;

SQL_TRACE_END
CREATE OR REPLACE PROCEDURE SQL_TRACE_END
(trace_level number)
as
  sqlstr varchar2(255);
begin
  sqlstr := 'ALTER session SET events ' || '''' ||
            '10046 trace name context off' || '''';
  execute immediate sqlstr;
end;

PRIMAVERA_EVENT
CREATE OR REPLACE PROCEDURE PRIMAVERA_EVENT
(PAPP_NAME IN VARCHAR2, POPERATION IN VARCHAR2, PACTION IN VARCHAR2
,PUSER_ID IN NUMBER DEFAULT NULL, PUSER_NAME IN VARCHAR2 DEFAULT NULL, PSESSION_ID IN NUMBER DEFAULT NULL
,PEVENT_DATA IN VARCHAR DEFAULT NULL)
AS
  v_long_running 		boolean;
  vcnt           number;
  sqlstr         varchar2(255);
  uevntregrec    uevntreg%ROWTYPE;
  vusername      varchar2(32);
  errorstr       varchar2(4000);
  vapp_name      varchar2(10);
BEGIN
  -- Set Oracle Application information
  if puser_name is not null then
    dbms_session.set_identifier(puser_name);
  end if;
  -- shorten app name for client_info (max 64 bytes)
  if lower(papp_name) = 'project management' then
    vapp_name := 'PM';  
  else
    vapp_name := substr(papp_name,1,10);
  end if;
  dbms_application_info.set_client_info
      ( vapp_name||','||puser_name
        ||'('||to_char(psession_id)||'): ' 
        || paction||' '||poperation||'['||nvl(pevent_data,'')||']'
      );
  dbms_application_info.set_module(papp_name,CASE WHEN paction='END' THEN null ELSE poperation END);

  if psession_id is not null then
    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(substr(poperation,1,7)) = 'PUBLISH'
       OR upper(substr(poperation,1,6)) = 'EXPORT'
       OR upper(substr(poperation,1,6)) = 'IMPORT' then
      v_long_running := true;
    end if;   

    if v_long_running then
      if PACTION = 'BEGIN' then
        update usession 
          set operation_name = poperation
             ,operation_start_date = sysdate
             ,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 if;
    end if;
  end if;
  vcnt := 0;
  select count(*)
    into vcnt
    from uevntreg
   where user_id = puser_id
     and app_name = papp_name
     and operation_name = poperation
     and action_name = 'TRACE';
  if vcnt = 1 then
    select *
      into uevntregrec
      from uevntreg
     where user_id = puser_id
       and app_name = papp_name
       and operation_name = poperation
       and action_name = 'TRACE';
    if uevntregrec.user_name is null then
      select user_name into vusername from users where user_id = puser_id;
    else
      vusername := uevntregrec.user_name;
    end if;
    if paction = 'BEGIN' then
      sql_trace_start(uevntregrec.action_level,
                      vusername,
                      poperation,
                      null);
    elsif paction = 'END' then
      sql_trace_end(uevntregrec.action_level);
    end if;
  end if;
exception
  when others then
    if PSESSION_ID <> -99 then
      errorstr := substr('AppName-' || papp_name || '-' || 'Operation-' ||
                         poperation || '-' || 'UserId-' || puser_id ||
                         '-SessionId-' || psession_id || '-' || SQLERRM,
                         1,
                         4000);
    
    else
      errorstr := substr('AppName-' || papp_name || '-' || 'Operation-' ||
                         poperation || '-' || 'UserId-' || puser_id || '-' ||
                         SQLERRM,
                         1,
                         4000);
    end if;
    bgp_write_to_log('PRIMAVERA_EVENT', errorstr, 'ERROR');
END;

PROJECT_COPY_BASELINE
CREATE OR REPLACE PROCEDURE PROJECT_COPY_BASELINE(SRC_PROJ_ID     NUMBER,
                                                  base_proj_id    NUMBER,
                                                  ptarget_proj_id NUMBER DEFAULT null,
                                                  copy_bit        varchar2,
                                                  pret_val        OUT number,
                                                  pret_msg        OUT varchar2,
                                                  ppfolio_id      IN number DEFAULT null,
                                                  psession_id     IN number DEFAULT null) as
  vtarget_wbs_id      pls_integer;
  vtarget_proj_id     pls_integer;
  is_project_baseline varchar2(5) := 'false';
  vsum_base_proj_id   pls_integer;
  vcnt                pls_integer;
  bcopy_bit           varchar2(24) := '0';
  default_copy_bit    varchar2(24) := '111111111111111111101101';
  p                   utils.properties;
begin

  if src_proj_id is NULL or base_proj_id is NULL
  then
    pret_val := -1;
    pret_msg := 'Must specify source and its  baseline project to copy';
    return;
  end if;
  if copy_bit is null
  then
    bcopy_bit := default_copy_bit;
  elsif length(copy_bit) < 24
  then
    bcopy_bit := copy_bit || substr(default_copy_bit, length(copy_bit) + 1);
  elsif substr(copy_bit, 24, 1) <> '1'
  then
    bcopy_bit := substr(copy_bit, 1, 23) || '1';
  else
    bcopy_bit := copy_bit;
    if substr(bcopy_bit, 19, 1) <> 0 and substr(bcopy_bit, 24, 1) <> 0
    then
      pret_val := -1;
      pret_msg := 'Can not copy as baseline project for baseline project';
    end if;
  end if;
  begin
    select sum_base_proj_id
      into vsum_base_proj_id
      from project
     where proj_id = src_proj_id;
    if vsum_base_proj_id = base_proj_id
    then
      is_project_baseline := 'TRUE';
    end if;
  exception
    when no_data_found then
      pret_val := -1;
      pret_msg := 'Proj id: ' || src_proj_id || ' does not exist';
      return;
  end;
  begin
    if ptarget_proj_id is null
    then
      select target_proj_id, target_wbs_id
        into vtarget_proj_id, vtarget_wbs_id
        from tprojmap
       where source_proj_id = src_proj_id
         and session_id = psession_id;
    else
      select proj_id, wbs_id
        into vtarget_proj_id, vtarget_wbs_id
        from projwbs
       where proj_id = ptarget_proj_id
         and proj_node_flag = 'Y';
      select count(1)
        into vcnt
        from TPROJMAP
       where source_proj_id = src_proj_id
         and session_id = psession_id;
      if vcnt = 0
      then
        insert into TPROJMAP
        values
          (psession_id, 1, src_proj_id, vtarget_proj_id, vtarget_wbs_id);
      else
        update TPROJMAP
           set target_proj_id = vtarget_proj_id,
               target_wbs_id  = vtarget_wbs_id
         where source_proj_id = src_proj_id
           and session_id = psession_id;
      end if;
    end if;
  exception
    when no_data_found then
      pret_val := -1;
      pret_msg := 'Target Proj id for Proj id: ' || src_proj_id ||
                  ' does not exist';
      return;
  end;

  utils.util_initproperties;
  utils.util_setproperties('src_proj_id', src_proj_id);
  utils.util_setproperties('base_proj_id', base_proj_id);
  utils.util_setproperties('dest_proj_id', vtarget_proj_id);
  utils.util_setproperties('dest_wbs_id', vtarget_wbs_id);
  utils.util_setproperties('is_project_baseline', is_project_baseline);
  utils.util_setproperties('copy_bit', bcopy_bit);
  utils.util_setproperties('ppfolio_id', ppfolio_id);
  utils.util_setproperties('psession_id', psession_id);
  p := utils.util_getproperties;
  project_copy_pkg.copy(p);
  p := utils.util_getproperties;
  utils.util_getintvalue(p, 'pret_val', pret_val);
  utils.util_getstrvalue(p, 'pret_msg', pret_msg);
  if pret_val <= 0
  then
    pret_msg := 'Error in project copy baseline';
    return;
  else
    pret_msg := 'Success';
  end if;
end;

PROJECT_DELETE_WBS
CREATE OR REPLACE PROCEDURE project_delete_wbs
(pproj_id number,  pret_val OUT number, pret_msg OUT varchar2, pnode varchar default 'A' )
AS
  vnode char(1);
begin
  if upper(pnode) = 'A' or upper(pnode) = 'N' then
    vnode := 'N';
  else 
    vnode := 'Y';
  end if;

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

  if upper(pnode) = 'A' then
    project_delete_wbs (pproj_id, pret_val, pret_msg, 'Y');
  end if;

end;

PROJECT_DELETE
CREATE OR REPLACE PROCEDURE project_delete
(pproj_id number, pret_val OUT number, pret_msg OUT varchar2, keep_root number default 0)
AS
begin
  delete from TASKACTV where actv_code_id in (select actv_code_id from ACTVCODE where actv_code_type_id in (select actv_code_type_id from ACTVTYPE where proj_id = pproj_id));
  delete from ACTVCODE where actv_code_type_id in (select actv_code_type_id from ACTVTYPE where proj_id = pproj_id);
  delete from TASKACTV where actv_code_type_id in (select actv_code_type_id from ACTVTYPE where proj_id = pproj_id);
  delete from ACTVTYPE where proj_id = pproj_id;
  delete from BUDGCHNG where proj_id = pproj_id;

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

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

    project_delete_wbs (pproj_id, pret_val, pret_msg, 'N');
  delete from PROJWBS where proj_id = pproj_id and proj_node_flag = 'N';

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

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

  -- TASKRSRC
  delete from RSRCHOUR where taskrsrc_id in (select taskrsrc_id from TASKRSRC where proj_id = pproj_id);
  delete from TRSRCFIN where taskrsrc_id in (select taskrsrc_id from TASKRSRC where proj_id = pproj_id);
  delete from TASKRSRC where proj_id = pproj_id;

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

   -- Handle the delete of the root
  if keep_root = 0 then

    project_delete_wbs (pproj_id, pret_val, pret_msg, 'Y');

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

    delete from PROJWBS where proj_id = pproj_id and proj_node_flag = 'Y';
    delete from PROJECT where proj_id = pproj_id;
  end if;
  
  pret_val := 0;
exception
  when others then
    pret_val := -1;
    pret_msg := SQLERRM;
end;

REPLACE_REFLECTION_PROJECT
create or replace procedure replace_reflection_project
(psession_id number,pproj_id number, prepl_proj_id number, pret_val OUT number, pret_msg OUT varchar2 )
as
  root_wbs_id number;
  dest_wbs_id number;
  wbs_id  number;
  vobs_id     number;
begin

  begin
    select wbs_id , parent_wbs_id
    into root_wbs_id, dest_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';
  exception
    when no_data_found then
      pret_val := -1;
      pret_msg := 'Project Id ' || to_char(prepl_proj_id) || ' is not a valid project for merge';
      return;
  end;

  project_delete (prepl_proj_id, pret_val, pret_msg, 1);
  if pret_val < 0 then return; end if;
  
  project_copy (pproj_id, dest_wbs_id ,'1111111111111111110111001',pret_val, pret_msg,null,psession_id,prepl_proj_id);

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

  pret_val := 0;
exception 
  when others then
    pret_val := -1;
    pret_msg := SQLERRM;
end;

OBSPROJ_UPDATE_PROCESS_KEYS
create or replace procedure obsproj_update_process_keys 
(pproj_id IN number, pwbs_id IN number, pprocess_type IN varchar2 default 'ADD')
as
begin
  if pprocess_type = 'FULL' or pprocess_type = 'ADD' then
    insert into obsproj (obs_id,proj_id,wbs_id)
    select 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;
  if pprocess_type = 'FULL' or pprocess_type = 'REMOVE' then
    delete from obsproj
    where proj_id = pproj_id
    and obs_id not in (select pk1 from tempkeys);
  end if;
end;

OBSPROJ_UPDATE_EPS
create or replace procedure obsproj_update_eps
(pwbs_id IN number, pret_val OUT number, pret_msg OUT varchar2)
as
  cursor childnode 
  is
  select wbs_id from projwbs
  where parent_wbs_id = pwbs_id
  and proj_node_flag = 'Y';

  vproj_id number;
  vparent_proj_id number;
  vproject_flag char(1);
  vobs_id number;
  vcnt pls_integer;
  vdelete_session_id pls_integer;
begin
  pret_val := 0;
  begin
    select pw.proj_id, p.project_flag, pw.obs_id, pw.delete_session_id
    into vproj_id, vproject_flag, vobs_id, vdelete_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;
  exception
    when no_data_found then
       return;
  end;

  if vdelete_session_id is null then
    begin
      select pp.proj_id into vparent_proj_id
      from projwbs pw, projwbs pp
      where pw.wbs_id = pwbs_id
      and pp.wbs_id = pw.parent_wbs_id;
    exception
      when no_data_found then
         vparent_proj_id := null;
    end;

    delete from tempkeys;

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

    if vproject_flag = 'N' then

      select count(*) into vcnt from tempkeys where pk1 = vobs_id;
      if vcnt = 0 then
        insert into tempkeys (pk1) values (vobs_id);
      end if;

    else

      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 if;

  end if;

  obsproj_update_process_keys ( vproj_id,pwbs_id,'FULL');

  for crec in childnode loop
    obsproj_update_eps(crec.wbs_id,pret_val,pret_msg);
    if pret_val <> 0 then
       return;
    end if;
  end loop;

exception
  when others then
    dbms_output.put_line(sqlerrm);
    pret_msg := SQLERRM;
    pret_val := -1100;
end;

OBSPROJ_UPDATE_PROJECT
create or replace procedure obsproj_update_project
(pproj_id IN number, pret_val OUT number, pret_msg OUT varchar2)
as
  vparent_proj_id number;
  vwbs_id number;
begin
  delete from tempkeys;

  begin
    select pp.proj_id, pw.wbs_id into vparent_proj_id, vwbs_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;
  exception
    when no_data_found then
       vparent_proj_id := null;
  end;

/*
*/

  insert into tempkeys (pk1)
  select obs_id from projwbs p
  start with proj_id = pproj_id and proj_node_flag ='Y' and delete_session_id is null
  connect by prior parent_wbs_id = wbs_id and delete_session_id is null
  union
  select obs_id from projwbs p
  where proj_id = pproj_id and proj_node_flag = 'N' and delete_session_id is null;
dbms_output.put_line ('proj=>' || pproj_id);
dbms_output.put_line ('wbs=>' || vwbs_id);
  obsproj_update_process_keys ( pproj_id, vwbs_id, 'FULL');

  pret_val := 0;
end;

OBSPROJ_UPDATE
create or replace procedure obsproj_update 
( pupdate_type IN varchar2 default 'EPS'	-- Type of update EPS, Project, WBS, OBS
, pkey IN number default null			-- Single primary key value to be maintained
, pkey_list in varchar2 default null		-- Comma list of primary key values
, pret_val OUT number, pret_msg OUT varchar2 	-- Normal returns.  Do this way for easy translation to SQL Server 2k
)
as
  v_key_type varchar2(20);
  v_cnt number;
  v_table_name varchar2(30);
  v_where_clause varchar2(4000);
  v_msg varchar2(100);
begin
  pret_val := 0;
  if (pupdate_type is null) or 
     (pupdate_type != 'EPS' and pupdate_type != 'PROJECT' and pupdate_type != 'WBS' and pupdate_type != 'OBS' ) then
    pret_val := -1002;
    pret_msg := 'ERROR: Must provide a valid update_type';    
    return;
  end if;

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

  if pupdate_type = 'PROJECT' then
    v_table_name := 'PROJECT';
    v_where_clause := 'proj_id = :key and project_flag = ''Y'' and orig_proj_id is null';
    v_msg := 'project ID';
  elsif pupdate_type = 'EPS' then
    v_table_name := 'PROJWBS';
    v_where_clause := 'wbs_id = :key and proj_node_flag = ''Y''';
    v_msg := 'EPS Node';
  end if;


  execute immediate 'select count(*) from ' || v_table_name || ' where ' || v_where_clause 
                     into v_cnt using pkey;

  if v_cnt = 0 then
    pret_val := -1004;
    pret_msg := 'ERROR: Not a valid ' || v_msg;
    return;
  end if;


  if v_key_type = 'SINGLE' and pupdate_type = 'PROJECT' then
    obsproj_update_project(pkey,pret_val,pret_msg);
  elsif v_key_type = 'SINGLE' and pupdate_type = 'EPS' then
    delete from tempkeys;
    obsproj_update_eps(pkey,pret_val,pret_msg);
  else
    pret_val := -1005;
    pret_msg := 'WARNING: Nothing to process';
    return;
  end if;
  commit;
end;

OBSPROJ_FULL_REBUILD
create or replace procedure obsproj_full_rebuild
(pret_val OUT number, pret_msg OUT varchar2)
as
  cursor root 
  is
  select wbs_id 
  from projwbs
  where parent_wbs_id is null
  and delete_session_id is null;
begin
  execute immediate 'truncate table obsproj';
  for rootrec in root loop
    obsproj_update(pupdate_type=>'EPS',pkey=>rootrec.wbs_id,pret_val=>pret_val,pret_msg=>pret_msg);
    if pret_val <> 0 then
      return;
    end if;  
    commit;  
  end loop;
end;

PRMQUEUE_ADD
create or replace procedure prmqueue_add 
(pqueue_name IN varchar2, pmsg_type IN varchar2, pmsg_sub_type IN varchar2
, pkey1 IN varchar2 default null, pkey2 IN varchar2 default null
, pqueue_payload IN varchar2 default null
,ppriority IN number default 1)
as
  vuser_name varchar2(32);
begin
  vuser_name := prm_audit.get_user;
  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, sys_guid(), sysdate, vuser_name, 'QUEUED', 
          pmsg_type, pmsg_sub_type, pkey1, pkey2,
          ppriority, substr(vuser_name,1,30), pqueue_payload ); 
end;

OBSPROJ_PROCESS_QUEUE
create or replace procedure obsproj_process_queue
(pret_val OUT number, pret_msg OUT varchar2)
as 
  cursor project_queue
  is 
  select msg_key, msg_type, msg_sub_type, key1, key2, retry_count, status_code
  from prmqueue
  where queue_name = 'PROJWBS_SECURITY'
  and msg_type = 'PROJECT'
  and status_code in  ('QUEUED','FAILED')
  order by enqueue_date;

  cursor eps_queue
  is 
  select msg_key, msg_type, msg_sub_type, key1, key2, retry_count, status_code
  from prmqueue
  where queue_name = 'PROJWBS_SECURITY'
  and msg_type = 'EPS'
  and status_code in  ('QUEUED','FAILED')
  order by enqueue_date;

  vcnt pls_integer;
  vmax_project_updates pls_integer;
  vmax_eps_updates pls_integer;
  vmsg varchar2(1000);
  vstatus_code varchar2(10);
  vmax_retries pls_integer;
  vretry_count pls_integer;
begin
  vcnt := 0;
  settings_read_number(vmax_project_updates , 'database.obsproj.queue','MaxProjectUpdates',1000);
  settings_read_number(vmax_retries , 'database.obsproj.queue','MaxRetries',50);
  for prec in project_queue loop
    vcnt := vcnt + 1;
    if vcnt >= vmax_project_updates then
      select count(*) into vcnt 
      from prmqueue  
      where queue_name = 'PROJWBS_SECURITY'
      and msg_type = 'PROJECT'
      and status_code = 'QUEUED';
      vmsg := 'Finish PROJECT processing after '
                      || to_char(vmax_project_updates) || ' records with '
                      || to_char(vcnt) || ' records remaining';
      pret_msg := vmsg;
      bgp_write_to_log('obsproj_process_queue',vmsg);
      exit;
    end if;

    update prmqueue set dequeue_date=sysdate, dequeue_user='background',status_code='PROCESSING'
    where queue_name = 'PROJWBS_SECURITY' and msg_key = prec.msg_key;
    commit;

    obsproj_update(pupdate_type=>'PROJECT', pkey=>prec.key2, pret_val=>pret_val, pret_msg=>pret_msg);

    if pret_val < 0  and pret_val <> -1004 then -- Other Error
      if prec.retry_count is null then
        vretry_count := 1;
      else
        vretry_count := prec.retry_count + 1;
      end if;
      if vretry_count > vmax_retries then
        vstatus_code := 'ERROR';
      else
        vstatus_code := 'FAILED';
      end if;

      update prmqueue set status_code=vstatus_code, retry_count=vretry_count, err_msg = pret_msg
      where queue_name = 'PROJWBS_SECURITY' and msg_key = prec.msg_key;

    else
      update prmqueue set status_code='COMPLETE'
      where queue_name = 'PROJWBS_SECURITY' and msg_key = prec.msg_key;
    end if;
    commit;
              
  end loop;

  settings_read_number(vmax_eps_updates , 'database.obsproj.queue','MaxEpsUpdates',25);
  vcnt := 0;
  for erec in eps_queue loop
    vcnt := vcnt + 1;
    if vcnt >= vmax_eps_updates then
      select count(*) into vcnt 
      from prmqueue  
      where queue_name = 'PROJWBS_SECURITY'
      and msg_type = 'EPS'
      and status_code = 'QUEUED';
      vmsg := 'Finish EPS processing after '
                      || to_char(vmax_eps_updates) || ' records with '
                      || to_char(vcnt) || ' records remaining';
      pret_msg := pret_msg || ' : ' || vmsg;
      bgp_write_to_log('obsproj_process_queue',vmsg);
      exit;
    end if;

    update prmqueue set dequeue_date=sysdate, dequeue_user='background',status_code='PROCESSING'
    where queue_name = 'PROJWBS_SECURITY' and msg_key = erec.msg_key;
    commit;

    if erec.msg_sub_type = 'DELETE' then
      begin
        delete from obsproj where proj_id = erec.key2;
      exception
        when others then
          pret_val := -1;
          pret_msg := SQLERRM;
      end;

    else
      obsproj_update(pupdate_type=>'EPS', pkey=>erec.key1, pret_val=>pret_val, pret_msg=>pret_msg);
    end if;

    if pret_val < 0  and pret_val <> -1004 then -- Other Error
      if erec.retry_count is null then
        vretry_count := 1;
      else
        vretry_count := erec.retry_count + 1;
      end if;
      if vretry_count > vmax_retries then
        vstatus_code := 'ERROR';
      else
        vstatus_code := 'FAILED';
      end if;

      update prmqueue set status_code=vstatus_code, retry_count=vretry_count, err_msg = pret_msg
      where queue_name = 'PROJWBS_SECURITY' and msg_key = erec.msg_key;

    else
      update prmqueue set status_code='COMPLETE'
      where queue_name = 'PROJWBS_SECURITY' and msg_key = erec.msg_key;
    end if;
    commit;
              
  end loop;


  pret_val := 0;
exception
  when others then
    pret_val := -1;
    pret_msg := SQLERRM;
end;

CLEANUP_PRMQUEUE
CREATE OR REPLACE PROCEDURE CLEANUP_PRMQUEUE
(pret_val OUT number,pret_msg OUT varchar2)
as
  vset           varchar2(20);
  vdiff          number(20, 6);
  vdelete_time   date;
  vdelcnt        pls_integer;
  vdelete_all    boolean;
  vdelete_thresh number;
  vdelete_pct    number;
  vrowcount      pls_integer;
  vdelete_rows   pls_integer;
  vmax_to_delete number;
  vtmpnum        pls_integer;
  type prmqueuetype is record(
    queue_name   dbms_sql.Varchar2_Table,
    msg_key      dbms_sql.Varchar2_Table,
    enqueue_date dbms_sql.Date_Table);
  prmqueuerec prmqueuetype;
  cursor rd is
    select queue_name, msg_key, enqueue_date
      from prmqueue
     where enqueue_date < vdelete_time
       and status_code = 'COMPLETE'
       and rownum <= vdelete_rows;
begin
  settings_read_string(vset,
                       'database.cleanup.Prmqueue',
                       'KeepInterval',
                       '5d');
  get_interval_difference(vset, vdiff);
  vdelete_time := sysdate - vdiff;
  settings_read_bool(vtmpnum, 'database.cleanup.Prmqueue', 'DeleteAll', 0);
  vdelete_all := (vtmpnum = 1);
  settings_read_number(vdelete_thresh,
                       'database.cleanup.Prmqueue',
                       'DeleteAllThreshold',
                       1000);
  settings_read_number(vdelete_pct,
                       'database.cleanup.Prmqueue',
                       'DeletePercentage',
                       10);
  settings_read_number(vmax_to_delete,
                       'database.cleanup.Prmqueue',
                       'MaxRowsToDelete',
                       10000);
  select count(*)
    into vrowcount
    from prmqueue
   where enqueue_date < vdelete_time
     and status_code = 'COMPLETE';
  vdelcnt:=0;
  if vdelete_all or vrowcount < vdelete_thresh then
    delete from prmqueue
     where enqueue_date < vdelete_time
       and status_code = 'COMPLETE';
    pret_val := SQL%ROWCOUNT;
  else
    vdelete_rows := vrowcount * (vdelete_pct * .01);
    if vdelete_rows > vmax_to_delete then
      vdelete_rows := vmax_to_delete;
    elsif vdelete_rows < vdelete_thresh then
      vdelete_rows := vdelete_thresh;
    end if;
    open rd;
    loop
      fetch rd bulk collect
        into prmqueuerec.queue_name, prmqueuerec.msg_key, prmqueuerec.enqueue_date limit 1000;
      forall i in 1 .. prmqueuerec.queue_name.count
        delete from prmqueue
         where queue_name = prmqueuerec.queue_name(i)
           and msg_key = prmqueuerec.msg_key(i)
           and enqueue_date = prmqueuerec.enqueue_date(i);
      vdelcnt := vdelcnt + prmqueuerec.queue_name.count;
      exit when rd%NOTFOUND;
    end loop;
    close rd;
    pret_val := vdelcnt;
  end if;
  pret_msg := to_char(pret_val) || ' record(s) deleted.';
exception
  when others then
    pret_val := -1;
    pret_msg := 'Error in CLEANUP_PRMQUEUE ' || SQLERRM;
end;

WBSRSRC_VALIDATE
CREATE OR REPLACE PROCEDURE wbsrsrc_validate(prole_list varchar2,
                                             pret_val   OUT number,
                                             pret_msg   OUT varchar2)
as
  pragma autonomous_transaction;
  type wbsrsrctype is record(
    pwbsrsrc_id dbms_sql.Number_Table,
    pwbs_id     dbms_sql.Number_Table,
    prsrc_id    dbms_sql.Number_Table,
    prole_id    dbms_sql.Number_Table);
  type mytabtype is table of number;
  lstr        long default prole_list;
  ln          number;
  ldata       mytabtype := mytabtype();
  i           pls_integer;
  prole_id    number;
  psession_id number;
  wbsrsrcrec  wbsrsrctype;
  cnt         pls_integer;
  cursor wr is
    select wbsrsrc_id, wbs_id, rsrc_id, role_id
      from wbsrsrc
     where role_id = prole_id
       and delete_session_id is null;

begin
  select USERENV('SESSIONID') into psession_id from dual;
  if prole_list is null then
    pret_val := -1;
    pret_msg := 'Role List is empty';
    return;
  end if;
  lstr := prole_list;
  ln   := instr(lstr, ',');
  if nvl(ln, 0) = 0 then
    ldata.extend;
    ldata(ldata.count) := to_number(ltrim(rtrim(lstr)));
  else
    loop
      ln := instr(lstr, ',');
      exit when(nvl(ln, 0) = 0);
      ldata.extend;
      ldata(ldata.count) := to_number(ltrim(rtrim(substr(lstr, 1, ln - 1))));
      lstr := substr(lstr, ln + 1);
    end loop;
     if lstr is not null then
      ldata.extend;
      ldata(ldata.count) := to_number(ltrim(rtrim(lstr)));
    end if;  
  end if;
  for i in 1 .. ldata.count loop
    prole_id := ldata(i);
    open wr;
    loop
      fetch wr bulk collect
        into wbsrsrcrec.pwbsrsrc_id, wbsrsrcrec.pwbs_id, wbsrsrcrec.prsrc_id, wbsrsrcrec.prole_id limit 1000;
      for i in 1 .. wbsrsrcrec.pwbsrsrc_id.count
      
       loop
        cnt := 0;
        if wbsrsrcrec.prsrc_id(i) is not null then
          select count(1)
            into cnt
            from wbsrsrc
           where wbs_id = wbsrsrcrec.pwbs_id(i)
             and rsrc_id = wbsrsrcrec.prsrc_id(i)
             and role_id is null
             and delete_session_id is null;
        else
          select count(1)
            into cnt
            from wbsrsrc
           where wbs_id = wbsrsrcrec.pwbs_id(i)
             and rsrc_id is null
             and role_id is null
             and delete_session_id is null;
        end if;
        if cnt >= 1 then
      	  update wbsrsrc
             set delete_date = sysdate, delete_session_id = psession_id
           where wbsrsrc_id = wbsrsrcrec.pwbsrsrc_id(i);
          update wbsrsrc_qty
             set delete_date = sysdate, delete_session_id = psession_id
           where wbsrsrc_id = wbsrsrcrec.pwbsrsrc_id(i);
        else
          if wbsrsrcrec.prsrc_id(i) is null then
            update wbsrsrc
               set delete_date = sysdate, delete_session_id = psession_id
             where wbsrsrc_id = wbsrsrcrec.pwbsrsrc_id(i);
            update wbsrsrc_qty
               set delete_date = sysdate, delete_session_id = psession_id
             where wbsrsrc_id = wbsrsrcrec.pwbsrsrc_id(i);
          else
            update wbsrsrc
               set role_id = null
             where wbsrsrc_id = wbsrsrcrec.pwbsrsrc_id(i);
          end if;
        end if;
        commit;
      end loop;
      exit when wr%NOTFOUND;
    end loop;
    close wr;
  end loop;
exception
  when no_data_found then
    return;
  when others then
    pret_val := -1;
    pret_msg := 'Error in WBSRSRC_VALIDATE ' || SQLERRM;
  
end;

SYSTEM_MONITOR
CREATE OR REPLACE PROCEDURE system_monitor
is
  vret 	number;
  vmsg   varchar2(4000);
  smonstart   date;
begin
   smonstart:=sysdate;
   audit_identity(null,null,'Symon(bg)');
   bgp_write_to_log('system_monitor','Starting');
   settings_write_date(sysdate,'database.background.Symon','HeartBeatTime');
   bgp_write_to_log('system_monitor','Begin usession_cleanup_expired');
   usession_cleanup_expired(vret,vmsg);
   bgp_write_to_log('system_monitor','Complete usession_cleanup_expired',null,vret,vmsg);
   smonstart := sysdate;
   bgp_write_to_log('system_monitor','Begin obsproj_process_queue');
   obsproj_process_queue(vret, vmsg);
   bgp_write_to_log('system_monitor','Complete obsproj_process_queue','ELAPSED TIME',vret,vmsg,smonstart);
   settings_write_date(sysdate,'database.background.Symon','HeartBeatTime');
   commit;
   bgp_write_to_log('system_monitor','Complete','ELAPSED TIME',vret,vmsg,smonstart);

end;

DATA_MONITOR
CREATE OR REPLACE PROCEDURE data_monitor
is
  vret number;
  vmsg varchar2(4000);
  verror_level pls_integer;
  vdmonstart   date;
  pstarttime   date;
begin
  vdmonstart := sysdate;
  audit_identity(null,null,'Damon(bg)');
  pstarttime := sysdate;
  bgp_write_to_log('data_monitor', 'Begin bgplog_cleanup');
  bgplog_cleanup(vret, vmsg);
  bgp_write_to_log('data_monitor','Complete bgplog_cleanup','ELAPSED TIME', vret,vmsg,pstarttime);

  bgp_write_to_log('data_monitor','Starting');
  settings_write_date(sysdate,'database.background.Damon','HeartBeatTime');

  -- Cleanup REFRDEL records before anything else
  pstarttime := sysdate;
  bgp_write_to_log('data_monitor','Begin refrdel_cleanup');
  refrdel_cleanup(vret, vmsg);
  bgp_write_to_log('data_monitor','Complete refrdel_cleanup','ELAPSED TIME',vret,vmsg,pstarttime);
  settings_write_date(sysdate,'database.background.Damon','HeartBeatTime');
  commit;    
  
  -- Cleanup prmqueue
   pstarttime := sysdate;
   bgp_write_to_log('data_monitor', 'Begin cleanup_prmqueue');
   cleanup_prmqueue(vret, vmsg);
   bgp_write_to_log('data_monitor', 'Complete cleanup_prmqueue','ELAPSED TIME',vret,vmsg,pstarttime);
  commit;
  settings_write_date(sysdate,'database.background.Damon','HeartBeatTime');

  -- Clear usession that have been logically deleted
  pstarttime := sysdate;
  bgp_write_to_log('data_monitor','Begin usession_clear_logical_deletes');
  usession_clear_logical_deletes(vret,vmsg);
  bgp_write_to_log('data_monitor','Complete usession_clear_logical_deletes','ELAPSED TIME',vret,vmsg,pstarttime);
  settings_write_date(sysdate,'database.background.Damon','HeartBeatTime');
  commit;
  -- Cleaup Logical Deletes
  pstarttime := sysdate;
  bgp_write_to_log('data_monitor','Begin cleanup_logical_deletes');
  settings_read_number(verror_level, 'database.cleanup.LogicalDelete','ErrorLevel','0');
  cleanup_logical_deletes(vret, vmsg, verror_level);
  bgp_write_to_log('data_monitor','Complete cleanup_logical_deletes','ELAPSED TIME',vret,vmsg,pstarttime);
  settings_write_date(sysdate,'database.background.Damon','HeartBeatTime');
  commit;
 -- Cleanup AuditTable 
  pstarttime := sysdate;
  bgp_write_to_log('data_monitor','Begin prmaudit_cleanup');
  prmaudit_cleanup(vret, vmsg);
  bgp_write_to_log('data_monitor','Complete prmaudit_cleanup','ELAPSED TIME',vret,vmsg,pstarttime);
  settings_write_date(sysdate,'database.background.Damon','HeartBeatTime'); 
  commit;
  -- Cleanup usessaud
  pstarttime := sysdate;
  bgp_write_to_log('data_monitor','Begin cleanup_usessaud');
  cleanup_usessaud(vret, vmsg);
  bgp_write_to_log('data_monitor','Complete cleanup_usessaud','ELAPSED TIME',vret,vmsg,pstarttime);
  settings_write_date(sysdate,'database.background.Damon','HeartBeatTime'); 
  commit;

  pstarttime := sysdate;
  bgp_write_to_log('data_monitor','Begin user_defined_background');
  user_defined_background;
  bgp_write_to_log('data_monitor','Complete user_defined_background','ELAPSED TIME',NULL,NULL,pstarttime);

  pstarttime := sysdate;
  bgp_write_to_log('data_monitor','Begin cleanup_old_data');
  cleanup_old_data;
  bgp_write_to_log('data_monitor','Complete cleanup_old_data','ELAPSED TIME',NULL,NULL,pstarttime);

  bgp_write_to_log('data_monitor','Complete','ELAPSED TIME',vret,vmsg,vdmonstart);
  commit;
end;

CHECK_BACKGROUND_JOBS
CREATE OR REPLACE PROCEDURE CHECK_BACKGROUND_JOBS(pret_val OUT number,
                                                  pret_msg OUT varchar2) AS
  vsmonset    varchar2(20);
  vsmondate   date;
  vdiff       number(20, 6);
  vsmon_time  date;
  vsmonfactor pls_integer;
  currtime    date;
begin
  settings_read_date(vsmondate,
                     'database.background.Symon',
                     'HeartBeatTime');
  settings_read_string(vsmonset, 'database.background.Symon', 'Interval');
  settings_read_number(vsmonfactor,
                       'database.background.Symon',
                       'IntervalFactor',
                       2);
  currtime := sysdate;
  get_interval_difference(vsmonset, vdiff);
  vsmon_time := currtime - (vdiff * vsmonfactor);
  if (vsmondate >= vsmon_time) then
    pret_msg := 'Background Jobs Running Successfully';
    pret_val := 0;
  else
    pret_val := -1;
    pret_msg := 'Last System Monitor Job Run:' ||
                to_char(vsmondate, 'Dy DD-Mon-YYYY HH24:MI:SS');
  end if;
end;

TA_GATHER_TIMESHEETS
create or replace procedure ta_gather_timesheets
(psession_id IN number, papproval_type IN varchar2,  papproval_user_id IN number, pts_id IN number
, pret_val OUT number, pret_msg OUT varchar2, pdelegate_user_id IN number default null)
as
  vcontext_id pls_integer;
  vcontext_id2 pls_integer;
  veffective_user_id pls_integer;
  vcnt pls_integer;
begin
  vcontext_id := 11697;
  vcontext_id2 := 11698;
  pret_val := vcontext_id;
  
  delete from upklist where session_id = psession_id and context_id in ( vcontext_id, vcontext_id2);

  if upper(papproval_type) != 'PM' and upper(papproval_type) != 'RM' then
    pret_val := -100;
    pret_msg := 'Valid approval type must be PM or RM';
    return;
  end if;
  
  veffective_user_id := papproval_user_id;

  if pdelegate_user_id is null then
    select count(*) 
    into vcnt
    from users
    where user_id = papproval_user_id
    and prof_id = 12;
    
    if vcnt = 1 then
      insert into upklist (session_id,context_id,pk_id,pk2_id)
      select psession_id, vcontext_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, vcontext_id,rsrc_id,ts_id
      from rsrchour
      where status_code in ('TS_ReSubmit','TS_ReSubmitRM')
      and ts_id != pts_id;
  
      return;
    end if;
  end if;
  
  if upper(papproval_type) = 'PM' then


    delete from upklist where session_id = psession_id and context_id = vcontext_id2;
    
    
    if pdelegate_user_id is null then
      insert into upklist (session_id,context_id,pk_id,pk2_id)
      select psession_id,vcontext_id2,proj_id
         , decode((case when pp.prof_id = 23 then 'Y' else pp.allow_flag end),'Y' , 1 , 0)
      from obsproj u, userobs uo, profpriv pp
      where u.obs_id = uo.obs_id and uo.user_id = veffective_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,vcontext_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;
    end if;


    insert into upklist (session_id,context_id,pk_id,pk2_id)
    select distinct psession_id, vcontext_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=vcontext_id2 and pk2_id=1
    and task_ts_flag = 'N'
    and r.delete_session_id is null;

    insert into upklist (session_id,context_id,pk_id,pk2_id)
    select distinct psession_id, vcontext_id, rsrc_id, ts_id
    from rsrchour r, upklist u
    where status_code = 'TS_ReSubmit'
    and u.pk_id = r.proj_id 
    and u.session_id=psession_id and u.context_id=vcontext_id2 and pk2_id=1
    and r.ts_id != pts_id
    and r.delete_session_id is null;
    
  else
  
    if pdelegate_user_id is not null then
      select count(*) 
      into vcnt
      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 vcnt = 0 then
        pret_msg:='Time approval for user ' || to_char(papproval_user_id)
                     || ' not delegated to user ' || to_char(pdelegate_user_id);
        pret_val := -200;
        return;
      end if;
    end if;

    insert into upklist (session_id,context_id,pk_id,pk2_id)
    select psession_id, vcontext_id, r.rsrc_id, pts_id 
    from timesht ts, rsrc r
    where ts_approve_user_id = veffective_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;
    
    insert into upklist (session_id,context_id,pk_id,pk2_id)
    select distinct psession_id, vcontext_id, r.rsrc_id, rh.ts_id
    from rsrchour rh, rsrc r
    where ts_approve_user_id = veffective_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 if;

end; 

TS_AUDIT
create or replace procedure ts_audit
(prsrc_id IN number, pts_id IN number, ptype IN varchar2, peffective_user_id IN number, psession_id IN number default null)
as
  type t_crs is ref cursor;
  cursor projs (cid number, puser_name varchar2)
  is 
    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=cid
    and task_ts_flag = 'N' and rh.update_user=puser_name;

  vcontext_id pls_integer;
  vcontext_id2 pls_integer;
  vkey pls_integer;
  vstatus_code varchar2(20);
  vreg_hrs number(17,6);
  voh_hrs number(17,6);
  vreg_ot_hrs number(17,6);
  vpend_reg_hrs number(17,6);
  vpend_reg_ot_hrs number(17,6);
  voh_ot_hrs number(17,6);
  vpend_oh_hrs number(17,6);
  vpend_oh_ot_hrs number(17,6);
  vuser_name varchar2(32);
  vprof_id pls_integer;
  vcur t_crs;
  vstmt varchar2(1000);
  vproj_id pls_integer;
begin
  vcontext_id2 := 11698;

  if ptype = 'ApproveAsPM' or ptype ='ApproveAsPMDelegate'  then
    select user_name , prof_id
    into vuser_name, vprof_id
    from users
    where user_id = peffective_user_id;

    if vprof_id != 12 then
      vstmt := 'select distinct proj_id , status_code' 
        ||' from rsrchour rh, upklist u'
        ||' where rh.ts_id = :ts_id and rh.rsrc_id = :rsrc_id'
        ||' and rh.proj_id = u.pk_id  and u.session_id=:session_id and u.context_id=:cid and pk2_id=1'
       ||' and task_ts_flag = ''N'' and rh.update_user=:user_name';
  
      open vcur for vstmt using pts_id, prsrc_id, psession_id, vcontext_id2, vuser_name ;
    else
      vstmt := 'select distinct proj_id , status_code' 
        ||' from rsrchour rh'
        ||' where rh.ts_id = :ts_id and rh.rsrc_id = :rsrc_id'
        ||' and task_ts_flag = ''N''';
 
      open vcur for vstmt using pts_id, prsrc_id;
    end if;

    
    --for prec in projs (vcontext_id2,vuser_name) loop
    loop
      fetch vcur into vproj_id, vstatus_code;
      exit when vcur%notfound;
      
      dbms_output.put_line('proj='||to_char(vproj_id));
      getnextkeys ('tsaudit_ts_audit_id',1,vkey);      

      select nvl(sum(hr_cnt),0), nvl(sum(ot_hr_cnt),0)
            , nvl(sum(pend_hr_cnt),0)
            , nvl(sum(pend_ot_hr_cnt),0)
      into vreg_hrs, vreg_ot_hrs, vpend_reg_hrs, vpend_reg_ot_hrs
      from rsrchour
      where ts_id = pts_id and rsrc_id = prsrc_id
      and nonwork_type_id is null
      and proj_id = vproj_id;
      
      select nvl(sum(hr_cnt),0), nvl(sum(ot_hr_cnt),0)
            , nvl(sum(pend_hr_cnt),0)
            , nvl(sum(pend_ot_hr_cnt),0)
      into voh_hrs, voh_ot_hrs, vpend_oh_hrs, vpend_oh_ot_hrs
      from rsrchour
      where ts_id = pts_id and rsrc_id = prsrc_id
      and nonwork_type_id is not null
      and proj_id = vproj_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 vkey, sysdate, prsrc_id, r.rsrc_short_name, r.rsrc_name
	  , vreg_hrs, voh_hrs, pts_id, ts.start_date, ts.end_date, vproj_id
	  , p.proj_short_name, peffective_user_id, u.user_name, t.status_code
	  , vreg_ot_hrs, vpend_reg_hrs, vpend_reg_ot_hrs, voh_ot_hrs
	  , vpend_oh_hrs, vpend_oh_ot_hrs, vstatus_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 = peffective_user_id
      and t.ts_id = pts_id and t.rsrc_id = prsrc_id
      and p.proj_id = vproj_id;
      
    end loop;
  elsif ptype = 'ApproveAsRM' or ptype ='ApproveAsRMDelegate' or ptype = 'Submitted' then
    getnextkeys ('tsaudit_ts_audit_id',1,vkey);
    dbms_output.put_line(vkey);
    select nvl(sum(hr_cnt),0), nvl(sum(ot_hr_cnt),0)
          , nvl(sum(pend_hr_cnt),0)
          , nvl(sum(pend_ot_hr_cnt),0)
    into vreg_hrs, vreg_ot_hrs, vpend_reg_hrs, vpend_reg_ot_hrs
    from rsrchour
    where ts_id = pts_id and rsrc_id = prsrc_id
    and nonwork_type_id is null;
    
    select nvl(sum(hr_cnt),0), nvl(sum(ot_hr_cnt),0)
          , nvl(sum(pend_hr_cnt),0)
          , nvl(sum(pend_ot_hr_cnt),0)
    into voh_hrs, voh_ot_hrs, vpend_oh_hrs, vpend_oh_ot_hrs
    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 vkey, sysdate, prsrc_id, r.rsrc_short_name, r.rsrc_name
          , vreg_hrs, voh_hrs, pts_id, ts.start_date, ts.end_date, null
          , null, peffective_user_id, u.user_name, t.status_code
          , vreg_ot_hrs, vpend_reg_hrs, vpend_reg_ot_hrs, voh_ot_hrs
          , vpend_oh_hrs, vpend_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 = peffective_user_id
    and t.ts_id = pts_id and t.rsrc_id = prsrc_id;
    
  end if;
end;

PV_OPEN_PROJECT
CREATE OR REPLACE PROCEDURE PV_OPEN_PROJECT(PUSER_OPEN_ID NUMBER,PSESSION_ID NUMBER,PRET_VAL OUT PLS_INTEGER,PRET_MSG OUT VARCHAR2)
AS
  vuser_open_id pls_integer;
  vret_val      pls_integer;
  vret_msg      varchar2(255);
  vuser_id      pls_integer;
  vrsrc_id  pls_integer;
  invalid_user_open_id exception;
  vcontext_id pls_integer;
  vprof_id    pls_integer;
  TYPE num_array IS TABLE OF NUMBER(10);
  projid_array num_array;
  projidlist   num_array;
  counter      pls_integer;
  cursor uopenval is
    select user_open_id, pk_id, usropn_type
      from usropnval
     where user_open_id = puser_open_id
       and delete_session_id is null;
begin
  vcontext_id := 21536;
  projidlist  := num_array();
  delete from projshar where session_id = psession_id;

  delete from upklist
   where session_id = psession_id
     and context_id = vcontext_id;
  begin
    select user_open_id, user_id
      into vuser_open_id, vuser_id
      from useropen
     where user_open_id = puser_open_id
       and delete_session_id is null;
  exception
    when no_data_found then
      pret_val := -1;
      pret_msg := 'user_open_id ' || vuser_open_id || ' does not exist';
  end;
  for openvalrec in uopenval loop
    if openvalrec.usropn_type = 'PS_Project' then
      counter := projidlist.COUNT + 1;
      projidlist.extend;
      begin
        select p.proj_id
          into projidlist(counter)
          from project p, projwbs pw
         where p.project_flag = 'Y'
           and pw.wbs_id = openvalrec.pk_id
           and p.proj_id = pw.proj_id
           and p.delete_session_id is null;
      exception
        when no_data_found then
          pret_val := -1;
          pret_msg := openvalrec.pk_id || 'is Not a valid wbs_id';
          projidlist.DELETE(counter);
      end;
    elsif openvalrec.usropn_type = 'PS_EPS' then
      select proj_id bulk collect
        into projid_array
        from project
       where proj_id in
             (select distinct proj_id
                from projwbs
               start with parent_wbs_id = openvalrec.pk_id
              connect by prior wbs_id = parent_wbs_id)
         and orig_proj_id is null
         and project_flag = 'Y'
         and delete_session_id is null;
      counter := projidlist.COUNT + 1;
    
      for i in 1 .. projid_array.COUNT loop
        projidlist.extend;
        projidlist(counter) := projid_array(i);
        counter := counter + 1;
      end loop;
    elsif openvalrec.usropn_type = 'PS_Portfolio' then
      select proj_id bulk collect
        into projid_array
        from project
       where proj_id in
             (select proj_id
                from projwbs
               where wbs_id in
                     (select wbs_id
                        from prpfolio
                       where pfolio_id = openvalrec.pk_id))
         and delete_session_id is null;
      counter := projidlist.COUNT + 1;
    
      for i in 1 .. projid_array.COUNT loop
        projidlist.extend;
        projidlist(counter) := projid_array(i);
        counter := counter + 1;
      end loop;
    elsif openvalrec.usropn_type = 'PS_ProjectCode' then
      select pc.proj_id bulk collect
        into projid_array
        from projpcat pc, project p
       where proj_catg_id = openvalrec.pk_id
         and pc.delete_session_id is null
         and pc.proj_id = p.proj_id
         and p.orig_proj_id is null;
      counter := projidlist.COUNT + 1;
      for i in 1 .. projid_array.COUNT loop
        projidlist.extend;
        projidlist(counter) := projid_array(i);
        counter := counter + 1;
      end loop;
    end if;
  end loop;

  projidlist := set(projidlist);

  forall i in projidlist.FIRST .. projidlist.LAST
  
    insert into upklist
      (session_id, context_id, pk_id)
    values
      (psession_id, vcontext_id, projidlist(i));

  select prof_id into vprof_id from users where user_id = vuser_id;
  if vprof_id <> 12 then
  begin
  select rsrc_id into vrsrc_id from rsrc where user_id = vuser_id; 
  exception
        when no_data_found then
          null;
  end; 
     select proj_id bulk collect
     into projid_array
     from         
     (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 upk.pk_id=tr.proj_id and upk.pk_id=p.proj_id and p.orig_proj_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') and p.delete_session_id is null	
      union select pk_id proj_id from upklist upk, project p where upk.pk_id=p.proj_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 upk.pk_id=tu.proj_id and upk.session_id=psession_id and context_id=vcontext_id and p.delete_session_id is null
      union select proj_id from userwksp uw,upklist where uw.user_id=vuser_id and uw.proj_id = upklist.pk_id and upklist.session_id = psession_id and context_id=vcontext_id and delete_session_id is null); 
  else
    projid_array := projidlist;
  end if;
  projid_array := set(projid_array);
  forall i in projid_array.FIRST .. projid_array.LAST
    insert into projshar
      (proj_id, session_id, access_level, load_status)
    values
      (projid_array(i), psession_id, 0, 'O');
 
  pret_val := 0;
  pret_msg := 'Success';

end PV_OPEN_PROJECT;

SOURCE_VERSION
create or replace procedure SOURCE_VERSION
      ( pversion OUT varchar2)
AS
begin
  pversion:='24-July-2009 07:18 AM';
end;

ACTIVITY_COPY_API
create or replace PROCEDURE ACTIVITY_COPY_API (
	ptask_id	number,		-- task to copy
	pwbs_id		number,	  	-- wbs where the task copied to
	ptask_code	varchar2,	-- unique per project, generate if not passed in
	copy_bit	varchar2,
	pret_val	OUT number,
	pret_msg 	OUT varchar2
) 
as

begin

  task_copy_pkg.activity_copy_api(ptask_id, pwbs_id, ptask_code, copy_bit, pret_val, pret_msg);

exception
  when others then
    raise;
end;

SYNC_BASELINE_TASKS
CREATE OR REPLACE PROCEDURE SYNC_BASELINE_TASKS(psession_id number,
                                           pproj_id    number,
                                           pret_val    OUT number,
                                           pret_msg    OUT varchar2) IS
  rowcnt pls_integer;
  cursor basecur is
    select proj_id from project where orig_proj_id = pproj_id;
  cursor taskcur is
    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;
  TYPE taskcodetype is record(
    pold_task_code dbms_sql.Varchar2_Table,
    pnew_task_code dbms_sql.Varchar2_Table);
  taskrec taskcodetype;
begin
  for baseproj in basecur loop
  
   -- dbms_output.put_line(baseproj.proj_id);
  
    select count(*)
      into rowcnt
      from pkxref
     where new_str in (select task_code
                         from task
                        where proj_id = baseproj.proj_id
                       minus
                       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) then
      open taskcur;
      loop
        fetch taskcur bulk collect
          into taskrec.pold_task_code, taskrec.pnew_task_code limit 1000;
        forall i in 1 .. taskrec.pold_task_code.count
       
          update task
             set task_code = taskrec.pnew_task_code(i)
           where proj_id = baseproj.proj_id
             and task_code = taskrec.pold_task_code(i);
        exit when taskcur%NOTFOUND;
      end loop;
      close taskcur;
      commit;
    else
      if pret_msg is null then
        pret_msg := baseproj.proj_id;
      else
        pret_msg := pret_msg || ',' || baseproj.proj_id;
      end if;
    end if;
  end loop;

  if (length(pret_msg) > 0) then
    pret_val := -1;
    return;
  end if;
  pret_val := 0;
  pret_msg := 'Task Codes updated successfully';
Exception
  when others then
    pret_val := -1;
    pret_msg := 'Error in SYNC_BASELINES ' || SQLERRM;
end;

TR_NOTE_FK
create or replace trigger TR_NOTE_FK
BEFORE UPDATE OR INSERT ON NOTE
FOR EACH ROW
DECLARE
  vpk_id           number(10);
BEGIN
  begin
    if upper(:new.table_name) = 'SCENARIO' then
      select scenario_id into vpk_id
      from scenario
      where scenario_id = :new.fk_id;
    end if;
  exception
    when no_data_found then
      raise_application_error(-20300,'Integrity Error. Foreign key id ' ||
                             to_char(:new.fk_id )||' does not exist in table ' || upper(:new.table_name) );
   end;      
END;

TR_PROJECT_OBSPROJ
create or replace trigger TR_PROJECT_OBSPROJ
after UPDATE of orig_proj_id  ON PROJECT
FOR EACH ROW
DECLARE
  vwbs_id        number;
  vobs_id        number;
  vparent_wbs_id number;
  vproject_flag  varchar(1);
BEGIN
     if :old.orig_proj_id is not NULL and :new.orig_proj_id is null then
      select wbs_id, obs_id, proj_node_flag, parent_wbs_id
        into vwbs_id, vobs_id, vproject_flag, vparent_wbs_id
        from projwbs
       where proj_id = :new.proj_id
         and proj_node_flag = 'Y';
      begin
        if vproject_flag = 'Y' and vwbs_id is not null then
          begin
            delete from obsproj where proj_id = :new.proj_id;
            insert into obsproj
              (obs_id, proj_id, wbs_id)
              select obs_id, :new.proj_id, vwbs_id
                from obsproj
               where wbs_id = vparent_wbs_id
              union
              select obs_id, :new.proj_id, vwbs_id
                from projwbs
               where proj_id = :new.proj_id;
          end;
        end if;
      end;
    elsif :old.orig_proj_id is NULL and :new.orig_proj_id is not null then
      delete from obsproj where proj_id = :new.proj_id;
    end if;
END;

TR_PROJWBS_OBSPROJ
CREATE OR REPLACE TRIGGER TR_PROJWBS_OBSPROJ
after UPDATE OR INSERT OR DELETE ON PROJWBS
FOR EACH ROW
DECLARE
  vproject_flag char(1);
  vproj_node_flag char(1);
  vproj_id number;
  vwbs_id number;
  vret_val number;
  vret_msg varchar2(4000);
  vcnt pls_integer;
  vmsg_type varchar2(10);
  vcolupd boolean;
  vorig_proj_id   number;
BEGIN
  if updating or inserting then

    select count(*) into vcnt
    from obsproj
    where proj_id = :new.proj_id
    and obs_id = :new.obs_id;

    vcolupd := false;

    if (vcnt=0) or 
       (updating and ( nvl(:old.parent_wbs_id,-9999999999) <> nvl(:new.parent_wbs_id,-9999999999)
                      or  :old.obs_id<> :new.obs_id 
                      or nvl(:old.delete_session_id,-9999999999) <> nvl(:new.delete_session_id,-9999999999))
       ) then
      -- Continue
      null;
    else
      return;
    end if;

    vproj_node_flag := :new.proj_node_flag;
    vproj_id := :new.proj_id;
  else
    vproj_node_flag := :old.proj_node_flag;
    vproj_id := :old.proj_id;
  end if;

  select project_flag, orig_proj_id
    into vproject_flag, vorig_proj_id
    from project
   where proj_id = vproj_id;

  if (vorig_proj_id is not null) then
    return;
  end if;

  if vproject_flag = 'Y' then 
    vmsg_type := 'PROJECT';
  else
    vmsg_type := 'EPS';
  end if;
  

  if deleting then
    prmqueue_add('PROJWBS_SECURITY',vmsg_type,'DELETE', trim(to_char(:old.wbs_id)), trim(to_char(:old.proj_id)) );
  elsif inserting then
    select max(wbs_id) into vwbs_id from obsproj where proj_id = :new.proj_id;
    if vproject_flag  = 'Y' and vwbs_id is not null then
      begin
        insert into obsproj (obs_id, proj_id, wbs_id)
        values (:new.obs_id,:new.proj_id,vwbs_id);
      exception
        when dup_val_on_index then
          null;
      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;
        insert into obsproj (obs_id, proj_id, wbs_id)
        values (:new.obs_id,:new.proj_id,:new.wbs_id);
      exception
        when dup_val_on_index then
          null;
      end;
    end if;
  elsif updating then
    select max(wbs_id) into vwbs_id from obsproj where proj_id = :new.proj_id;
    if :old.parent_wbs_id <> :new.parent_wbs_id and :new.proj_node_flag = 'Y' then
      prmqueue_add('PROJWBS_SECURITY',vmsg_type,'UPDATE', trim(to_char(:new.wbs_id)), trim(to_char(:new.proj_id)) );
      begin
        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
        minus
        select obs_id, proj_id, wbs_id
        from obsproj op2
        where proj_id = :new.proj_id;

        if vwbs_id is not null then
          insert into obsproj (obs_id, proj_id, wbs_id)
          values (:new.obs_id,:new.proj_id,vwbs_id);
        end if;
      exception
        when dup_val_on_index then
          null;
      end;

    elsif :old.obs_id <> :new.obs_id  then
      prmqueue_add('PROJWBS_SECURITY',vmsg_type,'UPDATE', trim(to_char(:new.wbs_id)), trim(to_char(:new.proj_id)) );
      begin
        if vwbs_id is not null then
          insert into obsproj (obs_id, proj_id, wbs_id)
          values (:new.obs_id,:new.proj_id,vwbs_id);
        end if;
      exception
        when dup_val_on_index then
          null;
      end;
    elsif ( :old.delete_session_id is null and :new.delete_session_id is not null )
          or ( :old.delete_session_id is not null and :new.delete_session_id is null ) then
      prmqueue_add('PROJWBS_SECURITY',vmsg_type,'UPDATE', trim(to_char(:new.wbs_id)), trim(to_char(:new.proj_id)) );
      begin
        if :new.delete_session_id is null then
          if vproject_flag = 'N' then
            vwbs_id := :new.wbs_id;
          end if;

          if vwbs_id is not null then
            insert into obsproj (obs_id, proj_id, wbs_id)
            values (:new.obs_id,:new.proj_id,vwbs_id);
          end if;
        end if;
      exception
        when dup_val_on_index then
          null;
      end;

    end if;
  end if;
END;

TR_RSRCHOUR_LDI
create or replace trigger TR_RSRCHOUR_LDI
BEFORE UPDATE OR INSERT ON RSRCHOUR
FOR EACH ROW
DECLARE
  vpk_id           number(10);
BEGIN
  if inserting 
      or ( :new.delete_session_id is null and :old.delete_session_id is not null ) then
    begin
      select rsrc_id into vpk_id
      from rsrc 
      where rsrc_id = :new.rsrc_id 
      and delete_session_id is not null;
      if inserting then
        raise_application_error(-20200,'LDV Integrity Error. Cannot insert/restore rsrchour ' ||
                               to_char(:new.rsrc_hr_id )||' because rsrc ' ||
                               to_char(:new.rsrc_id) || ' is deleted');
      else
        :new.delete_session_id := :old.delete_session_id;
      end if;
    exception
      when no_data_found then
        null;
    end;
    begin
      select taskrsrc_id into vpk_id
      from taskrsrc 
      where taskrsrc_id = :new.taskrsrc_id 
      and delete_session_id is not null;
      if inserting then
        raise_application_error(-20200,'LDV Integrity Error. Cannot insert/restore rsrchour ' ||
                               to_char(:new.rsrc_hr_id )||' because taskrsrc ' ||
                               to_char(:new.taskrsrc_id) || ' is deleted');
      else
        :new.delete_session_id := :old.delete_session_id;
      end if;
    exception
      when no_data_found then
        null;
    end;

  end if;
END;

TR_USERS_TSDELEGATE
CREATE OR REPLACE TRIGGER TR_USERS_TSDELEGATE
BEFORE DELETE ON USERS
FOR EACH ROW
DECLARE
BEGIN
  delete from tsdelegate tsd
   where tsd.ts_delegate_user_id = :old.user_id
      or tsd.user_id = :old.user_id;
END;

TR_USESSION_LOGOFF
create or replace trigger TR_USESSION_LOGOFF
after UPDATE or delete  ON USESSION
FOR EACH ROW
DECLARE
  vuser_name varchar(32);
  vopt       number;
BEGIN
  settings_read_bool(vopt, 'database.audit.LogOut', 'Enabled',1); 
  if vopt = 0 then
    return;
  end if;
  if :old.user_id is not null then
    select user_name into vuser_name from users where user_id = :old.user_id;
  else
    vuser_name := null;
  end if;
  IF UPDATING('DELETE_SESSION_ID') THEN
    IF :old.delete_session_id is null and
       :new.delete_session_id is not null THEN
      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)
      values
        (:old.session_id,:old.login_time,sysdate,:old.last_active_time,vuser_name,:old.user_id,:old.host_name,:old.app_name,:old.hard_drive_code,:old.db_engine_type,:old.os_user_name);
    end if;
  elsif deleting then
    if (:old.delete_session_id is null) then
      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)
      values
        (:old.session_id,:old.login_time,sysdate,:old.last_active_time,vuser_name,:old.user_id,:old.host_name,:old.app_name,:old.hard_drive_code,:old.db_engine_type,:old.os_user_name);
    end if;
  end if;
END;

PROJRSRC_VIEW
create or replace view projrsrc_view 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 

PROJROLE_VIEW
create or replace view projrole_view 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

PROJRSRCROLE_VIEW
create or replace view projrsrcrole_view 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

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

PROJRSRC_PS_VIEW
create or replace view projrsrc_ps_view
as
SELECT tk.rsrc_id, tk.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 tr.rsrc_id, tr.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 pr.rsrc_id, pr.proj_id, ps.session_id, ps.load_status
FROM projrisk pr, projshar ps
WHERE pr.rsrc_id is not null
and ps.proj_id = pr.proj_id
UNION
SELECT pe.rsrc_id, pe.proj_id, ps.session_id, ps.load_status
FROM projest pe, projshar ps
WHERE pe.rsrc_id is not null
and ps.proj_id = pe.proj_id
UNION
SELECT pi.rsrc_id, pi.proj_id, ps.session_id, ps.load_status
FROM projissu pi, projshar ps
WHERE pi.rsrc_id is not null
and ps.proj_id = pi.proj_id
UNION
SELECT wr.rsrc_id, wr.proj_id, ps.session_id, ps.load_status
FROM wbsrsrc wr, projshar ps
WHERE wr.rsrc_id is not null
and ps.proj_id = wr.proj_id

PROJROLE_PS_VIEW
CREATE OR REPLACE 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

PROJRSRCROLE_PS_VIEW
CREATE OR REPLACE 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

PFLOAD_VIEW
create or replace 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'

PFLOAD_IP_VIEW
create or replace 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

PFLOAD_UACCESS_VIEW
create or replace 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

PFLOAD_IP_UACCESS_VIEW
create or replace 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

OPENING_OBS
CREATE OR REPLACE VIEW opening_obs
AS
SELECT obs_id FROM dltobs

OPENING_ROLE
CREATE OR REPLACE VIEW opening_role
AS
SELECT role_id FROM dltrole

OPENING_ACCOUNT
CREATE OR REPLACE VIEW opening_account
AS
SELECT acct_id FROM dltacct

OPENING_USERS
CREATE OR REPLACE VIEW opening_users
AS
SELECT user_id FROM dltuser

OPENING_RSRC
CREATE OR REPLACE VIEW opening_rsrc
AS
SELECT rsrc_id FROM dltrsrc

OPENING_ACTVCODE
CREATE OR REPLACE VIEW opening_actvcode
AS
SELECT actv_code_id FROM dltactv

OPENING_RSRCROLE
CREATE OR REPLACE VIEW opening_rsrcrole
AS
SELECT rsrc_id,role_id FROM dltrsrl

WBSRSRC_ASSGN_BY_PROJ_BY_WEEK
create or replace view WBSRSRC_ASSGN_BY_PROJ_BY_WEEK
as
select proj_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, week_start

WBSRSRC_ASSGN_BY_PROJ_BY_MONTH
create or replace view WBSRSRC_ASSGN_BY_PROJ_BY_MONTH
as
select proj_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, month_start

WBSRSRC_ASSGN_BY_PROJ_BY_QTR
create or replace view WBSRSRC_ASSGN_BY_PROJ_BY_QTR
as
select proj_id, to_date('0'|| to_char(month_start, 'Q' )*3-2 || '-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY')
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 proj_id, to_date('0'|| to_char(month_start, 'Q' )*3-2 || '-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY')

WBSRSRC_ASSGN_BY_PROJ_BY_YEAR
create or replace view WBSRSRC_ASSGN_BY_PROJ_BY_YEAR
as
select proj_id, to_date('01-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY') 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, to_date('01-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY')

WBSRSRC_ASSGN_BY_RSRC_BY_WEEK
create or replace view WBSRSRC_ASSGN_BY_RSRC_BY_WEEK
as
select rsrc_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 rsrc_id, week_start

WBSRSRC_ASSGN_BY_RSRC_BY_MONTH
create or replace view WBSRSRC_ASSGN_BY_RSRC_BY_MONTH
as
select rsrc_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 rsrc_id, month_start

WBSRSRC_ASSGN_BY_RSRC_BY_QTR
create or replace view WBSRSRC_ASSGN_BY_RSRC_BY_QTR
as
select rsrc_id, to_date('0'|| to_char(month_start, 'Q' )*3-2 || '-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY')
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 rsrc_id, to_date('0'|| to_char(month_start, 'Q' )*3-2 || '-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY')

WBSRSRC_ASSGN_BY_RSRC_BY_YEAR
create or replace view WBSRSRC_ASSGN_BY_RSRC_BY_YEAR
as
select rsrc_id, to_date('01-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY') 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  rsrc_id, to_date('01-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY')

WBSRSRC_ASSGN_BY_ROLE_BY_WEEK
create or replace view WBSRSRC_ASSGN_BY_ROLE_BY_WEEK
as
select 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 role_id, week_start

WBSRSRC_ASSGN_BY_ROLE_BY_MONTH
create or replace view WBSRSRC_ASSGN_BY_ROLE_BY_MONTH
as
select 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 role_id, month_start

WBSRSRC_ASSGN_BY_ROLE_BY_QTR
create or replace view WBSRSRC_ASSGN_BY_ROLE_BY_QTR
as
select role_id, to_date('0'|| to_char(month_start, 'Q' )*3-2 || '-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY')
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 role_id, to_date('0'|| to_char(month_start, 'Q' )*3-2 || '-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY')

WBSRSRC_ASSGN_BY_ROLE_BY_YEAR
create or replace view WBSRSRC_ASSGN_BY_ROLE_BY_YEAR
as
select role_id, to_date('01-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY') 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  role_id, to_date('01-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY')

WBSRSRC_ASSGN_BY_PROJRSRC_WEEK
CREATE OR REPLACE VIEW WBSRSRC_ASSGN_BY_PROJRSRC_WEEK
(PROJ_ID, RSRC_ID,  WEEK_START, PROJECT_SUMM_QTY)
AS 
select proj_id, rsrc_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, week_start

WBSRSRC_ASSGN_BY_PROJRSRC_MON
CREATE OR REPLACE VIEW WBSRSRC_ASSGN_BY_PROJRSRC_MON
(PROJ_ID, RSRC_ID,  MONTH_START, PROJECT_SUMM_QTY)
AS 
select proj_id, rsrc_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, month_start

WBSRSRC_ASSGN_BY_PROJRSRC_QTR
CREATE OR REPLACE VIEW WBSRSRC_ASSGN_BY_PROJRSRC_QTR
(PROJ_ID, RSRC_ID,  QTR, PROJECT_SUMM_QTY)
AS 
select proj_id, rsrc_id,  to_date('0'|| to_char(month_start, 'Q' )*3-2 || '-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY')
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 proj_id,  rsrc_id, to_date('0'|| to_char(month_start, 'Q' )*3-2 || '-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY')

WBSRSRC_ASSGN_BY_PROJRSRC_YEAR
CREATE OR REPLACE VIEW WBSRSRC_ASSGN_BY_PROJRSRC_YEAR
(PROJ_ID, RSRC_ID,  YEAR, PROJECT_SUMM_QTY)
AS 
select proj_id, rsrc_id,  to_date('01-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY') 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, to_date('01-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY')

WBSRSRC_ASSGN_BY_PROJROLE_WEEK
CREATE OR REPLACE VIEW WBSRSRC_ASSGN_BY_PROJROLE_WEEK
(PROJ_ID, ROLE_ID, WEEK_START, PROJECT_SUMM_QTY)
AS 
select proj_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,  role_id, week_start

WBSRSRC_ASSGN_BY_PROJROLE_MON
CREATE OR REPLACE VIEW WBSRSRC_ASSGN_BY_PROJROLE_MON
(PROJ_ID, ROLE_ID, MONTH_START, PROJECT_SUMM_QTY)
AS 
select proj_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, role_id, month_start

WBSRSRC_ASSGN_BY_PROJROLE_QTR
CREATE OR REPLACE VIEW WBSRSRC_ASSGN_BY_PROJROLE_QTR
(PROJ_ID, ROLE_ID, QTR, PROJECT_SUMM_QTY)
AS 
select proj_id, role_id,  to_date('0'|| to_char(month_start, 'Q' )*3-2 || '-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY')
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 proj_id,  role_id, to_date('0'|| to_char(month_start, 'Q' )*3-2 || '-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY')

WBSRSRC_ASSGN_BY_PROJROLE_YEAR
CREATE OR REPLACE VIEW WBSRSRC_ASSGN_BY_PROJROLE_YEAR
(PROJ_ID, ROLE_ID, YEAR, PROJECT_SUMM_QTY)
AS 
select proj_id, role_id,  to_date('01-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY') 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,  role_id, to_date('01-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY')

WBSRSRC_ASSGN_SUMMARY_BY_MON
CREATE OR REPLACE VIEW WBSRSRC_ASSGN_SUMMARY_BY_MON
(PROJ_ID, RSRC_ID, ROLE_ID, MONTH_START, PROJECT_SUMM_QTY)
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

WBSRSRC_ASSGN_SUMMARY_BY_QTR
CREATE OR REPLACE VIEW WBSRSRC_ASSGN_SUMMARY_BY_QTR
(PROJ_ID, RSRC_ID, ROLE_ID, QTR, PROJECT_SUMM_QTY)
AS 
select proj_id, rsrc_id, role_id,  to_date('0'|| to_char(month_start, 'Q' )*3-2 || '-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY')
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 proj_id, rsrc_id, role_id, to_date('0'|| to_char(month_start, 'Q' )*3-2 || '-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY')

WBSRSRC_ASSGN_SUMMARY_BY_WEEK
CREATE OR REPLACE VIEW WBSRSRC_ASSGN_SUMMARY_BY_WEEK
(PROJ_ID, RSRC_ID, ROLE_ID, WEEK_START, PROJECT_SUMM_QTY)
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

WBSRSRC_ASSGN_SUMMARY_BY_YEAR
CREATE OR REPLACE VIEW WBSRSRC_ASSGN_SUMMARY_BY_YEAR
(PROJ_ID, RSRC_ID, ROLE_ID, YEAR, PROJECT_SUMM_QTY)
AS 
select proj_id, rsrc_id, role_id,  to_date('01-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY') 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,  role_id, to_date('01-01-' || to_char(month_start,'YYYY'),'MM-DD-YYYY')

WBSRSRC_ASSN_BY_PROJ_BY_FP
create or replace view WBSRSRC_ASSN_BY_PROJ_BY_FP
as
SELECT proj_id, fin_dates_id, SUM(proj_summ_qty) proj_summ_qty
FROM  (SELECT r.proj_id, q.fin_dates_id1 fin_dates_id, q.fin_qty1 proj_summ_qty
       FROM WBSRSRC_QTY q INNER JOIN
            WBSRSRC r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
            PROJECT 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 fin_dates_id, q.fin_qty2 proj_summ_qty
       FROM WBSRSRC_QTY q INNER JOIN
            WBSRSRC r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
            PROJECT 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 proj_summ_qty
       FROM WBSRSRC_QTY q INNER JOIN
            WBSRSRC r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
            FINDATES f ON q.week_start >= f.start_date AND q.week_start <= f.end_date INNER JOIN
            PROJECT p ON r.proj_id = p.proj_id
       WHERE (to_number(to_char(q.month_start,'mm')) = to_number(to_char(q.week_start,'mm'))) 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 proj_summ_qty
       FROM WBSRSRC_QTY q INNER JOIN
            WBSRSRC r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
            FINDATES f ON q.month_start >= f.start_date AND q.month_start <= f.end_date INNER JOIN
            PROJECT p ON r.proj_id = p.proj_id
       WHERE (to_number(to_char(q.month_start,'mm')) <> to_number(to_char(q.week_start,'mm'))) 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)) X
GROUP BY proj_id, fin_dates_id

WBSRSRC_ASSN_BY_PROJROLE_BY_FP
create or replace view WBSRSRC_ASSN_BY_PROJROLE_BY_FP
as 
SELECT proj_id, role_id, fin_dates_id, SUM(proj_summ_qty) proj_summ_qty
FROM (SELECT r.proj_id, r.role_id, q.fin_dates_id1 fin_dates_id, q.fin_qty1 proj_summ_qty
      FROM WBSRSRC_QTY q INNER JOIN
           WBSRSRC r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           PROJECT 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 fin_dates_id, q.fin_qty2 proj_summ_qty
      FROM WBSRSRC_QTY q INNER JOIN
           WBSRSRC r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           PROJECT 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 proj_summ_qty
      FROM WBSRSRC_QTY q INNER JOIN
           WBSRSRC r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           FINDATES f ON q.week_start >= f.start_date AND q.week_start <= f.end_date INNER JOIN
           PROJECT p ON r.proj_id = p.proj_id
      WHERE (to_number(to_char(q.month_start,'mm')) = to_number(to_char(q.week_start,'mm'))) 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, f.fin_dates_id, q.qty proj_summ_qty
      FROM WBSRSRC_QTY q INNER JOIN
           WBSRSRC r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           FINDATES f ON q.month_start >= f.start_date AND q.month_start <= f.end_date INNER JOIN
           PROJECT p ON r.proj_id = p.proj_id
      WHERE (to_number(to_char(q.month_start,'mm')) <> to_number(to_char(q.week_start,'mm'))) 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)) X
GROUP BY proj_id, role_id, fin_dates_id

WBSRSRC_ASSN_BY_PROJRSRC_BY_FP
create or replace view WBSRSRC_ASSN_BY_PROJRSRC_BY_FP
as 
SELECT proj_id, rsrc_id, fin_dates_id, SUM(proj_summ_qty) proj_summ_qty
FROM (SELECT r.proj_id, r.rsrc_id, q.fin_dates_id1 fin_dates_id, q.fin_qty1 proj_summ_qty
      FROM WBSRSRC r INNER JOIN
           WBSRSRC_QTY q ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           PROJECT 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 fin_dates_id, q.fin_qty2 proj_summ_qty
      FROM WBSRSRC r INNER JOIN
           WBSRSRC_QTY q ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           PROJECT 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 proj_summ_qty
      FROM WBSRSRC r INNER JOIN
           WBSRSRC_QTY q ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           FINDATES f ON q.week_start >= f.start_date AND q.week_start <= f.end_date INNER JOIN
           PROJECT p ON r.proj_id = p.proj_id
      WHERE (to_number(to_char(q.month_start,'mm')) = to_number(to_char(q.week_start,'mm'))) 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 proj_summ_qty
      FROM WBSRSRC r INNER JOIN
           WBSRSRC_QTY q ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           FINDATES f ON q.month_start >= f.start_date AND q.month_start <= f.end_date INNER JOIN
           PROJECT p ON r.proj_id = p.proj_id
      WHERE (to_number(to_char(q.month_start,'mm')) <> to_number(to_char(q.week_start,'mm'))) 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)) X
GROUP BY proj_id, rsrc_id, fin_dates_id

WBSRSRC_ASSN_SUMMARY_BY_FP
create or replace view WBSRSRC_ASSN_SUMMARY_BY_FP
as 
SELECT proj_id, role_id, rsrc_id, fin_dates_id, SUM(proj_summ_qty) proj_summ_qty
FROM (SELECT r.proj_id, r.role_id, r.rsrc_id, q.fin_dates_id1 fin_dates_id, q.fin_qty1 proj_summ_qty
      FROM WBSRSRC_QTY q INNER JOIN
           WBSRSRC r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           PROJECT 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 fin_dates_id, q.fin_qty2 proj_summ_qty
      FROM WBSRSRC_QTY q INNER JOIN
           WBSRSRC r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           PROJECT 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 proj_summ_qty
      FROM WBSRSRC_QTY q INNER JOIN
           WBSRSRC r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           FINDATES f ON q.week_start >= f.start_date AND q.week_start <= f.end_date INNER JOIN
           PROJECT p ON r.proj_id = p.proj_id
      WHERE (to_number(to_char(q.month_start,'mm')) = to_number(to_char(q.week_start,'mm'))) 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 proj_summ_qty
      FROM WBSRSRC_QTY q INNER JOIN
           WBSRSRC r ON q.wbsrsrc_id = r.wbsrsrc_id INNER JOIN
           FINDATES f ON q.month_start >= f.start_date AND q.month_start <= f.end_date INNER JOIN
           PROJECT p ON r.proj_id = p.proj_id
      WHERE (to_number(to_char(q.month_start,'mm')) <> to_number(to_char(q.week_start,'mm'))) 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)) X
GROUP BY proj_id, role_id, rsrc_id, fin_dates_id

PRMAUD_ACCOUNT
create or replace trigger PRMAUD_ACCOUNT
after insert or update or delete on ACCOUNT
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('ACCOUNT',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.acct_id;
				

    else
    	vpk1 := :new.acct_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('acct_id') then	 prm_audit.audit_data ('ACCOUNT','acct_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.acct_id,:new.acct_id); end if;
    if voper <> 'U' or  updating('acct_seq_num') then	 prm_audit.audit_data ('ACCOUNT','acct_seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.acct_seq_num,:new.acct_seq_num); end if;
    if voper <> 'U' or  updating('acct_short_name') then	 prm_audit.audit_data ('ACCOUNT','acct_short_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.acct_short_name,:new.acct_short_name); end if;
    if voper <> 'U' or  updating('acct_name') then	 prm_audit.audit_data ('ACCOUNT','acct_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.acct_name,:new.acct_name); end if;
    if voper <> 'U' or  updating('parent_acct_id') then	 prm_audit.audit_data ('ACCOUNT','parent_acct_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.parent_acct_id,:new.parent_acct_id); end if;
    if voper <> 'U' or ( updating('acct_descr') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('ACCOUNT','acct_descr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.acct_descr,:new.acct_descr); end if;

  end if;


      prm_audit.audit_row ( 'ACCOUNT',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_ACTVCODE
create or replace trigger PRMAUD_ACTVCODE
after insert or update or delete on ACTVCODE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('ACTVCODE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.actv_code_id;
				

    else
    	vpk1 := :new.actv_code_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('actv_code_id') then	 prm_audit.audit_data ('ACTVCODE','actv_code_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.actv_code_id,:new.actv_code_id); end if;
    if voper <> 'U' or  updating('actv_code_type_id') then	 prm_audit.audit_data ('ACTVCODE','actv_code_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.actv_code_type_id,:new.actv_code_type_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('ACTVCODE','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('short_name') then	 prm_audit.audit_data ('ACTVCODE','short_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.short_name,:new.short_name); end if;
    if voper <> 'U' or  updating('parent_actv_code_id') then	 prm_audit.audit_data ('ACTVCODE','parent_actv_code_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.parent_actv_code_id,:new.parent_actv_code_id); end if;
    if voper <> 'U' or  updating('actv_code_name') then	 prm_audit.audit_data ('ACTVCODE','actv_code_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.actv_code_name,:new.actv_code_name); end if;
    if voper <> 'U' or  updating('color') then	 prm_audit.audit_data ('ACTVCODE','color',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.color,:new.color); end if;

  end if;


      prm_audit.audit_row ( 'ACTVCODE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_ACTVTYPE
create or replace trigger PRMAUD_ACTVTYPE
after insert or update or delete on ACTVTYPE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('ACTVTYPE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.actv_code_type_id;
				

    else
    	vpk1 := :new.actv_code_type_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('actv_code_type_id') then	 prm_audit.audit_data ('ACTVTYPE','actv_code_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.actv_code_type_id,:new.actv_code_type_id); end if;
    if voper <> 'U' or  updating('actv_short_len') then	 prm_audit.audit_data ('ACTVTYPE','actv_short_len',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.actv_short_len,:new.actv_short_len); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('ACTVTYPE','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('actv_code_type') then	 prm_audit.audit_data ('ACTVTYPE','actv_code_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.actv_code_type,:new.actv_code_type); end if;
    if voper <> 'U' or  updating('actv_code_type_scope') then	 prm_audit.audit_data ('ACTVTYPE','actv_code_type_scope',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.actv_code_type_scope,:new.actv_code_type_scope); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('ACTVTYPE','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('super_flag') then	 prm_audit.audit_data ('ACTVTYPE','super_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.super_flag,:new.super_flag); end if;

  end if;


      prm_audit.audit_row ( 'ACTVTYPE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_ADMIN_CONFIG
create or replace trigger PRMAUD_ADMIN_CONFIG
after insert or update or delete on ADMIN_CONFIG
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('ADMIN_CONFIG',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.config_name;
				

    else
    	vpk1 := :new.config_name;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('config_name') then	 prm_audit.audit_data ('ADMIN_CONFIG','config_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.config_name,:new.config_name); end if;
    if voper <> 'U' or  updating('config_type') then	 prm_audit.audit_data ('ADMIN_CONFIG','config_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.config_type,:new.config_type); end if;
    if voper <> 'U' or  updating('factory_version') then	 prm_audit.audit_data ('ADMIN_CONFIG','factory_version',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.factory_version,:new.factory_version); end if;
    if voper <> 'U' or  updating('last_change_date') then	 prm_audit.audit_data ('ADMIN_CONFIG','last_change_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.last_change_date,'yyyymmddhh24miss'),to_char(:new.last_change_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('config_value') then	 prm_audit.audit_data ('ADMIN_CONFIG','config_value',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.config_value,:new.config_value); end if;
    if voper <> 'U' or ( updating('config_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('ADMIN_CONFIG','config_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.config_data,:new.config_data); end if;

  end if;


      prm_audit.audit_row ( 'ADMIN_CONFIG',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_BASETYPE
create or replace trigger PRMAUD_BASETYPE
after insert or update or delete on BASETYPE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('BASETYPE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.base_type_id;
				

    else
    	vpk1 := :new.base_type_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('base_type_id') then	 prm_audit.audit_data ('BASETYPE','base_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.base_type_id,:new.base_type_id); end if;
    if voper <> 'U' or  updating('base_type_seq_num') then	 prm_audit.audit_data ('BASETYPE','base_type_seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_type_seq_num,:new.base_type_seq_num); end if;
    if voper <> 'U' or  updating('base_type') then	 prm_audit.audit_data ('BASETYPE','base_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_type,:new.base_type); end if;

  end if;


      prm_audit.audit_row ( 'BASETYPE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_BRE_REGISTRY
create or replace trigger PRMAUD_BRE_REGISTRY
after insert or update or delete on BRE_REGISTRY
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('BRE_REGISTRY',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.bre_registry_id;
				

    else
    	vpk1 := :new.bre_registry_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('bre_registry_id') then	 prm_audit.audit_data ('BRE_REGISTRY','bre_registry_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.bre_registry_id,:new.bre_registry_id); end if;
    if voper <> 'U' or  updating('ip_address') then	 prm_audit.audit_data ('BRE_REGISTRY','ip_address',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ip_address,:new.ip_address); end if;
    if voper <> 'U' or  updating('start_time') then	 prm_audit.audit_data ('BRE_REGISTRY','start_time',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.start_time,'yyyymmddhh24miss'),to_char(:new.start_time,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('status_code') then	 prm_audit.audit_data ('BRE_REGISTRY','status_code',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.status_code,:new.status_code); end if;
    if voper <> 'U' or  updating('torched_time') then	 prm_audit.audit_data ('BRE_REGISTRY','torched_time',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.torched_time,'yyyymmddhh24miss'),to_char(:new.torched_time,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('config_name') then	 prm_audit.audit_data ('BRE_REGISTRY','config_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.config_name,:new.config_name); end if;
    if voper <> 'U' or  updating('config_changed_flag') then	 prm_audit.audit_data ('BRE_REGISTRY','config_changed_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.config_changed_flag,:new.config_changed_flag); end if;

  end if;


      prm_audit.audit_row ( 'BRE_REGISTRY',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_BUDGCHNG
create or replace trigger PRMAUD_BUDGCHNG
after insert or update or delete on BUDGCHNG
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('BUDGCHNG',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.budg_chng_id;
				

    else
    	vpk1 := :new.budg_chng_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('budg_chng_id') then	 prm_audit.audit_data ('BUDGCHNG','budg_chng_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.budg_chng_id,:new.budg_chng_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('BUDGCHNG','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('wbs_id') then	 prm_audit.audit_data ('BUDGCHNG','wbs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_id,:new.wbs_id); end if;
    if voper <> 'U' or  updating('chng_date') then	 prm_audit.audit_data ('BUDGCHNG','chng_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.chng_date,'yyyymmddhh24miss'),to_char(:new.chng_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('chng_short_name') then	 prm_audit.audit_data ('BUDGCHNG','chng_short_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.chng_short_name,:new.chng_short_name); end if;
    if voper <> 'U' or  updating('chng_cost') then	 prm_audit.audit_data ('BUDGCHNG','chng_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.chng_cost,:new.chng_cost); end if;
    if voper <> 'U' or  updating('chng_by_name') then	 prm_audit.audit_data ('BUDGCHNG','chng_by_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.chng_by_name,:new.chng_by_name); end if;
    if voper <> 'U' or  updating('status_code') then	 prm_audit.audit_data ('BUDGCHNG','status_code',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.status_code,:new.status_code); end if;
    if voper <> 'U' or  updating('chng_descr') then	 prm_audit.audit_data ('BUDGCHNG','chng_descr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.chng_descr,:new.chng_descr); end if;

  end if;


      prm_audit.audit_row ( 'BUDGCHNG',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_CALENDAR
create or replace trigger PRMAUD_CALENDAR
after insert or update or delete on CALENDAR
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('CALENDAR',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.clndr_id;
				

    else
    	vpk1 := :new.clndr_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('clndr_id') then	 prm_audit.audit_data ('CALENDAR','clndr_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.clndr_id,:new.clndr_id); end if;
    if voper <> 'U' or  updating('default_flag') then	 prm_audit.audit_data ('CALENDAR','default_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.default_flag,:new.default_flag); end if;
    if voper <> 'U' or  updating('clndr_name') then	 prm_audit.audit_data ('CALENDAR','clndr_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.clndr_name,:new.clndr_name); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('CALENDAR','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('base_clndr_id') then	 prm_audit.audit_data ('CALENDAR','base_clndr_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_clndr_id,:new.base_clndr_id); end if;
    if voper <> 'U' or  updating('last_chng_date') then	 prm_audit.audit_data ('CALENDAR','last_chng_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.last_chng_date,'yyyymmddhh24miss'),to_char(:new.last_chng_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('clndr_type') then	 prm_audit.audit_data ('CALENDAR','clndr_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.clndr_type,:new.clndr_type); end if;
    if voper <> 'U' or ( updating('clndr_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('CALENDAR','clndr_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.clndr_data,:new.clndr_data); end if;
    if voper <> 'U' or  updating('day_hr_cnt') then	 prm_audit.audit_data ('CALENDAR','day_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.day_hr_cnt,:new.day_hr_cnt); end if;
    if voper <> 'U' or  updating('week_hr_cnt') then	 prm_audit.audit_data ('CALENDAR','week_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.week_hr_cnt,:new.week_hr_cnt); end if;
    if voper <> 'U' or  updating('year_hr_cnt') then	 prm_audit.audit_data ('CALENDAR','year_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.year_hr_cnt,:new.year_hr_cnt); end if;
    if voper <> 'U' or  updating('month_hr_cnt') then	 prm_audit.audit_data ('CALENDAR','month_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.month_hr_cnt,:new.month_hr_cnt); end if;

  end if;


      prm_audit.audit_row ( 'CALENDAR',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_COSTTYPE
create or replace trigger PRMAUD_COSTTYPE
after insert or update or delete on COSTTYPE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('COSTTYPE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.cost_type_id;
				

    else
    	vpk1 := :new.cost_type_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('cost_type_id') then	 prm_audit.audit_data ('COSTTYPE','cost_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.cost_type_id,:new.cost_type_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('COSTTYPE','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('cost_type') then	 prm_audit.audit_data ('COSTTYPE','cost_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_type,:new.cost_type); end if;

  end if;


      prm_audit.audit_row ( 'COSTTYPE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_CURRTYPE
create or replace trigger PRMAUD_CURRTYPE
after insert or update or delete on CURRTYPE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('CURRTYPE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.curr_id;
				

    else
    	vpk1 := :new.curr_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('curr_id') then	 prm_audit.audit_data ('CURRTYPE','curr_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.curr_id,:new.curr_id); end if;
    if voper <> 'U' or  updating('decimal_digit_cnt') then	 prm_audit.audit_data ('CURRTYPE','decimal_digit_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.decimal_digit_cnt,:new.decimal_digit_cnt); end if;
    if voper <> 'U' or  updating('curr_symbol') then	 prm_audit.audit_data ('CURRTYPE','curr_symbol',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.curr_symbol,:new.curr_symbol); end if;
    if voper <> 'U' or  updating('decimal_symbol') then	 prm_audit.audit_data ('CURRTYPE','decimal_symbol',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.decimal_symbol,:new.decimal_symbol); end if;
    if voper <> 'U' or  updating('digit_group_symbol') then	 prm_audit.audit_data ('CURRTYPE','digit_group_symbol',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.digit_group_symbol,:new.digit_group_symbol); end if;
    if voper <> 'U' or  updating('pos_curr_fmt_type') then	 prm_audit.audit_data ('CURRTYPE','pos_curr_fmt_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pos_curr_fmt_type,:new.pos_curr_fmt_type); end if;
    if voper <> 'U' or  updating('neg_curr_fmt_type') then	 prm_audit.audit_data ('CURRTYPE','neg_curr_fmt_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.neg_curr_fmt_type,:new.neg_curr_fmt_type); end if;
    if voper <> 'U' or  updating('curr_type') then	 prm_audit.audit_data ('CURRTYPE','curr_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.curr_type,:new.curr_type); end if;
    if voper <> 'U' or  updating('curr_short_name') then	 prm_audit.audit_data ('CURRTYPE','curr_short_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.curr_short_name,:new.curr_short_name); end if;
    if voper <> 'U' or  updating('group_digit_cnt') then	 prm_audit.audit_data ('CURRTYPE','group_digit_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.group_digit_cnt,:new.group_digit_cnt); end if;
    if voper <> 'U' or  updating('base_exch_rate') then	 prm_audit.audit_data ('CURRTYPE','base_exch_rate',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_exch_rate,:new.base_exch_rate); end if;

  end if;


      prm_audit.audit_row ( 'CURRTYPE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_DASHBOARD
create or replace trigger PRMAUD_DASHBOARD
after insert or update or delete on DASHBOARD
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('DASHBOARD',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.dashboard_id;
				

    else
    	vpk1 := :new.dashboard_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('dashboard_id') then	 prm_audit.audit_data ('DASHBOARD','dashboard_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.dashboard_id,:new.dashboard_id); end if;
    if voper <> 'U' or  updating('dashboard_name') then	 prm_audit.audit_data ('DASHBOARD','dashboard_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.dashboard_name,:new.dashboard_name); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('DASHBOARD','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('table_name') then	 prm_audit.audit_data ('DASHBOARD','table_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.table_name,:new.table_name); end if;
    if voper <> 'U' or  updating('fk_id') then	 prm_audit.audit_data ('DASHBOARD','fk_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fk_id,:new.fk_id); end if;
    if voper <> 'U' or  updating('lock_filter_flag') then	 prm_audit.audit_data ('DASHBOARD','lock_filter_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.lock_filter_flag,:new.lock_filter_flag); end if;
    if voper <> 'U' or  updating('max_rows_per_portlet') then	 prm_audit.audit_data ('DASHBOARD','max_rows_per_portlet',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.max_rows_per_portlet,:new.max_rows_per_portlet); end if;
    if voper <> 'U' or  updating('dashboard_layout_data') then	 prm_audit.audit_data ('DASHBOARD','dashboard_layout_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.dashboard_layout_data,:new.dashboard_layout_data); end if;
    if voper <> 'U' or ( updating('portlet_settings_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('DASHBOARD','portlet_settings_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.portlet_settings_data,:new.portlet_settings_data); end if;

  end if;


      prm_audit.audit_row ( 'DASHBOARD',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_DASHUSER
create or replace trigger PRMAUD_DASHUSER
after insert or update or delete on DASHUSER
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('DASHUSER',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  vprm_user_name := prm_audit.g_prm_user_name;

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.dashboard_id;
				
vpk2 := :old.user_id;
				

    else
    	vpk1 := :new.dashboard_id;
				
vpk2 := :new.user_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('dashboard_id') then	 prm_audit.audit_data ('DASHUSER','dashboard_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.dashboard_id,:new.dashboard_id); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('DASHUSER','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;

  end if;


      prm_audit.audit_row ( 'DASHUSER',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_DOCCATG
create or replace trigger PRMAUD_DOCCATG
after insert or update or delete on DOCCATG
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('DOCCATG',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.doc_catg_id;
				

    else
    	vpk1 := :new.doc_catg_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('doc_catg_id') then	 prm_audit.audit_data ('DOCCATG','doc_catg_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.doc_catg_id,:new.doc_catg_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('DOCCATG','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('doc_catg_name') then	 prm_audit.audit_data ('DOCCATG','doc_catg_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.doc_catg_name,:new.doc_catg_name); end if;

  end if;


      prm_audit.audit_row ( 'DOCCATG',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_DOCSTAT
create or replace trigger PRMAUD_DOCSTAT
after insert or update or delete on DOCSTAT
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('DOCSTAT',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.doc_status_id;
				

    else
    	vpk1 := :new.doc_status_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('doc_status_id') then	 prm_audit.audit_data ('DOCSTAT','doc_status_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.doc_status_id,:new.doc_status_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('DOCSTAT','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('doc_status_code') then	 prm_audit.audit_data ('DOCSTAT','doc_status_code',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.doc_status_code,:new.doc_status_code); end if;

  end if;


      prm_audit.audit_row ( 'DOCSTAT',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_DOCUMENT
create or replace trigger PRMAUD_DOCUMENT
after insert or update or delete on DOCUMENT
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('DOCUMENT',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.doc_id;
				

    else
    	vpk1 := :new.doc_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('doc_id') then	 prm_audit.audit_data ('DOCUMENT','doc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.doc_id,:new.doc_id); end if;
    if voper <> 'U' or  updating('doc_seq_num') then	 prm_audit.audit_data ('DOCUMENT','doc_seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.doc_seq_num,:new.doc_seq_num); end if;
    if voper <> 'U' or  updating('deliv_flag') then	 prm_audit.audit_data ('DOCUMENT','deliv_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.deliv_flag,:new.deliv_flag); end if;
    if voper <> 'U' or  updating('doc_name') then	 prm_audit.audit_data ('DOCUMENT','doc_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.doc_name,:new.doc_name); end if;
    if voper <> 'U' or  updating('parent_doc_id') then	 prm_audit.audit_data ('DOCUMENT','parent_doc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.parent_doc_id,:new.parent_doc_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('DOCUMENT','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('doc_status_id') then	 prm_audit.audit_data ('DOCUMENT','doc_status_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.doc_status_id,:new.doc_status_id); end if;
    if voper <> 'U' or  updating('doc_catg_id') then	 prm_audit.audit_data ('DOCUMENT','doc_catg_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.doc_catg_id,:new.doc_catg_id); end if;
    if voper <> 'U' or  updating('doc_date') then	 prm_audit.audit_data ('DOCUMENT','doc_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.doc_date,'yyyymmddhh24miss'),to_char(:new.doc_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('version_name') then	 prm_audit.audit_data ('DOCUMENT','version_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.version_name,:new.version_name); end if;
    if voper <> 'U' or  updating('guid') then	 prm_audit.audit_data ('DOCUMENT','guid',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.guid,:new.guid); end if;
    if voper <> 'U' or  updating('tmpl_guid') then	 prm_audit.audit_data ('DOCUMENT','tmpl_guid',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.tmpl_guid,:new.tmpl_guid); end if;
    if voper <> 'U' or  updating('doc_short_name') then	 prm_audit.audit_data ('DOCUMENT','doc_short_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.doc_short_name,:new.doc_short_name); end if;
    if voper <> 'U' or  updating('author_name') then	 prm_audit.audit_data ('DOCUMENT','author_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.author_name,:new.author_name); end if;
    if voper <> 'U' or  updating('private_loc') then	 prm_audit.audit_data ('DOCUMENT','private_loc',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.private_loc,:new.private_loc); end if;
    if voper <> 'U' or  updating('public_loc') then	 prm_audit.audit_data ('DOCUMENT','public_loc',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.public_loc,:new.public_loc); end if;
    if voper <> 'U' or ( updating('doc_content') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('DOCUMENT','doc_content',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.doc_content,:new.doc_content); end if;
    if voper <> 'U' or  updating('rsrc_id') then	 prm_audit.audit_data ('DOCUMENT','rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_id,:new.rsrc_id); end if;
    if voper <> 'U' or  updating('doc_mgmt_type') then	 prm_audit.audit_data ('DOCUMENT','doc_mgmt_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.doc_mgmt_type,:new.doc_mgmt_type); end if;
    if voper <> 'U' or  updating('external_doc_key') then	 prm_audit.audit_data ('DOCUMENT','external_doc_key',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.external_doc_key,:new.external_doc_key); end if;
    if voper <> 'U' or  updating('cr_external_doc_key') then	 prm_audit.audit_data ('DOCUMENT','cr_external_doc_key',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cr_external_doc_key,:new.cr_external_doc_key); end if;

  end if;


      prm_audit.audit_row ( 'DOCUMENT',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_EXTAPP
create or replace trigger PRMAUD_EXTAPP
after insert or update or delete on EXTAPP
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('EXTAPP',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.app_id;
				

    else
    	vpk1 := :new.app_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('app_id') then	 prm_audit.audit_data ('EXTAPP','app_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.app_id,:new.app_id); end if;
    if voper <> 'U' or  updating('login_supply_flag') then	 prm_audit.audit_data ('EXTAPP','login_supply_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.login_supply_flag,:new.login_supply_flag); end if;
    if voper <> 'U' or  updating('app_name') then	 prm_audit.audit_data ('EXTAPP','app_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.app_name,:new.app_name); end if;
    if voper <> 'U' or  updating('app_exe_name') then	 prm_audit.audit_data ('EXTAPP','app_exe_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.app_exe_name,:new.app_exe_name); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('EXTAPP','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('app_user_name') then	 prm_audit.audit_data ('EXTAPP','app_user_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.app_user_name,:new.app_user_name); end if;
    if voper <> 'U' or  updating('app_passwd') then	 prm_audit.audit_data ('EXTAPP','app_passwd',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.app_passwd,:new.app_passwd); end if;
    if voper <> 'U' or  updating('app_data_name') then	 prm_audit.audit_data ('EXTAPP','app_data_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.app_data_name,:new.app_data_name); end if;
    if voper <> 'U' or  updating('app_parm_string') then	 prm_audit.audit_data ('EXTAPP','app_parm_string',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.app_parm_string,:new.app_parm_string); end if;
    if voper <> 'U' or  updating('app_data_loc') then	 prm_audit.audit_data ('EXTAPP','app_data_loc',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.app_data_loc,:new.app_data_loc); end if;

  end if;


      prm_audit.audit_row ( 'EXTAPP',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_EXPPROJ
create or replace trigger PRMAUD_EXPPROJ
after insert or update or delete on EXPPROJ
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('EXPPROJ',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.proj_id;
				

    else
    	vpk1 := :new.proj_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('EXPPROJ','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('exp_group') then	 prm_audit.audit_data ('EXPPROJ','exp_group',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.exp_group,:new.exp_group); end if;
    if voper <> 'U' or  updating('exp_proj_name') then	 prm_audit.audit_data ('EXPPROJ','exp_proj_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.exp_proj_name,:new.exp_proj_name); end if;
    if voper <> 'U' or  updating('login_supplied_flag') then	 prm_audit.audit_data ('EXPPROJ','login_supplied_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.login_supplied_flag,:new.login_supplied_flag); end if;
    if voper <> 'U' or  updating('exp_user_name') then	 prm_audit.audit_data ('EXPPROJ','exp_user_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.exp_user_name,:new.exp_user_name); end if;
    if voper <> 'U' or  updating('exp_passwd') then	 prm_audit.audit_data ('EXPPROJ','exp_passwd',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.exp_passwd,:new.exp_passwd); end if;

  end if;


      prm_audit.audit_row ( 'EXPPROJ',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_FACTOR
create or replace trigger PRMAUD_FACTOR
after insert or update or delete on FACTOR
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('FACTOR',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.fact_id;
				

    else
    	vpk1 := :new.fact_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('fact_id') then	 prm_audit.audit_data ('FACTOR','fact_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.fact_id,:new.fact_id); end if;
    if voper <> 'U' or  updating('fact_seq_num') then	 prm_audit.audit_data ('FACTOR','fact_seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fact_seq_num,:new.fact_seq_num); end if;
    if voper <> 'U' or  updating('fact_type') then	 prm_audit.audit_data ('FACTOR','fact_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fact_type,:new.fact_type); end if;
    if voper <> 'U' or  updating('fact_name') then	 prm_audit.audit_data ('FACTOR','fact_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fact_name,:new.fact_name); end if;
    if voper <> 'U' or  updating('def_fact_val_id') then	 prm_audit.audit_data ('FACTOR','def_fact_val_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.def_fact_val_id,:new.def_fact_val_id); end if;
    if voper <> 'U' or ( updating('fact_descr') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('FACTOR','fact_descr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.fact_descr,:new.fact_descr); end if;

  end if;


      prm_audit.audit_row ( 'FACTOR',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_FACTVAL
create or replace trigger PRMAUD_FACTVAL
after insert or update or delete on FACTVAL
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('FACTVAL',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.fact_val_id;
				

    else
    	vpk1 := :new.fact_val_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('fact_val_id') then	 prm_audit.audit_data ('FACTVAL','fact_val_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.fact_val_id,:new.fact_val_id); end if;
    if voper <> 'U' or  updating('fact_id') then	 prm_audit.audit_data ('FACTVAL','fact_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fact_id,:new.fact_id); end if;
    if voper <> 'U' or  updating('fact_value') then	 prm_audit.audit_data ('FACTVAL','fact_value',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fact_value,:new.fact_value); end if;
    if voper <> 'U' or  updating('fact_value_descr') then	 prm_audit.audit_data ('FACTVAL','fact_value_descr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fact_value_descr,:new.fact_value_descr); end if;

  end if;


      prm_audit.audit_row ( 'FACTVAL',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_FILTPROP
create or replace trigger PRMAUD_FILTPROP
after insert or update or delete on FILTPROP
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('FILTPROP',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.filter_id;
				

    else
    	vpk1 := :new.filter_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('filter_id') then	 prm_audit.audit_data ('FILTPROP','filter_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.filter_id,:new.filter_id); end if;
    if voper <> 'U' or  updating('table_name') then	 prm_audit.audit_data ('FILTPROP','table_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.table_name,:new.table_name); end if;
    if voper <> 'U' or  updating('filter_type') then	 prm_audit.audit_data ('FILTPROP','filter_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.filter_type,:new.filter_type); end if;
    if voper <> 'U' or  updating('filter_name') then	 prm_audit.audit_data ('FILTPROP','filter_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.filter_name,:new.filter_name); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('FILTPROP','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or ( updating('filter_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('FILTPROP','filter_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.filter_data,:new.filter_data); end if;

  end if;


      prm_audit.audit_row ( 'FILTPROP',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_FINDATES
create or replace trigger PRMAUD_FINDATES
after insert or update or delete on FINDATES
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('FINDATES',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.fin_dates_id;
				

    else
    	vpk1 := :new.fin_dates_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('fin_dates_id') then	 prm_audit.audit_data ('FINDATES','fin_dates_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.fin_dates_id,:new.fin_dates_id); end if;
    if voper <> 'U' or  updating('fin_dates_name') then	 prm_audit.audit_data ('FINDATES','fin_dates_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fin_dates_name,:new.fin_dates_name); end if;
    if voper <> 'U' or  updating('start_date') then	 prm_audit.audit_data ('FINDATES','start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.start_date,'yyyymmddhh24miss'),to_char(:new.start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('end_date') then	 prm_audit.audit_data ('FINDATES','end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.end_date,'yyyymmddhh24miss'),to_char(:new.end_date,'yyyymmddhh24miss')); end if;

  end if;


      prm_audit.audit_row ( 'FINDATES',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_FORMCATG
create or replace trigger PRMAUD_FORMCATG
after insert or update or delete on FORMCATG
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('FORMCATG',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.form_catg_id;
				

    else
    	vpk1 := :new.form_catg_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('form_catg_id') then	 prm_audit.audit_data ('FORMCATG','form_catg_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.form_catg_id,:new.form_catg_id); end if;
    if voper <> 'U' or  updating('form_catg_name') then	 prm_audit.audit_data ('FORMCATG','form_catg_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.form_catg_name,:new.form_catg_name); end if;

  end if;


      prm_audit.audit_row ( 'FORMCATG',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_FORMPROJ
create or replace trigger PRMAUD_FORMPROJ
after insert or update or delete on FORMPROJ
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('FORMPROJ',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.form_tmpl_id;
				
vpk2 := :old.proj_id;
				

    else
    	vpk1 := :new.form_tmpl_id;
				
vpk2 := :new.proj_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('form_tmpl_id') then	 prm_audit.audit_data ('FORMPROJ','form_tmpl_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.form_tmpl_id,:new.form_tmpl_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('FORMPROJ','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;

  end if;


      prm_audit.audit_row ( 'FORMPROJ',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_FORMTMPL
create or replace trigger PRMAUD_FORMTMPL
after insert or update or delete on FORMTMPL
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('FORMTMPL',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.form_tmpl_id;
				

    else
    	vpk1 := :new.form_tmpl_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('form_tmpl_id') then	 prm_audit.audit_data ('FORMTMPL','form_tmpl_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.form_tmpl_id,:new.form_tmpl_id); end if;
    if voper <> 'U' or  updating('form_tmpl_name') then	 prm_audit.audit_data ('FORMTMPL','form_tmpl_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.form_tmpl_name,:new.form_tmpl_name); end if;
    if voper <> 'U' or  updating('form_tmpl_desc') then	 prm_audit.audit_data ('FORMTMPL','form_tmpl_desc',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.form_tmpl_desc,:new.form_tmpl_desc); end if;
    if voper <> 'U' or  updating('form_catg_id') then	 prm_audit.audit_data ('FORMTMPL','form_catg_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.form_catg_id,:new.form_catg_id); end if;
    if voper <> 'U' or ( updating('form_tmpl_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('FORMTMPL','form_tmpl_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.form_tmpl_data,:new.form_tmpl_data); end if;

  end if;


      prm_audit.audit_row ( 'FORMTMPL',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_FUNDSRC
create or replace trigger PRMAUD_FUNDSRC
after insert or update or delete on FUNDSRC
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('FUNDSRC',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.fund_id;
				

    else
    	vpk1 := :new.fund_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('fund_id') then	 prm_audit.audit_data ('FUNDSRC','fund_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.fund_id,:new.fund_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('FUNDSRC','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('fund_name') then	 prm_audit.audit_data ('FUNDSRC','fund_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fund_name,:new.fund_name); end if;
    if voper <> 'U' or  updating('parent_fund_id') then	 prm_audit.audit_data ('FUNDSRC','parent_fund_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.parent_fund_id,:new.parent_fund_id); end if;
    if voper <> 'U' or ( updating('fund_descr') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('FUNDSRC','fund_descr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.fund_descr,:new.fund_descr); end if;

  end if;


      prm_audit.audit_row ( 'FUNDSRC',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_GCHANGE
create or replace trigger PRMAUD_GCHANGE
after insert or update or delete on GCHANGE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('GCHANGE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.gchange_id;
				

    else
    	vpk1 := :new.gchange_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('gchange_id') then	 prm_audit.audit_data ('GCHANGE','gchange_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.gchange_id,:new.gchange_id); end if;
    if voper <> 'U' or  updating('gchange_name') then	 prm_audit.audit_data ('GCHANGE','gchange_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.gchange_name,:new.gchange_name); end if;
    if voper <> 'U' or ( updating('gchange_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('GCHANGE','gchange_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.gchange_data,:new.gchange_data); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('GCHANGE','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('table_name') then	 prm_audit.audit_data ('GCHANGE','table_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.table_name,:new.table_name); end if;

  end if;


      prm_audit.audit_row ( 'GCHANGE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_ISSUHIST
create or replace trigger PRMAUD_ISSUHIST
after insert or update or delete on ISSUHIST
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('ISSUHIST',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.issue_id;
				

    else
    	vpk1 := :new.issue_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('issue_id') then	 prm_audit.audit_data ('ISSUHIST','issue_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.issue_id,:new.issue_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('ISSUHIST','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or ( updating('issue_history') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('ISSUHIST','issue_history',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.issue_history,:new.issue_history); end if;

  end if;


      prm_audit.audit_row ( 'ISSUHIST',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_ITERATION
create or replace trigger PRMAUD_ITERATION
after insert or update or delete on ITERATION
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('ITERATION',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.iteration_id;
				

    else
    	vpk1 := :new.iteration_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('iteration_id') then	 prm_audit.audit_data ('ITERATION','iteration_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.iteration_id,:new.iteration_id); end if;
    if voper <> 'U' or  updating('release_id') then	 prm_audit.audit_data ('ITERATION','release_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.release_id,:new.release_id); end if;
    if voper <> 'U' or  updating('iteration_name') then	 prm_audit.audit_data ('ITERATION','iteration_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.iteration_name,:new.iteration_name); end if;
    if voper <> 'U' or  updating('start_date') then	 prm_audit.audit_data ('ITERATION','start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.start_date,'yyyymmddhh24miss'),to_char(:new.start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('end_date') then	 prm_audit.audit_data ('ITERATION','end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.end_date,'yyyymmddhh24miss'),to_char(:new.end_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('termination_date') then	 prm_audit.audit_data ('ITERATION','termination_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.termination_date,'yyyymmddhh24miss'),to_char(:new.termination_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('capacity_pct') then	 prm_audit.audit_data ('ITERATION','capacity_pct',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.capacity_pct,:new.capacity_pct); end if;
    if voper <> 'U' or  updating('remain_qty') then	 prm_audit.audit_data ('ITERATION','remain_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_qty,:new.remain_qty); end if;

  end if;


      prm_audit.audit_row ( 'ITERATION',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_ITERDAYS
create or replace trigger PRMAUD_ITERDAYS
after insert or update or delete on ITERDAYS
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('ITERDAYS',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.task_id;
				
vpk2 := :old.day_number;
				

    else
    	vpk1 := :new.task_id;
				
vpk2 := :new.day_number;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('task_id') then	 prm_audit.audit_data ('ITERDAYS','task_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.task_id,:new.task_id); end if;
    if voper <> 'U' or  updating('day_number') then	 prm_audit.audit_data ('ITERDAYS','day_number',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.day_number,:new.day_number); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('ITERDAYS','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('iteration_id') then	 prm_audit.audit_data ('ITERDAYS','iteration_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.iteration_id,:new.iteration_id); end if;
    if voper <> 'U' or  updating('act_work_qty') then	 prm_audit.audit_data ('ITERDAYS','act_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_work_qty,:new.act_work_qty); end if;
    if voper <> 'U' or  updating('remain_work_qty') then	 prm_audit.audit_data ('ITERDAYS','remain_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_work_qty,:new.remain_work_qty); end if;

  end if;


      prm_audit.audit_row ( 'ITERDAYS',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_ITERGOAL
create or replace trigger PRMAUD_ITERGOAL
after insert or update or delete on ITERGOAL
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('ITERGOAL',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.iter_goal_id;
				

    else
    	vpk1 := :new.iter_goal_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('iter_goal_id') then	 prm_audit.audit_data ('ITERGOAL','iter_goal_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.iter_goal_id,:new.iter_goal_id); end if;
    if voper <> 'U' or  updating('iteration_id') then	 prm_audit.audit_data ('ITERGOAL','iteration_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.iteration_id,:new.iteration_id); end if;
    if voper <> 'U' or  updating('goal_name') then	 prm_audit.audit_data ('ITERGOAL','goal_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.goal_name,:new.goal_name); end if;
    if voper <> 'U' or  updating('goal_descr') then	 prm_audit.audit_data ('ITERGOAL','goal_descr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.goal_descr,:new.goal_descr); end if;
    if voper <> 'U' or  updating('status_code') then	 prm_audit.audit_data ('ITERGOAL','status_code',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.status_code,:new.status_code); end if;
    if voper <> 'U' or  updating('rfolio_id') then	 prm_audit.audit_data ('ITERGOAL','rfolio_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rfolio_id,:new.rfolio_id); end if;

  end if;


      prm_audit.audit_row ( 'ITERGOAL',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_JOBLOG
create or replace trigger PRMAUD_JOBLOG
after insert or update or delete on JOBLOG
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('JOBLOG',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.job_id;
				

    else
    	vpk1 := :new.job_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('job_id') then	 prm_audit.audit_data ('JOBLOG','job_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.job_id,:new.job_id); end if;
    if voper <> 'U' or ( updating('job_log_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('JOBLOG','job_log_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.job_log_data,:new.job_log_data); end if;

  end if;


      prm_audit.audit_row ( 'JOBLOG',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_JOBSVC
create or replace trigger PRMAUD_JOBSVC
after insert or update or delete on JOBSVC
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('JOBSVC',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.job_id;
				

    else
    	vpk1 := :new.job_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('job_id') then	 prm_audit.audit_data ('JOBSVC','job_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.job_id,:new.job_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('JOBSVC','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('audit_flag') then	 prm_audit.audit_data ('JOBSVC','audit_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.audit_flag,:new.audit_flag); end if;
    if voper <> 'U' or  updating('job_type') then	 prm_audit.audit_data ('JOBSVC','job_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.job_type,:new.job_type); end if;
    if voper <> 'U' or  updating('job_name') then	 prm_audit.audit_data ('JOBSVC','job_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.job_name,:new.job_name); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('JOBSVC','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('last_run_date') then	 prm_audit.audit_data ('JOBSVC','last_run_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.last_run_date,'yyyymmddhh24miss'),to_char(:new.last_run_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('status_code') then	 prm_audit.audit_data ('JOBSVC','status_code',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.status_code,:new.status_code); end if;
    if voper <> 'U' or  updating('recur_data') then	 prm_audit.audit_data ('JOBSVC','recur_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.recur_data,:new.recur_data); end if;
    if voper <> 'U' or  updating('recur_type') then	 prm_audit.audit_data ('JOBSVC','recur_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.recur_type,:new.recur_type); end if;
    if voper <> 'U' or  updating('submitted_date') then	 prm_audit.audit_data ('JOBSVC','submitted_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.submitted_date,'yyyymmddhh24miss'),to_char(:new.submitted_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('last_error_descr') then	 prm_audit.audit_data ('JOBSVC','last_error_descr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.last_error_descr,:new.last_error_descr); end if;
    if voper <> 'U' or  updating('audit_file_path') then	 prm_audit.audit_data ('JOBSVC','audit_file_path',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.audit_file_path,:new.audit_file_path); end if;
    if voper <> 'U' or ( updating('job_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('JOBSVC','job_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.job_data,:new.job_data); end if;

  end if;


      prm_audit.audit_row ( 'JOBSVC',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_JOBRPT
create or replace trigger PRMAUD_JOBRPT
after insert or update or delete on JOBRPT
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('JOBRPT',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.job_id;
				
vpk2 := :old.rpt_id;
				

    else
    	vpk1 := :new.job_id;
				
vpk2 := :new.rpt_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('job_id') then	 prm_audit.audit_data ('JOBRPT','job_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.job_id,:new.job_id); end if;
    if voper <> 'U' or  updating('rpt_id') then	 prm_audit.audit_data ('JOBRPT','rpt_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rpt_id,:new.rpt_id); end if;
    if voper <> 'U' or  updating('table_name') then	 prm_audit.audit_data ('JOBRPT','table_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.table_name,:new.table_name); end if;
    if voper <> 'U' or  updating('fk_id') then	 prm_audit.audit_data ('JOBRPT','fk_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fk_id,:new.fk_id); end if;
    if voper <> 'U' or ( updating('jobrpt_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('JOBRPT','jobrpt_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.jobrpt_data,:new.jobrpt_data); end if;
    if voper <> 'U' or  updating('personal_portal_flag') then	 prm_audit.audit_data ('JOBRPT','personal_portal_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.personal_portal_flag,:new.personal_portal_flag); end if;

  end if;


      prm_audit.audit_row ( 'JOBRPT',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_MEMOTYPE
create or replace trigger PRMAUD_MEMOTYPE
after insert or update or delete on MEMOTYPE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('MEMOTYPE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.memo_type_id;
				

    else
    	vpk1 := :new.memo_type_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('memo_type_id') then	 prm_audit.audit_data ('MEMOTYPE','memo_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.memo_type_id,:new.memo_type_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('MEMOTYPE','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('eps_flag') then	 prm_audit.audit_data ('MEMOTYPE','eps_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.eps_flag,:new.eps_flag); end if;
    if voper <> 'U' or  updating('proj_flag') then	 prm_audit.audit_data ('MEMOTYPE','proj_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_flag,:new.proj_flag); end if;
    if voper <> 'U' or  updating('wbs_flag') then	 prm_audit.audit_data ('MEMOTYPE','wbs_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_flag,:new.wbs_flag); end if;
    if voper <> 'U' or  updating('task_flag') then	 prm_audit.audit_data ('MEMOTYPE','task_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_flag,:new.task_flag); end if;
    if voper <> 'U' or  updating('memo_type') then	 prm_audit.audit_data ('MEMOTYPE','memo_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.memo_type,:new.memo_type); end if;

  end if;


      prm_audit.audit_row ( 'MEMOTYPE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_NONWORK
create or replace trigger PRMAUD_NONWORK
after insert or update or delete on NONWORK
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('NONWORK',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.nonwork_type_id;
				

    else
    	vpk1 := :new.nonwork_type_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('nonwork_type_id') then	 prm_audit.audit_data ('NONWORK','nonwork_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.nonwork_type_id,:new.nonwork_type_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('NONWORK','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('nonwork_code') then	 prm_audit.audit_data ('NONWORK','nonwork_code',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.nonwork_code,:new.nonwork_code); end if;
    if voper <> 'U' or  updating('nonwork_type') then	 prm_audit.audit_data ('NONWORK','nonwork_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.nonwork_type,:new.nonwork_type); end if;

  end if;


      prm_audit.audit_row ( 'NONWORK',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_NOTE
create or replace trigger PRMAUD_NOTE
after insert or update or delete on NOTE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('NOTE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.note_id;
				

    else
    	vpk1 := :new.note_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('note_id') then	 prm_audit.audit_data ('NOTE','note_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.note_id,:new.note_id); end if;
    if voper <> 'U' or  updating('table_name') then	 prm_audit.audit_data ('NOTE','table_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.table_name,:new.table_name); end if;
    if voper <> 'U' or  updating('type_name') then	 prm_audit.audit_data ('NOTE','type_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.type_name,:new.type_name); end if;
    if voper <> 'U' or  updating('fk_id') then	 prm_audit.audit_data ('NOTE','fk_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fk_id,:new.fk_id); end if;
    if voper <> 'U' or  updating('note_date') then	 prm_audit.audit_data ('NOTE','note_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.note_date,'yyyymmddhh24miss'),to_char(:new.note_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('note_value') then	 prm_audit.audit_data ('NOTE','note_value',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.note_value,:new.note_value); end if;
    if voper <> 'U' or  updating('user_name') then	 prm_audit.audit_data ('NOTE','user_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_name,:new.user_name); end if;

  end if;


      prm_audit.audit_row ( 'NOTE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_OBS
create or replace trigger PRMAUD_OBS
after insert or update or delete on OBS
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('OBS',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.obs_id;
				

    else
    	vpk1 := :new.obs_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('obs_id') then	 prm_audit.audit_data ('OBS','obs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.obs_id,:new.obs_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('OBS','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('obs_name') then	 prm_audit.audit_data ('OBS','obs_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.obs_name,:new.obs_name); end if;
    if voper <> 'U' or  updating('parent_obs_id') then	 prm_audit.audit_data ('OBS','parent_obs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.parent_obs_id,:new.parent_obs_id); end if;
    if voper <> 'U' or  updating('guid') then	 prm_audit.audit_data ('OBS','guid',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.guid,:new.guid); end if;
    if voper <> 'U' or ( updating('obs_descr') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('OBS','obs_descr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.obs_descr,:new.obs_descr); end if;

  end if;


      prm_audit.audit_row ( 'OBS',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PCATTYPE
create or replace trigger PRMAUD_PCATTYPE
after insert or update or delete on PCATTYPE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PCATTYPE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.proj_catg_type_id;
				

    else
    	vpk1 := :new.proj_catg_type_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('proj_catg_type_id') then	 prm_audit.audit_data ('PCATTYPE','proj_catg_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.proj_catg_type_id,:new.proj_catg_type_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('PCATTYPE','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('proj_catg_short_len') then	 prm_audit.audit_data ('PCATTYPE','proj_catg_short_len',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_catg_short_len,:new.proj_catg_short_len); end if;
    if voper <> 'U' or  updating('proj_catg_type') then	 prm_audit.audit_data ('PCATTYPE','proj_catg_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_catg_type,:new.proj_catg_type); end if;
    if voper <> 'U' or  updating('super_flag') then	 prm_audit.audit_data ('PCATTYPE','super_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.super_flag,:new.super_flag); end if;
    if voper <> 'U' or  updating('proj_catg_type_wt') then	 prm_audit.audit_data ('PCATTYPE','proj_catg_type_wt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_catg_type_wt,:new.proj_catg_type_wt); end if;
    if voper <> 'U' or  updating('max_proj_catg_wt') then	 prm_audit.audit_data ('PCATTYPE','max_proj_catg_wt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.max_proj_catg_wt,:new.max_proj_catg_wt); end if;

  end if;


      prm_audit.audit_row ( 'PCATTYPE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PCATUSER
create or replace trigger PRMAUD_PCATUSER
after insert or update or delete on PCATUSER
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PCATUSER',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.proj_catg_id;
				
vpk2 := :old.user_id;
				

    else
    	vpk1 := :new.proj_catg_id;
				
vpk2 := :new.user_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('proj_catg_id') then	 prm_audit.audit_data ('PCATUSER','proj_catg_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.proj_catg_id,:new.proj_catg_id); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('PCATUSER','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;

  end if;


      prm_audit.audit_row ( 'PCATUSER',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PCATVAL
create or replace trigger PRMAUD_PCATVAL
after insert or update or delete on PCATVAL
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PCATVAL',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.proj_catg_id;
				

    else
    	vpk1 := :new.proj_catg_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('proj_catg_id') then	 prm_audit.audit_data ('PCATVAL','proj_catg_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.proj_catg_id,:new.proj_catg_id); end if;
    if voper <> 'U' or  updating('proj_catg_type_id') then	 prm_audit.audit_data ('PCATVAL','proj_catg_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_catg_type_id,:new.proj_catg_type_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('PCATVAL','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('proj_catg_short_name') then	 prm_audit.audit_data ('PCATVAL','proj_catg_short_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_catg_short_name,:new.proj_catg_short_name); end if;
    if voper <> 'U' or  updating('parent_proj_catg_id') then	 prm_audit.audit_data ('PCATVAL','parent_proj_catg_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.parent_proj_catg_id,:new.parent_proj_catg_id); end if;
    if voper <> 'U' or  updating('proj_catg_name') then	 prm_audit.audit_data ('PCATVAL','proj_catg_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_catg_name,:new.proj_catg_name); end if;
    if voper <> 'U' or  updating('proj_catg_wt') then	 prm_audit.audit_data ('PCATVAL','proj_catg_wt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_catg_wt,:new.proj_catg_wt); end if;

  end if;


      prm_audit.audit_row ( 'PCATVAL',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PFOLIO
create or replace trigger PRMAUD_PFOLIO
after insert or update or delete on PFOLIO
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PFOLIO',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.pfolio_id;
				

    else
    	vpk1 := :new.pfolio_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('pfolio_id') then	 prm_audit.audit_data ('PFOLIO','pfolio_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.pfolio_id,:new.pfolio_id); end if;
    if voper <> 'U' or  updating('closed_proj_flag') then	 prm_audit.audit_data ('PFOLIO','closed_proj_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.closed_proj_flag,:new.closed_proj_flag); end if;
    if voper <> 'U' or  updating('whatif_proj_flag') then	 prm_audit.audit_data ('PFOLIO','whatif_proj_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.whatif_proj_flag,:new.whatif_proj_flag); end if;
    if voper <> 'U' or  updating('pfolio_type') then	 prm_audit.audit_data ('PFOLIO','pfolio_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pfolio_type,:new.pfolio_type); end if;
    if voper <> 'U' or  updating('pfolio_name') then	 prm_audit.audit_data ('PFOLIO','pfolio_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pfolio_name,:new.pfolio_name); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('PFOLIO','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('pfolio_descr') then	 prm_audit.audit_data ('PFOLIO','pfolio_descr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pfolio_descr,:new.pfolio_descr); end if;
    if voper <> 'U' or  updating('last_refresh_date') then	 prm_audit.audit_data ('PFOLIO','last_refresh_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.last_refresh_date,'yyyymmddhh24miss'),to_char(:new.last_refresh_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or ( updating('pfolio_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('PFOLIO','pfolio_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.pfolio_data,:new.pfolio_data); end if;

  end if;


      prm_audit.audit_row ( 'PFOLIO',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PHASE
create or replace trigger PRMAUD_PHASE
after insert or update or delete on PHASE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PHASE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.phase_id;
				

    else
    	vpk1 := :new.phase_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('phase_id') then	 prm_audit.audit_data ('PHASE','phase_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.phase_id,:new.phase_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('PHASE','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('phase_name') then	 prm_audit.audit_data ('PHASE','phase_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.phase_name,:new.phase_name); end if;

  end if;


      prm_audit.audit_row ( 'PHASE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_POBS
create or replace trigger PRMAUD_POBS
after insert or update or delete on POBS
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('POBS',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.pobs_id;
				

    else
    	vpk1 := :new.pobs_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('pobs_id') then	 prm_audit.audit_data ('POBS','pobs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.pobs_id,:new.pobs_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('POBS','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('pobs_name') then	 prm_audit.audit_data ('POBS','pobs_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pobs_name,:new.pobs_name); end if;
    if voper <> 'U' or  updating('pobs_parent_id') then	 prm_audit.audit_data ('POBS','pobs_parent_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pobs_parent_id,:new.pobs_parent_id); end if;
    if voper <> 'U' or  updating('pobs_descr') then	 prm_audit.audit_data ('POBS','pobs_descr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pobs_descr,:new.pobs_descr); end if;
    if voper <> 'U' or  updating('pobs_manager') then	 prm_audit.audit_data ('POBS','pobs_manager',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pobs_manager,:new.pobs_manager); end if;

  end if;


      prm_audit.audit_row ( 'POBS',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PREFER
create or replace trigger PRMAUD_PREFER
after insert or update or delete on PREFER
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PREFER',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.prefer_id;
				

    else
    	vpk1 := :new.prefer_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('prefer_id') then	 prm_audit.audit_data ('PREFER','prefer_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.prefer_id,:new.prefer_id); end if;
    if voper <> 'U' or  updating('hr_decimal_cnt') then	 prm_audit.audit_data ('PREFER','hr_decimal_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.hr_decimal_cnt,:new.hr_decimal_cnt); end if;
    if voper <> 'U' or  updating('xfer_complete_day_cnt') then	 prm_audit.audit_data ('PREFER','xfer_complete_day_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.xfer_complete_day_cnt,:new.xfer_complete_day_cnt); end if;
    if voper <> 'U' or  updating('xfer_notstart_day_cnt') then	 prm_audit.audit_data ('PREFER','xfer_notstart_day_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.xfer_notstart_day_cnt,:new.xfer_notstart_day_cnt); end if;
    if voper <> 'U' or  updating('max_wbs_level_cnt') then	 prm_audit.audit_data ('PREFER','max_wbs_level_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.max_wbs_level_cnt,:new.max_wbs_level_cnt); end if;
    if voper <> 'U' or  updating('max_rsrc_level_cnt') then	 prm_audit.audit_data ('PREFER','max_rsrc_level_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.max_rsrc_level_cnt,:new.max_rsrc_level_cnt); end if;
    if voper <> 'U' or  updating('max_acct_level_cnt') then	 prm_audit.audit_data ('PREFER','max_acct_level_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.max_acct_level_cnt,:new.max_acct_level_cnt); end if;
    if voper <> 'U' or  updating('max_task_actv_type_cnt') then	 prm_audit.audit_data ('PREFER','max_task_actv_type_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.max_task_actv_type_cnt,:new.max_task_actv_type_cnt); end if;
    if voper <> 'U' or  updating('future_ts_cnt') then	 prm_audit.audit_data ('PREFER','future_ts_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.future_ts_cnt,:new.future_ts_cnt); end if;
    if voper <> 'U' or  updating('max_obs_level_cnt') then	 prm_audit.audit_data ('PREFER','max_obs_level_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.max_obs_level_cnt,:new.max_obs_level_cnt); end if;
    if voper <> 'U' or  updating('week_start_day_num') then	 prm_audit.audit_data ('PREFER','week_start_day_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.week_start_day_num,:new.week_start_day_num); end if;
    if voper <> 'U' or  updating('ts_approval_level') then	 prm_audit.audit_data ('PREFER','ts_approval_level',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ts_approval_level,:new.ts_approval_level); end if;
    if voper <> 'U' or  updating('task_code_len') then	 prm_audit.audit_data ('PREFER','task_code_len',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_code_len,:new.task_code_len); end if;
    if voper <> 'U' or  updating('proj_short_len') then	 prm_audit.audit_data ('PREFER','proj_short_len',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_short_len,:new.proj_short_len); end if;
    if voper <> 'U' or  updating('wbs_short_len') then	 prm_audit.audit_data ('PREFER','wbs_short_len',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_short_len,:new.wbs_short_len); end if;
    if voper <> 'U' or  updating('rsrc_short_len') then	 prm_audit.audit_data ('PREFER','rsrc_short_len',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_short_len,:new.rsrc_short_len); end if;
    if voper <> 'U' or  updating('acct_short_len') then	 prm_audit.audit_data ('PREFER','acct_short_len',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.acct_short_len,:new.acct_short_len); end if;
    if voper <> 'U' or  updating('role_short_len') then	 prm_audit.audit_data ('PREFER','role_short_len',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.role_short_len,:new.role_short_len); end if;
    if voper <> 'U' or  updating('max_base_cnt') then	 prm_audit.audit_data ('PREFER','max_base_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.max_base_cnt,:new.max_base_cnt); end if;
    if voper <> 'U' or  updating('def_target_drtn_hr_cnt') then	 prm_audit.audit_data ('PREFER','def_target_drtn_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.def_target_drtn_hr_cnt,:new.def_target_drtn_hr_cnt); end if;
    if voper <> 'U' or  updating('day_hr_cnt') then	 prm_audit.audit_data ('PREFER','day_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.day_hr_cnt,:new.day_hr_cnt); end if;
    if voper <> 'U' or  updating('week_hr_cnt') then	 prm_audit.audit_data ('PREFER','week_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.week_hr_cnt,:new.week_hr_cnt); end if;
    if voper <> 'U' or  updating('year_hr_cnt') then	 prm_audit.audit_data ('PREFER','year_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.year_hr_cnt,:new.year_hr_cnt); end if;
    if voper <> 'U' or  updating('month_hr_cnt') then	 prm_audit.audit_data ('PREFER','month_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.month_hr_cnt,:new.month_hr_cnt); end if;
    if voper <> 'U' or  updating('max_actv_level_cnt') then	 prm_audit.audit_data ('PREFER','max_actv_level_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.max_actv_level_cnt,:new.max_actv_level_cnt); end if;
    if voper <> 'U' or  updating('max_eps_level_cnt') then	 prm_audit.audit_data ('PREFER','max_eps_level_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.max_eps_level_cnt,:new.max_eps_level_cnt); end if;
    if voper <> 'U' or  updating('max_pcat_level_cnt') then	 prm_audit.audit_data ('PREFER','max_pcat_level_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.max_pcat_level_cnt,:new.max_pcat_level_cnt); end if;
    if voper <> 'U' or  updating('max_rcat_level_cnt') then	 prm_audit.audit_data ('PREFER','max_rcat_level_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.max_rcat_level_cnt,:new.max_rcat_level_cnt); end if;
    if voper <> 'U' or  updating('complete_task_hrs_flag') then	 prm_audit.audit_data ('PREFER','complete_task_hrs_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.complete_task_hrs_flag,:new.complete_task_hrs_flag); end if;
    if voper <> 'U' or  updating('default_timesheet_flag') then	 prm_audit.audit_data ('PREFER','default_timesheet_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.default_timesheet_flag,:new.default_timesheet_flag); end if;
    if voper <> 'U' or  updating('future_ts_hrs_flag') then	 prm_audit.audit_data ('PREFER','future_ts_hrs_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.future_ts_hrs_flag,:new.future_ts_hrs_flag); end if;
    if voper <> 'U' or  updating('ev_fix_cost_flag') then	 prm_audit.audit_data ('PREFER','ev_fix_cost_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ev_fix_cost_flag,:new.ev_fix_cost_flag); end if;
    if voper <> 'U' or  updating('ts_daily_flag') then	 prm_audit.audit_data ('PREFER','ts_daily_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ts_daily_flag,:new.ts_daily_flag); end if;
    if voper <> 'U' or  updating('notstart_task_hrs_flag') then	 prm_audit.audit_data ('PREFER','notstart_task_hrs_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.notstart_task_hrs_flag,:new.notstart_task_hrs_flag); end if;
    if voper <> 'U' or  updating('prestart_task_hrs_flag') then	 prm_audit.audit_data ('PREFER','prestart_task_hrs_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.prestart_task_hrs_flag,:new.prestart_task_hrs_flag); end if;
    if voper <> 'U' or  updating('postend_task_hrs_flag') then	 prm_audit.audit_data ('PREFER','postend_task_hrs_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.postend_task_hrs_flag,:new.postend_task_hrs_flag); end if;
    if voper <> 'U' or  updating('ermm_enabled_flag') then	 prm_audit.audit_data ('PREFER','ermm_enabled_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ermm_enabled_flag,:new.ermm_enabled_flag); end if;
    if voper <> 'U' or  updating('name_sep_char') then	 prm_audit.audit_data ('PREFER','name_sep_char',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.name_sep_char,:new.name_sep_char); end if;
    if voper <> 'U' or  updating('year_char') then	 prm_audit.audit_data ('PREFER','year_char',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.year_char,:new.year_char); end if;
    if voper <> 'U' or  updating('month_char') then	 prm_audit.audit_data ('PREFER','month_char',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.month_char,:new.month_char); end if;
    if voper <> 'U' or  updating('week_char') then	 prm_audit.audit_data ('PREFER','week_char',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.week_char,:new.week_char); end if;
    if voper <> 'U' or  updating('day_char') then	 prm_audit.audit_data ('PREFER','day_char',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.day_char,:new.day_char); end if;
    if voper <> 'U' or  updating('hour_char') then	 prm_audit.audit_data ('PREFER','hour_char',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.hour_char,:new.hour_char); end if;
    if voper <> 'U' or  updating('minute_char') then	 prm_audit.audit_data ('PREFER','minute_char',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.minute_char,:new.minute_char); end if;
    if voper <> 'U' or  updating('ts_approval_type') then	 prm_audit.audit_data ('PREFER','ts_approval_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ts_approval_type,:new.ts_approval_type); end if;
    if voper <> 'U' or  updating('db_name') then	 prm_audit.audit_data ('PREFER','db_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.db_name,:new.db_name); end if;
    if voper <> 'U' or  updating('tasksum_period_type') then	 prm_audit.audit_data ('PREFER','tasksum_period_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.tasksum_period_type,:new.tasksum_period_type); end if;
    if voper <> 'U' or  updating('trsrcsum_period_type') then	 prm_audit.audit_data ('PREFER','trsrcsum_period_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.trsrcsum_period_type,:new.trsrcsum_period_type); end if;
    if voper <> 'U' or  updating('database_version') then	 prm_audit.audit_data ('PREFER','database_version',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.database_version,:new.database_version); end if;
    if voper <> 'U' or  updating('phase_label') then	 prm_audit.audit_data ('PREFER','phase_label',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.phase_label,:new.phase_label); end if;
    if voper <> 'U' or  updating('ts_approve_user_id') then	 prm_audit.audit_data ('PREFER','ts_approve_user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ts_approve_user_id,:new.ts_approve_user_id); end if;
    if voper <> 'U' or  updating('curr_id') then	 prm_audit.audit_data ('PREFER','curr_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.curr_id,:new.curr_id); end if;
    if voper <> 'U' or  updating('ev_user_pct') then	 prm_audit.audit_data ('PREFER','ev_user_pct',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ev_user_pct,:new.ev_user_pct); end if;
    if voper <> 'U' or  updating('ev_etc_user_value') then	 prm_audit.audit_data ('PREFER','ev_etc_user_value',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ev_etc_user_value,:new.ev_etc_user_value); end if;
    if voper <> 'U' or  updating('ev_compute_type') then	 prm_audit.audit_data ('PREFER','ev_compute_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ev_compute_type,:new.ev_compute_type); end if;
    if voper <> 'U' or  updating('ev_etc_compute_type') then	 prm_audit.audit_data ('PREFER','ev_etc_compute_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ev_etc_compute_type,:new.ev_etc_compute_type); end if;
    if voper <> 'U' or  updating('rpt_header_1') then	 prm_audit.audit_data ('PREFER','rpt_header_1',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rpt_header_1,:new.rpt_header_1); end if;
    if voper <> 'U' or  updating('rpt_header_2') then	 prm_audit.audit_data ('PREFER','rpt_header_2',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rpt_header_2,:new.rpt_header_2); end if;
    if voper <> 'U' or  updating('rpt_header_3') then	 prm_audit.audit_data ('PREFER','rpt_header_3',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rpt_header_3,:new.rpt_header_3); end if;
    if voper <> 'U' or  updating('rpt_footer_1') then	 prm_audit.audit_data ('PREFER','rpt_footer_1',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rpt_footer_1,:new.rpt_footer_1); end if;
    if voper <> 'U' or  updating('rpt_footer_2') then	 prm_audit.audit_data ('PREFER','rpt_footer_2',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rpt_footer_2,:new.rpt_footer_2); end if;
    if voper <> 'U' or  updating('rpt_footer_3') then	 prm_audit.audit_data ('PREFER','rpt_footer_3',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rpt_footer_3,:new.rpt_footer_3); end if;
    if voper <> 'U' or  updating('rpt_user_1') then	 prm_audit.audit_data ('PREFER','rpt_user_1',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rpt_user_1,:new.rpt_user_1); end if;
    if voper <> 'U' or  updating('rpt_user_2') then	 prm_audit.audit_data ('PREFER','rpt_user_2',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rpt_user_2,:new.rpt_user_2); end if;
    if voper <> 'U' or  updating('rpt_user_3') then	 prm_audit.audit_data ('PREFER','rpt_user_3',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rpt_user_3,:new.rpt_user_3); end if;
    if voper <> 'U' or ( updating('license_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('PREFER','license_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.license_data,:new.license_data); end if;
    if voper <> 'U' or  updating('max_role_level_cnt') then	 prm_audit.audit_data ('PREFER','max_role_level_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.max_role_level_cnt,:new.max_role_level_cnt); end if;
    if voper <> 'U' or  updating('past_ts_cnt') then	 prm_audit.audit_data ('PREFER','past_ts_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.past_ts_cnt,:new.past_ts_cnt); end if;
    if voper <> 'U' or  updating('projinit_admin_user_id') then	 prm_audit.audit_data ('PREFER','projinit_admin_user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.projinit_admin_user_id,:new.projinit_admin_user_id); end if;
    if voper <> 'U' or  updating('default_rsrc_sec_id') then	 prm_audit.audit_data ('PREFER','default_rsrc_sec_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.default_rsrc_sec_id,:new.default_rsrc_sec_id); end if;
    if voper <> 'U' or  updating('allow_user_time_period_flag') then	 prm_audit.audit_data ('PREFER','allow_user_time_period_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.allow_user_time_period_flag,:new.allow_user_time_period_flag); end if;
    if voper <> 'U' or  updating('exp_root_url') then	 prm_audit.audit_data ('PREFER','exp_root_url',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.exp_root_url,:new.exp_root_url); end if;
    if voper <> 'U' or  updating('ts_rsrc_def_asgn_actv_flag') then	 prm_audit.audit_data ('PREFER','ts_rsrc_def_asgn_actv_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ts_rsrc_def_asgn_actv_flag,:new.ts_rsrc_def_asgn_actv_flag); end if;

  end if;


      prm_audit.audit_row ( 'PREFER',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PROFILE
create or replace trigger PRMAUD_PROFILE
after insert or update or delete on PROFILE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PROFILE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.prof_id;
				

    else
    	vpk1 := :new.prof_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('prof_id') then	 prm_audit.audit_data ('PROFILE','prof_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.prof_id,:new.prof_id); end if;
    if voper <> 'U' or  updating('default_flag') then	 prm_audit.audit_data ('PROFILE','default_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.default_flag,:new.default_flag); end if;
    if voper <> 'U' or  updating('superuser_flag') then	 prm_audit.audit_data ('PROFILE','superuser_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.superuser_flag,:new.superuser_flag); end if;
    if voper <> 'U' or  updating('scope_type') then	 prm_audit.audit_data ('PROFILE','scope_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.scope_type,:new.scope_type); end if;
    if voper <> 'U' or  updating('prof_name') then	 prm_audit.audit_data ('PROFILE','prof_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.prof_name,:new.prof_name); end if;

  end if;


      prm_audit.audit_row ( 'PROFILE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PROCGROUP
create or replace trigger PRMAUD_PROCGROUP
after insert or update or delete on PROCGROUP
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PROCGROUP',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.proc_group_id;
				

    else
    	vpk1 := :new.proc_group_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('proc_group_id') then	 prm_audit.audit_data ('PROCGROUP','proc_group_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.proc_group_id,:new.proc_group_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('PROCGROUP','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('proc_group_name') then	 prm_audit.audit_data ('PROCGROUP','proc_group_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proc_group_name,:new.proc_group_name); end if;

  end if;


      prm_audit.audit_row ( 'PROCGROUP',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PROCITEM
create or replace trigger PRMAUD_PROCITEM
after insert or update or delete on PROCITEM
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PROCITEM',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.proc_item_id;
				

    else
    	vpk1 := :new.proc_item_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('proc_item_id') then	 prm_audit.audit_data ('PROCITEM','proc_item_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.proc_item_id,:new.proc_item_id); end if;
    if voper <> 'U' or  updating('proc_group_id') then	 prm_audit.audit_data ('PROCITEM','proc_group_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proc_group_id,:new.proc_group_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('PROCITEM','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('proc_name') then	 prm_audit.audit_data ('PROCITEM','proc_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proc_name,:new.proc_name); end if;
    if voper <> 'U' or  updating('proc_wt') then	 prm_audit.audit_data ('PROCITEM','proc_wt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proc_wt,:new.proc_wt); end if;
    if voper <> 'U' or ( updating('proc_descr') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('PROCITEM','proc_descr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.proc_descr,:new.proc_descr); end if;

  end if;


      prm_audit.audit_row ( 'PROCITEM',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PROFPRIV
create or replace trigger PRMAUD_PROFPRIV
after insert or update or delete on PROFPRIV
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PROFPRIV',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.prof_id;
				
vpk2 := :old.priv_num;
				

    else
    	vpk1 := :new.prof_id;
				
vpk2 := :new.priv_num;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('prof_id') then	 prm_audit.audit_data ('PROFPRIV','prof_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.prof_id,:new.prof_id); end if;
    if voper <> 'U' or  updating('priv_num') then	 prm_audit.audit_data ('PROFPRIV','priv_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.priv_num,:new.priv_num); end if;
    if voper <> 'U' or  updating('allow_flag') then	 prm_audit.audit_data ('PROFPRIV','allow_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.allow_flag,:new.allow_flag); end if;

  end if;


      prm_audit.audit_row ( 'PROFPRIV',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PROJCOST
create or replace trigger PRMAUD_PROJCOST
after insert or update or delete on PROJCOST
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PROJCOST',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.cost_item_id;
				

    else
    	vpk1 := :new.cost_item_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('cost_item_id') then	 prm_audit.audit_data ('PROJCOST','cost_item_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.cost_item_id,:new.cost_item_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('PROJCOST','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('task_id') then	 prm_audit.audit_data ('PROJCOST','task_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_id,:new.task_id); end if;
    if voper <> 'U' or  updating('auto_compute_act_flag') then	 prm_audit.audit_data ('PROJCOST','auto_compute_act_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.auto_compute_act_flag,:new.auto_compute_act_flag); end if;
    if voper <> 'U' or  updating('cost_load_type') then	 prm_audit.audit_data ('PROJCOST','cost_load_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_load_type,:new.cost_load_type); end if;
    if voper <> 'U' or  updating('acct_id') then	 prm_audit.audit_data ('PROJCOST','acct_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.acct_id,:new.acct_id); end if;
    if voper <> 'U' or  updating('cost_type_id') then	 prm_audit.audit_data ('PROJCOST','cost_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_type_id,:new.cost_type_id); end if;
    if voper <> 'U' or  updating('target_cost') then	 prm_audit.audit_data ('PROJCOST','target_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.target_cost,:new.target_cost); end if;
    if voper <> 'U' or  updating('act_cost') then	 prm_audit.audit_data ('PROJCOST','act_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_cost,:new.act_cost); end if;
    if voper <> 'U' or  updating('remain_cost') then	 prm_audit.audit_data ('PROJCOST','remain_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_cost,:new.remain_cost); end if;
    if voper <> 'U' or  updating('qty_name') then	 prm_audit.audit_data ('PROJCOST','qty_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.qty_name,:new.qty_name); end if;
    if voper <> 'U' or  updating('target_qty') then	 prm_audit.audit_data ('PROJCOST','target_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.target_qty,:new.target_qty); end if;
    if voper <> 'U' or  updating('cost_per_qty') then	 prm_audit.audit_data ('PROJCOST','cost_per_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_per_qty,:new.cost_per_qty); end if;
    if voper <> 'U' or  updating('po_number') then	 prm_audit.audit_data ('PROJCOST','po_number',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.po_number,:new.po_number); end if;
    if voper <> 'U' or  updating('vendor_name') then	 prm_audit.audit_data ('PROJCOST','vendor_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.vendor_name,:new.vendor_name); end if;
    if voper <> 'U' or  updating('cost_name') then	 prm_audit.audit_data ('PROJCOST','cost_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_name,:new.cost_name); end if;
    if voper <> 'U' or ( updating('cost_descr') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('PROJCOST','cost_descr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.cost_descr,:new.cost_descr); end if;
    if voper <> 'U' or  updating('pobs_id') then	 prm_audit.audit_data ('PROJCOST','pobs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pobs_id,:new.pobs_id); end if;

  end if;


      prm_audit.audit_row ( 'PROJCOST',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PROJECT
create or replace trigger PRMAUD_PROJECT
after insert or update or delete on PROJECT
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PROJECT',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.proj_id;
				

    else
    	vpk1 := :new.proj_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('PROJECT','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('fy_start_month_num') then	 prm_audit.audit_data ('PROJECT','fy_start_month_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fy_start_month_num,:new.fy_start_month_num); end if;
    if voper <> 'U' or  updating('chng_eff_cmp_pct_flag') then	 prm_audit.audit_data ('PROJECT','chng_eff_cmp_pct_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.chng_eff_cmp_pct_flag,:new.chng_eff_cmp_pct_flag); end if;
    if voper <> 'U' or  updating('rsrc_self_add_flag') then	 prm_audit.audit_data ('PROJECT','rsrc_self_add_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_self_add_flag,:new.rsrc_self_add_flag); end if;
    if voper <> 'U' or  updating('allow_complete_flag') then	 prm_audit.audit_data ('PROJECT','allow_complete_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.allow_complete_flag,:new.allow_complete_flag); end if;
    if voper <> 'U' or  updating('rsrc_multi_assign_flag') then	 prm_audit.audit_data ('PROJECT','rsrc_multi_assign_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_multi_assign_flag,:new.rsrc_multi_assign_flag); end if;
    if voper <> 'U' or  updating('checkout_flag') then	 prm_audit.audit_data ('PROJECT','checkout_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.checkout_flag,:new.checkout_flag); end if;
    if voper <> 'U' or  updating('project_flag') then	 prm_audit.audit_data ('PROJECT','project_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.project_flag,:new.project_flag); end if;
    if voper <> 'U' or  updating('step_complete_flag') then	 prm_audit.audit_data ('PROJECT','step_complete_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.step_complete_flag,:new.step_complete_flag); end if;
    if voper <> 'U' or  updating('cost_qty_recalc_flag') then	 prm_audit.audit_data ('PROJECT','cost_qty_recalc_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_qty_recalc_flag,:new.cost_qty_recalc_flag); end if;
    if voper <> 'U' or  updating('sum_only_flag') then	 prm_audit.audit_data ('PROJECT','sum_only_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.sum_only_flag,:new.sum_only_flag); end if;
    if voper <> 'U' or  updating('batch_sum_flag') then	 prm_audit.audit_data ('PROJECT','batch_sum_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.batch_sum_flag,:new.batch_sum_flag); end if;
    if voper <> 'U' or  updating('name_sep_char') then	 prm_audit.audit_data ('PROJECT','name_sep_char',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.name_sep_char,:new.name_sep_char); end if;
    if voper <> 'U' or  updating('def_complete_pct_type') then	 prm_audit.audit_data ('PROJECT','def_complete_pct_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.def_complete_pct_type,:new.def_complete_pct_type); end if;
    if voper <> 'U' or  updating('proj_short_name') then	 prm_audit.audit_data ('PROJECT','proj_short_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_short_name,:new.proj_short_name); end if;
    if voper <> 'U' or  updating('acct_id') then	 prm_audit.audit_data ('PROJECT','acct_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.acct_id,:new.acct_id); end if;
    if voper <> 'U' or  updating('orig_proj_id') then	 prm_audit.audit_data ('PROJECT','orig_proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.orig_proj_id,:new.orig_proj_id); end if;
    if voper <> 'U' or  updating('source_proj_id') then	 prm_audit.audit_data ('PROJECT','source_proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.source_proj_id,:new.source_proj_id); end if;
    if voper <> 'U' or  updating('base_type_id') then	 prm_audit.audit_data ('PROJECT','base_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_type_id,:new.base_type_id); end if;
    if voper <> 'U' or  updating('clndr_id') then	 prm_audit.audit_data ('PROJECT','clndr_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.clndr_id,:new.clndr_id); end if;
    if voper <> 'U' or  updating('sum_base_proj_id') then	 prm_audit.audit_data ('PROJECT','sum_base_proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.sum_base_proj_id,:new.sum_base_proj_id); end if;
    if voper <> 'U' or  updating('task_code_base') then	 prm_audit.audit_data ('PROJECT','task_code_base',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_code_base,:new.task_code_base); end if;
    if voper <> 'U' or  updating('task_code_step') then	 prm_audit.audit_data ('PROJECT','task_code_step',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_code_step,:new.task_code_step); end if;
    if voper <> 'U' or  updating('priority_num') then	 prm_audit.audit_data ('PROJECT','priority_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.priority_num,:new.priority_num); end if;
    if voper <> 'U' or  updating('wbs_max_sum_level') then	 prm_audit.audit_data ('PROJECT','wbs_max_sum_level',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_max_sum_level,:new.wbs_max_sum_level); end if;
    if voper <> 'U' or  updating('risk_level') then	 prm_audit.audit_data ('PROJECT','risk_level',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.risk_level,:new.risk_level); end if;
    if voper <> 'U' or  updating('strgy_priority_num') then	 prm_audit.audit_data ('PROJECT','strgy_priority_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.strgy_priority_num,:new.strgy_priority_num); end if;
    if voper <> 'U' or  updating('last_checksum') then	 prm_audit.audit_data ('PROJECT','last_checksum',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.last_checksum,:new.last_checksum); end if;
    if voper <> 'U' or  updating('critical_drtn_hr_cnt') then	 prm_audit.audit_data ('PROJECT','critical_drtn_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.critical_drtn_hr_cnt,:new.critical_drtn_hr_cnt); end if;
    if voper <> 'U' or  updating('def_cost_per_qty') then	 prm_audit.audit_data ('PROJECT','def_cost_per_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.def_cost_per_qty,:new.def_cost_per_qty); end if;
    if voper <> 'U' or  updating('last_recalc_date') then	 prm_audit.audit_data ('PROJECT','last_recalc_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.last_recalc_date,'yyyymmddhh24miss'),to_char(:new.last_recalc_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('plan_start_date') then	 prm_audit.audit_data ('PROJECT','plan_start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.plan_start_date,'yyyymmddhh24miss'),to_char(:new.plan_start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('plan_end_date') then	 prm_audit.audit_data ('PROJECT','plan_end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.plan_end_date,'yyyymmddhh24miss'),to_char(:new.plan_end_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('scd_end_date') then	 prm_audit.audit_data ('PROJECT','scd_end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.scd_end_date,'yyyymmddhh24miss'),to_char(:new.scd_end_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('add_date') then	 prm_audit.audit_data ('PROJECT','add_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.add_date,'yyyymmddhh24miss'),to_char(:new.add_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('sum_data_date') then	 prm_audit.audit_data ('PROJECT','sum_data_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.sum_data_date,'yyyymmddhh24miss'),to_char(:new.sum_data_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('last_tasksum_date') then	 prm_audit.audit_data ('PROJECT','last_tasksum_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.last_tasksum_date,'yyyymmddhh24miss'),to_char(:new.last_tasksum_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('fcst_start_date') then	 prm_audit.audit_data ('PROJECT','fcst_start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.fcst_start_date,'yyyymmddhh24miss'),to_char(:new.fcst_start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('def_duration_type') then	 prm_audit.audit_data ('PROJECT','def_duration_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.def_duration_type,:new.def_duration_type); end if;
    if voper <> 'U' or  updating('task_code_prefix') then	 prm_audit.audit_data ('PROJECT','task_code_prefix',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_code_prefix,:new.task_code_prefix); end if;
    if voper <> 'U' or  updating('guid') then	 prm_audit.audit_data ('PROJECT','guid',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.guid,:new.guid); end if;
    if voper <> 'U' or  updating('def_qty_type') then	 prm_audit.audit_data ('PROJECT','def_qty_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.def_qty_type,:new.def_qty_type); end if;
    if voper <> 'U' or  updating('add_by_name') then	 prm_audit.audit_data ('PROJECT','add_by_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.add_by_name,:new.add_by_name); end if;
    if voper <> 'U' or  updating('web_local_root_path') then	 prm_audit.audit_data ('PROJECT','web_local_root_path',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.web_local_root_path,:new.web_local_root_path); end if;
    if voper <> 'U' or  updating('proj_url') then	 prm_audit.audit_data ('PROJECT','proj_url',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_url,:new.proj_url); end if;
    if voper <> 'U' or  updating('def_rate_type') then	 prm_audit.audit_data ('PROJECT','def_rate_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.def_rate_type,:new.def_rate_type); end if;
    if voper <> 'U' or  updating('act_this_per_link_flag') then	 prm_audit.audit_data ('PROJECT','act_this_per_link_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_this_per_link_flag,:new.act_this_per_link_flag); end if;
    if voper <> 'U' or  updating('def_task_type') then	 prm_audit.audit_data ('PROJECT','def_task_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.def_task_type,:new.def_task_type); end if;
    if voper <> 'U' or  updating('act_pct_link_flag') then	 prm_audit.audit_data ('PROJECT','act_pct_link_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_pct_link_flag,:new.act_pct_link_flag); end if;
    if voper <> 'U' or  updating('add_act_remain_flag') then	 prm_audit.audit_data ('PROJECT','add_act_remain_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.add_act_remain_flag,:new.add_act_remain_flag); end if;
    if voper <> 'U' or  updating('critical_path_type') then	 prm_audit.audit_data ('PROJECT','critical_path_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.critical_path_type,:new.critical_path_type); end if;
    if voper <> 'U' or  updating('task_code_prefix_flag') then	 prm_audit.audit_data ('PROJECT','task_code_prefix_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_code_prefix_flag,:new.task_code_prefix_flag); end if;
    if voper <> 'U' or  updating('def_rollup_dates_flag') then	 prm_audit.audit_data ('PROJECT','def_rollup_dates_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.def_rollup_dates_flag,:new.def_rollup_dates_flag); end if;
    if voper <> 'U' or  updating('rem_target_link_flag') then	 prm_audit.audit_data ('PROJECT','rem_target_link_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rem_target_link_flag,:new.rem_target_link_flag); end if;
    if voper <> 'U' or  updating('reset_planned_flag') then	 prm_audit.audit_data ('PROJECT','reset_planned_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.reset_planned_flag,:new.reset_planned_flag); end if;
    if voper <> 'U' or  updating('allow_neg_act_flag') then	 prm_audit.audit_data ('PROJECT','allow_neg_act_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.allow_neg_act_flag,:new.allow_neg_act_flag); end if;
    if voper <> 'U' or  updating('rsrc_id') then	 prm_audit.audit_data ('PROJECT','rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_id,:new.rsrc_id); end if;
    if voper <> 'U' or  updating('msp_managed_flag') then	 prm_audit.audit_data ('PROJECT','msp_managed_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.msp_managed_flag,:new.msp_managed_flag); end if;
    if voper <> 'U' or  updating('msp_update_actuals_flag') then	 prm_audit.audit_data ('PROJECT','msp_update_actuals_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.msp_update_actuals_flag,:new.msp_update_actuals_flag); end if;
    if voper <> 'U' or  updating('checkout_date') then	 prm_audit.audit_data ('PROJECT','checkout_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.checkout_date,'yyyymmddhh24miss'),to_char(:new.checkout_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('checkout_user_id') then	 prm_audit.audit_data ('PROJECT','checkout_user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.checkout_user_id,:new.checkout_user_id); end if;
    if voper <> 'U' or  updating('sum_assign_level') then	 prm_audit.audit_data ('PROJECT','sum_assign_level',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.sum_assign_level,:new.sum_assign_level); end if;
    if voper <> 'U' or  updating('last_fin_dates_id') then	 prm_audit.audit_data ('PROJECT','last_fin_dates_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.last_fin_dates_id,:new.last_fin_dates_id); end if;
    if voper <> 'U' or  updating('use_project_baseline_flag') then	 prm_audit.audit_data ('PROJECT','use_project_baseline_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.use_project_baseline_flag,:new.use_project_baseline_flag); end if;
    if voper <> 'U' or  updating('last_baseline_update_date') then	 prm_audit.audit_data ('PROJECT','last_baseline_update_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.last_baseline_update_date,'yyyymmddhh24miss'),to_char(:new.last_baseline_update_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('ts_rsrc_vw_compl_asgn_flag') then	 prm_audit.audit_data ('PROJECT','ts_rsrc_vw_compl_asgn_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ts_rsrc_vw_compl_asgn_flag,:new.ts_rsrc_vw_compl_asgn_flag); end if;
    if voper <> 'U' or  updating('ts_rsrc_mark_act_finish_flag') then	 prm_audit.audit_data ('PROJECT','ts_rsrc_mark_act_finish_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ts_rsrc_mark_act_finish_flag,:new.ts_rsrc_mark_act_finish_flag); end if;
    if voper <> 'U' or  updating('ts_rsrc_vw_inact_actv_flag') then	 prm_audit.audit_data ('PROJECT','ts_rsrc_vw_inact_actv_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ts_rsrc_vw_inact_actv_flag,:new.ts_rsrc_vw_inact_actv_flag); end if;
    if voper <> 'U' or  updating('cr_external_key') then	 prm_audit.audit_data ('PROJECT','cr_external_key',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cr_external_key,:new.cr_external_key); end if;
    if voper <> 'U' or  updating('apply_actuals_date') then	 prm_audit.audit_data ('PROJECT','apply_actuals_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.apply_actuals_date,'yyyymmddhh24miss'),to_char(:new.apply_actuals_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('intg_proj_type') then	 prm_audit.audit_data ('PROJECT','intg_proj_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.intg_proj_type,:new.intg_proj_type); end if;

  end if;


      prm_audit.audit_row ( 'PROJECT',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PROJEST
create or replace trigger PRMAUD_PROJEST
after insert or update or delete on PROJEST
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PROJEST',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.proj_est_id;
				

    else
    	vpk1 := :new.proj_est_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('proj_est_id') then	 prm_audit.audit_data ('PROJEST','proj_est_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.proj_est_id,:new.proj_est_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('PROJEST','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('wbs_id') then	 prm_audit.audit_data ('PROJEST','wbs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_id,:new.wbs_id); end if;
    if voper <> 'U' or  updating('applied_flag') then	 prm_audit.audit_data ('PROJEST','applied_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.applied_flag,:new.applied_flag); end if;
    if voper <> 'U' or  updating('rsrc_type') then	 prm_audit.audit_data ('PROJEST','rsrc_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_type,:new.rsrc_type); end if;
    if voper <> 'U' or  updating('est_type') then	 prm_audit.audit_data ('PROJEST','est_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.est_type,:new.est_type); end if;
    if voper <> 'U' or  updating('est_name') then	 prm_audit.audit_data ('PROJEST','est_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.est_name,:new.est_name); end if;
    if voper <> 'U' or  updating('rsrc_id') then	 prm_audit.audit_data ('PROJEST','rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_id,:new.rsrc_id); end if;
    if voper <> 'U' or  updating('bu_cmplx_value') then	 prm_audit.audit_data ('PROJEST','bu_cmplx_value',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.bu_cmplx_value,:new.bu_cmplx_value); end if;
    if voper <> 'U' or  updating('adj_mult_pct') then	 prm_audit.audit_data ('PROJEST','adj_mult_pct',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.adj_mult_pct,:new.adj_mult_pct); end if;
    if voper <> 'U' or  updating('fp_cnt') then	 prm_audit.audit_data ('PROJEST','fp_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fp_cnt,:new.fp_cnt); end if;
    if voper <> 'U' or  updating('fp_cmplx_value') then	 prm_audit.audit_data ('PROJEST','fp_cmplx_value',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fp_cmplx_value,:new.fp_cmplx_value); end if;
    if voper <> 'U' or  updating('fp_unadj_cnt') then	 prm_audit.audit_data ('PROJEST','fp_unadj_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fp_unadj_cnt,:new.fp_unadj_cnt); end if;
    if voper <> 'U' or  updating('est_task_cnt') then	 prm_audit.audit_data ('PROJEST','est_task_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.est_task_cnt,:new.est_task_cnt); end if;
    if voper <> 'U' or  updating('fp_prod_avg_value') then	 prm_audit.audit_data ('PROJEST','fp_prod_avg_value',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fp_prod_avg_value,:new.fp_prod_avg_value); end if;
    if voper <> 'U' or  updating('est_qty') then	 prm_audit.audit_data ('PROJEST','est_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.est_qty,:new.est_qty); end if;
    if voper <> 'U' or  updating('est_date') then	 prm_audit.audit_data ('PROJEST','est_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.est_date,'yyyymmddhh24miss'),to_char(:new.est_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or ( updating('est_notes') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('PROJEST','est_notes',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.est_notes,:new.est_notes); end if;

  end if;


      prm_audit.audit_row ( 'PROJEST',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PROJFUND
create or replace trigger PRMAUD_PROJFUND
after insert or update or delete on PROJFUND
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PROJFUND',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.proj_fund_id;
				

    else
    	vpk1 := :new.proj_fund_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('proj_fund_id') then	 prm_audit.audit_data ('PROJFUND','proj_fund_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.proj_fund_id,:new.proj_fund_id); end if;
    if voper <> 'U' or  updating('fund_id') then	 prm_audit.audit_data ('PROJFUND','fund_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fund_id,:new.fund_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('PROJFUND','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('fund_cost') then	 prm_audit.audit_data ('PROJFUND','fund_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fund_cost,:new.fund_cost); end if;
    if voper <> 'U' or  updating('fund_wt') then	 prm_audit.audit_data ('PROJFUND','fund_wt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fund_wt,:new.fund_wt); end if;

  end if;


      prm_audit.audit_row ( 'PROJFUND',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PROJISSU
create or replace trigger PRMAUD_PROJISSU
after insert or update or delete on PROJISSU
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PROJISSU',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.issue_id;
				

    else
    	vpk1 := :new.issue_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('issue_id') then	 prm_audit.audit_data ('PROJISSU','issue_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.issue_id,:new.issue_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('PROJISSU','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('obs_id') then	 prm_audit.audit_data ('PROJISSU','obs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.obs_id,:new.obs_id); end if;
    if voper <> 'U' or  updating('priority_type') then	 prm_audit.audit_data ('PROJISSU','priority_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.priority_type,:new.priority_type); end if;
    if voper <> 'U' or  updating('status_code') then	 prm_audit.audit_data ('PROJISSU','status_code',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.status_code,:new.status_code); end if;
    if voper <> 'U' or  updating('issue_name') then	 prm_audit.audit_data ('PROJISSU','issue_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.issue_name,:new.issue_name); end if;
    if voper <> 'U' or  updating('thresh_id') then	 prm_audit.audit_data ('PROJISSU','thresh_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.thresh_id,:new.thresh_id); end if;
    if voper <> 'U' or  updating('track_view_id') then	 prm_audit.audit_data ('PROJISSU','track_view_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.track_view_id,:new.track_view_id); end if;
    if voper <> 'U' or  updating('wbs_id') then	 prm_audit.audit_data ('PROJISSU','wbs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_id,:new.wbs_id); end if;
    if voper <> 'U' or  updating('task_id') then	 prm_audit.audit_data ('PROJISSU','task_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_id,:new.task_id); end if;
    if voper <> 'U' or  updating('rsrc_id') then	 prm_audit.audit_data ('PROJISSU','rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_id,:new.rsrc_id); end if;
    if voper <> 'U' or  updating('thresh_parm_id') then	 prm_audit.audit_data ('PROJISSU','thresh_parm_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.thresh_parm_id,:new.thresh_parm_id); end if;
    if voper <> 'U' or  updating('base_proj_id') then	 prm_audit.audit_data ('PROJISSU','base_proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_proj_id,:new.base_proj_id); end if;
    if voper <> 'U' or  updating('workspace_id') then	 prm_audit.audit_data ('PROJISSU','workspace_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.workspace_id,:new.workspace_id); end if;
    if voper <> 'U' or  updating('issue_value') then	 prm_audit.audit_data ('PROJISSU','issue_value',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.issue_value,:new.issue_value); end if;
    if voper <> 'U' or  updating('lo_parm_value') then	 prm_audit.audit_data ('PROJISSU','lo_parm_value',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.lo_parm_value,:new.lo_parm_value); end if;
    if voper <> 'U' or  updating('hi_parm_value') then	 prm_audit.audit_data ('PROJISSU','hi_parm_value',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.hi_parm_value,:new.hi_parm_value); end if;
    if voper <> 'U' or  updating('add_by_name') then	 prm_audit.audit_data ('PROJISSU','add_by_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.add_by_name,:new.add_by_name); end if;
    if voper <> 'U' or  updating('resolv_date') then	 prm_audit.audit_data ('PROJISSU','resolv_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.resolv_date,'yyyymmddhh24miss'),to_char(:new.resolv_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('add_date') then	 prm_audit.audit_data ('PROJISSU','add_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.add_date,'yyyymmddhh24miss'),to_char(:new.add_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or ( updating('issue_notes') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('PROJISSU','issue_notes',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.issue_notes,:new.issue_notes); end if;

  end if;


      prm_audit.audit_row ( 'PROJISSU',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PROJPCAT
create or replace trigger PRMAUD_PROJPCAT
after insert or update or delete on PROJPCAT
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PROJPCAT',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.proj_id;
				
vpk2 := :old.proj_catg_type_id;
				

    else
    	vpk1 := :new.proj_id;
				
vpk2 := :new.proj_catg_type_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('PROJPCAT','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('proj_catg_type_id') then	 prm_audit.audit_data ('PROJPCAT','proj_catg_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_catg_type_id,:new.proj_catg_type_id); end if;
    if voper <> 'U' or  updating('proj_catg_id') then	 prm_audit.audit_data ('PROJPCAT','proj_catg_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_catg_id,:new.proj_catg_id); end if;

  end if;


      prm_audit.audit_row ( 'PROJPCAT',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PROJPROP
create or replace trigger PRMAUD_PROJPROP
after insert or update or delete on PROJPROP
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PROJPROP',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.proj_id;
				
vpk2 := :old.prop_name;
				

    else
    	vpk1 := :new.proj_id;
				
vpk2 := :new.prop_name;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('PROJPROP','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('prop_name') then	 prm_audit.audit_data ('PROJPROP','prop_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.prop_name,:new.prop_name); end if;
    if voper <> 'U' or ( updating('prop_value') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('PROJPROP','prop_value',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.prop_value,:new.prop_value); end if;

  end if;


      prm_audit.audit_row ( 'PROJPROP',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PROJRISK
create or replace trigger PRMAUD_PROJRISK
after insert or update or delete on PROJRISK
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PROJRISK',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.risk_id;
				

    else
    	vpk1 := :new.risk_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('risk_id') then	 prm_audit.audit_data ('PROJRISK','risk_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.risk_id,:new.risk_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('PROJRISK','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('wbs_id') then	 prm_audit.audit_data ('PROJRISK','wbs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_id,:new.wbs_id); end if;
    if voper <> 'U' or  updating('add_date') then	 prm_audit.audit_data ('PROJRISK','add_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.add_date,'yyyymmddhh24miss'),to_char(:new.add_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('priority_type') then	 prm_audit.audit_data ('PROJRISK','priority_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.priority_type,:new.priority_type); end if;
    if voper <> 'U' or  updating('status_code') then	 prm_audit.audit_data ('PROJRISK','status_code',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.status_code,:new.status_code); end if;
    if voper <> 'U' or  updating('risk_name') then	 prm_audit.audit_data ('PROJRISK','risk_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.risk_name,:new.risk_name); end if;
    if voper <> 'U' or  updating('risk_type_id') then	 prm_audit.audit_data ('PROJRISK','risk_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.risk_type_id,:new.risk_type_id); end if;
    if voper <> 'U' or  updating('obs_id') then	 prm_audit.audit_data ('PROJRISK','obs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.obs_id,:new.obs_id); end if;
    if voper <> 'U' or  updating('rsrc_id') then	 prm_audit.audit_data ('PROJRISK','rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_id,:new.rsrc_id); end if;
    if voper <> 'U' or  updating('prbly_pct') then	 prm_audit.audit_data ('PROJRISK','prbly_pct',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.prbly_pct,:new.prbly_pct); end if;
    if voper <> 'U' or  updating('impact_work_qty') then	 prm_audit.audit_data ('PROJRISK','impact_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.impact_work_qty,:new.impact_work_qty); end if;
    if voper <> 'U' or  updating('impact_equip_qty') then	 prm_audit.audit_data ('PROJRISK','impact_equip_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.impact_equip_qty,:new.impact_equip_qty); end if;
    if voper <> 'U' or  updating('impact_expense_cost') then	 prm_audit.audit_data ('PROJRISK','impact_expense_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.impact_expense_cost,:new.impact_expense_cost); end if;
    if voper <> 'U' or  updating('impact_date') then	 prm_audit.audit_data ('PROJRISK','impact_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.impact_date,'yyyymmddhh24miss'),to_char(:new.impact_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('impact_mat_qty') then	 prm_audit.audit_data ('PROJRISK','impact_mat_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.impact_mat_qty,:new.impact_mat_qty); end if;
    if voper <> 'U' or ( updating('risk_descr') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('PROJRISK','risk_descr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.risk_descr,:new.risk_descr); end if;

  end if;


      prm_audit.audit_row ( 'PROJRISK',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PROJTHRS
create or replace trigger PRMAUD_PROJTHRS
after insert or update or delete on PROJTHRS
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PROJTHRS',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.thresh_id;
				

    else
    	vpk1 := :new.thresh_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('thresh_id') then	 prm_audit.audit_data ('PROJTHRS','thresh_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.thresh_id,:new.thresh_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('PROJTHRS','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('obs_id') then	 prm_audit.audit_data ('PROJTHRS','obs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.obs_id,:new.obs_id); end if;
    if voper <> 'U' or  updating('thresh_parm_id') then	 prm_audit.audit_data ('PROJTHRS','thresh_parm_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.thresh_parm_id,:new.thresh_parm_id); end if;
    if voper <> 'U' or  updating('status_code') then	 prm_audit.audit_data ('PROJTHRS','status_code',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.status_code,:new.status_code); end if;
    if voper <> 'U' or  updating('priority_type') then	 prm_audit.audit_data ('PROJTHRS','priority_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.priority_type,:new.priority_type); end if;
    if voper <> 'U' or  updating('thresh_type') then	 prm_audit.audit_data ('PROJTHRS','thresh_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.thresh_type,:new.thresh_type); end if;
    if voper <> 'U' or  updating('wbs_id') then	 prm_audit.audit_data ('PROJTHRS','wbs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_id,:new.wbs_id); end if;
    if voper <> 'U' or  updating('track_view_id') then	 prm_audit.audit_data ('PROJTHRS','track_view_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.track_view_id,:new.track_view_id); end if;
    if voper <> 'U' or  updating('lo_parm_value') then	 prm_audit.audit_data ('PROJTHRS','lo_parm_value',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.lo_parm_value,:new.lo_parm_value); end if;
    if voper <> 'U' or  updating('hi_parm_value') then	 prm_audit.audit_data ('PROJTHRS','hi_parm_value',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.hi_parm_value,:new.hi_parm_value); end if;
    if voper <> 'U' or  updating('window_start') then	 prm_audit.audit_data ('PROJTHRS','window_start',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.window_start,:new.window_start); end if;
    if voper <> 'U' or  updating('window_end') then	 prm_audit.audit_data ('PROJTHRS','window_end',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.window_end,:new.window_end); end if;

  end if;


      prm_audit.audit_row ( 'PROJTHRS',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PROJWBS
create or replace trigger PRMAUD_PROJWBS
after insert or update or delete on PROJWBS
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PROJWBS',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.wbs_id;
				

    else
    	vpk1 := :new.wbs_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('wbs_id') then	 prm_audit.audit_data ('PROJWBS','wbs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.wbs_id,:new.wbs_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('PROJWBS','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('obs_id') then	 prm_audit.audit_data ('PROJWBS','obs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.obs_id,:new.obs_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('PROJWBS','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('est_wt') then	 prm_audit.audit_data ('PROJWBS','est_wt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.est_wt,:new.est_wt); end if;
    if voper <> 'U' or  updating('proj_node_flag') then	 prm_audit.audit_data ('PROJWBS','proj_node_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_node_flag,:new.proj_node_flag); end if;
    if voper <> 'U' or  updating('sum_data_flag') then	 prm_audit.audit_data ('PROJWBS','sum_data_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.sum_data_flag,:new.sum_data_flag); end if;
    if voper <> 'U' or  updating('status_code') then	 prm_audit.audit_data ('PROJWBS','status_code',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.status_code,:new.status_code); end if;
    if voper <> 'U' or  updating('wbs_short_name') then	 prm_audit.audit_data ('PROJWBS','wbs_short_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_short_name,:new.wbs_short_name); end if;
    if voper <> 'U' or  updating('wbs_name') then	 prm_audit.audit_data ('PROJWBS','wbs_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_name,:new.wbs_name); end if;
    if voper <> 'U' or  updating('phase_id') then	 prm_audit.audit_data ('PROJWBS','phase_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.phase_id,:new.phase_id); end if;
    if voper <> 'U' or  updating('parent_wbs_id') then	 prm_audit.audit_data ('PROJWBS','parent_wbs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.parent_wbs_id,:new.parent_wbs_id); end if;
    if voper <> 'U' or  updating('ev_user_pct') then	 prm_audit.audit_data ('PROJWBS','ev_user_pct',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ev_user_pct,:new.ev_user_pct); end if;
    if voper <> 'U' or  updating('ev_etc_user_value') then	 prm_audit.audit_data ('PROJWBS','ev_etc_user_value',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ev_etc_user_value,:new.ev_etc_user_value); end if;
    if voper <> 'U' or  updating('orig_cost') then	 prm_audit.audit_data ('PROJWBS','orig_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.orig_cost,:new.orig_cost); end if;
    if voper <> 'U' or  updating('indep_remain_total_cost') then	 prm_audit.audit_data ('PROJWBS','indep_remain_total_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.indep_remain_total_cost,:new.indep_remain_total_cost); end if;
    if voper <> 'U' or  updating('ann_dscnt_rate_pct') then	 prm_audit.audit_data ('PROJWBS','ann_dscnt_rate_pct',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ann_dscnt_rate_pct,:new.ann_dscnt_rate_pct); end if;
    if voper <> 'U' or  updating('dscnt_period_type') then	 prm_audit.audit_data ('PROJWBS','dscnt_period_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.dscnt_period_type,:new.dscnt_period_type); end if;
    if voper <> 'U' or  updating('indep_remain_work_qty') then	 prm_audit.audit_data ('PROJWBS','indep_remain_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.indep_remain_work_qty,:new.indep_remain_work_qty); end if;
    if voper <> 'U' or  updating('anticip_start_date') then	 prm_audit.audit_data ('PROJWBS','anticip_start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.anticip_start_date,'yyyymmddhh24miss'),to_char(:new.anticip_start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('anticip_end_date') then	 prm_audit.audit_data ('PROJWBS','anticip_end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.anticip_end_date,'yyyymmddhh24miss'),to_char(:new.anticip_end_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('ev_compute_type') then	 prm_audit.audit_data ('PROJWBS','ev_compute_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ev_compute_type,:new.ev_compute_type); end if;
    if voper <> 'U' or  updating('ev_etc_compute_type') then	 prm_audit.audit_data ('PROJWBS','ev_etc_compute_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ev_etc_compute_type,:new.ev_etc_compute_type); end if;
    if voper <> 'U' or  updating('resp_team_id') then	 prm_audit.audit_data ('PROJWBS','resp_team_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.resp_team_id,:new.resp_team_id); end if;
    if voper <> 'U' or  updating('iteration_id') then	 prm_audit.audit_data ('PROJWBS','iteration_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.iteration_id,:new.iteration_id); end if;
    if voper <> 'U' or  updating('guid') then	 prm_audit.audit_data ('PROJWBS','guid',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.guid,:new.guid); end if;
    if voper <> 'U' or  updating('tmpl_guid') then	 prm_audit.audit_data ('PROJWBS','tmpl_guid',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.tmpl_guid,:new.tmpl_guid); end if;
    if voper <> 'U' or  updating('original_qty') then	 prm_audit.audit_data ('PROJWBS','original_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.original_qty,:new.original_qty); end if;
    if voper <> 'U' or  updating('rqmt_rem_qty') then	 prm_audit.audit_data ('PROJWBS','rqmt_rem_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rqmt_rem_qty,:new.rqmt_rem_qty); end if;

  end if;


      prm_audit.audit_row ( 'PROJWBS',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PROJWSRPT
create or replace trigger PRMAUD_PROJWSRPT
after insert or update or delete on PROJWSRPT
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PROJWSRPT',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.rpt_id;
				
vpk2 := :old.proj_id;
				

    else
    	vpk1 := :new.rpt_id;
				
vpk2 := :new.proj_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('rpt_id') then	 prm_audit.audit_data ('PROJWSRPT','rpt_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.rpt_id,:new.rpt_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('PROJWSRPT','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;

  end if;


      prm_audit.audit_row ( 'PROJWSRPT',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_PRPFOLIO
create or replace trigger PRMAUD_PRPFOLIO
after insert or update or delete on PRPFOLIO
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('PRPFOLIO',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.pfolio_id;
				
vpk2 := :old.wbs_id;
				

    else
    	vpk1 := :new.pfolio_id;
				
vpk2 := :new.wbs_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('pfolio_id') then	 prm_audit.audit_data ('PRPFOLIO','pfolio_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.pfolio_id,:new.pfolio_id); end if;
    if voper <> 'U' or  updating('wbs_id') then	 prm_audit.audit_data ('PRPFOLIO','wbs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_id,:new.wbs_id); end if;

  end if;


      prm_audit.audit_row ( 'PRPFOLIO',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_QUERYLIB
create or replace trigger PRMAUD_QUERYLIB
after insert or update or delete on QUERYLIB
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('QUERYLIB',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.query_lib_id;
				

    else
    	vpk1 := :new.query_lib_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('query_lib_id') then	 prm_audit.audit_data ('QUERYLIB','query_lib_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.query_lib_id,:new.query_lib_id); end if;
    if voper <> 'U' or  updating('app_name') then	 prm_audit.audit_data ('QUERYLIB','app_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.app_name,:new.app_name); end if;
    if voper <> 'U' or  updating('core_flag') then	 prm_audit.audit_data ('QUERYLIB','core_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.core_flag,:new.core_flag); end if;
    if voper <> 'U' or  updating('match_sql') then	 prm_audit.audit_data ('QUERYLIB','match_sql',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.match_sql,:new.match_sql); end if;
    if voper <> 'U' or  updating('hints') then	 prm_audit.audit_data ('QUERYLIB','hints',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.hints,:new.hints); end if;
    if voper <> 'U' or  updating('replacement_sql') then	 prm_audit.audit_data ('QUERYLIB','replacement_sql',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.replacement_sql,:new.replacement_sql); end if;

  end if;


      prm_audit.audit_row ( 'QUERYLIB',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RCATTYPE
create or replace trigger PRMAUD_RCATTYPE
after insert or update or delete on RCATTYPE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RCATTYPE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.rsrc_catg_type_id;
				

    else
    	vpk1 := :new.rsrc_catg_type_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('rsrc_catg_type_id') then	 prm_audit.audit_data ('RCATTYPE','rsrc_catg_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.rsrc_catg_type_id,:new.rsrc_catg_type_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('RCATTYPE','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('rsrc_catg_short_len') then	 prm_audit.audit_data ('RCATTYPE','rsrc_catg_short_len',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_catg_short_len,:new.rsrc_catg_short_len); end if;
    if voper <> 'U' or  updating('rsrc_catg_type') then	 prm_audit.audit_data ('RCATTYPE','rsrc_catg_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_catg_type,:new.rsrc_catg_type); end if;
    if voper <> 'U' or  updating('super_flag') then	 prm_audit.audit_data ('RCATTYPE','super_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.super_flag,:new.super_flag); end if;

  end if;


      prm_audit.audit_row ( 'RCATTYPE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RCATVAL
create or replace trigger PRMAUD_RCATVAL
after insert or update or delete on RCATVAL
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RCATVAL',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.rsrc_catg_id;
				

    else
    	vpk1 := :new.rsrc_catg_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('rsrc_catg_id') then	 prm_audit.audit_data ('RCATVAL','rsrc_catg_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.rsrc_catg_id,:new.rsrc_catg_id); end if;
    if voper <> 'U' or  updating('rsrc_catg_type_id') then	 prm_audit.audit_data ('RCATVAL','rsrc_catg_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_catg_type_id,:new.rsrc_catg_type_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('RCATVAL','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('rsrc_catg_short_name') then	 prm_audit.audit_data ('RCATVAL','rsrc_catg_short_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_catg_short_name,:new.rsrc_catg_short_name); end if;
    if voper <> 'U' or  updating('rsrc_catg_name') then	 prm_audit.audit_data ('RCATVAL','rsrc_catg_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_catg_name,:new.rsrc_catg_name); end if;
    if voper <> 'U' or  updating('parent_rsrc_catg_id') then	 prm_audit.audit_data ('RCATVAL','parent_rsrc_catg_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.parent_rsrc_catg_id,:new.parent_rsrc_catg_id); end if;

  end if;


      prm_audit.audit_row ( 'RCATVAL',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_REITTYPE
create or replace trigger PRMAUD_REITTYPE
after insert or update or delete on REITTYPE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('REITTYPE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.related_item_type_id;
				

    else
    	vpk1 := :new.related_item_type_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('related_item_type_id') then	 prm_audit.audit_data ('REITTYPE','related_item_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.related_item_type_id,:new.related_item_type_id); end if;
    if voper <> 'U' or  updating('related_item') then	 prm_audit.audit_data ('REITTYPE','related_item',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.related_item,:new.related_item); end if;
    if voper <> 'U' or  updating('table_name') then	 prm_audit.audit_data ('REITTYPE','table_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.table_name,:new.table_name); end if;

  end if;


      prm_audit.audit_row ( 'REITTYPE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RELEASE
create or replace trigger PRMAUD_RELEASE
after insert or update or delete on RELEASE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RELEASE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.release_id;
				

    else
    	vpk1 := :new.release_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('release_id') then	 prm_audit.audit_data ('RELEASE','release_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.release_id,:new.release_id); end if;
    if voper <> 'U' or  updating('rfolio_id') then	 prm_audit.audit_data ('RELEASE','rfolio_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rfolio_id,:new.rfolio_id); end if;
    if voper <> 'U' or  updating('release_name') then	 prm_audit.audit_data ('RELEASE','release_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.release_name,:new.release_name); end if;
    if voper <> 'U' or  updating('start_date') then	 prm_audit.audit_data ('RELEASE','start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.start_date,'yyyymmddhh24miss'),to_char(:new.start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('RELEASE','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('release_theme') then	 prm_audit.audit_data ('RELEASE','release_theme',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.release_theme,:new.release_theme); end if;

  end if;


      prm_audit.audit_row ( 'RELEASE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RELITEMS
create or replace trigger PRMAUD_RELITEMS
after insert or update or delete on RELITEMS
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RELITEMS',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.item_type_id;
				
vpk2 := :old.fk_id;
				
vpk3 := :old.related_item_type_id;
				
vpk4 := :old.related_fk_id;
				

    else
    	vpk1 := :new.item_type_id;
				
vpk2 := :new.fk_id;
				
vpk3 := :new.related_item_type_id;
				
vpk4 := :new.related_fk_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('item_type_id') then	 prm_audit.audit_data ('RELITEMS','item_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.item_type_id,:new.item_type_id); end if;
    if voper <> 'U' or  updating('fk_id') then	 prm_audit.audit_data ('RELITEMS','fk_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fk_id,:new.fk_id); end if;
    if voper <> 'U' or  updating('related_item_type_id') then	 prm_audit.audit_data ('RELITEMS','related_item_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.related_item_type_id,:new.related_item_type_id); end if;
    if voper <> 'U' or  updating('related_fk_id') then	 prm_audit.audit_data ('RELITEMS','related_fk_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.related_fk_id,:new.related_fk_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('RELITEMS','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;

  end if;


      prm_audit.audit_row ( 'RELITEMS',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RFOLIO
create or replace trigger PRMAUD_RFOLIO
after insert or update or delete on RFOLIO
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RFOLIO',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.rfolio_id;
				

    else
    	vpk1 := :new.rfolio_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('rfolio_id') then	 prm_audit.audit_data ('RFOLIO','rfolio_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.rfolio_id,:new.rfolio_id); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('RFOLIO','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('rfolio_name') then	 prm_audit.audit_data ('RFOLIO','rfolio_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rfolio_name,:new.rfolio_name); end if;
    if voper <> 'U' or  updating('rfolio_type') then	 prm_audit.audit_data ('RFOLIO','rfolio_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rfolio_type,:new.rfolio_type); end if;
    if voper <> 'U' or  updating('rfolio_descr') then	 prm_audit.audit_data ('RFOLIO','rfolio_descr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rfolio_descr,:new.rfolio_descr); end if;
    if voper <> 'U' or  updating('team_capacity_pct') then	 prm_audit.audit_data ('RFOLIO','team_capacity_pct',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.team_capacity_pct,:new.team_capacity_pct); end if;
    if voper <> 'U' or  updating('parent_rfolio_id') then	 prm_audit.audit_data ('RFOLIO','parent_rfolio_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.parent_rfolio_id,:new.parent_rfolio_id); end if;
    if voper <> 'U' or ( updating('rfolio_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('RFOLIO','rfolio_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.rfolio_data,:new.rfolio_data); end if;

  end if;


      prm_audit.audit_row ( 'RFOLIO',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RISKCTRL
create or replace trigger PRMAUD_RISKCTRL
after insert or update or delete on RISKCTRL
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RISKCTRL',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.risk_id;
				

    else
    	vpk1 := :new.risk_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('risk_id') then	 prm_audit.audit_data ('RISKCTRL','risk_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.risk_id,:new.risk_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('RISKCTRL','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or ( updating('risk_control') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('RISKCTRL','risk_control',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.risk_control,:new.risk_control); end if;

  end if;


      prm_audit.audit_row ( 'RISKCTRL',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RISKTYPE
create or replace trigger PRMAUD_RISKTYPE
after insert or update or delete on RISKTYPE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RISKTYPE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.risk_type_id;
				

    else
    	vpk1 := :new.risk_type_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('risk_type_id') then	 prm_audit.audit_data ('RISKTYPE','risk_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.risk_type_id,:new.risk_type_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('RISKTYPE','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('risk_type') then	 prm_audit.audit_data ('RISKTYPE','risk_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.risk_type,:new.risk_type); end if;

  end if;


      prm_audit.audit_row ( 'RISKTYPE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RLFOLIO
create or replace trigger PRMAUD_RLFOLIO
after insert or update or delete on RLFOLIO
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RLFOLIO',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.rlfolio_id;
				

    else
    	vpk1 := :new.rlfolio_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('rlfolio_id') then	 prm_audit.audit_data ('RLFOLIO','rlfolio_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.rlfolio_id,:new.rlfolio_id); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('RLFOLIO','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('rlfolio_name') then	 prm_audit.audit_data ('RLFOLIO','rlfolio_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rlfolio_name,:new.rlfolio_name); end if;
    if voper <> 'U' or  updating('rlfolio_type') then	 prm_audit.audit_data ('RLFOLIO','rlfolio_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rlfolio_type,:new.rlfolio_type); end if;
    if voper <> 'U' or  updating('rlfolio_descr') then	 prm_audit.audit_data ('RLFOLIO','rlfolio_descr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rlfolio_descr,:new.rlfolio_descr); end if;
    if voper <> 'U' or ( updating('rlfolio_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('RLFOLIO','rlfolio_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.rlfolio_data,:new.rlfolio_data); end if;

  end if;


      prm_audit.audit_row ( 'RLFOLIO',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_ROLFOLIO
create or replace trigger PRMAUD_ROLFOLIO
after insert or update or delete on ROLFOLIO
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('ROLFOLIO',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.rlfolio_id;
				
vpk2 := :old.role_id;
				

    else
    	vpk1 := :new.rlfolio_id;
				
vpk2 := :new.role_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('rlfolio_id') then	 prm_audit.audit_data ('ROLFOLIO','rlfolio_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.rlfolio_id,:new.rlfolio_id); end if;
    if voper <> 'U' or  updating('role_id') then	 prm_audit.audit_data ('ROLFOLIO','role_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.role_id,:new.role_id); end if;

  end if;


      prm_audit.audit_row ( 'ROLFOLIO',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_ROLERATE
create or replace trigger PRMAUD_ROLERATE
after insert or update or delete on ROLERATE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('ROLERATE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.role_rate_id;
				

    else
    	vpk1 := :new.role_rate_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('role_rate_id') then	 prm_audit.audit_data ('ROLERATE','role_rate_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.role_rate_id,:new.role_rate_id); end if;
    if voper <> 'U' or  updating('role_id') then	 prm_audit.audit_data ('ROLERATE','role_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.role_id,:new.role_id); end if;
    if voper <> 'U' or  updating('cost_per_qty') then	 prm_audit.audit_data ('ROLERATE','cost_per_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_per_qty,:new.cost_per_qty); end if;
    if voper <> 'U' or  updating('cost_per_qty2') then	 prm_audit.audit_data ('ROLERATE','cost_per_qty2',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_per_qty2,:new.cost_per_qty2); end if;
    if voper <> 'U' or  updating('cost_per_qty3') then	 prm_audit.audit_data ('ROLERATE','cost_per_qty3',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_per_qty3,:new.cost_per_qty3); end if;
    if voper <> 'U' or  updating('cost_per_qty4') then	 prm_audit.audit_data ('ROLERATE','cost_per_qty4',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_per_qty4,:new.cost_per_qty4); end if;
    if voper <> 'U' or  updating('cost_per_qty5') then	 prm_audit.audit_data ('ROLERATE','cost_per_qty5',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_per_qty5,:new.cost_per_qty5); end if;

  end if;


      prm_audit.audit_row ( 'ROLERATE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_ROLELIMIT
create or replace trigger PRMAUD_ROLELIMIT
after insert or update or delete on ROLELIMIT
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('ROLELIMIT',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.rolelimit_id;
				

    else
    	vpk1 := :new.rolelimit_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('rolelimit_id') then	 prm_audit.audit_data ('ROLELIMIT','rolelimit_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.rolelimit_id,:new.rolelimit_id); end if;
    if voper <> 'U' or  updating('role_id') then	 prm_audit.audit_data ('ROLELIMIT','role_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.role_id,:new.role_id); end if;
    if voper <> 'U' or  updating('start_date') then	 prm_audit.audit_data ('ROLELIMIT','start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.start_date,'yyyymmddhh24miss'),to_char(:new.start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('max_qty_per_hr') then	 prm_audit.audit_data ('ROLELIMIT','max_qty_per_hr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.max_qty_per_hr,:new.max_qty_per_hr); end if;

  end if;


      prm_audit.audit_row ( 'ROLELIMIT',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_ROLES
create or replace trigger PRMAUD_ROLES
after insert or update or delete on ROLES
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('ROLES',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.role_id;
				

    else
    	vpk1 := :new.role_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('role_id') then	 prm_audit.audit_data ('ROLES','role_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.role_id,:new.role_id); end if;
    if voper <> 'U' or  updating('role_short_name') then	 prm_audit.audit_data ('ROLES','role_short_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.role_short_name,:new.role_short_name); end if;
    if voper <> 'U' or  updating('role_name') then	 prm_audit.audit_data ('ROLES','role_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.role_name,:new.role_name); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('ROLES','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('parent_role_id') then	 prm_audit.audit_data ('ROLES','parent_role_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.parent_role_id,:new.parent_role_id); end if;
    if voper <> 'U' or  updating('def_cost_qty_link_flag') then	 prm_audit.audit_data ('ROLES','def_cost_qty_link_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.def_cost_qty_link_flag,:new.def_cost_qty_link_flag); end if;
    if voper <> 'U' or  updating('cost_qty_type') then	 prm_audit.audit_data ('ROLES','cost_qty_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_qty_type,:new.cost_qty_type); end if;
    if voper <> 'U' or  updating('pobs_id') then	 prm_audit.audit_data ('ROLES','pobs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pobs_id,:new.pobs_id); end if;
    if voper <> 'U' or ( updating('role_descr') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('ROLES','role_descr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.role_descr,:new.role_descr); end if;

  end if;


      prm_audit.audit_row ( 'ROLES',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RPT
create or replace trigger PRMAUD_RPT
after insert or update or delete on RPT
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RPT',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.rpt_id;
				

    else
    	vpk1 := :new.rpt_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('rpt_id') then	 prm_audit.audit_data ('RPT','rpt_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.rpt_id,:new.rpt_id); end if;
    if voper <> 'U' or  updating('global_flag') then	 prm_audit.audit_data ('RPT','global_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.global_flag,:new.global_flag); end if;
    if voper <> 'U' or  updating('rpt_type') then	 prm_audit.audit_data ('RPT','rpt_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rpt_type,:new.rpt_type); end if;
    if voper <> 'U' or  updating('rpt_name') then	 prm_audit.audit_data ('RPT','rpt_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rpt_name,:new.rpt_name); end if;
    if voper <> 'U' or  updating('rpt_area') then	 prm_audit.audit_data ('RPT','rpt_area',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rpt_area,:new.rpt_area); end if;
    if voper <> 'U' or  updating('rpt_group_id') then	 prm_audit.audit_data ('RPT','rpt_group_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rpt_group_id,:new.rpt_group_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('RPT','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('rpt_state') then	 prm_audit.audit_data ('RPT','rpt_state',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rpt_state,:new.rpt_state); end if;
    if voper <> 'U' or ( updating('rpt_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('RPT','rpt_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.rpt_data,:new.rpt_data); end if;
    if voper <> 'U' or  updating('last_run_date') then	 prm_audit.audit_data ('RPT','last_run_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.last_run_date,'yyyymmddhh24miss'),to_char(:new.last_run_date,'yyyymmddhh24miss')); end if;

  end if;


      prm_audit.audit_row ( 'RPT',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RPTBATCH
create or replace trigger PRMAUD_RPTBATCH
after insert or update or delete on RPTBATCH
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RPTBATCH',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.rpt_batch_id;
				

    else
    	vpk1 := :new.rpt_batch_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('rpt_batch_id') then	 prm_audit.audit_data ('RPTBATCH','rpt_batch_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.rpt_batch_id,:new.rpt_batch_id); end if;
    if voper <> 'U' or  updating('rpt_batch_name') then	 prm_audit.audit_data ('RPTBATCH','rpt_batch_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rpt_batch_name,:new.rpt_batch_name); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('RPTBATCH','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;

  end if;


      prm_audit.audit_row ( 'RPTBATCH',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RPTGROUP
create or replace trigger PRMAUD_RPTGROUP
after insert or update or delete on RPTGROUP
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RPTGROUP',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.rpt_group_id;
				

    else
    	vpk1 := :new.rpt_group_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('rpt_group_id') then	 prm_audit.audit_data ('RPTGROUP','rpt_group_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.rpt_group_id,:new.rpt_group_id); end if;
    if voper <> 'U' or  updating('rpt_group_seq_num') then	 prm_audit.audit_data ('RPTGROUP','rpt_group_seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rpt_group_seq_num,:new.rpt_group_seq_num); end if;
    if voper <> 'U' or  updating('rpt_group_name') then	 prm_audit.audit_data ('RPTGROUP','rpt_group_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rpt_group_name,:new.rpt_group_name); end if;
    if voper <> 'U' or  updating('parent_group_id') then	 prm_audit.audit_data ('RPTGROUP','parent_group_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.parent_group_id,:new.parent_group_id); end if;

  end if;


      prm_audit.audit_row ( 'RPTGROUP',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RPTLIST
create or replace trigger PRMAUD_RPTLIST
after insert or update or delete on RPTLIST
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RPTLIST',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.rpt_batch_id;
				
vpk2 := :old.rpt_id;
				

    else
    	vpk1 := :new.rpt_batch_id;
				
vpk2 := :new.rpt_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('rpt_batch_id') then	 prm_audit.audit_data ('RPTLIST','rpt_batch_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.rpt_batch_id,:new.rpt_batch_id); end if;
    if voper <> 'U' or  updating('rpt_id') then	 prm_audit.audit_data ('RPTLIST','rpt_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rpt_id,:new.rpt_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('RPTLIST','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;

  end if;


      prm_audit.audit_row ( 'RPTLIST',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RSRC
create or replace trigger PRMAUD_RSRC
after insert or update or delete on RSRC
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RSRC',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.rsrc_id;
				

    else
    	vpk1 := :new.rsrc_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('rsrc_id') then	 prm_audit.audit_data ('RSRC','rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.rsrc_id,:new.rsrc_id); end if;
    if voper <> 'U' or  updating('clndr_id') then	 prm_audit.audit_data ('RSRC','clndr_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.clndr_id,:new.clndr_id); end if;
    if voper <> 'U' or  updating('rsrc_seq_num') then	 prm_audit.audit_data ('RSRC','rsrc_seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_seq_num,:new.rsrc_seq_num); end if;
    if voper <> 'U' or  updating('timesheet_flag') then	 prm_audit.audit_data ('RSRC','timesheet_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.timesheet_flag,:new.timesheet_flag); end if;
    if voper <> 'U' or  updating('active_flag') then	 prm_audit.audit_data ('RSRC','active_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.active_flag,:new.active_flag); end if;
    if voper <> 'U' or  updating('rsrc_type') then	 prm_audit.audit_data ('RSRC','rsrc_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_type,:new.rsrc_type); end if;
    if voper <> 'U' or  updating('auto_compute_act_flag') then	 prm_audit.audit_data ('RSRC','auto_compute_act_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.auto_compute_act_flag,:new.auto_compute_act_flag); end if;
    if voper <> 'U' or  updating('ot_flag') then	 prm_audit.audit_data ('RSRC','ot_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ot_flag,:new.ot_flag); end if;
    if voper <> 'U' or  updating('def_cost_qty_link_flag') then	 prm_audit.audit_data ('RSRC','def_cost_qty_link_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.def_cost_qty_link_flag,:new.def_cost_qty_link_flag); end if;
    if voper <> 'U' or  updating('rsrc_short_name') then	 prm_audit.audit_data ('RSRC','rsrc_short_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_short_name,:new.rsrc_short_name); end if;
    if voper <> 'U' or  updating('rsrc_name') then	 prm_audit.audit_data ('RSRC','rsrc_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_name,:new.rsrc_name); end if;
    if voper <> 'U' or  updating('parent_rsrc_id') then	 prm_audit.audit_data ('RSRC','parent_rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.parent_rsrc_id,:new.parent_rsrc_id); end if;
    if voper <> 'U' or  updating('xfer_complete_day_cnt') then	 prm_audit.audit_data ('RSRC','xfer_complete_day_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.xfer_complete_day_cnt,:new.xfer_complete_day_cnt); end if;
    if voper <> 'U' or  updating('xfer_notstart_day_cnt') then	 prm_audit.audit_data ('RSRC','xfer_notstart_day_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.xfer_notstart_day_cnt,:new.xfer_notstart_day_cnt); end if;
    if voper <> 'U' or  updating('ts_approve_user_id') then	 prm_audit.audit_data ('RSRC','ts_approve_user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ts_approve_user_id,:new.ts_approve_user_id); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('RSRC','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('role_id') then	 prm_audit.audit_data ('RSRC','role_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.role_id,:new.role_id); end if;
    if voper <> 'U' or  updating('curr_id') then	 prm_audit.audit_data ('RSRC','curr_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.curr_id,:new.curr_id); end if;
    if voper <> 'U' or  updating('last_checksum') then	 prm_audit.audit_data ('RSRC','last_checksum',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.last_checksum,:new.last_checksum); end if;
    if voper <> 'U' or  updating('shift_id') then	 prm_audit.audit_data ('RSRC','shift_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.shift_id,:new.shift_id); end if;
    if voper <> 'U' or  updating('ot_factor') then	 prm_audit.audit_data ('RSRC','ot_factor',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ot_factor,:new.ot_factor); end if;
    if voper <> 'U' or  updating('def_qty_per_hr') then	 prm_audit.audit_data ('RSRC','def_qty_per_hr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.def_qty_per_hr,:new.def_qty_per_hr); end if;
    if voper <> 'U' or  updating('guid') then	 prm_audit.audit_data ('RSRC','guid',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.guid,:new.guid); end if;
    if voper <> 'U' or  updating('cost_qty_type') then	 prm_audit.audit_data ('RSRC','cost_qty_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_qty_type,:new.cost_qty_type); end if;
    if voper <> 'U' or  updating('office_phone') then	 prm_audit.audit_data ('RSRC','office_phone',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.office_phone,:new.office_phone); end if;
    if voper <> 'U' or  updating('other_phone') then	 prm_audit.audit_data ('RSRC','other_phone',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.other_phone,:new.other_phone); end if;
    if voper <> 'U' or  updating('employee_code') then	 prm_audit.audit_data ('RSRC','employee_code',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.employee_code,:new.employee_code); end if;
    if voper <> 'U' or  updating('rsrc_title_name') then	 prm_audit.audit_data ('RSRC','rsrc_title_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_title_name,:new.rsrc_title_name); end if;
    if voper <> 'U' or  updating('email_addr') then	 prm_audit.audit_data ('RSRC','email_addr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.email_addr,:new.email_addr); end if;
    if voper <> 'U' or  updating('unit_id') then	 prm_audit.audit_data ('RSRC','unit_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.unit_id,:new.unit_id); end if;
    if voper <> 'U' or  updating('pobs_id') then	 prm_audit.audit_data ('RSRC','pobs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pobs_id,:new.pobs_id); end if;
    if voper <> 'U' or ( updating('rsrc_notes') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('RSRC','rsrc_notes',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.rsrc_notes,:new.rsrc_notes); end if;

  end if;


      prm_audit.audit_row ( 'RSRC',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RSRCANDASH
create or replace trigger PRMAUD_RSRCANDASH
after insert or update or delete on RSRCANDASH
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RSRCANDASH',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.dashboard_id;
				
vpk2 := :old.rsrcan_view_id;
				

    else
    	vpk1 := :new.dashboard_id;
				
vpk2 := :new.rsrcan_view_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('dashboard_id') then	 prm_audit.audit_data ('RSRCANDASH','dashboard_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.dashboard_id,:new.dashboard_id); end if;
    if voper <> 'U' or  updating('rsrcan_view_id') then	 prm_audit.audit_data ('RSRCANDASH','rsrcan_view_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrcan_view_id,:new.rsrcan_view_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('RSRCANDASH','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;

  end if;


      prm_audit.audit_row ( 'RSRCANDASH',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RSRCANVIEW
create or replace trigger PRMAUD_RSRCANVIEW
after insert or update or delete on RSRCANVIEW
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RSRCANVIEW',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.rsrcan_view_id;
				

    else
    	vpk1 := :new.rsrcan_view_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('rsrcan_view_id') then	 prm_audit.audit_data ('RSRCANVIEW','rsrcan_view_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.rsrcan_view_id,:new.rsrcan_view_id); end if;
    if voper <> 'U' or  updating('rsrcan_view_name') then	 prm_audit.audit_data ('RSRCANVIEW','rsrcan_view_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrcan_view_name,:new.rsrcan_view_name); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('RSRCANVIEW','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('rsrcan_view_type') then	 prm_audit.audit_data ('RSRCANVIEW','rsrcan_view_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrcan_view_type,:new.rsrcan_view_type); end if;
    if voper <> 'U' or  updating('rsrcan_view_data') then	 prm_audit.audit_data ('RSRCANVIEW','rsrcan_view_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrcan_view_data,:new.rsrcan_view_data); end if;

  end if;


      prm_audit.audit_row ( 'RSRCANVIEW',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RSRCCURV
create or replace trigger PRMAUD_RSRCCURV
after insert or update or delete on RSRCCURV
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RSRCCURV',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.curv_id;
				

    else
    	vpk1 := :new.curv_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('curv_id') then	 prm_audit.audit_data ('RSRCCURV','curv_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.curv_id,:new.curv_id); end if;
    if voper <> 'U' or  updating('curv_name') then	 prm_audit.audit_data ('RSRCCURV','curv_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.curv_name,:new.curv_name); end if;
    if voper <> 'U' or  updating('default_flag') then	 prm_audit.audit_data ('RSRCCURV','default_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.default_flag,:new.default_flag); end if;
    if voper <> 'U' or ( updating('curv_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('RSRCCURV','curv_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.curv_data,:new.curv_data); end if;

  end if;


      prm_audit.audit_row ( 'RSRCCURV',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RSRCHOUR
create or replace trigger PRMAUD_RSRCHOUR
after insert or update or delete on RSRCHOUR
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RSRCHOUR',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.rsrc_hr_id;
				

    else
    	vpk1 := :new.rsrc_hr_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('rsrc_hr_id') then	 prm_audit.audit_data ('RSRCHOUR','rsrc_hr_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.rsrc_hr_id,:new.rsrc_hr_id); end if;
    if voper <> 'U' or  updating('rsrc_id') then	 prm_audit.audit_data ('RSRCHOUR','rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_id,:new.rsrc_id); end if;
    if voper <> 'U' or  updating('ts_id') then	 prm_audit.audit_data ('RSRCHOUR','ts_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ts_id,:new.ts_id); end if;
    if voper <> 'U' or  updating('task_ts_flag') then	 prm_audit.audit_data ('RSRCHOUR','task_ts_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_ts_flag,:new.task_ts_flag); end if;
    if voper <> 'U' or  updating('taskrsrc_id') then	 prm_audit.audit_data ('RSRCHOUR','taskrsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.taskrsrc_id,:new.taskrsrc_id); end if;
    if voper <> 'U' or  updating('nonwork_type_id') then	 prm_audit.audit_data ('RSRCHOUR','nonwork_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.nonwork_type_id,:new.nonwork_type_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('RSRCHOUR','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('pend_hr_cnt') then	 prm_audit.audit_data ('RSRCHOUR','pend_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pend_hr_cnt,:new.pend_hr_cnt); end if;
    if voper <> 'U' or  updating('hr_cnt') then	 prm_audit.audit_data ('RSRCHOUR','hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.hr_cnt,:new.hr_cnt); end if;
    if voper <> 'U' or  updating('pend_ot_hr_cnt') then	 prm_audit.audit_data ('RSRCHOUR','pend_ot_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pend_ot_hr_cnt,:new.pend_ot_hr_cnt); end if;
    if voper <> 'U' or  updating('ot_hr_cnt') then	 prm_audit.audit_data ('RSRCHOUR','ot_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ot_hr_cnt,:new.ot_hr_cnt); end if;
    if voper <> 'U' or  updating('work_date') then	 prm_audit.audit_data ('RSRCHOUR','work_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.work_date,'yyyymmddhh24miss'),to_char(:new.work_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('status_code') then	 prm_audit.audit_data ('RSRCHOUR','status_code',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.status_code,:new.status_code); end if;

  end if;


      prm_audit.audit_row ( 'RSRCHOUR',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RSRCPROP
create or replace trigger PRMAUD_RSRCPROP
after insert or update or delete on RSRCPROP
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RSRCPROP',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.rsrc_id;
				
vpk2 := :old.prop_name;
				

    else
    	vpk1 := :new.rsrc_id;
				
vpk2 := :new.prop_name;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('rsrc_id') then	 prm_audit.audit_data ('RSRCPROP','rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.rsrc_id,:new.rsrc_id); end if;
    if voper <> 'U' or  updating('prop_name') then	 prm_audit.audit_data ('RSRCPROP','prop_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.prop_name,:new.prop_name); end if;
    if voper <> 'U' or  updating('prop_value') then	 prm_audit.audit_data ('RSRCPROP','prop_value',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.prop_value,:new.prop_value); end if;

  end if;


      prm_audit.audit_row ( 'RSRCPROP',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RSRCRATE
create or replace trigger PRMAUD_RSRCRATE
after insert or update or delete on RSRCRATE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RSRCRATE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.rsrc_rate_id;
				

    else
    	vpk1 := :new.rsrc_rate_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('rsrc_rate_id') then	 prm_audit.audit_data ('RSRCRATE','rsrc_rate_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.rsrc_rate_id,:new.rsrc_rate_id); end if;
    if voper <> 'U' or  updating('rsrc_id') then	 prm_audit.audit_data ('RSRCRATE','rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_id,:new.rsrc_id); end if;
    if voper <> 'U' or  updating('start_date') then	 prm_audit.audit_data ('RSRCRATE','start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.start_date,'yyyymmddhh24miss'),to_char(:new.start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('shift_period_id') then	 prm_audit.audit_data ('RSRCRATE','shift_period_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.shift_period_id,:new.shift_period_id); end if;
    if voper <> 'U' or  updating('max_qty_per_hr') then	 prm_audit.audit_data ('RSRCRATE','max_qty_per_hr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.max_qty_per_hr,:new.max_qty_per_hr); end if;
    if voper <> 'U' or  updating('cost_per_qty') then	 prm_audit.audit_data ('RSRCRATE','cost_per_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_per_qty,:new.cost_per_qty); end if;
    if voper <> 'U' or  updating('cost_per_qty2') then	 prm_audit.audit_data ('RSRCRATE','cost_per_qty2',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_per_qty2,:new.cost_per_qty2); end if;
    if voper <> 'U' or  updating('cost_per_qty3') then	 prm_audit.audit_data ('RSRCRATE','cost_per_qty3',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_per_qty3,:new.cost_per_qty3); end if;
    if voper <> 'U' or  updating('cost_per_qty4') then	 prm_audit.audit_data ('RSRCRATE','cost_per_qty4',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_per_qty4,:new.cost_per_qty4); end if;
    if voper <> 'U' or  updating('cost_per_qty5') then	 prm_audit.audit_data ('RSRCRATE','cost_per_qty5',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_per_qty5,:new.cost_per_qty5); end if;

  end if;


      prm_audit.audit_row ( 'RSRCRATE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RSRCRCAT
create or replace trigger PRMAUD_RSRCRCAT
after insert or update or delete on RSRCRCAT
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RSRCRCAT',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.rsrc_id;
				
vpk2 := :old.rsrc_catg_type_id;
				

    else
    	vpk1 := :new.rsrc_id;
				
vpk2 := :new.rsrc_catg_type_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('rsrc_id') then	 prm_audit.audit_data ('RSRCRCAT','rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.rsrc_id,:new.rsrc_id); end if;
    if voper <> 'U' or  updating('rsrc_catg_type_id') then	 prm_audit.audit_data ('RSRCRCAT','rsrc_catg_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_catg_type_id,:new.rsrc_catg_type_id); end if;
    if voper <> 'U' or  updating('rsrc_catg_id') then	 prm_audit.audit_data ('RSRCRCAT','rsrc_catg_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_catg_id,:new.rsrc_catg_id); end if;

  end if;


      prm_audit.audit_row ( 'RSRCRCAT',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RSRCROLE
create or replace trigger PRMAUD_RSRCROLE
after insert or update or delete on RSRCROLE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RSRCROLE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.rsrc_id;
				
vpk2 := :old.role_id;
				

    else
    	vpk1 := :new.rsrc_id;
				
vpk2 := :new.role_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('rsrc_id') then	 prm_audit.audit_data ('RSRCROLE','rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.rsrc_id,:new.rsrc_id); end if;
    if voper <> 'U' or  updating('role_id') then	 prm_audit.audit_data ('RSRCROLE','role_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.role_id,:new.role_id); end if;
    if voper <> 'U' or  updating('skill_level') then	 prm_audit.audit_data ('RSRCROLE','skill_level',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.skill_level,:new.skill_level); end if;

  end if;


      prm_audit.audit_row ( 'RSRCROLE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RSRCSEC
create or replace trigger PRMAUD_RSRCSEC
after insert or update or delete on RSRCSEC
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RSRCSEC',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.user_id;
				
vpk2 := :old.rsrc_id;
				

    else
    	vpk1 := :new.user_id;
				
vpk2 := :new.rsrc_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('RSRCSEC','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('rsrc_id') then	 prm_audit.audit_data ('RSRCSEC','rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_id,:new.rsrc_id); end if;

  end if;


      prm_audit.audit_row ( 'RSRCSEC',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_RSRFOLIO
create or replace trigger PRMAUD_RSRFOLIO
after insert or update or delete on RSRFOLIO
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('RSRFOLIO',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.rfolio_id;
				
vpk2 := :old.rsrc_id;
				

    else
    	vpk1 := :new.rfolio_id;
				
vpk2 := :new.rsrc_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('rfolio_id') then	 prm_audit.audit_data ('RSRFOLIO','rfolio_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.rfolio_id,:new.rfolio_id); end if;
    if voper <> 'U' or  updating('rsrc_id') then	 prm_audit.audit_data ('RSRFOLIO','rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_id,:new.rsrc_id); end if;

  end if;


      prm_audit.audit_row ( 'RSRFOLIO',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_SCENARIO
create or replace trigger PRMAUD_SCENARIO
after insert or update or delete on SCENARIO
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('SCENARIO',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.scenario_id;
				

    else
    	vpk1 := :new.scenario_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('scenario_id') then	 prm_audit.audit_data ('SCENARIO','scenario_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.scenario_id,:new.scenario_id); end if;
    if voper <> 'U' or  updating('scenario_name') then	 prm_audit.audit_data ('SCENARIO','scenario_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.scenario_name,:new.scenario_name); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('SCENARIO','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('table_name') then	 prm_audit.audit_data ('SCENARIO','table_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.table_name,:new.table_name); end if;
    if voper <> 'U' or  updating('fk_id') then	 prm_audit.audit_data ('SCENARIO','fk_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fk_id,:new.fk_id); end if;
    if voper <> 'U' or  updating('scenario_type') then	 prm_audit.audit_data ('SCENARIO','scenario_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.scenario_type,:new.scenario_type); end if;
    if voper <> 'U' or  updating('view_pref_id') then	 prm_audit.audit_data ('SCENARIO','view_pref_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.view_pref_id,:new.view_pref_id); end if;
    if voper <> 'U' or  updating('view_type') then	 prm_audit.audit_data ('SCENARIO','view_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.view_type,:new.view_type); end if;

  end if;


      prm_audit.audit_row ( 'SCENARIO',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_SCENPROJ
create or replace trigger PRMAUD_SCENPROJ
after insert or update or delete on SCENPROJ
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('SCENPROJ',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.scenario_id;
				
vpk2 := :old.proj_id;
				

    else
    	vpk1 := :new.scenario_id;
				
vpk2 := :new.proj_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('scenario_id') then	 prm_audit.audit_data ('SCENPROJ','scenario_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.scenario_id,:new.scenario_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('SCENPROJ','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('selected_flag') then	 prm_audit.audit_data ('SCENPROJ','selected_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.selected_flag,:new.selected_flag); end if;

  end if;


      prm_audit.audit_row ( 'SCENPROJ',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_SCENUSER
create or replace trigger PRMAUD_SCENUSER
after insert or update or delete on SCENUSER
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('SCENUSER',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  vprm_user_name := prm_audit.g_prm_user_name;

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.scenario_id;
				
vpk2 := :old.user_id;
				

    else
    	vpk1 := :new.scenario_id;
				
vpk2 := :new.user_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('scenario_id') then	 prm_audit.audit_data ('SCENUSER','scenario_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.scenario_id,:new.scenario_id); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('SCENUSER','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;

  end if;


      prm_audit.audit_row ( 'SCENUSER',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_SCENROLE
create or replace trigger PRMAUD_SCENROLE
after insert or update or delete on SCENROLE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('SCENROLE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.scenario_id;
				
vpk2 := :old.role_id;
				

    else
    	vpk1 := :new.scenario_id;
				
vpk2 := :new.role_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('scenario_id') then	 prm_audit.audit_data ('SCENROLE','scenario_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.scenario_id,:new.scenario_id); end if;
    if voper <> 'U' or  updating('role_id') then	 prm_audit.audit_data ('SCENROLE','role_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.role_id,:new.role_id); end if;
    if voper <> 'U' or  updating('selected_flag') then	 prm_audit.audit_data ('SCENROLE','selected_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.selected_flag,:new.selected_flag); end if;

  end if;


      prm_audit.audit_row ( 'SCENROLE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_SHIFT
create or replace trigger PRMAUD_SHIFT
after insert or update or delete on SHIFT
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('SHIFT',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.shift_id;
				

    else
    	vpk1 := :new.shift_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('shift_id') then	 prm_audit.audit_data ('SHIFT','shift_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.shift_id,:new.shift_id); end if;
    if voper <> 'U' or  updating('shift_name') then	 prm_audit.audit_data ('SHIFT','shift_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.shift_name,:new.shift_name); end if;

  end if;


      prm_audit.audit_row ( 'SHIFT',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_SHIFTPER
create or replace trigger PRMAUD_SHIFTPER
after insert or update or delete on SHIFTPER
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('SHIFTPER',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.shift_period_id;
				

    else
    	vpk1 := :new.shift_period_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('shift_period_id') then	 prm_audit.audit_data ('SHIFTPER','shift_period_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.shift_period_id,:new.shift_period_id); end if;
    if voper <> 'U' or  updating('shift_id') then	 prm_audit.audit_data ('SHIFTPER','shift_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.shift_id,:new.shift_id); end if;
    if voper <> 'U' or  updating('shift_start_hr_num') then	 prm_audit.audit_data ('SHIFTPER','shift_start_hr_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.shift_start_hr_num,:new.shift_start_hr_num); end if;

  end if;


      prm_audit.audit_row ( 'SHIFTPER',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TASK
create or replace trigger PRMAUD_TASK
after insert or update or delete on TASK
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TASK',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.task_id;
				

    else
    	vpk1 := :new.task_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('task_id') then	 prm_audit.audit_data ('TASK','task_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.task_id,:new.task_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('TASK','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('wbs_id') then	 prm_audit.audit_data ('TASK','wbs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_id,:new.wbs_id); end if;
    if voper <> 'U' or  updating('clndr_id') then	 prm_audit.audit_data ('TASK','clndr_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.clndr_id,:new.clndr_id); end if;
    if voper <> 'U' or  updating('est_wt') then	 prm_audit.audit_data ('TASK','est_wt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.est_wt,:new.est_wt); end if;
    if voper <> 'U' or  updating('phys_complete_pct') then	 prm_audit.audit_data ('TASK','phys_complete_pct',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.phys_complete_pct,:new.phys_complete_pct); end if;
    if voper <> 'U' or  updating('rev_fdbk_flag') then	 prm_audit.audit_data ('TASK','rev_fdbk_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rev_fdbk_flag,:new.rev_fdbk_flag); end if;
    if voper <> 'U' or  updating('lock_plan_flag') then	 prm_audit.audit_data ('TASK','lock_plan_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.lock_plan_flag,:new.lock_plan_flag); end if;
    if voper <> 'U' or  updating('auto_compute_act_flag') then	 prm_audit.audit_data ('TASK','auto_compute_act_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.auto_compute_act_flag,:new.auto_compute_act_flag); end if;
    if voper <> 'U' or  updating('complete_pct_type') then	 prm_audit.audit_data ('TASK','complete_pct_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.complete_pct_type,:new.complete_pct_type); end if;
    if voper <> 'U' or  updating('task_type') then	 prm_audit.audit_data ('TASK','task_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_type,:new.task_type); end if;
    if voper <> 'U' or  updating('duration_type') then	 prm_audit.audit_data ('TASK','duration_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.duration_type,:new.duration_type); end if;
    if voper <> 'U' or  updating('review_type') then	 prm_audit.audit_data ('TASK','review_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.review_type,:new.review_type); end if;
    if voper <> 'U' or  updating('status_code') then	 prm_audit.audit_data ('TASK','status_code',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.status_code,:new.status_code); end if;
    if voper <> 'U' or  updating('task_code') then	 prm_audit.audit_data ('TASK','task_code',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_code,:new.task_code); end if;
    if voper <> 'U' or  updating('task_name') then	 prm_audit.audit_data ('TASK','task_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_name,:new.task_name); end if;
    if voper <> 'U' or  updating('rsrc_id') then	 prm_audit.audit_data ('TASK','rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_id,:new.rsrc_id); end if;
    if voper <> 'U' or  updating('total_float_hr_cnt') then	 prm_audit.audit_data ('TASK','total_float_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.total_float_hr_cnt,:new.total_float_hr_cnt); end if;
    if voper <> 'U' or  updating('free_float_hr_cnt') then	 prm_audit.audit_data ('TASK','free_float_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.free_float_hr_cnt,:new.free_float_hr_cnt); end if;
    if voper <> 'U' or  updating('remain_drtn_hr_cnt') then	 prm_audit.audit_data ('TASK','remain_drtn_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_drtn_hr_cnt,:new.remain_drtn_hr_cnt); end if;
    if voper <> 'U' or  updating('act_work_qty') then	 prm_audit.audit_data ('TASK','act_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_work_qty,:new.act_work_qty); end if;
    if voper <> 'U' or  updating('remain_work_qty') then	 prm_audit.audit_data ('TASK','remain_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_work_qty,:new.remain_work_qty); end if;
    if voper <> 'U' or  updating('target_work_qty') then	 prm_audit.audit_data ('TASK','target_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.target_work_qty,:new.target_work_qty); end if;
    if voper <> 'U' or  updating('target_drtn_hr_cnt') then	 prm_audit.audit_data ('TASK','target_drtn_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.target_drtn_hr_cnt,:new.target_drtn_hr_cnt); end if;
    if voper <> 'U' or  updating('target_equip_qty') then	 prm_audit.audit_data ('TASK','target_equip_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.target_equip_qty,:new.target_equip_qty); end if;
    if voper <> 'U' or  updating('act_equip_qty') then	 prm_audit.audit_data ('TASK','act_equip_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_equip_qty,:new.act_equip_qty); end if;
    if voper <> 'U' or  updating('remain_equip_qty') then	 prm_audit.audit_data ('TASK','remain_equip_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_equip_qty,:new.remain_equip_qty); end if;
    if voper <> 'U' or  updating('cstr_date') then	 prm_audit.audit_data ('TASK','cstr_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.cstr_date,'yyyymmddhh24miss'),to_char(:new.cstr_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('act_start_date') then	 prm_audit.audit_data ('TASK','act_start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.act_start_date,'yyyymmddhh24miss'),to_char(:new.act_start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('act_end_date') then	 prm_audit.audit_data ('TASK','act_end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.act_end_date,'yyyymmddhh24miss'),to_char(:new.act_end_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('late_start_date') then	 prm_audit.audit_data ('TASK','late_start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.late_start_date,'yyyymmddhh24miss'),to_char(:new.late_start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('late_end_date') then	 prm_audit.audit_data ('TASK','late_end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.late_end_date,'yyyymmddhh24miss'),to_char(:new.late_end_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('expect_end_date') then	 prm_audit.audit_data ('TASK','expect_end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.expect_end_date,'yyyymmddhh24miss'),to_char(:new.expect_end_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('early_start_date') then	 prm_audit.audit_data ('TASK','early_start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.early_start_date,'yyyymmddhh24miss'),to_char(:new.early_start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('early_end_date') then	 prm_audit.audit_data ('TASK','early_end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.early_end_date,'yyyymmddhh24miss'),to_char(:new.early_end_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('restart_date') then	 prm_audit.audit_data ('TASK','restart_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.restart_date,'yyyymmddhh24miss'),to_char(:new.restart_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('reend_date') then	 prm_audit.audit_data ('TASK','reend_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.reend_date,'yyyymmddhh24miss'),to_char(:new.reend_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('target_start_date') then	 prm_audit.audit_data ('TASK','target_start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.target_start_date,'yyyymmddhh24miss'),to_char(:new.target_start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('target_end_date') then	 prm_audit.audit_data ('TASK','target_end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.target_end_date,'yyyymmddhh24miss'),to_char(:new.target_end_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('review_end_date') then	 prm_audit.audit_data ('TASK','review_end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.review_end_date,'yyyymmddhh24miss'),to_char(:new.review_end_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('rem_late_start_date') then	 prm_audit.audit_data ('TASK','rem_late_start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.rem_late_start_date,'yyyymmddhh24miss'),to_char(:new.rem_late_start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('rem_late_end_date') then	 prm_audit.audit_data ('TASK','rem_late_end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.rem_late_end_date,'yyyymmddhh24miss'),to_char(:new.rem_late_end_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('cstr_type') then	 prm_audit.audit_data ('TASK','cstr_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cstr_type,:new.cstr_type); end if;
    if voper <> 'U' or  updating('priority_type') then	 prm_audit.audit_data ('TASK','priority_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.priority_type,:new.priority_type); end if;
    if voper <> 'U' or  updating('guid') then	 prm_audit.audit_data ('TASK','guid',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.guid,:new.guid); end if;
    if voper <> 'U' or  updating('tmpl_guid') then	 prm_audit.audit_data ('TASK','tmpl_guid',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.tmpl_guid,:new.tmpl_guid); end if;
    if voper <> 'U' or  updating('cstr_date2') then	 prm_audit.audit_data ('TASK','cstr_date2',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.cstr_date2,'yyyymmddhh24miss'),to_char(:new.cstr_date2,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('cstr_type2') then	 prm_audit.audit_data ('TASK','cstr_type2',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cstr_type2,:new.cstr_type2); end if;
    if voper <> 'U' or  updating('float_path') then	 prm_audit.audit_data ('TASK','float_path',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.float_path,:new.float_path); end if;
    if voper <> 'U' or  updating('float_path_order') then	 prm_audit.audit_data ('TASK','float_path_order',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.float_path_order,:new.float_path_order); end if;
    if voper <> 'U' or  updating('act_this_per_work_qty') then	 prm_audit.audit_data ('TASK','act_this_per_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_this_per_work_qty,:new.act_this_per_work_qty); end if;
    if voper <> 'U' or  updating('act_this_per_equip_qty') then	 prm_audit.audit_data ('TASK','act_this_per_equip_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_this_per_equip_qty,:new.act_this_per_equip_qty); end if;
    if voper <> 'U' or  updating('driving_path_flag') then	 prm_audit.audit_data ('TASK','driving_path_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.driving_path_flag,:new.driving_path_flag); end if;
    if voper <> 'U' or  updating('suspend_date') then	 prm_audit.audit_data ('TASK','suspend_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.suspend_date,'yyyymmddhh24miss'),to_char(:new.suspend_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('resume_date') then	 prm_audit.audit_data ('TASK','resume_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.resume_date,'yyyymmddhh24miss'),to_char(:new.resume_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('external_early_start_date') then	 prm_audit.audit_data ('TASK','external_early_start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.external_early_start_date,'yyyymmddhh24miss'),to_char(:new.external_early_start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('external_late_end_date') then	 prm_audit.audit_data ('TASK','external_late_end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.external_late_end_date,'yyyymmddhh24miss'),to_char(:new.external_late_end_date,'yyyymmddhh24miss')); end if;

  end if;


      prm_audit.audit_row ( 'TASK',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TASKACTV
create or replace trigger PRMAUD_TASKACTV
after insert or update or delete on TASKACTV
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TASKACTV',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.task_id;
				
vpk2 := :old.actv_code_type_id;
				

    else
    	vpk1 := :new.task_id;
				
vpk2 := :new.actv_code_type_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('task_id') then	 prm_audit.audit_data ('TASKACTV','task_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.task_id,:new.task_id); end if;
    if voper <> 'U' or  updating('actv_code_type_id') then	 prm_audit.audit_data ('TASKACTV','actv_code_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.actv_code_type_id,:new.actv_code_type_id); end if;
    if voper <> 'U' or  updating('actv_code_id') then	 prm_audit.audit_data ('TASKACTV','actv_code_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.actv_code_id,:new.actv_code_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('TASKACTV','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;

  end if;


      prm_audit.audit_row ( 'TASKACTV',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TASKDOC
create or replace trigger PRMAUD_TASKDOC
after insert or update or delete on TASKDOC
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TASKDOC',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.taskdoc_id;
				

    else
    	vpk1 := :new.taskdoc_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('taskdoc_id') then	 prm_audit.audit_data ('TASKDOC','taskdoc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.taskdoc_id,:new.taskdoc_id); end if;
    if voper <> 'U' or  updating('doc_id') then	 prm_audit.audit_data ('TASKDOC','doc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.doc_id,:new.doc_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('TASKDOC','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('wbs_id') then	 prm_audit.audit_data ('TASKDOC','wbs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_id,:new.wbs_id); end if;
    if voper <> 'U' or  updating('wp_flag') then	 prm_audit.audit_data ('TASKDOC','wp_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wp_flag,:new.wp_flag); end if;
    if voper <> 'U' or  updating('task_id') then	 prm_audit.audit_data ('TASKDOC','task_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_id,:new.task_id); end if;

  end if;


      prm_audit.audit_row ( 'TASKDOC',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TASKFDBK
create or replace trigger PRMAUD_TASKFDBK
after insert or update or delete on TASKFDBK
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TASKFDBK',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.task_id;
				

    else
    	vpk1 := :new.task_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('task_id') then	 prm_audit.audit_data ('TASKFDBK','task_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.task_id,:new.task_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('TASKFDBK','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or ( updating('task_fdbk') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('TASKFDBK','task_fdbk',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.task_fdbk,:new.task_fdbk); end if;

  end if;


      prm_audit.audit_row ( 'TASKFDBK',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TASKFIN
create or replace trigger PRMAUD_TASKFIN
after insert or update or delete on TASKFIN
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TASKFIN',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.fin_dates_id;
				
vpk2 := :old.task_id;
				

    else
    	vpk1 := :new.fin_dates_id;
				
vpk2 := :new.task_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('fin_dates_id') then	 prm_audit.audit_data ('TASKFIN','fin_dates_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.fin_dates_id,:new.fin_dates_id); end if;
    if voper <> 'U' or  updating('task_id') then	 prm_audit.audit_data ('TASKFIN','task_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_id,:new.task_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('TASKFIN','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('act_work_qty') then	 prm_audit.audit_data ('TASKFIN','act_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_work_qty,:new.act_work_qty); end if;
    if voper <> 'U' or  updating('act_work_cost') then	 prm_audit.audit_data ('TASKFIN','act_work_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_work_cost,:new.act_work_cost); end if;
    if voper <> 'U' or  updating('act_equip_qty') then	 prm_audit.audit_data ('TASKFIN','act_equip_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_equip_qty,:new.act_equip_qty); end if;
    if voper <> 'U' or  updating('act_equip_cost') then	 prm_audit.audit_data ('TASKFIN','act_equip_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_equip_cost,:new.act_equip_cost); end if;
    if voper <> 'U' or  updating('act_mat_cost') then	 prm_audit.audit_data ('TASKFIN','act_mat_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_mat_cost,:new.act_mat_cost); end if;
    if voper <> 'U' or  updating('act_expense_cost') then	 prm_audit.audit_data ('TASKFIN','act_expense_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_expense_cost,:new.act_expense_cost); end if;
    if voper <> 'U' or  updating('bcwp') then	 prm_audit.audit_data ('TASKFIN','bcwp',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.bcwp,:new.bcwp); end if;
    if voper <> 'U' or  updating('sched_work_qty') then	 prm_audit.audit_data ('TASKFIN','sched_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.sched_work_qty,:new.sched_work_qty); end if;
    if voper <> 'U' or  updating('bcws') then	 prm_audit.audit_data ('TASKFIN','bcws',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.bcws,:new.bcws); end if;
    if voper <> 'U' or  updating('perfm_work_qty') then	 prm_audit.audit_data ('TASKFIN','perfm_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.perfm_work_qty,:new.perfm_work_qty); end if;

  end if;


      prm_audit.audit_row ( 'TASKFIN',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TASKMEMO
create or replace trigger PRMAUD_TASKMEMO
after insert or update or delete on TASKMEMO
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TASKMEMO',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.memo_id;
				

    else
    	vpk1 := :new.memo_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('memo_id') then	 prm_audit.audit_data ('TASKMEMO','memo_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.memo_id,:new.memo_id); end if;
    if voper <> 'U' or  updating('task_id') then	 prm_audit.audit_data ('TASKMEMO','task_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_id,:new.task_id); end if;
    if voper <> 'U' or  updating('memo_type_id') then	 prm_audit.audit_data ('TASKMEMO','memo_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.memo_type_id,:new.memo_type_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('TASKMEMO','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or ( updating('task_memo') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('TASKMEMO','task_memo',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.task_memo,:new.task_memo); end if;

  end if;


      prm_audit.audit_row ( 'TASKMEMO',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TASKNOTE
create or replace trigger PRMAUD_TASKNOTE
after insert or update or delete on TASKNOTE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TASKNOTE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.task_id;
				

    else
    	vpk1 := :new.task_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('task_id') then	 prm_audit.audit_data ('TASKNOTE','task_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.task_id,:new.task_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('TASKNOTE','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or ( updating('task_notes') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('TASKNOTE','task_notes',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.task_notes,:new.task_notes); end if;

  end if;


      prm_audit.audit_row ( 'TASKNOTE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TASKPRED
create or replace trigger PRMAUD_TASKPRED
after insert or update or delete on TASKPRED
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TASKPRED',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.task_pred_id;
				

    else
    	vpk1 := :new.task_pred_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('task_pred_id') then	 prm_audit.audit_data ('TASKPRED','task_pred_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.task_pred_id,:new.task_pred_id); end if;
    if voper <> 'U' or  updating('task_id') then	 prm_audit.audit_data ('TASKPRED','task_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_id,:new.task_id); end if;
    if voper <> 'U' or  updating('pred_task_id') then	 prm_audit.audit_data ('TASKPRED','pred_task_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pred_task_id,:new.pred_task_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('TASKPRED','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('pred_proj_id') then	 prm_audit.audit_data ('TASKPRED','pred_proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pred_proj_id,:new.pred_proj_id); end if;
    if voper <> 'U' or  updating('pred_type') then	 prm_audit.audit_data ('TASKPRED','pred_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pred_type,:new.pred_type); end if;
    if voper <> 'U' or  updating('lag_hr_cnt') then	 prm_audit.audit_data ('TASKPRED','lag_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.lag_hr_cnt,:new.lag_hr_cnt); end if;

  end if;


      prm_audit.audit_row ( 'TASKPRED',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TASKPROC
create or replace trigger PRMAUD_TASKPROC
after insert or update or delete on TASKPROC
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TASKPROC',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.proc_id;
				

    else
    	vpk1 := :new.proc_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('proc_id') then	 prm_audit.audit_data ('TASKPROC','proc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.proc_id,:new.proc_id); end if;
    if voper <> 'U' or  updating('task_id') then	 prm_audit.audit_data ('TASKPROC','task_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_id,:new.task_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('TASKPROC','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('TASKPROC','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('complete_flag') then	 prm_audit.audit_data ('TASKPROC','complete_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.complete_flag,:new.complete_flag); end if;
    if voper <> 'U' or  updating('proc_name') then	 prm_audit.audit_data ('TASKPROC','proc_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proc_name,:new.proc_name); end if;
    if voper <> 'U' or  updating('proc_wt') then	 prm_audit.audit_data ('TASKPROC','proc_wt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proc_wt,:new.proc_wt); end if;
    if voper <> 'U' or  updating('complete_pct') then	 prm_audit.audit_data ('TASKPROC','complete_pct',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.complete_pct,:new.complete_pct); end if;
    if voper <> 'U' or ( updating('proc_descr') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('TASKPROC','proc_descr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.proc_descr,:new.proc_descr); end if;

  end if;


      prm_audit.audit_row ( 'TASKPROC',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TASKRSRC
create or replace trigger PRMAUD_TASKRSRC
after insert or update or delete on TASKRSRC
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TASKRSRC',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.taskrsrc_id;
				

    else
    	vpk1 := :new.taskrsrc_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('taskrsrc_id') then	 prm_audit.audit_data ('TASKRSRC','taskrsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.taskrsrc_id,:new.taskrsrc_id); end if;
    if voper <> 'U' or  updating('task_id') then	 prm_audit.audit_data ('TASKRSRC','task_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_id,:new.task_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('TASKRSRC','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('rsrc_type') then	 prm_audit.audit_data ('TASKRSRC','rsrc_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_type,:new.rsrc_type); end if;
    if voper <> 'U' or  updating('cost_qty_link_flag') then	 prm_audit.audit_data ('TASKRSRC','cost_qty_link_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_qty_link_flag,:new.cost_qty_link_flag); end if;
    if voper <> 'U' or  updating('role_id') then	 prm_audit.audit_data ('TASKRSRC','role_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.role_id,:new.role_id); end if;
    if voper <> 'U' or  updating('acct_id') then	 prm_audit.audit_data ('TASKRSRC','acct_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.acct_id,:new.acct_id); end if;
    if voper <> 'U' or  updating('rsrc_id') then	 prm_audit.audit_data ('TASKRSRC','rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_id,:new.rsrc_id); end if;
    if voper <> 'U' or  updating('pobs_id') then	 prm_audit.audit_data ('TASKRSRC','pobs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pobs_id,:new.pobs_id); end if;
    if voper <> 'U' or  updating('skill_level') then	 prm_audit.audit_data ('TASKRSRC','skill_level',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.skill_level,:new.skill_level); end if;
    if voper <> 'U' or  updating('pend_complete_pct') then	 prm_audit.audit_data ('TASKRSRC','pend_complete_pct',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pend_complete_pct,:new.pend_complete_pct); end if;
    if voper <> 'U' or  updating('remain_qty') then	 prm_audit.audit_data ('TASKRSRC','remain_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_qty,:new.remain_qty); end if;
    if voper <> 'U' or  updating('pend_remain_qty') then	 prm_audit.audit_data ('TASKRSRC','pend_remain_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pend_remain_qty,:new.pend_remain_qty); end if;
    if voper <> 'U' or  updating('target_qty') then	 prm_audit.audit_data ('TASKRSRC','target_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.target_qty,:new.target_qty); end if;
    if voper <> 'U' or  updating('remain_qty_per_hr') then	 prm_audit.audit_data ('TASKRSRC','remain_qty_per_hr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_qty_per_hr,:new.remain_qty_per_hr); end if;
    if voper <> 'U' or  updating('pend_act_reg_qty') then	 prm_audit.audit_data ('TASKRSRC','pend_act_reg_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pend_act_reg_qty,:new.pend_act_reg_qty); end if;
    if voper <> 'U' or  updating('target_lag_drtn_hr_cnt') then	 prm_audit.audit_data ('TASKRSRC','target_lag_drtn_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.target_lag_drtn_hr_cnt,:new.target_lag_drtn_hr_cnt); end if;
    if voper <> 'U' or  updating('target_qty_per_hr') then	 prm_audit.audit_data ('TASKRSRC','target_qty_per_hr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.target_qty_per_hr,:new.target_qty_per_hr); end if;
    if voper <> 'U' or  updating('act_ot_qty') then	 prm_audit.audit_data ('TASKRSRC','act_ot_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_ot_qty,:new.act_ot_qty); end if;
    if voper <> 'U' or  updating('pend_act_ot_qty') then	 prm_audit.audit_data ('TASKRSRC','pend_act_ot_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pend_act_ot_qty,:new.pend_act_ot_qty); end if;
    if voper <> 'U' or  updating('act_reg_qty') then	 prm_audit.audit_data ('TASKRSRC','act_reg_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_reg_qty,:new.act_reg_qty); end if;
    if voper <> 'U' or  updating('relag_drtn_hr_cnt') then	 prm_audit.audit_data ('TASKRSRC','relag_drtn_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.relag_drtn_hr_cnt,:new.relag_drtn_hr_cnt); end if;
    if voper <> 'U' or  updating('ot_factor') then	 prm_audit.audit_data ('TASKRSRC','ot_factor',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ot_factor,:new.ot_factor); end if;
    if voper <> 'U' or  updating('cost_per_qty') then	 prm_audit.audit_data ('TASKRSRC','cost_per_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_per_qty,:new.cost_per_qty); end if;
    if voper <> 'U' or  updating('target_cost') then	 prm_audit.audit_data ('TASKRSRC','target_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.target_cost,:new.target_cost); end if;
    if voper <> 'U' or  updating('act_reg_cost') then	 prm_audit.audit_data ('TASKRSRC','act_reg_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_reg_cost,:new.act_reg_cost); end if;
    if voper <> 'U' or  updating('act_ot_cost') then	 prm_audit.audit_data ('TASKRSRC','act_ot_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_ot_cost,:new.act_ot_cost); end if;
    if voper <> 'U' or  updating('remain_cost') then	 prm_audit.audit_data ('TASKRSRC','remain_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_cost,:new.remain_cost); end if;
    if voper <> 'U' or  updating('act_start_date') then	 prm_audit.audit_data ('TASKRSRC','act_start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.act_start_date,'yyyymmddhh24miss'),to_char(:new.act_start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('act_end_date') then	 prm_audit.audit_data ('TASKRSRC','act_end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.act_end_date,'yyyymmddhh24miss'),to_char(:new.act_end_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('restart_date') then	 prm_audit.audit_data ('TASKRSRC','restart_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.restart_date,'yyyymmddhh24miss'),to_char(:new.restart_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('reend_date') then	 prm_audit.audit_data ('TASKRSRC','reend_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.reend_date,'yyyymmddhh24miss'),to_char(:new.reend_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('target_start_date') then	 prm_audit.audit_data ('TASKRSRC','target_start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.target_start_date,'yyyymmddhh24miss'),to_char(:new.target_start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('target_end_date') then	 prm_audit.audit_data ('TASKRSRC','target_end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.target_end_date,'yyyymmddhh24miss'),to_char(:new.target_end_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('rem_late_start_date') then	 prm_audit.audit_data ('TASKRSRC','rem_late_start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.rem_late_start_date,'yyyymmddhh24miss'),to_char(:new.rem_late_start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('rem_late_end_date') then	 prm_audit.audit_data ('TASKRSRC','rem_late_end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.rem_late_end_date,'yyyymmddhh24miss'),to_char(:new.rem_late_end_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('guid') then	 prm_audit.audit_data ('TASKRSRC','guid',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.guid,:new.guid); end if;
    if voper <> 'U' or  updating('rate_type') then	 prm_audit.audit_data ('TASKRSRC','rate_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rate_type,:new.rate_type); end if;
    if voper <> 'U' or  updating('act_this_per_cost') then	 prm_audit.audit_data ('TASKRSRC','act_this_per_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_this_per_cost,:new.act_this_per_cost); end if;
    if voper <> 'U' or  updating('act_this_per_qty') then	 prm_audit.audit_data ('TASKRSRC','act_this_per_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_this_per_qty,:new.act_this_per_qty); end if;
    if voper <> 'U' or  updating('curv_id') then	 prm_audit.audit_data ('TASKRSRC','curv_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.curv_id,:new.curv_id); end if;
    if voper <> 'U' or  updating('rollup_dates_flag') then	 prm_audit.audit_data ('TASKRSRC','rollup_dates_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rollup_dates_flag,:new.rollup_dates_flag); end if;
    if voper <> 'U' or  updating('cost_per_qty_source_type') then	 prm_audit.audit_data ('TASKRSRC','cost_per_qty_source_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cost_per_qty_source_type,:new.cost_per_qty_source_type); end if;
    if voper <> 'U' or  updating('remain_crv') then	 prm_audit.audit_data ('TASKRSRC','remain_crv',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_crv,:new.remain_crv); end if;
    if voper <> 'U' or  updating('target_crv') then	 prm_audit.audit_data ('TASKRSRC','target_crv',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.target_crv,:new.target_crv); end if;
    if voper <> 'U' or  updating('actual_crv') then	 prm_audit.audit_data ('TASKRSRC','actual_crv',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.actual_crv,:new.actual_crv); end if;
    if voper <> 'U' or ( updating('rsrc_request_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('TASKRSRC','rsrc_request_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.rsrc_request_data,:new.rsrc_request_data); end if;
    if voper <> 'U' or  updating('ts_pend_act_end_flag') then	 prm_audit.audit_data ('TASKRSRC','ts_pend_act_end_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ts_pend_act_end_flag,:new.ts_pend_act_end_flag); end if;
    if voper <> 'U' or  updating('prior_ts_act_reg_qty') then	 prm_audit.audit_data ('TASKRSRC','prior_ts_act_reg_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.prior_ts_act_reg_qty,:new.prior_ts_act_reg_qty); end if;
    if voper <> 'U' or  updating('prior_ts_act_ot_qty') then	 prm_audit.audit_data ('TASKRSRC','prior_ts_act_ot_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.prior_ts_act_ot_qty,:new.prior_ts_act_ot_qty); end if;

  end if;


      prm_audit.audit_row ( 'TASKRSRC',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TASKSUM
create or replace trigger PRMAUD_TASKSUM
after insert or update or delete on TASKSUM
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TASKSUM',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.task_sum_id;
				

    else
    	vpk1 := :new.task_sum_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('task_sum_id') then	 prm_audit.audit_data ('TASKSUM','task_sum_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.task_sum_id,:new.task_sum_id); end if;
    if voper <> 'U' or  updating('wbs_id') then	 prm_audit.audit_data ('TASKSUM','wbs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_id,:new.wbs_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('TASKSUM','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('complete_cnt') then	 prm_audit.audit_data ('TASKSUM','complete_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.complete_cnt,:new.complete_cnt); end if;
    if voper <> 'U' or  updating('active_cnt') then	 prm_audit.audit_data ('TASKSUM','active_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.active_cnt,:new.active_cnt); end if;
    if voper <> 'U' or  updating('notstarted_cnt') then	 prm_audit.audit_data ('TASKSUM','notstarted_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.notstarted_cnt,:new.notstarted_cnt); end if;
    if voper <> 'U' or  updating('base_complete_cnt') then	 prm_audit.audit_data ('TASKSUM','base_complete_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_complete_cnt,:new.base_complete_cnt); end if;
    if voper <> 'U' or  updating('base_active_cnt') then	 prm_audit.audit_data ('TASKSUM','base_active_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_active_cnt,:new.base_active_cnt); end if;
    if voper <> 'U' or  updating('base_notstarted_cnt') then	 prm_audit.audit_data ('TASKSUM','base_notstarted_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_notstarted_cnt,:new.base_notstarted_cnt); end if;
    if voper <> 'U' or  updating('act_drtn_hr_cnt') then	 prm_audit.audit_data ('TASKSUM','act_drtn_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_drtn_hr_cnt,:new.act_drtn_hr_cnt); end if;
    if voper <> 'U' or  updating('act_equip_qty') then	 prm_audit.audit_data ('TASKSUM','act_equip_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_equip_qty,:new.act_equip_qty); end if;
    if voper <> 'U' or  updating('act_work_qty') then	 prm_audit.audit_data ('TASKSUM','act_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_work_qty,:new.act_work_qty); end if;
    if voper <> 'U' or  updating('total_drtn_hr_cnt') then	 prm_audit.audit_data ('TASKSUM','total_drtn_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.total_drtn_hr_cnt,:new.total_drtn_hr_cnt); end if;
    if voper <> 'U' or  updating('base_drtn_hr_cnt') then	 prm_audit.audit_data ('TASKSUM','base_drtn_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_drtn_hr_cnt,:new.base_drtn_hr_cnt); end if;
    if voper <> 'U' or  updating('base_work_qty') then	 prm_audit.audit_data ('TASKSUM','base_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_work_qty,:new.base_work_qty); end if;
    if voper <> 'U' or  updating('base_equip_qty') then	 prm_audit.audit_data ('TASKSUM','base_equip_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_equip_qty,:new.base_equip_qty); end if;
    if voper <> 'U' or  updating('etc_work_qty') then	 prm_audit.audit_data ('TASKSUM','etc_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.etc_work_qty,:new.etc_work_qty); end if;
    if voper <> 'U' or  updating('remain_drtn_hr_cnt') then	 prm_audit.audit_data ('TASKSUM','remain_drtn_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_drtn_hr_cnt,:new.remain_drtn_hr_cnt); end if;
    if voper <> 'U' or  updating('remain_work_qty') then	 prm_audit.audit_data ('TASKSUM','remain_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_work_qty,:new.remain_work_qty); end if;
    if voper <> 'U' or  updating('remain_equip_qty') then	 prm_audit.audit_data ('TASKSUM','remain_equip_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_equip_qty,:new.remain_equip_qty); end if;
    if voper <> 'U' or  updating('total_float_hr_cnt') then	 prm_audit.audit_data ('TASKSUM','total_float_hr_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.total_float_hr_cnt,:new.total_float_hr_cnt); end if;
    if voper <> 'U' or  updating('act_expense_cost') then	 prm_audit.audit_data ('TASKSUM','act_expense_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_expense_cost,:new.act_expense_cost); end if;
    if voper <> 'U' or  updating('act_work_cost') then	 prm_audit.audit_data ('TASKSUM','act_work_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_work_cost,:new.act_work_cost); end if;
    if voper <> 'U' or  updating('act_equip_cost') then	 prm_audit.audit_data ('TASKSUM','act_equip_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_equip_cost,:new.act_equip_cost); end if;
    if voper <> 'U' or  updating('base_expense_cost') then	 prm_audit.audit_data ('TASKSUM','base_expense_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_expense_cost,:new.base_expense_cost); end if;
    if voper <> 'U' or  updating('base_work_cost') then	 prm_audit.audit_data ('TASKSUM','base_work_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_work_cost,:new.base_work_cost); end if;
    if voper <> 'U' or  updating('base_equip_cost') then	 prm_audit.audit_data ('TASKSUM','base_equip_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_equip_cost,:new.base_equip_cost); end if;
    if voper <> 'U' or  updating('bcwp') then	 prm_audit.audit_data ('TASKSUM','bcwp',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.bcwp,:new.bcwp); end if;
    if voper <> 'U' or  updating('etc') then	 prm_audit.audit_data ('TASKSUM','etc',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.etc,:new.etc); end if;
    if voper <> 'U' or  updating('bcws') then	 prm_audit.audit_data ('TASKSUM','bcws',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.bcws,:new.bcws); end if;
    if voper <> 'U' or  updating('remain_expense_cost') then	 prm_audit.audit_data ('TASKSUM','remain_expense_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_expense_cost,:new.remain_expense_cost); end if;
    if voper <> 'U' or  updating('remain_work_cost') then	 prm_audit.audit_data ('TASKSUM','remain_work_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_work_cost,:new.remain_work_cost); end if;
    if voper <> 'U' or  updating('remain_equip_cost') then	 prm_audit.audit_data ('TASKSUM','remain_equip_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_equip_cost,:new.remain_equip_cost); end if;
    if voper <> 'U' or  updating('perfm_work_qty') then	 prm_audit.audit_data ('TASKSUM','perfm_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.perfm_work_qty,:new.perfm_work_qty); end if;
    if voper <> 'U' or  updating('sched_work_qty') then	 prm_audit.audit_data ('TASKSUM','sched_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.sched_work_qty,:new.sched_work_qty); end if;
    if voper <> 'U' or  updating('act_end_date') then	 prm_audit.audit_data ('TASKSUM','act_end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.act_end_date,'yyyymmddhh24miss'),to_char(:new.act_end_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('act_start_date') then	 prm_audit.audit_data ('TASKSUM','act_start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.act_start_date,'yyyymmddhh24miss'),to_char(:new.act_start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('base_end_date') then	 prm_audit.audit_data ('TASKSUM','base_end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.base_end_date,'yyyymmddhh24miss'),to_char(:new.base_end_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('base_start_date') then	 prm_audit.audit_data ('TASKSUM','base_start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.base_start_date,'yyyymmddhh24miss'),to_char(:new.base_start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('reend_date') then	 prm_audit.audit_data ('TASKSUM','reend_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.reend_date,'yyyymmddhh24miss'),to_char(:new.reend_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('restart_date') then	 prm_audit.audit_data ('TASKSUM','restart_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.restart_date,'yyyymmddhh24miss'),to_char(:new.restart_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('act_this_per_work_cost') then	 prm_audit.audit_data ('TASKSUM','act_this_per_work_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_this_per_work_cost,:new.act_this_per_work_cost); end if;
    if voper <> 'U' or  updating('act_this_per_work_qty') then	 prm_audit.audit_data ('TASKSUM','act_this_per_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_this_per_work_qty,:new.act_this_per_work_qty); end if;
    if voper <> 'U' or  updating('act_this_per_equip_cost') then	 prm_audit.audit_data ('TASKSUM','act_this_per_equip_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_this_per_equip_cost,:new.act_this_per_equip_cost); end if;
    if voper <> 'U' or  updating('act_this_per_equip_qty') then	 prm_audit.audit_data ('TASKSUM','act_this_per_equip_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_this_per_equip_qty,:new.act_this_per_equip_qty); end if;
    if voper <> 'U' or  updating('base_mat_cost') then	 prm_audit.audit_data ('TASKSUM','base_mat_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_mat_cost,:new.base_mat_cost); end if;
    if voper <> 'U' or  updating('remain_mat_cost') then	 prm_audit.audit_data ('TASKSUM','remain_mat_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_mat_cost,:new.remain_mat_cost); end if;
    if voper <> 'U' or  updating('act_mat_cost') then	 prm_audit.audit_data ('TASKSUM','act_mat_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_mat_cost,:new.act_mat_cost); end if;
    if voper <> 'U' or  updating('act_this_per_mat_cost') then	 prm_audit.audit_data ('TASKSUM','act_this_per_mat_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_this_per_mat_cost,:new.act_this_per_mat_cost); end if;
    if voper <> 'U' or ( updating('spread_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('TASKSUM','spread_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.spread_data,:new.spread_data); end if;

  end if;


      prm_audit.audit_row ( 'TASKSUM',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TASKSUMFIN
create or replace trigger PRMAUD_TASKSUMFIN
after insert or update or delete on TASKSUMFIN
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TASKSUMFIN',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.task_sum_fin_id;
				

    else
    	vpk1 := :new.task_sum_fin_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('task_sum_fin_id') then	 prm_audit.audit_data ('TASKSUMFIN','task_sum_fin_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.task_sum_fin_id,:new.task_sum_fin_id); end if;
    if voper <> 'U' or  updating('fin_dates_id') then	 prm_audit.audit_data ('TASKSUMFIN','fin_dates_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fin_dates_id,:new.fin_dates_id); end if;
    if voper <> 'U' or  updating('wbs_id') then	 prm_audit.audit_data ('TASKSUMFIN','wbs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_id,:new.wbs_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('TASKSUMFIN','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('task_sum_id') then	 prm_audit.audit_data ('TASKSUMFIN','task_sum_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_sum_id,:new.task_sum_id); end if;
    if voper <> 'U' or  updating('act_work_qty') then	 prm_audit.audit_data ('TASKSUMFIN','act_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_work_qty,:new.act_work_qty); end if;
    if voper <> 'U' or  updating('act_work_cost') then	 prm_audit.audit_data ('TASKSUMFIN','act_work_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_work_cost,:new.act_work_cost); end if;
    if voper <> 'U' or  updating('act_equip_qty') then	 prm_audit.audit_data ('TASKSUMFIN','act_equip_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_equip_qty,:new.act_equip_qty); end if;
    if voper <> 'U' or  updating('act_equip_cost') then	 prm_audit.audit_data ('TASKSUMFIN','act_equip_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_equip_cost,:new.act_equip_cost); end if;
    if voper <> 'U' or  updating('act_mat_cost') then	 prm_audit.audit_data ('TASKSUMFIN','act_mat_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_mat_cost,:new.act_mat_cost); end if;
    if voper <> 'U' or  updating('act_expense_cost') then	 prm_audit.audit_data ('TASKSUMFIN','act_expense_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_expense_cost,:new.act_expense_cost); end if;
    if voper <> 'U' or  updating('total_work_qty') then	 prm_audit.audit_data ('TASKSUMFIN','total_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.total_work_qty,:new.total_work_qty); end if;
    if voper <> 'U' or  updating('total_work_cost') then	 prm_audit.audit_data ('TASKSUMFIN','total_work_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.total_work_cost,:new.total_work_cost); end if;
    if voper <> 'U' or  updating('total_equip_qty') then	 prm_audit.audit_data ('TASKSUMFIN','total_equip_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.total_equip_qty,:new.total_equip_qty); end if;
    if voper <> 'U' or  updating('total_equip_cost') then	 prm_audit.audit_data ('TASKSUMFIN','total_equip_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.total_equip_cost,:new.total_equip_cost); end if;
    if voper <> 'U' or  updating('total_mat_cost') then	 prm_audit.audit_data ('TASKSUMFIN','total_mat_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.total_mat_cost,:new.total_mat_cost); end if;
    if voper <> 'U' or  updating('total_expense_cost') then	 prm_audit.audit_data ('TASKSUMFIN','total_expense_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.total_expense_cost,:new.total_expense_cost); end if;
    if voper <> 'U' or  updating('total_cost') then	 prm_audit.audit_data ('TASKSUMFIN','total_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.total_cost,:new.total_cost); end if;
    if voper <> 'U' or  updating('act_cost') then	 prm_audit.audit_data ('TASKSUMFIN','act_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_cost,:new.act_cost); end if;
    if voper <> 'U' or  updating('bcwp') then	 prm_audit.audit_data ('TASKSUMFIN','bcwp',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.bcwp,:new.bcwp); end if;
    if voper <> 'U' or  updating('perfm_work_qty') then	 prm_audit.audit_data ('TASKSUMFIN','perfm_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.perfm_work_qty,:new.perfm_work_qty); end if;
    if voper <> 'U' or  updating('etc') then	 prm_audit.audit_data ('TASKSUMFIN','etc',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.etc,:new.etc); end if;
    if voper <> 'U' or  updating('etc_work_qty') then	 prm_audit.audit_data ('TASKSUMFIN','etc_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.etc_work_qty,:new.etc_work_qty); end if;
    if voper <> 'U' or  updating('eac') then	 prm_audit.audit_data ('TASKSUMFIN','eac',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.eac,:new.eac); end if;
    if voper <> 'U' or  updating('eac_work') then	 prm_audit.audit_data ('TASKSUMFIN','eac_work',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.eac_work,:new.eac_work); end if;
    if voper <> 'U' or  updating('bcws') then	 prm_audit.audit_data ('TASKSUMFIN','bcws',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.bcws,:new.bcws); end if;
    if voper <> 'U' or  updating('acwp') then	 prm_audit.audit_data ('TASKSUMFIN','acwp',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.acwp,:new.acwp); end if;
    if voper <> 'U' or  updating('sched_work_qty') then	 prm_audit.audit_data ('TASKSUMFIN','sched_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.sched_work_qty,:new.sched_work_qty); end if;
    if voper <> 'U' or  updating('base_cost') then	 prm_audit.audit_data ('TASKSUMFIN','base_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_cost,:new.base_cost); end if;
    if voper <> 'U' or  updating('base_work_qty') then	 prm_audit.audit_data ('TASKSUMFIN','base_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_work_qty,:new.base_work_qty); end if;
    if voper <> 'U' or  updating('base_work_cost') then	 prm_audit.audit_data ('TASKSUMFIN','base_work_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_work_cost,:new.base_work_cost); end if;
    if voper <> 'U' or  updating('base_mat_cost') then	 prm_audit.audit_data ('TASKSUMFIN','base_mat_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_mat_cost,:new.base_mat_cost); end if;
    if voper <> 'U' or  updating('base_equip_cost') then	 prm_audit.audit_data ('TASKSUMFIN','base_equip_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_equip_cost,:new.base_equip_cost); end if;
    if voper <> 'U' or  updating('base_equip_qty') then	 prm_audit.audit_data ('TASKSUMFIN','base_equip_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_equip_qty,:new.base_equip_qty); end if;
    if voper <> 'U' or  updating('base_expense_cost') then	 prm_audit.audit_data ('TASKSUMFIN','base_expense_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.base_expense_cost,:new.base_expense_cost); end if;
    if voper <> 'U' or  updating('remain_cost') then	 prm_audit.audit_data ('TASKSUMFIN','remain_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_cost,:new.remain_cost); end if;
    if voper <> 'U' or  updating('remain_work_qty') then	 prm_audit.audit_data ('TASKSUMFIN','remain_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_work_qty,:new.remain_work_qty); end if;
    if voper <> 'U' or  updating('remain_work_cost') then	 prm_audit.audit_data ('TASKSUMFIN','remain_work_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_work_cost,:new.remain_work_cost); end if;
    if voper <> 'U' or  updating('remain_mat_cost') then	 prm_audit.audit_data ('TASKSUMFIN','remain_mat_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_mat_cost,:new.remain_mat_cost); end if;
    if voper <> 'U' or  updating('remain_equip_cost') then	 prm_audit.audit_data ('TASKSUMFIN','remain_equip_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_equip_cost,:new.remain_equip_cost); end if;
    if voper <> 'U' or  updating('remain_equip_qty') then	 prm_audit.audit_data ('TASKSUMFIN','remain_equip_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_equip_qty,:new.remain_equip_qty); end if;
    if voper <> 'U' or  updating('remain_expense_cost') then	 prm_audit.audit_data ('TASKSUMFIN','remain_expense_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_expense_cost,:new.remain_expense_cost); end if;
    if voper <> 'U' or  updating('target_cost') then	 prm_audit.audit_data ('TASKSUMFIN','target_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.target_cost,:new.target_cost); end if;
    if voper <> 'U' or  updating('target_equip_cost') then	 prm_audit.audit_data ('TASKSUMFIN','target_equip_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.target_equip_cost,:new.target_equip_cost); end if;
    if voper <> 'U' or  updating('target_equip_qty') then	 prm_audit.audit_data ('TASKSUMFIN','target_equip_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.target_equip_qty,:new.target_equip_qty); end if;
    if voper <> 'U' or  updating('target_expense_cost') then	 prm_audit.audit_data ('TASKSUMFIN','target_expense_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.target_expense_cost,:new.target_expense_cost); end if;
    if voper <> 'U' or  updating('target_mat_cost') then	 prm_audit.audit_data ('TASKSUMFIN','target_mat_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.target_mat_cost,:new.target_mat_cost); end if;
    if voper <> 'U' or  updating('target_work_cost') then	 prm_audit.audit_data ('TASKSUMFIN','target_work_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.target_work_cost,:new.target_work_cost); end if;
    if voper <> 'U' or  updating('target_work_qty') then	 prm_audit.audit_data ('TASKSUMFIN','target_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.target_work_qty,:new.target_work_qty); end if;
    if voper <> 'U' or  updating('late_remain_work_qty') then	 prm_audit.audit_data ('TASKSUMFIN','late_remain_work_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.late_remain_work_qty,:new.late_remain_work_qty); end if;
    if voper <> 'U' or  updating('late_remain_work_cost') then	 prm_audit.audit_data ('TASKSUMFIN','late_remain_work_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.late_remain_work_cost,:new.late_remain_work_cost); end if;
    if voper <> 'U' or  updating('late_remain_equip_cost') then	 prm_audit.audit_data ('TASKSUMFIN','late_remain_equip_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.late_remain_equip_cost,:new.late_remain_equip_cost); end if;
    if voper <> 'U' or  updating('late_remain_equip_qty') then	 prm_audit.audit_data ('TASKSUMFIN','late_remain_equip_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.late_remain_equip_qty,:new.late_remain_equip_qty); end if;
    if voper <> 'U' or  updating('late_remain_cost') then	 prm_audit.audit_data ('TASKSUMFIN','late_remain_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.late_remain_cost,:new.late_remain_cost); end if;
    if voper <> 'U' or  updating('late_remain_mat_cost') then	 prm_audit.audit_data ('TASKSUMFIN','late_remain_mat_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.late_remain_mat_cost,:new.late_remain_mat_cost); end if;
    if voper <> 'U' or  updating('late_remain_expense_cost') then	 prm_audit.audit_data ('TASKSUMFIN','late_remain_expense_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.late_remain_expense_cost,:new.late_remain_expense_cost); end if;

  end if;


      prm_audit.audit_row ( 'TASKSUMFIN',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TASKUSER
create or replace trigger PRMAUD_TASKUSER
after insert or update or delete on TASKUSER
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TASKUSER',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.task_id;
				
vpk2 := :old.user_id;
				

    else
    	vpk1 := :new.task_id;
				
vpk2 := :new.user_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('task_id') then	 prm_audit.audit_data ('TASKUSER','task_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.task_id,:new.task_id); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('TASKUSER','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('TASKUSER','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;

  end if;


      prm_audit.audit_row ( 'TASKUSER',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TASKWKSP
create or replace trigger PRMAUD_TASKWKSP
after insert or update or delete on TASKWKSP
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TASKWKSP',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.workspace_id;
				
vpk2 := :old.task_id;
				

    else
    	vpk1 := :new.workspace_id;
				
vpk2 := :new.task_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('workspace_id') then	 prm_audit.audit_data ('TASKWKSP','workspace_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.workspace_id,:new.workspace_id); end if;
    if voper <> 'U' or  updating('task_id') then	 prm_audit.audit_data ('TASKWKSP','task_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_id,:new.task_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('TASKWKSP','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('cr_external_key') then	 prm_audit.audit_data ('TASKWKSP','cr_external_key',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cr_external_key,:new.cr_external_key); end if;

  end if;


      prm_audit.audit_row ( 'TASKWKSP',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_THRSPARM
create or replace trigger PRMAUD_THRSPARM
after insert or update or delete on THRSPARM
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('THRSPARM',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.thresh_parm_id;
				

    else
    	vpk1 := :new.thresh_parm_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('thresh_parm_id') then	 prm_audit.audit_data ('THRSPARM','thresh_parm_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.thresh_parm_id,:new.thresh_parm_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('THRSPARM','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('wbs_flag') then	 prm_audit.audit_data ('THRSPARM','wbs_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_flag,:new.wbs_flag); end if;
    if voper <> 'U' or  updating('task_flag') then	 prm_audit.audit_data ('THRSPARM','task_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_flag,:new.task_flag); end if;
    if voper <> 'U' or  updating('rsrc_flag') then	 prm_audit.audit_data ('THRSPARM','rsrc_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_flag,:new.rsrc_flag); end if;
    if voper <> 'U' or  updating('thresh_parm_type') then	 prm_audit.audit_data ('THRSPARM','thresh_parm_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.thresh_parm_type,:new.thresh_parm_type); end if;
    if voper <> 'U' or  updating('thresh_parm_name') then	 prm_audit.audit_data ('THRSPARM','thresh_parm_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.thresh_parm_name,:new.thresh_parm_name); end if;
    if voper <> 'U' or  updating('thresh_field_name') then	 prm_audit.audit_data ('THRSPARM','thresh_field_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.thresh_field_name,:new.thresh_field_name); end if;
    if voper <> 'U' or  updating('thresh_short_name') then	 prm_audit.audit_data ('THRSPARM','thresh_short_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.thresh_short_name,:new.thresh_short_name); end if;

  end if;


      prm_audit.audit_row ( 'THRSPARM',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TIMESHT
create or replace trigger PRMAUD_TIMESHT
after insert or update or delete on TIMESHT
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TIMESHT',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.ts_id;
				
vpk2 := :old.rsrc_id;
				

    else
    	vpk1 := :new.ts_id;
				
vpk2 := :new.rsrc_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('ts_id') then	 prm_audit.audit_data ('TIMESHT','ts_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.ts_id,:new.ts_id); end if;
    if voper <> 'U' or  updating('rsrc_id') then	 prm_audit.audit_data ('TIMESHT','rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_id,:new.rsrc_id); end if;
    if voper <> 'U' or  updating('daily_flag') then	 prm_audit.audit_data ('TIMESHT','daily_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.daily_flag,:new.daily_flag); end if;
    if voper <> 'U' or  updating('status_code') then	 prm_audit.audit_data ('TIMESHT','status_code',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.status_code,:new.status_code); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('TIMESHT','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('last_recv_date') then	 prm_audit.audit_data ('TIMESHT','last_recv_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.last_recv_date,'yyyymmddhh24miss'),to_char(:new.last_recv_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('status_date') then	 prm_audit.audit_data ('TIMESHT','status_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.status_date,'yyyymmddhh24miss'),to_char(:new.status_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or ( updating('ts_notes') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('TIMESHT','ts_notes',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.ts_notes,:new.ts_notes); end if;

  end if;


      prm_audit.audit_row ( 'TIMESHT',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TMPLCATG
create or replace trigger PRMAUD_TMPLCATG
after insert or update or delete on TMPLCATG
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TMPLCATG',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.tmplcatg_catg_id;
				

    else
    	vpk1 := :new.tmplcatg_catg_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('tmplcatg_catg_id') then	 prm_audit.audit_data ('TMPLCATG','tmplcatg_catg_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.tmplcatg_catg_id,:new.tmplcatg_catg_id); end if;
    if voper <> 'U' or  updating('catg_name') then	 prm_audit.audit_data ('TMPLCATG','catg_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.catg_name,:new.catg_name); end if;
    if voper <> 'U' or  updating('project_flag') then	 prm_audit.audit_data ('TMPLCATG','project_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.project_flag,:new.project_flag); end if;
    if voper <> 'U' or  updating('process_flag') then	 prm_audit.audit_data ('TMPLCATG','process_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.process_flag,:new.process_flag); end if;

  end if;


      prm_audit.audit_row ( 'TMPLCATG',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TRAKVIEW
create or replace trigger PRMAUD_TRAKVIEW
after insert or update or delete on TRAKVIEW
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TRAKVIEW',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.track_view_id;
				

    else
    	vpk1 := :new.track_view_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('track_view_id') then	 prm_audit.audit_data ('TRAKVIEW','track_view_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.track_view_id,:new.track_view_id); end if;
    if voper <> 'U' or  updating('display_type') then	 prm_audit.audit_data ('TRAKVIEW','display_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.display_type,:new.display_type); end if;
    if voper <> 'U' or  updating('track_view_name') then	 prm_audit.audit_data ('TRAKVIEW','track_view_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.track_view_name,:new.track_view_name); end if;
    if voper <> 'U' or  updating('web_view_flag') then	 prm_audit.audit_data ('TRAKVIEW','web_view_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.web_view_flag,:new.web_view_flag); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('TRAKVIEW','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or ( updating('track_view_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('TRAKVIEW','track_view_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.track_view_data,:new.track_view_data); end if;

  end if;


      prm_audit.audit_row ( 'TRAKVIEW',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TRSRCFIN
create or replace trigger PRMAUD_TRSRCFIN
after insert or update or delete on TRSRCFIN
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TRSRCFIN',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.fin_dates_id;
				
vpk2 := :old.taskrsrc_id;
				

    else
    	vpk1 := :new.fin_dates_id;
				
vpk2 := :new.taskrsrc_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('fin_dates_id') then	 prm_audit.audit_data ('TRSRCFIN','fin_dates_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.fin_dates_id,:new.fin_dates_id); end if;
    if voper <> 'U' or  updating('taskrsrc_id') then	 prm_audit.audit_data ('TRSRCFIN','taskrsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.taskrsrc_id,:new.taskrsrc_id); end if;
    if voper <> 'U' or  updating('task_id') then	 prm_audit.audit_data ('TRSRCFIN','task_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.task_id,:new.task_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('TRSRCFIN','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('act_qty') then	 prm_audit.audit_data ('TRSRCFIN','act_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_qty,:new.act_qty); end if;
    if voper <> 'U' or  updating('act_cost') then	 prm_audit.audit_data ('TRSRCFIN','act_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_cost,:new.act_cost); end if;

  end if;


      prm_audit.audit_row ( 'TRSRCFIN',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TRSRCSUM
create or replace trigger PRMAUD_TRSRCSUM
after insert or update or delete on TRSRCSUM
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TRSRCSUM',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.taskrsrc_sum_id;
				

    else
    	vpk1 := :new.taskrsrc_sum_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('taskrsrc_sum_id') then	 prm_audit.audit_data ('TRSRCSUM','taskrsrc_sum_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.taskrsrc_sum_id,:new.taskrsrc_sum_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('TRSRCSUM','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('rsrc_id') then	 prm_audit.audit_data ('TRSRCSUM','rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_id,:new.rsrc_id); end if;
    if voper <> 'U' or  updating('role_id') then	 prm_audit.audit_data ('TRSRCSUM','role_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.role_id,:new.role_id); end if;
    if voper <> 'U' or  updating('skill_level') then	 prm_audit.audit_data ('TRSRCSUM','skill_level',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.skill_level,:new.skill_level); end if;
    if voper <> 'U' or  updating('overalloc_date') then	 prm_audit.audit_data ('TRSRCSUM','overalloc_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.overalloc_date,'yyyymmddhh24miss'),to_char(:new.overalloc_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or ( updating('spread_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('TRSRCSUM','spread_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.spread_data,:new.spread_data); end if;

  end if;


      prm_audit.audit_row ( 'TRSRCSUM',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TRSRCSUMFN
create or replace trigger PRMAUD_TRSRCSUMFN
after insert or update or delete on TRSRCSUMFN
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TRSRCSUMFN',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.trsrc_sum_fin_id;
				

    else
    	vpk1 := :new.trsrc_sum_fin_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('trsrc_sum_fin_id') then	 prm_audit.audit_data ('TRSRCSUMFN','trsrc_sum_fin_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.trsrc_sum_fin_id,:new.trsrc_sum_fin_id); end if;
    if voper <> 'U' or  updating('fin_dates_id') then	 prm_audit.audit_data ('TRSRCSUMFN','fin_dates_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fin_dates_id,:new.fin_dates_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('TRSRCSUMFN','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('rsrc_id') then	 prm_audit.audit_data ('TRSRCSUMFN','rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_id,:new.rsrc_id); end if;
    if voper <> 'U' or  updating('role_id') then	 prm_audit.audit_data ('TRSRCSUMFN','role_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.role_id,:new.role_id); end if;
    if voper <> 'U' or  updating('taskrsrc_sum_id') then	 prm_audit.audit_data ('TRSRCSUMFN','taskrsrc_sum_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.taskrsrc_sum_id,:new.taskrsrc_sum_id); end if;
    if voper <> 'U' or  updating('act_qty') then	 prm_audit.audit_data ('TRSRCSUMFN','act_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_qty,:new.act_qty); end if;
    if voper <> 'U' or  updating('act_cost') then	 prm_audit.audit_data ('TRSRCSUMFN','act_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_cost,:new.act_cost); end if;
    if voper <> 'U' or  updating('act_ot_qty') then	 prm_audit.audit_data ('TRSRCSUMFN','act_ot_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_ot_qty,:new.act_ot_qty); end if;
    if voper <> 'U' or  updating('act_reg_qty') then	 prm_audit.audit_data ('TRSRCSUMFN','act_reg_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_reg_qty,:new.act_reg_qty); end if;
    if voper <> 'U' or  updating('act_ot_cost') then	 prm_audit.audit_data ('TRSRCSUMFN','act_ot_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_ot_cost,:new.act_ot_cost); end if;
    if voper <> 'U' or  updating('act_reg_cost') then	 prm_audit.audit_data ('TRSRCSUMFN','act_reg_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.act_reg_cost,:new.act_reg_cost); end if;
    if voper <> 'U' or  updating('total_qty') then	 prm_audit.audit_data ('TRSRCSUMFN','total_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.total_qty,:new.total_qty); end if;
    if voper <> 'U' or  updating('total_cost') then	 prm_audit.audit_data ('TRSRCSUMFN','total_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.total_cost,:new.total_cost); end if;
    if voper <> 'U' or  updating('remain_qty') then	 prm_audit.audit_data ('TRSRCSUMFN','remain_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_qty,:new.remain_qty); end if;
    if voper <> 'U' or  updating('remain_cost') then	 prm_audit.audit_data ('TRSRCSUMFN','remain_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.remain_cost,:new.remain_cost); end if;
    if voper <> 'U' or  updating('target_qty') then	 prm_audit.audit_data ('TRSRCSUMFN','target_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.target_qty,:new.target_qty); end if;
    if voper <> 'U' or  updating('target_cost') then	 prm_audit.audit_data ('TRSRCSUMFN','target_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.target_cost,:new.target_cost); end if;
    if voper <> 'U' or  updating('staffed_remain_qty') then	 prm_audit.audit_data ('TRSRCSUMFN','staffed_remain_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.staffed_remain_qty,:new.staffed_remain_qty); end if;
    if voper <> 'U' or  updating('unstaffed_remain_qty') then	 prm_audit.audit_data ('TRSRCSUMFN','unstaffed_remain_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.unstaffed_remain_qty,:new.unstaffed_remain_qty); end if;
    if voper <> 'U' or  updating('staffed_remain_cost') then	 prm_audit.audit_data ('TRSRCSUMFN','staffed_remain_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.staffed_remain_cost,:new.staffed_remain_cost); end if;
    if voper <> 'U' or  updating('unstaffed_remain_cost') then	 prm_audit.audit_data ('TRSRCSUMFN','unstaffed_remain_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.unstaffed_remain_cost,:new.unstaffed_remain_cost); end if;
    if voper <> 'U' or  updating('staffed_late_remain_qty') then	 prm_audit.audit_data ('TRSRCSUMFN','staffed_late_remain_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.staffed_late_remain_qty,:new.staffed_late_remain_qty); end if;
    if voper <> 'U' or  updating('unstaffed_late_remain_qty') then	 prm_audit.audit_data ('TRSRCSUMFN','unstaffed_late_remain_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.unstaffed_late_remain_qty,:new.unstaffed_late_remain_qty); end if;
    if voper <> 'U' or  updating('staffed_late_remain_cost') then	 prm_audit.audit_data ('TRSRCSUMFN','staffed_late_remain_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.staffed_late_remain_cost,:new.staffed_late_remain_cost); end if;
    if voper <> 'U' or  updating('unstaffed_late_remain_cost') then	 prm_audit.audit_data ('TRSRCSUMFN','unstaffed_late_remain_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.unstaffed_late_remain_cost,:new.unstaffed_late_remain_cost); end if;
    if voper <> 'U' or  updating('late_remain_qty') then	 prm_audit.audit_data ('TRSRCSUMFN','late_remain_qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.late_remain_qty,:new.late_remain_qty); end if;
    if voper <> 'U' or  updating('late_remain_cost') then	 prm_audit.audit_data ('TRSRCSUMFN','late_remain_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.late_remain_cost,:new.late_remain_cost); end if;

  end if;


      prm_audit.audit_row ( 'TRSRCSUMFN',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TSDATES
create or replace trigger PRMAUD_TSDATES
after insert or update or delete on TSDATES
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TSDATES',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.ts_id;
				

    else
    	vpk1 := :new.ts_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('ts_id') then	 prm_audit.audit_data ('TSDATES','ts_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.ts_id,:new.ts_id); end if;
    if voper <> 'U' or  updating('start_date') then	 prm_audit.audit_data ('TSDATES','start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.start_date,'yyyymmddhh24miss'),to_char(:new.start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('end_date') then	 prm_audit.audit_data ('TSDATES','end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.end_date,'yyyymmddhh24miss'),to_char(:new.end_date,'yyyymmddhh24miss')); end if;

  end if;


      prm_audit.audit_row ( 'TSDATES',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_TSDELEGATE
create or replace trigger PRMAUD_TSDELEGATE
after insert or update or delete on TSDELEGATE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('TSDELEGATE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.ts_delegate_id;
				

    else
    	vpk1 := :new.ts_delegate_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('ts_delegate_id') then	 prm_audit.audit_data ('TSDELEGATE','ts_delegate_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.ts_delegate_id,:new.ts_delegate_id); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('TSDELEGATE','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('ts_delegate_user_id') then	 prm_audit.audit_data ('TSDELEGATE','ts_delegate_user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ts_delegate_user_id,:new.ts_delegate_user_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('TSDELEGATE','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('active_flag') then	 prm_audit.audit_data ('TSDELEGATE','active_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.active_flag,:new.active_flag); end if;

  end if;


      prm_audit.audit_row ( 'TSDELEGATE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_UDFCODE
create or replace trigger PRMAUD_UDFCODE
after insert or update or delete on UDFCODE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('UDFCODE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.udf_code_id;
				

    else
    	vpk1 := :new.udf_code_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('udf_code_id') then	 prm_audit.audit_data ('UDFCODE','udf_code_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.udf_code_id,:new.udf_code_id); end if;
    if voper <> 'U' or  updating('udf_type_id') then	 prm_audit.audit_data ('UDFCODE','udf_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.udf_type_id,:new.udf_type_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('UDFCODE','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('short_name') then	 prm_audit.audit_data ('UDFCODE','short_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.short_name,:new.short_name); end if;
    if voper <> 'U' or  updating('udf_code_name') then	 prm_audit.audit_data ('UDFCODE','udf_code_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.udf_code_name,:new.udf_code_name); end if;
    if voper <> 'U' or  updating('parent_udf_code_id') then	 prm_audit.audit_data ('UDFCODE','parent_udf_code_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.parent_udf_code_id,:new.parent_udf_code_id); end if;

  end if;


      prm_audit.audit_row ( 'UDFCODE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_UDFTYPE
create or replace trigger PRMAUD_UDFTYPE
after insert or update or delete on UDFTYPE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('UDFTYPE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.udf_type_id;
				

    else
    	vpk1 := :new.udf_type_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('udf_type_id') then	 prm_audit.audit_data ('UDFTYPE','udf_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.udf_type_id,:new.udf_type_id); end if;
    if voper <> 'U' or  updating('table_name') then	 prm_audit.audit_data ('UDFTYPE','table_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.table_name,:new.table_name); end if;
    if voper <> 'U' or  updating('udf_type_name') then	 prm_audit.audit_data ('UDFTYPE','udf_type_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.udf_type_name,:new.udf_type_name); end if;
    if voper <> 'U' or  updating('udf_type_label') then	 prm_audit.audit_data ('UDFTYPE','udf_type_label',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.udf_type_label,:new.udf_type_label); end if;
    if voper <> 'U' or  updating('logical_data_type') then	 prm_audit.audit_data ('UDFTYPE','logical_data_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.logical_data_type,:new.logical_data_type); end if;
    if voper <> 'U' or  updating('super_flag') then	 prm_audit.audit_data ('UDFTYPE','super_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.super_flag,:new.super_flag); end if;
    if voper <> 'U' or  updating('udf_code_short_len') then	 prm_audit.audit_data ('UDFTYPE','udf_code_short_len',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.udf_code_short_len,:new.udf_code_short_len); end if;
    if voper <> 'U' or  updating('formula') then	 prm_audit.audit_data ('UDFTYPE','formula',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.formula,:new.formula); end if;
    if voper <> 'U' or  updating('indicator_expression') then	 prm_audit.audit_data ('UDFTYPE','indicator_expression',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.indicator_expression,:new.indicator_expression); end if;
    if voper <> 'U' or  updating('disp_data_flag') then	 prm_audit.audit_data ('UDFTYPE','disp_data_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.disp_data_flag,:new.disp_data_flag); end if;
    if voper <> 'U' or  updating('disp_indicator_flag') then	 prm_audit.audit_data ('UDFTYPE','disp_indicator_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.disp_indicator_flag,:new.disp_indicator_flag); end if;
    if voper <> 'U' or  updating('summary_indicator_expression') then	 prm_audit.audit_data ('UDFTYPE','summary_indicator_expression',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.summary_indicator_expression,:new.summary_indicator_expression); end if;
    if voper <> 'U' or  updating('summary_method') then	 prm_audit.audit_data ('UDFTYPE','summary_method',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.summary_method,:new.summary_method); end if;

  end if;


      prm_audit.audit_row ( 'UDFTYPE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_UDFVALUE
create or replace trigger PRMAUD_UDFVALUE
after insert or update or delete on UDFVALUE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('UDFVALUE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.udf_type_id;
				
vpk2 := :old.fk_id;
				

    else
    	vpk1 := :new.udf_type_id;
				
vpk2 := :new.fk_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('udf_type_id') then	 prm_audit.audit_data ('UDFVALUE','udf_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.udf_type_id,:new.udf_type_id); end if;
    if voper <> 'U' or  updating('fk_id') then	 prm_audit.audit_data ('UDFVALUE','fk_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fk_id,:new.fk_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('UDFVALUE','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('udf_date') then	 prm_audit.audit_data ('UDFVALUE','udf_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.udf_date,'yyyymmddhh24miss'),to_char(:new.udf_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('udf_text') then	 prm_audit.audit_data ('UDFVALUE','udf_text',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.udf_text,:new.udf_text); end if;
    if voper <> 'U' or  updating('udf_number') then	 prm_audit.audit_data ('UDFVALUE','udf_number',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.udf_number,:new.udf_number); end if;
    if voper <> 'U' or  updating('udf_code_id') then	 prm_audit.audit_data ('UDFVALUE','udf_code_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.udf_code_id,:new.udf_code_id); end if;
    if voper <> 'U' or  updating('table_name') then	 prm_audit.audit_data ('UDFVALUE','table_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.table_name,:new.table_name); end if;

  end if;


      prm_audit.audit_row ( 'UDFVALUE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_UMEASURE
create or replace trigger PRMAUD_UMEASURE
after insert or update or delete on UMEASURE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('UMEASURE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.unit_id;
				

    else
    	vpk1 := :new.unit_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('unit_id') then	 prm_audit.audit_data ('UMEASURE','unit_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.unit_id,:new.unit_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('UMEASURE','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('unit_name') then	 prm_audit.audit_data ('UMEASURE','unit_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.unit_name,:new.unit_name); end if;
    if voper <> 'U' or  updating('unit_abbrev') then	 prm_audit.audit_data ('UMEASURE','unit_abbrev',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.unit_abbrev,:new.unit_abbrev); end if;

  end if;


      prm_audit.audit_row ( 'UMEASURE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_USERCOL
create or replace trigger PRMAUD_USERCOL
after insert or update or delete on USERCOL
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('USERCOL',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.user_col_id;
				

    else
    	vpk1 := :new.user_col_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('user_col_id') then	 prm_audit.audit_data ('USERCOL','user_col_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.user_col_id,:new.user_col_id); end if;
    if voper <> 'U' or  updating('table_name') then	 prm_audit.audit_data ('USERCOL','table_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.table_name,:new.table_name); end if;
    if voper <> 'U' or  updating('logical_data_type') then	 prm_audit.audit_data ('USERCOL','logical_data_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.logical_data_type,:new.logical_data_type); end if;
    if voper <> 'U' or  updating('user_col_name') then	 prm_audit.audit_data ('USERCOL','user_col_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_col_name,:new.user_col_name); end if;
    if voper <> 'U' or  updating('user_col_label') then	 prm_audit.audit_data ('USERCOL','user_col_label',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_col_label,:new.user_col_label); end if;

  end if;


      prm_audit.audit_row ( 'USERCOL',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_USERDATA
create or replace trigger PRMAUD_USERDATA
after insert or update or delete on USERDATA
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('USERDATA',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.user_data_id;
				

    else
    	vpk1 := :new.user_data_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('user_data_id') then	 prm_audit.audit_data ('USERDATA','user_data_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.user_data_id,:new.user_data_id); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('USERDATA','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('topic_name') then	 prm_audit.audit_data ('USERDATA','topic_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.topic_name,:new.topic_name); end if;
    if voper <> 'U' or ( updating('user_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('USERDATA','user_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.user_data,:new.user_data); end if;

  end if;


      prm_audit.audit_row ( 'USERDATA',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_USERENG
create or replace trigger PRMAUD_USERENG
after insert or update or delete on USERENG
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('USERENG',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.user_eng_id;
				

    else
    	vpk1 := :new.user_eng_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('user_eng_id') then	 prm_audit.audit_data ('USERENG','user_eng_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.user_eng_id,:new.user_eng_id); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('USERENG','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('db_engine_type') then	 prm_audit.audit_data ('USERENG','db_engine_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.db_engine_type,:new.db_engine_type); end if;

  end if;


      prm_audit.audit_row ( 'USERENG',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_USEROBS
create or replace trigger PRMAUD_USEROBS
after insert or update or delete on USEROBS
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('USEROBS',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.user_id;
				
vpk2 := :old.obs_id;
				

    else
    	vpk1 := :new.user_id;
				
vpk2 := :new.obs_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('USEROBS','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('obs_id') then	 prm_audit.audit_data ('USEROBS','obs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.obs_id,:new.obs_id); end if;
    if voper <> 'U' or  updating('prof_id') then	 prm_audit.audit_data ('USEROBS','prof_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.prof_id,:new.prof_id); end if;

  end if;


      prm_audit.audit_row ( 'USEROBS',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_USEROPEN
create or replace trigger PRMAUD_USEROPEN
after insert or update or delete on USEROPEN
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('USEROPEN',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.user_open_id;
				

    else
    	vpk1 := :new.user_open_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('user_open_id') then	 prm_audit.audit_data ('USEROPEN','user_open_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.user_open_id,:new.user_open_id); end if;
    if voper <> 'U' or  updating('user_open_name') then	 prm_audit.audit_data ('USEROPEN','user_open_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_open_name,:new.user_open_name); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('USEROPEN','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;

  end if;


      prm_audit.audit_row ( 'USEROPEN',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_USROPNVAL
create or replace trigger PRMAUD_USROPNVAL
after insert or update or delete on USROPNVAL
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('USROPNVAL',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.user_open_id;
				
vpk2 := :old.pk_id;
				
vpk3 := :old.usropn_type;
				

    else
    	vpk1 := :new.user_open_id;
				
vpk2 := :new.pk_id;
				
vpk3 := :new.usropn_type;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('user_open_id') then	 prm_audit.audit_data ('USROPNVAL','user_open_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.user_open_id,:new.user_open_id); end if;
    if voper <> 'U' or  updating('pk_id') then	 prm_audit.audit_data ('USROPNVAL','pk_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.pk_id,:new.pk_id); end if;
    if voper <> 'U' or  updating('usropn_type') then	 prm_audit.audit_data ('USROPNVAL','usropn_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.usropn_type,:new.usropn_type); end if;

  end if;


      prm_audit.audit_row ( 'USROPNVAL',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_USERS
create or replace trigger PRMAUD_USERS
after insert or update or delete on USERS
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('USERS',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  vprm_user_name := prm_audit.g_prm_user_name;

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.user_id;
				

    else
    	vpk1 := :new.user_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('USERS','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('global_flag') then	 prm_audit.audit_data ('USERS','global_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.global_flag,:new.global_flag); end if;
    if voper <> 'U' or  updating('email_type') then	 prm_audit.audit_data ('USERS','email_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.email_type,:new.email_type); end if;
    if voper <> 'U' or  updating('user_name') then	 prm_audit.audit_data ('USERS','user_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_name,:new.user_name); end if;
    if voper <> 'U' or  updating('prof_id') then	 prm_audit.audit_data ('USERS','prof_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.prof_id,:new.prof_id); end if;
    if voper <> 'U' or  updating('curr_id') then	 prm_audit.audit_data ('USERS','curr_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.curr_id,:new.curr_id); end if;
    if voper <> 'U' or  updating('all_rsrc_access_flag') then	 prm_audit.audit_data ('USERS','all_rsrc_access_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.all_rsrc_access_flag,:new.all_rsrc_access_flag); end if;
    if voper <> 'U' or  updating('report_user_flag') then	 prm_audit.audit_data ('USERS','report_user_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.report_user_flag,:new.report_user_flag); end if;
    if voper <> 'U' or  updating('guid') then	 prm_audit.audit_data ('USERS','guid',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.guid,:new.guid); end if;
    if voper <> 'U' or  updating('email_srv_user_name') then	 prm_audit.audit_data ('USERS','email_srv_user_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.email_srv_user_name,:new.email_srv_user_name); end if;
    if voper <> 'U' or  updating('office_phone') then	 prm_audit.audit_data ('USERS','office_phone',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.office_phone,:new.office_phone); end if;
    if voper <> 'U' or  updating('actual_name') then	 prm_audit.audit_data ('USERS','actual_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.actual_name,:new.actual_name); end if;
    if voper <> 'U' or  updating('email_send_server') then	 prm_audit.audit_data ('USERS','email_send_server',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.email_send_server,:new.email_send_server); end if;
    if voper <> 'U' or  updating('email_addr') then	 prm_audit.audit_data ('USERS','email_addr',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.email_addr,:new.email_addr); end if;
    if voper <> 'U' or  updating('email_srv_passwd') then	 prm_audit.audit_data ('USERS','email_srv_passwd',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.email_srv_passwd,:new.email_srv_passwd); end if;
    if voper <> 'U' or  updating('passwd') then	 prm_audit.audit_data ('USERS','passwd',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.passwd,:new.passwd); end if;
    if voper <> 'U' or  updating('notify_prefs') then	 prm_audit.audit_data ('USERS','notify_prefs',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.notify_prefs,:new.notify_prefs); end if;
    if voper <> 'U' or  updating('navi_view_id') then	 prm_audit.audit_data ('USERS','navi_view_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.navi_view_id,:new.navi_view_id); end if;
    if voper <> 'U' or  updating('override_naviview_flag') then	 prm_audit.audit_data ('USERS','override_naviview_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.override_naviview_flag,:new.override_naviview_flag); end if;
    if voper <> 'U' or  updating('ui_view_pref_id') then	 prm_audit.audit_data ('USERS','ui_view_pref_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.ui_view_pref_id,:new.ui_view_pref_id); end if;
    if voper <> 'U' or  updating('cr_external_key') then	 prm_audit.audit_data ('USERS','cr_external_key',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cr_external_key,:new.cr_external_key); end if;
    if voper <> 'U' or  updating('cr_user_name') then	 prm_audit.audit_data ('USERS','cr_user_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cr_user_name,:new.cr_user_name); end if;
    if voper <> 'U' or  updating('failed_login_attempts_cnt') then	 prm_audit.audit_data ('USERS','failed_login_attempts_cnt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.failed_login_attempts_cnt,:new.failed_login_attempts_cnt); end if;

  end if;


      prm_audit.audit_row ( 'USERS',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_USERWKSP
create or replace trigger PRMAUD_USERWKSP
after insert or update or delete on USERWKSP
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('USERWKSP',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.user_id;
				
vpk2 := :old.workspace_id;
				

    else
    	vpk1 := :new.user_id;
				
vpk2 := :new.workspace_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('USERWKSP','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('workspace_id') then	 prm_audit.audit_data ('USERWKSP','workspace_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.workspace_id,:new.workspace_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('USERWKSP','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;

  end if;


      prm_audit.audit_row ( 'USERWKSP',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_VIEWPREF
create or replace trigger PRMAUD_VIEWPREF
after insert or update or delete on VIEWPREF
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('VIEWPREF',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.view_pref_id;
				

    else
    	vpk1 := :new.view_pref_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('view_pref_id') then	 prm_audit.audit_data ('VIEWPREF','view_pref_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.view_pref_id,:new.view_pref_id); end if;
    if voper <> 'U' or  updating('view_pref_name') then	 prm_audit.audit_data ('VIEWPREF','view_pref_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.view_pref_name,:new.view_pref_name); end if;
    if voper <> 'U' or  updating('view_pref_type') then	 prm_audit.audit_data ('VIEWPREF','view_pref_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.view_pref_type,:new.view_pref_type); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('VIEWPREF','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;

  end if;


      prm_audit.audit_row ( 'VIEWPREF',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_VWPREFDASH
create or replace trigger PRMAUD_VWPREFDASH
after insert or update or delete on VWPREFDASH
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('VWPREFDASH',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.dashboard_id;
				
vpk2 := :old.view_pref_id;
				

    else
    	vpk1 := :new.dashboard_id;
				
vpk2 := :new.view_pref_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('dashboard_id') then	 prm_audit.audit_data ('VWPREFDASH','dashboard_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.dashboard_id,:new.dashboard_id); end if;
    if voper <> 'U' or  updating('view_pref_id') then	 prm_audit.audit_data ('VWPREFDASH','view_pref_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.view_pref_id,:new.view_pref_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('VWPREFDASH','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;

  end if;


      prm_audit.audit_row ( 'VWPREFDASH',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_VWPREFDATA
create or replace trigger PRMAUD_VWPREFDATA
after insert or update or delete on VWPREFDATA
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('VWPREFDATA',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.view_pref_id;
				
vpk2 := :old.view_pref_key;
				

    else
    	vpk1 := :new.view_pref_id;
				
vpk2 := :new.view_pref_key;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('view_pref_id') then	 prm_audit.audit_data ('VWPREFDATA','view_pref_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.view_pref_id,:new.view_pref_id); end if;
    if voper <> 'U' or  updating('view_pref_key') then	 prm_audit.audit_data ('VWPREFDATA','view_pref_key',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.view_pref_key,:new.view_pref_key); end if;
    if voper <> 'U' or  updating('view_pref_value') then	 prm_audit.audit_data ('VWPREFDATA','view_pref_value',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.view_pref_value,:new.view_pref_value); end if;
    if voper <> 'U' or ( updating('view_pref_value_blob') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('VWPREFDATA','view_pref_value_blob',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.view_pref_value_blob,:new.view_pref_value_blob); end if;

  end if;


      prm_audit.audit_row ( 'VWPREFDATA',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_VWPREFUSER
create or replace trigger PRMAUD_VWPREFUSER
after insert or update or delete on VWPREFUSER
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('VWPREFUSER',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.view_pref_id;
				
vpk2 := :old.user_id;
				

    else
    	vpk1 := :new.view_pref_id;
				
vpk2 := :new.user_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('view_pref_id') then	 prm_audit.audit_data ('VWPREFUSER','view_pref_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.view_pref_id,:new.view_pref_id); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('VWPREFUSER','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;

  end if;


      prm_audit.audit_row ( 'VWPREFUSER',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_VIEWPROP
create or replace trigger PRMAUD_VIEWPROP
after insert or update or delete on VIEWPROP
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('VIEWPROP',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.view_id;
				

    else
    	vpk1 := :new.view_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('view_id') then	 prm_audit.audit_data ('VIEWPROP','view_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.view_id,:new.view_id); end if;
    if voper <> 'U' or  updating('view_name') then	 prm_audit.audit_data ('VIEWPROP','view_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.view_name,:new.view_name); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('VIEWPROP','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('VIEWPROP','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('view_type') then	 prm_audit.audit_data ('VIEWPROP','view_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.view_type,:new.view_type); end if;
    if voper <> 'U' or ( updating('view_data') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('VIEWPROP','view_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.view_data,:new.view_data); end if;

  end if;


      prm_audit.audit_row ( 'VIEWPROP',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_WBSBUDG
create or replace trigger PRMAUD_WBSBUDG
after insert or update or delete on WBSBUDG
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('WBSBUDG',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.wbs_budg_id;
				

    else
    	vpk1 := :new.wbs_budg_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('wbs_budg_id') then	 prm_audit.audit_data ('WBSBUDG','wbs_budg_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.wbs_budg_id,:new.wbs_budg_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('WBSBUDG','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('wbs_id') then	 prm_audit.audit_data ('WBSBUDG','wbs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_id,:new.wbs_id); end if;
    if voper <> 'U' or  updating('start_date') then	 prm_audit.audit_data ('WBSBUDG','start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.start_date,'yyyymmddhh24miss'),to_char(:new.start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('spend_cost') then	 prm_audit.audit_data ('WBSBUDG','spend_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.spend_cost,:new.spend_cost); end if;
    if voper <> 'U' or  updating('benefit_cost') then	 prm_audit.audit_data ('WBSBUDG','benefit_cost',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.benefit_cost,:new.benefit_cost); end if;

  end if;


      prm_audit.audit_row ( 'WBSBUDG',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_WBSMEMO
create or replace trigger PRMAUD_WBSMEMO
after insert or update or delete on WBSMEMO
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('WBSMEMO',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.wbs_memo_id;
				

    else
    	vpk1 := :new.wbs_memo_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('wbs_memo_id') then	 prm_audit.audit_data ('WBSMEMO','wbs_memo_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.wbs_memo_id,:new.wbs_memo_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('WBSMEMO','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('wbs_id') then	 prm_audit.audit_data ('WBSMEMO','wbs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_id,:new.wbs_id); end if;
    if voper <> 'U' or  updating('memo_type_id') then	 prm_audit.audit_data ('WBSMEMO','memo_type_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.memo_type_id,:new.memo_type_id); end if;
    if voper <> 'U' or ( updating('wbs_memo') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('WBSMEMO','wbs_memo',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.wbs_memo,:new.wbs_memo); end if;

  end if;


      prm_audit.audit_row ( 'WBSMEMO',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_WBRSCAT
create or replace trigger PRMAUD_WBRSCAT
after insert or update or delete on WBRSCAT
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('WBRSCAT',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.wbrs_cat_id;
				

    else
    	vpk1 := :new.wbrs_cat_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('wbrs_cat_id') then	 prm_audit.audit_data ('WBRSCAT','wbrs_cat_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.wbrs_cat_id,:new.wbrs_cat_id); end if;
    if voper <> 'U' or  updating('wbrs_cat_name') then	 prm_audit.audit_data ('WBRSCAT','wbrs_cat_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbrs_cat_name,:new.wbrs_cat_name); end if;

  end if;


      prm_audit.audit_row ( 'WBRSCAT',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_WBSRSRC
create or replace trigger PRMAUD_WBSRSRC
after insert or update or delete on WBSRSRC
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('WBSRSRC',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.wbsrsrc_id;
				

    else
    	vpk1 := :new.wbsrsrc_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('wbsrsrc_id') then	 prm_audit.audit_data ('WBSRSRC','wbsrsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.wbsrsrc_id,:new.wbsrsrc_id); end if;
    if voper <> 'U' or  updating('wbs_id') then	 prm_audit.audit_data ('WBSRSRC','wbs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_id,:new.wbs_id); end if;
    if voper <> 'U' or  updating('rsrc_id') then	 prm_audit.audit_data ('WBSRSRC','rsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_id,:new.rsrc_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('WBSRSRC','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('committed_flag') then	 prm_audit.audit_data ('WBSRSRC','committed_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.committed_flag,:new.committed_flag); end if;
    if voper <> 'U' or  updating('start_date') then	 prm_audit.audit_data ('WBSRSRC','start_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.start_date,'yyyymmddhh24miss'),to_char(:new.start_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('end_date') then	 prm_audit.audit_data ('WBSRSRC','end_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.end_date,'yyyymmddhh24miss'),to_char(:new.end_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('auto_compute_dates_flag') then	 prm_audit.audit_data ('WBSRSRC','auto_compute_dates_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.auto_compute_dates_flag,:new.auto_compute_dates_flag); end if;
    if voper <> 'U' or  updating('role_id') then	 prm_audit.audit_data ('WBSRSRC','role_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.role_id,:new.role_id); end if;
    if voper <> 'U' or  updating('rsrc_request_data') then	 prm_audit.audit_data ('WBSRSRC','rsrc_request_data',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.rsrc_request_data,:new.rsrc_request_data); end if;
    if voper <> 'U' or  updating('allocation_pct') then	 prm_audit.audit_data ('WBSRSRC','allocation_pct',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.allocation_pct,:new.allocation_pct); end if;
    if voper <> 'U' or  updating('wbrs_cat_id') then	 prm_audit.audit_data ('WBSRSRC','wbrs_cat_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbrs_cat_id,:new.wbrs_cat_id); end if;

  end if;


      prm_audit.audit_row ( 'WBSRSRC',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_WBSRSRC_QTY
create or replace trigger PRMAUD_WBSRSRC_QTY
after insert or update or delete on WBSRSRC_QTY
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('WBSRSRC_QTY',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.wbsrsrc_id;
				
vpk2 := :old.week_start;
				
vpk3 := :old.month_start;
				

    else
    	vpk1 := :new.wbsrsrc_id;
				
vpk2 := :new.week_start;
				
vpk3 := :new.month_start;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('wbsrsrc_id') then	 prm_audit.audit_data ('WBSRSRC_QTY','wbsrsrc_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.wbsrsrc_id,:new.wbsrsrc_id); end if;
    if voper <> 'U' or  updating('week_start') then	 prm_audit.audit_data ('WBSRSRC_QTY','week_start',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.week_start,'yyyymmddhh24miss'),to_char(:new.week_start,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('month_start') then	 prm_audit.audit_data ('WBSRSRC_QTY','month_start',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.month_start,'yyyymmddhh24miss'),to_char(:new.month_start,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('qty') then	 prm_audit.audit_data ('WBSRSRC_QTY','qty',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.qty,:new.qty); end if;
    if voper <> 'U' or  updating('fin_dates_id1') then	 prm_audit.audit_data ('WBSRSRC_QTY','fin_dates_id1',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fin_dates_id1,:new.fin_dates_id1); end if;
    if voper <> 'U' or  updating('fin_qty1') then	 prm_audit.audit_data ('WBSRSRC_QTY','fin_qty1',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fin_qty1,:new.fin_qty1); end if;
    if voper <> 'U' or  updating('fin_dates_id2') then	 prm_audit.audit_data ('WBSRSRC_QTY','fin_dates_id2',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fin_dates_id2,:new.fin_dates_id2); end if;
    if voper <> 'U' or  updating('fin_qty2') then	 prm_audit.audit_data ('WBSRSRC_QTY','fin_qty2',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.fin_qty2,:new.fin_qty2); end if;

  end if;


      prm_audit.audit_row ( 'WBSRSRC_QTY',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_WBSSTEP
create or replace trigger PRMAUD_WBSSTEP
after insert or update or delete on WBSSTEP
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('WBSSTEP',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.wbs_step_id;
				

    else
    	vpk1 := :new.wbs_step_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('wbs_step_id') then	 prm_audit.audit_data ('WBSSTEP','wbs_step_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.wbs_step_id,:new.wbs_step_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('WBSSTEP','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('wbs_id') then	 prm_audit.audit_data ('WBSSTEP','wbs_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wbs_id,:new.wbs_id); end if;
    if voper <> 'U' or  updating('seq_num') then	 prm_audit.audit_data ('WBSSTEP','seq_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.seq_num,:new.seq_num); end if;
    if voper <> 'U' or  updating('complete_flag') then	 prm_audit.audit_data ('WBSSTEP','complete_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.complete_flag,:new.complete_flag); end if;
    if voper <> 'U' or  updating('step_name') then	 prm_audit.audit_data ('WBSSTEP','step_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.step_name,:new.step_name); end if;
    if voper <> 'U' or  updating('step_wt') then	 prm_audit.audit_data ('WBSSTEP','step_wt',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.step_wt,:new.step_wt); end if;

  end if;


      prm_audit.audit_row ( 'WBSSTEP',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_WKFLTMPL
create or replace trigger PRMAUD_WKFLTMPL
after insert or update or delete on WKFLTMPL
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('WKFLTMPL',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.wkfl_tmpl_id;
				

    else
    	vpk1 := :new.wkfl_tmpl_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('wkfl_tmpl_id') then	 prm_audit.audit_data ('WKFLTMPL','wkfl_tmpl_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.wkfl_tmpl_id,:new.wkfl_tmpl_id); end if;
    if voper <> 'U' or  updating('template_name') then	 prm_audit.audit_data ('WKFLTMPL','template_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.template_name,:new.template_name); end if;
    if voper <> 'U' or  updating('project_flag') then	 prm_audit.audit_data ('WKFLTMPL','project_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.project_flag,:new.project_flag); end if;
    if voper <> 'U' or  updating('wk_external_key') then	 prm_audit.audit_data ('WKFLTMPL','wk_external_key',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.wk_external_key,:new.wk_external_key); end if;
    if voper <> 'U' or  updating('tmplcatg_catg_id') then	 prm_audit.audit_data ('WKFLTMPL','tmplcatg_catg_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.tmplcatg_catg_id,:new.tmplcatg_catg_id); end if;

  end if;


      prm_audit.audit_row ( 'WKFLTMPL',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_WKFLUSER
create or replace trigger PRMAUD_WKFLUSER
after insert or update or delete on WKFLUSER
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('WKFLUSER',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.work_flow_id;
				
vpk2 := :old.user_id;
				
vpk3 := :old.stage_num;
				

    else
    	vpk1 := :new.work_flow_id;
				
vpk2 := :new.user_id;
				
vpk3 := :new.stage_num;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('work_flow_id') then	 prm_audit.audit_data ('WKFLUSER','work_flow_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.work_flow_id,:new.work_flow_id); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('WKFLUSER','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;
    if voper <> 'U' or  updating('stage_num') then	 prm_audit.audit_data ('WKFLUSER','stage_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.stage_num,:new.stage_num); end if;
    if voper <> 'U' or  updating('comments') then	 prm_audit.audit_data ('WKFLUSER','comments',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.comments,:new.comments); end if;

  end if;


      prm_audit.audit_row ( 'WKFLUSER',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_WORKFLOW
create or replace trigger PRMAUD_WORKFLOW
after insert or update or delete on WORKFLOW
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('WORKFLOW',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.work_flow_id;
				

    else
    	vpk1 := :new.work_flow_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('work_flow_id') then	 prm_audit.audit_data ('WORKFLOW','work_flow_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.work_flow_id,:new.work_flow_id); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('WORKFLOW','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('workflow_name') then	 prm_audit.audit_data ('WORKFLOW','workflow_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.workflow_name,:new.workflow_name); end if;
    if voper <> 'U' or  updating('external_key') then	 prm_audit.audit_data ('WORKFLOW','external_key',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.external_key,:new.external_key); end if;
    if voper <> 'U' or  updating('stage_num') then	 prm_audit.audit_data ('WORKFLOW','stage_num',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.stage_num,:new.stage_num); end if;
    if voper <> 'U' or  updating('status') then	 prm_audit.audit_data ('WORKFLOW','status',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.status,:new.status); end if;
    if voper <> 'U' or  updating('existing_project_flag') then	 prm_audit.audit_data ('WORKFLOW','existing_project_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.existing_project_flag,:new.existing_project_flag); end if;
    if voper <> 'U' or  updating('stage_name') then	 prm_audit.audit_data ('WORKFLOW','stage_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.stage_name,:new.stage_name); end if;
    if voper <> 'U' or  updating('stage_modified_flag') then	 prm_audit.audit_data ('WORKFLOW','stage_modified_flag',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.stage_modified_flag,:new.stage_modified_flag); end if;
    if voper <> 'U' or  updating('initiated_date') then	 prm_audit.audit_data ('WORKFLOW','initiated_date',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,to_char(:old.initiated_date,'yyyymmddhh24miss'),to_char(:new.initiated_date,'yyyymmddhh24miss')); end if;
    if voper <> 'U' or  updating('workspace_id') then	 prm_audit.audit_data ('WORKFLOW','workspace_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.workspace_id,:new.workspace_id); end if;
    if voper <> 'U' or  updating('user_id') then	 prm_audit.audit_data ('WORKFLOW','user_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.user_id,:new.user_id); end if;

  end if;


      prm_audit.audit_row ( 'WORKFLOW',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

PRMAUD_WORKSPACE
create or replace trigger PRMAUD_WORKSPACE
after insert or update or delete on WORKSPACE
for each row
declare
  vpk1          varchar2(255);
  vpk2          varchar2(255);
  vpk3          varchar2(255);
  vpk4          varchar2(255);
  voper         char(1);
  vaudit        number;
  vinsert_level number;
  vupdate_level number;
  vdelete_level number;
  vcol_audit    varchar2(255);
  vsession_id   number;
  vprm_user_name varchar2(32);
  vapp_name     varchar2(25);
  vprogram_name varchar2(255);
  vhostname     varchar2(255);
  vnetaddress   varchar2(64);
  vrdbms_user   varchar2(30);
  vos_user      varchar2(30);
  vlogical_delete		varchar2(1);

begin

  if dbms_reputil.from_remote = true then   return; end if;

  prm_audit.tab_options ('WORKSPACE',vaudit,vinsert_level,vupdate_level,vdelete_level,vcol_audit);
  

  if nvl(vaudit,0) < 1 then return; end if ;

  prm_audit.prm_user (vsession_id,vprm_user_name,vapp_name);

  prm_audit.proc_info (vprogram_name, vhostname, vnetaddress, vrdbms_user, vos_user );

  vlogical_delete := 'N';

  prm_audit.g_audit_data:=null;
  if prm_audit.g_audit_extended is null then
    dbms_lob.createtemporary(prm_audit.g_audit_extended,TRUE,dbms_lob.SESSION);
  else
    dbms_lob.trim(prm_audit.g_audit_extended,0);
  end if;
  
  if updating then     
    if :old.delete_session_id is null and :new.delete_session_id is not null then
      vlogical_delete := 'Y';
      voper := 'D';
    else
      voper := 'U';
    end if;
  elsif inserting then voper := 'I';
  else                 voper := 'D';
  end if;

if    (voper = 'U' and vupdate_level = 0 ) or ( voper = 'I' and vinsert_level =0) or (voper = 'D' and vdelete_level = 0) then return; end if ;

  if deleting then
    vpk1 := :old.workspace_id;
				

    else
    	vpk1 := :new.workspace_id;
				

  end if;

  if (voper = 'U' and vupdate_level >= 2 ) or ( voper = 'I' and vinsert_level >= 2)
       or (voper = 'D' and vdelete_level >= 2) then
		
    if voper <> 'U' or  updating('workspace_id') then	 prm_audit.audit_data ('WORKSPACE','workspace_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'Y'
				,:old.workspace_id,:new.workspace_id); end if;
    if voper <> 'U' or  updating('workspace_type') then	 prm_audit.audit_data ('WORKSPACE','workspace_type',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.workspace_type,:new.workspace_type); end if;
    if voper <> 'U' or  updating('proj_id') then	 prm_audit.audit_data ('WORKSPACE','proj_id',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.proj_id,:new.proj_id); end if;
    if voper <> 'U' or  updating('workspace_name') then	 prm_audit.audit_data ('WORKSPACE','workspace_name',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.workspace_name,:new.workspace_name); end if;
    if voper <> 'U' or ( updating('workspace_prefs') and vupdate_level >= 3 ) then	 
       prm_audit.audit_blob ('WORKSPACE','workspace_prefs',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1
       ,vlogical_delete,'N'       
       ,:old.workspace_prefs,:new.workspace_prefs); end if;
    if voper <> 'U' or  updating('cr_external_key') then	 prm_audit.audit_data ('WORKSPACE','cr_external_key',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
       ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,1,vlogical_delete,'N'
				,:old.cr_external_key,:new.cr_external_key); end if;

  end if;


      prm_audit.audit_row ( 'WORKSPACE',voper,vpk1,vpk2,vpk3,vpk4,vprm_user_name
                     ,vprogram_name,vhostname,vnetaddress,vrdbms_user,vos_user,vapp_name,vlogical_delete,'Y' );
   
end;

RT_ACCOUNT
CREATE OR REPLACE TRIGGER RT_ACCOUNT
BEFORE UPDATE OR INSERT ON ACCOUNT
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'ACCOUNT',:old.acct_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.acct_id)
      and table_name = 'ACCOUNT';
    END IF;
  END IF;
end; 

RT_ACCOUNT_DEL
CREATE OR REPLACE TRIGGER RT_ACCOUNT_DEL
BEFORE DELETE ON ACCOUNT
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'ACCOUNT',:old.acct_id,null,null,null );
end; 

RT_ACTVCODE
CREATE OR REPLACE TRIGGER RT_ACTVCODE
BEFORE UPDATE OR INSERT ON ACTVCODE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'ACTVCODE',:old.actv_code_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.actv_code_id)
      and table_name = 'ACTVCODE';
    END IF;
  END IF;
end; 

RT_ACTVCODE_DEL
CREATE OR REPLACE TRIGGER RT_ACTVCODE_DEL
BEFORE DELETE ON ACTVCODE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'ACTVCODE',:old.actv_code_id,null,null,null );
end; 

RT_ACTVTYPE
CREATE OR REPLACE TRIGGER RT_ACTVTYPE
BEFORE UPDATE OR INSERT ON ACTVTYPE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'ACTVTYPE',:old.actv_code_type_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.actv_code_type_id)
      and table_name = 'ACTVTYPE';
    END IF;
  END IF;
end; 

RT_ACTVTYPE_DEL
CREATE OR REPLACE TRIGGER RT_ACTVTYPE_DEL
BEFORE DELETE ON ACTVTYPE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'ACTVTYPE',:old.actv_code_type_id,null,null,null
  	,:old.proj_id );
end; 

RT_ADMIN_CONFIG
CREATE OR REPLACE TRIGGER RT_ADMIN_CONFIG
BEFORE UPDATE OR INSERT ON ADMIN_CONFIG
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'ADMIN_CONFIG',:old.config_name,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = :old.config_name
      and table_name = 'ADMIN_CONFIG';
    END IF;
  END IF;
end; 

RT_ADMIN_CONFIG_DEL
CREATE OR REPLACE TRIGGER RT_ADMIN_CONFIG_DEL
BEFORE DELETE ON ADMIN_CONFIG
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'ADMIN_CONFIG',:old.config_name,null,null,null );
end; 

RT_BASETYPE
CREATE OR REPLACE TRIGGER RT_BASETYPE
BEFORE UPDATE OR INSERT ON BASETYPE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'BASETYPE',:old.base_type_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.base_type_id)
      and table_name = 'BASETYPE';
    END IF;
  END IF;
end; 

RT_BASETYPE_DEL
CREATE OR REPLACE TRIGGER RT_BASETYPE_DEL
BEFORE DELETE ON BASETYPE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'BASETYPE',:old.base_type_id,null,null,null );
end; 

RT_BRE_REGISTRY
CREATE OR REPLACE TRIGGER RT_BRE_REGISTRY
BEFORE UPDATE OR INSERT ON BRE_REGISTRY
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'BRE_REGISTRY',:old.bre_registry_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = :old.bre_registry_id
      and table_name = 'BRE_REGISTRY';
    END IF;
  END IF;
end; 

RT_BRE_REGISTRY_DEL
CREATE OR REPLACE TRIGGER RT_BRE_REGISTRY_DEL
BEFORE DELETE ON BRE_REGISTRY
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'BRE_REGISTRY',:old.bre_registry_id,null,null,null );
end; 

RT_BUDGCHNG
CREATE OR REPLACE TRIGGER RT_BUDGCHNG
BEFORE UPDATE OR INSERT ON BUDGCHNG
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'BUDGCHNG',:old.budg_chng_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.budg_chng_id)
      and table_name = 'BUDGCHNG';
    END IF;
  END IF;
end; 

RT_BUDGCHNG_DEL
CREATE OR REPLACE TRIGGER RT_BUDGCHNG_DEL
BEFORE DELETE ON BUDGCHNG
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'BUDGCHNG',:old.budg_chng_id,null,null,null
  	,:old.proj_id );
end; 

RT_CALENDAR
CREATE OR REPLACE TRIGGER RT_CALENDAR
BEFORE UPDATE OR INSERT ON CALENDAR
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'CALENDAR',:old.clndr_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.clndr_id)
      and table_name = 'CALENDAR';
    END IF;
  END IF;
end; 

RT_CALENDAR_DEL
CREATE OR REPLACE TRIGGER RT_CALENDAR_DEL
BEFORE DELETE ON CALENDAR
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'CALENDAR',:old.clndr_id,null,null,null
  	,:old.proj_id );
end; 

RT_COSTTYPE
CREATE OR REPLACE TRIGGER RT_COSTTYPE
BEFORE UPDATE OR INSERT ON COSTTYPE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'COSTTYPE',:old.cost_type_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.cost_type_id)
      and table_name = 'COSTTYPE';
    END IF;
  END IF;
end; 

RT_COSTTYPE_DEL
CREATE OR REPLACE TRIGGER RT_COSTTYPE_DEL
BEFORE DELETE ON COSTTYPE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'COSTTYPE',:old.cost_type_id,null,null,null );
end; 

RT_CURRTYPE
CREATE OR REPLACE TRIGGER RT_CURRTYPE
BEFORE UPDATE OR INSERT ON CURRTYPE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'CURRTYPE',:old.curr_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.curr_id)
      and table_name = 'CURRTYPE';
    END IF;
  END IF;
end; 

RT_CURRTYPE_DEL
CREATE OR REPLACE TRIGGER RT_CURRTYPE_DEL
BEFORE DELETE ON CURRTYPE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'CURRTYPE',:old.curr_id,null,null,null );
end; 

RT_DASHBOARD
CREATE OR REPLACE TRIGGER RT_DASHBOARD
BEFORE UPDATE OR INSERT ON DASHBOARD
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'DASHBOARD',:old.dashboard_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.dashboard_id)
      and table_name = 'DASHBOARD';
    END IF;
  END IF;
end; 

RT_DASHBOARD_DEL
CREATE OR REPLACE TRIGGER RT_DASHBOARD_DEL
BEFORE DELETE ON DASHBOARD
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'DASHBOARD',:old.dashboard_id,null,null,null );
end; 

RT_DASHUSER
CREATE OR REPLACE TRIGGER RT_DASHUSER
BEFORE UPDATE OR INSERT ON DASHUSER
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
    :NEW.update_user := prm_audit.g_prm_user_name;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.g_prm_user_name;
    :NEW.create_date := SYSDATE;
  END IF;

  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'DASHUSER',:old.dashboard_id,:old.user_id,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.dashboard_id)
and pk2 = TO_CHAR(:old.user_id)
      and table_name = 'DASHUSER';
    END IF;
  END IF;
end; 

RT_DASHUSER_DEL
CREATE OR REPLACE TRIGGER RT_DASHUSER_DEL
BEFORE DELETE ON DASHUSER
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'DASHUSER',:old.dashboard_id,:old.user_id,null,null );
end; 

RT_DOCCATG
CREATE OR REPLACE TRIGGER RT_DOCCATG
BEFORE UPDATE OR INSERT ON DOCCATG
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'DOCCATG',:old.doc_catg_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.doc_catg_id)
      and table_name = 'DOCCATG';
    END IF;
  END IF;
end; 

RT_DOCCATG_DEL
CREATE OR REPLACE TRIGGER RT_DOCCATG_DEL
BEFORE DELETE ON DOCCATG
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'DOCCATG',:old.doc_catg_id,null,null,null );
end; 

RT_DOCSTAT
CREATE OR REPLACE TRIGGER RT_DOCSTAT
BEFORE UPDATE OR INSERT ON DOCSTAT
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'DOCSTAT',:old.doc_status_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.doc_status_id)
      and table_name = 'DOCSTAT';
    END IF;
  END IF;
end; 

RT_DOCSTAT_DEL
CREATE OR REPLACE TRIGGER RT_DOCSTAT_DEL
BEFORE DELETE ON DOCSTAT
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'DOCSTAT',:old.doc_status_id,null,null,null );
end; 

RT_DOCUMENT
CREATE OR REPLACE TRIGGER RT_DOCUMENT
BEFORE UPDATE OR INSERT ON DOCUMENT
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'DOCUMENT',:old.doc_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.doc_id)
      and table_name = 'DOCUMENT';
    END IF;
  END IF;
end; 

RT_DOCUMENT_DEL
CREATE OR REPLACE TRIGGER RT_DOCUMENT_DEL
BEFORE DELETE ON DOCUMENT
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'DOCUMENT',:old.doc_id,null,null,null
  	,:old.proj_id );
end; 

RT_EXTAPP
CREATE OR REPLACE TRIGGER RT_EXTAPP
BEFORE UPDATE OR INSERT ON EXTAPP
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'EXTAPP',:old.app_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.app_id)
      and table_name = 'EXTAPP';
    END IF;
  END IF;
end; 

RT_EXTAPP_DEL
CREATE OR REPLACE TRIGGER RT_EXTAPP_DEL
BEFORE DELETE ON EXTAPP
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'EXTAPP',:old.app_id,null,null,null
  	,:old.proj_id );
end; 

RT_EXPPROJ
CREATE OR REPLACE TRIGGER RT_EXPPROJ
BEFORE UPDATE OR INSERT ON EXPPROJ
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.proj_id)
    and table_name = 'EXPPROJ';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'EXPPROJ',:old.proj_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.proj_id)
      and table_name = 'EXPPROJ';
    END IF;
  END IF;
end; 

RT_EXPPROJ_DEL
CREATE OR REPLACE TRIGGER RT_EXPPROJ_DEL
BEFORE DELETE ON EXPPROJ
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'EXPPROJ',:old.proj_id,null,null,null
  	,:old.proj_id );
end; 

RT_FACTOR
CREATE OR REPLACE TRIGGER RT_FACTOR
BEFORE UPDATE OR INSERT ON FACTOR
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'FACTOR',:old.fact_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.fact_id)
      and table_name = 'FACTOR';
    END IF;
  END IF;
end; 

RT_FACTOR_DEL
CREATE OR REPLACE TRIGGER RT_FACTOR_DEL
BEFORE DELETE ON FACTOR
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'FACTOR',:old.fact_id,null,null,null );
end; 

RT_FACTVAL
CREATE OR REPLACE TRIGGER RT_FACTVAL
BEFORE UPDATE OR INSERT ON FACTVAL
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'FACTVAL',:old.fact_val_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.fact_val_id)
      and table_name = 'FACTVAL';
    END IF;
  END IF;
end; 

RT_FACTVAL_DEL
CREATE OR REPLACE TRIGGER RT_FACTVAL_DEL
BEFORE DELETE ON FACTVAL
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'FACTVAL',:old.fact_val_id,null,null,null );
end; 

RT_FILTPROP
CREATE OR REPLACE TRIGGER RT_FILTPROP
BEFORE UPDATE OR INSERT ON FILTPROP
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'FILTPROP',:old.filter_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.filter_id)
      and table_name = 'FILTPROP';
    END IF;
  END IF;
end; 

RT_FILTPROP_DEL
CREATE OR REPLACE TRIGGER RT_FILTPROP_DEL
BEFORE DELETE ON FILTPROP
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'FILTPROP',:old.filter_id,null,null,null );
end; 

RT_FINDATES
CREATE OR REPLACE TRIGGER RT_FINDATES
BEFORE UPDATE OR INSERT ON FINDATES
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'FINDATES',:old.fin_dates_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.fin_dates_id)
      and table_name = 'FINDATES';
    END IF;
  END IF;
end; 

RT_FINDATES_DEL
CREATE OR REPLACE TRIGGER RT_FINDATES_DEL
BEFORE DELETE ON FINDATES
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'FINDATES',:old.fin_dates_id,null,null,null );
end; 

RT_FORMCATG
CREATE OR REPLACE TRIGGER RT_FORMCATG
BEFORE UPDATE OR INSERT ON FORMCATG
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'FORMCATG',:old.form_catg_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.form_catg_id)
      and table_name = 'FORMCATG';
    END IF;
  END IF;
end; 

RT_FORMCATG_DEL
CREATE OR REPLACE TRIGGER RT_FORMCATG_DEL
BEFORE DELETE ON FORMCATG
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'FORMCATG',:old.form_catg_id,null,null,null );
end; 

RT_FORMPROJ
CREATE OR REPLACE TRIGGER RT_FORMPROJ
BEFORE UPDATE OR INSERT ON FORMPROJ
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.form_tmpl_id)
and pk2 = TO_CHAR(:new.proj_id)
    and table_name = 'FORMPROJ';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'FORMPROJ',:old.form_tmpl_id,:old.proj_id,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.form_tmpl_id)
and pk2 = TO_CHAR(:old.proj_id)
      and table_name = 'FORMPROJ';
    END IF;
  END IF;
end; 

RT_FORMPROJ_DEL
CREATE OR REPLACE TRIGGER RT_FORMPROJ_DEL
BEFORE DELETE ON FORMPROJ
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'FORMPROJ',:old.form_tmpl_id,:old.proj_id,null,null
  	,:old.proj_id );
end; 

RT_FORMTMPL
CREATE OR REPLACE TRIGGER RT_FORMTMPL
BEFORE UPDATE OR INSERT ON FORMTMPL
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'FORMTMPL',:old.form_tmpl_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.form_tmpl_id)
      and table_name = 'FORMTMPL';
    END IF;
  END IF;
end; 

RT_FORMTMPL_DEL
CREATE OR REPLACE TRIGGER RT_FORMTMPL_DEL
BEFORE DELETE ON FORMTMPL
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'FORMTMPL',:old.form_tmpl_id,null,null,null );
end; 

RT_FUNDSRC
CREATE OR REPLACE TRIGGER RT_FUNDSRC
BEFORE UPDATE OR INSERT ON FUNDSRC
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'FUNDSRC',:old.fund_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.fund_id)
      and table_name = 'FUNDSRC';
    END IF;
  END IF;
end; 

RT_FUNDSRC_DEL
CREATE OR REPLACE TRIGGER RT_FUNDSRC_DEL
BEFORE DELETE ON FUNDSRC
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'FUNDSRC',:old.fund_id,null,null,null );
end; 

RT_GCHANGE
CREATE OR REPLACE TRIGGER RT_GCHANGE
BEFORE UPDATE OR INSERT ON GCHANGE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'GCHANGE',:old.gchange_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.gchange_id)
      and table_name = 'GCHANGE';
    END IF;
  END IF;
end; 

RT_GCHANGE_DEL
CREATE OR REPLACE TRIGGER RT_GCHANGE_DEL
BEFORE DELETE ON GCHANGE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'GCHANGE',:old.gchange_id,null,null,null );
end; 

RT_ISSUHIST
CREATE OR REPLACE TRIGGER RT_ISSUHIST
BEFORE UPDATE OR INSERT ON ISSUHIST
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'ISSUHIST',:old.issue_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.issue_id)
      and table_name = 'ISSUHIST';
    END IF;
  END IF;
end; 

RT_ISSUHIST_DEL
CREATE OR REPLACE TRIGGER RT_ISSUHIST_DEL
BEFORE DELETE ON ISSUHIST
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'ISSUHIST',:old.issue_id,null,null,null
  	,:old.proj_id );
end; 

RT_ITERATION
CREATE OR REPLACE TRIGGER RT_ITERATION
BEFORE UPDATE OR INSERT ON ITERATION
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'ITERATION',:old.iteration_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.iteration_id)
      and table_name = 'ITERATION';
    END IF;
  END IF;
end; 

RT_ITERATION_DEL
CREATE OR REPLACE TRIGGER RT_ITERATION_DEL
BEFORE DELETE ON ITERATION
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'ITERATION',:old.iteration_id,null,null,null );
end; 

RT_ITERDAYS
CREATE OR REPLACE TRIGGER RT_ITERDAYS
BEFORE UPDATE OR INSERT ON ITERDAYS
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.task_id)
and pk2 = TO_CHAR(:new.day_number)
    and table_name = 'ITERDAYS';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'ITERDAYS',:old.task_id,:old.day_number,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.task_id)
and pk2 = TO_CHAR(:old.day_number)
      and table_name = 'ITERDAYS';
    END IF;
  END IF;
end; 

RT_ITERDAYS_DEL
CREATE OR REPLACE TRIGGER RT_ITERDAYS_DEL
BEFORE DELETE ON ITERDAYS
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'ITERDAYS',:old.task_id,:old.day_number,null,null
  	,:old.proj_id );
end; 

RT_ITERGOAL
CREATE OR REPLACE TRIGGER RT_ITERGOAL
BEFORE UPDATE OR INSERT ON ITERGOAL
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'ITERGOAL',:old.iter_goal_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.iter_goal_id)
      and table_name = 'ITERGOAL';
    END IF;
  END IF;
end; 

RT_ITERGOAL_DEL
CREATE OR REPLACE TRIGGER RT_ITERGOAL_DEL
BEFORE DELETE ON ITERGOAL
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'ITERGOAL',:old.iter_goal_id,null,null,null );
end; 

RT_JOBLOG
CREATE OR REPLACE TRIGGER RT_JOBLOG
BEFORE UPDATE OR INSERT ON JOBLOG
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'JOBLOG',:old.job_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.job_id)
      and table_name = 'JOBLOG';
    END IF;
  END IF;
end; 

RT_JOBLOG_DEL
CREATE OR REPLACE TRIGGER RT_JOBLOG_DEL
BEFORE DELETE ON JOBLOG
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'JOBLOG',:old.job_id,null,null,null );
end; 

RT_JOBSVC
CREATE OR REPLACE TRIGGER RT_JOBSVC
BEFORE UPDATE OR INSERT ON JOBSVC
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'JOBSVC',:old.job_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.job_id)
      and table_name = 'JOBSVC';
    END IF;
  END IF;
end; 

RT_JOBSVC_DEL
CREATE OR REPLACE TRIGGER RT_JOBSVC_DEL
BEFORE DELETE ON JOBSVC
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'JOBSVC',:old.job_id,null,null,null );
end; 

RT_JOBRPT
CREATE OR REPLACE TRIGGER RT_JOBRPT
BEFORE UPDATE OR INSERT ON JOBRPT
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.job_id)
and pk2 = TO_CHAR(:new.rpt_id)
    and table_name = 'JOBRPT';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'JOBRPT',:old.job_id,:old.rpt_id,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.job_id)
and pk2 = TO_CHAR(:old.rpt_id)
      and table_name = 'JOBRPT';
    END IF;
  END IF;
end; 

RT_JOBRPT_DEL
CREATE OR REPLACE TRIGGER RT_JOBRPT_DEL
BEFORE DELETE ON JOBRPT
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'JOBRPT',:old.job_id,:old.rpt_id,null,null );
end; 

RT_MEMOTYPE
CREATE OR REPLACE TRIGGER RT_MEMOTYPE
BEFORE UPDATE OR INSERT ON MEMOTYPE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'MEMOTYPE',:old.memo_type_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.memo_type_id)
      and table_name = 'MEMOTYPE';
    END IF;
  END IF;
end; 

RT_MEMOTYPE_DEL
CREATE OR REPLACE TRIGGER RT_MEMOTYPE_DEL
BEFORE DELETE ON MEMOTYPE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'MEMOTYPE',:old.memo_type_id,null,null,null );
end; 

RT_NONWORK
CREATE OR REPLACE TRIGGER RT_NONWORK
BEFORE UPDATE OR INSERT ON NONWORK
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'NONWORK',:old.nonwork_type_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.nonwork_type_id)
      and table_name = 'NONWORK';
    END IF;
  END IF;
end; 

RT_NONWORK_DEL
CREATE OR REPLACE TRIGGER RT_NONWORK_DEL
BEFORE DELETE ON NONWORK
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'NONWORK',:old.nonwork_type_id,null,null,null );
end; 

RT_NOTE
CREATE OR REPLACE TRIGGER RT_NOTE
BEFORE UPDATE OR INSERT ON NOTE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'NOTE',:old.note_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.note_id)
      and table_name = 'NOTE';
    END IF;
  END IF;
end; 

RT_NOTE_DEL
CREATE OR REPLACE TRIGGER RT_NOTE_DEL
BEFORE DELETE ON NOTE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'NOTE',:old.note_id,null,null,null );
end; 

RT_OBS
CREATE OR REPLACE TRIGGER RT_OBS
BEFORE UPDATE OR INSERT ON OBS
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'OBS',:old.obs_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.obs_id)
      and table_name = 'OBS';
    END IF;
  END IF;
end; 

RT_OBS_DEL
CREATE OR REPLACE TRIGGER RT_OBS_DEL
BEFORE DELETE ON OBS
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'OBS',:old.obs_id,null,null,null );
end; 

RT_PCATTYPE
CREATE OR REPLACE TRIGGER RT_PCATTYPE
BEFORE UPDATE OR INSERT ON PCATTYPE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'PCATTYPE',:old.proj_catg_type_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.proj_catg_type_id)
      and table_name = 'PCATTYPE';
    END IF;
  END IF;
end; 

RT_PCATTYPE_DEL
CREATE OR REPLACE TRIGGER RT_PCATTYPE_DEL
BEFORE DELETE ON PCATTYPE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'PCATTYPE',:old.proj_catg_type_id,null,null,null );
end; 

RT_PCATUSER
CREATE OR REPLACE TRIGGER RT_PCATUSER
BEFORE UPDATE OR INSERT ON PCATUSER
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.proj_catg_id)
and pk2 = TO_CHAR(:new.user_id)
    and table_name = 'PCATUSER';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'PCATUSER',:old.proj_catg_id,:old.user_id,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.proj_catg_id)
and pk2 = TO_CHAR(:old.user_id)
      and table_name = 'PCATUSER';
    END IF;
  END IF;
end; 

RT_PCATUSER_DEL
CREATE OR REPLACE TRIGGER RT_PCATUSER_DEL
BEFORE DELETE ON PCATUSER
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'PCATUSER',:old.proj_catg_id,:old.user_id,null,null );
end; 

RT_PCATVAL
CREATE OR REPLACE TRIGGER RT_PCATVAL
BEFORE UPDATE OR INSERT ON PCATVAL
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'PCATVAL',:old.proj_catg_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.proj_catg_id)
      and table_name = 'PCATVAL';
    END IF;
  END IF;
end; 

RT_PCATVAL_DEL
CREATE OR REPLACE TRIGGER RT_PCATVAL_DEL
BEFORE DELETE ON PCATVAL
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'PCATVAL',:old.proj_catg_id,null,null,null );
end; 

RT_PFOLIO
CREATE OR REPLACE TRIGGER RT_PFOLIO
BEFORE UPDATE OR INSERT ON PFOLIO
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'PFOLIO',:old.pfolio_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.pfolio_id)
      and table_name = 'PFOLIO';
    END IF;
  END IF;
end; 

RT_PFOLIO_DEL
CREATE OR REPLACE TRIGGER RT_PFOLIO_DEL
BEFORE DELETE ON PFOLIO
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'PFOLIO',:old.pfolio_id,null,null,null );
end; 

RT_PHASE
CREATE OR REPLACE TRIGGER RT_PHASE
BEFORE UPDATE OR INSERT ON PHASE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'PHASE',:old.phase_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.phase_id)
      and table_name = 'PHASE';
    END IF;
  END IF;
end; 

RT_PHASE_DEL
CREATE OR REPLACE TRIGGER RT_PHASE_DEL
BEFORE DELETE ON PHASE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'PHASE',:old.phase_id,null,null,null );
end; 

RT_POBS
CREATE OR REPLACE TRIGGER RT_POBS
BEFORE UPDATE OR INSERT ON POBS
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'POBS',:old.pobs_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.pobs_id)
      and table_name = 'POBS';
    END IF;
  END IF;
end; 

RT_POBS_DEL
CREATE OR REPLACE TRIGGER RT_POBS_DEL
BEFORE DELETE ON POBS
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'POBS',:old.pobs_id,null,null,null );
end; 

RT_PREFER
CREATE OR REPLACE TRIGGER RT_PREFER
BEFORE UPDATE OR INSERT ON PREFER
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'PREFER',:old.prefer_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.prefer_id)
      and table_name = 'PREFER';
    END IF;
  END IF;
end; 

RT_PREFER_DEL
CREATE OR REPLACE TRIGGER RT_PREFER_DEL
BEFORE DELETE ON PREFER
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'PREFER',:old.prefer_id,null,null,null );
end; 

RT_PROFILE
CREATE OR REPLACE TRIGGER RT_PROFILE
BEFORE UPDATE OR INSERT ON PROFILE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'PROFILE',:old.prof_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.prof_id)
      and table_name = 'PROFILE';
    END IF;
  END IF;
end; 

RT_PROFILE_DEL
CREATE OR REPLACE TRIGGER RT_PROFILE_DEL
BEFORE DELETE ON PROFILE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'PROFILE',:old.prof_id,null,null,null );
end; 

RT_PROCGROUP
CREATE OR REPLACE TRIGGER RT_PROCGROUP
BEFORE UPDATE OR INSERT ON PROCGROUP
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'PROCGROUP',:old.proc_group_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.proc_group_id)
      and table_name = 'PROCGROUP';
    END IF;
  END IF;
end; 

RT_PROCGROUP_DEL
CREATE OR REPLACE TRIGGER RT_PROCGROUP_DEL
BEFORE DELETE ON PROCGROUP
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'PROCGROUP',:old.proc_group_id,null,null,null );
end; 

RT_PROCITEM
CREATE OR REPLACE TRIGGER RT_PROCITEM
BEFORE UPDATE OR INSERT ON PROCITEM
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'PROCITEM',:old.proc_item_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.proc_item_id)
      and table_name = 'PROCITEM';
    END IF;
  END IF;
end; 

RT_PROCITEM_DEL
CREATE OR REPLACE TRIGGER RT_PROCITEM_DEL
BEFORE DELETE ON PROCITEM
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'PROCITEM',:old.proc_item_id,null,null,null );
end; 

RT_PROFPRIV
CREATE OR REPLACE TRIGGER RT_PROFPRIV
BEFORE UPDATE OR INSERT ON PROFPRIV
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.prof_id)
and pk2 = TO_CHAR(:new.priv_num)
    and table_name = 'PROFPRIV';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'PROFPRIV',:old.prof_id,:old.priv_num,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.prof_id)
and pk2 = TO_CHAR(:old.priv_num)
      and table_name = 'PROFPRIV';
    END IF;
  END IF;
end; 

RT_PROFPRIV_DEL
CREATE OR REPLACE TRIGGER RT_PROFPRIV_DEL
BEFORE DELETE ON PROFPRIV
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'PROFPRIV',:old.prof_id,:old.priv_num,null,null );
end; 

RT_PROJCOST
CREATE OR REPLACE TRIGGER RT_PROJCOST
BEFORE UPDATE OR INSERT ON PROJCOST
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'PROJCOST',:old.cost_item_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.cost_item_id)
      and table_name = 'PROJCOST';
    END IF;
  END IF;
end; 

RT_PROJCOST_DEL
CREATE OR REPLACE TRIGGER RT_PROJCOST_DEL
BEFORE DELETE ON PROJCOST
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'PROJCOST',:old.cost_item_id,null,null,null
  	,:old.proj_id );
end; 

RT_PROJECT
CREATE OR REPLACE TRIGGER RT_PROJECT
BEFORE UPDATE OR INSERT ON PROJECT
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'PROJECT',:old.proj_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.proj_id)
      and table_name = 'PROJECT';
    END IF;
  END IF;
end; 

RT_PROJECT_DEL
CREATE OR REPLACE TRIGGER RT_PROJECT_DEL
BEFORE DELETE ON PROJECT
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'PROJECT',:old.proj_id,null,null,null,null);
end; 

RT_PROJECT
CREATE OR REPLACE TRIGGER RT_PROJECT
BEFORE UPDATE OR INSERT ON PROJECT
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'PROJECT',:old.proj_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.proj_id)
      and table_name = 'PROJECT';
    END IF;
  END IF;
end; 

RT_PROJECT_DEL
CREATE OR REPLACE TRIGGER RT_PROJECT_DEL
BEFORE DELETE ON PROJECT
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'PROJECT',:old.proj_id,null,null,null,null);
end; 

RT_PROJEST
CREATE OR REPLACE TRIGGER RT_PROJEST
BEFORE UPDATE OR INSERT ON PROJEST
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'PROJEST',:old.proj_est_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.proj_est_id)
      and table_name = 'PROJEST';
    END IF;
  END IF;
end; 

RT_PROJEST_DEL
CREATE OR REPLACE TRIGGER RT_PROJEST_DEL
BEFORE DELETE ON PROJEST
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'PROJEST',:old.proj_est_id,null,null,null
  	,:old.proj_id );
end; 

RT_PROJFUND
CREATE OR REPLACE TRIGGER RT_PROJFUND
BEFORE UPDATE OR INSERT ON PROJFUND
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'PROJFUND',:old.proj_fund_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.proj_fund_id)
      and table_name = 'PROJFUND';
    END IF;
  END IF;
end; 

RT_PROJFUND_DEL
CREATE OR REPLACE TRIGGER RT_PROJFUND_DEL
BEFORE DELETE ON PROJFUND
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'PROJFUND',:old.proj_fund_id,null,null,null
  	,:old.proj_id );
end; 

RT_PROJISSU
CREATE OR REPLACE TRIGGER RT_PROJISSU
BEFORE UPDATE OR INSERT ON PROJISSU
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'PROJISSU',:old.issue_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.issue_id)
      and table_name = 'PROJISSU';
    END IF;
  END IF;
end; 

RT_PROJISSU_DEL
CREATE OR REPLACE TRIGGER RT_PROJISSU_DEL
BEFORE DELETE ON PROJISSU
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'PROJISSU',:old.issue_id,null,null,null
  	,:old.proj_id );
end; 

RT_PROJPCAT
CREATE OR REPLACE TRIGGER RT_PROJPCAT
BEFORE UPDATE OR INSERT ON PROJPCAT
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.proj_id)
and pk2 = TO_CHAR(:new.proj_catg_type_id)
    and table_name = 'PROJPCAT';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'PROJPCAT',:old.proj_id,:old.proj_catg_type_id,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.proj_id)
and pk2 = TO_CHAR(:old.proj_catg_type_id)
      and table_name = 'PROJPCAT';
    END IF;
  END IF;
end; 

RT_PROJPCAT_DEL
CREATE OR REPLACE TRIGGER RT_PROJPCAT_DEL
BEFORE DELETE ON PROJPCAT
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'PROJPCAT',:old.proj_id,:old.proj_catg_type_id,null,null
  	,:old.proj_id );
end; 

RT_PROJPROP
CREATE OR REPLACE TRIGGER RT_PROJPROP
BEFORE UPDATE OR INSERT ON PROJPROP
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.proj_id)
and pk2 = :new.prop_name
    and table_name = 'PROJPROP';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'PROJPROP',:old.proj_id,:old.prop_name,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.proj_id)
and pk2 = :old.prop_name
      and table_name = 'PROJPROP';
    END IF;
  END IF;
end; 

RT_PROJPROP_DEL
CREATE OR REPLACE TRIGGER RT_PROJPROP_DEL
BEFORE DELETE ON PROJPROP
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'PROJPROP',:old.proj_id,:old.prop_name,null,null
  	,:old.proj_id );
end; 

RT_PROJRISK
CREATE OR REPLACE TRIGGER RT_PROJRISK
BEFORE UPDATE OR INSERT ON PROJRISK
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'PROJRISK',:old.risk_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.risk_id)
      and table_name = 'PROJRISK';
    END IF;
  END IF;
end; 

RT_PROJRISK_DEL
CREATE OR REPLACE TRIGGER RT_PROJRISK_DEL
BEFORE DELETE ON PROJRISK
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'PROJRISK',:old.risk_id,null,null,null
  	,:old.proj_id );
end; 

RT_PROJTHRS
CREATE OR REPLACE TRIGGER RT_PROJTHRS
BEFORE UPDATE OR INSERT ON PROJTHRS
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'PROJTHRS',:old.thresh_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.thresh_id)
      and table_name = 'PROJTHRS';
    END IF;
  END IF;
end; 

RT_PROJTHRS_DEL
CREATE OR REPLACE TRIGGER RT_PROJTHRS_DEL
BEFORE DELETE ON PROJTHRS
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'PROJTHRS',:old.thresh_id,null,null,null
  	,:old.proj_id );
end; 

RT_PROJWBS
CREATE OR REPLACE TRIGGER RT_PROJWBS
BEFORE UPDATE OR INSERT ON PROJWBS
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'PROJWBS',:old.wbs_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.wbs_id)
      and table_name = 'PROJWBS';
    END IF;
  END IF;
end; 

RT_PROJWBS_DEL
CREATE OR REPLACE TRIGGER RT_PROJWBS_DEL
BEFORE DELETE ON PROJWBS
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'PROJWBS',:old.wbs_id,null,null,null,decode(:old.proj_node_flag,'N',:old.proj_id,null) );
end; 

RT_PROJWSRPT
CREATE OR REPLACE TRIGGER RT_PROJWSRPT
BEFORE UPDATE OR INSERT ON PROJWSRPT
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.rpt_id)
and pk2 = TO_CHAR(:new.proj_id)
    and table_name = 'PROJWSRPT';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'PROJWSRPT',:old.rpt_id,:old.proj_id,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.rpt_id)
and pk2 = TO_CHAR(:old.proj_id)
      and table_name = 'PROJWSRPT';
    END IF;
  END IF;
end; 

RT_PROJWSRPT_DEL
CREATE OR REPLACE TRIGGER RT_PROJWSRPT_DEL
BEFORE DELETE ON PROJWSRPT
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'PROJWSRPT',:old.rpt_id,:old.proj_id,null,null
  	,:old.proj_id );
end; 

RT_PRPFOLIO
CREATE OR REPLACE TRIGGER RT_PRPFOLIO
BEFORE UPDATE OR INSERT ON PRPFOLIO
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.pfolio_id)
and pk2 = TO_CHAR(:new.wbs_id)
    and table_name = 'PRPFOLIO';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'PRPFOLIO',:old.pfolio_id,:old.wbs_id,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.pfolio_id)
and pk2 = TO_CHAR(:old.wbs_id)
      and table_name = 'PRPFOLIO';
    END IF;
  END IF;
end; 

RT_PRPFOLIO_DEL
CREATE OR REPLACE TRIGGER RT_PRPFOLIO_DEL
BEFORE DELETE ON PRPFOLIO
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'PRPFOLIO',:old.pfolio_id,:old.wbs_id,null,null );
end; 

RT_QUERYLIB
CREATE OR REPLACE TRIGGER RT_QUERYLIB
BEFORE UPDATE OR INSERT ON QUERYLIB
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'QUERYLIB',:old.query_lib_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.query_lib_id)
      and table_name = 'QUERYLIB';
    END IF;
  END IF;
end; 

RT_QUERYLIB_DEL
CREATE OR REPLACE TRIGGER RT_QUERYLIB_DEL
BEFORE DELETE ON QUERYLIB
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'QUERYLIB',:old.query_lib_id,null,null,null );
end; 

RT_RCATTYPE
CREATE OR REPLACE TRIGGER RT_RCATTYPE
BEFORE UPDATE OR INSERT ON RCATTYPE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'RCATTYPE',:old.rsrc_catg_type_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.rsrc_catg_type_id)
      and table_name = 'RCATTYPE';
    END IF;
  END IF;
end; 

RT_RCATTYPE_DEL
CREATE OR REPLACE TRIGGER RT_RCATTYPE_DEL
BEFORE DELETE ON RCATTYPE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'RCATTYPE',:old.rsrc_catg_type_id,null,null,null );
end; 

RT_RCATVAL
CREATE OR REPLACE TRIGGER RT_RCATVAL
BEFORE UPDATE OR INSERT ON RCATVAL
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'RCATVAL',:old.rsrc_catg_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.rsrc_catg_id)
      and table_name = 'RCATVAL';
    END IF;
  END IF;
end; 

RT_RCATVAL_DEL
CREATE OR REPLACE TRIGGER RT_RCATVAL_DEL
BEFORE DELETE ON RCATVAL
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'RCATVAL',:old.rsrc_catg_id,null,null,null );
end; 

RT_REITTYPE
CREATE OR REPLACE TRIGGER RT_REITTYPE
BEFORE UPDATE OR INSERT ON REITTYPE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'REITTYPE',:old.related_item_type_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.related_item_type_id)
      and table_name = 'REITTYPE';
    END IF;
  END IF;
end; 

RT_REITTYPE_DEL
CREATE OR REPLACE TRIGGER RT_REITTYPE_DEL
BEFORE DELETE ON REITTYPE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'REITTYPE',:old.related_item_type_id,null,null,null );
end; 

RT_RELEASE
CREATE OR REPLACE TRIGGER RT_RELEASE
BEFORE UPDATE OR INSERT ON RELEASE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'RELEASE',:old.release_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.release_id)
      and table_name = 'RELEASE';
    END IF;
  END IF;
end; 

RT_RELEASE_DEL
CREATE OR REPLACE TRIGGER RT_RELEASE_DEL
BEFORE DELETE ON RELEASE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'RELEASE',:old.release_id,null,null,null
  	,:old.proj_id );
end; 

RT_RELITEMS
CREATE OR REPLACE TRIGGER RT_RELITEMS
BEFORE UPDATE OR INSERT ON RELITEMS
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.item_type_id)
and pk2 = TO_CHAR(:new.fk_id)
and pk3 = TO_CHAR(:new.related_item_type_id)
and pk4 = TO_CHAR(:new.related_fk_id)
    and table_name = 'RELITEMS';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'RELITEMS',:old.item_type_id,:old.fk_id,:old.related_item_type_id,:old.related_fk_id
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.item_type_id)
and pk2 = TO_CHAR(:old.fk_id)
and pk3 = TO_CHAR(:old.related_item_type_id)
and pk4 = TO_CHAR(:old.related_fk_id)
      and table_name = 'RELITEMS';
    END IF;
  END IF;
end; 

RT_RELITEMS_DEL
CREATE OR REPLACE TRIGGER RT_RELITEMS_DEL
BEFORE DELETE ON RELITEMS
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'RELITEMS',:old.item_type_id,:old.fk_id,:old.related_item_type_id,:old.related_fk_id
  	,:old.proj_id );
end; 

RT_RFOLIO
CREATE OR REPLACE TRIGGER RT_RFOLIO
BEFORE UPDATE OR INSERT ON RFOLIO
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'RFOLIO',:old.rfolio_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.rfolio_id)
      and table_name = 'RFOLIO';
    END IF;
  END IF;
end; 

RT_RFOLIO_DEL
CREATE OR REPLACE TRIGGER RT_RFOLIO_DEL
BEFORE DELETE ON RFOLIO
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'RFOLIO',:old.rfolio_id,null,null,null );
end; 

RT_RISKCTRL
CREATE OR REPLACE TRIGGER RT_RISKCTRL
BEFORE UPDATE OR INSERT ON RISKCTRL
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'RISKCTRL',:old.risk_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.risk_id)
      and table_name = 'RISKCTRL';
    END IF;
  END IF;
end; 

RT_RISKCTRL_DEL
CREATE OR REPLACE TRIGGER RT_RISKCTRL_DEL
BEFORE DELETE ON RISKCTRL
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'RISKCTRL',:old.risk_id,null,null,null
  	,:old.proj_id );
end; 

RT_RISKTYPE
CREATE OR REPLACE TRIGGER RT_RISKTYPE
BEFORE UPDATE OR INSERT ON RISKTYPE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'RISKTYPE',:old.risk_type_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.risk_type_id)
      and table_name = 'RISKTYPE';
    END IF;
  END IF;
end; 

RT_RISKTYPE_DEL
CREATE OR REPLACE TRIGGER RT_RISKTYPE_DEL
BEFORE DELETE ON RISKTYPE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'RISKTYPE',:old.risk_type_id,null,null,null );
end; 

RT_RLFOLIO
CREATE OR REPLACE TRIGGER RT_RLFOLIO
BEFORE UPDATE OR INSERT ON RLFOLIO
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'RLFOLIO',:old.rlfolio_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.rlfolio_id)
      and table_name = 'RLFOLIO';
    END IF;
  END IF;
end; 

RT_RLFOLIO_DEL
CREATE OR REPLACE TRIGGER RT_RLFOLIO_DEL
BEFORE DELETE ON RLFOLIO
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'RLFOLIO',:old.rlfolio_id,null,null,null );
end; 

RT_ROLFOLIO
CREATE OR REPLACE TRIGGER RT_ROLFOLIO
BEFORE UPDATE OR INSERT ON ROLFOLIO
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.rlfolio_id)
and pk2 = TO_CHAR(:new.role_id)
    and table_name = 'ROLFOLIO';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'ROLFOLIO',:old.rlfolio_id,:old.role_id,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.rlfolio_id)
and pk2 = TO_CHAR(:old.role_id)
      and table_name = 'ROLFOLIO';
    END IF;
  END IF;
end; 

RT_ROLFOLIO_DEL
CREATE OR REPLACE TRIGGER RT_ROLFOLIO_DEL
BEFORE DELETE ON ROLFOLIO
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'ROLFOLIO',:old.rlfolio_id,:old.role_id,null,null );
end; 

RT_ROLERATE
CREATE OR REPLACE TRIGGER RT_ROLERATE
BEFORE UPDATE OR INSERT ON ROLERATE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'ROLERATE',:old.role_rate_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.role_rate_id)
      and table_name = 'ROLERATE';
    END IF;
  END IF;
end; 

RT_ROLERATE_DEL
CREATE OR REPLACE TRIGGER RT_ROLERATE_DEL
BEFORE DELETE ON ROLERATE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'ROLERATE',:old.role_rate_id,null,null,null );
end; 

RT_ROLELIMIT
CREATE OR REPLACE TRIGGER RT_ROLELIMIT
BEFORE UPDATE OR INSERT ON ROLELIMIT
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'ROLELIMIT',:old.rolelimit_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.rolelimit_id)
      and table_name = 'ROLELIMIT';
    END IF;
  END IF;
end; 

RT_ROLELIMIT_DEL
CREATE OR REPLACE TRIGGER RT_ROLELIMIT_DEL
BEFORE DELETE ON ROLELIMIT
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'ROLELIMIT',:old.rolelimit_id,null,null,null );
end; 

RT_ROLES
CREATE OR REPLACE TRIGGER RT_ROLES
BEFORE UPDATE OR INSERT ON ROLES
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'ROLES',:old.role_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.role_id)
      and table_name = 'ROLES';
    END IF;
  END IF;
end; 

RT_ROLES_DEL
CREATE OR REPLACE TRIGGER RT_ROLES_DEL
BEFORE DELETE ON ROLES
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'ROLES',:old.role_id,null,null,null );
end; 

RT_RPT
CREATE OR REPLACE TRIGGER RT_RPT
BEFORE UPDATE OR INSERT ON RPT
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'RPT',:old.rpt_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.rpt_id)
      and table_name = 'RPT';
    END IF;
  END IF;
end; 

RT_RPT_DEL
CREATE OR REPLACE TRIGGER RT_RPT_DEL
BEFORE DELETE ON RPT
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'RPT',:old.rpt_id,null,null,null
  	,:old.proj_id );
end; 

RT_RPTBATCH
CREATE OR REPLACE TRIGGER RT_RPTBATCH
BEFORE UPDATE OR INSERT ON RPTBATCH
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'RPTBATCH',:old.rpt_batch_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.rpt_batch_id)
      and table_name = 'RPTBATCH';
    END IF;
  END IF;
end; 

RT_RPTBATCH_DEL
CREATE OR REPLACE TRIGGER RT_RPTBATCH_DEL
BEFORE DELETE ON RPTBATCH
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'RPTBATCH',:old.rpt_batch_id,null,null,null
  	,:old.proj_id );
end; 

RT_RPTGROUP
CREATE OR REPLACE TRIGGER RT_RPTGROUP
BEFORE UPDATE OR INSERT ON RPTGROUP
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'RPTGROUP',:old.rpt_group_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.rpt_group_id)
      and table_name = 'RPTGROUP';
    END IF;
  END IF;
end; 

RT_RPTGROUP_DEL
CREATE OR REPLACE TRIGGER RT_RPTGROUP_DEL
BEFORE DELETE ON RPTGROUP
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'RPTGROUP',:old.rpt_group_id,null,null,null );
end; 

RT_RPTLIST
CREATE OR REPLACE TRIGGER RT_RPTLIST
BEFORE UPDATE OR INSERT ON RPTLIST
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.rpt_batch_id)
and pk2 = TO_CHAR(:new.rpt_id)
    and table_name = 'RPTLIST';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'RPTLIST',:old.rpt_batch_id,:old.rpt_id,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.rpt_batch_id)
and pk2 = TO_CHAR(:old.rpt_id)
      and table_name = 'RPTLIST';
    END IF;
  END IF;
end; 

RT_RPTLIST_DEL
CREATE OR REPLACE TRIGGER RT_RPTLIST_DEL
BEFORE DELETE ON RPTLIST
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'RPTLIST',:old.rpt_batch_id,:old.rpt_id,null,null );
end; 

RT_RSRC
CREATE OR REPLACE TRIGGER RT_RSRC
BEFORE UPDATE OR INSERT ON RSRC
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'RSRC',:old.rsrc_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.rsrc_id)
      and table_name = 'RSRC';
    END IF;
  END IF;
end; 

RT_RSRC_DEL
CREATE OR REPLACE TRIGGER RT_RSRC_DEL
BEFORE DELETE ON RSRC
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'RSRC',:old.rsrc_id,null,null,null );
end; 

RT_RSRCANDASH
CREATE OR REPLACE TRIGGER RT_RSRCANDASH
BEFORE UPDATE OR INSERT ON RSRCANDASH
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.dashboard_id)
and pk2 = TO_CHAR(:new.rsrcan_view_id)
    and table_name = 'RSRCANDASH';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'RSRCANDASH',:old.dashboard_id,:old.rsrcan_view_id,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.dashboard_id)
and pk2 = TO_CHAR(:old.rsrcan_view_id)
      and table_name = 'RSRCANDASH';
    END IF;
  END IF;
end; 

RT_RSRCANDASH_DEL
CREATE OR REPLACE TRIGGER RT_RSRCANDASH_DEL
BEFORE DELETE ON RSRCANDASH
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'RSRCANDASH',:old.dashboard_id,:old.rsrcan_view_id,null,null );
end; 

RT_RSRCANVIEW
CREATE OR REPLACE TRIGGER RT_RSRCANVIEW
BEFORE UPDATE OR INSERT ON RSRCANVIEW
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'RSRCANVIEW',:old.rsrcan_view_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.rsrcan_view_id)
      and table_name = 'RSRCANVIEW';
    END IF;
  END IF;
end; 

RT_RSRCANVIEW_DEL
CREATE OR REPLACE TRIGGER RT_RSRCANVIEW_DEL
BEFORE DELETE ON RSRCANVIEW
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'RSRCANVIEW',:old.rsrcan_view_id,null,null,null );
end; 

RT_RSRCCURV
CREATE OR REPLACE TRIGGER RT_RSRCCURV
BEFORE UPDATE OR INSERT ON RSRCCURV
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'RSRCCURV',:old.curv_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.curv_id)
      and table_name = 'RSRCCURV';
    END IF;
  END IF;
end; 

RT_RSRCCURV_DEL
CREATE OR REPLACE TRIGGER RT_RSRCCURV_DEL
BEFORE DELETE ON RSRCCURV
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'RSRCCURV',:old.curv_id,null,null,null );
end; 

RT_RSRCHOUR
CREATE OR REPLACE TRIGGER RT_RSRCHOUR
BEFORE UPDATE OR INSERT ON RSRCHOUR
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'RSRCHOUR',:old.rsrc_hr_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.rsrc_hr_id)
      and table_name = 'RSRCHOUR';
    END IF;
  END IF;
end; 

RT_RSRCHOUR_DEL
CREATE OR REPLACE TRIGGER RT_RSRCHOUR_DEL
BEFORE DELETE ON RSRCHOUR
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'RSRCHOUR',:old.rsrc_hr_id,null,null,null
  	,:old.proj_id );
end; 

RT_RSRCPROP
CREATE OR REPLACE TRIGGER RT_RSRCPROP
BEFORE UPDATE OR INSERT ON RSRCPROP
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.rsrc_id)
and pk2 = :new.prop_name
    and table_name = 'RSRCPROP';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'RSRCPROP',:old.rsrc_id,:old.prop_name,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.rsrc_id)
and pk2 = :old.prop_name
      and table_name = 'RSRCPROP';
    END IF;
  END IF;
end; 

RT_RSRCPROP_DEL
CREATE OR REPLACE TRIGGER RT_RSRCPROP_DEL
BEFORE DELETE ON RSRCPROP
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'RSRCPROP',:old.rsrc_id,:old.prop_name,null,null );
end; 

RT_RSRCRATE
CREATE OR REPLACE TRIGGER RT_RSRCRATE
BEFORE UPDATE OR INSERT ON RSRCRATE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'RSRCRATE',:old.rsrc_rate_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.rsrc_rate_id)
      and table_name = 'RSRCRATE';
    END IF;
  END IF;
end; 

RT_RSRCRATE_DEL
CREATE OR REPLACE TRIGGER RT_RSRCRATE_DEL
BEFORE DELETE ON RSRCRATE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'RSRCRATE',:old.rsrc_rate_id,null,null,null );
end; 

RT_RSRCRCAT
CREATE OR REPLACE TRIGGER RT_RSRCRCAT
BEFORE UPDATE OR INSERT ON RSRCRCAT
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.rsrc_id)
and pk2 = TO_CHAR(:new.rsrc_catg_type_id)
    and table_name = 'RSRCRCAT';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'RSRCRCAT',:old.rsrc_id,:old.rsrc_catg_type_id,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.rsrc_id)
and pk2 = TO_CHAR(:old.rsrc_catg_type_id)
      and table_name = 'RSRCRCAT';
    END IF;
  END IF;
end; 

RT_RSRCRCAT_DEL
CREATE OR REPLACE TRIGGER RT_RSRCRCAT_DEL
BEFORE DELETE ON RSRCRCAT
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'RSRCRCAT',:old.rsrc_id,:old.rsrc_catg_type_id,null,null );
end; 

RT_RSRCROLE
CREATE OR REPLACE TRIGGER RT_RSRCROLE
BEFORE UPDATE OR INSERT ON RSRCROLE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.rsrc_id)
and pk2 = TO_CHAR(:new.role_id)
    and table_name = 'RSRCROLE';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'RSRCROLE',:old.rsrc_id,:old.role_id,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.rsrc_id)
and pk2 = TO_CHAR(:old.role_id)
      and table_name = 'RSRCROLE';
    END IF;
  END IF;
end; 

RT_RSRCROLE_DEL
CREATE OR REPLACE TRIGGER RT_RSRCROLE_DEL
BEFORE DELETE ON RSRCROLE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'RSRCROLE',:old.rsrc_id,:old.role_id,null,null );
end; 

RT_RSRCSEC
CREATE OR REPLACE TRIGGER RT_RSRCSEC
BEFORE UPDATE OR INSERT ON RSRCSEC
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.user_id)
and pk2 = TO_CHAR(:new.rsrc_id)
    and table_name = 'RSRCSEC';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'RSRCSEC',:old.user_id,:old.rsrc_id,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.user_id)
and pk2 = TO_CHAR(:old.rsrc_id)
      and table_name = 'RSRCSEC';
    END IF;
  END IF;
end; 

RT_RSRCSEC_DEL
CREATE OR REPLACE TRIGGER RT_RSRCSEC_DEL
BEFORE DELETE ON RSRCSEC
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'RSRCSEC',:old.user_id,:old.rsrc_id,null,null );
end; 

RT_RSRFOLIO
CREATE OR REPLACE TRIGGER RT_RSRFOLIO
BEFORE UPDATE OR INSERT ON RSRFOLIO
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.rfolio_id)
and pk2 = TO_CHAR(:new.rsrc_id)
    and table_name = 'RSRFOLIO';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'RSRFOLIO',:old.rfolio_id,:old.rsrc_id,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.rfolio_id)
and pk2 = TO_CHAR(:old.rsrc_id)
      and table_name = 'RSRFOLIO';
    END IF;
  END IF;
end; 

RT_RSRFOLIO_DEL
CREATE OR REPLACE TRIGGER RT_RSRFOLIO_DEL
BEFORE DELETE ON RSRFOLIO
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'RSRFOLIO',:old.rfolio_id,:old.rsrc_id,null,null );
end; 

RT_SCENARIO
CREATE OR REPLACE TRIGGER RT_SCENARIO
BEFORE UPDATE OR INSERT ON SCENARIO
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'SCENARIO',:old.scenario_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.scenario_id)
      and table_name = 'SCENARIO';
    END IF;
  END IF;
end; 

RT_SCENARIO_DEL
CREATE OR REPLACE TRIGGER RT_SCENARIO_DEL
BEFORE DELETE ON SCENARIO
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'SCENARIO',:old.scenario_id,null,null,null );
end; 

RT_SCENPROJ
CREATE OR REPLACE TRIGGER RT_SCENPROJ
BEFORE UPDATE OR INSERT ON SCENPROJ
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.scenario_id)
and pk2 = TO_CHAR(:new.proj_id)
    and table_name = 'SCENPROJ';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'SCENPROJ',:old.scenario_id,:old.proj_id,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.scenario_id)
and pk2 = TO_CHAR(:old.proj_id)
      and table_name = 'SCENPROJ';
    END IF;
  END IF;
end; 

RT_SCENPROJ_DEL
CREATE OR REPLACE TRIGGER RT_SCENPROJ_DEL
BEFORE DELETE ON SCENPROJ
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'SCENPROJ',:old.scenario_id,:old.proj_id,null,null
  	,:old.proj_id );
end; 

RT_SCENUSER
CREATE OR REPLACE TRIGGER RT_SCENUSER
BEFORE UPDATE OR INSERT ON SCENUSER
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
    :NEW.update_user := prm_audit.g_prm_user_name;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.g_prm_user_name;
    :NEW.create_date := SYSDATE;
  END IF;

  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'SCENUSER',:old.scenario_id,:old.user_id,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.scenario_id)
and pk2 = TO_CHAR(:old.user_id)
      and table_name = 'SCENUSER';
    END IF;
  END IF;
end; 

RT_SCENUSER_DEL
CREATE OR REPLACE TRIGGER RT_SCENUSER_DEL
BEFORE DELETE ON SCENUSER
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'SCENUSER',:old.scenario_id,:old.user_id,null,null );
end; 

RT_SCENROLE
CREATE OR REPLACE TRIGGER RT_SCENROLE
BEFORE UPDATE OR INSERT ON SCENROLE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.scenario_id)
and pk2 = TO_CHAR(:new.role_id)
    and table_name = 'SCENROLE';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'SCENROLE',:old.scenario_id,:old.role_id,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.scenario_id)
and pk2 = TO_CHAR(:old.role_id)
      and table_name = 'SCENROLE';
    END IF;
  END IF;
end; 

RT_SCENROLE_DEL
CREATE OR REPLACE TRIGGER RT_SCENROLE_DEL
BEFORE DELETE ON SCENROLE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'SCENROLE',:old.scenario_id,:old.role_id,null,null );
end; 

RT_SETTINGS
CREATE OR REPLACE TRIGGER RT_SETTINGS
BEFORE UPDATE OR INSERT ON SETTINGS
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.namespace)
and pk2 = :new.setting_name
    and table_name = 'SETTINGS';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'SETTINGS',:old.namespace,:old.setting_name,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.namespace)
and pk2 = :old.setting_name
      and table_name = 'SETTINGS';
    END IF;
  END IF;
end; 

RT_SETTINGS_DEL
CREATE OR REPLACE TRIGGER RT_SETTINGS_DEL
BEFORE DELETE ON SETTINGS
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'SETTINGS',:old.namespace,:old.setting_name,null,null );
end; 

RT_SHIFT
CREATE OR REPLACE TRIGGER RT_SHIFT
BEFORE UPDATE OR INSERT ON SHIFT
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'SHIFT',:old.shift_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.shift_id)
      and table_name = 'SHIFT';
    END IF;
  END IF;
end; 

RT_SHIFT_DEL
CREATE OR REPLACE TRIGGER RT_SHIFT_DEL
BEFORE DELETE ON SHIFT
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'SHIFT',:old.shift_id,null,null,null );
end; 

RT_SHIFTPER
CREATE OR REPLACE TRIGGER RT_SHIFTPER
BEFORE UPDATE OR INSERT ON SHIFTPER
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'SHIFTPER',:old.shift_period_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.shift_period_id)
      and table_name = 'SHIFTPER';
    END IF;
  END IF;
end; 

RT_SHIFTPER_DEL
CREATE OR REPLACE TRIGGER RT_SHIFTPER_DEL
BEFORE DELETE ON SHIFTPER
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'SHIFTPER',:old.shift_period_id,null,null,null );
end; 

RT_TASK
CREATE OR REPLACE TRIGGER RT_TASK
BEFORE UPDATE OR INSERT ON TASK
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'TASK',:old.task_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.task_id)
      and table_name = 'TASK';
    END IF;
  END IF;
end; 

RT_TASK_DEL
CREATE OR REPLACE TRIGGER RT_TASK_DEL
BEFORE DELETE ON TASK
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'TASK',:old.task_id,null,null,null
  	,:old.proj_id );
end; 

RT_TASKACTV
CREATE OR REPLACE TRIGGER RT_TASKACTV
BEFORE UPDATE OR INSERT ON TASKACTV
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.task_id)
and pk2 = TO_CHAR(:new.actv_code_type_id)
    and table_name = 'TASKACTV';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'TASKACTV',:old.task_id,:old.actv_code_type_id,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.task_id)
and pk2 = TO_CHAR(:old.actv_code_type_id)
      and table_name = 'TASKACTV';
    END IF;
  END IF;
end; 

RT_TASKACTV_DEL
CREATE OR REPLACE TRIGGER RT_TASKACTV_DEL
BEFORE DELETE ON TASKACTV
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'TASKACTV',:old.task_id,:old.actv_code_type_id,null,null
  	,:old.proj_id );
end; 

RT_TASKDOC
CREATE OR REPLACE TRIGGER RT_TASKDOC
BEFORE UPDATE OR INSERT ON TASKDOC
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'TASKDOC',:old.taskdoc_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.taskdoc_id)
      and table_name = 'TASKDOC';
    END IF;
  END IF;
end; 

RT_TASKDOC_DEL
CREATE OR REPLACE TRIGGER RT_TASKDOC_DEL
BEFORE DELETE ON TASKDOC
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'TASKDOC',:old.taskdoc_id,null,null,null
  	,:old.proj_id );
end; 

RT_TASKFDBK
CREATE OR REPLACE TRIGGER RT_TASKFDBK
BEFORE UPDATE OR INSERT ON TASKFDBK
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'TASKFDBK',:old.task_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.task_id)
      and table_name = 'TASKFDBK';
    END IF;
  END IF;
end; 

RT_TASKFDBK_DEL
CREATE OR REPLACE TRIGGER RT_TASKFDBK_DEL
BEFORE DELETE ON TASKFDBK
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'TASKFDBK',:old.task_id,null,null,null
  	,:old.proj_id );
end; 

RT_TASKFIN
CREATE OR REPLACE TRIGGER RT_TASKFIN
BEFORE UPDATE OR INSERT ON TASKFIN
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.fin_dates_id)
and pk2 = TO_CHAR(:new.task_id)
    and table_name = 'TASKFIN';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'TASKFIN',:old.fin_dates_id,:old.task_id,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.fin_dates_id)
and pk2 = TO_CHAR(:old.task_id)
      and table_name = 'TASKFIN';
    END IF;
  END IF;
end; 

RT_TASKFIN_DEL
CREATE OR REPLACE TRIGGER RT_TASKFIN_DEL
BEFORE DELETE ON TASKFIN
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'TASKFIN',:old.fin_dates_id,:old.task_id,null,null
  	,:old.proj_id );
end; 

RT_TASKMEMO
CREATE OR REPLACE TRIGGER RT_TASKMEMO
BEFORE UPDATE OR INSERT ON TASKMEMO
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'TASKMEMO',:old.memo_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.memo_id)
      and table_name = 'TASKMEMO';
    END IF;
  END IF;
end; 

RT_TASKMEMO_DEL
CREATE OR REPLACE TRIGGER RT_TASKMEMO_DEL
BEFORE DELETE ON TASKMEMO
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'TASKMEMO',:old.memo_id,null,null,null
  	,:old.proj_id );
end; 

RT_TASKNOTE
CREATE OR REPLACE TRIGGER RT_TASKNOTE
BEFORE UPDATE OR INSERT ON TASKNOTE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'TASKNOTE',:old.task_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.task_id)
      and table_name = 'TASKNOTE';
    END IF;
  END IF;
end; 

RT_TASKNOTE_DEL
CREATE OR REPLACE TRIGGER RT_TASKNOTE_DEL
BEFORE DELETE ON TASKNOTE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'TASKNOTE',:old.task_id,null,null,null
  	,:old.proj_id );
end; 

RT_TASKPRED
CREATE OR REPLACE TRIGGER RT_TASKPRED
BEFORE UPDATE OR INSERT ON TASKPRED
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'TASKPRED',:old.task_pred_id,null,null,null
  	,:old.proj_id );
    	
      if :old.pred_proj_id != :old.proj_id then
        INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
        values ( sysdate,'TASKPRED',:old.task_pred_id,null,null,null
  	,:old.pred_proj_id );
      end if;
   	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.task_pred_id)
      and table_name = 'TASKPRED';
    END IF;
  END IF;
end; 

RT_TASKPRED_DEL
CREATE OR REPLACE TRIGGER RT_TASKPRED_DEL
BEFORE DELETE ON TASKPRED
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'TASKPRED',:old.task_pred_id,null,null,null
  	,:old.proj_id );
	if :old.pred_proj_id != :old.proj_id then
    INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
    values ( sysdate,'TASKPRED',:old.task_pred_id,null,null,null
  	,:old.pred_proj_id );
   end if;
 	
end; 

RT_TASKPROC
CREATE OR REPLACE TRIGGER RT_TASKPROC
BEFORE UPDATE OR INSERT ON TASKPROC
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'TASKPROC',:old.proc_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.proc_id)
      and table_name = 'TASKPROC';
    END IF;
  END IF;
end; 

RT_TASKPROC_DEL
CREATE OR REPLACE TRIGGER RT_TASKPROC_DEL
BEFORE DELETE ON TASKPROC
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'TASKPROC',:old.proc_id,null,null,null
  	,:old.proj_id );
end; 

RT_TASKRSRC
CREATE OR REPLACE TRIGGER RT_TASKRSRC
BEFORE UPDATE OR INSERT ON TASKRSRC
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'TASKRSRC',:old.taskrsrc_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.taskrsrc_id)
      and table_name = 'TASKRSRC';
    END IF;
  END IF;
end; 

RT_TASKRSRC_DEL
CREATE OR REPLACE TRIGGER RT_TASKRSRC_DEL
BEFORE DELETE ON TASKRSRC
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'TASKRSRC',:old.taskrsrc_id,null,null,null
  	,:old.proj_id );
end; 

RT_TASKSUM
CREATE OR REPLACE TRIGGER RT_TASKSUM
BEFORE UPDATE OR INSERT ON TASKSUM
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'TASKSUM',:old.task_sum_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.task_sum_id)
      and table_name = 'TASKSUM';
    END IF;
  END IF;
end; 

RT_TASKSUM_DEL
CREATE OR REPLACE TRIGGER RT_TASKSUM_DEL
BEFORE DELETE ON TASKSUM
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'TASKSUM',:old.task_sum_id,null,null,null
  	,:old.proj_id );
end; 

RT_TASKSUMFIN
CREATE OR REPLACE TRIGGER RT_TASKSUMFIN
BEFORE UPDATE OR INSERT ON TASKSUMFIN
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'TASKSUMFIN',:old.task_sum_fin_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.task_sum_fin_id)
      and table_name = 'TASKSUMFIN';
    END IF;
  END IF;
end; 

RT_TASKSUMFIN_DEL
CREATE OR REPLACE TRIGGER RT_TASKSUMFIN_DEL
BEFORE DELETE ON TASKSUMFIN
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'TASKSUMFIN',:old.task_sum_fin_id,null,null,null
  	,:old.proj_id );
end; 

RT_TASKUSER
CREATE OR REPLACE TRIGGER RT_TASKUSER
BEFORE UPDATE OR INSERT ON TASKUSER
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.task_id)
and pk2 = TO_CHAR(:new.user_id)
    and table_name = 'TASKUSER';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'TASKUSER',:old.task_id,:old.user_id,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.task_id)
and pk2 = TO_CHAR(:old.user_id)
      and table_name = 'TASKUSER';
    END IF;
  END IF;
end; 

RT_TASKUSER_DEL
CREATE OR REPLACE TRIGGER RT_TASKUSER_DEL
BEFORE DELETE ON TASKUSER
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'TASKUSER',:old.task_id,:old.user_id,null,null
  	,:old.proj_id );
end; 

RT_TASKWKSP
CREATE OR REPLACE TRIGGER RT_TASKWKSP
BEFORE UPDATE OR INSERT ON TASKWKSP
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.workspace_id)
and pk2 = TO_CHAR(:new.task_id)
    and table_name = 'TASKWKSP';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'TASKWKSP',:old.workspace_id,:old.task_id,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.workspace_id)
and pk2 = TO_CHAR(:old.task_id)
      and table_name = 'TASKWKSP';
    END IF;
  END IF;
end; 

RT_TASKWKSP_DEL
CREATE OR REPLACE TRIGGER RT_TASKWKSP_DEL
BEFORE DELETE ON TASKWKSP
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'TASKWKSP',:old.workspace_id,:old.task_id,null,null
  	,:old.proj_id );
end; 

RT_THRSPARM
CREATE OR REPLACE TRIGGER RT_THRSPARM
BEFORE UPDATE OR INSERT ON THRSPARM
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'THRSPARM',:old.thresh_parm_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.thresh_parm_id)
      and table_name = 'THRSPARM';
    END IF;
  END IF;
end; 

RT_THRSPARM_DEL
CREATE OR REPLACE TRIGGER RT_THRSPARM_DEL
BEFORE DELETE ON THRSPARM
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'THRSPARM',:old.thresh_parm_id,null,null,null );
end; 

RT_TIMESHT
CREATE OR REPLACE TRIGGER RT_TIMESHT
BEFORE UPDATE OR INSERT ON TIMESHT
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.ts_id)
and pk2 = TO_CHAR(:new.rsrc_id)
    and table_name = 'TIMESHT';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'TIMESHT',:old.ts_id,:old.rsrc_id,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.ts_id)
and pk2 = TO_CHAR(:old.rsrc_id)
      and table_name = 'TIMESHT';
    END IF;
  END IF;
end; 

RT_TIMESHT_DEL
CREATE OR REPLACE TRIGGER RT_TIMESHT_DEL
BEFORE DELETE ON TIMESHT
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'TIMESHT',:old.ts_id,:old.rsrc_id,null,null );
end; 

RT_TMPLCATG
CREATE OR REPLACE TRIGGER RT_TMPLCATG
BEFORE UPDATE OR INSERT ON TMPLCATG
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'TMPLCATG',:old.tmplcatg_catg_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.tmplcatg_catg_id)
      and table_name = 'TMPLCATG';
    END IF;
  END IF;
end; 

RT_TMPLCATG_DEL
CREATE OR REPLACE TRIGGER RT_TMPLCATG_DEL
BEFORE DELETE ON TMPLCATG
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'TMPLCATG',:old.tmplcatg_catg_id,null,null,null );
end; 

RT_TRAKVIEW
CREATE OR REPLACE TRIGGER RT_TRAKVIEW
BEFORE UPDATE OR INSERT ON TRAKVIEW
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'TRAKVIEW',:old.track_view_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.track_view_id)
      and table_name = 'TRAKVIEW';
    END IF;
  END IF;
end; 

RT_TRAKVIEW_DEL
CREATE OR REPLACE TRIGGER RT_TRAKVIEW_DEL
BEFORE DELETE ON TRAKVIEW
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'TRAKVIEW',:old.track_view_id,null,null,null );
end; 

RT_TRSRCFIN
CREATE OR REPLACE TRIGGER RT_TRSRCFIN
BEFORE UPDATE OR INSERT ON TRSRCFIN
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.fin_dates_id)
and pk2 = TO_CHAR(:new.taskrsrc_id)
    and table_name = 'TRSRCFIN';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'TRSRCFIN',:old.fin_dates_id,:old.taskrsrc_id,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.fin_dates_id)
and pk2 = TO_CHAR(:old.taskrsrc_id)
      and table_name = 'TRSRCFIN';
    END IF;
  END IF;
end; 

RT_TRSRCFIN_DEL
CREATE OR REPLACE TRIGGER RT_TRSRCFIN_DEL
BEFORE DELETE ON TRSRCFIN
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'TRSRCFIN',:old.fin_dates_id,:old.taskrsrc_id,null,null
  	,:old.proj_id );
end; 

RT_TRSRCSUM
CREATE OR REPLACE TRIGGER RT_TRSRCSUM
BEFORE UPDATE OR INSERT ON TRSRCSUM
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'TRSRCSUM',:old.taskrsrc_sum_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.taskrsrc_sum_id)
      and table_name = 'TRSRCSUM';
    END IF;
  END IF;
end; 

RT_TRSRCSUM_DEL
CREATE OR REPLACE TRIGGER RT_TRSRCSUM_DEL
BEFORE DELETE ON TRSRCSUM
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'TRSRCSUM',:old.taskrsrc_sum_id,null,null,null
  	,:old.proj_id );
end; 

RT_TRSRCSUMFN
CREATE OR REPLACE TRIGGER RT_TRSRCSUMFN
BEFORE UPDATE OR INSERT ON TRSRCSUMFN
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'TRSRCSUMFN',:old.trsrc_sum_fin_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.trsrc_sum_fin_id)
      and table_name = 'TRSRCSUMFN';
    END IF;
  END IF;
end; 

RT_TRSRCSUMFN_DEL
CREATE OR REPLACE TRIGGER RT_TRSRCSUMFN_DEL
BEFORE DELETE ON TRSRCSUMFN
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'TRSRCSUMFN',:old.trsrc_sum_fin_id,null,null,null
  	,:old.proj_id );
end; 

RT_TSDATES
CREATE OR REPLACE TRIGGER RT_TSDATES
BEFORE UPDATE OR INSERT ON TSDATES
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'TSDATES',:old.ts_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.ts_id)
      and table_name = 'TSDATES';
    END IF;
  END IF;
end; 

RT_TSDATES_DEL
CREATE OR REPLACE TRIGGER RT_TSDATES_DEL
BEFORE DELETE ON TSDATES
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'TSDATES',:old.ts_id,null,null,null );
end; 

RT_TSDELEGATE
CREATE OR REPLACE TRIGGER RT_TSDELEGATE
BEFORE UPDATE OR INSERT ON TSDELEGATE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'TSDELEGATE',:old.ts_delegate_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.ts_delegate_id)
      and table_name = 'TSDELEGATE';
    END IF;
  END IF;
end; 

RT_TSDELEGATE_DEL
CREATE OR REPLACE TRIGGER RT_TSDELEGATE_DEL
BEFORE DELETE ON TSDELEGATE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'TSDELEGATE',:old.ts_delegate_id,null,null,null
  	,:old.proj_id );
end; 

RT_UDFCODE
CREATE OR REPLACE TRIGGER RT_UDFCODE
BEFORE UPDATE OR INSERT ON UDFCODE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'UDFCODE',:old.udf_code_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.udf_code_id)
      and table_name = 'UDFCODE';
    END IF;
  END IF;
end; 

RT_UDFCODE_DEL
CREATE OR REPLACE TRIGGER RT_UDFCODE_DEL
BEFORE DELETE ON UDFCODE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'UDFCODE',:old.udf_code_id,null,null,null );
end; 

RT_UDFTYPE
CREATE OR REPLACE TRIGGER RT_UDFTYPE
BEFORE UPDATE OR INSERT ON UDFTYPE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'UDFTYPE',:old.udf_type_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.udf_type_id)
      and table_name = 'UDFTYPE';
    END IF;
  END IF;
end; 

RT_UDFTYPE_DEL
CREATE OR REPLACE TRIGGER RT_UDFTYPE_DEL
BEFORE DELETE ON UDFTYPE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'UDFTYPE',:old.udf_type_id,null,null,null );
end; 

RT_UDFVALUE
CREATE OR REPLACE TRIGGER RT_UDFVALUE
BEFORE UPDATE OR INSERT ON UDFVALUE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.udf_type_id)
and pk2 = TO_CHAR(:new.fk_id)
    and table_name = 'UDFVALUE';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'UDFVALUE',:old.udf_type_id,:old.fk_id,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.udf_type_id)
and pk2 = TO_CHAR(:old.fk_id)
      and table_name = 'UDFVALUE';
    END IF;
  END IF;
end; 

RT_UDFVALUE_DEL
CREATE OR REPLACE TRIGGER RT_UDFVALUE_DEL
BEFORE DELETE ON UDFVALUE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'UDFVALUE',:old.udf_type_id,:old.fk_id,null,null
  	,:old.proj_id );
end; 

RT_UMEASURE
CREATE OR REPLACE TRIGGER RT_UMEASURE
BEFORE UPDATE OR INSERT ON UMEASURE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'UMEASURE',:old.unit_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.unit_id)
      and table_name = 'UMEASURE';
    END IF;
  END IF;
end; 

RT_UMEASURE_DEL
CREATE OR REPLACE TRIGGER RT_UMEASURE_DEL
BEFORE DELETE ON UMEASURE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'UMEASURE',:old.unit_id,null,null,null );
end; 

RT_USERCOL
CREATE OR REPLACE TRIGGER RT_USERCOL
BEFORE UPDATE OR INSERT ON USERCOL
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'USERCOL',:old.user_col_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.user_col_id)
      and table_name = 'USERCOL';
    END IF;
  END IF;
end; 

RT_USERCOL_DEL
CREATE OR REPLACE TRIGGER RT_USERCOL_DEL
BEFORE DELETE ON USERCOL
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'USERCOL',:old.user_col_id,null,null,null );
end; 

RT_USERDATA
CREATE OR REPLACE TRIGGER RT_USERDATA
BEFORE UPDATE OR INSERT ON USERDATA
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'USERDATA',:old.user_data_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.user_data_id)
      and table_name = 'USERDATA';
    END IF;
  END IF;
end; 

RT_USERDATA_DEL
CREATE OR REPLACE TRIGGER RT_USERDATA_DEL
BEFORE DELETE ON USERDATA
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'USERDATA',:old.user_data_id,null,null,null );
end; 

RT_USERENG
CREATE OR REPLACE TRIGGER RT_USERENG
BEFORE UPDATE OR INSERT ON USERENG
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'USERENG',:old.user_eng_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.user_eng_id)
      and table_name = 'USERENG';
    END IF;
  END IF;
end; 

RT_USERENG_DEL
CREATE OR REPLACE TRIGGER RT_USERENG_DEL
BEFORE DELETE ON USERENG
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'USERENG',:old.user_eng_id,null,null,null );
end; 

RT_USEROBS
CREATE OR REPLACE TRIGGER RT_USEROBS
BEFORE UPDATE OR INSERT ON USEROBS
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.user_id)
and pk2 = TO_CHAR(:new.obs_id)
    and table_name = 'USEROBS';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'USEROBS',:old.user_id,:old.obs_id,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.user_id)
and pk2 = TO_CHAR(:old.obs_id)
      and table_name = 'USEROBS';
    END IF;
  END IF;
end; 

RT_USEROBS_DEL
CREATE OR REPLACE TRIGGER RT_USEROBS_DEL
BEFORE DELETE ON USEROBS
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'USEROBS',:old.user_id,:old.obs_id,null,null );
end; 

RT_USEROPEN
CREATE OR REPLACE TRIGGER RT_USEROPEN
BEFORE UPDATE OR INSERT ON USEROPEN
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'USEROPEN',:old.user_open_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.user_open_id)
      and table_name = 'USEROPEN';
    END IF;
  END IF;
end; 

RT_USEROPEN_DEL
CREATE OR REPLACE TRIGGER RT_USEROPEN_DEL
BEFORE DELETE ON USEROPEN
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'USEROPEN',:old.user_open_id,null,null,null );
end; 

RT_USROPNVAL
CREATE OR REPLACE TRIGGER RT_USROPNVAL
BEFORE UPDATE OR INSERT ON USROPNVAL
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.user_open_id)
and pk2 = TO_CHAR(:new.pk_id)
and pk3 = TO_CHAR(:new.usropn_type)
    and table_name = 'USROPNVAL';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'USROPNVAL',:old.user_open_id,:old.pk_id,:old.usropn_type,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.user_open_id)
and pk2 = TO_CHAR(:old.pk_id)
and pk3 = TO_CHAR(:old.usropn_type)
      and table_name = 'USROPNVAL';
    END IF;
  END IF;
end; 

RT_USROPNVAL_DEL
CREATE OR REPLACE TRIGGER RT_USROPNVAL_DEL
BEFORE DELETE ON USROPNVAL
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'USROPNVAL',:old.user_open_id,:old.pk_id,:old.usropn_type,null );
end; 

RT_USERS
CREATE OR REPLACE TRIGGER RT_USERS
BEFORE UPDATE OR INSERT ON USERS
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
    :NEW.update_user := prm_audit.g_prm_user_name;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.g_prm_user_name;
    :NEW.create_date := SYSDATE;
  END IF;

  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'USERS',:old.user_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.user_id)
      and table_name = 'USERS';
    END IF;
  END IF;
end; 

RT_USERS_DEL
CREATE OR REPLACE TRIGGER RT_USERS_DEL
BEFORE DELETE ON USERS
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'USERS',:old.user_id,null,null,null );
end; 

RT_USERSET
CREATE OR REPLACE TRIGGER RT_USERSET
BEFORE UPDATE OR INSERT ON USERSET
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.namespace)
and pk2 = :new.setting_name
and pk3 = TO_CHAR(:new.user_id)
    and table_name = 'USERSET';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'USERSET',:old.namespace,:old.setting_name,:old.user_id,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.namespace)
and pk2 = :old.setting_name
and pk3 = TO_CHAR(:old.user_id)
      and table_name = 'USERSET';
    END IF;
  END IF;
end; 

RT_USERSET_DEL
CREATE OR REPLACE TRIGGER RT_USERSET_DEL
BEFORE DELETE ON USERSET
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'USERSET',:old.namespace,:old.setting_name,:old.user_id,null );
end; 

RT_USERWKSP
CREATE OR REPLACE TRIGGER RT_USERWKSP
BEFORE UPDATE OR INSERT ON USERWKSP
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.user_id)
and pk2 = TO_CHAR(:new.workspace_id)
    and table_name = 'USERWKSP';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'USERWKSP',:old.user_id,:old.workspace_id,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.user_id)
and pk2 = TO_CHAR(:old.workspace_id)
      and table_name = 'USERWKSP';
    END IF;
  END IF;
end; 

RT_USERWKSP_DEL
CREATE OR REPLACE TRIGGER RT_USERWKSP_DEL
BEFORE DELETE ON USERWKSP
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'USERWKSP',:old.user_id,:old.workspace_id,null,null
  	,:old.proj_id );
end; 

RT_USESSION
CREATE OR REPLACE TRIGGER RT_USESSION
BEFORE UPDATE OR INSERT ON USESSION
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
    :NEW.update_user := prm_audit.g_prm_user_name;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.g_prm_user_name;
    :NEW.create_date := SYSDATE;
  END IF;

  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'USESSION',:old.session_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.session_id)
      and table_name = 'USESSION';
    END IF;
  END IF;
end; 

RT_USESSION_DEL
CREATE OR REPLACE TRIGGER RT_USESSION_DEL
BEFORE DELETE ON USESSION
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'USESSION',:old.session_id,null,null,null );
end; 

RT_VIEWPREF
CREATE OR REPLACE TRIGGER RT_VIEWPREF
BEFORE UPDATE OR INSERT ON VIEWPREF
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'VIEWPREF',:old.view_pref_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.view_pref_id)
      and table_name = 'VIEWPREF';
    END IF;
  END IF;
end; 

RT_VIEWPREF_DEL
CREATE OR REPLACE TRIGGER RT_VIEWPREF_DEL
BEFORE DELETE ON VIEWPREF
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'VIEWPREF',:old.view_pref_id,null,null,null );
end; 

RT_VWPREFDASH
CREATE OR REPLACE TRIGGER RT_VWPREFDASH
BEFORE UPDATE OR INSERT ON VWPREFDASH
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.dashboard_id)
and pk2 = TO_CHAR(:new.view_pref_id)
    and table_name = 'VWPREFDASH';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'VWPREFDASH',:old.dashboard_id,:old.view_pref_id,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.dashboard_id)
and pk2 = TO_CHAR(:old.view_pref_id)
      and table_name = 'VWPREFDASH';
    END IF;
  END IF;
end; 

RT_VWPREFDASH_DEL
CREATE OR REPLACE TRIGGER RT_VWPREFDASH_DEL
BEFORE DELETE ON VWPREFDASH
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'VWPREFDASH',:old.dashboard_id,:old.view_pref_id,null,null );
end; 

RT_VWPREFDATA
CREATE OR REPLACE TRIGGER RT_VWPREFDATA
BEFORE UPDATE OR INSERT ON VWPREFDATA
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.view_pref_id)
and pk2 = TO_CHAR(:new.view_pref_key)
    and table_name = 'VWPREFDATA';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'VWPREFDATA',:old.view_pref_id,:old.view_pref_key,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.view_pref_id)
and pk2 = TO_CHAR(:old.view_pref_key)
      and table_name = 'VWPREFDATA';
    END IF;
  END IF;
end; 

RT_VWPREFDATA_DEL
CREATE OR REPLACE TRIGGER RT_VWPREFDATA_DEL
BEFORE DELETE ON VWPREFDATA
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'VWPREFDATA',:old.view_pref_id,:old.view_pref_key,null,null );
end; 

RT_VWPREFUSER
CREATE OR REPLACE TRIGGER RT_VWPREFUSER
BEFORE UPDATE OR INSERT ON VWPREFUSER
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.view_pref_id)
and pk2 = TO_CHAR(:new.user_id)
    and table_name = 'VWPREFUSER';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'VWPREFUSER',:old.view_pref_id,:old.user_id,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.view_pref_id)
and pk2 = TO_CHAR(:old.user_id)
      and table_name = 'VWPREFUSER';
    END IF;
  END IF;
end; 

RT_VWPREFUSER_DEL
CREATE OR REPLACE TRIGGER RT_VWPREFUSER_DEL
BEFORE DELETE ON VWPREFUSER
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'VWPREFUSER',:old.view_pref_id,:old.user_id,null,null );
end; 

RT_VIEWPROP
CREATE OR REPLACE TRIGGER RT_VIEWPROP
BEFORE UPDATE OR INSERT ON VIEWPROP
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'VIEWPROP',:old.view_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.view_id)
      and table_name = 'VIEWPROP';
    END IF;
  END IF;
end; 

RT_VIEWPROP_DEL
CREATE OR REPLACE TRIGGER RT_VIEWPROP_DEL
BEFORE DELETE ON VIEWPROP
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'VIEWPROP',:old.view_id,null,null,null
  	,:old.proj_id );
end; 

RT_WBSBUDG
CREATE OR REPLACE TRIGGER RT_WBSBUDG
BEFORE UPDATE OR INSERT ON WBSBUDG
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'WBSBUDG',:old.wbs_budg_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.wbs_budg_id)
      and table_name = 'WBSBUDG';
    END IF;
  END IF;
end; 

RT_WBSBUDG_DEL
CREATE OR REPLACE TRIGGER RT_WBSBUDG_DEL
BEFORE DELETE ON WBSBUDG
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'WBSBUDG',:old.wbs_budg_id,null,null,null
  	,:old.proj_id );
end; 

RT_WBSMEMO
CREATE OR REPLACE TRIGGER RT_WBSMEMO
BEFORE UPDATE OR INSERT ON WBSMEMO
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'WBSMEMO',:old.wbs_memo_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.wbs_memo_id)
      and table_name = 'WBSMEMO';
    END IF;
  END IF;
end; 

RT_WBSMEMO_DEL
CREATE OR REPLACE TRIGGER RT_WBSMEMO_DEL
BEFORE DELETE ON WBSMEMO
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'WBSMEMO',:old.wbs_memo_id,null,null,null
  	,:old.proj_id );
end; 

RT_WBRSCAT
CREATE OR REPLACE TRIGGER RT_WBRSCAT
BEFORE UPDATE OR INSERT ON WBRSCAT
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'WBRSCAT',:old.wbrs_cat_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.wbrs_cat_id)
      and table_name = 'WBRSCAT';
    END IF;
  END IF;
end; 

RT_WBRSCAT_DEL
CREATE OR REPLACE TRIGGER RT_WBRSCAT_DEL
BEFORE DELETE ON WBRSCAT
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'WBRSCAT',:old.wbrs_cat_id,null,null,null );
end; 

RT_WBSRSRC
CREATE OR REPLACE TRIGGER RT_WBSRSRC
BEFORE UPDATE OR INSERT ON WBSRSRC
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'WBSRSRC',:old.wbsrsrc_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.wbsrsrc_id)
      and table_name = 'WBSRSRC';
    END IF;
  END IF;
end; 

RT_WBSRSRC_DEL
CREATE OR REPLACE TRIGGER RT_WBSRSRC_DEL
BEFORE DELETE ON WBSRSRC
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'WBSRSRC',:old.wbsrsrc_id,null,null,null
  	,:old.proj_id );
end; 

RT_WBSRSRC_QTY
CREATE OR REPLACE TRIGGER RT_WBSRSRC_QTY
BEFORE UPDATE OR INSERT ON WBSRSRC_QTY
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.wbsrsrc_id)
and pk2 = TO_CHAR(:new.week_start,'dd-mon-yy')
and pk3 = TO_CHAR(:new.month_start,'dd-mon-yy')
    and table_name = 'WBSRSRC_QTY';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'WBSRSRC_QTY',:old.wbsrsrc_id,:old.week_start,:old.month_start,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.wbsrsrc_id)
and pk2 = TO_CHAR(:old.week_start,'dd-mon-yy')
and pk3 = TO_CHAR(:old.month_start,'dd-mon-yy')
      and table_name = 'WBSRSRC_QTY';
    END IF;
  END IF;
end; 

RT_WBSRSRC_QTY_DEL
CREATE OR REPLACE TRIGGER RT_WBSRSRC_QTY_DEL
BEFORE DELETE ON WBSRSRC_QTY
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'WBSRSRC_QTY',:old.wbsrsrc_id,:old.week_start,:old.month_start,null );
end; 

RT_WBSSTEP
CREATE OR REPLACE TRIGGER RT_WBSSTEP
BEFORE UPDATE OR INSERT ON WBSSTEP
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'WBSSTEP',:old.wbs_step_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.wbs_step_id)
      and table_name = 'WBSSTEP';
    END IF;
  END IF;
end; 

RT_WBSSTEP_DEL
CREATE OR REPLACE TRIGGER RT_WBSSTEP_DEL
BEFORE DELETE ON WBSSTEP
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'WBSSTEP',:old.wbs_step_id,null,null,null
  	,:old.proj_id );
end; 

RT_WKFLTMPL
CREATE OR REPLACE TRIGGER RT_WKFLTMPL
BEFORE UPDATE OR INSERT ON WKFLTMPL
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'WKFLTMPL',:old.wkfl_tmpl_id,null,null,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.wkfl_tmpl_id)
      and table_name = 'WKFLTMPL';
    END IF;
  END IF;
end; 

RT_WKFLTMPL_DEL
CREATE OR REPLACE TRIGGER RT_WKFLTMPL_DEL
BEFORE DELETE ON WKFLTMPL
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'WKFLTMPL',:old.wkfl_tmpl_id,null,null,null );
end; 

RT_WKFLUSER
CREATE OR REPLACE TRIGGER RT_WKFLUSER
BEFORE UPDATE OR INSERT ON WKFLUSER
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
    DELETE FROM REFRDEL
    WHERE pk1 = TO_CHAR(:new.work_flow_id)
and pk2 = TO_CHAR(:new.user_id)
and pk3 = TO_CHAR(:new.stage_num)
    and table_name = 'WKFLUSER';
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
      values ( sysdate,'WKFLUSER',:old.work_flow_id,:old.user_id,:old.stage_num,null );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.work_flow_id)
and pk2 = TO_CHAR(:old.user_id)
and pk3 = TO_CHAR(:old.stage_num)
      and table_name = 'WKFLUSER';
    END IF;
  END IF;
end; 

RT_WKFLUSER_DEL
CREATE OR REPLACE TRIGGER RT_WKFLUSER_DEL
BEFORE DELETE ON WKFLUSER
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4)
  values ( sysdate,'WKFLUSER',:old.work_flow_id,:old.user_id,:old.stage_num,null );
end; 

RT_WORKFLOW
CREATE OR REPLACE TRIGGER RT_WORKFLOW
BEFORE UPDATE OR INSERT ON WORKFLOW
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'WORKFLOW',:old.work_flow_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.work_flow_id)
      and table_name = 'WORKFLOW';
    END IF;
  END IF;
end; 

RT_WORKFLOW_DEL
CREATE OR REPLACE TRIGGER RT_WORKFLOW_DEL
BEFORE DELETE ON WORKFLOW
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'WORKFLOW',:old.work_flow_id,null,null,null
  	,:old.proj_id );
end; 

RT_WORKSPACE
CREATE OR REPLACE TRIGGER RT_WORKSPACE
BEFORE UPDATE OR INSERT ON WORKSPACE
FOR EACH ROW
DECLARE
BEGIN
  if dbms_reputil.from_remote = true then   return; end if;

  
  :NEW.update_date := SYSDATE;
  :NEW.update_user := prm_audit.get_user;
  IF INSERTING THEN
    :NEW.create_user := prm_audit.get_user;
    :NEW.create_date := SYSDATE;
    
  END IF;
  IF UPDATING ('DELETE_SESSION_ID')  THEN
    IF :old.delete_session_id is null 
       and :new.delete_session_id is not null THEN
      INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
      values ( sysdate,'WORKSPACE',:old.workspace_id,null,null,null
  	,:old.proj_id );
    	
    ELSIF :old.delete_session_id is not null 
       and :new.delete_session_id is null THEN
      DELETE FROM REFRDEL
      WHERE pk1 = TO_CHAR(:old.workspace_id)
      and table_name = 'WORKSPACE';
    END IF;
  END IF;
end; 

RT_WORKSPACE_DEL
CREATE OR REPLACE TRIGGER RT_WORKSPACE_DEL
BEFORE DELETE ON WORKSPACE
FOR EACH ROW
DECLARE
BEGIN
  INSERT INTO REFRDEL ( delete_date,table_name, pk1,pk2,pk3,pk4,proj_id)
  values ( sysdate,'WORKSPACE',:old.workspace_id,null,null,null
  	,:old.proj_id );
end; 

INITIALIZE_BACKGROUND_PROCS
begin initialize_background_procs; end; 

OBSPROJ_FULL_REBUILD
 declare vcnt number;vret number;vmsg varchar(255);begin select count(1) into vcnt from obsproj;if (vcnt=0) then obsproj_full_rebuild(vret,vmsg);end if;end;