USP_CLOSINGREQUIREMENTDETAIL_UPDATEFROMXML

Updates closing requirements table from xml

Parameters

Parameter Parameter Type Mode Description
@CLOSINGREQUIREMENTID uniqueidentifier IN
@XML xml IN
@CHANGEAGENTID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_CLOSINGREQUIREMENTDETAIL_UPDATEFROMXML(
    @CLOSINGREQUIREMENTID uniqueidentifier ,
    @XML xml,
    @CHANGEAGENTID uniqueidentifier = null
)
as
begin
    set nocount on;
    if @CHANGEAGENTID is null
        exec USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
    -- build a temporary table containing the values from the XML

    declare @TempTbl table (
       [ID] uniqueidentifier,
       [ACCOUNTSTRUCTUREID] uniqueidentifier,
       [PRESERVEDETAILSDURINGCLOSING] tinyint,
       [REQUIRETOBALANCE] tinyint,
       [ACCOUNTREQUIREMENTSCODE] tinyint,
       [CLOSINGREQUIREMENTID] uniqueidentifier
       )

  insert into @TempTbl select 
  coalesce(nullif([ID],'00000000-0000-0000-0000-000000000000'),newid()) ,
  [ACCOUNTSTRUCTUREID] ,
  [PRESERVEDETAILSDURINGCLOSING],
  [REQUIRETOBALANCE] ,
  [ACCOUNTREQUIREMENTSCODE] ,
  @CLOSINGREQUIREMENTID from
  dbo.UFN_CLOSINGREQUIREMENTDETAILS_FROMITEMLISTXML(@XML)

  update @TempTbl set ID = newid() where (ID is null) or (ID = '00000000-0000-0000-0000-000000000000');

    -- delete any items that no longer exist in the table

    delete from dbo.[CLOSINGREQUIREMENTDETAIL] where 
    ([CLOSINGREQUIREMENTDETAIL].ID not in (select ID from @TempTbl)) and ([CLOSINGREQUIREMENTDETAIL].CLOSINGREQUIREMENTID = @CLOSINGREQUIREMENTID)    

  -- update the items that exist in the XML table and the db

  update [CLOSINGREQUIREMENTDETAIL] set 
      [CLOSINGREQUIREMENTDETAIL].[ID]=temp.[ID],
      [CLOSINGREQUIREMENTDETAIL].[ACCOUNTSTRUCTUREID]=temp.[ACCOUNTSTRUCTUREID],
      [CLOSINGREQUIREMENTDETAIL].[PRESERVEDETAILSDURINGCLOSING]=temp.[PRESERVEDETAILSDURINGCLOSING],
      [CLOSINGREQUIREMENTDETAIL].[REQUIRETOBALANCE]=temp.[REQUIRETOBALANCE],
      [CLOSINGREQUIREMENTDETAIL].[ACCOUNTREQUIREMENTSCODE]=temp.[ACCOUNTREQUIREMENTSCODE],
      [CLOSINGREQUIREMENTDETAIL].CHANGEDBYID = @CHANGEAGENTID,
      [CLOSINGREQUIREMENTDETAIL].DATECHANGED = getdate()
    from dbo.[CLOSINGREQUIREMENTDETAIL] inner join @TempTbl as temp on [CLOSINGREQUIREMENTDETAIL].ID = temp.ID
  where (
      ([CLOSINGREQUIREMENTDETAIL].[ACCOUNTSTRUCTUREID]<>temp.[ACCOUNTSTRUCTUREID]) or 
      ([CLOSINGREQUIREMENTDETAIL].[ACCOUNTSTRUCTUREID] is null and temp.[ACCOUNTSTRUCTUREID] is not null) or 
      ([CLOSINGREQUIREMENTDETAIL].[ACCOUNTSTRUCTUREID] is not null and temp.[ACCOUNTSTRUCTUREID] is null) or                         
      ([CLOSINGREQUIREMENTDETAIL].[PRESERVEDETAILSDURINGCLOSING]<>temp.[PRESERVEDETAILSDURINGCLOSING]) or 
      ([CLOSINGREQUIREMENTDETAIL].[PRESERVEDETAILSDURINGCLOSING] is null and temp.[PRESERVEDETAILSDURINGCLOSING] is not null) or 
      ([CLOSINGREQUIREMENTDETAIL].[PRESERVEDETAILSDURINGCLOSING] is not null and temp.[PRESERVEDETAILSDURINGCLOSING] is null)or                         
      ([CLOSINGREQUIREMENTDETAIL].[REQUIRETOBALANCE]<>temp.[REQUIRETOBALANCE]) or 
      ([CLOSINGREQUIREMENTDETAIL].[REQUIRETOBALANCE] is null and temp.[REQUIRETOBALANCE] is not null) or 
      ([CLOSINGREQUIREMENTDETAIL].[REQUIRETOBALANCE] is not null and temp.[REQUIRETOBALANCE] is null)or                         
      ([CLOSINGREQUIREMENTDETAIL].[ACCOUNTREQUIREMENTSCODE]<>temp.[ACCOUNTREQUIREMENTSCODE]) or 
      ([CLOSINGREQUIREMENTDETAIL].[ACCOUNTREQUIREMENTSCODE] is null and temp.[ACCOUNTREQUIREMENTSCODE] is not null) or 
      ([CLOSINGREQUIREMENTDETAIL].[ACCOUNTREQUIREMENTSCODE] is not null and temp.[ACCOUNTREQUIREMENTSCODE] is null))


        -- insert new items

        insert into [CLOSINGREQUIREMENTDETAIL](
            [ID],
            [ACCOUNTSTRUCTUREID] ,
      [PRESERVEDETAILSDURINGCLOSING],
      [REQUIRETOBALANCE] ,
      [ACCOUNTREQUIREMENTSCODE] ,
      [CLOSINGREQUIREMENTID],
            ADDEDBYID, 
            CHANGEDBYID, 
            DATEADDED, 
            DATECHANGED)
        select 
            [ID],
            [ACCOUNTSTRUCTUREID] ,
        [PRESERVEDETAILSDURINGCLOSING],
        [REQUIRETOBALANCE] ,
        [ACCOUNTREQUIREMENTSCODE] ,
          @CLOSINGREQUIREMENTID,
            @CHANGEAGENTID
            @CHANGEAGENTID
            getdate(), 
            getdate()
        from @TempTbl as temp
        where not exists (select ID from dbo.[CLOSINGREQUIREMENTDETAIL] as data where data.ID = temp.ID)

end