USP_DATAFORMTEMPLATE_ADD_GIFTINKINDSALEBYTRANSACTION

The save procedure used by the add dataform template "Gift-in-Kind Sale By Transaction Add Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@REVENUEID uniqueidentifier IN Input parameter indicating the context ID for the record being added.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@SALEDATE datetime IN Date of sale
@SALEAMOUNT money IN Sale amount
@NUMBEROFUNITS int IN Units sold
@SALEPOSTDATE datetime IN GL post date
@SALEPOSTSTATUSCODE tinyint IN GL post status
@BASEEXCHANGERATEID uniqueidentifier IN Base currency ID
@EXCHANGERATE decimal(20, 8) IN Exchange rate
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.

Definition

Copy

                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_GIFTINKINDSALEBYTRANSACTION
                    (
                    @ID uniqueidentifier = null output,
                    @REVENUEID uniqueidentifier,
                    @CHANGEAGENTID uniqueidentifier,
                    @SALEDATE datetime,
                    @SALEAMOUNT money,
                    @NUMBEROFUNITS integer,
                    @SALEPOSTDATE datetime = null,
                    @SALEPOSTSTATUSCODE tinyint = 1,
                    @BASEEXCHANGERATEID uniqueidentifier = null,
                    @EXCHANGERATE decimal(20,8) = null,
                    @CURRENTAPPUSERID uniqueidentifier = null
                    )
                    as
                    set nocount on;

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

                        declare @ALLOWGLDISTRIBUTIONS bit;
                        set @ALLOWGLDISTRIBUTIONS = dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID);
                        if @ALLOWGLDISTRIBUTIONS = 0 
                            begin
                                set @SALEPOSTSTATUSCODE = 2        -- Do not post
                                set @SALEPOSTDATE = null
                            end
                        -- ****

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

                    declare @CURRENTDATE datetime;
                    set @CURRENTDATE = getdate();

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

                    -- The ID for GIFTINKINDPAYMENTMETHODDETAIL is the same as REVENUEPAYMENTMETHOD's ID.
                    declare @GIFTINKINDPAYMENTMETHODDETAILID uniqueidentifier;
                    select top 1 
                        @GIFTINKINDPAYMENTMETHODDETAILID = ID
                    from dbo.REVENUEPAYMENTMETHOD
                    where REVENUEID = @REVENUEID;

                    --Don't allow a sale before the revenue date.
                    if @SALEDATE < (select DATE from dbo.REVENUE where ID = @REVENUEID)
                    begin
                        raiserror('BBERR_SALEDATEBEFOREREVENUEDATE', 13, 1);
                        return 1;
                    end

                    --Don't allow a sale to post before the revenue date.
                    if @SALEPOSTDATE < (select DATE from dbo.REVENUE where ID = @REVENUEID)
                    begin
                        raiserror('BBERR_SALEPOSTDATEBEFOREREVENUEDATE', 13, 1);
                        return 1;
                    end

                    -- Raise error if the transaction is "do not post" but the stock sale isn't "do not post".
                    if @SALEPOSTSTATUSCODE <> 2 and (select top 1 DONOTPOST from dbo.REVENUE where ID = @REVENUEID) = 1
                    begin
                        raiserror('BBERR_TRANSACTIONDONOTPOSTSALEPOST', 13, 1);
                        return 1;
                    end

                    begin try
                        declare
                            @ORGANIZATIONSALEAMOUNT money,
                            @BASESALEAMOUNT money,
                            @BASECURRENCYID uniqueidentifier,
                            @ORGANIZATIONEXCHANGERATEID uniqueidentifier,
                            @TRANSACTIONCURRENCYID uniqueidentifier,
                            @ORGANIZATIONCURRENCYID uniqueidentifier;

                        select
                            @TRANSACTIONCURRENCYID = GIFTINKINDPAYMENTMETHODDETAIL.TRANSACTIONCURRENCYID,
                            @BASECURRENCYID = GIFTINKINDPAYMENTMETHODDETAIL.BASECURRENCYID
                        from
                            dbo.REVENUEPAYMENTMETHOD
                            inner join dbo.GIFTINKINDPAYMENTMETHODDETAIL on REVENUEPAYMENTMETHOD.ID = GIFTINKINDPAYMENTMETHODDETAIL.ID
                        where
                            REVENUEPAYMENTMETHOD.REVENUEID = @REVENUEID;

                        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,
                                @SALEDATE,
                                2,
                                null,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                            );
                        end

                        exec dbo.USP_CURRENCY_GETCURRENCYVALUES 
                                @SALEAMOUNT
                                @SALEDATE
                                @BASECURRENCYID
                                @BASEEXCHANGERATEID
                                @TRANSACTIONCURRENCYID
                                @BASESALEAMOUNT output
                                @ORGANIZATIONCURRENCYID output
                                @ORGANIZATIONSALEAMOUNT output
                                @ORGANIZATIONEXCHANGERATEID output
                                1; --Get an organization currency and exchange rate on the first call

                        if isnull(@NUMBEROFUNITS, 0) <= 0
                            raiserror ('CK_GIFTINKINDSALE_NUMBEROFUNITSPOSITIVE', 16, 1);

                        if isnull(@NUMBEROFUNITS, 0) > dbo.UFN_GIFTINKINDPAYMENTMETHODDETAIL_REMAININGUNITS(@GIFTINKINDPAYMENTMETHODDETAILID,@ID)
                            raiserror ('CK_GIFTINKINDSALE_NUMBEROFUNITSVALID2', 16, 1);

                        if not (isnull(@SALEPOSTSTATUSCODE,1) = 2 or @SALEPOSTDATE is not null)
                            raiserror ('CK_GIFTINKINDSALE_POSTDATE_REQUIRED', 16, 1);

                        if not (isnull(@BASESALEAMOUNT, 0) >= 0)
                            raiserror ('CK_GIFTINKINDSALE_SALEAMOUNTPOSITIVE', 16, 1);

                        insert into dbo.FINANCIALTRANSACTION (
                             ID
                            ,PARENTID
                            ,DATE
                            ,POSTSTATUSCODE
                            ,POSTDATE
                            ,TRANSACTIONAMOUNT
                            ,BASEAMOUNT
                            ,ORGAMOUNT
                            ,TRANSACTIONCURRENCYID
                            ,BASEEXCHANGERATEID
                            ,ORGEXCHANGERATEID
                            ,PDACCOUNTSYSTEMID
                            ,TYPECODE
                            ,DESCRIPTION
                            ,DELETEDON
                            ,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
                        )
                        values (
                            @ID
                            ,@REVENUEID
                            ,@SALEDATE
                            ,case isnull(@SALEPOSTSTATUSCODE, 1) when 0 then 2 when 1 then 1 when 2 then 3 end
                            ,@SALEPOSTDATE
                            ,@SALEAMOUNT
                            ,@BASESALEAMOUNT
                            ,@ORGANIZATIONSALEAMOUNT
                            ,@TRANSACTIONCURRENCYID
                            ,@BASEEXCHANGERATEID
                            ,@ORGANIZATIONEXCHANGERATEID
                            ,@PDACCOUNTSYSTEMID
                            ,27
                            ,''
                            ,null
                            ,@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
                        )

                        insert into dbo.GIFTINKINDSALE_EXT (
                             ID
                             ,GIFTINKINDPAYMENTMETHODDETAILID
                             ,SALEDATE
                             ,NUMBEROFUNITS
                            ,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
                        )
                        values (
                             @ID
                            ,@GIFTINKINDPAYMENTMETHODDETAILID
                            ,@SALEDATE
                            ,@NUMBEROFUNITS
                            ,@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
                        )

                        -- Add new stock detail GL distributions
                        if @SALEPOSTSTATUSCODE <> 2
                            exec dbo.USP_SAVE_GIFTINKINDPAYMENTMETHODDETAILGLDISTRIBUTION @REVENUEID, @CHANGEAGENTID, @CURRENTDATE, @ID;

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

                    return 0;