USP_DATAFORMTEMPLATE_EDIT_AUCTIONITEM_2

The save procedure used by the edit dataform template "Auction Item Edit 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
@POSTDATE datetime IN Post date
@POSTSTATUSCODE tinyint IN Post status
@BASEEXCHANGERATEID uniqueidentifier IN Exchange rate ID
@EXCHANGERATE decimal(20, 8) IN Exchange rate

Definition

Copy

                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_AUCTIONITEM_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,
                        @POSTDATE datetime,
                        @POSTSTATUSCODE tinyint,
                        @BASEEXCHANGERATEID uniqueidentifier,
                        @EXCHANGERATE decimal(20,8)
                    )
                    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 @CLEARGLDISTRIBUTION bit = 0;
                        declare @DONOTPOST bit;
                        set @DONOTPOST = case @POSTSTATUSCODE when 2 then 1 else 0 end;

                        declare @ORGANIZATIONVALUE money;
                        declare @ORGANIZATIONMINIMUMBID money;
                        declare @BASEVALUE money;
                        declare @BASEMINIMUMBID money;
                        declare @BASECURRENCYID uniqueidentifier;
                        declare @ORIGINTOORGANIZATIONEXCHANGERATEID uniqueidentifier;
                        declare @TRANSACTIONCURRENCYID uniqueidentifier;
                        declare @ORGANIZATIONCURRENCYID uniqueidentifier;
                        declare @PREVIOUSDATE datetime;
                        declare @OLDSPOTRATEID uniqueidentifier;

                        begin try

                            if @ISPOSTED = 1
                                raiserror('This form should not be used to edit posted auction items.', 13, 1);

                            -- 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 
                            inner join dbo.AUCTIONITEM on AUCTIONITEM.REVENUEAUCTIONDONATIONID = PDACCOUNTSYSTEMFORREVENUE.ID
                            where AUCTIONITEM.ID = @ID

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

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

                            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);

                            declare @PREVIOUSDONORID uniqueidentifier;
                            declare @WASANONYMOUS bit;

                            select
                                @PREVIOUSDONORID = REVENUE.CONSTITUENTID,
                                @WASANONYMOUS = REVENUE.GIVENANONYMOUSLY,
                                @TRANSACTIONCURRENCYID = REVENUE.TRANSACTIONCURRENCYID,
                                @BASECURRENCYID = REVENUE.BASECURRENCYID,
                                @PREVIOUSDATE = REVENUE.DATE,
                                @OLDSPOTRATEID = 
                                    case
                                        when CURRENCYEXCHANGERATE.TYPECODE = 2
                                        and not (@BASEEXCHANGERATEID = CURRENCYEXCHANGERATE.ID or (@BASEEXCHANGERATEID = '00000000-0000-0000-0000-000000000001' and @EXCHANGERATE = CURRENCYEXCHANGERATE.RATE))
                                            then CURRENCYEXCHANGERATE.ID
                                        else
                                            null
                                    end,
                                @ORIGINTOORGANIZATIONEXCHANGERATEID = REVENUE.ORGANIZATIONEXCHANGERATEID
                            from
                                dbo.REVENUE
                                left join dbo.CURRENCYEXCHANGERATE on REVENUE.BASEEXCHANGERATEID = CURRENCYEXCHANGERATE.ID
                            where
                                REVENUE.ID = @REVENUEAUCTIONDONATIONID;

                            declare @EVENTAUCTIONBASECURRENCYID uniqueidentifier;
                            if @EVENTAUCTIONID is not null
                            begin
                                select 
                                    @EVENTAUCTIONBASECURRENCYID = EVENT.BASECURRENCYID
                                from dbo.EVENT
                                where EVENT.ID = @EVENTAUCTIONID

                                if (@EVENTAUCTIONBASECURRENCYID <> @TRANSACTIONCURRENCYID)
                                    raiserror('BBERR_AUCTIONITEM_EVENT_BASECURRENCY', 13, 1);
                            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

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

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

                            -- check to see if amount, postdate, or post status 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.ORGANIZATIONAMOUNT = @ORGANIZATIONVALUE
                                        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 ((@POSTSTATUSCODE = 2 and REVENUE.DONOTPOST = 1) or (@POSTSTATUSCODE = 1 and REVENUE.DONOTPOST = 0))
                                        and REVENUESPLIT.DESIGNATIONID = @DESIGNATIONID
                                    ) = 0 
                                begin
                                    set @CLEARGLDISTRIBUTION = 1;
                                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.RECEIPTAMOUNT = @VALUE,
                                REVENUE.GIVENANONYMOUSLY = @ISANONYMOUS,
                                REVENUE.CHANGEDBYID = @CHANGEAGENTID,
                                REVENUE.DATECHANGED = @CURRENTDATE,
                                REVENUE.TRANSACTIONAMOUNT = @VALUE,
                                REVENUE.ORGANIZATIONAMOUNT = @ORGANIZATIONVALUE,
                                REVENUE.ORGANIZATIONEXCHANGERATEID = @ORIGINTOORGANIZATIONEXCHANGERATEID,
                                REVENUE.BASEEXCHANGERATEID = @BASEEXCHANGERATEID
                            where REVENUE.ID = @REVENUEAUCTIONDONATIONID


                            update dbo.REVENUESPLIT set
                                REVENUESPLIT.DESIGNATIONID = @DESIGNATIONID,
                                REVENUESPLIT.AMOUNT = @BASEVALUE,
                                REVENUESPLIT.CHANGEDBYID = @CHANGEAGENTID,
                                REVENUESPLIT.DATECHANGED = @CURRENTDATE,
                                REVENUESPLIT.TRANSACTIONAMOUNT = @VALUE,
                                REVENUESPLIT.BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
                                REVENUESPLIT.ORGANIZATIONAMOUNT = @ORGANIZATIONVALUE,
                                REVENUESPLIT.ORGANIZATIONEXCHANGERATEID = @ORIGINTOORGANIZATIONEXCHANGERATEID
                            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.VALUE = @BASEVALUE,
                                AUCTIONITEM.MINIMUMBID = @BASEMINIMUMBID,
                                AUCTIONITEM.EXPIRATIONDATE = @EXPIRATIONDATE,
                                AUCTIONITEM.EVENTAUCTIONID = @EVENTAUCTIONID,
                                AUCTIONITEM.CHANGEDBYID = @CHANGEAGENTID,
                                AUCTIONITEM.DATECHANGED = @CURRENTDATE,
                                AUCTIONITEM.TRANSACTIONVALUE = @VALUE,
                                AUCTIONITEM.ORGANIZATIONVALUE = @ORGANIZATIONVALUE,
                                AUCTIONITEM.TRANSACTIONMINIMUMBID = @MINIMUMBID,
                                AUCTIONITEM.ORGANIZATIONMINIMUMBID = @ORGANIZATIONMINIMUMBID,
                                AUCTIONITEM.BASECURRENCYID = @BASECURRENCYID,
                                AUCTIONITEM.BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
                                AUCTIONITEM.ORIGINTOORGANIZATIONEXCHANGERATEID = @ORIGINTOORGANIZATIONEXCHANGERATEID,
                                AUCTIONITEM.TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID
                            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 @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

                            if @OLDSPOTRATEID is not null and not exists (select 1 from dbo.REVENUE where ID = @REVENUEAUCTIONDONATIONID and BASEEXCHANGERATEID = @OLDSPOTRATEID)
                            begin
                                exec dbo.USP_CURRENCYEXCHANGERATE_DELETEBYID_WITHCHANGEAGENTID @OLDSPOTRATEID, @CHANGEAGENTID;
                            end

                        end try
                        begin catch
                            exec dbo.USP_RAISE_ERROR
                            return 1
                        end catch

                    return 0;