USP_ADJUSTMENTHISTORY_STOCK_SAVESNAPSHOT

Stores a snapshot of stock detail information at the time of an adjustment for use in reporting.

Parameters

Parameter Parameter Type Mode Description
@STOCKSALEADJUSTMENTID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN

Definition

Copy


            CREATE procedure dbo.USP_ADJUSTMENTHISTORY_STOCK_SAVESNAPSHOT
            (
                @STOCKSALEADJUSTMENTID uniqueidentifier,
                @CHANGEAGENTID uniqueidentifier
            )
            as
            set nocount on;

            declare @CHANGEDATE datetime;
            declare @STOCKSALEID uniqueidentifier;
            declare @ADJUSTMENTHISTORYSTOCKID uniqueidentifier;
            declare @SNAPSHOTEXISTS bit;

            set @CHANGEDATE = getdate();
            set @SNAPSHOTEXISTS = 0;

            /*determine if a snapshot exists*/
            if (select count(ADJUSTMENTHISTORYSTOCKSNAPSHOT.ID) 
                from dbo.ADJUSTMENTHISTORYSTOCKSNAPSHOT
                inner join dbo.ADJUSTMENTHISTORYSTOCK on ADJUSTMENTHISTORYSTOCK.ID = ADJUSTMENTHISTORYSTOCKSNAPSHOT.ID
                where ADJUSTMENTHISTORYSTOCK.STOCKSALEADJUSTMENTID = @STOCKSALEADJUSTMENTID) > 0
                set @SNAPSHOTEXISTS = 1;

            if @SNAPSHOTEXISTS = 1 /*update the ADJUSTMENTHISTORYSTOCK record to match STOCKSALEADJUSTMENT */
            begin
                select @ADJUSTMENTHISTORYSTOCKID = ID
                from dbo.ADJUSTMENTHISTORYSTOCK
                where STOCKSALEADJUSTMENTID = @STOCKSALEADJUSTMENTID;

                if @STOCKSALEADJUSTMENTID is not null
                    update dbo.ADJUSTMENTHISTORYSTOCK set
                        ADJUSTMENTHISTORYSTOCK.CONSTITUENTNAME = CONSTITUENT.NAME,
                        ADJUSTMENTHISTORYSTOCK.REVENUEDATE = REVENUE.DATE,
                        ADJUSTMENTHISTORYSTOCK.ADJUSTMENTDATE = STOCKSALEADJUSTMENT.DATE,
                        ADJUSTMENTHISTORYSTOCK.ADJUSTMENTPOSTDATE = STOCKSALEADJUSTMENT.POSTDATE,
                        ADJUSTMENTHISTORYSTOCK.ADJUSTMENTREASON = STOCKSALEADJUSTMENT.REASON,
                        ADJUSTMENTHISTORYSTOCK.ADJUSTMENTREASONCODEID = STOCKSALEADJUSTMENT.REASONCODEID,
                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CHANGEDATE
                    from dbo.ADJUSTMENTHISTORYSTOCK
                    inner join dbo.STOCKSALEADJUSTMENT on STOCKSALEADJUSTMENT.ID = ADJUSTMENTHISTORYSTOCK.STOCKSALEADJUSTMENTID
                    inner join dbo.REVENUEPAYMENTMETHOD on REVENUEPAYMENTMETHOD.ID = STOCKSALEADJUSTMENT.STOCKSALEID
                    inner join dbo.REVENUE on REVENUE.ID = REVENUEPAYMENTMETHOD.REVENUEID 
                    inner join dbo.CONSTITUENT on CONSTITUENT.ID = REVENUE.CONSTITUENTID
                    where STOCKSALEADJUSTMENT.ID = @STOCKSALEADJUSTMENTID;
            end
            else
            begin
                /*since the snapshot has an FK ADJUSTMENTHISTORYSTOCK, need to create an ADJUSTMENTHISTORYSTOCK row. The needed information is 
                attached to the STOCKSALEADJUSTMENT record*/

                select
                    @STOCKSALEID = STOCKSALEADJUSTMENT.STOCKSALEID
                from dbo.STOCKSALEADJUSTMENT 
                where ID = @STOCKSALEADJUSTMENTID;

                set @ADJUSTMENTHISTORYSTOCKID = newid();

                insert into dbo.ADJUSTMENTHISTORYSTOCK(ID, STOCKSALEADJUSTMENTID, STOCKDETAILIDENTIFIER, ADJUSTMENTIDENTIFIER, CONSTITUENTNAME, REVENUEDATE, ADJUSTMENTDATE, ADJUSTMENTPOSTDATE, ADJUSTMENTREASON, ADJUSTMENTREASONCODEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                    select top 1
                        @ADJUSTMENTHISTORYSTOCKID,
                        STOCKSALEADJUSTMENT.ID,
                        cast(STOCKSALEADJUSTMENT.STOCKSALEID as nvarchar(36)),
                        cast(STOCKSALEADJUSTMENT.ID as nvarchar(36)),
                        CONSTITUENT.NAME,
                        REVENUE.DATE,
                        STOCKSALEADJUSTMENT.DATE,
                        STOCKSALEADJUSTMENT.POSTDATE,
                        STOCKSALEADJUSTMENT.REASON,
                        STOCKSALEADJUSTMENT.REASONCODEID,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE
                    from dbo.STOCKSALEADJUSTMENT
                    inner join dbo.STOCKSALE on STOCKSALEADJUSTMENT.STOCKSALEID = STOCKSALE.ID
                    inner join dbo.REVENUEPAYMENTMETHOD on REVENUEPAYMENTMETHOD.ID = STOCKSALE.STOCKDETAILID
                    inner join dbo.REVENUE on REVENUE.ID = REVENUEPAYMENTMETHOD.REVENUEID
                    inner join dbo.CONSTITUENT on CONSTITUENT.ID = REVENUE.CONSTITUENTID
                    where STOCKSALEADJUSTMENT.ID = @STOCKSALEADJUSTMENTID;

                /*create the snapshot of the stock detail information*/
                insert into dbo.ADJUSTMENTHISTORYSTOCKSNAPSHOT(ID, SALEAMOUNT, BROKERFEE, CONSTITUENTIDENTIFIER, NUMBEROFUNITS, PAYMENTNUMBEROFUNITS, PAYMENTMEDIANPRICE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONSALEAMOUNT, TRANSACTIONBROKERFEE, TRANSACTIONPAYMENTMEDIANPRICE, ORGANIZATIONSALEAMOUNT, ORGANIZATIONBROKERFEE, ORGANIZATIONPAYMENTMEDIANPRICE, BASECURRENCYID, TRANSACTIONCURRENCYID, BASERATE, ORGANIZATIONRATE)
                    select
                        @ADJUSTMENTHISTORYSTOCKID,
                        STOCKSALE.SALEAMOUNT,
                        STOCKSALE.FEE,
                        REVENUE.CONSTITUENTID,
                        STOCKSALE.NUMBEROFUNITS,
                        STOCKDETAIL.NUMBEROFUNITS,
                        STOCKDETAIL.MEDIANPRICE,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE,
                        STOCKSALE.TRANSACTIONSALEAMOUNT,
                        STOCKSALE.TRANSACTIONFEE,
                        STOCKDETAIL.TRANSACTIONMEDIANPRICE,
                        STOCKSALE.ORGANIZATIONSALEAMOUNT,
                        STOCKSALE.ORGANIZATIONFEE,
                        STOCKDETAIL.ORGANIZATIONMEDIANPRICE,
                        STOCKSALE.BASECURRENCYID,
                        STOCKSALE.TRANSACTIONCURRENCYID,
                        coalesce(BASERATE.RATE,0),
                        coalesce(ORGANIZATIONRATE.RATE,0)
                    from dbo.STOCKSALE
                    inner join dbo.STOCKSALEADJUSTMENT on STOCKSALEADJUSTMENT.STOCKSALEID = STOCKSALE.ID
                    inner join dbo.STOCKDETAIL on STOCKSALE.STOCKDETAILID = STOCKDETAIL.ID
                    inner join dbo.REVENUEPAYMENTMETHOD on STOCKSALE.STOCKDETAILID = REVENUEPAYMENTMETHOD.ID
                    inner join dbo.REVENUE on REVENUEPAYMENTMETHOD.REVENUEID = REVENUE.ID
                    left join dbo.CURRENCYEXCHANGERATE BASERATE on BASERATE.ID = STOCKSALE.BASEEXCHANGERATEID
                    left join dbo.CURRENCYEXCHANGERATE ORGANIZATIONRATE on ORGANIZATIONRATE.ID = STOCKSALE.ORGANIZATIONEXCHANGERATEID
                    where STOCKSALEADJUSTMENT.ID = @STOCKSALEADJUSTMENTID;

                /*create the distribution snapshot*/
                /*JamesWill CR254668-091306 10/02/2006 Reverse the debit and credit accounts to actually capture a reversal*/
                insert into dbo.ADJUSTMENTHISTORYSTOCKDISTRIBUTIONSNAPSHOT(ADJUSTMENTHISTORYSTOCKID, TRANSACTIONTYPECODE, ACCOUNT, PROJECT, REFERENCE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID)
                    select
                        @ADJUSTMENTHISTORYSTOCKID,
                        case TRANSACTIONTYPECODE when 0 then 1 else 0 end,
                        ACCOUNT,
                        PROJECT,
                        REFERENCE,
                        AMOUNT,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE,
                        TRANSACTIONAMOUNT,
                        ORGANIZATIONAMOUNT,
                        BASECURRENCYID,
                        TRANSACTIONCURRENCYID
                    from dbo.STOCKSALEGLDISTRIBUTION
                    where STOCKSALEID = @STOCKSALEID
                    and STOCKSALEGLDISTRIBUTION.OUTDATED = 0;

            end