USP_DATAFORMTEMPLATE_EDIT_REVENUESPLITDETAILSADJUST_4
The save procedure used by the edit dataform template "Revenue Split Details Adjust Form 4".
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. |
@DESIGNATIONID | uniqueidentifier | IN | Designation |
@CATEGORYCODEID | uniqueidentifier | IN | Revenue category |
@OTHERTYPECODEID | uniqueidentifier | IN | Other type |
@OPPORTUNITYID | uniqueidentifier | IN | Opportunity |
@ADJUSTMENTPOSTDATE | datetime | IN | Adjustment post date |
@ADJUSTMENTDATE | datetime | IN | Adjustment date |
@ADJUSTMENTREASON | nvarchar(300) | IN | Adjustment details |
@DECLINESGIFTAID | bit | IN | Constituent declines Gift Aid for this application |
@ADJUSTMENTREASONCODEID | uniqueidentifier | IN | Adjustment reason |
@ISGIFTAIDSPONSORSHIP | bit | IN | Gift Aid sponsorship |
Definition
Copy
CREATE procedure [dbo].[USP_DATAFORMTEMPLATE_EDIT_REVENUESPLITDETAILSADJUST_4]
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@DESIGNATIONID uniqueidentifier,
@CATEGORYCODEID uniqueidentifier,
@OTHERTYPECODEID uniqueidentifier,
@OPPORTUNITYID uniqueidentifier,
@ADJUSTMENTPOSTDATE datetime,
@ADJUSTMENTDATE datetime,
@ADJUSTMENTREASON nvarchar(300),
@DECLINESGIFTAID bit,
@ADJUSTMENTREASONCODEID uniqueidentifier,
@ISGIFTAIDSPONSORSHIP bit
)
as
set nocount on
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
set @ADJUSTMENTREASON = coalesce(@ADJUSTMENTREASON, '')
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
-- Validate that the all the values passed in apply for the application code
declare @REVENUEID uniqueidentifier, @APPLICATIONCODE tinyint
select
@REVENUEID = REVENUESPLIT.FINANCIALTRANSACTIONID,
@APPLICATIONCODE = REVENUESPLIT_EXT.APPLICATIONCODE
from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
where REVENUESPLIT.ID = @ID
and REVENUESPLIT.TYPECODE <> 1
and REVENUESPLIT.DELETEDON is null
-- Check GL business rule for this account system and set to 'Do not post' if needed.
declare @POSTSTATUSCODE tinyint;
declare @PDACCOUNTSYSTEMID uniqueidentifier;
set @POSTSTATUSCODE = 1;
select @PDACCOUNTSYSTEMID = PDACCOUNTSYSTEMID from dbo.PDACCOUNTSYSTEMFORREVENUE where ID = @REVENUEID;
if dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID) = 0
begin
set @POSTSTATUSCODE = 2 -- Do not post
set @ADJUSTMENTPOSTDATE = null
end
if @DESIGNATIONID is null and
(@APPLICATIONCODE = 0 or -- Donation
@APPLICATIONCODE = 4) -- Other
begin
raiserror('DESIGNATIONREQUIRED', 13, 1)
return 1
end
if @OTHERTYPECODEID is not null and @APPLICATIONCODE <> 4
begin
raiserror('OTHERTYPECODENOTVALID', 13, 1)
return 1
end
if @OTHERTYPECODEID is null and @APPLICATIONCODE = 4
begin
raiserror('OTHERTYPECODEREQUIRED', 13, 1)
return 1
end
if @OPPORTUNITYID is not null and @APPLICATIONCODE not in (0,2,6,8)
begin
raiserror('OPPORTUNITYCODENOTVALID', 13, 1)
return 1
end
-- Verify the transaction has already been posted
if not exists (select 1 from dbo.REVENUEPOSTED where ID = @REVENUEID)
begin
raiserror('TRANSACTIONMUSTBEPOSTED', 13, 1)
return 1
end
-- Verify the designation is unique for this revenue
if (@APPLICATIONCODE = 0 or @APPLICATIONCODE = 4) and exists (
select 1
from dbo.REVENUESPLIT
where REVENUEID = @REVENUEID
and DESIGNATIONID = @DESIGNATIONID
and APPLICATIONCODE = @APPLICATIONCODE
and ID <> @ID
)
begin
raiserror('REVENUESPLITDESIGNATIONNOTUNIQUE', 13, 1)
return 1
end
--check to see if designation changed, if so re-receipt, re-acknowledge and adjust (if posted)
declare @CURRENTDESIGNATIONID uniqueidentifier, @CURRENTCATEGORYID uniqueidentifier
select @CURRENTDESIGNATIONID = DESIGNATIONID from dbo.REVENUESPLIT_EXT where ID = @ID
select @CURRENTCATEGORYID = GLREVENUECATEGORYMAPPINGID from dbo.REVENUECATEGORY where ID = @ID
declare @DESIGNATIONCHANGED bit, @CATEGORYCHANGED bit, @ALREADYADJUSTED bit
if (@CURRENTDESIGNATIONID is null and @DESIGNATIONID is null) or @CURRENTDESIGNATIONID = @DESIGNATIONID
set @DESIGNATIONCHANGED = 0
else
set @DESIGNATIONCHANGED = 1
if (@CURRENTCATEGORYID is null and @CATEGORYCODEID is null) or @CURRENTCATEGORYID = @CATEGORYCODEID
set @CATEGORYCHANGED = 0
else
set @CATEGORYCHANGED = 1
if exists (select 1 from dbo.ADJUSTMENT where REVENUEID = @REVENUEID and POSTSTATUSCODE = 1)
set @ALREADYADJUSTED = 1
else
set @ALREADYADJUSTED = 0
declare @ADJUST bit
if (@DESIGNATIONCHANGED = 1 or @CATEGORYCHANGED = 1 or @ALREADYADJUSTED = 1) and
exists (select 1 from dbo.REVENUEPOSTED where REVENUEPOSTED.ID = @REVENUEID)
begin
set @ADJUST = 1
-- Verify the adjustment dates are set
if @ADJUSTMENTPOSTDATE is null and @POSTSTATUSCODE <> 2
begin
raiserror('ADJUSTMENTPOSTDATEREQUIRED', 13, 1)
return 1
end
if @ADJUSTMENTDATE is null
begin
raiserror('ADJUSTMENTDATEREQUIRED', 13, 1)
return 1
end
end
else
set @ADJUST = 0
begin try
declare @ADJUSTMENTID uniqueidentifier;
declare @STOCKSALEADJUSTMENTIDS xml;
declare @PROPERTYDETAILADJUSTMENTID uniqueidentifier;
declare @PROPERTYDETAILCOUNT int;
declare @PAYMENTMETHODCODE int;
declare @REVENUEPAYMENTMETHODID uniqueidentifier;
declare @OLDGIFTAIDQUALIFICATIONSTATUS nvarchar(30);
declare @GIFTINKINDSALEADJUSTMENTIDS xml;
set @OLDGIFTAIDQUALIFICATIONSTATUS = dbo.UFN_GIFTAIDREVENUESPLIT_GETQUALIFICATIONSTATUS(@ID);
set @PROPERTYDETAILCOUNT = 0;
if @ADJUST = 1
begin
if @ADJUSTMENTREASONCODEID is null
raiserror('BBERR_ADJUSTMENTREASONCODEIDREQUIRED', 13, 1)
select
@PAYMENTMETHODCODE = PAYMENTMETHODCODE,
@REVENUEPAYMENTMETHODID = ID
from
dbo.REVENUEPAYMENTMETHOD
where
REVENUEID = @REVENUEID;
-- Save the revenue adjustment
exec dbo.USP_SAVE_ADJUSTMENT @REVENUEID, @ADJUSTMENTID output, @CHANGEAGENTID, @CURRENTDATE, @ADJUSTMENTDATE,
@ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, default, @ADJUSTMENTREASONCODEID, @POSTSTATUSCODE
declare @DEPOSITID uniqueidentifier;
declare @DEPOSITPOSTDATE date;
select
@DEPOSITID = BADP.DEPOSITID
,@DEPOSITPOSTDATE = DEPOSIT.POSTDATE
from
dbo.BANKACCOUNTDEPOSITPAYMENT BADP
inner join dbo.FINANCIALTRANSACTION DEPOSIT on DEPOSIT.ID = BADP.ID
where BADP.ID = @REVENUEID
select @PROPERTYDETAILCOUNT = count(PROPERTYDETAIL.ID)
from dbo.PROPERTYDETAIL
where PROPERTYDETAIL.ID = @REVENUEPAYMENTMETHODID and SALEPOSTSTATUSCODE = 0;
/* If sold stock has been posted, log stock detail adjustment */
if @PAYMENTMETHODCODE = 4 and exists(select ID from dbo.STOCKSALE where STOCKDETAILID = @REVENUEPAYMENTMETHODID)
begin
exec dbo.USP_SAVE_STOCKDETAILADJUSTMENT @REVENUEPAYMENTMETHODID, @CHANGEAGENTID, @CURRENTDATE, @ADJUSTMENTDATE,
@ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, @STOCKSALEADJUSTMENTIDS output, @ADJUSTMENTREASONCODEID, @POSTSTATUSCODE;
end
/* If sold property has been posted, log property detail adjustment */
else if (@PAYMENTMETHODCODE = 5) and (@PROPERTYDETAILCOUNT > 0)
begin
exec dbo.USP_SAVE_PROPERTYDETAILADJUSTMENT @REVENUEPAYMENTMETHODID, @PROPERTYDETAILADJUSTMENTID output,
@CHANGEAGENTID, @CURRENTDATE, @ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, @ADJUSTMENTREASONCODEID, @POSTSTATUSCODE;
end
/* If sold gift-in-kind has been posted, log gift-in-kind detail adjustment */
if @PAYMENTMETHODCODE = 6 and exists(select ID from dbo.GIFTINKINDSALE where GIFTINKINDPAYMENTMETHODDETAILID = @REVENUEPAYMENTMETHODID)
begin
exec dbo.USP_SAVE_GIFTINKINDPAYMENTMETHODDETAILADJUSTMENT @REVENUEPAYMENTMETHODID, @CHANGEAGENTID, @CURRENTDATE, @ADJUSTMENTDATE,
@ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, @GIFTINKINDSALEADJUSTMENTIDS output, @ADJUSTMENTREASONCODEID, @POSTSTATUSCODE;
end
declare @GIFTFEEADJUSTMENTID uniqueidentifier;
if exists(select 1 from dbo.REVENUESPLITGIFTFEE GF inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = GF.ID where LI.FINANCIALTRANSACTIONID = @REVENUEID)
begin
exec dbo.USP_SAVE_GIFTFEEADJUSTMENT @REVENUEID, @GIFTFEEADJUSTMENTID output, @CHANGEAGENTID, @CURRENTDATE, @ADJUSTMENTDATE,
@ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, default, @ADJUSTMENTREASONCODEID;
end
declare @AUCTIONPURCHASEADJUSTMENTID uniqueidentifier;
/*Auction purchase -- log adjustment*/
if exists(select 1 from dbo.FINANCIALTRANSACTIONLINEITEM inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @REVENUEID and REVENUESPLIT_EXT.TYPECODE = 12 and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1 and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null)
begin
exec dbo.USP_SAVE_AUCTIONPURCHASEADJUSTMENT @REVENUEID = @REVENUEID, @ADJUSTMENTID = @AUCTIONPURCHASEADJUSTMENTID output, @CHANGEAGENTID = @CHANGEAGENTID,
@CHANGEDATE = @CURRENTDATE, @DATE = @ADJUSTMENTDATE, @POSTDATE = @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON = @ADJUSTMENTREASON,
@ADJUSTMENTREASONCODEID = @ADJUSTMENTREASONCODEID
update dbo.FINANCIALTRANSACTIONLINEITEM set
DELETEDON = null
where FINANCIALTRANSACTIONID = @REVENUEID
and FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @AUCTIONPURCHASEADJUSTMENTID
and TYPECODE != 1
end
end
if @DESIGNATIONCHANGED = 1
begin
exec dbo.USP_REVENUE_UPDATERERECEIPTS @REVENUEID, @CHANGEAGENTID, @CURRENTDATE
exec dbo.USP_REVENUELETTER_SETREACKNOWLEDGEMENTS @REVENUEID, @CHANGEAGENTID, @CURRENTDATE;
end
update dbo.REVENUESPLIT_EXT set
DESIGNATIONID = @DESIGNATIONID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
ID = @ID
if @DESIGNATIONCHANGED = 1
begin
-- update campaigns
if @APPLICATIONCODE = 0 -- Donation
begin
exec dbo.USP_PLEDGE_CLEARANDADDCAMPAIGNS @REVENUEID = @REVENUEID, @OPPORTUNITYID = @OPPORTUNITYID, @CHANGEAGENTID = @CHANGEAGENTID, @CHANGEDATE = @CURRENTDATE
end
else if @APPLICATIONCODE = 4 -- Other
begin
exec dbo.USP_REVENUE_CLEARANDADDCAMPAIGNS @REVENUEID = @REVENUEID, @CHANGEAGENTID = @CHANGEAGENTID, @CHANGEDATE = @CURRENTDATE
end
end
if @CATEGORYCODEID is null
exec dbo.USP_REVENUECATEGORY_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID
else
begin
update dbo.REVENUECATEGORY set
GLREVENUECATEGORYMAPPINGID = @CATEGORYCODEID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
ID = @ID
if @@ROWCOUNT = 0
insert into dbo.REVENUECATEGORY (ID, GLREVENUECATEGORYMAPPINGID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@ID, @CATEGORYCODEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
end
if @OTHERTYPECODEID is null
exec dbo.USP_REVENUESPLITOTHER_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID
else
begin
update dbo.REVENUESPLITOTHER set
OTHERTYPECODEID = @OTHERTYPECODEID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
ID = @ID
if @@ROWCOUNT = 0
insert into dbo.REVENUESPLITOTHER (ID, OTHERTYPECODEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@ID, @OTHERTYPECODEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
end
if @OPPORTUNITYID is null
exec dbo.USP_REVENUEOPPORTUNITY_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID
else
begin
exec dbo.USP_REVENUESPLIT_PULLSOLICITORSFROMOPPORTUNITY @ID, @OPPORTUNITYID, @CHANGEAGENTID, @CURRENTDATE
update dbo.REVENUEOPPORTUNITY set
OPPORTUNITYID = @OPPORTUNITYID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where
ID = @ID
if @@ROWCOUNT = 0
insert into dbo.REVENUEOPPORTUNITY (ID, OPPORTUNITYID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@ID, @OPPORTUNITYID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
end
exec dbo.USP_REVENUESPLIT_UPDATEDECLINESGIFTAID @REVENUEID = @REVENUEID,
@APPLICATIONCODE = @APPLICATIONCODE,
@REVENUESPLITID = @ID,
@DESIGNATIONID = @DESIGNATIONID,
@DECLINESGIFTAID = @DECLINESGIFTAID,
@CHANGEAGENTID = @CHANGEAGENTID,
@CURRENTDATE = @CURRENTDATE,
@ISGIFTAIDSPONSORSHIP = @ISGIFTAIDSPONSORSHIP
-- Clear the user-defined gl distributions if the designation or revenue category has changed
-- Do this regardless of whether gift is posted or not
if @DESIGNATIONCHANGED = 1 or @CATEGORYCHANGED = 1
begin
declare @contextCache varbinary(128);
--cache current context information
set @contextCache = CONTEXT_INFO();
-- Clear GL
delete from dbo.REVENUEGLDISTRIBUTION where REVENUEID = @REVENUEID and OUTDATED = 0;
delete from dbo.STOCKSALEGLDISTRIBUTION where STOCKSALEGLDISTRIBUTION.REVENUEID = @REVENUEID and OUTDATED = 0;
delete from dbo.PROPERTYDETAILGLDISTRIBUTION where PROPERTYDETAILGLDISTRIBUTION.REVENUEID = @REVENUEID and OUTDATED = 0;
delete from dbo.GIFTINKINDSALEGLDISTRIBUTION where GIFTINKINDSALEGLDISTRIBUTION.REVENUEID = @REVENUEID and OUTDATED = 0;
delete from dbo.AUCTIONPURCHASEGLDISTRIBUTION where REVENUEPURCHASEID = @REVENUEID and OUTDATED = 0;
delete from dbo.GIFTFEEGLDISTRIBUTION where REVENUEID = @REVENUEID and OUTDATED = 0;
set CONTEXT_INFO @CHANGEAGENTID;
--reset CONTEXT_INFO to previous value
if not @contextCache is null
set CONTEXT_INFO @contextCache;
-- Add new GL distributions
declare @DONOTPOST bit
select @DONOTPOST = case POSTSTATUSCODE when 3 then 1 else 0 end from dbo.FINANCIALTRANSACTION where ID = @REVENUEID
if @POSTSTATUSCODE = 2
set @DONOTPOST = 1;
if @DONOTPOST = 0
begin
-- Add new GL distributions
exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION @REVENUEID, @CHANGEAGENTID, @CURRENTDATE;
-- Add new stock detail GL distributions
exec dbo.USP_SAVE_STOCKDETAILGLDISTRIBUTION @REVENUEID, @CHANGEAGENTID, @CURRENTDATE;
-- Add new property detail GL distributions
exec dbo.USP_SAVE_PROPERTYDETAILGLDISTRIBUTION @REVENUEID, @CHANGEAGENTID, @CURRENTDATE;
-- Add new gift-in-kind detail GL distributions
exec dbo.USP_SAVE_GIFTINKINDPAYMENTMETHODDETAILGLDISTRIBUTION @REVENUEID, @CHANGEAGENTID, @CURRENTDATE;
-- Add new gift fee GL distributions
exec dbo.USP_SAVE_GIFTFEEGLDISTRIBUTION @REVENUEID, @CHANGEAGENTID, @CURRENTDATE;
-- Add new auction purchase GL distributions
if (@AUCTIONPURCHASEADJUSTMENTID is not null)
exec dbo.USP_SAVE_AUCTIONPURCHASEGLDISTRIBUTION @REVENUEID = @REVENUEID, @CHANGEAGENTID = @CHANGEAGENTID, @CHANGEDATE = @CURRENTDATE
end
--Replace gift aid GL distributions
if (@OLDGIFTAIDQUALIFICATIONSTATUS = dbo.UFN_GIFTAIDREVENUESPLIT_GETQUALIFICATIONSTATUS(@ID))
and (exists(select 1 from dbo.GIFTAIDGLDISTRIBUTION where REVENUESPLITGIFTAIDID = @ID))
begin
exec dbo.USP_REVENUESPLITGIFTAID_UPDATEGLDISTRIBUTIONS @ID, @CHANGEAGENTID, @CURRENTDATE, @DONOTPOST;
end
end
/* add adjustment history information */
if @ADJUST = 1
begin
if @ADJUSTMENTID is not null
exec dbo.USP_ADJUSTMENTHISTORY_REVENUE_SAVEHISTORY @REVENUEID, @CHANGEAGENTID, null, @ADJUSTMENTID;
if @STOCKSALEADJUSTMENTIDS is not null
exec dbo.USP_ADJUSTMENTHISTORY_STOCK_SAVEHISTORY @REVENUEPAYMENTMETHODID, @CHANGEAGENTID, null, @STOCKSALEADJUSTMENTIDS;
if @PROPERTYDETAILADJUSTMENTID is not null
exec dbo.USP_ADJUSTMENTHISTORY_PROPERTY_SAVEHISTORY @REVENUEPAYMENTMETHODID, @CHANGEAGENTID, null, @PROPERTYDETAILADJUSTMENTID;
if @GIFTINKINDSALEADJUSTMENTIDS is not null
exec dbo.USP_ADJUSTMENTHISTORY_GIFTINKIND_SAVEHISTORY @REVENUEPAYMENTMETHODID, @CHANGEAGENTID, null, @GIFTINKINDSALEADJUSTMENTIDS;
end
if @DEPOSITID is not null
begin
if @DEPOSITPOSTDATE = isnull(@ADJUSTMENTPOSTDATE, @DEPOSITPOSTDATE)
begin
if (@DESIGNATIONCHANGED = 1 or @CATEGORYCHANGED = 1)
exec dbo.USP_BANKACCOUNTDEPOSIT_OVERWRITEPAYMENTDEBITACCOUNTS @REVENUEID, @DEPOSITID, @CHANGEAGENTID, @CURRENTDATE;
end
else
begin
update dbo.BANKACCOUNTDEPOSITPAYMENT set DEPOSITID = null where ID = @REVENUEID;
end
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;