USP_SALESORDER_MEMBERSHIP_ADDADDRESSES

Creates addresses for members associated with this order who do not have an address.

Parameters

Parameter Parameter Type Mode Description
@SALESORDERID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE datetime IN

Definition

Copy


            CREATE procedure dbo.USP_SALESORDER_MEMBERSHIP_ADDADDRESSES (
                @SALESORDERID uniqueidentifier,
                @CHANGEAGENTID uniqueidentifier,
                @CURRENTDATE datetime
            )
            as
            begin
                if @CHANGEAGENTID is null  
                    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

                if @CURRENTDATE is null
                    set @CURRENTDATE = getdate();

                --Default: Address to use if primary member doesn't have an address to copy to the remaining members on a membership

                declare @DEFAULTADDRESSID uniqueidentifier;
                declare @DEFAULTADDRESSBLOCK nvarchar(150);
                declare @DEFAULTCOUNTRYID uniqueidentifier;
                declare @DEFAULTSTATEID uniqueidentifier = null;
                declare @DEFAULTCITY nvarchar(50);
                declare @DEFAULTPOSTCODE nvarchar(12);
                declare @DEFAULTDONOTMAIL bit;
                declare @DEFAULTSTARTDATE dbo.UDT_MONTHDAY;
                declare @DEFAULTENDDATE dbo.UDT_MONTHDAY;

                declare @SALESMETHODTYPECODE tinyint;
                declare @CONSTITUENTID uniqueidentifier;

                select
                    @SALESMETHODTYPECODE = SALESMETHODTYPECODE,
                    @CONSTITUENTID = CONSTITUENTID,
                    @DEFAULTADDRESSID = ADDRESSID
                from
                    dbo.SALESORDER
                where
                    ID = @SALESORDERID

                declare @ORIGINCODE tinyint = 0;

                if @SALESMETHODTYPECODE = 2  -- Online Sales

                    set @ORIGINCODE = 1;

                -- Branching based on parameter to get an optimal execution plan

                if @DEFAULTADDRESSID is not null begin
                    select
                        @DEFAULTADDRESSID = ID,
                        @DEFAULTADDRESSBLOCK = ADDRESSBLOCK,
                        @DEFAULTCOUNTRYID = COUNTRYID,
                        @DEFAULTSTATEID = STATEID,
                        @DEFAULTCITY = CITY,
                        @DEFAULTPOSTCODE = POSTCODE,
                        @DEFAULTDONOTMAIL = DONOTMAIL,
                        @DEFAULTSTARTDATE = STARTDATE,
                        @DEFAULTENDDATE = ENDDATE
                    from
                        dbo.ADDRESS
                    where
                        ID = @DEFAULTADDRESSID
                end
                else begin
                    select top 1
                        @DEFAULTADDRESSID = ID,
                        @DEFAULTADDRESSBLOCK = ADDRESSBLOCK,
                        @DEFAULTCOUNTRYID = COUNTRYID,
                        @DEFAULTSTATEID = STATEID,
                        @DEFAULTCITY = CITY,
                        @DEFAULTPOSTCODE = POSTCODE,
                        @DEFAULTDONOTMAIL = DONOTMAIL,
                        @DEFAULTSTARTDATE = STARTDATE,
                        @DEFAULTENDDATE = ENDDATE
                    from
                        dbo.ADDRESS
                    where
                        CONSTITUENTID = @CONSTITUENTID and ISPRIMARY = 1
                end

                declare @MEMBERSHIPID uniqueidentifier;
                declare @MEMBERCONSTITUENTID uniqueidentifier;
                --Primary: primary member address

                declare @PRIMARYADDRESSID uniqueidentifier;
                declare @PRIMARYADDRESSBLOCK nvarchar(150);
                declare @PRIMARYCOUNTRYID uniqueidentifier;
                declare @PRIMARYSTATEID uniqueidentifier = null;
                declare @PRIMARYCITY nvarchar(50);
                declare @PRIMARYPOSTCODE nvarchar(12);
                declare @PRIMARYDONOTMAIL bit;
                declare @PRIMARYSTARTDATE dbo.UDT_MONTHDAY;
                declare @PRIMARYENDDATE dbo.UDT_MONTHDAY;

                declare MEMBERSHIP_CURSOR cursor local fast_forward for
                select [MEMBERSHIPID]
                from dbo.[SALESORDERITEMMEMBERSHIP]
                inner join dbo.[SALESORDERITEM]
                    on [SALESORDERITEMMEMBERSHIP].[ID] = [SALESORDERITEM].[ID]
                where [SALESORDERITEM].[SALESORDERID] = @SALESORDERID;

                open MEMBERSHIP_CURSOR
                fetch next from MEMBERSHIP_CURSOR into @MEMBERSHIPID
                while @@FETCH_STATUS = 0
                begin
                    select top 1 
                        @PRIMARYADDRESSID = [ADDRESS].[ID],
                        @PRIMARYADDRESSBLOCK = [ADDRESS].[ADDRESSBLOCK],
                        @PRIMARYCOUNTRYID = [ADDRESS].[COUNTRYID],
                        @PRIMARYSTATEID = [ADDRESS].[STATEID],
                        @PRIMARYCITY = [ADDRESS].[CITY],
                        @PRIMARYPOSTCODE = [ADDRESS].[POSTCODE],
                        @PRIMARYDONOTMAIL = [ADDRESS].[DONOTMAIL],
                        @PRIMARYSTARTDATE = [ADDRESS].[STARTDATE],
                        @PRIMARYENDDATE = [ADDRESS].[ENDDATE]
                    from dbo.[ADDRESS]
                    inner join dbo.[MEMBER]
                        on [ADDRESS].[CONSTITUENTID] = [MEMBER].[CONSTITUENTID]
                    inner join dbo.[MEMBERSHIP]
                        on [MEMBER].[MEMBERSHIPID] = [MEMBERSHIP].[ID]
                    where 
                        [ADDRESS].[ISPRIMARY] = 1 and
                        [MEMBERSHIP].[ID] = @MEMBERSHIPID and
                        [MEMBER].[ISPRIMARY] = 1 and
                        [MEMBER].[ISDROPPED] = 0;

                    if @PRIMARYADDRESSID is not null or @DEFAULTADDRESSID is not null
                    begin
                        declare MEMBERS_CURSOR cursor local fast_forward for
                        select [SALESORDERITEMMEMBER].[CONSTITUENTID]
                        from dbo.[SALESORDERITEMMEMBER]
                        inner join dbo.[SALESORDERITEMMEMBERSHIP]
                            on [SALESORDERITEMMEMBER].[SALESORDERITEMMEMBERSHIPID] = [SALESORDERITEMMEMBERSHIP].[ID]
                        inner join dbo.[SALESORDERITEM]
                            on [SALESORDERITEMMEMBERSHIP].[ID] = [SALESORDERITEM].[ID]
                        where 
                            [SALESORDERITEM].[SALESORDERID] = @SALESORDERID and
                            not exists (select 1 from dbo.[ADDRESS] where [CONSTITUENTID] = [SALESORDERITEMMEMBER].[CONSTITUENTID])

                        --Copy: address to copy; setting here so it doesn't have to be figured out inside the loop

                        declare @COPYADDRESSBLOCK nvarchar(150);
                        declare @COPYCOUNTRYID uniqueidentifier;
                        declare @COPYSTATEID uniqueidentifier = null;
                        declare @COPYCITY nvarchar(50);
                        declare @COPYPOSTCODE nvarchar(12);
                        declare @COPYDONOTMAIL bit;
                        declare @COPYSTARTDATE dbo.UDT_MONTHDAY;
                        declare @COPYENDDATE dbo.UDT_MONTHDAY;
                        if @PRIMARYADDRESSID is not null
                        begin
                            select
                                @COPYADDRESSBLOCK = @PRIMARYADDRESSBLOCK,
                                @COPYCOUNTRYID = @PRIMARYCOUNTRYID,
                                @COPYSTATEID = @PRIMARYSTATEID,
                                @COPYCITY = @PRIMARYCITY,
                                @COPYPOSTCODE = @PRIMARYPOSTCODE,
                                @COPYDONOTMAIL = @PRIMARYDONOTMAIL,
                                @COPYSTARTDATE = @PRIMARYSTARTDATE,
                                @COPYENDDATE = @PRIMARYENDDATE
                        end
                        else
                        begin
                            select
                                @COPYADDRESSBLOCK = @DEFAULTADDRESSBLOCK,
                                @COPYCOUNTRYID = @DEFAULTCOUNTRYID,
                                @COPYSTATEID = @DEFAULTSTATEID,
                                @COPYCITY = @DEFAULTCITY,
                                @COPYPOSTCODE = @DEFAULTPOSTCODE,
                                @COPYDONOTMAIL = @DEFAULTDONOTMAIL,
                                @COPYSTARTDATE = @DEFAULTSTARTDATE,
                                @COPYENDDATE = @DEFAULTENDDATE
                        end

                        open MEMBERS_CURSOR
                        fetch next from MEMBERS_CURSOR into @MEMBERCONSTITUENTID;
                        while  @@FETCH_STATUS = 0
                        begin
                            exec dbo.USP_ADDRESS_CREATE
                                null, --ID

                                @CHANGEAGENTID,
                                @MEMBERCONSTITUENTID,
                                null, --ADDRESSTYPECODEID

                                1, --Primary

                                @COPYDONOTMAIL,
                                @COPYSTARTDATE,
                                @COPYENDDATE,
                                @COPYCOUNTRYID,
                                @COPYSTATEID,
                                @COPYADDRESSBLOCK,
                                @COPYCITY,
                                @COPYPOSTCODE,
                                @ORIGINCODE = @ORIGINCODE;

                            fetch next from MEMBERS_CURSOR into @MEMBERCONSTITUENTID;
                        end
                        close MEMBERS_CURSOR
                        deallocate MEMBERS_CURSOR
                    end

                    fetch next from MEMBERSHIP_CURSOR into @MEMBERSHIPID
                end
                close MEMBERSHIP_CURSOR
                deallocate MEMBERSHIP_CURSOR
            end