USP_DATALIST_CREDIT_MERCHANDISE2

Parameters

Parameter Parameter Type Mode Description
@CREDITID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_DATALIST_CREDIT_MERCHANDISE2
(
    @CREDITID uniqueidentifier
)
as
    set nocount on;

    -- Old-style refunds (Pre-2014 S1)

    select
        EXT.SALESORDERITEMID ID,
        SALESORDERITEM.[DESCRIPTION] + ' (' + convert(varchar, convert(int, FTLI.QUANTITY)) + ')' as [DESCRIPTION],
        MERCHANDISEPRODUCTINSTANCE.BARCODE,
        SALESORDERITEM.PRICE * FTLI.QUANTITY as PRICE,
        EXT.DISCOUNTS + isnull(ORDERLEVELDISCOUNTS.AMOUNT, 0) as DISCOUNTS,  -- EXT.DISCOUNTS only includes item-level discounts

        FTLI.BASEAMOUNT - isnull(ORDERLEVELDISCOUNTS.AMOUNT, 0) as AMOUNTPAID,  -- Hacky. Old-style refunds forced you to refund the whole discounted item, so PAID and REFUNDED are the same.

        FTLI.BASEAMOUNT - isnull(ORDERLEVELDISCOUNTS.AMOUNT, 0) as AMOUNTREFUNDED,
        SALESORDERITEM.SALESORDERID
    from dbo.CREDITITEM_EXT EXT
    inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLI on FTLI.ID = EXT.ID
    inner join dbo.SALESORDERITEM on SALESORDERITEM.ID = EXT.SALESORDERITEMID
    inner join dbo.SALESORDERITEMMERCHANDISE MERCHITEM on MERCHITEM.ID = SALESORDERITEM.ID
    inner join dbo.MERCHANDISEPRODUCTINSTANCE on MERCHANDISEPRODUCTINSTANCE.ID = MERCHITEM.MERCHANDISEPRODUCTINSTANCEID
    outer apply (
        select sum(AMOUNT) AMOUNT
        from dbo.SALESORDERITEMORDERDISCOUNTDETAIL ODD
        where ODD.SALESORDERITEMID = EXT.SALESORDERITEMID
    ) ORDERLEVELDISCOUNTS
    where CREDITID = @CREDITID
        and EXT.SALESORDERITEMIZEDITEMID is null

    union all

    -- New-style refunds (Post-2014 S1)

    select
        EXT.SALESORDERITEMID ID,
        SALESORDERITEM.[DESCRIPTION],
        MERCHANDISEPRODUCTINSTANCE.BARCODE,
        SALESORDERITEM.PRICE * FTLI.QUANTITY as PRICE,
        MERCHUNIT.ITEMLEVELDISCOUNTSAPPLIED + ORDERLEVELDISCOUNTSAPPLIED as DISCOUNTS,
        MERCHUNIT.AMOUNTPAID,
        case when FTLI.BASEAMOUNT > MERCHUNIT.AMOUNTPAID then MERCHUNIT.AMOUNTPAID else FTLI.BASEAMOUNT end AMOUNTREFUNDED,  -- Accounting for order-level discounts.

        SALESORDERITEM.SALESORDERID
    from dbo.CREDITITEM_EXT EXT
    inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLI on FTLI.ID = EXT.ID
    inner join dbo.SALESORDERITEM on SALESORDERITEM.ID = EXT.SALESORDERITEMID
    inner join dbo.SALESORDERITEMMERCHANDISE MERCHITEM on MERCHITEM.ID = SALESORDERITEM.ID
    inner join dbo.MERCHANDISEPRODUCTINSTANCE on MERCHANDISEPRODUCTINSTANCE.ID = MERCHITEM.MERCHANDISEPRODUCTINSTANCEID
    inner join dbo.SALESORDERITEMMERCHANDISEUNIT MERCHUNIT on MERCHUNIT.ID = EXT.SALESORDERITEMIZEDITEMID
    where CREDITID = @CREDITID;