USP_DATAFORMTEMPLATE_EDIT_SALESORDERALERTCONFIGURATION_BYAPPUSER

Parameters

Parameter Parameter Type Mode Description
@CURRENTAPPUSERID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@EMAILADDRESS UDT_EMAILADDRESS IN
@ALERTONDONATION bit IN
@ALERTONDAILYADMISSION bit IN
@ALERTONSCHEDULEDPROGRAM bit IN
@ALERTONSPECIALEVENT bit IN
@ALERTONMEMBERSHIP bit IN

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_SALESORDERALERTCONFIGURATION_BYAPPUSER (
    @CURRENTAPPUSERID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @EMAILADDRESS dbo.UDT_EMAILADDRESS,
    @ALERTONDONATION bit,
    @ALERTONDAILYADMISSION bit,
    @ALERTONSCHEDULEDPROGRAM bit,
    @ALERTONSPECIALEVENT bit,
    @ALERTONMEMBERSHIP bit
)
as
    set nocount on;

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

    declare @CURRENTDATE datetime
    set @CURRENTDATE = getdate()

    begin try
        if 
            @ALERTONDONATION = 1 or
            @ALERTONDAILYADMISSION = 1 or
            @ALERTONSCHEDULEDPROGRAM = 1 or
            @ALERTONSPECIALEVENT = 1 or
            @ALERTONMEMBERSHIP = 1 or
            len(@EMAILADDRESS) > 0
        begin
            declare @SALESORDERALERTEMAILADDRESSID uniqueidentifier = null
            select @SALESORDERALERTEMAILADDRESSID = SALESORDERALERTEMAILADDRESS.ID
            from dbo.SALESORDERALERTEMAILADDRESS
            where SALESORDERALERTEMAILADDRESS.APPUSERID = @CURRENTAPPUSERID

            if @SALESORDERALERTEMAILADDRESSID is null
            begin
                set @SALESORDERALERTEMAILADDRESSID = newid()
                insert dbo.SALESORDERALERTEMAILADDRESS (
                    [ID],
                    [APPUSERID],
                    [EMAILADDRESS],
                    ADDEDBYID,
                    CHANGEDBYID,
                    DATEADDED,
                    DATECHANGED
                )
                values (
                    @SALESORDERALERTEMAILADDRESSID,
                    @CURRENTAPPUSERID,
                    @EMAILADDRESS,
                    @CHANGEAGENTID,
                    @CHANGEAGENTID,
                    @CURRENTDATE,
                    @CURRENTDATE
                );
            end
            else
            begin
                update SALESORDERALERTEMAILADDRESS
                set 
                    [EMAILADDRESS] = @EMAILADDRESS,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where ID = @SALESORDERALERTEMAILADDRESSID
            end

            --Find the configuration settings this appuser is associated with
            declare @SALESORDERALERTCONFIGURATIONID uniqueidentifier = null
            select @SALESORDERALERTCONFIGURATIONID = SALESORDERALERTCONFIGURATION.ID
            from dbo.SALESORDERALERTEMAILSUBSCRIPTION
            inner join dbo.SALESORDERALERTCONFIGURATION on
                SALESORDERALERTEMAILSUBSCRIPTION.SALESORDERALERTCONFIGURATIONID = SALESORDERALERTCONFIGURATION.ID
            where SALESORDERALERTEMAILSUBSCRIPTION.SALESORDERALERTEMAILADDRESSID = @SALESORDERALERTEMAILADDRESSID

            if @SALESORDERALERTCONFIGURATIONID is null
            begin
                set @SALESORDERALERTCONFIGURATIONID = newid()

                insert into dbo.SALESORDERALERTCONFIGURATION (
                    ID,
                    ALERTONDONATION,
                    ALERTONDAILYADMISSION,
                    ALERTONSCHEDULEDPROGRAM,
                    ALERTONSPECIALEVENT,
                    ALERTONMEMBERSHIP,
                    ADDEDBYID,
                    CHANGEDBYID,
                    DATEADDED,
                    DATECHANGED
                )
                values (
                    @SALESORDERALERTCONFIGURATIONID,
                    @ALERTONDONATION,
                    @ALERTONDAILYADMISSION,
                    @ALERTONSCHEDULEDPROGRAM,
                    @ALERTONSPECIALEVENT,
                    @ALERTONMEMBERSHIP,
                    @CHANGEAGENTID,
                    @CHANGEAGENTID,
                    @CURRENTDATE,
                    @CURRENTDATE
                )

                insert into dbo.SALESORDERALERTEMAILSUBSCRIPTION (
                    ID,
                    SALESORDERALERTCONFIGURATIONID,
                    SALESORDERALERTEMAILADDRESSID,
                    ADDEDBYID,
                    CHANGEDBYID,
                    DATEADDED,
                    DATECHANGED

                )
                values (
                    newid(),
                    @SALESORDERALERTCONFIGURATIONID,
                    @SALESORDERALERTEMAILADDRESSID,
                    @CHANGEAGENTID,
                    @CHANGEAGENTID,
                    @CURRENTDATE,
                    @CURRENTDATE
                )
            end
            else
            begin
                -- Future: If there comes a time when sales order alert configurations can be used by multiple users,
                -- it'd probably be a good idea to create a new 'configuration' record if more than one user is pointing to this one
                -- I doubt we'd want to allow a user to change the configuration settings for everyone else associated with this one
                -- Right now: that's not an issue, so let's just update!

                update dbo.SALESORDERALERTCONFIGURATION 
                set
                    ALERTONDONATION = @ALERTONDONATION,
                    ALERTONSCHEDULEDPROGRAM = @ALERTONSCHEDULEDPROGRAM,
                    ALERTONDAILYADMISSION = @ALERTONDAILYADMISSION,
                    ALERTONMEMBERSHIP = @ALERTONMEMBERSHIP,
                    ALERTONSPECIALEVENT = @ALERTONSPECIALEVENT,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where ID = @SALESORDERALERTCONFIGURATIONID
            end
        end
        else --User had no options checked, let's remove their settings
        begin
            /* cache current context information */
            declare @contextCache varbinary(128);
            set @contextCache = CONTEXT_INFO();

            /* set CONTEXT_INFO to @CHANGEAGENTID */
            if not @CHANGEAGENTID is null
                set CONTEXT_INFO @CHANGEAGENTID

            -- Again, if an appuser can have more than one email or setting configuration at some point,
            -- we'll probably want to change this
            delete dbo.SALESORDERALERTEMAILADDRESS
            where APPUSERID = @CURRENTAPPUSERID

            /* reset CONTEXT_INFO to previous value */
            if not @contextCache is null
                set CONTEXT_INFO @contextCache
        end
    end try
    begin catch
        exec dbo.USP_RAISE_ERROR
        return 1
    end catch

return 0;