USP_DATAFORMTEMPLATE_EDIT_AUCTIONITEMADJUST_2

The save procedure used by the edit dataform template "Auction Item Adjustment Data Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@NAME nvarchar(100) IN Name
@DESIGNATIONID uniqueidentifier IN Designation
@EVENTAUCTIONID uniqueidentifier IN Auction
@DESCRIPTION nvarchar(255) IN Description
@AUCTIONITEMCATEGORYID uniqueidentifier IN Category
@AUCTIONITEMSUBCATEGORYID uniqueidentifier IN Subcategory
@DONORID uniqueidentifier IN Donor
@DONATIONDATE date IN Donation date
@EXPIRATIONDATE date IN Expiration date
@VALUE money IN Value
@MINIMUMBID money IN Minimum bid
@REVENUEAUCTIONDONATIONID uniqueidentifier IN Revenue ID
@ISANONYMOUS bit IN Donation is anonymous
@ISPOSTED bit IN Is posted
@ADJUSTMENTDATE datetime IN Adjusted date
@ADJUSTMENTPOSTDATE datetime IN Adjusted post date
@ADJUSTMENTREASON nvarchar(300) IN Adjustment description
@ADJUSTMENTREASONCODEID uniqueidentifier IN Adjustment reason
@POSTDATE datetime IN Post date
@POSTSTATUSCODE tinyint IN Post status
@BASECURRENCYID uniqueidentifier IN Base currency
@TRANSACTIONCURRENCYID uniqueidentifier IN Transaction currency
@BASEEXCHANGERATEID uniqueidentifier IN Exchange rate ID
@EXCHANGERATE decimal(20, 8) IN Exchange rate
@HADSPOTRATE bit IN Had spot rate
@RATECHANGED bit IN Rate changed

Definition

Copy

                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_AUCTIONITEMADJUST_2 (
                        @ID uniqueidentifier,
                        @CURRENTAPPUSERID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @NAME nvarchar(100),
                        @DESIGNATIONID uniqueidentifier,
                        @EVENTAUCTIONID uniqueidentifier,
                        @DESCRIPTION nvarchar(255),
                        @AUCTIONITEMCATEGORYID uniqueidentifier,
                        @AUCTIONITEMSUBCATEGORYID uniqueidentifier,
                        @DONORID uniqueidentifier,
                        @DONATIONDATE date,
                        @EXPIRATIONDATE date,
                        @VALUE money,
                        @MINIMUMBID money,
                        @REVENUEAUCTIONDONATIONID uniqueidentifier,
                        @ISANONYMOUS bit,
                        @ISPOSTED bit,
                        @ADJUSTMENTDATE datetime,
                        @ADJUSTMENTPOSTDATE datetime,
                        @ADJUSTMENTREASON nvarchar(300),
                        @ADJUSTMENTREASONCODEID uniqueidentifier,
                        @POSTDATE datetime,
                        @POSTSTATUSCODE tinyint,

                        @BASECURRENCYID uniqueidentifier,
                        @TRANSACTIONCURRENCYID uniqueidentifier,
                        @BASEEXCHANGERATEID uniqueidentifier,
                        @EXCHANGERATE decimal(20,8),
                        @HADSPOTRATE bit,
                        @RATECHANGED bit
                    )
                    as

                        set nocount on;

                        if @CHANGEAGENTID is null  
                            exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output

                        declare @CURRENTDATE datetime
                        set @CURRENTDATE = getdate()

                        if @ISANONYMOUS is null
                            set @ISANONYMOUS = 0;

                        declare @ADJUSTMENTID uniqueidentifier = null;
                        declare @ADJUST bit = 0;
                        declare @ADJUSTMENTPOSTSTATUSCODE tinyint = 1;

                        declare @CLEARGLDISTRIBUTION bit = 0;
                        declare @DONOTPOST bit;

                        -- Check GL business rule for this account system and set to 'Do not post' if needed.
                        declare @PDACCOUNTSYSTEMID uniqueidentifier;
                        select @PDACCOUNTSYSTEMID=PDACCOUNTSYSTEMID from dbo.PDACCOUNTSYSTEMFORREVENUE 
                        where ID = @REVENUEAUCTIONDONATIONID

                        if dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID) = 0
                        begin
                          set @ADJUSTMENTPOSTSTATUSCODE = 2  -- Do not post
                          set @POSTSTATUSCODE = 2 -- Do not post
                          set @POSTDATE = null
                        end;            

                        set @DONOTPOST = case @POSTSTATUSCODE when 2 then 1 else 0 end;

                        declare @ORIGINTOORGANIZATIONEXCHANGERATEID uniqueidentifier;

                        begin try

                            declare @PREVIOUSEVENTAUCTIONID uniqueidentifier;
                            select @PREVIOUSEVENTAUCTIONID = EVENTAUCTIONID from dbo.AUCTIONITEM where ID = @ID;
                            if (((@PREVIOUSEVENTAUCTIONID is null) and (@EVENTAUCTIONID is not null)) or ((@PREVIOUSEVENTAUCTIONID is not null) and (@EVENTAUCTIONID is not null) and (@PREVIOUSEVENTAUCTIONID <> @EVENTAUCTIONID))) and exists(select 1 from dbo.EVENT where EVENT.ID = @EVENTAUCTIONID and EVENT.ISACTIVE = 0)
                                raiserror('BBERR_EVENTAUCTIONISINACTIVE',13,1);

                            --Do not allow written off auction items to be added to auctions
                            if @PREVIOUSEVENTAUCTIONID is null and @EVENTAUCTIONID is not null and exists(select 1 from dbo.FINANCIALTRANSACTION where FINANCIALTRANSACTION.PARENTID = @REVENUEAUCTIONDONATIONID and FINANCIALTRANSACTION.DELETEDON is null and FINANCIALTRANSACTION.TYPECODE = 20)
                                raiserror('BBERR_AUCTIONITEM_WRITTENOFF',13,1);

                            --Transaction currency cannot be changed, make sure it is the same as the revenue
                            select 
                                @TRANSACTIONCURRENCYID = AUCTIONITEM.TRANSACTIONCURRENCYID,
                                @ORIGINTOORGANIZATIONEXCHANGERATEID = AUCTIONITEM.ORIGINTOORGANIZATIONEXCHANGERATEID
                            from 
                                dbo.AUCTIONITEM
                            where 
                                AUCTIONITEM.ID = @ID;

                            --Multicurrency - If the revenue previously used a spot rate, but
                            -- its rate has changed, store the old rate's ID, so we can remove it later.
                            declare @OLDSPOTRATE uniqueidentifier
                            if @HADSPOTRATE = 1 and @RATECHANGED = 1
                            begin
                                select 
                                    @OLDSPOTRATE = BASEEXCHANGERATEID
                                from dbo.AUCTIONITEM
                                where ID = @ID
                            end
                                --If the record uses a new spot rate, create it and set the rate ID.
                            if @BASEEXCHANGERATEID = '00000000-0000-0000-0000-000000000001'
                            begin
                                set @BASEEXCHANGERATEID = newid();

                                insert into dbo.CURRENCYEXCHANGERATE(
                                    ID, 
                                    FROMCURRENCYID,
                                    TOCURRENCYID,
                                    RATE,
                                    ASOFDATE,
                                    TYPECODE,
                                    SOURCECODEID,
                                    ADDEDBYID, 
                                    CHANGEDBYID, 
                                    DATEADDED, 
                                    DATECHANGED
                                )
                                values(
                                    @BASEEXCHANGERATEID,
                                    @TRANSACTIONCURRENCYID,
                                    @BASECURRENCYID,
                                    @EXCHANGERATE,
                                    @DONATIONDATE,
                                    2,
                                    null,
                                    @CHANGEAGENTID,
                                    @CHANGEAGENTID,
                                    @CURRENTDATE,
                                    @CURRENTDATE
                                );
                            end

                            --Multicurrency - Retrieve and calculate the necessary multicurrency values.                
                            declare @ORGANIZATIONCURRENCYID uniqueidentifier;

                            declare @BASEVALUE money;
                            declare @BASEMINIMUMBID money;
                            declare @ORGANIZATIONVALUE money;
                            declare @ORGANIZATIONMINIMUMBID money;

                            declare @LOOKUPORGANZIATIONEXCHANGERATE bit = 0;
                            if @ORIGINTOORGANIZATIONEXCHANGERATEID is null
                            begin
                                set @LOOKUPORGANZIATIONEXCHANGERATE = 1;
                            end

                            exec dbo.USP_CURRENCY_GETCURRENCYVALUES
                                @VALUE,
                                @DONATIONDATE,
                                @BASECURRENCYID,
                                @BASEEXCHANGERATEID,
                                @TRANSACTIONCURRENCYID output,
                                @BASEVALUE output,
                                @ORGANIZATIONCURRENCYID output,
                                @ORGANIZATIONVALUE output,
                                @ORIGINTOORGANIZATIONEXCHANGERATEID output,
                                @LOOKUPORGANZIATIONEXCHANGERATE;

                            exec dbo.USP_CURRENCY_GETCURRENCYVALUES
                                @MINIMUMBID,
                                @DONATIONDATE,
                                @BASECURRENCYID,
                                @BASEEXCHANGERATEID,
                                @TRANSACTIONCURRENCYID output,
                                @BASEMINIMUMBID output,
                                @ORGANIZATIONCURRENCYID output,
                                @ORGANIZATIONMINIMUMBID output,
                                @ORIGINTOORGANIZATIONEXCHANGERATEID output,
                                @LOOKUPORGANZIATIONEXCHANGERATE;

                            declare @PREVIOUSDONORID uniqueidentifier;
                            declare @WASANONYMOUS bit;
                            select @PREVIOUSDONORID = CONSTITUENTID, @WASANONYMOUS = GIVENANONYMOUSLY from dbo.REVENUE where REVENUE.ID = @REVENUEAUCTIONDONATIONID

                            declare @ORIGINALAMOUNT money = 0;
                            select 
                                @ORIGINALAMOUNT = AMOUNT
                            from dbo.REVENUE
                            where REVENUE.ID = @REVENUEAUCTIONDONATIONID;

                            declare @HASWRITEOFF bit = 0;

                            select 
                                @HASWRITEOFF = case when count(*) > 0 then 1 else 0 end 
                            from DBO.REVENUE
                            inner join DBO.WRITEOFF on REVENUE.ID = WRITEOFF.REVENUEID
                            where REVENUE.ID = @REVENUEAUCTIONDONATIONID

                            if @HASWRITEOFF = 1 and @VALUE <> @ORIGINALAMOUNT 
                                raiserror('BBERR_AUCTIONDONATION_CANNOTADJUSTWRITTENOFFAMOUNT', 13, 1);

      if @EXPIRATIONDATE < @DONATIONDATE
                                raiserror('The expiration date must be on or after the donation date.', 13, 1);

                            -- check to see if amount, postdate, post status, or currency fields has changed
                            if @CLEARGLDISTRIBUTION = 0
                                if (
                                        select count(REVENUE.ID) 
                                        from dbo.REVENUE 
                                        inner join dbo.REVENUESPLIT on REVENUE.ID = REVENUESPLIT.REVENUEID
                                        where REVENUE.ID = @REVENUEAUCTIONDONATIONID 
                                        and REVENUE.TRANSACTIONAMOUNT = @VALUE
                                        and REVENUE.AMOUNT = @BASEVALUE
                                        and ((REVENUE.BASEEXCHANGERATEID is null and @BASEEXCHANGERATEID is null) or (REVENUE.BASEEXCHANGERATEID = @BASEEXCHANGERATEID))
                                        and ((REVENUE.ORGANIZATIONEXCHANGERATEID is null and @ORIGINTOORGANIZATIONEXCHANGERATEID is null) or (REVENUE.ORGANIZATIONEXCHANGERATEID = @ORIGINTOORGANIZATIONEXCHANGERATEID))
                                        and REVENUE.TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID
                                        and REVENUE.BASECURRENCYID = @BASECURRENCYID
                                        and REVENUE.POSTDATE = @POSTDATE 
                                        and REVENUESPLIT.DESIGNATIONID = @DESIGNATIONID
                                    ) = 0 
                                begin
                                    set @CLEARGLDISTRIBUTION = 1;
                                end

                            select @ADJUST = 1
                            from 
                                dbo.REVENUE
                                inner join dbo.REVENUESPLIT on REVENUESPLIT.REVENUEID = REVENUE.ID
                            where 
                                REVENUE.ID = @REVENUEAUCTIONDONATIONID
                                and 
                                (
                                    REVENUE.TRANSACTIONAMOUNT <> @VALUE
                                    or 
                                    REVENUE.AMOUNT <> @BASEVALUE
                                    or  
                                    REVENUE.DATE <> @DONATIONDATE
                                    or 
                                    REVENUE.BASEEXCHANGERATEID <> @BASEEXCHANGERATEID
                                    or 
                                    REVENUE.ORGANIZATIONEXCHANGERATEID <> @ORIGINTOORGANIZATIONEXCHANGERATEID
                                    or
                                    REVENUE.TRANSACTIONCURRENCYID <> @TRANSACTIONCURRENCYID
                                    or
                                    REVENUE.BASECURRENCYID <> @BASECURRENCYID
                                    or  
                                    REVENUESPLIT.DESIGNATIONID <> @DESIGNATIONID
                                    or
                                    REVENUE.CONSTITUENTID <> @DONORID
                                );

                            if @ADJUST = 1
                            begin
                                if @ADJUSTMENTREASONCODEID is null
                                    raiserror('BBERR_ADJUSTMENTREASONCODEIDREQUIRED', 13, 1)

                                exec dbo.USP_SAVE_ADJUSTMENT @REVENUEAUCTIONDONATIONID, @ADJUSTMENTID output, @CHANGEAGENTID, @CURRENTDATE, @ADJUSTMENTDATE
                                    @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, default, @ADJUSTMENTREASONCODEID, @ADJUSTMENTPOSTSTATUSCODE;
                            end

                            -- make sure we aren't trying to modify revenue in a locked/closed deposit/bank
                            exec dbo.USP_EDIT_REVENUE_VALIDATE_DEPOSIT_STATUS @REVENUEAUCTIONDONATIONID;

                            update dbo.REVENUE set
                                REVENUE.CONSTITUENTID = @DONORID,
                                REVENUE.DATE = @DONATIONDATE,
                                REVENUE.POSTDATE = @POSTDATE,
                                REVENUE.DONOTPOST = @DONOTPOST,
                                REVENUE.AMOUNT = @BASEVALUE,
                                REVENUE.TRANSACTIONAMOUNT = @VALUE,
                                REVENUE.RECEIPTAMOUNT = @VALUE,
     REVENUE.GIVENANONYMOUSLY = @ISANONYMOUS,
                                REVENUE.BASECURRENCYID = @BASECURRENCYID,
                                REVENUE.ORGANIZATIONAMOUNT = @ORGANIZATIONVALUE,
                                REVENUE.BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
                                REVENUE.ORGANIZATIONEXCHANGERATEID = @ORIGINTOORGANIZATIONEXCHANGERATEID,
                                REVENUE.TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
                                REVENUE.CHANGEDBYID = @CHANGEAGENTID,
                                REVENUE.DATECHANGED = @CURRENTDATE
                            where REVENUE.ID = @REVENUEAUCTIONDONATIONID

                            update dbo.REVENUESPLIT set
                                REVENUESPLIT.DESIGNATIONID = @DESIGNATIONID,
                                REVENUESPLIT.AMOUNT = @BASEVALUE,
                                REVENUESPLIT.TRANSACTIONAMOUNT = @VALUE,
                                REVENUESPLIT.BASECURRENCYID = @BASECURRENCYID,
                                REVENUESPLIT.ORGANIZATIONAMOUNT = @ORGANIZATIONVALUE,
                                REVENUESPLIT.BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
                                REVENUESPLIT.ORGANIZATIONEXCHANGERATEID = @ORIGINTOORGANIZATIONEXCHANGERATEID,
                                REVENUESPLIT.TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
                                REVENUESPLIT.CHANGEDBYID = @CHANGEAGENTID,
                                REVENUESPLIT.DATECHANGED = @CURRENTDATE
                            where REVENUESPLIT.REVENUEID = @REVENUEAUCTIONDONATIONID

                            update dbo.REVENUEPAYMENTMETHOD set
                                REVENUEPAYMENTMETHOD.AMOUNT = @BASEVALUE,
                                REVENUEPAYMENTMETHOD.CHANGEDBYID = @CHANGEAGENTID,
                                REVENUEPAYMENTMETHOD.DATECHANGED = @CURRENTDATE
                            where REVENUEPAYMENTMETHOD.REVENUEID = @REVENUEAUCTIONDONATIONID

                            update dbo.AUCTIONITEM set
                                AUCTIONITEM.NAME = @NAME,
                                AUCTIONITEM.AUCTIONITEMCATEGORYID = @AUCTIONITEMCATEGORYID,
                                AUCTIONITEM.AUCTIONITEMSUBCATEGORYID = @AUCTIONITEMSUBCATEGORYID,
                                AUCTIONITEM.DESCRIPTION = @DESCRIPTION,
                                AUCTIONITEM.TRANSACTIONVALUE = @VALUE,
                                AUCTIONITEM.VALUE = @BASEVALUE,
                                AUCTIONITEM.TRANSACTIONMINIMUMBID = @MINIMUMBID,
                                AUCTIONITEM.MINIMUMBID = @BASEMINIMUMBID,
                                AUCTIONITEM.EXPIRATIONDATE = @EXPIRATIONDATE,
                                AUCTIONITEM.EVENTAUCTIONID = @EVENTAUCTIONID,
                                AUCTIONITEM.BASECURRENCYID = @BASECURRENCYID,
                                AUCTIONITEM.ORGANIZATIONVALUE = @ORGANIZATIONVALUE,
                                AUCTIONITEM.ORGANIZATIONMINIMUMBID = @ORGANIZATIONMINIMUMBID,
                                AUCTIONITEM.BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
                                AUCTIONITEM.ORIGINTOORGANIZATIONEXCHANGERATEID = @ORIGINTOORGANIZATIONEXCHANGERATEID,
                                AUCTIONITEM.TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
                                AUCTIONITEM.CHANGEDBYID = @CHANGEAGENTID,
                                AUCTIONITEM.DATECHANGED = @CURRENTDATE
                            where ID = @ID

                            if @CLEARGLDISTRIBUTION = 1
                            begin
                              -- Clear GL
                              delete from dbo.REVENUEGLDISTRIBUTION where REVENUEID = @REVENUEAUCTIONDONATIONID and OUTDATED = 0;

                              -- Add new GL distributions
                              if @POSTSTATUSCODE <> 2
                              begin
                                  exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION @REVENUEAUCTIONDONATIONID, @CHANGEAGENTID, @CURRENTDATE;

                                   exec dbo.USP_AUCTIONITEM_ADJUSTPURCHASEGLFORDONATION @ID, 0, @CHANGEAGENTID, @CURRENTDATE;
                              end
                            end

                            if @ADJUST = 1
                                exec dbo.USP_ADJUSTMENTHISTORY_REVENUE_SAVEHISTORY @REVENUEAUCTIONDONATIONID, @CHANGEAGENTID, @CURRENTDATE, @ADJUSTMENTID

                            if @PREVIOUSDONORID <> @DONORID or @ISANONYMOUS <> @WASANONYMOUS
                            begin
                                -- Remove previous recognition credits
                                delete from dbo.REVENUERECOGNITION where REVENUESPLITID in (select ID from dbo.REVENUESPLIT where REVENUEID = @REVENUEAUCTIONDONATIONID)

                                -- Create the new default recognition credits
                                insert into dbo.REVENUERECOGNITION
                                (
                                    REVENUESPLITID, 
                                    CONSTITUENTID, 
                                    AMOUNT,
                                    EFFECTIVEDATE,
                                    REVENUERECOGNITIONTYPECODEID,
                                    ADDEDBYID, 
                                    CHANGEDBYID, 
                                    DATEADDED, 
                                    DATECHANGED,
                                    BASECURRENCYID,
                                    ORGANIZATIONAMOUNT,
                                    ORGANIZATIONEXCHANGERATEID
                                )
                                select
                                    REVENUESPLIT.ID,
                                    RECOGNITIONS.CONSTITUENTID,
                                    RECOGNITIONS.AMOUNT,
                                    REVENUE.DATE,
                                    RECOGNITIONS.REVENUERECOGNITIONTYPECODEID,
                                    @CHANGEAGENTID,
                                    @CHANGEAGENTID,
                                    @CURRENTDATE
                                    @CURRENTDATE,
                                    @BASECURRENCYID,
                                    case 
                                        when @BASECURRENCYID = @ORGANIZATIONCURRENCYID then  
                                            RECOGNITIONS.AMOUNT
                                        else
                                            dbo.UFN_CURRENCY_CONVERT(RECOGNITIONS.AMOUNT, @ORIGINTOORGANIZATIONEXCHANGERATEID)
                                    end,
                                    @ORIGINTOORGANIZATIONEXCHANGERATEID
                                from dbo.REVENUE
                                inner join dbo.REVENUESPLIT on REVENUE.ID = REVENUESPLIT.REVENUEID
                                cross apply dbo.UFN_REVENUEDETAIL_GETDEFAULTRECOGNITIONS(@ISANONYMOUS, @DONORID, REVENUESPLIT.AMOUNT, REVENUE.DATE, null) as RECOGNITIONS
                                where
                                    REVENUE.ID = @REVENUEAUCTIONDONATIONID
                            end

                            --Multicurrency - If we stored an old spot rate earlier, now is the time to
                            --    remove it.
                            if @OLDSPOTRATE is not null
                            begin
                                delete CURRENCYEXCHANGERATE
                                where ID=@OLDSPOTRATE
                            end
                        end try
                        begin catch
                            exec dbo.USP_RAISE_ERROR
                            return 1
                        end catch

                    return 0;