aes_cursor01

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章