USP_SALESORDER_ADDDISCOUNTCREDITS

Adds discounts as credits to a sales order.

Parameters

Parameter Parameter Type Mode Description
@SALESORDERID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE datetime IN
@REVENUEDATE datetime IN
@ADJUSTMENTID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_SALESORDER_ADDDISCOUNTCREDITS
(
    @SALESORDERID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier,
    @CURRENTDATE datetime,
    @REVENUEDATE datetime = null,
    @ADJUSTMENTID uniqueidentifier = null        -- Used when editing posted orders to group discount GL appropriately.

)
as
begin
    set nocount on;

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

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

    declare @PDACCOUNTSYSTEMID uniqueidentifier;
    declare @ALLOWGLDISTRIBUTIONS bit;

    select
        @PDACCOUNTSYSTEMID = ID,
        @ALLOWGLDISTRIBUTIONS = ALLOWGLDISTRIBUTIONS
    from 
        dbo.UFN_PDACCOUNTSYSTEM_DEFAULTORSYSTEM();

    declare @INS table(
        ID uniqueidentifier
        ,CREDITID uniqueidentifier
        ,FINANCIALTRANSACTIONID uniqueidentifier
        ,AMOUNT money
        ,TYPECODE tinyint
        ,DISCOUNTID uniqueidentifier
        ,MEMBERSHIPPROMOID uniqueidentifier
        ,SALESORDERITEMMEMBERSHIPITEMPROMOTIONID uniqueidentifier
        ,REVENUESPLITID uniqueidentifier
        ,POSTDATE date
        ,POSTSTATUSCODE tinyint
    );

    -- Add another typecode for merchandise 

    declare @DISCOUNTS table
        (ID uniqueidentifier,
        DISCOUNTID uniqueidentifier,
        SALESORDERID uniqueidentifier,
        AMOUNT money,
        TYPECODE tinyint);

    insert into @DISCOUNTS
    select newid(), DISCOUNT.DISCOUNTID, @SALESORDERID, sum(DISCOUNT.AMOUNT), 0
    from dbo.SALESORDERITEMITEMDISCOUNT as DISCOUNT with (nolock) 
        inner join dbo.SALESORDERITEM with (nolock) on DISCOUNT.SALESORDERITEMID = SALESORDERITEM.ID
    where SALESORDERITEM.SALESORDERID = @SALESORDERID
    group by DISCOUNT.DISCOUNTID

    union all
    select newid(), DISCOUNT.DISCOUNTID, @SALESORDERID, SALESORDERITEM.TOTAL, 1
    from dbo.SALESORDERITEM with (nolock)
        inner join dbo.SALESORDERITEMORDERDISCOUNT as DISCOUNT with (nolock) on SALESORDERITEM.ID = DISCOUNT.ID
    where SALESORDERITEM.SALESORDERID = @SALESORDERID

    --applied ticket to membership

    union all
    select newid(), SOIMP.ID, @SALESORDERID, SOIMP.AMOUNT, 3
    from dbo.SALESORDERITEM as SOI with (nolock)
        inner join dbo.SALESORDERITEMMEMBERSHIPITEMPROMOTION as SOIMP with (nolock) on SOI.ID = SOIMP.SALESORDERITEMID
    where 
        SOI.SALESORDERID = @SALESORDERID and
        SOI.TOTAL > 0 and
        SOIMP.AMOUNT > 0;

    if @@rowcount > 0 begin
        insert into @INS(
            ID
            ,CREDITID
            ,FINANCIALTRANSACTIONID
            ,AMOUNT
            ,TYPECODE
            ,DISCOUNTID
            ,SALESORDERITEMMEMBERSHIPITEMPROMOTIONID
            ,REVENUESPLITID
            ,POSTDATE
            ,POSTSTATUSCODE)
        select
            NEWID()
            ,DISCOUNT.ID
            ,SALESORDER.REVENUEID
            ,SUM(DISCOUNTITEM.AMOUNT)
            ,SALESORDERITEM.TYPECODE
            ,case DISCOUNT.TYPECODE
                when 3 then null
                else DISCOUNT.DISCOUNTID
             end
            ,case DISCOUNT.TYPECODE
                when 3 then DISCOUNT.DISCOUNTID            
                else null
             end
            ,FINANCIALTRANSACTIONLINEITEM.ID
            ,cast(isnull(@REVENUEDATE, SALESORDER.TRANSACTIONDATE) as date)
            ,case when FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE = 2 then 1 else FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE end
        from @DISCOUNTS as DISCOUNT
        inner join dbo.SALESORDERITEMITEMDISCOUNT as DISCOUNTITEM with (nolock) on DISCOUNT.DISCOUNTID = DISCOUNTITEM.DISCOUNTID
        inner join dbo.SALESORDERITEM with (nolock) on DISCOUNTITEM.SALESORDERITEMID = SALESORDERITEM.ID
        inner join dbo.SALESORDERITEMTICKET with (nolock) on SALESORDERITEM.ID = SALESORDERITEMTICKET.ID
        inner join dbo.SALESORDER with (nolock) on SALESORDER.ID = SALESORDERITEM.SALESORDERID
        inner join dbo.FINANCIALTRANSACTIONLINEITEM on SALESORDER.REVENUEID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
        inner join dbo.REVENUESPLITORDER on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLITORDER.ID
        where SALESORDER.ID = @SALESORDERID
            and (
                SALESORDERITEMTICKET.EVENTID = REVENUESPLITORDER.EVENTID
                or (
                    SALESORDERITEMTICKET.PROGRAMID = REVENUESPLITORDER.PROGRAMID
                    and REVENUESPLITORDER.EVENTID is null
                )
            )
            and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
        group by DISCOUNT.ID, FINANCIALTRANSACTIONLINEITEM.ID, SALESORDERITEM.TYPECODE, SALESORDER.REVENUEID, SALESORDER.TRANSACTIONDATE, DISCOUNT.TYPECODE, DISCOUNT.DISCOUNTID, FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE;

        --item discounts

        insert into @INS(
            ID
            ,CREDITID
            ,FINANCIALTRANSACTIONID
            ,AMOUNT
            ,TYPECODE
            ,DISCOUNTID
            ,SALESORDERITEMMEMBERSHIPITEMPROMOTIONID
            ,REVENUESPLITID
            ,POSTDATE
            ,POSTSTATUSCODE)
        select
            NEWID()
            ,DISCOUNT.ID
            ,SALESORDER.REVENUEID
            ,SUM(DISCOUNTITEM.AMOUNT)
            ,SALESORDERITEM.TYPECODE
            ,case DISCOUNT.TYPECODE
                when 3 then null
                else DISCOUNT.DISCOUNTID
             end
            ,case DISCOUNT.TYPECODE
                when 3 then DISCOUNT.DISCOUNTID            
                else null
             end
            ,FINANCIALTRANSACTIONLINEITEM.ID
            ,cast(isnull(@REVENUEDATE, SALESORDER.TRANSACTIONDATE) as date)
            ,case when FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE = 2 then 1 else FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE end
        from @DISCOUNTS as DISCOUNT
        inner join dbo.SALESORDERITEMITEMDISCOUNT as DISCOUNTITEM with (nolock) on DISCOUNT.DISCOUNTID = DISCOUNTITEM.DISCOUNTID
        inner join dbo.SALESORDERITEM with (nolock) on DISCOUNTITEM.SALESORDERITEMID = SALESORDERITEM.ID
        inner join dbo.SALESORDERITEMMERCHANDISE with (nolock) on SALESORDERITEM.ID = SALESORDERITEMMERCHANDISE.ID
        inner join dbo.SALESORDER with (nolock) on SALESORDER.ID = SALESORDERITEM.SALESORDERID
        inner join dbo.FINANCIALTRANSACTIONLINEITEM on SALESORDER.REVENUEID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
        inner join dbo.REVENUESPLITORDER on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLITORDER.ID
        where SALESORDER.ID = @SALESORDERID
            and SALESORDERITEMMERCHANDISE.MERCHANDISEPRODUCTINSTANCEID = REVENUESPLITORDER.MERCHANDISEPRODUCTINSTANCEID
            and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
        group by DISCOUNT.ID, FINANCIALTRANSACTIONLINEITEM.ID, SALESORDERITEM.TYPECODE, SALESORDER.REVENUEID, SALESORDER.TRANSACTIONDATE, DISCOUNT.TYPECODE, DISCOUNT.DISCOUNTID, FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE;

        if exists(select temp.ID from @DISCOUNTS temp where temp.TYPECODE = 1) begin    
            --order discounts

            --prorate discount over all ticketed items

            insert into @INS(
                ID
                ,CREDITID
                ,FINANCIALTRANSACTIONID
                ,AMOUNT
                ,TYPECODE
                ,DISCOUNTID
                ,SALESORDERITEMMEMBERSHIPITEMPROMOTIONID
                ,REVENUESPLITID
                ,POSTDATE
                ,POSTSTATUSCODE)
            select
                NEWID()
                ,DISCOUNT.ID
                ,SALESORDER.REVENUEID
                ,SALESORDERITEMORDERDISCOUNTDETAIL.AMOUNT
                ,SALESORDERITEM.TYPECODE
                ,case DISCOUNT.TYPECODE
                    when 3 then null
                    else DISCOUNT.DISCOUNTID
                 end
                ,case DISCOUNT.TYPECODE
                    when 3 then DISCOUNT.DISCOUNTID            
                    else null
                 end
                ,FINANCIALTRANSACTIONLINEITEM.ID
                ,cast(isnull(@REVENUEDATE, SALESORDER.TRANSACTIONDATE) as date)
                ,case when FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE = 2 then 1 else FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE end
            from 
                dbo.FINANCIALTRANSACTIONLINEITEM
                inner join dbo.SALESORDER on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = SALESORDER.REVENUEID
                inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
                inner join dbo.REVENUESPLITORDER on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLITORDER.ID
                inner join dbo.SALESORDERITEM with(nolock) on SALESORDER.ID = SALESORDERITEM.SALESORDERID
                inner join dbo.SALESORDERITEMMERCHANDISE with(nolock) on SALESORDERITEM.ID = SALESORDERITEMMERCHANDISE.ID
                inner join dbo.SALESORDERITEMORDERDISCOUNTDETAIL with(nolock) on SALESORDERITEM.ID = SALESORDERITEMORDERDISCOUNTDETAIL.SALESORDERITEMID
                inner join dbo.SALESORDERITEMORDERDISCOUNT with(nolock) on SALESORDERITEMORDERDISCOUNTDETAIL.SALESORDERITEMORDERDISCOUNTID = SALESORDERITEMORDERDISCOUNT.ID
                inner join @DISCOUNTS DISCOUNT on DISCOUNT.DISCOUNTID = SALESORDERITEMORDERDISCOUNT.DISCOUNTID
                where SALESORDER.ID = @SALESORDERID
                    and REVENUESPLIT_EXT.TYPECODE = 16
                    and SALESORDERITEMMERCHANDISE.MERCHANDISEPRODUCTINSTANCEID = REVENUESPLITORDER.MERCHANDISEPRODUCTINSTANCEID
                    and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null

            union all
            select 
                NEWID()
                ,DISCOUNT.ID
                ,SALESORDER.REVENUEID
                ,SALESORDERITEMORDERDISCOUNTDETAIL.AMOUNT
                ,SALESORDERITEM.TYPECODE
                ,case DISCOUNT.TYPECODE
                    when 3 then null
                    else DISCOUNT.DISCOUNTID
                 end
                ,case DISCOUNT.TYPECODE
                    when 3 then DISCOUNT.DISCOUNTID            
                    else null
                 end
                ,FINANCIALTRANSACTIONLINEITEM.ID
                ,cast(isnull(@REVENUEDATE, SALESORDER.TRANSACTIONDATE) as date)
                ,case when FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE = 2 then 1 else FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE end
            from 
                dbo.FINANCIALTRANSACTIONLINEITEM
                inner join dbo.SALESORDER on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = SALESORDER.REVENUEID
                inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
                inner join dbo.REVENUESPLITORDER on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLITORDER.ID
                inner join dbo.SALESORDERITEM with(nolock) on SALESORDER.ID = SALESORDERITEM.SALESORDERID
                inner join dbo.SALESORDERITEMTICKET with(nolock) on SALESORDERITEM.ID = SALESORDERITEMTICKET.ID                            
                inner join dbo.SALESORDERITEMORDERDISCOUNTDETAIL with(nolock) on SALESORDERITEM.ID = SALESORDERITEMORDERDISCOUNTDETAIL.SALESORDERITEMID
                inner join dbo.SALESORDERITEMORDERDISCOUNT with(nolock) on SALESORDERITEMORDERDISCOUNTDETAIL.SALESORDERITEMORDERDISCOUNTID = SALESORDERITEMORDERDISCOUNT.ID
                inner join @DISCOUNTS DISCOUNT on DISCOUNT.DISCOUNTID = SALESORDERITEMORDERDISCOUNT.DISCOUNTID                            
                where SALESORDER.ID = @SALESORDERID
                    and REVENUESPLIT_EXT.TYPECODE = 5
                    and SALESORDERITEMTICKET.PROGRAMID = REVENUESPLITORDER.PROGRAMID
                    and coalesce(SALESORDERITEMTICKET.EVENTID, SALESORDERITEMTICKET.PROGRAMID) = coalesce(REVENUESPLITORDER.EVENTID, REVENUESPLITORDER.PROGRAMID)
                    and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null

            union all
            select 
                NEWID()
                ,DISCOUNT.ID
                ,SALESORDER.REVENUEID
                ,SALESORDERITEMORDERDISCOUNTDETAIL.AMOUNT
                ,SALESORDERITEM.TYPECODE
                ,case DISCOUNT.TYPECODE
                    when 3 then null
                    else DISCOUNT.DISCOUNTID
                 end
                ,case DISCOUNT.TYPECODE
                    when 3 then DISCOUNT.DISCOUNTID            
                    else null
                 end
                ,FINANCIALTRANSACTIONLINEITEM.ID
                ,cast(isnull(@REVENUEDATE, SALESORDER.TRANSACTIONDATE) as date)
                ,case when FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE = 2 then 1 else FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE end
            from @DISCOUNTS DISCOUNT
            inner join dbo.SALESORDER with(nolock) on DISCOUNT.SALESORDERID = SALESORDER.ID
            inner join dbo.SALESORDERITEM with(nolock) on DISCOUNT.SALESORDERID = SALESORDERITEM.SALESORDERID
            inner join dbo.FINANCIALTRANSACTIONLINEITEM on SALESORDER.REVENUEID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
            inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
            inner join dbo.REVENUESPLITORDER on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLITORDER.ID
            inner join dbo.SALESORDERITEMMERCHANDISE with(nolock) on SALESORDERITEM.ID = SALESORDERITEMMERCHANDISE.ID 
            inner join dbo.SALESORDERITEMORDERDISCOUNTDETAIL with(nolock) on SALESORDERITEM.ID = SALESORDERITEMORDERDISCOUNTDETAIL.SALESORDERITEMID
            inner join dbo.SALESORDERITEMORDERDISCOUNT with(nolock) on SALESORDERITEMORDERDISCOUNTDETAIL.SALESORDERITEMORDERDISCOUNTID = SALESORDERITEMORDERDISCOUNT.ID
            where DISCOUNT.DISCOUNTID is null
                and DISCOUNT.TYPECODE = 1
                and SALESORDER.ID = @SALESORDERID
                and REVENUESPLIT_EXT.TYPECODE = 16
                and SALESORDERITEMMERCHANDISE.MERCHANDISEPRODUCTINSTANCEID = REVENUESPLITORDER.MERCHANDISEPRODUCTINSTANCEID
                and SALESORDERITEMORDERDISCOUNT.DISCOUNTID is null
                and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null

            union all
            select 
                NEWID()
                ,DISCOUNT.ID
                ,SALESORDER.REVENUEID
                ,SALESORDERITEMORDERDISCOUNTDETAIL.AMOUNT
                ,SALESORDERITEM.TYPECODE
                ,case DISCOUNT.TYPECODE
                    when 3 then null
                    else DISCOUNT.DISCOUNTID
                    end
                ,case DISCOUNT.TYPECODE
                    when 3 then DISCOUNT.DISCOUNTID            
                    else null
                    end
                ,FINANCIALTRANSACTIONLINEITEM.ID
                ,cast(isnull(@REVENUEDATE, SALESORDER.TRANSACTIONDATE) as date)
                ,case when FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE = 2 then 1 else FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE end
            from @DISCOUNTS DISCOUNT
            inner join dbo.SALESORDER with(nolock) on DISCOUNT.SALESORDERID = SALESORDER.ID
            inner join dbo.SALESORDERITEM with(nolock) on DISCOUNT.SALESORDERID = SALESORDERITEM.SALESORDERID
            inner join dbo.FINANCIALTRANSACTIONLINEITEM on SALESORDER.REVENUEID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
            inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
            inner join dbo.REVENUESPLITORDER on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLITORDER.ID
            inner  join dbo.SALESORDERITEMTICKET with(nolock) on SALESORDERITEM.ID = SALESORDERITEMTICKET.ID                            
            inner join dbo.SALESORDERITEMORDERDISCOUNTDETAIL with(nolock) on SALESORDERITEM.ID = SALESORDERITEMORDERDISCOUNTDETAIL.SALESORDERITEMID
            inner join dbo.SALESORDERITEMORDERDISCOUNT with(nolock) on SALESORDERITEMORDERDISCOUNTDETAIL.SALESORDERITEMORDERDISCOUNTID = SALESORDERITEMORDERDISCOUNT.ID
            where DISCOUNT.DISCOUNTID is null
                and DISCOUNT.TYPECODE = 1
                and SALESORDER.ID = @SALESORDERID
                and REVENUESPLIT_EXT.TYPECODE = 5
                and SALESORDERITEMORDERDISCOUNT.DISCOUNTID is null
                and SALESORDERITEMTICKET.PROGRAMID = REVENUESPLITORDER.PROGRAMID
                and coalesce(SALESORDERITEMTICKET.EVENTID, SALESORDERITEMTICKET.PROGRAMID) = coalesce(REVENUESPLITORDER.EVENTID, REVENUESPLITORDER.PROGRAMID)
                and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
        end

        --applied tickets to membership discounts    

        insert into @INS(
            ID
            ,CREDITID
            ,FINANCIALTRANSACTIONID
            ,AMOUNT
            ,TYPECODE
            ,DISCOUNTID
            ,SALESORDERITEMMEMBERSHIPITEMPROMOTIONID
            ,REVENUESPLITID
            ,POSTDATE
            ,POSTSTATUSCODE)
        select
            NEWID()
            ,DISCOUNT.ID
            ,SALESORDER.REVENUEID
            ,SUM(DISCOUNTITEM.AMOUNT)
            ,SALESORDERITEM.TYPECODE
            ,case DISCOUNT.TYPECODE
                when 3 then null
                else DISCOUNT.DISCOUNTID
             end
            ,case DISCOUNT.TYPECODE
                when 3 then DISCOUNT.DISCOUNTID            
                else null
             end
            ,MEMBERSHIPTRANSACTION.REVENUESPLITID
            ,cast(isnull(@REVENUEDATE, SALESORDER.TRANSACTIONDATE) as date)
            ,case when @ALLOWGLDISTRIBUTIONS = 1 then 1 else 3 end
        from @DISCOUNTS as DISCOUNT
        inner join dbo.SALESORDERITEMMEMBERSHIPITEMPROMOTION as DISCOUNTITEM with (nolock) on DISCOUNT.DISCOUNTID = DISCOUNTITEM.ID
        inner join dbo.SALESORDERITEM with (nolock) on DISCOUNTITEM.SALESORDERITEMID = SALESORDERITEM.ID
        inner join dbo.SALESORDERITEMMEMBERSHIP with (nolock) on SALESORDERITEM.ID = SALESORDERITEMMEMBERSHIP.ID        
        inner join dbo.SALESORDER with (nolock) on SALESORDER.ID = SALESORDERITEM.SALESORDERID
        inner join dbo.MEMBERSHIPTRANSACTION with (nolock) on SALESORDERITEMMEMBERSHIP.MEMBERSHIPTRANSACTIONID = MEMBERSHIPTRANSACTION.ID
        where
            SALESORDER.ID = @SALESORDERID
            and DISCOUNT.TYPECODE = 3
        group by DISCOUNT.ID, MEMBERSHIPTRANSACTION.REVENUESPLITID, SALESORDERITEM.TYPECODE, SALESORDER.REVENUEID, SALESORDER.TRANSACTIONDATE, DISCOUNT.TYPECODE, DISCOUNT.DISCOUNTID;

        insert into dbo.FINANCIALTRANSACTIONLINEITEM (
            ID
            ,FINANCIALTRANSACTIONID
            ,UNITVALUE
            ,QUANTITY
            ,TRANSACTIONAMOUNT
            ,BASEAMOUNT
            ,ORGAMOUNT
            ,SOURCELINEITEMID
            ,POSTDATE
            ,POSTSTATUSCODE
            ,TYPECODE
            ,FINANCIALTRANSACTIONLINEITEMADJUSTMENTID
            ,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
        select
            I.ID
            ,I.FINANCIALTRANSACTIONID
            ,I.AMOUNT
            ,1
            ,I.AMOUNT
            ,I.AMOUNT
            ,I.AMOUNT
            ,I.REVENUESPLITID
            ,I.POSTDATE
            ,I.POSTSTATUSCODE
            ,5
            ,@ADJUSTMENTID
            ,@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
        from @INS I;

        insert into dbo.CREDITITEM_EXT(
            ID
            ,CREDITID
            ,DISCOUNTID
            ,MEMBERSHIPPROMOID
            ,SALESORDERITEMMEMBERSHIPITEMPROMOTIONID
            ,TYPECODE
            ,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
        select
            I.ID
            ,I.CREDITID
            ,I.DISCOUNTID
            ,null  -- MEMBERSHIPPROMOID is not used; access the promo through SALESORDERITEMMEMBERSHIPITEMPROMOTION instead.

            ,I.SALESORDERITEMMEMBERSHIPITEMPROMOTIONID
            ,I.TYPECODE
            ,@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
        from @INS I;
    end

    if @ALLOWGLDISTRIBUTIONS=1 begin
        declare @CREDITID uniqueidentifier;
        declare @REVENUEID uniqueidentifier; 
        select @REVENUEID= SO.REVENUEID
        from dbo.SALESORDER SO
        where SO.ID = @SALESORDERID;

        declare CREDITCURSOR cursor local fast_forward 
        for select distinct EXT.CREDITID 
            from dbo.CREDITITEM_EXT EXT
            inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = EXT.ID
            where LI.FINANCIALTRANSACTIONID = @REVENUEID
                and LI.TYPECODE = 5
                and LI.DELETEDON is null;

        open CREDITCURSOR
        fetch next from CREDITCURSOR INTO @CREDITID

        while @@FETCH_STATUS = 0
        begin
            exec dbo.USP_SALESORDER_CREATEDISCOUNTGLDISTRIBUTION @CREDITID, @CHANGEAGENTID, @CURRENTDATE
            fetch next from CREDITCURSOR INTO @CREDITID
        end

        close CREDITCURSOR
        deallocate CREDITCURSOR
    end
end