USP_SALESORDER_HANDLEZEROCOSTMEMBERSHIPS
Handles the transactions for zero cost memberships when completing a sales order.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SALESORDERID | uniqueidentifier | IN | |
@TRANSACTIONDATE | datetime | IN | |
@CONSTITUENTID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_SALESORDER_HANDLEZEROCOSTMEMBERSHIPS
(
@SALESORDERID uniqueidentifier,
@TRANSACTIONDATE datetime,
@CONSTITUENTID uniqueidentifier = null,
@CHANGEAGENTID uniqueidentifier = null,
@CURRENTDATE datetime = null
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CURRENTDATE is null
set @CURRENTDATE = getdate();
if exists (select 1 from dbo.SALESORDERITEM
where SALESORDERID = @SALESORDERID and
TYPECODE = 1 and
TOTAL + (select isnull(sum(ADDON.TOTAL), 0) from dbo.SALESORDERITEM ADDON
inner join dbo.SALESORDERITEMMEMBERSHIPADDON on ADDON.ID = SALESORDERITEMMEMBERSHIPADDON.ID
where SALESORDERITEMMEMBERSHIPADDON.SALESORDERITEMMEMBERSHIPID = SALESORDERITEM.ID) = 0)
begin
declare @SALESORDERITEMID uniqueidentifier;
declare @MEMBERSHIPID uniqueidentifier;
declare @MEMBERSHIPPROGRAMID uniqueidentifier;
declare @MEMBERSHIPLEVELID uniqueidentifier;
declare @MEMBERSHIPLEVELTERMID uniqueidentifier;
declare @MEMBERSHIPLEVELTYPECODEID uniqueidentifier;
declare @NUMBEROFCHILDREN tinyint;
declare @COMMENTS nvarchar(1000);
declare @ISGIFT bit;
declare @SENDRENEWALCODE tinyint;
declare @EXPIRATIONDATE datetime;
declare @MEMBERS xml;
declare @GIVENBYID uniqueidentifier;
declare @MEMBERSHIPCARDS xml;
declare @ADDONS xml;
if @CONSTITUENTID is null
select @CONSTITUENTID = CONSTITUENTID from dbo.SALESORDER where ID = @SALESORDERID;
declare MEMBERSHIPSCURSOR cursor local fast_forward for
select
SALESORDERITEM.ID,
MEMBERSHIPID,
MEMBERSHIPPROGRAMID,
MEMBERSHIPLEVELID,
MEMBERSHIPLEVELTERMID,
MEMBERSHIPLEVELTYPECODEID,
NUMBEROFCHILDREN,
COMMENTS,
ISGIFT,
SENDRENEWALCODE,
EXPIRATIONDATE,
GIVENBYID,
(select
SALESORDERITEMMEMBER.ID as SALESORDERITEMMEMBERID,
SALESORDERITEMMEMBER.MEMBERID,
SALESORDERITEMMEMBER.CONSTITUENTID,
SALESORDERITEMMEMBER.ISPRIMARY
from dbo.SALESORDERITEMMEMBER
where SALESORDERITEMMEMBER.SALESORDERITEMMEMBERSHIPID = SALESORDERITEMMEMBERSHIP.ID
for xml raw('ITEM'),type,elements,root('MEMBERS'),BINARY BASE64
) as MEMBERS,
(select
SALESORDERITEMMEMBERSHIPCARD.SALESORDERITEMMEMBERID,
SALESORDERITEMMEMBERSHIPCARD.MEMBERSHIPCARDID,
SALESORDERITEMMEMBERSHIPCARD.NAMEONCARD,
SALESORDERITEMMEMBERSHIPCARD.EXPIRATIONDATE
from dbo.SALESORDERITEMMEMBERSHIPCARD
inner join dbo.SALESORDERITEMMEMBER on SALESORDERITEMMEMBERSHIPCARD.SALESORDERITEMMEMBERID = SALESORDERITEMMEMBER.ID
where SALESORDERITEMMEMBER.SALESORDERITEMMEMBERSHIPID = SALESORDERITEMMEMBERSHIP.ID
for xml raw('ITEM'),type,elements,root('MEMBERSHIPCARDS'),BINARY BASE64
) as MEMBERSHIPCARDS,
(select
SALESORDERITEMMEMBERSHIPADDON.ADDONID,
SALESORDERITEMMEMBERSHIPADDON.ADDONTYPECODE,
ADDONITEM.PRICE,
convert(int, ADDONITEM.QUANTITY) as QUANTITY,
null as SPLITID
from dbo.SALESORDERITEMMEMBERSHIPADDON
inner join dbo.SALESORDERITEM ADDONITEM on SALESORDERITEMMEMBERSHIPADDON.ID = ADDONITEM.ID
where SALESORDERITEMMEMBERSHIPADDON.SALESORDERITEMMEMBERSHIPID = SALESORDERITEMMEMBERSHIP.ID
for xml raw('ITEM'),type,elements,root('ADDONS'),BINARY BASE64
) as ADDONS
from dbo.SALESORDERITEMMEMBERSHIP
inner join dbo.SALESORDERITEM on SALESORDERITEMMEMBERSHIP.ID = SALESORDERITEM.ID
where SALESORDERITEM.SALESORDERID = @SALESORDERID and
SALESORDERITEM.TOTAL + (select isnull(sum(ADDON.TOTAL), 0) from dbo.SALESORDERITEM ADDON
inner join dbo.SALESORDERITEMMEMBERSHIPADDON on ADDON.ID = SALESORDERITEMMEMBERSHIPADDON.ID
where SALESORDERITEMMEMBERSHIPADDON.SALESORDERITEMMEMBERSHIPID = SALESORDERITEM.ID) = 0
open MEMBERSHIPSCURSOR;
fetch next from MEMBERSHIPSCURSOR into
@SALESORDERITEMID,
@MEMBERSHIPID,
@MEMBERSHIPPROGRAMID,
@MEMBERSHIPLEVELID,
@MEMBERSHIPLEVELTERMID,
@MEMBERSHIPLEVELTYPECODEID,
@NUMBEROFCHILDREN,
@COMMENTS,
@ISGIFT,
@SENDRENEWALCODE,
@EXPIRATIONDATE,
@GIVENBYID,
@MEMBERS,
@MEMBERSHIPCARDS,
@ADDONS;
declare @MEMBERSHIPTRANSACTIONID uniqueidentifier = null
while @@fetch_status = 0
begin
exec dbo.USP_MEMBERSHIP_ADDMEMBERSHIPTRANSACTION
@MEMBERSHIPID output,
@CHANGEAGENTID,
@CONSTITUENTID,
@MEMBERSHIPPROGRAMID,
@MEMBERSHIPLEVELID,
@MEMBERSHIPLEVELTERMID,
@MEMBERSHIPLEVELTYPECODEID,
@TRANSACTIONDATE,
@EXPIRATIONDATE,
@NUMBEROFCHILDREN,
@COMMENTS,
@ISGIFT,
@GIVENBYID,
@SENDRENEWALCODE,
@MEMBERS,
@MEMBERSHIPCARDS,
@ADDONS,
null,
@MEMBERSHIPTRANSACTIONID output;
update dbo.SALESORDERITEMMEMBERSHIP set
MEMBERSHIPID = @MEMBERSHIPID,
MEMBERSHIPTRANSACTIONID = @MEMBERSHIPTRANSACTIONID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
ID = @SALESORDERITEMID
--and MEMBERSHIPID is null;
update dbo.SALESORDERITEMMEMBERSHIPADDON set
MEMBERSHIPID = @MEMBERSHIPID,
MEMBERSHIPTRANSACTIONID = @MEMBERSHIPTRANSACTIONID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where SALESORDERITEMMEMBERSHIPADDON.SALESORDERITEMMEMBERSHIPID = @SALESORDERITEMID
update dbo.SALESORDERITEMMEMBERSHIPADDON set
MEMBERSHIPADDONID = MEMBERSHIPADDON.ID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.SALESORDERITEMMEMBERSHIPADDON
inner join dbo.MEMBERSHIPADDON
on SALESORDERITEMMEMBERSHIPADDON.MEMBERSHIPID = MEMBERSHIPADDON.MEMBERSHIPID and
SALESORDERITEMMEMBERSHIPADDON.ADDONID = MEMBERSHIPADDON.ADDONID and
SALESORDERITEMMEMBERSHIPADDON.MEMBERSHIPTRANSACTIONID = MEMBERSHIPADDON.MEMBERSHIPTRANSACTIONID
where SALESORDERITEMMEMBERSHIPADDON.SALESORDERITEMMEMBERSHIPID = @SALESORDERITEMID
fetch next from MEMBERSHIPSCURSOR into
@SALESORDERITEMID,
@MEMBERSHIPID,
@MEMBERSHIPPROGRAMID,
@MEMBERSHIPLEVELID,
@MEMBERSHIPLEVELTERMID,
@MEMBERSHIPLEVELTYPECODEID,
@NUMBEROFCHILDREN,
@COMMENTS,
@ISGIFT,
@SENDRENEWALCODE,
@EXPIRATIONDATE,
@GIVENBYID,
@MEMBERS,
@MEMBERSHIPCARDS,
@ADDONS;
set @MEMBERSHIPTRANSACTIONID = null
end
close MEMBERSHIPSCURSOR;
deallocate MEMBERSHIPSCURSOR;
end
return 0;