USP_DATALIST_CREDIT_TICKETS2

Parameters

Parameter Parameter Type Mode Description
@CREDITID uniqueidentifier IN

Definition

Copy


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

    with COMBOGROUPNUMBERS_CTE as (
        select TICKETID, TICKETGROUPNUMBER
        from dbo.UFN_SALESORDER_GETDETERMINISTICCOMBOTICKETNUMBERS((select SALESORDERID from dbo.CREDIT_EXT where ID = @CREDITID))
    )

    -- Pre-2014 S1 refunded tickets (aggregated)

    select
        SALESORDERITEM.ID,
        SALESORDERITEM.[DESCRIPTION] + ' (' + convert(varchar, convert(int, LI.QUANTITY)) + ')' [DESCRIPTION],
        [EVENT].STARTDATE,
        [EVENT].STARTTIME,
        SALESORDERITEM.PRICE * LI.QUANTITY as PRICE,
        EXT.DISCOUNTS + isnull(ORDERLEVELDISCOUNTS.AMOUNT, 0) as DISCOUNTS,  -- EXT.DISCOUNTS only includes item-level discounts

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

        LI.BASEAMOUNT - isnull(ORDERLEVELDISCOUNTS.AMOUNT, 0) as AMOUNTREFUNDED,
        SALESORDERITEM.SALESORDERID
    from dbo.FINANCIALTRANSACTIONLINEITEM LI
    inner join dbo.CREDITITEM_EXT as EXT on EXT.ID = LI.ID
    inner join dbo.SALESORDERITEM on SALESORDERITEM.ID = EXT.SALESORDERITEMID
    inner join dbo.SALESORDERITEMTICKET on SALESORDERITEMTICKET.ID = SALESORDERITEM.ID
    left join dbo.SALESORDERITEMTICKETCOMBINATION on SALESORDERITEMTICKETCOMBINATION.ID = SALESORDERITEMTICKET.ID
    left join dbo.EVENT on EVENT.ID = SALESORDERITEMTICKET.EVENTID
    outer apply (
        select sum(AMOUNT) AMOUNT
        from dbo.SALESORDERITEMORDERDISCOUNTDETAIL ODD
        where ODD.SALESORDERITEMID = EXT.SALESORDERITEMID
    ) ORDERLEVELDISCOUNTS
    where 
        LI.FINANCIALTRANSACTIONID = @CREDITID
        and SALESORDERITEMTICKETCOMBINATION.ID is null
        and EXT.SALESORDERITEMIZEDITEMID is null

    union all

    -- Pre-2014 S1 refunded combo tickets (aggregated)

    select
        EXT.SALESORDERITEMID as ID,
        COMBINATION.NAME + ' - ' + PRICETYPECODE.[DESCRIPTION] + ' - ' +
        stuff((
                select
                    ';' + case
                            when ITEMTICKET.EVENTID is null then P.NAME
                            else E.NAME + ' ' + convert(nvarchar(8),e.STARTDATE, 1) + ' ' + dbo.UFN_HOURMINUTE_DISPLAYTIME(e.STARTTIME)
                    end NAME
                from dbo.SALESORDERITEMTICKET ITEMTICKET
                inner join dbo.SALESORDERITEMTICKETCOMBINATION TICKETCOMBINATION on ITEMTICKET.ID = TICKETCOMBINATION.ID
                left join dbo.PROGRAM P on ITEMTICKET.PROGRAMID = P.ID
                left join dbo.[EVENT] E on ITEMTICKET.EVENTID = E.ID
                where
                    TICKETCOMBINATION.TICKETCOMBINATIONID = SALESORDERITEMTICKETCOMBINATION.TICKETCOMBINATIONID
                    and ITEMTICKET.PRICETYPECODEID = SALESORDERITEMTICKET.PRICETYPECODEID
                    order by NAME
                for xml path(''),type).value('.','nvarchar(max)'
            ), 1, 1, '')
            + ' (' + convert(varchar, convert(int, LI.QUANTITY)) + ')'
        as [DESCRIPTION],
        null STARTDATE,
        null STARTTIME,
        dbo.UFN_SALESORDER_GETTICKETCOMBINATIONPRICE(SALESORDERITEM.ID) * LI.QUANTITY as PRICE,
        isnull(ORDERLEVELDISCOUNTS.AMOUNT, 0) + EXT.DISCOUNTS as DISCOUNTS,  -- Combos are not item-level-discountable as of January 2014, but we're leaving EXT.DISCOUNTS here for now.

        dbo.UFN_SALESORDER_GETTICKETCOMBINATIONPRICE(SALESORDERITEM.ID) * LI.QUANTITY - EXT.DISCOUNTS - isnull(ORDERLEVELDISCOUNTS.AMOUNT, 0) AMOUNTPAID,
        dbo.UFN_SALESORDER_GETTICKETCOMBINATIONPRICE(SALESORDERITEM.ID) * LI.QUANTITY - EXT.DISCOUNTS - isnull(ORDERLEVELDISCOUNTS.AMOUNT, 0) AMOUNTREFUNDED,
        SALESORDERITEM.SALESORDERID
    from dbo.FINANCIALTRANSACTION as FT
    inner join dbo.FINANCIALTRANSACTIONLINEITEM as LI on LI.FINANCIALTRANSACTIONID = FT.ID
    inner join dbo.CREDITITEM_EXT as EXT on EXT.ID = LI.ID
    inner join dbo.SALESORDERITEM on SALESORDERITEM.ID = EXT.SALESORDERITEMID
    inner join dbo.SALESORDERITEMTICKET on SALESORDERITEMTICKET.ID = SALESORDERITEM.ID
    inner join dbo.SALESORDERITEMTICKETCOMBINATION on SALESORDERITEMTICKETCOMBINATION.ID = SALESORDERITEMTICKET.ID
    inner join dbo.COMBINATION on COMBINATION.ID = SALESORDERITEMTICKETCOMBINATION.COMBINATIONID
    inner join dbo.PRICETYPECODE on PRICETYPECODE.ID = SALESORDERITEMTICKET.PRICETYPECODEID
    left join dbo.PROGRAM on PROGRAM.ID = SALESORDERITEMTICKET.PROGRAMID
    left join dbo.[EVENT] on SALESORDERITEMTICKET.EVENTID = [EVENT].ID
    outer apply (
        select sum(AMOUNT) AMOUNT
        from dbo.SALESORDERITEMORDERDISCOUNTDETAIL ODD
        where ODD.SALESORDERITEMID in (
            select COMBOITEM.ID
            from dbo.SALESORDERITEMTICKETCOMBINATION COMBOITEM
            inner join dbo.SALESORDERITEMTICKET TICKETITEM on TICKETITEM.ID = COMBOITEM.ID
            where COMBOITEM.TICKETCOMBINATIONID = SALESORDERITEMTICKETCOMBINATION.TICKETCOMBINATIONID
                and TICKETITEM.PRICETYPECODEID = SALESORDERITEMTICKET.PRICETYPECODEID
        )
    ) ORDERLEVELDISCOUNTS
    where
        FT.ID = @CREDITID
        and EXT.SALESORDERITEMIZEDITEMID is null
        and SALESORDERITEMTICKETCOMBINATION.PROGRAMGROUPID in (
            select top 1 ID from dbo.PROGRAMGROUP
            where PROGRAMGROUP.COMBINATIONID = SALESORDERITEMTICKETCOMBINATION.COMBINATIONID
        )

    union all

    -- Post-2014 S1 refunded tickets (itemized and potentially partially refunded)

    select
        SALESORDERITEM.ID,
        SALESORDERITEM.[DESCRIPTION],
        [EVENT].STARTDATE,
        [EVENT].STARTTIME,
        TICKET.PRICE,
        TICKET.ITEMLEVELDISCOUNTSAPPLIED + TICKET.ORDERLEVELDISCOUNTSAPPLIED DISCOUNTS,
        TICKET.AMOUNTPAID,
        case when FTLI.BASEAMOUNT > TICKET.AMOUNTPAID then TICKET.AMOUNTPAID else FTLI.BASEAMOUNT end AMOUNTREFUNDED,  -- Accounting for order-level discounts.

        SALESORDERITEM.SALESORDERID
    from dbo.FINANCIALTRANSACTIONLINEITEM FTLI
    inner join dbo.CREDITITEM_EXT EXT on EXT.ID = FTLI.ID
    inner join dbo.TICKET on TICKET.ID = EXT.SALESORDERITEMIZEDITEMID
    inner join dbo.SALESORDERITEMTICKET on SALESORDERITEMTICKET.ID = TICKET.SALESORDERITEMTICKETID
    inner join dbo.SALESORDERITEM on SALESORDERITEM.ID = SALESORDERITEMTICKET.ID
    left join dbo.SALESORDERITEMTICKETCOMBINATION on SALESORDERITEMTICKETCOMBINATION.ID = SALESORDERITEMTICKET.ID
    left join dbo.[EVENT] on [EVENT].ID = SALESORDERITEMTICKET.EVENTID
    where
        FTLI.FINANCIALTRANSACTIONID = @CREDITID
        and SALESORDERITEMTICKETCOMBINATION.ID is null

    union all

    -- Post-2014 S1 refunded combo tickets (itemized)

    select
        newid() ID,  -- ID doesn't matter

        COMBINATION.NAME + ' ' + cast(COMBOGROUPNUMBERS.TICKETGROUPNUMBER as nvarchar(3)) + ' - ' + SALESORDERITEM.[DESCRIPTION] as [DESCRIPTION],
        [EVENT].STARTDATE,
        [EVENT].STARTTIME,
        TICKET.PRICE,
        TICKET.ITEMLEVELDISCOUNTSAPPLIED + TICKET.ORDERLEVELDISCOUNTSAPPLIED as DISCOUNTS,
        TICKET.AMOUNTPAID,
        case when FTLI.BASEAMOUNT > TICKET.AMOUNTPAID then TICKET.AMOUNTPAID else FTLI.BASEAMOUNT end AMOUNTREFUNDED,  -- Accounting for order-level discounts.

        SALESORDERITEM.SALESORDERID
    from dbo.FINANCIALTRANSACTIONLINEITEM FTLI
    inner join dbo.CREDITITEM_EXT EXT on EXT.ID = FTLI.ID
    inner join dbo.TICKET on TICKET.ID = EXT.SALESORDERITEMIZEDITEMID
    inner join dbo.SALESORDERITEM on SALESORDERITEM.ID = TICKET.SALESORDERITEMTICKETID
    inner join dbo.SALESORDERITEMTICKETCOMBINATION COMBOITEM on COMBOITEM.ID = TICKET.SALESORDERITEMTICKETID
    inner join COMBOGROUPNUMBERS_CTE COMBOGROUPNUMBERS on COMBOGROUPNUMBERS.TICKETID = TICKET.ID
    inner join dbo.COMBINATION on COMBINATION.ID = COMBOITEM.COMBINATIONID
    left join dbo.[EVENT] on [EVENT].ID = TICKET.EVENTID
    where FTLI.FINANCIALTRANSACTIONID = @CREDITID

    order by [DESCRIPTION];

    return 0;