USP_DATAFORMTEMPLATE_EDIT_HOUSEHOLDRECOGNITIONSETTINGS_2
The save procedure used by the edit dataform template "Household Recognition Settings Edit".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | The input ID parameter indicating the ID of the record being edited. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@HOUSEHOLDRECOGNIZEHOUSEHOLD | bit | IN | Household |
@HOUSEHOLDRECOGNIZEMEMBERS | tinyint | IN | All members |
@HOUSEHOLDSPECIFIEDMEMBERS | xml | IN | Household specified members |
@MEMBERRECOGNIZEHOUSEHOLD | bit | IN | Household |
@MEMBERRECOGNIZEMEMBER | bit | IN | Member |
@MEMBERRECOGNIZEOTHERMEMBERS | tinyint | IN | All other members |
@MEMBERSPECIFIEDMEMBERS | xml | IN | Member specified members |
@HOUSEHOLDREVENUERECOGNITIONTYPECODEID | uniqueidentifier | IN | Default recognition credit type |
@MEMBERREVENUERECOGNITIONTYPECODEID | uniqueidentifier | IN | Default recognition credit type |
@MEMBERHOUSEHOLDREVENUERECOGNITIONTYPECODEID | uniqueidentifier | IN | Default recognition credit type |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_HOUSEHOLDRECOGNITIONSETTINGS_2
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@HOUSEHOLDRECOGNIZEHOUSEHOLD bit,
@HOUSEHOLDRECOGNIZEMEMBERS tinyint,
@HOUSEHOLDSPECIFIEDMEMBERS xml,
@MEMBERRECOGNIZEHOUSEHOLD bit,
@MEMBERRECOGNIZEMEMBER bit,
@MEMBERRECOGNIZEOTHERMEMBERS tinyint,
@MEMBERSPECIFIEDMEMBERS xml,
@HOUSEHOLDREVENUERECOGNITIONTYPECODEID uniqueidentifier,
@MEMBERREVENUERECOGNITIONTYPECODEID uniqueidentifier,
@MEMBERHOUSEHOLDREVENUERECOGNITIONTYPECODEID uniqueidentifier
)
as
set nocount on;
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
declare @CURRENTDATEEARLIESTTIME date;
set @CURRENTDATEEARLIESTTIME = getdate();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @OLDHOUSEHOLDRECOGNIZEMEMBERS tinyint, @OLDMEMBERRECOGNIZEHOUSEHOLD bit, @OLDMEMBERRECOGNIZEOTHERMEMBERS tinyint
select
@OLDHOUSEHOLDRECOGNIZEMEMBERS = HOUSEHOLDRECOGNIZEMEMBERSCODE,
@OLDMEMBERRECOGNIZEHOUSEHOLD = MEMBERRECOGNIZEHOUSEHOLD,
@OLDMEMBERRECOGNIZEOTHERMEMBERS = MEMBERRECOGNIZEOTHERMEMBERSCODE
from dbo.HOUSEHOLDRECOGNITIONSETTINGS
where ID = @ID
-- make sure that settings are not self-contradictory
declare @numHHSpecifiedMembers int = 0
select @numHHSpecifiedMembers = COUNT(*) from dbo.UFN_HOUSEHOLDRECOGNITIONS_GETHOUSEHOLDSPECIFIEDMEMBERS_FROMITEMLISTXML(@HOUSEHOLDSPECIFIEDMEMBERS)
if (@numHHSpecifiedMembers > 0) And (@HOUSEHOLDRECOGNIZEMEMBERS <> 2)
raiserror('ERR_HOUSEHOLDSPECIFIEDMEMBERS_INVALID', 13, 1);
declare @numMemberSpecifiedMembers int = 0
select @numMemberSpecifiedMembers = COUNT(*) from dbo.UFN_HOUSEHOLDRECOGNITIONS_GETMEMBERSPECIFIEDMEMBERS_FROMITEMLISTXML(@MEMBERSPECIFIEDMEMBERS)
if (@numMemberSpecifiedMembers > 0) And (@MEMBERRECOGNIZEOTHERMEMBERS <> 2)
raiserror('ERR_MEMBERSPECIFIEDMEMBERS_INVALID', 13, 1);
begin try
update dbo.HOUSEHOLDRECOGNITIONSETTINGS set
HOUSEHOLDRECOGNIZEHOUSEHOLD = @HOUSEHOLDRECOGNIZEHOUSEHOLD,
HOUSEHOLDRECOGNIZEMEMBERSCODE = @HOUSEHOLDRECOGNIZEMEMBERS,
MEMBERRECOGNIZEHOUSEHOLD = @MEMBERRECOGNIZEHOUSEHOLD,
MEMBERRECOGNIZEMEMBER = @MEMBERRECOGNIZEMEMBER,
MEMBERRECOGNIZEOTHERMEMBERSCODE = @MEMBERRECOGNIZEOTHERMEMBERS,
HOUSEHOLDREVENUERECOGNITIONTYPECODEID = @HOUSEHOLDREVENUERECOGNITIONTYPECODEID,
MEMBERREVENUERECOGNITIONTYPECODEID = @MEMBERREVENUERECOGNITIONTYPECODEID,
MEMBERHOUSEHOLDREVENUERECOGNITIONTYPECODEID = @MEMBERHOUSEHOLDREVENUERECOGNITIONTYPECODEID,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
where ID = @ID
if @@ROWCOUNT = 0
insert into dbo.HOUSEHOLDRECOGNITIONSETTINGS
(
ID,
HOUSEHOLDRECOGNIZEHOUSEHOLD,
HOUSEHOLDRECOGNIZEMEMBERSCODE,
MEMBERRECOGNIZEHOUSEHOLD,
MEMBERRECOGNIZEMEMBER,
MEMBERRECOGNIZEOTHERMEMBERSCODE,
HOUSEHOLDREVENUERECOGNITIONTYPECODEID,
MEMBERREVENUERECOGNITIONTYPECODEID,
MEMBERHOUSEHOLDREVENUERECOGNITIONTYPECODEID,
DATEADDED,DATECHANGED,ADDEDBYID,CHANGEDBYID
)
values
(
@ID,
@HOUSEHOLDRECOGNIZEHOUSEHOLD,
@HOUSEHOLDRECOGNIZEMEMBERS,
@MEMBERRECOGNIZEHOUSEHOLD,
@MEMBERRECOGNIZEMEMBER,
@MEMBERRECOGNIZEOTHERMEMBERS,
@HOUSEHOLDREVENUERECOGNITIONTYPECODEID,
@MEMBERREVENUERECOGNITIONTYPECODEID,
@MEMBERHOUSEHOLDREVENUERECOGNITIONTYPECODEID,
@CURRENTDATE,@CURRENTDATE,@CHANGEAGENTID,@CHANGEAGENTID
)
--cache current context information
declare @contextCache varbinary(128)
set @contextCache = CONTEXT_INFO()
--set CONTEXT_INFO to @CHANGEAGENTID
set CONTEXT_INFO @CHANGEAGENTID
declare @GROUPMEMBER table
(
GROUPMEMBERID uniqueidentifier
)
insert into @GROUPMEMBER (GROUPMEMBERID)
select
GM.MEMBERID
from dbo.GROUPMEMBER GM
left join dbo.GROUPMEMBERDATERANGE GMDR on GM.ID = GMDR.GROUPMEMBERID
where GM.GROUPID = @ID
-- the GMDR.DATETO is set to the earliest time on that day, so use a strictly greater than in checks using current day
and ((GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO > @CURRENTDATEEARLIESTTIME))
or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= @CURRENTDATEEARLIESTTIME))
or (GMDR.DATEFROM <= @CURRENTDATEEARLIESTTIME and GMDR.DATETO > @CURRENTDATEEARLIESTTIME))
-- If the household gives recognition credit to specific members, setup those records.
-- Otherwise, the recognition defaults are cleared for any members if the value was changed
-- and the new value is the household doesn't recognize any members or recognizes all members. The records
-- aren't always cleared so that any values entered to override the defaults aren't cleared.
if @HOUSEHOLDRECOGNIZEMEMBERS = 2
begin
-- Clear any records that have PREVENTRECOGNITIONSDEFAULTING set since it isn't used unless all members are recognized for household
delete from dbo.REVENUERECOGNITIONDEFAULT where SOURCECONSTITUENTID = @ID and PREVENTRECOGNITIONSDEFAULTING = 1
exec dbo.USP_HOUSEHOLDRECOGNITIONS_GETHOUSEHOLDSPECIFIEDMEMBERS_UPDATEFROMXML @ID, @HOUSEHOLDSPECIFIEDMEMBERS, @CHANGEAGENTID, @CURRENTDATE
end
else if (@OLDHOUSEHOLDRECOGNIZEMEMBERS <> 0 and @HOUSEHOLDRECOGNIZEMEMBERS = 0) or (@OLDHOUSEHOLDRECOGNIZEMEMBERS <> 1 and @HOUSEHOLDRECOGNIZEMEMBERS = 1) -- Household doesn't recognize any members
begin
-- Clear specific recognition default entries for all members
-- make sure that audit records are aware of correct change agent ID
set @contextCache = CONTEXT_INFO();
set CONTEXT_INFO @CHANGEAGENTID;
delete from dbo.REVENUERECOGNITIONDEFAULT
where
SOURCECONSTITUENTID = @ID and
RECIPIENTCONSTITUENTID in (select GROUPMEMBERID from @GROUPMEMBER) and
(@HOUSEHOLDRECOGNIZEMEMBERS = 0 or PREVENTRECOGNITIONSDEFAULTING = 1) -- Clear entries if either no members should be recognized or the record prevents recognition defaulting
end
-- If the option Member recognizes household changed, clean up any overrides
if @OLDMEMBERRECOGNIZEHOUSEHOLD <> @MEMBERRECOGNIZEHOUSEHOLD
begin
delete from dbo.REVENUERECOGNITIONDEFAULT
where
SOURCECONSTITUENTID in (select GROUPMEMBERID from @GROUPMEMBER) and
RECIPIENTCONSTITUENTID = @ID and
(@MEMBERRECOGNIZEHOUSEHOLD = 0 or PREVENTRECOGNITIONSDEFAULTING = 1) -- Clear entries if either the household isn't recognized or the record prevents recognition defaulting
end
--reset CONTEXT_INFO to previous value
if not @contextCache is null
set CONTEXT_INFO @contextCache;
-- If Member to Member is set to Specified, update the recognition defaults. If the value
-- was changed to recognize no other members or all other members, clear the records. The
-- records are only cleared when changed so that records entered to override those values
-- aren't cleared.
if @MEMBERRECOGNIZEOTHERMEMBERS = 2
begin
-- Handle the Other members specified members collection. The UPDATEFROMXML
-- SP can't be used since the ParentIDColumn is GROUPID but that column
-- isn't on the GROUPRECOGNITION table.
exec dbo.USP_HOUSEHOLDRECOGNITIONS_MEMBERSPECIFIEDMEMBERSUPDATE @ID, @MEMBERSPECIFIEDMEMBERS, @CURRENTDATE, @CHANGEAGENTID
end
else if (@OLDMEMBERRECOGNIZEOTHERMEMBERS <> 0 and @MEMBERRECOGNIZEOTHERMEMBERS = 0) or (@OLDMEMBERRECOGNIZEOTHERMEMBERS <> 1 and @MEMBERRECOGNIZEOTHERMEMBERS = 1)
begin
-- make sure that audit records are aware of correct change agent ID
set @contextCache = CONTEXT_INFO();
set CONTEXT_INFO @CHANGEAGENTID;
delete from dbo.REVENUERECOGNITIONDEFAULT
where
SOURCECONSTITUENTID in (select GROUPMEMBERID from @GROUPMEMBER) and
RECIPIENTCONSTITUENTID in (select GROUPMEMBERID from @GROUPMEMBER) and
(@MEMBERRECOGNIZEOTHERMEMBERS = 0 or PREVENTRECOGNITIONSDEFAULTING = 1) -- Clear entries if either no members should be recognized or the record prevents recognition defaulting
--reset CONTEXT_INFO to previous value
if not @contextCache is null
set CONTEXT_INFO @contextCache;
end
-- reset CONTEXT_INFO to previous value
if not @contextCache is null
set CONTEXT_INFO @contextCache;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;