USP_AUCTIONITEM_ADD

Add an auction item.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@CHANGEAGENTID uniqueidentifier IN
@NAME nvarchar(100) IN
@AUCTIONITEMCATEGORYID uniqueidentifier IN
@AUCTIONITEMSUBCATEGORYID uniqueidentifier IN
@DESCRIPTION nvarchar(255) IN
@VALUE money IN
@MINIMUMBID money IN
@DONATIONDATE date IN
@EXPIRATIONDATE date IN
@DONORID uniqueidentifier IN
@EVENTAUCTIONID uniqueidentifier IN
@PACKAGEID uniqueidentifier IN
@TYPECODE int IN
@COPIEDFROMID uniqueidentifier IN
@DESIGNATIONID uniqueidentifier IN
@ISANONYMOUS bit IN
@PDACCOUNTSYSTEMID uniqueidentifier IN
@BATCHNUMBER nvarchar(100) IN
@POSTDATE datetime IN
@POSTSTATUSCODE tinyint IN
@BASECURRENCYID uniqueidentifier IN
@TRANSACTIONCURRENCYID uniqueidentifier IN
@BASEEXCHANGERATEID uniqueidentifier IN
@EXCHANGERATE decimal(20, 8) IN
@CHANGEDATE datetime IN

Definition

Copy


            CREATE procedure dbo.USP_AUCTIONITEM_ADD
            (
                @ID uniqueidentifier = null output,
                @CHANGEAGENTID uniqueidentifier = null,
                @NAME nvarchar(100) = '',
                @AUCTIONITEMCATEGORYID uniqueidentifier = null,
                @AUCTIONITEMSUBCATEGORYID uniqueidentifier = null,
                @DESCRIPTION nvarchar(255) = '',
                @VALUE money = null,
                @MINIMUMBID money = 0,
                @DONATIONDATE date = null,
                @EXPIRATIONDATE date = null,
                @DONORID uniqueidentifier = null,
                @EVENTAUCTIONID uniqueidentifier = null,
                @PACKAGEID uniqueidentifier = null,
                @TYPECODE integer = null,
                @COPIEDFROMID uniqueidentifier = null,
                @DESIGNATIONID uniqueidentifier = null,
                @ISANONYMOUS bit = null,
                @PDACCOUNTSYSTEMID uniqueidentifier  = null,
                @BATCHNUMBER nvarchar(100) = '',
                @POSTDATE datetime = null,
                @POSTSTATUSCODE tinyint = 1,
                @BASECURRENCYID uniqueidentifier = null,
                @TRANSACTIONCURRENCYID uniqueidentifier = null,
                @BASEEXCHANGERATEID uniqueidentifier = null,
                @EXCHANGERATE decimal(20,8) = null,
                @CHANGEDATE datetime = null
            )
            as

            set nocount on;

            if @ID is null
                set @ID = newid();

            if @ISANONYMOUS is null
                set @ISANONYMOUS = 0;

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

            if @CHANGEDATE is null
                set @CHANGEDATE = getdate();

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

            declare @PACKAGETRANSACTIONCURRENCYID uniqueidentifier;
            if @PACKAGEID is not null
                select @PACKAGETRANSACTIONCURRENCYID = TRANSACTIONCURRENCYID
                from dbo.AUCTIONITEM
                where ID = @PACKAGEID;

            if @PDACCOUNTSYSTEMID is null
                set @PDACCOUNTSYSTEMID = '4B121C2C-CCE6-440D-894C-EA0DEF80D50B';

            begin try

                -- Check GL business rule for this account system and set to 'Do not post' if needed.

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

                    set @POSTDATE = null;
                end

                --Set currency parameters for backwards compatibility

                if @TRANSACTIONCURRENCYID is null
                    set @TRANSACTIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

                --Multicurrency - Retrieve base currency from the account system's currency set.

                declare @CURRENCYSETID uniqueidentifier;
                select @CURRENCYSETID = CURRENCYSETID from dbo.PDACCOUNTSYSTEM where ID = @PDACCOUNTSYSTEMID;

                if @BASECURRENCYID is null
                begin
                    select
                        @BASECURRENCYID = BASECURRENCYID
                    from
                        dbo.CURRENCYSET
                    where
                        ID = coalesce(@CURRENCYSETID,dbo.UFN_CURRENCYSET_GETAPPUSERDEFAULTCURRENCYSET());
                end

                -- Item checks

                if @TYPECODE = 0
                begin
                    -- Ensure that we can add an item with this transaction currency to the account system.

                    if not exists
                        (
                            select 1
                            from 
                                dbo.CURRENCYSETTRANSACTIONCURRENCY
                                inner join dbo.PDACCOUNTSYSTEM on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSETTRANSACTIONCURRENCY.CURRENCYSETID
                            where 
                                PDACCOUNTSYSTEM.ID = @PDACCOUNTSYSTEMID
                                and CURRENCYSETTRANSACTIONCURRENCY.CURRENCYID = @TRANSACTIONCURRENCYID
                        )
                    begin
                        raiserror('TRANSACTIONCURRENCYINVALIDFORACCOUNTSYSTEM',13,1);
                    end

                    if @PACKAGEID is not null
                    begin
                        if (@PACKAGETRANSACTIONCURRENCYID <> @TRANSACTIONCURRENCYID)
                            raiserror('BBERR_AUCTIONITEM_INVALIDTRANSACTIONCURRENCY_FORPACKAGE', 13, 1);

                        declare @PACKAGEACCOUNTSYSTEMID uniqueidentifier;
                        select top 1
                            @PACKAGEACCOUNTSYSTEMID = PDACCOUNTSYSTEMFORREVENUE.PDACCOUNTSYSTEMID
                        from
                            dbo.AUCTIONITEM
                            inner join dbo.PDACCOUNTSYSTEMFORREVENUE on AUCTIONITEM.REVENUEAUCTIONDONATIONID = PDACCOUNTSYSTEMFORREVENUE.ID
                        where
                            AUCTIONITEM.PACKAGEID = @PACKAGEID;

                        if (@PACKAGEACCOUNTSYSTEMID is not null) and (@PDACCOUNTSYSTEMID <> @PACKAGEACCOUNTSYSTEMID)
                            raiserror('BBERR_AUCTIONITEM_INVALIDPDACCOUNTSYSTEM_FORPACKAGE', 13, 1);
                    end

                    if @EVENTAUCTIONID is not null and (@EVENTAUCTIONBASECURRENCYID <> @TRANSACTIONCURRENCYID)
                        raiserror('BBERR_AUCTIONITEM_EVENT_BASECURRENCY', 13, 1);
                end

                -- Package checks

                if @TYPECODE = 1
                begin
                    if @EVENTAUCTIONID is null
                        raiserror('BBERR_AUCTIONITEM_PACKAGE_NOEVENT', 13, 1);

                    if @EVENTAUCTIONID is not null and (@EVENTAUCTIONBASECURRENCYID <> @TRANSACTIONCURRENCYID)
                        raiserror('BBERR_AUCTIONITEM_PACKAGE_INVALIDTRANSACTIONCURRENCY_FOREVENT', 13, 1);

                    --Packages don't post so they don't NEED a base currency; but it helps with backwards compatibility to have one.

                    --So set the base to be transaction

                    set @BASECURRENCYID = @TRANSACTIONCURRENCYID;
                end

                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,
                        coalesce(@DONATIONDATE, @CHANGEDATE),
                        2,
                        null,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE
                    );
                end

                declare @BASEVALUE money;
                declare @BASEMINIMUMBID money;

                declare @ORGANIZATIONVALUE money;
                declare @ORGANIZATIONMINIMUMBID money;

                declare @ORGANIZATIONCURRENCYID uniqueidentifier;
                declare @ORIGINTOORGANIZATIONEXCHANGERATEID uniqueidentifier;

                -- Get base and organization values for the auction item value

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

                declare @REVENUEID uniqueidentifier;
                declare @FINANCIALTRANSACTIONLINEITEMID uniqueidentifier;
                declare @SITEID uniqueidentifier;
                declare @CAMPAIGNS xml;

                if @EVENTAUCTIONID is not null and exists(select 1 from dbo.EVENT where EVENT.ID = @EVENTAUCTIONID and EVENT.ISACTIVE = 0)
                    raiserror('BBERR_EVENTAUCTIONISINACTIVE',13,1);

                if @VALUE is not null and @VALUE < 0 
                    raiserror('CK_JOURNALENTRY_VALIDAMOUNT',13,1);

                if (@TYPECODE = 0)
                begin
                    set @REVENUEID = newid();
                    set @FINANCIALTRANSACTIONLINEITEMID = newid();
                    select @SITEID = dbo.UFN_SITEID_MAPFROM_DESIGNATIONID(@DESIGNATIONID);

                    insert into dbo.FINANCIALTRANSACTION
                    (
                        ID,
                        CONSTITUENTID,
                        DATE,
                        POSTDATE,
                        POSTSTATUSCODE,
                        TYPECODE,
                        BASEAMOUNT,
                        TRANSACTIONAMOUNT,
                        TRANSACTIONCURRENCYID,
                        BASEEXCHANGERATEID,
                        ORGAMOUNT,
                        ORGEXCHANGERATEID,
                        PDACCOUNTSYSTEMID,
                        ADDEDBYID,
                        CHANGEDBYID,
                        DATEADDED,
                        DATECHANGED
                    )
                    values
                    (
                        @REVENUEID,
                        @DONORID,
                        @DONATIONDATE,
                        @POSTDATE,
                        case @POSTSTATUSCODE when 2 then 3 else 1 end,
                        7,
                        @BASEVALUE,
                        @VALUE,
                        @TRANSACTIONCURRENCYID,
                        @BASEEXCHANGERATEID,
                        @ORGANIZATIONVALUE,
                        @ORIGINTOORGANIZATIONEXCHANGERATEID,
                        @PDACCOUNTSYSTEMID,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE
                    );

                    insert into dbo.REVENUE_EXT
                    (
                        ID,
                        BATCHNUMBER,
                        DONOTRECEIPT,
                        RECEIPTAMOUNT,
                        GIVENANONYMOUSLY,
                        NONPOSTABLEBASECURRENCYID,
                        ADDEDBYID,
                        CHANGEDBYID,
                        DATEADDED,
                        DATECHANGED
                    )
                    values
                    (
                        @REVENUEID,
                        @BATCHNUMBER,
                        0,
                        @VALUE,
                        @ISANONYMOUS,
                        @BASECURRENCYID,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE
                    );

                    insert into dbo.FINANCIALTRANSACTIONLINEITEM
                    (
                        ID,
                        FINANCIALTRANSACTIONID,
                        BASEAMOUNT,
                        ORGAMOUNT,
                        TRANSACTIONAMOUNT,
                        POSTDATE,
                        POSTSTATUSCODE,
                        ADDEDBYID,
                        CHANGEDBYID,
                        DATEADDED,
                        DATECHANGED
                    )
                    values
                    (
                        @FINANCIALTRANSACTIONLINEITEMID,
                        @REVENUEID,
                        @BASEVALUE,
                        @ORGANIZATIONVALUE,
                        @VALUE,
                        @POSTDATE,
                        case @POSTSTATUSCODE when 2 then 3 else 1 end,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE
                    );

                    insert into dbo.REVENUESPLIT_EXT
                    (
                        ID,
                        DESIGNATIONID,
                        TYPECODE,
                        APPLICATIONCODE,
                        ADDEDBYID,
                        CHANGEDBYID,
                        DATEADDED,
                        DATECHANGED
                    )
                    values
                    (
                        @FINANCIALTRANSACTIONLINEITEMID,
                        @DESIGNATIONID,
                        0,
                        0,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE
                    );

                    insert into dbo.REVENUEPAYMENTMETHOD
                    (
                        ID,
                        REVENUEID,
                        PAYMENTMETHODCODE,
                        AMOUNT,
                        ADDEDBYID,
                        CHANGEDBYID,
                        DATEADDED,
                        DATECHANGED
                    )
                    values
                    (
                        newid(),
                        @REVENUEID,
                        9,
                        @BASEVALUE,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE
                    );

                    insert into dbo.REVENUEAUCTIONDONATION
                    (
                        ID,
                        ADDEDBYID,
                        CHANGEDBYID,
                        DATEADDED,
                        DATECHANGED
                    )
                    values
                    (
                        @REVENUEID,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE
                    );

                    if exists
                    (
                        select 1 from dbo.REVENUESPLIT_EXT
                        inner join dbo.DESIGNATION on DESIGNATION.ID = REVENUESPLIT_EXT.DESIGNATIONID
                        inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
                        where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @REVENUEID and DESIGNATION.ISACTIVE = 0
                    )
                    begin
                        raiserror('Revenue cannot be added to inactive designations.', 13, 1);
                    end

                    --Campaigns


                    select
                        @CAMPAIGNS = (select -- campaigns for designation

                                        CAMPAIGNID,
                                        CAMPAIGNSUBPRIORITYID
                                     from dbo.UFN_DESIGNATION_GETCAMPAIGNSTODEFAULT(@DESIGNATIONID, @DONATIONDATE)
                                     for xml raw('ITEM'), type, elements, root('CAMPAIGNS'), BINARY BASE64);

                    if @DESIGNATIONID is not null and @CAMPAIGNS is not null
                        exec dbo.USP_REVENUESPLIT_GETCAMPAIGNS_ADDFROMXML @FINANCIALTRANSACTIONLINEITEMID, @CAMPAIGNS, @CHANGEAGENTID;

                    --Recognition credits


                    insert into dbo.REVENUERECOGNITION
                    (
                        REVENUESPLITID,
                        CONSTITUENTID,
                        AMOUNT,
                        EFFECTIVEDATE,
                        REVENUERECOGNITIONTYPECODEID,
                        ADDEDBYID,
                        CHANGEDBYID,
                        DATEADDED,
                        DATECHANGED,
                        BASECURRENCYID,
                        ORGANIZATIONAMOUNT,
                        ORGANIZATIONEXCHANGERATEID
                    )
                    select
                        FINANCIALTRANSACTIONLINEITEM.ID,
                        RECOGNITIONS.CONSTITUENTID,
                        RECOGNITIONS.AMOUNT,
                        @DONATIONDATE,
                        RECOGNITIONS.REVENUERECOGNITIONTYPECODEID,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE,
                        @BASECURRENCYID,
                        case
                            when @BASECURRENCYID = @ORGANIZATIONCURRENCYID then
                                RECOGNITIONS.AMOUNT
                            else
                                dbo.UFN_CURRENCY_CONVERT(RECOGNITIONS.AMOUNT, @ORIGINTOORGANIZATIONEXCHANGERATEID)
                        end,
                        @ORIGINTOORGANIZATIONEXCHANGERATEID
                    from
                        dbo.FINANCIALTRANSACTIONLINEITEM
                        cross apply dbo.UFN_REVENUEDETAIL_GETDEFAULTRECOGNITIONS(@ISANONYMOUS, @DONORID, FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT, @DONATIONDATE, null) as RECOGNITIONS
                    where
                        FINANCIALTRANSACTIONLINEITEM.ID = @FINANCIALTRANSACTIONLINEITEMID;

                    exec dbo.USP_PDACCOUNTSYSTEM_LINKTOREVENUE
                        @ID = @REVENUEID,
                        @PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID,
                        @CHANGEDATE = @CHANGEDATE,
                        @CHANGEAGENTID = @CHANGEAGENTID;

                    if @POSTSTATUSCODE <> 2
                        exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION @REVENUEID, @CHANGEAGENTID, @CHANGEDATE;

                end

                insert into dbo.AUCTIONITEM
                (
                    ID,
                    NAME,
                    AUCTIONITEMCATEGORYID,
                    AUCTIONITEMSUBCATEGORYID,
                    DESCRIPTION,
                    VALUE,
                    MINIMUMBID,
                    EXPIRATIONDATE,
                    REVENUEAUCTIONDONATIONID,
                    EVENTAUCTIONID,
                    PACKAGEID,
                    TYPECODE,
                    COPIEDFROMID,
                    ADDEDBYID,
                    CHANGEDBYID,
                    DATEADDED,
                    DATECHANGED,
                    TRANSACTIONVALUE,
                    ORGANIZATIONVALUE,
                    TRANSACTIONMINIMUMBID,
                    ORGANIZATIONMINIMUMBID,
                    BASECURRENCYID,
                    BASEEXCHANGERATEID,
                    BASETOORGANIZATIONEXCHANGERATEID,
                    ORIGINTOORGANIZATIONEXCHANGERATEID,
                    TRANSACTIONCURRENCYID
                )
                values
                (
                    @ID,
                    @NAME,
                    @AUCTIONITEMCATEGORYID,
                    @AUCTIONITEMSUBCATEGORYID,
                    @DESCRIPTION,
                    case
                        when @TYPECODE = 0 then
                            @BASEVALUE
                        else
                            0
                    end,
                    @BASEMINIMUMBID,
                    @EXPIRATIONDATE,
                    @REVENUEID,
                    @EVENTAUCTIONID,
                    @PACKAGEID,
                    @TYPECODE,
                    @COPIEDFROMID,
                    @CHANGEAGENTID,
                    @CHANGEAGENTID,
                    @CHANGEDATE,
                    @CHANGEDATE,
                    @VALUE,
                    case
                        when @TYPECODE = 0 then
                            @ORGANIZATIONVALUE
                        else
                            0
                    end,
                    @MINIMUMBID,
                    @ORGANIZATIONMINIMUMBID,
                    @BASECURRENCYID,
                    @BASEEXCHANGERATEID,
                    null,
                    @ORIGINTOORGANIZATIONEXCHANGERATEID,
                    @TRANSACTIONCURRENCYID
                );

            end try

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

            return 0;