if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[aes_ProgramCloseOutMode]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[aes_ProgramCloseOutMode]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE procedure aes_ProgramCloseOutMode
(
@DateToProcess as nvarchar(50)='GetDate()'
)
as
--
declare @suser_sname nvarchar(50)
-- declare @getdate nvarchar(50)
--
declare @OperationYearInt int
declare @ApplicationCount int
--
declare @CloseoutDate nvarchar(50)
declare @CloseOutMode nvarchar(50)
--
-- [Application]
--
declare @Program nvarchar(50)
declare @Active bit
declare @ProgramDate nvarchar(50)
declare @ProgramStatus nvarchar(30)
declare @Resource nvarchar(50)
declare @ApplicationID nvarchar(10)
declare @ID nvarchar(10)
declare @ResourceGroupID nvarchar(10)
declare @ResourceID nvarchar(10)
declare @HouseHoldID nvarchar(10)
declare @ReferralID nvarchar(10)
declare @Referredby nvarchar(50)
declare @FamilyID nvarchar(10)
declare @DateAdd nvarchar(30)
declare @UserADD nvarchar(50)
declare @SecurityID nvarchar(10)
declare @SecurityGroupID nvarchar(10)
declare @SecurityLevel int
declare @SecurityOrgID nvarchar(10)
declare @SecurityRegionID int
declare @SecurityMode nvarchar(50)
declare @AppID int
declare @OperationYear nvarchar(4)
declare @MFD bit
declare @ReportClass nvarchar(10)
declare @EntryReportClass nvarchar(10)
--
-- [Code]
--
declare @Code nvarchar(100)
--
-- [Entry]
--
declare @EntryKey nvarchar(10)
declare @BedStatus nvarchar(50)
declare @LengthOfStay nvarchar(50)
declare @PriorLivingSituation nvarchar(100)
--
-- Renew Keys
--
declare @ApplicationIDRenew nvarchar(10)
declare @ActivityNumberRenew nvarchar(10)
declare @ActivityDetailsNumberRenew nvarchar(10)
declare @EntryKeyRenew nvarchar(10)
declare @ExitKeyRenew nvarchar(10)
--
declare @GetDate datetime
--
declare @ExitReason nvarchar(50)
declare @Comments nvarchar(500)
--
declare @ExitKey nvarchar(10)
declare @error int
declare @rowcount int
--
begin
--
set @suser_sname = suser_sname()
--
if
@DateToProcess = 'GetDate()'
begin
set @GetDate = getdate()
end
if
@DateToProcess <> 'GetDate()'
begin
set @GetDate = @DateToProcess
end
print '@GetDate=['+cast(dbo.fn_AESFormatDateOutput(@GetDate,'MM/DD/YYYY') as nvarchar)+']'
-- ********************************************************************************
declare
c_ApplicationCloseOutMode
cursor
for
select
[Application].[ApplicationID],
[Application].[Program],
[Application].[ProgramDate],
[Application].[SecurityID],
[Application].[SecurityGroupID],
[Application].[SecurityOrgID],
[Application].[SecurityRegionID],
[Application].[SecurityMode],
[Application].[OperationYear],
[ActivityTemplate].[CloseoutDate],
[ActivityTemplate].[CloseOutMode],
isnull([ActivityTemplate].[Code],'')
from
[Application],
[ActivityTemplate]
where
[Application].[Active] = 1 and
[Application].[Program] = [ActivityTemplate].[Service] and
[ActivityTemplate].[ServiceType] = 'Application' and
-- (
-- cast(datepart(mm,cast([ActivityTemplate].[CloseoutDate] as datetime)) as nvarchar)+'/'+
-- cast(datepart(dd,cast([ActivityTemplate].[CloseoutDate] as datetime)) as nvarchar)+'/'+
-- cast(datepart(yyyy,cast([ActivityTemplate].[CloseoutDate] as datetime)) as nvarchar)
-- ) =
-- (
-- cast(datepart(mm,cast(@GetDate as datetime)) as nvarchar)+'/'+
-- cast(datepart(dd,cast(@GetDate as datetime)) as nvarchar)+'/'+
-- cast(datepart(yyyy,cast(@GetDate as datetime)) as nvarchar)
-- ) and
dbo.fn_AESFormatDateOutput([ActivityTemplate].[CloseoutDate],'MM/DD/YYYY')=dbo.fn_AESFormatDateOutput(@GetDate,'MM/DD/YYYY') and
(
(
dbo.fn_Aes_ProgramDuration ([ProgramStart], [ProgramEnd], [ProgramDate], getdate())=0 and
[ActivityTemplate].[CloseOutMode]
in
(
'Exit',
'Renew'
)
) or
isnull([ActivityTemplate].[CloseOutMode],'//Missing//') = 'Ongoing'
) and
[Application].[ApplicationID] not in
(
select
[ApplicationID]
from
[_aes_ProgramCloseOutMode] aesPCOM
where
aesPCOM.[ApplicationID]=[Application].[ApplicationID] and
dbo.fn_AESFormatDateOutput(aesPCOM.CloseoutDate,'MM/DD/YYYY') = dbo.fn_AESFormatDateOutput(@GetDate,'MM/DD/YYYY')
)
order by
cast(dbo.Application.ApplicationID as int) desc
-- ********************************************************************************
open c_ApplicationCloseOutMode
fetch
next
from
c_ApplicationCloseOutMode
into
@ApplicationID,
@Program,
@ProgramDate,
@SecurityID,
@SecurityGroupID,
@SecurityOrgID,
@SecurityRegionID,
@SecurityMode,
@OperationYear,
@CloseoutDate,
@CloseOutMode,
@Code
--
set @rowcount=0
while
(@@fetch_status = 0)
begin
-- *****************************************************************************************
-- ********************************************************************************
-- Record current [Application].[ApplicationID] in table [_aes_ProgramCloseOutMode]
-- *****************************************************************************************
-- ********************************************************************************
print '@ApplicationID=['+@ApplicationID+']'
insert into
[_aes_ProgramCloseOutMode]
(
[ApplicationID],
[Program],
[ProgramDate],
[OperationYear],
[CloseoutDate],
[CloseOutMode],
[Code],
[Status],
[Description]
)
values
(
@ApplicationID,
@Program,
@ProgramDate,
@OperationYear,
dbo.fn_AESFormatDateOutput(@CloseoutDate,'MM/DD/YYYY'),
@CloseOutMode,
@Code,
'Assigned',
''
)
-- *****************************************************************************************
-- ********************************************************************************
-- 'Exit' or 'Renew'
-- *****************************************************************************************
-- ********************************************************************************
if
isnull(@CloseOutMode,'//Missing//') in
(
'Exit',
'Renew'
)
begin
if
@CloseOutMode='Exit'
begin
set @ExitReason='Program Exited Automatically'
set @ProgramStatus='Program Exited Automatically'
set @Comments='Program Exited Automatically'
end
if
@CloseOutMode='Renew'
begin
set @ExitReason='Program Renewed Automatically'
set @ProgramStatus='Program Renewed Automatically'
set @Comments='Program Renewed Automatically'
end
-- ********************************************************************************
-- update current [Application].[Active]=0 and record CloseOutMode type
-- ********************************************************************************
update
[Application]
set
[Active]=0,
[EndDate]=cast(datepart(mm,cast(@getdate as datetime)) as nvarchar)+'/'+
cast(datepart(dd,cast(@getdate as datetime)) as nvarchar)+'/'+
cast(datepart(yyyy,cast(@getdate as datetime)) as nvarchar),
[ExitReason]=@ExitReason,
[ProgramStatus]=@ProgramStatus,
[Comments]=@Comments
where
[ApplicationID]=@ApplicationID
-- *****************************************************************************************
-- get next keys for all of the tables involved
-- *****************************************************************************************
--
-- get next [ExitKey] from [SystemKey]
--
exec aes_systemkey 'ExitKey', @ExitKey output
if
@ExitKey = 'TimeOut'
begin
return
end
--
insert into
[ExitProgram]
(
[ExitKey],
[ApplicationID],
[SecurityID],
[SecurityGroupID],
[SecurityOrgID],
[SecurityRegionID],
[SecurityMode]
)
values
(
@ExitKey,
@ApplicationID,
@SecurityID,
@SecurityGroupID,
@SecurityOrgID,
@SecurityRegionID,
@SecurityMode
)
-- ********************************************************************************
-- ********************************************************************************
-- 'Renew'
-- ********************************************************************************
-- ********************************************************************************
if
@CloseOutMode='Renew'
begin
--
-- get next set of keys from [SystemKey]
--
exec aes_systemkey 'ApplicationID', @ApplicationIDRenew output
if
@ApplicationID = 'TimeOut'
begin
return
end
exec aes_systemkey 'ActivityNumber', @ActivityNumberRenew output
if
@ActivityNumberRenew = 'TimeOut'
begin
return
end
exec aes_systemkey 'ActivityDetailsNumber', @ActivityDetailsNumberRenew output
if
@ActivityDetailsNumberRenew = 'TimeOut'
begin
return
end
exec aes_systemkey 'EntryKey', @EntryKeyRenew output
if
@EntryKeyRenew = 'TimeOut'
begin
return
end
exec aes_systemkey 'ExitKey', @ExitKeyRenew output
if
@ExitKeyRenew = 'TimeOut'
begin
return
end
--
-- Insert Rows
-- *************************************************************************
-- [Application]
-- *************************************************************************
select
@Program=[Program],
-- @Active=[Active],
@ProgramDate=[ProgramDate],
@ProgramStatus=[ProgramStatus],
@Resource=[Resource],
-- @ApplicationID=[ApplicationID],
@ID=[ID],
@ResourceGroupID=[ResourceGroupID],
@ResourceID=[ResourceID],
@HouseHoldID=[HouseHoldID],
@ReferralID=[ReferralID],
@Referredby=[Referredby],
@FamilyID=[FamilyID],
@DateAdd=[DateAdd],
@UserADD=[UserADD],
@SecurityID=[SecurityID],
@SecurityGroupID=[SecurityGroupID],
@SecurityLevel=[SecurityLevel],
@SecurityOrgID=[SecurityOrgID],
@SecurityRegionID=[SecurityRegionID],
@SecurityMode=[SecurityMode],
@AppID=[AppID],
@OperationYear=[OperationYear],
@MFD=[MFD],
@ReportClass=[ReportClass],
@EntryReportClass=[EntryReportClass]
from
[Application]
where
[ApplicationID]=@ApplicationID
--
insert into
[Application]
(
[Program],
[Active],
[ProgramDate],
[ProgramStatus],
[Resource],
[ApplicationID],
[ID],
[ResourceGroupID],
[ResourceID],
[HouseHoldID],
[ReferralID],
[Referredby],
[FamilyID],
[DateAdd],
[UserADD],
[SecurityID],
[SecurityGroupID],
[SecurityLevel],
[SecurityOrgID],
[SecurityRegionID],
[SecurityMode],
[AppID],
[OperationYear],
[MFD],
[ReportClass],
[EntryReportClass]
)
values
(
@Program,
'1',
@ProgramDate,
@ProgramStatus,
@Resource,
@ApplicationIDRenew,
@ID,
@ResourceGroupID,
@ResourceID,
@HouseHoldID,
@ReferralID,
@Referredby,
@FamilyID,
@DateAdd,
@UserADD,
@SecurityID,
@SecurityGroupID,
@SecurityLevel,
@SecurityOrgID,
@SecurityRegionID,
@SecurityMode,
@AppID,
cast(cast(@OperationYear as int)+1 as nvarchar),
@MFD,
@ReportClass,
@EntryReportClass
)
-- *************************************************************************
-- Snapshot
-- *************************************************************************
exec aes_CreateSnapShot
@ID,
@HouseholdID,
@FamilyID,
'NEWAPPLICATION',
@ApplicationIDRenew,
@Program,
@GetDate,
'1'
-- *************************************************************************
-- [Activity]
-- *************************************************************************
insert into
[Activity]
(
[ActivityNumber],
[ID],
[ApplicationID] )
values
(
@ActivityNumberRenew,
@ApplicationIDRenew,
@ID
)
-- *************************************************************************
-- [ActivityDetails]
-- *************************************************************************
insert into
[ActivityDetails]
(
[EstimatedTime],
[ActivityKey],
[ActivityType],
[ActivityNumber],
[ActivityDetailsNumber],
[ApplicationID],
[Activity],
[ID],
[HouseholdID],
[FamilyID],
[ResourceID],
[ResourceGroupID],
[Description],
[StartDate],
[StartTime]
)
values
(
'90',
'',
'Entry',
@ActivityNumberRenew,
@ActivityDetailsNumberRenew,
@ApplicationIDRenew,
'Entry',
@ID,
@HouseholdID,
@FamilyID,
@SecurityID,
@SecurityGroupID,
'Entry',
dbo.fn_AESFormatDateOutput(getdate(),'MM/DD/YYYY'),
'10:00 AM'
)
-- *************************************************************************
-- [Entry]
-- *************************************************************************
select
@EntryKey=[EntryKey],
@BedStatus=[BedStatus],
@ApplicationID=[ApplicationID],
@LengthOfStay=[LengthOfStay],
@PriorLivingSituation=[PriorLivingSituation]
from
[Entry]
where
[ApplicationID]=@ApplicationID
--
insert into
[Entry]
(
[EntryKey],
[BedStatus],
[ApplicationID],
[LengthOfStay],
[PriorLivingSituation]
)
values
(
@EntryKeyRenew,
@BedStatus,
@ApplicationIDRenew,
@LengthOfStay,
@PriorLivingSituation
)
-- *************************************************************************
-- [ExitProgram]
-- *************************************************************************
insert into
[ExitProgram]
(
[ExitKey],
[ApplicationID]
)
values
(
@ExitKeyRenew,
@ApplicationIDRenew
)
-- *************************************************************************
-- [QuestionList] tied to Program Entry
-- *************************************************************************
Insert into
Questionlist
(
Required,
Question,
Code,
Service,
ActivityDetailsNumber,
QuestionOrder,
QuestionKey,
QuestionListKey,
[ID],
InitQuestion,
MultiAnswer,
Query,
MASK,
QueryFieldName,
SecurityID,
SecurityGroupID,
SecurityLevel,
SecurityOrgID,
SecurityRegionID,
SecurityMode
)
SELECT
ISNULL(dbo.QuestionTemplate.Required,0) AS Required,
dbo.QuestionTemplate.Caption AS Question,
dbo.QuestionTemplate.Code,
@Program as Service,
@ActivityDetailsNumberRenew AS ActivityDetailsNumber,
dbo.QuestionTemplate.QuestionOrder,
dbo.QuestionTemplate.QuestionKey,
@ActivityDetailsNumberRenew + '_' + CAST(dbo.QuestionTemplate.QuestionKey AS nvarchar) AS QuestionListKey,
@ID AS ID,
1 AS InitQuestion,
case when dbo.QuestionTemplate.MultiAnswer='M' Then '1' Else '0' END AS MultiAnswer,
dbo.QuestionTemplate.MASK,
dbo.QuestionTemplate.QueryFieldName,
dbo.QuestionTemplate.Query,
dbo.QuestionTemplate.SecurityID,
dbo.QuestionTemplate.SecurityGroupID,
dbo.QuestionTemplate.SecurityLevel,
dbo.QuestionTemplate.SecurityOrgID,
dbo.QuestionTemplate.SecurityRegionID,
dbo.QuestionTemplate.SecurityMode
FROM
dbo.QuestionTemplate
WHERE
(isnull(dbo.QuestionTemplate.ForExit,0) <>1) and
(dbo.QuestionTemplate.Code = @Code) and
( -- 1Start
( -- 2Start
( -- 3Start
dbo.QuestionTemplate.SecurityMode = 'System'
) or -- 3End
( -- 3Start
(dbo.QuestionTemplate.SecurityMode = 'Region') and
(dbo.QuestionTemplate.SecurityRegionID = @SecurityRegionID)
) or -- 3End
( -- 3Start
(dbo.QuestionTemplate.SecurityMode = 'Organization') and
(dbo.QuestionTemplate.SecurityOrgID = @SecurityOrgID)
) or -- 3End
( -- 3Start
(dbo.QuestionTemplate.SecurityMode = 'Private') and
(dbo.QuestionTemplate.SecurityGroupID = @SecurityGroupID and
dbo.QuestionTemplate.SecurityID = @SecurityID)
) or -- 3End
( -- 3Start
(dbo.QuestionTemplate.SecurityMode = 'Group') and
( -- 4Start
dbo.QuestionTemplate.SecurityGroupID in
( -- 5Start
SELECT
Grantor
FROM
dbo.GroupPermission
WHERE
Grantee = @SecurityGroupID
) -- 5End
) -- 4End
) -- 3End
) -- 2End
) -- 1End
end
end
-- *****************************************************************************************
-- *****************************************************************************************
-- 'Ongoing'
-- *****************************************************************************************
-- *****************************************************************************************
if
isnull(@CloseOutMode,'//Missing//') = 'Ongoing'
begin
select
@ApplicationCount=count(*)
from
[Application]
where
[Active]=1 and
[OperationYear] is not null and
isnumeric([OperationYear])=1 and
[ApplicationID]=@ApplicationID and
[Program] in
(
select
[Program]
from
[Application] A
where
A.[Active]=1 and
A.[Program]=[Application].[Program] and
A.[ID]=[Application].[ID] and
A.[ApplicationID] <> [Application].[ApplicationID]
)
if
@ApplicationCount = 0
begin
update
[Application]
set
[OperationYear]=cast(cast(@OperationYear as int)+1 as nvarchar)
where
[ApplicationID]=@ApplicationID
end
end
exit_search:
-- ********************************************************************************
fetch
next
from
c_ApplicationCloseOutMode
into
@ApplicationID,
@Program,
@ProgramDate,
@SecurityID,
@SecurityGroupID,
@SecurityOrgID,
@SecurityRegionID,
@SecurityMode,
@OperationYear,
@CloseoutDate,
@CloseOutMode,
@Code
-- goto c_ApplicationCloseOutMode_end
end
c_ApplicationCloseOutMode_end:
--
close c_ApplicationCloseOutMode
deallocate c_ApplicationCloseOutMode
--
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO