USP_DATAFORMTEMPLATE_VIEW_SALESORDERPAGEDATA

The load procedure used by the view dataform template "Sales Order Page Expression View Form"

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter used to load the fields defined on the form.
@DATALOADED bit INOUT Output parameter indicating whether or not data was actually loaded.
@ORDERNUMBER int INOUT Order number
@CONSTITUENTNAME nvarchar(154) INOUT Name
@CONSTITUENTEXISTS bit INOUT Exists
@CONSTITUENTID uniqueidentifier INOUT Constituent ID
@ORDERSTATUS tinyint INOUT Status
@TRANSACTIONDATE datetime INOUT Transaction date
@ORDERTOTAL money INOUT Order total
@ORDERITEMCOUNT int INOUT Order item count
@ORDERTICKETTOTAL money INOUT Order ticket total
@ORDERMEMBERSHIPTOTAL money INOUT Order membership total
@ORDERDONATIONTOTAL money INOUT Order donation total
@ORDERADJUSTMENTTOTAL money INOUT Order adjustments total
@ORDERHASMEMBERSHIP bit INOUT Order has memberships
@ORDERHASDONATION bit INOUT Order has donations
@ORDERHASADJUSTMENT bit INOUT Order has adjustments
@REVENUEID uniqueidentifier INOUT Revenue ID
@ISPOSTED bit INOUT Is posted
@DONOTPOST bit INOUT Do not post
@ORDERPAYMENTCOUNT int INOUT Payment count
@ORDERBALANCE money INOUT Order balance
@REFUNDSTATUS int INOUT Refund Status
@ORDERHASEVENTREGISTRATION bit INOUT Order has event registration
@ORDEREVENTREGISTRATIONTOTAL money INOUT Order event registration total
@REFUNDTOTAL money INOUT Refund total
@SALESMETHODTYPECODE tinyint INOUT SALESMETHODTYPECODE
@PRIMARYMEMBERSHIPID uniqueidentifier INOUT Primary membership ID
@PRIMARYMEMBERSHIPDESCRIPTION nvarchar(max) INOUT Primary membership
@ORDERHASRESOURCE bit INOUT ORDERHASRESOURCE
@ORDERRESOURCETOTAL money INOUT ORDERRESOURCETOTAL
@ORDERHASSTAFFRESOURCE bit INOUT ORDERHASSTAFFRESOURCE
@ORDERSTAFFRESOURCETOTAL money INOUT ORDERSTAFFRESOURCETOTAL
@PATRONHASMEMBERSHIP bit INOUT PATRONHASMEMBERSHIP
@LASTRECALCULATIONDATE datetime INOUT Last recalculation date
@PRICINGCODE tinyint INOUT PRICINGCODE
@ORDERHASADDITIONALTICKETS bit INOUT ORDERHASADDITIONALTICKETS
@ORDERHASACTIVETICKETS bit INOUT ORDERHASACTIVETICKETS
@ORDERFLATRATETOTAL money INOUT Order flat rate ticket total
@ORDERADDITIONALTICKETSTOTAL money INOUT Order additional tickets total
@ORDERHASLOCATION bit INOUT ORDERHASLOCATION
@ORDERLOCATIONTOTAL money INOUT ORDERLOCATIONTOTAL
@ORDERHASMERCHANDISE bit INOUT ORDERHASMERCHANDISE
@ORDERMERCHANDISETOTAL money INOUT ORDERMERCHANDISETOTAL
@HASUNPOSTEDADJUSTMENT bit INOUT HASUNPOSTEDADJUSTMENT
@PATRONHASMIDTERMUPGRADE bit INOUT PATRONHASMIDTERMUPGRADE
@MEMBERSHIPID uniqueidentifier INOUT
@HASBENEFITDISTRIBUTION bit INOUT
@ORDERHASTICKETS bit INOUT
@ORDERHASNONDAILYTICKETS bit INOUT
@EMAILTICKETSAVAILABLE bit INOUT

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_VIEW_SALESORDERPAGEDATA
(
    @ID uniqueidentifier,
    @DATALOADED bit = 0 output,
    @ORDERNUMBER int = null output,
    @CONSTITUENTNAME nvarchar(154) = null output,
    @CONSTITUENTEXISTS bit = null output,
    @CONSTITUENTID uniqueidentifier = null output,
    @ORDERSTATUS tinyint = null output,
    @TRANSACTIONDATE datetime = null output,
    @ORDERTOTAL money = null output,
    @ORDERITEMCOUNT int = null output,
    @ORDERTICKETTOTAL money = null output,
    @ORDERMEMBERSHIPTOTAL money = null output,
    @ORDERDONATIONTOTAL money = null output,
    @ORDERADJUSTMENTTOTAL money = null output,
    @ORDERHASMEMBERSHIP bit = null output,
    @ORDERHASDONATION bit = null output,
    @ORDERHASADJUSTMENT bit = null output,
    @REVENUEID uniqueidentifier = null output,
    @ISPOSTED bit = null output,
    @DONOTPOST bit = null output,
    @ORDERPAYMENTCOUNT int = null output,
    @ORDERBALANCE money = null output,
    @REFUNDSTATUS int = null output,
    @ORDERHASEVENTREGISTRATION bit = null output,
    @ORDEREVENTREGISTRATIONTOTAL money = null output,
    @REFUNDTOTAL money = null output,
    @SALESMETHODTYPECODE tinyint = null output,
    @PRIMARYMEMBERSHIPID uniqueidentifier = null output,
    @PRIMARYMEMBERSHIPDESCRIPTION nvarchar(max) = null output,
    @ORDERHASRESOURCE bit = null output,
    @ORDERRESOURCETOTAL money = null output,
    @ORDERHASSTAFFRESOURCE bit = null output,
    @ORDERSTAFFRESOURCETOTAL money = null output,
    @PATRONHASMEMBERSHIP bit = null output,
    @LASTRECALCULATIONDATE datetime = null output,
    @PRICINGCODE tinyint = null output,
    @ORDERHASADDITIONALTICKETS bit = null output,
    @ORDERHASACTIVETICKETS bit = null output,
    @ORDERFLATRATETOTAL money = null output,
    @ORDERADDITIONALTICKETSTOTAL money = null output,
    @ORDERHASLOCATION bit = null output,
    @ORDERLOCATIONTOTAL money = null output,
    @ORDERHASMERCHANDISE bit = null output,
    @ORDERMERCHANDISETOTAL money = null output,
    @HASUNPOSTEDADJUSTMENT bit = null output,
    @PATRONHASMIDTERMUPGRADE bit = null output,
    @MEMBERSHIPID uniqueidentifier = null output,
    @HASBENEFITDISTRIBUTION bit = null output,
    @ORDERHASTICKETS bit = null output,
    @ORDERHASNONDAILYTICKETS bit = null output,
    @EMAILTICKETSAVAILABLE bit = null output
)
as
    set nocount on;

    set @DATALOADED = 0;

    select 
        @ORDERSTATUS = SALESORDER.STATUSCODE, 
        @TRANSACTIONDATE = SALESORDER.TRANSACTIONDATE,
        @LASTRECALCULATIONDATE  = SALESORDER.LASTRECALCULATIONDATE,
        @SALESMETHODTYPECODE = SALESORDER.SALESMETHODTYPECODE
    from dbo.SALESORDER
    where SALESORDER.ID = @ID

    -- Since this view form is used during payment add, we can't raise an error hear for incomplete reservations
    --if @SALESMETHODTYPECODE = 3 and @ORDERSTATUS <> 1
    --    raiserror('Only completed reservations can be viewed by this page.', 13, 1);

    declare @CHANGEAGENTID uniqueidentifier
    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output

    declare @CURRENTDATE datetime
    set @CURRENTDATE = getdate();

    if @ORDERSTATUS = 6
        exec dbo.USP_RESERVEDORDERRECALCULATE_UPDATE @ID, @CHANGEAGENTID

    else if @ORDERSTATUS = 7
    begin
        --Set delivery method if it has not been
        if not exists(select 1 from dbo.[SALESORDER] where [ID] = @ID and [DELIVERYMETHODID] is not null)
        begin
            declare @DEFAULTDELIVERYMETHODID uniqueidentifier
            select @DEFAULTDELIVERYMETHODID = [SALESMETHODDELIVERYMETHOD].[DELIVERYMETHODID]
            from dbo.[SALESMETHODDELIVERYMETHOD]
            inner join dbo.[SALESMETHOD]
                on [SALESMETHODDELIVERYMETHOD].[SALESMETHODID] = [SALESMETHOD].[ID]
            where 
                [SALESMETHOD].[TYPECODE] = (select [SALESMETHODTYPECODE] from dbo.[SALESORDER] where [ID] = @ID) and
                [SALESMETHODDELIVERYMETHOD].[ISDEFAULT] = 1

            update dbo.[SALESORDER]
            set 
                [DELIVERYMETHODID] = @DEFAULTDELIVERYMETHODID,
                [CHANGEDBYID] = @CHANGEAGENTID,
                [DATECHANGED] = @CURRENTDATE
            where [ID] = @ID
        end
    end

    select 
        @DATALOADED = 1,
        @ORDERNUMBER = SALESORDER.SEQUENCEID,
        @CONSTITUENTEXISTS = case when SALESORDER.CONSTITUENTID is null then 0 else 1 end,
        @CONSTITUENTID = SALESORDER.CONSTITUENTID,
        @CONSTITUENTNAME = dbo.UFN_CONSTITUENT_BUILDNAME(SALESORDER.CONSTITUENTID),
        @ORDERSTATUS = SALESORDER.STATUSCODE,
        @TRANSACTIONDATE = SALESORDER.TRANSACTIONDATE,
        @ORDERTOTAL = TOTALS.TOTAL,
        @ORDERITEMCOUNT = coalesce((select count(SALESORDERITEM.ID) from dbo.SALESORDERITEM where SALESORDERITEM.SALESORDERID = @ID and SALESORDERITEM.TYPECODE in (0,1,2,6,7,8,9,10,11)), 0),
        @ORDERTICKETTOTAL = dbo.UFN_SALESORDER_GETTICKETOTAL(@ID),
        @ORDERMEMBERSHIPTOTAL = dbo.UFN_SALESORDER_GETMEMBERSHIPTOTAL(@ID),
        @ORDERDONATIONTOTAL = dbo.UFN_SALESORDER_GETDONATIONTOTAL(@ID),
        @ORDERADJUSTMENTTOTAL = dbo.UFN_SALESORDER_GETORDERADJUSTMENTTOTAL(@ID),
        @ORDEREVENTREGISTRATIONTOTAL = dbo.UFN_SALESORDER_GETEVENTREGISTRATIONTOTAL(@ID),
        @ORDERHASTICKETS = coalesce((select 1 where exists(select ID from dbo.SALESORDERITEM where SALESORDERITEM.SALESORDERID = @ID and SALESORDERITEM.TYPECODE = 0)), 0),
        @ORDERHASMEMBERSHIP = coalesce((select 1 where exists(select ID from dbo.SALESORDERITEM where SALESORDERITEM.SALESORDERID = @ID and SALESORDERITEM.TYPECODE = 1)), 0),
        @ORDERHASDONATION = coalesce((select 1 where exists(select ID from dbo.SALESORDERITEM where SALESORDERITEM.SALESORDERID = @ID and SALESORDERITEM.TYPECODE = 2)), 0),
        @ORDERHASADJUSTMENT = coalesce((select 1 where exists(select ID from dbo.SALESORDERITEM where SALESORDERITEM.SALESORDERID = @ID and SALESORDERITEM.TYPECODE in (3,4,5))), 0),
        @ORDERHASEVENTREGISTRATION = coalesce((select 1 where exists(select ID from dbo.SALESORDERITEM where SALESORDERITEM.SALESORDERID = @ID and SALESORDERITEM.TYPECODE = 6)), 0),
        @REVENUEID = isnull([SALESORDER].[REVENUEID], '00000000-0000-0000-0000-000000000000'),
        @ISPOSTED = coalesce((select case when POSTSTATUSCODE = 2 then 1 else 0 end from dbo.FINANCIALTRANSACTION FT where FT.ID = SALESORDER.REVENUEID), 0),
        @DONOTPOST = coalesce((select case when POSTSTATUSCODE = 3 then 1 else 0 end from dbo.FINANCIALTRANSACTION FT where FT.ID = SALESORDER.REVENUEID), 0),
        @ORDERPAYMENTCOUNT = (select count(ID) from dbo.[SALESORDERPAYMENT] where [SALESORDERPAYMENT].[SALESORDERID] = @ID) + 
                    (select count(ID) from dbo.[RESERVATIONSECURITYDEPOSITPAYMENT] where [RESERVATIONSECURITYDEPOSITPAYMENT].[RESERVATIONID] = @ID),
        @ORDERBALANCE = TOTALS.BALANCE,
        @REFUNDSTATUS = SALESORDER.REFUNDSTATUS,
        @REFUNDTOTAL = TOTALS.REFUNDS,
        @ORDERHASRESOURCE = coalesce((select 1 where exists(select [ID] from dbo.SALESORDERITEM where SALESORDERITEM.SALESORDERID = @ID and SALESORDERITEM.TYPECODE in (8,9))), 0),
        @ORDERRESOURCETOTAL = dbo.UFN_RESERVATION_GETRESOURCETOTAL(@ID),
        @ORDERHASSTAFFRESOURCE = coalesce((select 1 where exists(select [ID] from dbo.SALESORDERITEM where SALESORDERITEM.SALESORDERID = @ID and SALESORDERITEM.TYPECODE in (10,11))), 0),
        @ORDERSTAFFRESOURCETOTAL = dbo.UFN_RESERVATION_GETSTAFFRESOURCETOTAL(@ID),
        @PRICINGCODE = coalesce((select top(1) PRICINGCODE from dbo.RESERVATION where ID = @ID), 0),
        @ORDERHASLOCATION = coalesce((select 1 where exists(select [ID] from dbo.SALESORDERITEM where SALESORDERITEM.SALESORDERID = @ID and SALESORDERITEM.TYPECODE = 7) ), 0),
        @ORDERHASMERCHANDISE = coalesce((select 1 where exists(select [ID] from dbo.SALESORDERITEM where SALESORDERITEM.SALESORDERID = @ID and SALESORDERITEM.TYPECODE = 14)), 0),
        @ORDERMERCHANDISETOTAL = dbo.UFN_SALESORDER_GETMERCHANDISETOTAL(@ID),
        @PATRONHASMIDTERMUPGRADE = dbo.UFN_SALESORDER_PATRONHASUPGRADE(@ID),
        @ORDERHASNONDAILYTICKETS = coalesce(
            (select 1 where exists(
                select SALESORDERITEM.ID
                from dbo.SALESORDERITEM
                    inner join dbo.SALESORDERITEMTICKET on SALESORDERITEMTICKET.ID = SALESORDERITEM.ID
                    inner join dbo.PROGRAM on PROGRAM.ID = SALESORDERITEMTICKET.PROGRAMID
                where SALESORDERITEM.SALESORDERID = @ID 
                    and SALESORDERITEM.TYPECODE = 0
                    and PROGRAM.ISDAILYADMISSION = 0
            ))
        , 0)
    from dbo.SALESORDER
    left outer join dbo.CONSTITUENT on 
        SALESORDER.CONSTITUENTID = CONSTITUENT.ID
    outer apply dbo.UFN_SALESORDER_TOTALS(@ID) TOTALS
    where
        SALESORDER.ID = @ID;

    if @DATALOADED = 1
    begin
        if @CONSTITUENTEXISTS = 1
        begin
            if exists
            (
                select [ID] from dbo.MEMBER
                where 
                    MEMBER.CONSTITUENTID = @CONSTITUENTID and 
                    MEMBER.ISDROPPED = 0
            )
                set @PATRONHASMEMBERSHIP = 1
            else
                set @PATRONHASMEMBERSHIP = 0

            select top(1)
                @PRIMARYMEMBERSHIPID = MEMBER.ID,
                @PRIMARYMEMBERSHIPDESCRIPTION = '' + MEMBERSHIPPROGRAM.NAME + ' - ' + MEMBERSHIPLEVEL.NAME,
                @MEMBERSHIPID = MEMBERSHIP.ID
            from dbo.MEMBER
                inner join dbo.MEMBERSHIP on MEMBER.MEMBERSHIPID = MEMBERSHIP.ID
                inner join dbo.MEMBERSHIPLEVEL on MEMBERSHIP.MEMBERSHIPLEVELID = MEMBERSHIPLEVEL.ID
                inner join dbo.MEMBERSHIPPROGRAM on MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID = MEMBERSHIPPROGRAM.ID
            where
                MEMBER.CONSTITUENTID = @CONSTITUENTID and
                MEMBER.ISDROPPED = 0 and
                @CURRENTDATE <= dateadd(month, MEMBERSHIPLEVEL.AFTEREXPIRATION, MEMBERSHIP.EXPIRATIONDATE) and
                MEMBERSHIP.STATUSCODE = 0
            order by
                MEMBERSHIPPROGRAM.ALLOWMULTIPLEMEMBERSHIPS asc
        end

        if @PRICINGCODE = 1
        begin
            set @ORDERHASADDITIONALTICKETS = 0

            -- Find out if there are items outside the flat rate
            -- and get their total if they exist
            if exists (select 1 from dbo.SALESORDERITEM where PRICINGSTRUCTURECODE <> 1 and TYPECODE = 0 and SALESORDERID = @ID)
            begin
                set @ORDERHASADDITIONALTICKETS = 1
                declare @TICKETFEES money;
                declare @TICKETDISCOUNTS money;

                select @ORDERADDITIONALTICKETSTOTAL = sum(TOTAL)
                from dbo.SALESORDERITEM
                where PRICINGSTRUCTURECODE <> 1 and TYPECODE = 0 and SALESORDERID = @ID

                select @TICKETFEES = coalesce(sum([SALESORDERITEM].[TOTAL]), 0)
                from dbo.[SALESORDERITEM]
                    inner join dbo.[SALESORDERITEMFEE] on [SALESORDERITEM].[ID] = [SALESORDERITEMFEE].[ID]
                where 
                    [SALESORDERITEM].[SALESORDERID] = @ID and 
                    [SALESORDERITEMFEE].[APPLIESTOCODE] = 1 and 
                    [SALESORDERITEMFEE].[SALESORDERITEMID] in 
                        (select [ID] from dbo.[SALESORDERITEM]
                        where [SALESORDERITEM].[SALESORDERID] = @ID and 
                        [SALESORDERITEM].[TYPECODE] = 0 and
                        [SALESORDERITEM].[PRICINGSTRUCTURECODE] <> 1)

                select @TICKETDISCOUNTS = coalesce(sum([SALESORDERITEMITEMDISCOUNT].[AMOUNT]), 0)
                from dbo.[SALESORDERITEMITEMDISCOUNT]
                    inner join [SALESORDERITEM] on [SALESORDERITEMITEMDISCOUNT].[SALESORDERITEMID] = [SALESORDERITEM].[ID]
                where
                    [SALESORDERITEM].[TYPECODE] = 0 and
                    [SALESORDERITEM].[SALESORDERID] = @ID and
                    [SALESORDERITEM].[PRICINGSTRUCTURECODE] <> 1

                set @ORDERADDITIONALTICKETSTOTAL = (@ORDERADDITIONALTICKETSTOTAL + @TICKETFEES) - @TICKETDISCOUNTS;
            end
            else
            begin                            
                set @ORDERADDITIONALTICKETSTOTAL = 0
            end

            -- Get the flat rate price for tickets
            select
                @ORDERFLATRATETOTAL = coalesce(sum(AMOUNT), 0.0)
            from dbo.RESERVATIONRATESCALEAPPLICATION 
            where RESERVATIONRATESCALEID = @ID and TYPECODE = 0
        end
        else
        begin
            set @ORDERHASADDITIONALTICKETS = 0
        end

        if exists(select * from dbo.SALESORDERITEM inner join dbo.TICKET on SALESORDERITEM.ID = TICKET.SALESORDERITEMTICKETID where SALESORDERITEM.SALESORDERID = @ID and TICKET.STATUSCODE = 0)
            set @ORDERHASACTIVETICKETS = 1
        else
            set @ORDERHASACTIVETICKETS = 0

        if @ORDERHASLOCATION = 1
        begin
            select 
                @ORDERLOCATIONTOTAL = sum(TOTAL)
            from dbo.SALESORDERITEM
            where 
                SALESORDERID = @ID and
                TYPECODE = 7
        end

        if @ISPOSTED = 1 and exists (select 1 from dbo.ADJUSTMENT where REVENUEID = @REVENUEID and POSTSTATUSCODE = 1)
            set @HASUNPOSTEDADJUSTMENT = 1;
        else
            set @HASUNPOSTEDADJUSTMENT = 0;


        -- MDC - Bug 207553 copied from the revenue transaction page expression form.
        if exists
        (
            select 
                JE.ID 
            from 
                dbo.JOURNALENTRY as JE
            inner join 
                dbo.JOURNALENTRY_EXT EXT on JE.ID = EXT.ID and EXT.TABLENAMECODE = 5
            inner join 
                dbo.FINANCIALTRANSACTIONLINEITEM as LI on LI.ID = JE.FINANCIALTRANSACTIONLINEITEMID
            inner join 
                dbo.REVENUEBENEFIT_EXT on LI.ID = REVENUEBENEFIT_EXT.ID
            where 
                EXT.BENEFITTYPECODE = 1 and LI.FINANCIALTRANSACTIONID = @REVENUEID and LI.DELETEDON is null
        )
            set @HASBENEFITDISTRIBUTION = 1                        

        -- check if all tickets in this order have been applied to a membership. If yes, set the refund status to hide the refund task
        if exists 
        (
            select 
                1 
            from 
                dbo.TICKET 
            inner join 
                dbo.SALESORDERITEMTICKET on TICKET.SALESORDERITEMTICKETID = SALESORDERITEMTICKET.ID
            inner join 
                dbo.SALESORDERITEM on SALESORDERITEMTICKET.ID = SALESORDERITEM.ID
            where 
                SALESORDERITEM.SALESORDERID = @ID
                and TICKET.APPLIEDTOMEMBERSHIPSALESORDERID is not null
                and @REFUNDSTATUS <> 2
                and not exists 
                (
                    select 
                        1 
                    from 
                        dbo.TICKET 
                    inner join 
                        dbo.SALESORDERITEMTICKET on TICKET.SALESORDERITEMTICKETID = SALESORDERITEMTICKET.ID
                    inner join 
                        dbo.SALESORDERITEM on SALESORDERITEMTICKET.ID = SALESORDERITEM.ID
                    where 
                        SALESORDERITEM.SALESORDERID = @ID
                        and SALESORDERITEM.TYPECODE  = 0 
                        and TICKET.APPLIEDTOMEMBERSHIPSALESORDERID is null
                )
        )
            set @REFUNDSTATUS = 2;

    end

    set @EMAILTICKETSAVAILABLE = 0
    select @EMAILTICKETSAVAILABLE = 1
    from dbo.SALESORDER
        inner join dbo.DELIVERYMETHOD on DELIVERYMETHOD.ID = SALESORDER.DELIVERYMETHODID 
        inner join dbo.SALESORDERITEM on SALESORDERITEM.SALESORDERID = SALESORDER.ID
        inner join dbo.TICKET on TICKET.SALESORDERITEMTICKETID = SALESORDERITEM.ID
    where DELIVERYMETHOD.PRINTCODE = 2
        and DELIVERYMETHOD.ISACTIVE = 1
        and TICKET.STATUSCODE in (0,1)
        and SALESORDER.ID = @ID

return 0;