USP_DATAFORMTEMPLATE_ADDSAVE_MEMBERSHIPTRANSFER
The save procedure used by the add dataform template "Membership Transfer Add Form".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | The output parameter indicating the ID of the record added. |
@OLDPRIMARYMEMBERID | uniqueidentifier | IN | Input parameter indicating the context ID for the record being added. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@NEWPRIMARYCONSTITUENTID | uniqueidentifier | IN | New primary member |
@MEMBERNAME | nvarchar(700) | IN | Name on card |
@EXPIRATIONDATE | datetime | IN | Card expiration date |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADDSAVE_MEMBERSHIPTRANSFER
(
@ID uniqueidentifier output,
@OLDPRIMARYMEMBERID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@NEWPRIMARYCONSTITUENTID uniqueidentifier,
@MEMBERNAME nvarchar(700) = null,
@EXPIRATIONDATE datetime = null
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
-- Using this ID to bring back the member that was created from Transfer.
if @ID is null
set @ID = newid();
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
declare @SOURCEMEMBERSHIPID uniqueidentifier;
declare @SOURCEMEMBERSHIPSTATUSCODE tinyint;
declare @SOURCEMEMBERSHIPPROGRAMID uniqueidentifier;
declare @SOURCEISPRIMARY bit;
declare @SOURCEISDROPPED bit;
declare @ALLOWMULTIPLEMEMBERSHIPS bit;
select
@SOURCEMEMBERSHIPID = MEMBER.MEMBERSHIPID,
@SOURCEMEMBERSHIPSTATUSCODE = MEMBERSHIP.STATUSCODE,
@SOURCEMEMBERSHIPPROGRAMID = MEMBERSHIP.MEMBERSHIPPROGRAMID,
@SOURCEISDROPPED = MEMBER.ISDROPPED,
@SOURCEISPRIMARY = MEMBER.ISPRIMARY,
@ALLOWMULTIPLEMEMBERSHIPS = MEMBERSHIPPROGRAM.ALLOWMULTIPLEMEMBERSHIPS
from
dbo.MEMBER
inner join
dbo.MEMBERSHIP on MEMBERSHIP.ID = MEMBER.MEMBERSHIPID
inner join
dbo.MEMBERSHIPPROGRAM on MEMBERSHIPPROGRAM.ID = MEMBERSHIP.MEMBERSHIPPROGRAMID
where
MEMBER.ID = @OLDPRIMARYMEMBERID;
begin try
if @SOURCEMEMBERSHIPSTATUSCODE = 1 -- Cancelled
raiserror('BBERR_MEMBERSHIPISCANCELLED', 13, 1);
if @SOURCEISDROPPED = 1
raiserror('BBERR_SOURCEISDROPPED', 13, 1);
if @SOURCEISPRIMARY = 0
raiserror('BBERR_SOURCENOTPRIMARY', 13, 1);
if dbo.UFN_CONSTITUENT_ISINACTIVE(@NEWPRIMARYCONSTITUENTID) = 1
raiserror('BBERR_TARGETISINACTIVE', 13, 1);
if dbo.UFN_CONSTITUENT_ISDECEASED(@NEWPRIMARYCONSTITUENTID) = 1
raiserror('BBERR_TARGETISDECEASED', 13, 1);
if exists (
select
1
from
dbo.MEMBER
where
MEMBERSHIPID = @SOURCEMEMBERSHIPID
and CONSTITUENTID = @NEWPRIMARYCONSTITUENTID
and ISDROPPED = 0
)
raiserror('This constituent is already in this membership.', 13, 1);
if @ALLOWMULTIPLEMEMBERSHIPS = 0 and exists (
select
1
from
dbo.MEMBER
inner join
dbo.MEMBERSHIP on MEMBERSHIP.ID = MEMBER.MEMBERSHIPID
where
MEMBER.CONSTITUENTID = @NEWPRIMARYCONSTITUENTID
and MEMBERSHIP.MEMBERSHIPPROGRAMID = @SOURCEMEMBERSHIPPROGRAMID
and MEMBER.ISDROPPED = 0
)
raiserror('This membership program does not allow multiple memberships from the same constituent.', 13, 1);
-- 3/13/2012 MDC - made the decision to drop the current member and add another member instead of just switching the constituent.
-- Since this is an Add form and someone may be using this and expecting the ID passed into the form to have had a record created
-- it makes sense, otherwise they would be taken to a page that might not show what they would expect to see.
update dbo.MEMBER set
ISDROPPED = 1,
ISPRIMARY = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
ID = @OLDPRIMARYMEMBERID;
insert into dbo.MEMBER (
ID,
CONSTITUENTID,
MEMBERSHIPID,
ISPRIMARY,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values (
@ID,
@NEWPRIMARYCONSTITUENTID,
@SOURCEMEMBERSHIPID,
1, -- Should always be primary
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
declare @SOURCENUMBEROFCARDS int;
select @SOURCENUMBEROFCARDS = count(*)
from dbo.MEMBERSHIPCARD
where MEMBERID = @OLDPRIMARYMEMBERID
and STATUSCODE <> 2; -- Cancelled
if @SOURCENUMBEROFCARDS > 0
begin
-- Cancel existing cards for the source and insert a new card
update dbo.MEMBERSHIPCARD set
STATUSCODE = 2,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
MEMBERID = @OLDPRIMARYMEMBERID;
insert into dbo.MEMBERSHIPCARD (
ID,
MEMBERID,
NAMEONCARD,
EXPIRATIONDATE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values (
newid(),
@ID,
@MEMBERNAME,
dbo.UFN_DATE_GETLATESTTIME(@EXPIRATIONDATE),
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;