USP_DATALIST_SALESORDER

Lists all items belonging to a sales order.

Parameters

Parameter Parameter Type Mode Description
@CONTEXTID uniqueidentifier IN Input parameter indicating the context ID for the data list.

Definition

Copy


            CREATE procedure dbo.USP_DATALIST_SALESORDER
                (@CONTEXTID uniqueidentifier)
            as
                set nocount on

                declare @SALESTYPECODE tinyint;
                declare @ORDERSTATUSCODE tinyint;
                declare @SALESMETHODID uniqueidentifier;

                select 
                    @SALESTYPECODE = SALESORDER.SALESMETHODTYPECODE,
                    @ORDERSTATUSCODE = SALESORDER.STATUSCODE
                from dbo.SALESORDER 
                where SALESORDER.ID = @CONTEXTID

                declare @ISBASICCMS bit = 0
                if 
                    dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('e5e0494b-ba0f-4e23-b8fb-a59112dbf3c8') = 1 and -- Check for BasicCMS

                    dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('f238e8fe-06ae-4fdc-beaf-fdf6637e1982') = 0 -- Check for not CMS

                        set @ISBASICCMS = 1

                select @SALESMETHODID = dbo.UFN_SALESMETHOD_GETIDFROMTYPECODE(@SALESTYPECODE);

                declare @SALESMETHODFLATFEESPERITEM money
                select @SALESMETHODFLATFEESPERITEM = SUM(FEE.AMOUNT) 
                from dbo.SALESMETHODFEE 
                inner join dbo.FEE on SALESMETHODFEE.FEEID = FEE.ID 
                inner join dbo.SALESMETHOD on SALESMETHOD.ID = SALESMETHODFEE.SALESMETHODID
                where FEE.APPLIESTOCODE = 1 --item 

                    and FEE.TYPECODE = 0 
                    and FEE.ISACTIVE = 1
                    and SALESMETHOD.TYPECODE = @SALESTYPECODE

                declare @HASUNRESTRICTEDDELIVERYMETHOD bit = 0
                declare @EARLIESTVALIDEVENTDATETIMEWITHOFFSET datetimeoffset = null
                declare @DELIVERYMETHODEXISTS bit = 0
                exec dbo.USP_DELIVERYMETHOD_INFO_BYSALESMETHODID 
                    @SALESMETHODID
                    @DELIVERYMETHODEXISTS output
                    @HASUNRESTRICTEDDELIVERYMETHOD output
                    @EARLIESTVALIDEVENTDATETIMEWITHOFFSET output

                declare @MAXINT int = 2147483647

                declare @MAXDATETIMEOFFSETFORDIFFFROMEARLIESTVALIDEVENT datetimeoffset = dateadd(second, @MAXINT, @EARLIESTVALIDEVENTDATETIMEWITHOFFSET)

                declare @CURRENTDATE datetime = getdate();
                declare @MAXDATETIMEFORDIFFFROMCURRENT datetime = dateadd(second, @MAXINT, @CURRENTDATE)

                declare @CURRENTDATETIMEOFFSET datetimeoffset = dbo.UFN_TIMEZONEENTRY_GETSYSTEMDEFAULTDATEWITHTIMEOFFSET(sysutcdatetime(), 1);
                declare @MAXDATETIMEOFFSETFORDIFFFROMCURRENT datetimeoffset = dateadd(second, @MAXINT, @CURRENTDATETIMEOFFSET)

                select
                    SALESORDERITEM.ID,
                    SALESORDERITEM.DESCRIPTION,
                    SALESORDERITEM.PRICE,
                    SALESORDERITEM.QUANTITY,
                    SALESORDERITEM.TOTAL,
                    SALESORDERITEM.TYPECODE,
                    SALESORDERITEM.DATA,
                    SALESORDERITEM.OPTIONS,
                    SALESORDERITEM.CALLBACKURL,
                    SALESORDERITEM.EXPIREDCALLBACKURL,
                    SALESORDERITEM.SYSTEMTYPENAME,
                    SALESORDERITEM.ASSEMBLYNAME,
                    SALESORDERITEM.ATTRIBUTES,
                    SALESORDERITEM.CATEGORYNAME,
                    SALESORDERITEM.ACKNOWLEDGEMENT,
                    SALESORDERRESERVEDITEM.DATEADDED,
                    SALESORDERRESERVEDITEM.EXPIRATIONDATE,
                    [EXPIRATIONSUMMARY].[RESERVATIONHASEXPIRED] as ISEXPIRED,
                    [EXPIRATIONSUMMARY].[DELIVERYHASEXPIRED] as [HASNOVALIDDELIVERYMETHOD],
                    [EXPIRATIONSUMMARY].[EXPIRATIONDELTA]
                from dbo.SALESORDERITEM
                left join dbo.SALESORDERITEMTICKET on
                    SALESORDERITEM.ID = SALESORDERITEMTICKET.ID
                left join dbo.EVENT on
                    SALESORDERITEMTICKET.EVENTID = EVENT.ID
                left join dbo.SALESORDERITEMFEE on
                    SALESORDERITEM.ID = SALESORDERITEMFEE.ID
                left join dbo.SALESORDERRESERVEDITEM on
                    SALESORDERITEM.ID = SALESORDERRESERVEDITEM.ID    
                outer apply (
                    select
                        case 
                            when [PROGRAMSALESMETHOD].[ONSALEENDTYPECODE] is not null then
                                case [PROGRAMSALESMETHOD].[ONSALEENDTYPECODE] 
                                    when 0 then [EVENT].[STARTDATETIMEWITHOFFSET]
                                    when 1 then dateadd(mi, -1 * [PROGRAMSALESMETHOD].[ONSALEENDINTERVAL], [EVENT].[STARTDATETIMEWITHOFFSET])
                                    when 2 then dateadd(hh, -1 * [PROGRAMSALESMETHOD].[ONSALEENDINTERVAL], [EVENT].[STARTDATETIMEWITHOFFSET])
                                    when 3 then dateadd(mi, [PROGRAMSALESMETHOD].[ONSALEENDINTERVAL], [EVENT].[STARTDATETIMEWITHOFFSET])
                                end
                            else [EVENT].[STARTDATETIMEWITHOFFSET]
                        end as [DATETIMEWITHOFFSET]
                        from dbo.[PROGRAMSALESMETHOD]
                        where 
                            [PROGRAMSALESMETHOD].[PROGRAMID] = [EVENT].[PROGRAMID] and
                            [PROGRAMSALESMETHOD].[SALESMETHODID] = @SALESMETHODID
                ) [EVENTOFFSALE]
                outer apply (
                    select
                        case when [SALESORDERRESERVEDITEM].[ID] is null then 0 else 1 end [RESERVATION],
                        case when (SALESORDERITEM.TYPECODE <> 0) or (EVENT.ID is null and @DELIVERYMETHODEXISTS = 1) then 0 else 1 end [DELIVERY],
                        case when SALESORDERITEM.TYPECODE <> 0 or EVENT.ID is null then 0 else 1 end as [ONSALE]
                ) [CANEXPIRE]
                outer apply (
                    select
                        case when [CANEXPIRE].[RESERVATION] = 1 then 
                                case 
                                    when @CURRENTDATE > SALESORDERRESERVEDITEM.EXPIRATIONDATE then -1 --Already expired

                                    when @MAXDATETIMEFORDIFFFROMCURRENT <= SALESORDERRESERVEDITEM.EXPIRATIONDATE then @MAXINT --Beyond comparison(tm)

                                    else datediff(second,@CURRENTDATE,SALESORDERRESERVEDITEM.EXPIRATIONDATE) 
                                end
                            else null 
                        end as [RESERVATION],
                        case 
                            when [CANEXPIRE].[DELIVERY] = 1 and @DELIVERYMETHODEXISTS = 0 then -1
                            when [CANEXPIRE].[DELIVERY] = 1 then 
                                case 
                                    when @EARLIESTVALIDEVENTDATETIMEWITHOFFSET > EVENT.STARTDATETIMEWITHOFFSET then -1 --Already expired

                                    when @MAXDATETIMEOFFSETFORDIFFFROMEARLIESTVALIDEVENT <= EVENT.STARTDATETIMEWITHOFFSET then @MAXINT --Beyond datediff comparison

                                    else datediff(second,@EARLIESTVALIDEVENTDATETIMEWITHOFFSET, EVENT.STARTDATETIMEWITHOFFSET) 
                                end
                            else null
                        end as [DELIVERY],
                        case when [CANEXPIRE].[ONSALE] = 1 then
                                case
                                    when @CURRENTDATETIMEOFFSET > [EVENTOFFSALE].[DATETIMEWITHOFFSET] then -1 --Already expired

                                    when @MAXDATETIMEOFFSETFORDIFFFROMCURRENT <= [EVENTOFFSALE].[DATETIMEWITHOFFSET] then @MAXINT --Beyond datediff comparison

                                    else datediff(second,@CURRENTDATETIMEOFFSET, [EVENTOFFSALE].[DATETIMEWITHOFFSET]) 
                                end
                            else null 
                        end as [ONSALE]
                ) as [EXPIRATIONDELTA]
                outer apply (
                    select
                        case when [EXPIRATIONDELTA].[RESERVATION] <= 0 then 1 else 0 end as [RESERVATIONHASEXPIRED],
                        case when [EXPIRATIONDELTA].[DELIVERY] <= 0 or [EXPIRATIONDELTA].[ONSALE] <= 0 then 1 else 0 end [DELIVERYHASEXPIRED],
                        coalesce((
                            select min(EXPIRATION)
                            from (
                                select [EXPIRATIONDELTA].[DELIVERY] as [EXPIRATION]
                                union all
                                select [EXPIRATIONDELTA].[ONSALE] as [EXPIRATION]
                                union all
                                select [EXPIRATIONDELTA].[RESERVATION] as [EXPIRATION]
                            ) [DELTAS]
                        ),0) as [EXPIRATIONDELTA]        
                ) as [EXPIRATIONSUMMARY]
                where 
                    SALESORDERITEM.SALESORDERID = @CONTEXTID and
                    SALESORDERITEM.TYPECODE <> 3 and 
                    SALESORDERITEM.TYPECODE <> 4 and
                    not
                    (
                        SALESORDERITEM.TYPECODE = 16 and
                        @SALESTYPECODE = 2 and
                        @ISBASICCMS = 1 and
                        @ORDERSTATUSCODE = 0
                    )

                union all

                select
                    SALESORDERITEM.ID,
                    SALESORDERITEM.DESCRIPTION,
                    SALESORDERITEM.PRICE,
                    SALESORDERITEM.QUANTITY,
                    SALESORDERITEM.TOTAL,
                    SALESORDERITEM.TYPECODE,
                    SALESORDERITEM.DATA,
                    SALESORDERITEM.OPTIONS,
                    SALESORDERITEM.CALLBACKURL,
                    SALESORDERITEM.EXPIREDCALLBACKURL,
                    SALESORDERITEM.SYSTEMTYPENAME,
                    SALESORDERITEM.ASSEMBLYNAME,
                    SALESORDERITEM.ATTRIBUTES,
                    SALESORDERITEM.CATEGORYNAME,
                    SALESORDERITEM.ACKNOWLEDGEMENT,
                    null DATEADDED,
                    null EXPIRATIONDATE,
                    0 ISEXPIRED,
                    0 as [HASNOVALIDDELIVERYMETHOD],
                    0 as [EXPIRATIONDELTA]
                from dbo.SALESORDERITEM
                left join dbo.SALESORDERITEMFEE on
                    SALESORDERITEM.ID = SALESORDERITEMFEE.ID
                where 
                    SALESORDERITEM.SALESORDERID = @CONTEXTID and
                    SALESORDERITEM.TYPECODE = 3 and
                    SALESORDERITEMFEE.APPLIESTOCODE = 0

                union all

                select
                    SALESORDERITEM.ID,
                    SALESORDERITEM.DESCRIPTION,
                    SALESORDERITEM.PRICE,
                    SALESORDERITEM.QUANTITY,
                    SALESORDERITEM.TOTAL,
                    SALESORDERITEM.TYPECODE,
                    SALESORDERITEM.DATA,
                    SALESORDERITEM.OPTIONS,
                    SALESORDERITEM.CALLBACKURL,
                    SALESORDERITEM.EXPIREDCALLBACKURL,                    
                    SALESORDERITEM.SYSTEMTYPENAME,
                    SALESORDERITEM.ASSEMBLYNAME,
                    SALESORDERITEM.ATTRIBUTES,
                    SALESORDERITEM.CATEGORYNAME,
                    SALESORDERITEM.ACKNOWLEDGEMENT,
                    null DATEADDED,
                    null EXPIRATIONDATE,
                    0 ISEXPIRED,
                    0 as [HASNOVALIDDELIVERYMETHOD],
                    0 as [EXPIRATIONDELTA]
                from dbo.SALESORDERITEM
                left join dbo.SALESORDERITEMFEE on
                    SALESORDERITEM.ID = SALESORDERITEMFEE.ID
                where 
                    SALESORDERITEM.SALESORDERID = @CONTEXTID and
                    SALESORDERITEM.TYPECODE = 4