USP_SALESORDERITEMMEMBERSHIP_ADD
Adds a membership transaction.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@SALESORDERID | uniqueidentifier | IN | |
@MEMBERSHIPID | uniqueidentifier | IN | |
@MEMBERSHIPPROGRAMID | uniqueidentifier | IN | |
@MEMBERSHIPLEVELID | uniqueidentifier | IN | |
@MEMBERSHIPLEVELTERMID | uniqueidentifier | IN | |
@MEMBERSHIPLEVELTYPECODEID | uniqueidentifier | IN | |
@NUMBEROFCHILDREN | tinyint | IN | |
@COMMENTS | nvarchar(1000) | IN | |
@ISGIFT | bit | IN | |
@SENDRENEWALCODE | tinyint | IN | |
@EXPIRATIONDATE | datetime | IN | |
@MEMBERS | xml | IN | |
@GIVENBYID | uniqueidentifier | IN | |
@ISEDIT | bit | IN | |
@NUMBEROFADDONADULTS | smallint | IN | |
@NUMBEROFADDONGUESTS | smallint | IN | |
@PRICE | money | IN | |
@SALESORDERITEMMEMBERSHIPTYPECODE | smallint | IN |
Definition
Copy
CREATE procedure dbo.USP_SALESORDERITEMMEMBERSHIP_ADD
(
@ID uniqueidentifier = null output,
@CHANGEAGENTID uniqueidentifier = null,
@SALESORDERID uniqueidentifier = null,
@MEMBERSHIPID uniqueidentifier = null,
@MEMBERSHIPPROGRAMID uniqueidentifier = null,
@MEMBERSHIPLEVELID uniqueidentifier = null,
@MEMBERSHIPLEVELTERMID uniqueidentifier = null,
@MEMBERSHIPLEVELTYPECODEID uniqueidentifier = null,
@NUMBEROFCHILDREN tinyint = 0,
@COMMENTS nvarchar(1000) = null,
@ISGIFT bit = 0,
@SENDRENEWALCODE tinyint = 1,
@EXPIRATIONDATE datetime = null,
@MEMBERS xml = null,
@GIVENBYID uniqueidentifier = null,
@ISEDIT bit = 0,
@NUMBEROFADDONADULTS smallint = null,
@NUMBEROFADDONGUESTS smallint = null,
@PRICE money = null,
@SALESORDERITEMMEMBERSHIPTYPECODE smallint = 1
)
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();
declare @CURRENTMEMBERSHIPPROGRAMID uniqueidentifier;
if @ISEDIT = 1
begin
select @SALESORDERID = SALESORDERID from dbo.SALESORDERITEM where ID = @ID;
select
@MEMBERSHIPID = MEMBERSHIPID,
@CURRENTMEMBERSHIPPROGRAMID = MEMBERSHIPPROGRAMID
from
dbo.SALESORDERITEMMEMBERSHIP
where
ID = @ID;
end
begin try
if (select STATUSCODE from dbo.SALESORDER where ID = @SALESORDERID) not in (0, 6, 7)
raiserror('ERR_ORDERNOTPENDING', 13, 1);
-- Number of members validation
if @MEMBERS is null
raiserror('ERR_ATLEASTONEMEMBER', 13, 1);
declare @MEMBERS_TABLE table (
[ID] uniqueidentifier,
[CONSTITUENTID] uniqueidentifier,
[ISPRIMARY] bit,
[MEMBERID] uniqueidentifier,
[ISCAREGIVER] bit
);
insert into @MEMBERS_TABLE select
T.members.value('(ID)[1]','uniqueidentifier') as 'ID',
T.members.value('(CONSTITUENTID)[1]','uniqueidentifier') as 'CONSTITUENTID',
T.members.value('(ISPRIMARY)[1]','bit') as 'ISPRIMARY',
T.members.value('(MEMBERID)[1]','uniqueidentifier') as 'MEMBERID',
isnull(T.members.value('(ISCAREGIVER)[1]','bit'), 0) as 'ISCAREGIVER'
from
@MEMBERS.nodes('/MEMBERS/ITEM') T(members)
update @MEMBERS_TABLE set ID = newid() where (ID is null) or (ID = '00000000-0000-0000-0000-000000000000');
-- build a temporary table containing the values from the XML
declare @CARDS_TABLE table (
[ID] uniqueidentifier,
[MEMBERSHIPCARDID] uniqueidentifier,
[NAMEONCARD] nvarchar(700),
[EXPIRATIONDATE] datetime,
[MEMBERID] uniqueidentifier);
insert into @CARDS_TABLE select
[ID],
[MEMBERSHIPCARDID],
[NAMEONCARD],
[EXPIRATIONDATE],
[MEMBERID]
from dbo.UFN_SALESORDERITEMMEMBERSHIP_GETMEMBERSHIPCARDS_FROMITEMLISTXML(@MEMBERS);
update @CARDS_TABLE set ID = newid() where (ID is null) or (ID = '00000000-0000-0000-0000-000000000000');
-- Check to make sure at least one member is the primary member
if not exists
(
select 1
from @MEMBERS_TABLE
where ISPRIMARY = 1
)
begin
raiserror('ERR_NOPRIMARYMEMBER',13,1)
end
if exists
(
select count(CONSTITID)
from
(
select CONSTITUENTID CONSTITID
from @MEMBERS_TABLE
) Result
group by CONSTITID
having count(*) > 1
)
raiserror('ERR_CONSTITUENTMORETHANONCE', 13,1);
-- Check for correct number of children, members, and cards
declare @NUMBEROFMEMBERS smallint;
declare @CHILDREN smallint;
declare @CARDSALLOWED smallint;
set @NUMBEROFMEMBERS = 0;
set @CHILDREN = 0;
set @CARDSALLOWED = 0;
set @NUMBEROFADDONADULTS = isnull(@NUMBEROFADDONADULTS, 0)
set @NUMBEROFADDONGUESTS = isnull(@NUMBEROFADDONGUESTS, 0)
select
@CHILDREN = MEMBERSHIPLEVEL.CHILDRENALLOWED,
@NUMBEROFMEMBERS = MEMBERSHIPLEVEL.MEMBERSALLOWED + @NUMBEROFADDONADULTS,
@CARDSALLOWED = MEMBERSHIPLEVEL.CARDSALLOWED
from
dbo.MEMBERSHIPLEVEL
inner join
dbo.MEMBERSHIPPROGRAM on MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID = MEMBERSHIPPROGRAM.ID
where
MEMBERSHIPLEVEL.ID = @MEMBERSHIPLEVELID;
-- Set the price if it isn't manually set
if @PRICE is null
begin
set @PRICE = 0;
select
@PRICE = isnull(MEMBERSHIPLEVELTERM.AMOUNT, 0)
from dbo.MEMBERSHIPLEVELTERM
where MEMBERSHIPLEVELTERM.ID = @MEMBERSHIPLEVELTERMID
end
declare @ERRORMSG nvarchar(52);
set @ERRORMSG = 'Only ' +convert(nvarchar(6), @NUMBEROFMEMBERS)+ ' member(s) are allowed for this membership.';
declare @MEMBERSCOUNT integer = 0
select @MEMBERSCOUNT = count(CONSTITUENTID)
from @MEMBERS_TABLE
if @NUMBEROFMEMBERS > 0 and @NUMBEROFMEMBERS < @MEMBERSCOUNT
begin
raiserror(@ERRORMSG, 13, 1);
end
set @ERRORMSG = 'The number of children may not be larger than '+convert(nvarchar(6), @CHILDREN)+'.'
-- Number of children validation
if @CHILDREN < @NUMBEROFCHILDREN and @CHILDREN > 0
begin
raiserror(@ERRORMSG, 13, 1);
end
--only validate cards if a number is set
--if @CARDSALLOWED > 0
--begin
declare @CARDCOUNT smallint;
select @CARDCOUNT = count(ID)
from @CARDS_TABLE;
-- Number of cards validation
set @ERRORMSG = 'This membership level only allows up to '+convert(nvarchar(6),@CARDSALLOWED)+' card(s).';
if @CARDCOUNT > @CARDSALLOWED
begin
raiserror(@ERRORMSG, 13,1);
end
--end
declare @ACTIONCODE tinyint;
declare @ACTION nvarchar(25);
select @ACTIONCODE = dbo.UFN_MEMBERSHIPTRANSACTION_DETERMINEACTIONCODE(@MEMBERSHIPID, @MEMBERSHIPLEVELID, @CURRENTDATE);
declare @ORDERITEMDESCRIPTION nvarchar(255);
set @ORDERITEMDESCRIPTION = isnull(dbo.UFN_MEMBERSHIPPROGRAM_GETNAME(@MEMBERSHIPPROGRAMID) + ' - ' +
dbo.UFN_MEMBERSHIPLEVEL_GETNAME(@MEMBERSHIPLEVELID) + ' (' +
dbo.UFN_MEMBERSHIPLEVELTERM_GETVALUE(@MEMBERSHIPLEVELTERMID) + '): ', '');
declare @STATUSCODE tinyint;
select @STATUSCODE = STATUSCODE from dbo.MEMBERSHIP where ID = @MEMBERSHIPID;
if @ACTIONCODE = 0 or @STATUSCODE = 2
set @ACTION = 'Join';
else if @ACTIONCODE = 1
set @ACTION = 'Renew';
else if @ACTIONCODE = 2
set @ACTION = 'Upgrade';
else if @ACTIONCODE = 3
set @ACTION = 'Downgrade';
else if @ACTIONCODE = 5
set @ACTION = 'Rejoin';
else
set @ACTION = 'Unknown';
set @ORDERITEMDESCRIPTION = @ORDERITEMDESCRIPTION + @ACTION;
declare @SALESORDERITEMADDONADULTID uniqueidentifier;
declare @ADDONADULTSPRICE money;
declare @SALESORDERITEMADDONGUESTID uniqueidentifier;
declare @ADDONGUESTSPRICE money;
if @ISEDIT = 0 begin
declare @CONSTITUENTID uniqueidentifier;
if @GIVENBYID is not null
set @CONSTITUENTID = @GIVENBYID;
else
select
@CONSTITUENTID = CONSTITUENTID
from
@MEMBERS_TABLE
where
ISPRIMARY = 1;
if @CONSTITUENTID is not null
update
dbo.SALESORDER
set
CONSTITUENTID = @CONSTITUENTID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
ID = @SALESORDERID
and CONSTITUENTID is null;
--Make the CONSTITUENTID the recipient of the order if there is no recipient
if @CONSTITUENTID is not null and (select [RECIPIENTID] from dbo.[SALESORDER] where [ID] = @SALESORDERID) is null
begin
update dbo.[SALESORDER]
set
[RECIPIENTID] = @CONSTITUENTID,
[ADDRESSID] = (select top(1) [ID] from dbo.[ADDRESS] where [CONSTITUENTID] = @CONSTITUENTID and [ISPRIMARY] = 1 and [DONOTMAIL] = 0),
[PHONEID] = (select top(1) [ID] from dbo.[PHONE] where [PHONE].[CONSTITUENTID] = @CONSTITUENTID and [PHONE].[ISPRIMARY] = 1 and [DONOTCALL] = 0),
[EMAILADDRESSID] = (select top(1) [ID] from dbo.[EMAILADDRESS] where [CONSTITUENTID] = @CONSTITUENTID and [ISPRIMARY] = 1 and [DONOTEMAIL] = 0),
[DATECHANGED] = @CURRENTDATE,
[CHANGEDBYID] = @CHANGEAGENTID
where [ID] = @SALESORDERID
end
insert into dbo.SALESORDERITEM
(
ID,
SALESORDERID,
TYPECODE,
[DESCRIPTION],
QUANTITY,
PRICE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
@ID,
@SALESORDERID,
1,
@ORDERITEMDESCRIPTION,
1,
@PRICE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
insert into dbo.SALESORDERITEMMEMBERSHIP
(
ID,
MEMBERSHIPID,
MEMBERSHIPPROGRAMID,
MEMBERSHIPPROGRAMNAME,
MEMBERSHIPLEVELID,
MEMBERSHIPLEVELTERMID,
MEMBERSHIPLEVELTYPECODEID,
NUMBEROFCHILDREN,
COMMENTS,
ISGIFT,
SENDRENEWALCODE,
EXPIRATIONDATE,
GIVENBYID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED,
TYPECODE
)
values
(
@ID,
@MEMBERSHIPID,
@MEMBERSHIPPROGRAMID,
coalesce((select [MEMBERSHIPPROGRAM].[NAME] from dbo.[MEMBERSHIPPROGRAM] where [MEMBERSHIPPROGRAM].[ID] = @MEMBERSHIPPROGRAMID),''),
@MEMBERSHIPLEVELID,
@MEMBERSHIPLEVELTERMID,
@MEMBERSHIPLEVELTYPECODEID,
@NUMBEROFCHILDREN,
@COMMENTS,
@ISGIFT,
@SENDRENEWALCODE,
@EXPIRATIONDATE,
@GIVENBYID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
@SALESORDERITEMMEMBERSHIPTYPECODE
);
-- Insert add-ons
if @NUMBEROFADDONADULTS > 0
begin
set @SALESORDERITEMADDONADULTID = newid();
select @ADDONADULTSPRICE = ADDONADULTPRICE
from dbo.MEMBERSHIPPROGRAM where MEMBERSHIPPROGRAM.ID = @MEMBERSHIPPROGRAMID
insert into dbo.SALESORDERITEM
(
ID,
SALESORDERID,
TYPECODE,
[DESCRIPTION],
QUANTITY,
PRICE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
@SALESORDERITEMADDONADULTID,
@SALESORDERID,
16,
'Additional members',
@NUMBEROFADDONADULTS,
@ADDONADULTSPRICE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
insert into dbo.SALESORDERITEMMEMBERSHIPADDON
(
ID,
MEMBERSHIPID,
SALESORDERITEMMEMBERSHIPID,
ADDONTYPECODE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
@SALESORDERITEMADDONADULTID,
@MEMBERSHIPID,
@ID,
0,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
end
if @NUMBEROFADDONGUESTS > 0
begin
set @SALESORDERITEMADDONGUESTID = newid();
select @ADDONGUESTSPRICE = ADDONGUESTPRICE
from dbo.MEMBERSHIPPROGRAM where MEMBERSHIPPROGRAM.ID = @MEMBERSHIPPROGRAMID
insert into dbo.SALESORDERITEM
(
ID,
SALESORDERID,
TYPECODE,
[DESCRIPTION],
QUANTITY,
PRICE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
@SALESORDERITEMADDONGUESTID,
@SALESORDERID,
16,
'Guests',
@NUMBEROFADDONGUESTS,
@ADDONGUESTSPRICE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
insert into dbo.SALESORDERITEMMEMBERSHIPADDON
(
ID,
MEMBERSHIPID,
SALESORDERITEMMEMBERSHIPID,
ADDONTYPECODE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
@SALESORDERITEMADDONGUESTID,
@MEMBERSHIPID,
@ID,
1,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
end
-- The following commented out execute is refactored to be inline below.
--exec dbo.USP_SALESORDERITEMMEMBERSHIP_GETMEMBERS_ADDFROMXML @ID, @MEMBERS, @CHANGEAGENTID, @CURRENTDATE;
insert into [SALESORDERITEMMEMBER]
([SALESORDERITEMMEMBERSHIPID],
[CONSTITUENTID],
[ID],
[ISCAREGIVER],
[ISPRIMARY],
[MEMBERID],
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED)
select
@ID,
[CONSTITUENTID],
[ID],
[ISCAREGIVER],
[ISPRIMARY],
[MEMBERID],
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from @MEMBERS_TABLE;
-- The following commented out execute is refactored to be inline below.
--exec dbo.USP_SALESORDERITEMMEMBERSHIP_GETMEMBERSHIPCARDS_ADDFROMXML @MEMBERS, @CHANGEAGENTID, @CURRENTDATE;
insert into [SALESORDERITEMMEMBERSHIPCARD]
(
[ID],
[MEMBERSHIPCARDID],
[SALESORDERITEMMEMBERID],
[NAMEONCARD],
[EXPIRATIONDATE],
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
[ID],
[MEMBERSHIPCARDID],
[MEMBERID],
[NAMEONCARD],
[EXPIRATIONDATE],
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
@CARDS_TABLE;
exec dbo.USP_SALESORDER_APPLYITEMDISCOUNTS @SALESORDERID, @CHANGEAGENTID;
exec dbo.USP_SALESORDER_APPLYORDERDISCOUNTS @SALESORDERID, @CHANGEAGENTID;
exec dbo.USP_SALESORDER_CALCULATETAXES @SALESORDERID, @CHANGEAGENTID;
exec dbo.USP_SALESORDER_UPDATEMEMBERSHIPPROMOS @SALESORDERID, @CHANGEAGENTID;
end
else begin
if @MEMBERSHIPID is not null and (@MEMBERSHIPPROGRAMID is null or @CURRENTMEMBERSHIPPROGRAMID <> @MEMBERSHIPPROGRAMID)
raiserror('ERR_PROGRAMCHANGED', 13, 1);
-- Check if allow multiple memberships constraint is satisfied
if exists(
select *
from dbo.UFN_SALESORDERITEMMEMBERSHIP_GETMEMBERS(@ID)
where dbo.UFN_SALESORDERITEMMEMBERSHIP_VALIDALLOWMULTIPLEMEMBERSHIPS(CONSTITUENTID, @ID, @MEMBERSHIPPROGRAMID) <> 1)
raiserror('ERR_VALIDALLOWMULTIPLEMEMBERSHIPS', 13, 1);
update
dbo.SALESORDERITEM
set
[DESCRIPTION] = @ORDERITEMDESCRIPTION,
PRICE = @PRICE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
ID = @ID;
update
dbo.SALESORDERITEMMEMBERSHIP
set
MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID,
MEMBERSHIPPROGRAMNAME = coalesce((select [MEMBERSHIPPROGRAM].[NAME] from dbo.[MEMBERSHIPPROGRAM] where [MEMBERSHIPPROGRAM].[ID] = @MEMBERSHIPPROGRAMID),''),
MEMBERSHIPLEVELID = @MEMBERSHIPLEVELID,
MEMBERSHIPLEVELTERMID = @MEMBERSHIPLEVELTERMID,
MEMBERSHIPLEVELTYPECODEID = @MEMBERSHIPLEVELTYPECODEID,
NUMBEROFCHILDREN = @NUMBEROFCHILDREN,
COMMENTS = @COMMENTS,
ISGIFT = @ISGIFT,
SENDRENEWALCODE = @SENDRENEWALCODE,
EXPIRATIONDATE = @EXPIRATIONDATE,
GIVENBYID = @GIVENBYID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
ID = @ID;
-- Update add-ons
if @NUMBEROFADDONADULTS > 0
begin
set @SALESORDERITEMADDONADULTID = null;
select @SALESORDERITEMADDONADULTID = ID
from dbo.SALESORDERITEMMEMBERSHIPADDON
where SALESORDERITEMMEMBERSHIPID = @ID and ADDONTYPECODE = 0;
if not @SALESORDERITEMADDONADULTID is null
begin
select @ADDONADULTSPRICE = ADDONADULTPRICE
from dbo.MEMBERSHIPPROGRAM where MEMBERSHIPPROGRAM.ID = @MEMBERSHIPPROGRAMID
update dbo.SALESORDERITEM
set
QUANTITY = @NUMBEROFADDONADULTS,
PRICE = @ADDONADULTSPRICE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @SALESORDERITEMADDONADULTID
end
else
begin
set @SALESORDERITEMADDONADULTID = newid();
select @ADDONADULTSPRICE = ADDONADULTPRICE
from dbo.MEMBERSHIPPROGRAM where MEMBERSHIPPROGRAM.ID = @MEMBERSHIPPROGRAMID
insert into dbo.SALESORDERITEM
(
ID,
SALESORDERID,
TYPECODE,
[DESCRIPTION],
QUANTITY,
PRICE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
@SALESORDERITEMADDONADULTID,
@SALESORDERID,
16,
'Additional members',
@NUMBEROFADDONADULTS,
@ADDONADULTSPRICE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
insert into dbo.SALESORDERITEMMEMBERSHIPADDON
(
ID,
MEMBERSHIPID,
SALESORDERITEMMEMBERSHIPID,
ADDONTYPECODE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
@SALESORDERITEMADDONADULTID,
@MEMBERSHIPID,
@ID,
0,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
end
end
else
begin
set @SALESORDERITEMADDONADULTID = null;
select @SALESORDERITEMADDONADULTID = ID
from dbo.SALESORDERITEMMEMBERSHIPADDON
where SALESORDERITEMMEMBERSHIPID = @ID and ADDONTYPECODE = 0;
if not @SALESORDERITEMADDONADULTID is null
exec USP_SALESORDERITEM_DELETEBYID_WITHCHANGEAGENTID @SALESORDERITEMADDONADULTID, @CHANGEAGENTID;
end
if @NUMBEROFADDONGUESTS > 0
begin
set @SALESORDERITEMADDONGUESTID = null;
select @SALESORDERITEMADDONGUESTID = ID
from dbo.SALESORDERITEMMEMBERSHIPADDON
where SALESORDERITEMMEMBERSHIPID = @ID and ADDONTYPECODE = 1;
if not @SALESORDERITEMADDONGUESTID is null
begin
select @ADDONGUESTSPRICE = ADDONGUESTPRICE
from dbo.MEMBERSHIPPROGRAM where MEMBERSHIPPROGRAM.ID = @MEMBERSHIPPROGRAMID
update dbo.SALESORDERITEM
set
QUANTITY = @NUMBEROFADDONGUESTS,
PRICE = @ADDONGUESTSPRICE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @SALESORDERITEMADDONGUESTID
end
else
begin
set @SALESORDERITEMADDONGUESTID = newid();
select @ADDONGUESTSPRICE = ADDONGUESTPRICE
from dbo.MEMBERSHIPPROGRAM where MEMBERSHIPPROGRAM.ID = @MEMBERSHIPPROGRAMID
insert into dbo.SALESORDERITEM
(
ID,
SALESORDERID,
TYPECODE,
[DESCRIPTION],
QUANTITY,
PRICE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
@SALESORDERITEMADDONGUESTID,
@SALESORDERID,
16,
'Guests',
@NUMBEROFADDONGUESTS,
@ADDONGUESTSPRICE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
insert into dbo.SALESORDERITEMMEMBERSHIPADDON
(
ID,
MEMBERSHIPID,
SALESORDERITEMMEMBERSHIPID,
ADDONTYPECODE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
@SALESORDERITEMADDONGUESTID,
@MEMBERSHIPID,
@ID,
1,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
end
end
else
begin
set @SALESORDERITEMADDONGUESTID = null;
select @SALESORDERITEMADDONGUESTID = ID
from dbo.SALESORDERITEMMEMBERSHIPADDON
where SALESORDERITEMMEMBERSHIPID = @ID and ADDONTYPECODE = 1;
if not @SALESORDERITEMADDONGUESTID is null
exec USP_SALESORDERITEM_DELETEBYID_WITHCHANGEAGENTID @SALESORDERITEMADDONGUESTID, @CHANGEAGENTID;
end
-- The following commented out execute is refactored to be inline below.
--exec dbo.USP_SALESORDERITEMMEMBERSHIP_GETMEMBERS_UPDATEFROMXML @ID, @MEMBERS, @CHANGEAGENTID, @CURRENTDATE;
declare @contextCache varbinary(128);
-- cache current context information
set @contextCache = CONTEXT_INFO();
-- set CONTEXT_INFO to @CHANGEAGENTID
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID;
-- delete any items that no longer exist in the XML table
delete from dbo.[SALESORDERITEMMEMBER] where [SALESORDERITEMMEMBER].ID in
(select ID from dbo.UFN_SALESORDERITEMMEMBERSHIP_GETMEMBERS
(
@ID
)
EXCEPT select ID from @MEMBERS_TABLE)
-- reset CONTEXT_INFO to previous value
if not @contextCache is null
set CONTEXT_INFO @contextCache;
-- update the items that exist in the XML table and the db
update [SALESORDERITEMMEMBER]
set [SALESORDERITEMMEMBER].[CONSTITUENTID]=temp.[CONSTITUENTID],
[SALESORDERITEMMEMBER].[ID]=temp.[ID],
[SALESORDERITEMMEMBER].[ISCAREGIVER]=temp.[ISCAREGIVER],
[SALESORDERITEMMEMBER].[ISPRIMARY]=temp.[ISPRIMARY],
[SALESORDERITEMMEMBER].[MEMBERID]=temp.[MEMBERID],
[SALESORDERITEMMEMBER].CHANGEDBYID = @CHANGEAGENTID,
[SALESORDERITEMMEMBER].DATECHANGED = @CURRENTDATE
from dbo.[SALESORDERITEMMEMBER] inner join @MEMBERS_TABLE as [temp] on [SALESORDERITEMMEMBER].ID = [temp].ID
where ([SALESORDERITEMMEMBER].[CONSTITUENTID]<>temp.[CONSTITUENTID]) or
([SALESORDERITEMMEMBER].[CONSTITUENTID] is null and temp.[CONSTITUENTID] is not null) or
([SALESORDERITEMMEMBER].[CONSTITUENTID] is not null and temp.[CONSTITUENTID] is null) or
([SALESORDERITEMMEMBER].[ID]<>temp.[ID]) or
([SALESORDERITEMMEMBER].[ID] is null and temp.[ID] is not null) or
([SALESORDERITEMMEMBER].[ID] is not null and temp.[ID] is null) or
([SALESORDERITEMMEMBER].[ISCAREGIVER]<>temp.[ISCAREGIVER]) or
([SALESORDERITEMMEMBER].[ISCAREGIVER] is null and temp.[ISCAREGIVER] is not null) or
([SALESORDERITEMMEMBER].[ISCAREGIVER] is not null and temp.[ISCAREGIVER] is null) or
([SALESORDERITEMMEMBER].[ISPRIMARY]<>temp.[ISPRIMARY]) or
([SALESORDERITEMMEMBER].[ISPRIMARY] is null and temp.[ISPRIMARY] is not null) or
([SALESORDERITEMMEMBER].[ISPRIMARY] is not null and temp.[ISPRIMARY] is null) or
([SALESORDERITEMMEMBER].[MEMBERID]<>temp.[MEMBERID]) or
([SALESORDERITEMMEMBER].[MEMBERID] is null and temp.[MEMBERID] is not null) or
([SALESORDERITEMMEMBER].[MEMBERID] is not null and temp.[MEMBERID] is null)
-- insert new items
insert into [SALESORDERITEMMEMBER]
([SALESORDERITEMMEMBERSHIPID],
[CONSTITUENTID],
[ID],
[ISCAREGIVER],
[ISPRIMARY],
[MEMBERID],
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED)
select @ID,
[CONSTITUENTID],
[ID],
[ISCAREGIVER],
[ISPRIMARY],
[MEMBERID],
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from @MEMBERS_TABLE as [temp]
where not exists (select ID from dbo.[SALESORDERITEMMEMBER] as data where data.ID = [temp].ID)
-- The following commented out execute is refactored to be inline below.
-- exec dbo.USP_SALESORDERITEMMEMBERSHIP_GETMEMBERSHIPCARDS_UPDATEFROMXML @ID, @MEMBERS, @CHANGEAGENTID, @CURRENTDATE;
-- cache current context information
set @contextCache = CONTEXT_INFO();
-- set CONTEXT_INFO to @CHANGEAGENTID
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID;
-- delete any items that no longer exist in the XML table
delete from
dbo.[SALESORDERITEMMEMBERSHIPCARD]
where
ID in
(
select
SALESORDERITEMMEMBERSHIPCARD.ID
from
dbo.SALESORDERITEMMEMBERSHIPCARD
inner join
dbo.SALESORDERITEMMEMBER on SALESORDERITEMMEMBER.ID = SALESORDERITEMMEMBERSHIPCARD.SALESORDERITEMMEMBERID
where
SALESORDERITEMMEMBER.SALESORDERITEMMEMBERSHIPID = @ID
except select ID from @CARDS_TABLE
);
-- reset CONTEXT_INFO to previous value
if not @contextCache is null
set CONTEXT_INFO @contextCache;
-- update the items that exist in the XML table and the db
update
dbo.[SALESORDERITEMMEMBERSHIPCARD]
set
[SALESORDERITEMMEMBERSHIPCARD].[ID]=temp.[ID],
[SALESORDERITEMMEMBERSHIPCARD].[MEMBERSHIPCARDID]=temp.[MEMBERSHIPCARDID],
[SALESORDERITEMMEMBERSHIPCARD].[NAMEONCARD]=temp.[NAMEONCARD],
[SALESORDERITEMMEMBERSHIPCARD].[EXPIRATIONDATE]=temp.[EXPIRATIONDATE],
[SALESORDERITEMMEMBERSHIPCARD].[SALESORDERITEMMEMBERID]=temp.[MEMBERID],
[SALESORDERITEMMEMBERSHIPCARD].CHANGEDBYID = @CHANGEAGENTID,
[SALESORDERITEMMEMBERSHIPCARD].DATECHANGED = @CURRENTDATE
from
dbo.[SALESORDERITEMMEMBERSHIPCARD]
inner join
@CARDS_TABLE as [temp] on [SALESORDERITEMMEMBERSHIPCARD].ID = [temp].ID
where
([SALESORDERITEMMEMBERSHIPCARD].[ID]<>temp.[ID]) or
([SALESORDERITEMMEMBERSHIPCARD].[ID] is null and temp.[ID] is not null) or
([SALESORDERITEMMEMBERSHIPCARD].[ID] is not null and temp.[ID] is null) or
([SALESORDERITEMMEMBERSHIPCARD].[MEMBERSHIPCARDID]<>temp.[MEMBERSHIPCARDID]) or
([SALESORDERITEMMEMBERSHIPCARD].[MEMBERSHIPCARDID] is null and temp.[MEMBERSHIPCARDID] is not null) or
([SALESORDERITEMMEMBERSHIPCARD].[MEMBERSHIPCARDID] is not null and temp.[MEMBERSHIPCARDID] is null) or
([SALESORDERITEMMEMBERSHIPCARD].[NAMEONCARD]<>temp.[NAMEONCARD]) or
([SALESORDERITEMMEMBERSHIPCARD].[NAMEONCARD] is null and temp.[NAMEONCARD] is not null) or
([SALESORDERITEMMEMBERSHIPCARD].[NAMEONCARD] is not null and temp.[NAMEONCARD] is null) or
([SALESORDERITEMMEMBERSHIPCARD].[EXPIRATIONDATE]<>temp.[EXPIRATIONDATE]) or
([SALESORDERITEMMEMBERSHIPCARD].[EXPIRATIONDATE] is null and temp.[EXPIRATIONDATE] is not null) or
([SALESORDERITEMMEMBERSHIPCARD].[EXPIRATIONDATE] is not null and temp.[EXPIRATIONDATE] is null) or
([SALESORDERITEMMEMBERSHIPCARD].[SALESORDERITEMMEMBERID]<>temp.[MEMBERID]) or
([SALESORDERITEMMEMBERSHIPCARD].[SALESORDERITEMMEMBERID] is null and temp.[MEMBERID] is not null) or
([SALESORDERITEMMEMBERSHIPCARD].[SALESORDERITEMMEMBERID] is not null and temp.[MEMBERID] is null);
-- insert new items
insert into [SALESORDERITEMMEMBERSHIPCARD]
(
[ID],
[MEMBERSHIPCARDID],
[SALESORDERITEMMEMBERID],
[NAMEONCARD],
[EXPIRATIONDATE],
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
[ID],
[MEMBERSHIPCARDID],
[MEMBERID],
[NAMEONCARD],
[EXPIRATIONDATE],
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
@CARDS_TABLE as [temp]
where
not exists (select ID from dbo.[SALESORDERITEMMEMBERSHIPCARD] as data where data.ID = [temp].ID);
exec dbo.USP_SALESORDER_APPLYITEMDISCOUNTS @SALESORDERID, @CHANGEAGENTID;
exec dbo.USP_SALESORDER_APPLYORDERDISCOUNTS @SALESORDERID, @CHANGEAGENTID;
exec dbo.USP_SALESORDER_CALCULATETAXES @SALESORDERID, @CHANGEAGENTID;
exec dbo.USP_SALESORDER_UPDATEMEMBERSHIPPROMOS @SALESORDERID, @CHANGEAGENTID;
declare @TOTALAPPLIEDTICKETDISCOUNT as money = 0
declare @SALESORDERITEMMEMBERSHIPITEMPROMOTIONID as uniqueidentifier
select
@SALESORDERITEMMEMBERSHIPITEMPROMOTIONID = ID,
@TOTALAPPLIEDTICKETDISCOUNT = AMOUNT
from
dbo.SALESORDERITEMMEMBERSHIPITEMPROMOTION
where
SALESORDERITEMMEMBERSHIPITEMPROMOTION.SALESORDERITEMID = @ID
if @PRICE < @TOTALAPPLIEDTICKETDISCOUNT
update dbo.SALESORDERITEMMEMBERSHIPITEMPROMOTION set AMOUNT = @PRICE where SALESORDERITEMMEMBERSHIPITEMPROMOTION.ID = @SALESORDERITEMMEMBERSHIPITEMPROMOTIONID
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;