USP_DATAFORMTEMPLATE_ADD_SALESORDERITEMGENERIC_MEMBERSHIP_ONLINE

The save procedure used by the add dataform template "Sales Order Item Generic Membership Online Add Data Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@SALESORDERID uniqueidentifier IN Input parameter indicating the context ID for the record being added.
@DESCRIPTION nvarchar(255) IN Description
@QUANTITY decimal(18, 0) IN Quantity
@AMOUNT money IN Amount
@DATA xml IN Data
@OPTIONS xml IN Options
@CALLBACKURL nvarchar(255) IN Callback URL
@SYSTEMTYPENAME nvarchar(255) IN System Type Name
@ASSEMBLYNAME nvarchar(255) IN Assembly Name
@ATTRIBUTES xml IN Attributes
@CATEGORYNAME nvarchar(255) IN Category Name
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@ACKNOWLEDGEMENT nvarchar(max) IN Acknowledgement
@MEMBERSHIPID uniqueidentifier IN Membership ID
@MEMBERSHIPPROGRAMID uniqueidentifier IN Membership program ID
@MEMBERSHIPLEVELID uniqueidentifier IN Membership level ID
@MEMBERSHIPLEVELTERMID uniqueidentifier IN Membership level term ID
@MEMBERSHIPLEVELTYPEID uniqueidentifier IN Membership level type code ID
@MEMBERSHIPADDONS xml IN
@NUMBEROFCHILDREN tinyint IN

Definition

Copy

                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_SALESORDERITEMGENERIC_MEMBERSHIP_ONLINE (
                        @ID uniqueidentifier = null output,
                        @SALESORDERID uniqueidentifier,
                        @DESCRIPTION nvarchar(255) = null,        
                        @QUANTITY decimal = 1,
                        @AMOUNT money,            
                        @DATA xml = null,
                        @OPTIONS xml = null,
                        @CALLBACKURL nvarchar(255) = null,
                        @SYSTEMTYPENAME nvarchar(255) = null,
                        @ASSEMBLYNAME nvarchar(255) = null,
                        @ATTRIBUTES xml = null,
                        @CATEGORYNAME nvarchar(255) = null,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @ACKNOWLEDGEMENT nvarchar(max) = null,
                        @MEMBERSHIPID uniqueidentifier = null,
                        @MEMBERSHIPPROGRAMID uniqueidentifier,
                        @MEMBERSHIPLEVELID uniqueidentifier,
                        @MEMBERSHIPLEVELTERMID uniqueidentifier,
                        @MEMBERSHIPLEVELTYPEID uniqueidentifier = null,
                        @MEMBERSHIPADDONS xml= '',
                        @NUMBEROFCHILDREN tinyint = 0
                    )
                    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
                            -- handle inserting the data

                                insert into dbo.SALESORDERITEM
                                (
                                    [ID], 
                                    [SALESORDERID], 
                                    [TYPECODE], 
                                    [DESCRIPTION], 
                                    [QUANTITY], 
                                    [PRICE], 
                                    [ADDEDBYID], 
                                    [CHANGEDBYID], 
                                    [DATEADDED], 
                                    [DATECHANGED],
                                    [DATA],
                                    [OPTIONS],
                                    [CALLBACKURL],
                                    [SYSTEMTYPENAME],
                                    [ASSEMBLYNAME],
                                    [ATTRIBUTES],
                                    [CATEGORYNAME],
                                    [ACKNOWLEDGEMENT]
                                )
                                values
                                (
                                    @ID
                                    @SALESORDERID
                                    1
                                    @DESCRIPTION
                                    @QUANTITY
                                    @AMOUNT,
                                    @CHANGEAGENTID
                                    @CHANGEAGENTID
                                    @CURRENTDATE
                                    @CURRENTDATE,
                                    @DATA,
                                    @OPTIONS,
                                    @CALLBACKURL,
                                    @SYSTEMTYPENAME,
                                    @ASSEMBLYNAME,
                                    @ATTRIBUTES,
                                    @CATEGORYNAME,
                                    @ACKNOWLEDGEMENT
                                )

                                declare @EXPIRATIONDATE datetime;
                                declare @ACTIONCODE tinyint;
                                select @ACTIONCODE = dbo.UFN_MEMBERSHIPTRANSACTION_DETERMINEACTIONCODE(@MEMBERSHIPID, @MEMBERSHIPLEVELID, @CURRENTDATE)

                                if @ACTIONCODE = 0 or @ACTIONCODE = 5 --join/rejoin
                                    set @EXPIRATIONDATE = dbo.UFN_MEMBERSHIP_CALCULATEEXPIRATIONDATEBYLEVEL(@MEMBERSHIPLEVELID, @MEMBERSHIPLEVELTERMID, @CURRENTDATE);
                                else
                                begin
                                    declare @CURRENTSTATUS tinyint;
                                    select 
                                        @EXPIRATIONDATE = [EXPIRATIONDATE], 
                                        @CURRENTSTATUS = [STATUSCODE]
                                    from dbo.[MEMBERSHIP] 
                                    where ID = @MEMBERSHIPID;

                                    if @CURRENTSTATUS = 2 --pending membership                    
                                        set @EXPIRATIONDATE = dbo.UFN_MEMBERSHIP_CALCULATEEXPIRATIONDATEBYLEVEL(@MEMBERSHIPLEVELID, @MEMBERSHIPLEVELTERMID, @CURRENTDATE);
                                    else
                                        set @EXPIRATIONDATE = dbo.UFN_MEMBERSHIP_CALCULATERENEWALEXPIRATION(@EXPIRATIONDATE, @MEMBERSHIPLEVELTERMID);
                                end

                                declare @MEMBERSHIPLEVELTYPECODEID uniqueidentifier = null;
                                if @MEMBERSHIPLEVELTYPEID is not null
                                    select @MEMBERSHIPLEVELTYPECODEID = [LEVELTYPECODEID] from dbo.[MEMBERSHIPLEVELTYPE] where [ID] = @MEMBERSHIPLEVELTYPEID;

                                insert into dbo.[SALESORDERITEMMEMBERSHIP] (
                                    [ID],
                                    [MEMBERSHIPID],
                                    [MEMBERSHIPPROGRAMID],
                                    [MEMBERSHIPLEVELID],
                                    [MEMBERSHIPLEVELTERMID],
                                    [MEMBERSHIPLEVELTYPECODEID],
                                    [EXPIRATIONDATE],
                                    [NUMBEROFCHILDREN],
                                    [ADDEDBYID], 
                                    [CHANGEDBYID], 
                                    [DATEADDED], 
                                    [DATECHANGED]
                                )
                                values (
                                    @ID,
                                    @MEMBERSHIPID,
                                    @MEMBERSHIPPROGRAMID,
                                    @MEMBERSHIPLEVELID,
                                    @MEMBERSHIPLEVELTERMID,
                                    @MEMBERSHIPLEVELTYPECODEID,
                                    @EXPIRATIONDATE,
                                    @NUMBEROFCHILDREN,
                                    @CHANGEAGENTID
                                    @CHANGEAGENTID
                                    @CURRENTDATE
                                    @CURRENTDATE
                                )

                                declare @ADDONS_TABLE table (
                                    [ID] uniqueidentifier,
                                    [ADDONID] uniqueidentifier,
                                    [ADDONNAME] nvarchar(100),
                                    [ADDONTYPECODE] tinyint,
                                    [PRICE] money,
                                    [quantity] smallint
                                );

                                insert into @ADDONS_TABLE select
                                    newid(),
                                    ADDON.ID,
                                    ADDON.NAME,
                                    ADDON.ADDONTYPECODE,
                                    T.membershipaddon.value('(PRICE)[1]','money') as 'PRICE',
                                    T.membershipaddon.value('(QUANTITY)[1]','int') as 'NUMBEROFADDONS'
                                from @MEMBERSHIPADDONS.nodes('/MEMBERSHIPADDONS/ITEM') T(membershipaddon)
                                inner join dbo.ADDON with (nolock) on
                                    T.membershipaddon.value('(ADDONID)[1]','uniqueidentifier') = ADDON.ID

                                insert into dbo.SALESORDERITEM
                                (
                                    ID,
                                    SALESORDERID,
                                    TYPECODE,
                                    [DESCRIPTION],
                                    QUANTITY,
                                    PRICE,
                                    ADDEDBYID,
                                    CHANGEDBYID,
                                    DATEADDED,
                                    DATECHANGED
                                )
                                (
                                    select
                                        [ADDONS].ID,
                                        @SALESORDERID,
                                        16,
                                        [ADDONS].ADDONNAME,
                                        [ADDONS].QUANTITY,
                                        [ADDONS].PRICE,
                                        @CHANGEAGENTID
                                        @CHANGEAGENTID
                                        @CURRENTDATE
                                        @CURRENTDATE
                                    from @ADDONS_TABLE [ADDONS]
                                );

                                insert into dbo.SALESORDERITEMMEMBERSHIPADDON
                                (
                                    ID,
                                    SALESORDERITEMMEMBERSHIPID,
                                    ADDONTYPECODE,
                                    ADDONID,
                                    ADDEDBYID,
                                    CHANGEDBYID,
                                    DATEADDED,
                                    DATECHANGED
                                )
                                (
                                    select
                                        [ADDONS].ID,
                                        @ID,
                                        [ADDONS].ADDONTYPECODE,
                                        [ADDONS].ADDONID,
                                        @CHANGEAGENTID,
                                        @CHANGEAGENTID,
                                        @CURRENTDATE,
                                        @CURRENTDATE
                                    from @ADDONS_TABLE [ADDONS]
                                );

                            exec dbo.USP_SALESORDER_APPLYITEMDISCOUNTS @SALESORDERID, @CHANGEAGENTID;
                            exec dbo.USP_SALESORDER_APPLYORDERDISCOUNTS @SALESORDERID, @CHANGEAGENTID;    
                            exec dbo.USP_SALESORDER_CALCULATETAXES @SALESORDERID, @CHANGEAGENTID;  
                        end try
                        begin catch
                            exec dbo.USP_RAISE_ERROR
                            return 1
                        end catch

                    return 0;