UFN_SALESORDER_GETCOMBINATIONITEMSFORDEFAULTITEMIZEDRECEIPT

Returns combination items on an order for default itemized receipt.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@ORDERID uniqueidentifier IN

Definition

Copy


            CREATE function dbo.UFN_SALESORDER_GETCOMBINATIONITEMSFORDEFAULTITEMIZEDRECEIPT(@ORDERID uniqueidentifier)
            returns table
            as return
            (
                select top 100 
                    ORDERITEMTYPE, 
                    SUBORDERITEMTYPE, 
                    ORDERITEMID, 
                    ITEMID, 
                    ORDERITEMDESCRIPTION, 
                    SUBORDERITEMDESCRIPTION, 
                    ORDERITEMTOTAL,
                    row_number() over (order by TICKETCOMBINATIONID, ORDERITEMTYPE, SUBORDERITEMTYPE, ITEMIDSORTFIELD, ORDERITEMSORTFIELD1, ORDERITEMSORTFIELD2) as ORDERITEMSORTFIELD1, 
                    ORDERITEMSORTFIELD2, 
                    SUBORDERITEMSORTFIELD1, 
                    SUBORDERITEMSORTFIELD2

                from (
                        --combination events

                        select 
                            1 ORDERITEMTYPE,
                            1 SUBORDERITEMTYPE,
                            SALESORDERITEM.ID ORDERITEMID,
                            coalesce(EVENT.ID, PROGRAM.ID) ITEMID,
                            [COMBINATION].[NAME] ORDERITEMDESCRIPTION,
                            coalesce([EVENT].[NAME] + ' (' + 
                                convert(nvarchar(10), [EVENT].[STARTDATE], 101) + ' - ' + 
                                dbo.UFN_HOURMINUTE_DISPLAYTIME([EVENT].[STARTTIME]) + ')', PROGRAM.NAME) SUBORDERITEMDESCRIPTION,
                            null ORDERITEMTOTAL,                            
                            0 ORDERITEMSORTFIELD1,
                            case
                                when [EVENT].ID is null then
                                    PROGRAM.NAME
                                else
                                    [EVENT].NAME 
                            end ORDERITEMSORTFIELD2,
                            case
                                when [EVENT].ID is null then
                                    PROGRAM.NAME
                                else
                                    [EVENT].NAME 
                            end SUBORDERITEMSORTFIELD1,
                            case
                                when [EVENT].ID is null then
                                    PROGRAM.NAME
                                else
                                    [EVENT].NAME 
                            end SUBORDERITEMSORTFIELD2,
                            [SALESORDERITEMTICKETCOMBINATION].TICKETCOMBINATIONID,
                            coalesce(EVENT.ID, PROGRAM.ID) ITEMIDSORTFIELD

                        from dbo.SALESORDERITEM
                            inner join dbo.[SALESORDERITEMTICKET] on [SALESORDERITEM].[ID] = [SALESORDERITEMTICKET].[ID]
                            inner join dbo.[SALESORDERITEMTICKETCOMBINATION] on [SALESORDERITEMTICKET].[ID] = [SALESORDERITEMTICKETCOMBINATION].[ID]
                            inner join dbo.[COMBINATION] on [SALESORDERITEMTICKETCOMBINATION].[COMBINATIONID] = [COMBINATION].[ID]
                            inner join dbo.[COMBINATIONPRICETYPE] on [COMBINATIONPRICETYPE].PRICETYPECODEID  = [SALESORDERITEMTICKET].[PRICETYPECODEID]
                                                                        and [COMBINATION].[ID] = [COMBINATIONPRICETYPE].[COMBINATIONID] 
                            left join dbo.EVENT on (EVENT.ID = SALESORDERITEMTICKET.EVENTID)
                            left join dbo.PROGRAM on (PROGRAM.ID = SALESORDERITEMTICKET.PROGRAMID)
                        where [SALESORDERITEM].[SALESORDERID] = @ORDERID and 
                                SALESORDERITEMTICKET.PRICETYPECODEID in (
                                    select top 1 COMBINATIONPRICETYPE.PRICETYPECODEID 
                                    from dbo.COMBINATIONPRICETYPE
                                        inner join dbo.SALESORDERITEMTICKETCOMBINATION SOITC on COMBINATIONPRICETYPE.COMBINATIONID = SOITC.COMBINATIONID
                                        inner join dbo.SALESORDERITEMTICKET on COMBINATIONPRICETYPE.PRICETYPECODEID = SALESORDERITEMTICKET.PRICETYPECODEID 
                                    where SOITC.ID = SALESORDERITEMTICKET.ID and SOITC.TICKETCOMBINATIONID = SALESORDERITEMTICKETCOMBINATION.TICKETCOMBINATIONID 
                                )

                        union all

                        --combination tickets

                        select
                            1 ORDERITEMTYPE,
                            2 SUBORDERITEMTYPE,
                            SALESORDERITEM.ID ORDERITEMID,
                            PRICETYPECODE.ID ITEMID,
                            [COMBINATION].[NAME] ORDERITEMDESCRIPTION,
                            cast(cast(SALESORDERITEM.QUANTITY as integer) as nvarchar) + ' ' + PRICETYPECODE.DESCRIPTION + ' @ ' + cast(dbo.UFN_SALESORDER_GETTICKETCOMBINATIONPRICE([SALESORDERITEM].ID) as nvarchar) SUBORDERITEMDESCRIPTION,
                            [SALESORDERITEM].[QUANTITY] * dbo.UFN_SALESORDER_GETTICKETCOMBINATIONPRICE([SALESORDERITEM].ID) ORDERITEMTOTAL,
                            1 ORDERITEMSORTFIELD1,
                            case
                                when [EVENT].ID is null then
                                    PROGRAM.NAME
                                else
                                    [EVENT].NAME 
                            end ORDERITEMSORTFIELD2,
                            case
                                when [EVENT].ID is null then
                                    PROGRAM.NAME
                                else
                                    [EVENT].NAME 
                            end SUBORDERITEMSORTFIELD1,
                            case
                                when [EVENT].ID is null then
                                    PROGRAM.NAME
                                else
                                    [EVENT].NAME 
                            end SUBORDERITEMSORTFIELD2,
                            [SALESORDERITEMTICKETCOMBINATION].TICKETCOMBINATIONID,
                            PRICETYPECODE.ID ITEMIDSORTFIELD

                        from dbo.[SALESORDERITEM]
                            inner join dbo.[SALESORDERITEMTICKET] on [SALESORDERITEM].[ID] = [SALESORDERITEMTICKET].[ID]
                            inner join dbo.[SALESORDERITEMTICKETCOMBINATION] on [SALESORDERITEMTICKET].[ID] = [SALESORDERITEMTICKETCOMBINATION].[ID]
                            inner join dbo.[COMBINATION] on [SALESORDERITEMTICKETCOMBINATION].[COMBINATIONID] = [COMBINATION].[ID]
                            inner join dbo.[COMBINATIONPRICETYPE] on [COMBINATIONPRICETYPE].PRICETYPECODEID  = [SALESORDERITEMTICKET].[PRICETYPECODEID]
                                                                  and [COMBINATION].[ID] = [COMBINATIONPRICETYPE].[COMBINATIONID] 
                            inner join dbo.[PRICETYPECODE] on [SALESORDERITEMTICKET].[PRICETYPECODEID] = [PRICETYPECODE].[ID]
                            left outer join dbo.[EVENT] on SALESORDERITEMTICKET.EVENTID = [EVENT].ID
                            left outer join dbo.PROGRAM on SALESORDERITEMTICKET.PROGRAMID = PROGRAM.ID                                    
                        where [SALESORDERITEM].[SALESORDERID] = @ORDERID and 
                            [SALESORDERITEM].[QUANTITY] > 0 and
                            [SALESORDERITEMTICKETCOMBINATION].PROGRAMGROUPID  in (
                                select top 1 id from dbo.PROGRAMGROUP  
                                where PROGRAMGROUP.COMBINATIONID = [SALESORDERITEMTICKETCOMBINATION].COMBINATIONID )

                        -- items fees

                        union all

    select
        1 ORDERITEMTYPE,
        2 SUBORDERITEMTYPE,
        SALESORDERITEM.ID ORDERITEMID,
        FEE.ID ITEMID,
        [COMBINATION].[NAME] as ORDERITEMDESCRIPTION,
        '     ' + FEE.NAME SUBORDERITEMDESCRIPTION,
        FEEPARENT.TOTAL ORDERITEMTOTAL,                            
        case when [EVENT].ID is null then
            dbo.UFN_DATE_GETEARLIESTTIME(getdate())
        else
            [EVENT].[STARTDATETIME] 
        end as ORDERITEMSORTFIELD1,
        case when [EVENT].ID is null then
            PROGRAM.NAME
        else
            [EVENT].NAME 
        end as ORDERITEMSORTFIELD2,
        PRICETYPECODE.DESCRIPTION SUBORDERITEMSORTFIELD1,
        FEE.NAME SUBORDERITEMSORTFIELD2,
        SALESORDERITEMTICKETCOMBINATION.TICKETCOMBINATIONID,
        PRICETYPECODE.ID ITEMIDSORTFIELD

    from dbo.SALESORDER
    inner join dbo.SALESORDERITEM on
        SALESORDER.ID = SALESORDERITEM.SALESORDERID
    inner join dbo.SALESORDERITEMTICKET on
        SALESORDERITEM.ID = SALESORDERITEMTICKET.ID
    inner join dbo.PRICETYPECODE on
        SALESORDERITEMTICKET.PRICETYPECODEID = PRICETYPECODE.ID
    inner join dbo.SALESORDERITEMFEE on
        SALESORDERITEM.ID = SALESORDERITEMFEE.SALESORDERITEMID
    inner join dbo.FEE on
        SALESORDERITEMFEE.FEEID = FEE.ID
    inner join SALESORDERITEM FEEPARENT on
        SALESORDERITEMFEE.ID = FEEPARENT.ID
    left outer join dbo.[EVENT] on
        SALESORDERITEMTICKET.EVENTID = [EVENT].ID
    left outer join dbo.PROGRAM on
        SALESORDERITEMTICKET.PROGRAMID = PROGRAM.ID
    inner join dbo.SALESORDERITEMTICKETCOMBINATION on
        SALESORDERITEMTICKETCOMBINATION.ID = SALESORDERITEM.ID
    inner join dbo.[COMBINATION] on 
        [SALESORDERITEMTICKETCOMBINATION].[COMBINATIONID] = [COMBINATION].[ID]
    where SALESORDER.ID = @ORDERID

                ) as COMBINATIONITEMS             
                order by TICKETCOMBINATIONID, ORDERITEMTYPE, ORDERITEMSORTFIELD1, ORDERITEMSORTFIELD2
            )