USP_DATAFORMTEMPLATE_ADD_APPEALMAILPREFERENCEBULKADD

The save procedure used by the add dataform template "Appeal Mail Preference Add Data Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@EMAILADDRESS UDT_EMAILADDRESS IN Email Address
@PREFERENCES xml IN Preferences

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_APPEALMAILPREFERENCEBULKADD
(
    @ID uniqueidentifier = null output,
    @CHANGEAGENTID uniqueidentifier = null,
      @EMAILADDRESS UDT_EMAILADDRESS,
      @PREFERENCES XML
)
as

set nocount on;

if @ID is null
    set @ID = newid()

if @CHANGEAGENTID is null  
    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output

declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()

begin try

  declare @PREFSTABLE table(APPEALCATEGORYCODEID uniqueidentifier, SITEID uniqueidentifier, BUSINESSUNITCODEID uniqueidentifier, SENDMAIL bit)
  insert into @PREFSTABLE
  select 
  P.I.value('APPEALCATEGORYCODEID[1]', 'uniqueidentifier'),
  P.I.value('SITEID[1]', 'uniqueidentifier'),
  P.I.value('BUSINESSUNITCODEID[1]', 'uniqueidentifier'),
  P.I.value('SENDMAIL[1]', 'bit')
  from @PREFERENCES.nodes('/PREFERENCES/ITEM') P(I)

    declare @EMAILCONSTIT table(EMAILID uniqueidentifier, CONSTITUENTID uniqueidentifier)
    insert into @EMAILCONSTIT
    select  ea.id, ea.CONSTITUENTID from dbo.EMAILADDRESS ea where ea.EMAILADDRESS = @EMAILADDRESS


    merge dbo.MAILPREFERENCE as target
    using
    (
        select EA.ID EMAILADDRESSID, EA.CONSTITUENTID, P.APPEALCATEGORYCODEID, P.SITEID, P.BUSINESSUNITCODEID, P.SENDMAIL 
        from @PREFSTABLE P cross join 
        (
          select  cast(min(cast(ec.EMAILID as nvarchar(100))) as uniqueidentifier) ID, ec.CONSTITUENTID
          from @EMAILCONSTIT ec
          group by ec.CONSTITUENTID
        ) EA 
    ) as source
    on ((target.CONSTITUENTID=source.CONSTITUENTID or target.CONSTITUENTID is null and source.CONSTITUENTID is null)
        and target.MAILTYPECODE=1
        and (target.BUSINESSUNITCODEID=source.BUSINESSUNITCODEID or target.BUSINESSUNITCODEID is null and source.BUSINESSUNITCODEID is null)
        and (target.CATEGORYCODEID=source.APPEALCATEGORYCODEID or target.CATEGORYCODEID is null and source.APPEALCATEGORYCODEID is null)
        and (target.SITEID=source.SITEID or target.SITEID is null and source.SITEID is null))
    when matched then
        update set CONSTITUENTID=source.CONSTITUENTID,
            MAILTYPECODE=1,
            BUSINESSUNITCODEID=source.BUSINESSUNITCODEID,
            CATEGORYCODEID=source.APPEALCATEGORYCODEID,
            SITEID=source.SITEID,
            SENDMAIL=source.sendmail,
            DELIVERYMETHODCODE=1,
            RECEIPTTYPECODE=0,
            EMAILADDRESSID=source.EMAILADDRESSID,
            CHANGEDBYID=@CHANGEAGENTID,
            DATECHANGED=@CURRENTDATE
    when not matched then
        insert (CONSTITUENTID,MAILTYPECODE,BUSINESSUNITCODEID,CATEGORYCODEID,SITEID,SENDMAIL,DELIVERYMETHODCODE,RECEIPTTYPECODE,EMAILADDRESSID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
            values (source.CONSTITUENTID, 1, source.BUSINESSUNITCODEID, source.APPEALCATEGORYCODEID, source.SITEID, source.SENDMAIL, 1, 0, source.EMAILADDRESSID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);;

end try

begin catch
    exec dbo.USP_RAISE_ERROR
    return 1
end catch

return 0