spAddUpdate_Email

Parameters

Parameter Parameter Type Mode Description
@PKID int INOUT
@EmailTemplateID int IN
@Name nvarchar(255) IN
@Description nvarchar(255) IN
@UserID int IN
@Guid uniqueidentifier INOUT
@type tinyint IN
@status tinyint IN
@ContentHTML ntext IN
@ContentText ntext IN
@FromAddress nvarchar(255) IN
@FromDisplayName nvarchar(255) IN
@Subject nvarchar(4000) IN
@Priority int IN
@ReplyAddress nvarchar(255) IN
@ReturnReceipt bit IN
@ReturnReceiptAddress nvarchar(255) IN
@ForwardDSN bit IN
@ForwardDSNAddress nvarchar(255) IN
@SendAfterDate datetime IN
@RecipientListsDoc nvarchar(4000) IN
@RecipientsXML ntext IN
@ProjectAppealListEmailID int IN
@CLIENTSITESID int IN
@AppealID int IN
@EmailAddressTypeID uniqueidentifier IN
@IsExcludeInactiveRecipient bit IN
@InactiveRecipientFromMonths int IN
@AlternateSubject nvarchar(255) IN

Definition

Copy


CREATE PROCEDURE [dbo].[spAddUpdate_Email]
(
    @PKID int output,
    @EmailTemplateID int,
    @Name nvarchar(255),
    @Description nvarchar(255),
    @UserID    int,        
    @Guid uniqueidentifier output,
    @type tinyint,
    @status tinyint,

    @ContentHTML ntext,
    @ContentText ntext,
    @FromAddress nvarchar(255),
    @FromDisplayName nvarchar(255),
    @Subject nvarchar(4000),
    @Priority int,
    @ReplyAddress nvarchar(255),
    @ReturnReceipt bit,
    @ReturnReceiptAddress nvarchar(255)
    ,    
    @ForwardDSN bit,
    @ForwardDSNAddress nvarchar(255),
    @SendAfterDate datetime,
    @RecipientListsDoc as nvarchar(4000),
    @RecipientsXML as ntext,
    @ProjectAppealListEmailID int,
    @CLIENTSITESID int = null,
    @AppealID int = null,
    @EmailAddressTypeID uniqueidentifier = null,
    @IsExcludeInactiveRecipient bit = 0,
    @InactiveRecipientFromMonths int = 0,
         @AlternateSubject nvarchar(255) = null
)
AS
BEGIN

    set nocount on

    BEGIN TRANSACTION

    IF (@PKID<=0
    BEGIN
        if @SendAfterDate < getutcdate()
            set @SendAfterDate = getutcdate()

        INSERT INTO dbo.Email
        (

            EmailTemplateID,

            [Name],
            [Description],
            OwnerID,
            [Type],
            Status,
            ContentHTML,
            ContentText,
            FromAddress,
            FromDisplayName,
            Subject,
            Priority,
                  ReplyAddress,
            ReturnReceipt,
            ReturnReceiptAddress,
            ForwardDSN,
            ForwardDSNAddress,
            SendAfterDate,
            ProjectAppealListEmailID,
            CLIENTSITESID,
            AppealID,
                  EmailAddressTypeID,
            IsExcludeInactiveRecipient,
            InactiveRecipientFromMonths,
                        AlternateSubject
         )
        VALUES
        (
            @EmailTemplateID,
            @Name,
            @Description,
            @UserID,
            @Type,
            @Status,
            @ContentHTML,
            @ContentText,
            @FromAddress,
            @FromDisplayName,
            @Subject,
            @Priority,
            @ReplyAddress,
            @ReturnReceipt,
            @ReturnReceiptAddress,
            @ForwardDSN,
            @ForwardDSNAddress,
            @SendAfterDate,
            @ProjectAppealListEmailID,
            @CLIENTSITESID,
            @AppealID,
            @EmailAddressTypeID,
            @IsExcludeInactiveRecipient,
            @InactiveRecipientFromMonths,
                         @AlternateSubject
        )
        SELECT @PKID = @@Identity

        SELECT @Guid = Guid FROM dbo.[Email] WHERE [ID] = @PKID

        EXEC spAuditThis @UserID, 1, @Guid, 15

END 
    ELSE 
    BEGIN

        declare @CREATEDATE datetime
        select @CREATEDATE = CREATEDATE from dbo.EMAIL where ID = @PKID

        if @CREATEDATE is not null and @SendAfterDate is not null and @CREATEDATE > @SendAfterDate
              set @SendAfterDate = @CREATEDATE



        UPDATE dbo.Email SET
            EmailTemplateID=@EmailTemplateID,
            [Name]=@Name,
            [Description]=@Description,
            [Type]=@Type,
            [Status]=@Status,
            ContentHTML=@ContentHTML,


            ContentText=@ContentText
            FromAddress=@FromAddress
            FromDisplayName=@FromDisplayName ,
            Subject=@Subject ,
            Priority=@Priority ,
            ReplyAddress=@ReplyAddress ,
            ReturnReceipt=@ReturnReceipt ,
            ReturnReceiptAddress=@ReturnReceiptAddress ,
            ForwardDSN=@ForwardDSN ,
            ForwardDSNAddress=@ForwardDSNAddress ,
            SendAfterDate=@SendAfterDate,
            ProjectAppealListEmailID=@ProjectAppealListEmailID,
            CLIENTSITESID = @CLIENTSITESID,
            AppealID = @AppealID,
            EmailAddressTypeID=@EmailAddressTypeID,
            IsExcludeInactiveRecipient=@IsExcludeInactiveRecipient,
            InactiveRecipientFromMonths=@InactiveRecipientFromMonths,
                        AlternateSubject= @AlternateSubject
        WHERE [ID]=@PKID

        SELECT @Guid = Guid FROM dbo.[Email] WHERE [ID] = @PKID
        EXEC spAuditThis @UserID,
        2, @Guid, 15

        /* Whack old ones */

       DELETE 
       FROM dbo.Email_Recipient
       WHERE EmailID=@PKID  
    END
    /*
    Update RecipientLists Table
    */

        DECLARE @irecipientlistsdoc int
        EXEC sp_xml_preparedocument @irecipientlistsdoc OUTPUT, @RecipientListsDoc



        DELETE FROM dbo.Email_EmailList WHERE EmailID = @PKID 

        INSERT dbo.Email_EmailList (EmailID, EmailListID, IsTest) 
        SELECT @PKID, EmailListID, IsNULL(IsTest,0)
        FROM OPENXML (@irecipientlistsdoc, '/root/RecipientLists',1


        WITH (EmailListID int, IsTest bit)

        EXEC sp_xml_removedocument @irecipientlistsdoc

    /* 
    Update Recipients Table
    */
    declare @InactiveRecipients as table (ID  int, Emailaddress nvarchar(250))

--get inactive recipients list only if thix xml have recipients.

    if(@IsExcludeInactiveRecipient =1 and len(cast(@RecipientsXML as nvarchar(max))) >0)
    begin
      insert into @InactiveRecipients
      select 1, EMAILADDRESS from dbo.EMAIL_INACTIVERECIPIENT EIR where EIR.INACTIVEFROMMONTHS >= @InactiveRecipientFromMonths
    end    

        DECLARE @iRecipsDoc int

        EXEC sp_xml_preparedocument @iRecipsDoc OUTPUT, @RecipientsXML

        INSERT INTO dbo.Email_Recipient
        (
            [EmailID],
            [BackOfficeSystemPeopleID],
            [UserID],
            [AddressBookID],
            [DisplayName],
            [EmailAddress],
            [DataSourceID],
                  [INACTIVE]
        ) 
        SELECT
        @PKID, BackOfficeSystemPeopleID, UserID, AddressBookID, DisplayName, X.EmailAddress, DataSourceID, isnull(IR.ID,0)
        FROM OPENXML (@iRecipsDoc, '/ArrayOfEmailRecipient/EmailRecipient/ObjectData',3
            WITH(
                EmailID int,


       BackOfficeSystemPeopleID int,
                UserID int
                AddressBookID int,
                DisplayName nvarchar(255),
                EmailAddress nvarchar(255),
                DataSourceID int '../DataSourceID'
            ) as X
            left join @InactiveRecipients as IR on IR.Emailaddress =X.EmailAddress


    EXEC sp_xml_removedocument @iRecipsDoc

    COMMIT TRANSACTION
END