USP_DATAFORMTEMPLATE_VIEW_SALESORDERCOMPLETEANDPRINTINFORMATION

The load procedure used by the view dataform template "Sales Order Complete and Print Information View Data Form"

Parameters

Parameter Parameter Type Mode Description
@ID nvarchar(max) 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.
@ORDERSTATUS tinyint INOUT Order status
@PRINTCODE tinyint INOUT Print code
@WORKSTATIONID uniqueidentifier INOUT WORKSTATIONID
@OPENDRAWER bit INOUT Open Drawer
@CASHDRAWERPRINTER nvarchar(255) INOUT Receipt printer
@CASHDRAWEROPENCOMMAND nvarchar(50) INOUT Printer command
@PRINTERS xml INOUT Printers
@CREDITCARDPAYMENTMETHODDETAILS xml INOUT Credit card payment method details
@PROGRAMS xml INOUT Programs
@PROGRAMWORKSTATIONPRINTERS xml INOUT Program workstation printers
@WORKSTATIONPRINTERS xml INOUT Workstation printers
@ISZERODOLLARORDER bit INOUT ISZERODOLLARORDER

Definition

Copy


CREATE procedure dbo.USP_DATAFORMTEMPLATE_VIEW_SALESORDERCOMPLETEANDPRINTINFORMATION
(
    @ID nvarchar(max),
    @DATALOADED bit = 0 output,
    @ORDERSTATUS tinyint = null output,
    @PRINTCODE tinyint = null output,
    @WORKSTATIONID uniqueidentifier = null output,
    @OPENDRAWER bit = null output,
    @CASHDRAWERPRINTER nvarchar(255) = null output,
    @CASHDRAWEROPENCOMMAND nvarchar(50) = null output,
    @PRINTERS xml = null output,
    @CREDITCARDPAYMENTMETHODDETAILS xml = null output,
    @PROGRAMS xml = null output,
    @PROGRAMWORKSTATIONPRINTERS xml = null output,
    @WORKSTATIONPRINTERS xml = null output,
    @ISZERODOLLARORDER bit = null output
)
as
    set nocount on;

    set @DATALOADED = 0;

    declare @SALESORDERID uniqueidentifier
    declare @MACHINENAME nvarchar(255)

    -- Extract ID and machine name

    declare @SEPARATOR int
    set @SEPARATOR = charindex ('|', @ID, 0)
    set @SALESORDERID = convert(uniqueidentifier, left(@ID, @SEPARATOR - 1))
    set @MACHINENAME = right(@ID, len(@ID) - @SEPARATOR)

    select 
        @DATALOADED = 1,
        @ORDERSTATUS = SALESORDER.STATUSCODE,
        @PRINTCODE = coalesce(DELIVERYMETHOD.PRINTCODE,0),
        @ISZERODOLLARORDER = case when AMOUNT = 0 then 1 else 0 end
    from dbo.SALESORDER
    left join dbo.DELIVERYMETHOD on 
        SALESORDER.DELIVERYMETHODID = DELIVERYMETHOD.ID
    where SALESORDER.ID = @SALESORDERID

    if @DATALOADED = 1
    begin
        if @ORDERSTATUS = 1
        begin
            -- Even though MACHINENAME is unique, we should try to maintain what search does so nothing changes

            set @MACHINENAME = coalesce(@MACHINENAME,'') + '%' ;
            select top(1)
                @WORKSTATIONID = ID 
            from dbo.WORKSTATION where (MACHINENAME like @MACHINENAME) order by NAME asc

            if @WORKSTATIONID is not null
            begin
                set @OPENDRAWER = 0

                if exists
                (
                    select 
                        PAYMENTMETHOD.PAYMENTMETHODID
                    from
                    (
                        select
                            case 
                                when REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = 0 then
                                    'CF693144-0204-4FFD-90EF-335E509F9C69'
                                when REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = 1 then
                                    '49BCEDF6-213C-4734-896B-BB183B487D22'
                                when REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = 2 then
                                    '3D8F2B59-3647-48F0-831A-ABC527C3B7AB'
                                when REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = 10 then
                                    OTHERPAYMENTMETHODDETAIL.OTHERPAYMENTMETHODCODEID
                            end as PAYMENTMETHODID
                        from dbo.SALESORDER 
                        inner join dbo.SALESORDERPAYMENT on
                            SALESORDER.ID = SALESORDERPAYMENT.SALESORDERID
                        inner join dbo.REVENUE 
                            on SALESORDERPAYMENT.PAYMENTID = REVENUE.ID
                        inner join dbo.REVENUEPAYMENTMETHOD on
                            REVENUE.ID = REVENUEPAYMENTMETHOD.REVENUEID
                        left outer join dbo.OTHERPAYMENTMETHODDETAIL on
                            REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = 10 and
                            OTHERPAYMENTMETHODDETAIL.ID = REVENUEPAYMENTMETHOD.ID
                        where
                            SALESORDER.ID = @SALESORDERID
                    ) PAYMENTMETHOD
                    inner join
                    (
                        select
                            case 
                                when WORKSTATIONCASHDRAWERPAYMENTMETHOD.PAYMENTTYPECODE = 0 then
                                    'CF693144-0204-4FFD-90EF-335E509F9C69'
                                when WORKSTATIONCASHDRAWERPAYMENTMETHOD.PAYMENTTYPECODE = 1 then
                                    '49BCEDF6-213C-4734-896B-BB183B487D22'
                                when WORKSTATIONCASHDRAWERPAYMENTMETHOD.PAYMENTTYPECODE = 2 then
                                    '3D8F2B59-3647-48F0-831A-ABC527C3B7AB'
                                when WORKSTATIONCASHDRAWERPAYMENTMETHOD.PAYMENTTYPECODE = 10 then
                                    WORKSTATIONCASHDRAWERPAYMENTMETHOD.OTHERPAYMENTMETHODCODEID
                            end as PAYMENTMETHODID
                        from dbo.WORKSTATIONCASHDRAWERPAYMENTMETHOD
                        where
                            WORKSTATIONCASHDRAWERPAYMENTMETHOD.WORKSTATIONID = @WORKSTATIONID
                    ) WORKSTATIONPAYMENTMETHOD on
                        PAYMENTMETHOD.PAYMENTMETHODID = WORKSTATIONPAYMENTMETHOD.PAYMENTMETHODID
                )    
                    set @OPENDRAWER = 1
                else
                    set @OPENDRAWER = 0

                if @OPENDRAWER = 1
                begin
                    select
                       @CASHDRAWERPRINTER = coalesce(PRINTERNAME,''),
                       @CASHDRAWEROPENCOMMAND = CASHDRAWEROPENCOMMAND           
                    from dbo.WORKSTATION 
                    left outer join dbo.WORKSTATIONPRINTER on
                        WORKSTATION.CASHDRAWERPRINTERID = WORKSTATIONPRINTER.ID
                    where WORKSTATION.ID = @WORKSTATIONID

                end

                if @PRINTCODE = 1
                begin
                    set @PRINTERS = 
                    (
                        select WORKSTATIONPRINTER.[PRINTERNAME]
                        from dbo.WORKSTATIONPRINTER
                        where WORKSTATIONID = @WORKSTATIONID
                        order by SEQUENCE
                        for xml raw('ITEM'),type,elements,root('PRINTERS'),binary base64
                    )

                    set @CREDITCARDPAYMENTMETHODDETAILS = 
                    (
                        select
                            T.CREDITCARDPAYMENTMETHODDETAILID as CREDITCARDPAYMENTMETHODDETAILID
                        from
                        (
                            select 
                                CREDITCARDPAYMENTMETHODDETAIL.ID as CREDITCARDPAYMENTMETHODDETAILID
                            from dbo.SALESORDER 
                            inner join dbo.SALESORDERPAYMENT on 
                                SALESORDER.ID = SALESORDERPAYMENT.SALESORDERID
                            inner join dbo.REVENUE on 
                                SALESORDERPAYMENT.PAYMENTID = REVENUE.ID
                            inner join dbo.REVENUEPAYMENTMETHOD    on 
                                REVENUE.ID = REVENUEPAYMENTMETHOD.REVENUEID
                            inner join dbo.CREDITCARDPAYMENTMETHODDETAIL on
                                REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = 2 and
                                CREDITCARDPAYMENTMETHODDETAIL.ID = REVENUEPAYMENTMETHOD.ID
                            where SALESORDER.ID = @SALESORDERID                            

                            union all

                            select
                                CREDITCARDPAYMENTMETHODDETAIL.ID as CREDITCARDPAYMENTMETHODDETAILID
                            from dbo.SALESORDER 
                            inner join dbo.RESERVATIONSECURITYDEPOSITPAYMENT on 
                                SALESORDER.ID = RESERVATIONSECURITYDEPOSITPAYMENT.RESERVATIONID
                            inner join dbo.REVENUE on 
                                RESERVATIONSECURITYDEPOSITPAYMENT.PAYMENTID = REVENUE.ID
                            inner join dbo.REVENUEPAYMENTMETHOD on 
                                REVENUE.ID = REVENUEPAYMENTMETHOD.REVENUEID
                            inner join dbo.CREDITCARDPAYMENTMETHODDETAIL on
                                REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = 2 and
                                CREDITCARDPAYMENTMETHODDETAIL.ID = REVENUEPAYMENTMETHOD.ID
                            where SALESORDER.ID = @SALESORDERID    
                        ) as T
                        for xml raw('ITEM'),type,elements,root('CREDITCARDPAYMENTMETHODDETAILS'),binary base64
                    )

                    declare @PROGRAMSTABLE table
                    (
                        ID uniqueidentifier,
                        PROGRAMNAME nvarchar(100)
                    )
                    insert into @PROGRAMSTABLE
                    select distinct
                        PROGRAM.ID as PROGRAMID,
                        PROGRAM.NAME as PROGRAMNAME
                    from dbo.SALESORDERITEMTICKET SOIT
                    inner join dbo.SALESORDERITEM SOI on SOI.ID = SOIT.ID
                    left join dbo.EVENT on SOIT.EVENTID = EVENT.ID
                    inner join dbo.PROGRAM on 
                        EVENT.PROGRAMID = PROGRAM.ID or
                        SOIT.PROGRAMID = PROGRAM.ID
                    where SOI.SALESORDERID = @SALESORDERID

                    set @PROGRAMS =
                    (
                        select
                            ID as PROGRAMID,
                            PROGRAMNAME as PROGRAMNAME
                        from @PROGRAMSTABLE
                        for xml raw('ITEM'),type,elements,root('PROGRAMS'),binary base64
                    )

                    set @PROGRAMWORKSTATIONPRINTERS =
                    (
                        select
                            PT.ID as PROGRAMID,
                            WP.REPORTCATALOGID as REPORTCATALOGID,
                            WP.PRINTERNAME as PRINTERNAME
                        from @PROGRAMSTABLE as PT
                        cross apply dbo.UFN_SALESORDER_GETSALESDOCUMENTWORKSTATIONPRINTERS
                            (@WORKSTATIONID, 0, @SALESORDERID, PT.ID, 0) as WP
                        for xml raw('ITEM'),type,elements,root('PROGRAMWORKSTATIONPRINTERS'),binary base64
                    )

                    set @WORKSTATIONPRINTERS = 
                    (
                        select
                            T.TYPE as TYPE,
                            T.REPORTCATALOGID as REPORTCATALOGID,
                            T.PRINTERNAME as PRINTERNAME,
                            T.PRINTFORZEROBALANCEORDER
                        from
                        (
                            select
                                1 as TYPE, -- ItemizedReceipt

                                WP.REPORTCATALOGID as REPORTCATALOGID,
                                WP.PRINTERNAME as PRINTERNAME,
                                WP.PRINTFORZEROBALANCEORDER as PRINTFORZEROBALANCEORDER
                            from dbo.UFN_SALESORDER_GETSALESDOCUMENTWORKSTATIONPRINTERS_2
                                (@WORKSTATIONID, 1, @SALESORDERID, null, 0) as WP

                            union all

                            select
                                2 as TYPE, -- CreditCardReceipt

                                WP.REPORTCATALOGID as REPORTCATALOGID,
                                WP.PRINTERNAME as PRINTERNAME,
                                1 as PRINTFORZEROBALANCEORDER
                            from dbo.UFN_SALESORDER_GETSALESDOCUMENTWORKSTATIONPRINTERS
                                (@WORKSTATIONID, 2, @SALESORDERID, null, 0) as WP

                            union all

                            select
                                3 as TYPE, -- MailingHeader

                                WP.REPORTCATALOGID as REPORTCATALOGID,
                                WP.PRINTERNAME as PRINTERNAME,
                                1 as PRINTFORZEROBALANCEORDER
                            from dbo.UFN_SALESORDER_GETSALESDOCUMENTWORKSTATIONPRINTERS
                                (@WORKSTATIONID, 3, @SALESORDERID, null, 0) as WP

                            union all

                            select
                                4 as TYPE, -- WillCallHeader

                                WP.REPORTCATALOGID as REPORTCATALOGID,
                                WP.PRINTERNAME as PRINTERNAME,
                                1 as PRINTFORZEROBALANCEORDER
                            from dbo.UFN_SALESORDER_GETSALESDOCUMENTWORKSTATIONPRINTERS
                                (@WORKSTATIONID, 4, @SALESORDERID, null, 0) as WP

                        ) as T
                        for xml raw('ITEM'),type,elements,root('WORKSTATIONPRINTERS'),binary base64
                    )                    
                end -- PRINTCODE = 1

            end -- WORKSTATION IS NOT NULL

        end -- ORDERSTATUS = 1

    end -- DATALOADED = 1

    return 0;