UFN_SALESORDER_GETSALESDOCUMENTWORKSTATIONPRINTERS

Returns sales document workstation printers for a workstation, order, and programs

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@WORKSTATIONID uniqueidentifier IN
@TEMPLATETYPE tinyint IN
@ORDERID uniqueidentifier IN
@PROGRAMID uniqueidentifier IN
@IGNOREDELIVERYMETHOD bit IN

Definition

Copy


create function dbo.UFN_SALESORDER_GETSALESDOCUMENTWORKSTATIONPRINTERS
(
    @WORKSTATIONID uniqueidentifier,
    @TEMPLATETYPE tinyint,
    @ORDERID uniqueidentifier,    
    @PROGRAMID uniqueidentifier,
    @IGNOREDELIVERYMETHOD bit = 0
)
returns @PRINTERS table
(
    REPORTCATALOGID uniqueidentifier,
    PRINTERNAME nvarchar(max)
)
as
begin
    declare @SALESMETHODTYPECODE integer

    select @SALESMETHODTYPECODE=SALESMETHODTYPECODE from dbo.SALESORDER where ID = @ORDERID;

    declare @AVAILABLEDOCUMENTS as TABLE (NUMBERID int identity, DOCUMENTID uniqueidentifier, PRINTERLISTID uniqueidentifier)

    if @TEMPLATETYPE = 0 and @PROGRAMID is not null
    begin
        if @SALESMETHODTYPECODE in (0,1,2)     --advance/daily/online sales

        begin
            insert into @AVAILABLEDOCUMENTS
            (
                DOCUMENTID,
                PRINTERLISTID
            )
            select
                DOCUMENT.ID,
                DOCUMENT.PRINTERLISTID                
            from dbo.DOCUMENT
            inner join dbo.PROGRAMDOCUMENT on
                DOCUMENT.ID = PROGRAMDOCUMENT.DOCUMENTID                        
            inner join dbo.DOCUMENTPRINTINGRULE on
                DOCUMENT.ID = DOCUMENTPRINTINGRULE.DOCUMENTID
            inner join dbo.DOCUMENTPRINTINGRULESALESMETHOD on
                DOCUMENTPRINTINGRULE.ID = DOCUMENTPRINTINGRULESALESMETHOD.DOCUMENTPRINTINGRULEID
            inner join dbo.SALESORDER on
                DOCUMENTPRINTINGRULE.DELIVERYMETHODID = SALESORDER.DELIVERYMETHODID or
                @IGNOREDELIVERYMETHOD = 1
            inner join dbo.SALESMETHOD on
                SALESMETHOD.TYPECODE = SALESORDER.SALESMETHODTYPECODE and
                DOCUMENTPRINTINGRULESALESMETHOD.SALESMETHODID = SALESMETHOD.ID    
            where                     
                SALESORDER.ID = @ORDERID and
                PROGRAMDOCUMENT.PROGRAMID = @PROGRAMID and 
                DOCUMENT.TYPECODE = @TEMPLATETYPE and
                DOCUMENT.ISACTIVE = 1 and
                DOCUMENT.PRINTERLISTID is not null
            order by
                PROGRAMDOCUMENT.SEQUENCE                
        end
    end                        
    else
        if @TEMPLATETYPE = 5 or @TEMPLATETYPE = 6
        --refund templates

        begin
            insert into @AVAILABLEDOCUMENTS
            (
                DOCUMENTID,
                PRINTERLISTID
            )
            select
                DOCUMENT.ID,
                DOCUMENT.PRINTERLISTID
            from
                dbo.DOCUMENT
            where                                        
                DOCUMENT.TYPECODE = @TEMPLATETYPE and
                DOCUMENT.ISACTIVE = 1 and
                DOCUMENT.PRINTERLISTID is not null and
                (
                    (
                        @SALESMETHODTYPECODE = 0 or   --daily sales

                        @SALESMETHODTYPECODE = 1 or    --advance sales

                        @SALESMETHODTYPECODE = 2 or        --online sales

                        (
                            @SALESMETHODTYPECODE = 3 and   --group sales

                            DOCUMENT.PRINTFORGROUPSALES = 1
                        )
                        or @SALESMETHODTYPECODE is null
                    ) or
                    @IGNOREDELIVERYMETHOD = 1
                )
            order by
                DOCUMENT.SEQUENCE                                        
        end
        else
        begin
            if @SALESMETHODTYPECODE in (0,1,2)     --advance/daily/online sales

            begin
                insert into @AVAILABLEDOCUMENTS
                    (DOCUMENTID,
                    PRINTERLISTID)
                select
                    DOCUMENT.ID,
                    DOCUMENT.PRINTERLISTID                                        
                from
                    dbo.DOCUMENT inner join dbo.DOCUMENTPRINTINGRULE on
                        DOCUMENT.ID = DOCUMENTPRINTINGRULE.DOCUMENTID
                    inner join dbo.DOCUMENTPRINTINGRULESALESMETHOD on
                        DOCUMENTPRINTINGRULE.ID = DOCUMENTPRINTINGRULESALESMETHOD.DOCUMENTPRINTINGRULEID
                    inner join dbo.SALESORDER on
                        DOCUMENTPRINTINGRULE.DELIVERYMETHODID = SALESORDER.DELIVERYMETHODID or
                        @IGNOREDELIVERYMETHOD = 1
                    inner join dbo.SALESMETHOD on
                        SALESMETHOD.TYPECODE = SALESORDER.SALESMETHODTYPECODE and
                        DOCUMENTPRINTINGRULESALESMETHOD.SALESMETHODID = SALESMETHOD.ID    
                where                     
                    SALESORDER.ID = @ORDERID and
                    DOCUMENT.TYPECODE = @TEMPLATETYPE and
                    DOCUMENT.ISACTIVE = 1 and
                    DOCUMENT.PRINTERLISTID is not null
                order by
                    DOCUMENT.SEQUENCE
            end
            else
                if @SALESMETHODTYPECODE = 3
                begin
                    insert into @AVAILABLEDOCUMENTS
                        (DOCUMENTID,
                        PRINTERLISTID)
                    select
                        DOCUMENT.ID,
                        DOCUMENT.PRINTERLISTID                                        
                    from
                        dbo.DOCUMENT
                    where
                        DOCUMENT.TYPECODE = @TEMPLATETYPE and
                        (DOCUMENT.PRINTFORGROUPSALES = 1 or
                        @IGNOREDELIVERYMETHOD = 1) and                                                    
                        DOCUMENT.ISACTIVE = 1 and
                        DOCUMENT.PRINTERLISTID is not null
                    order by
                        DOCUMENT.SEQUENCE                                                    
                end                    
        end            


    insert into @PRINTERS
    select
        DOCUMENT.REPORTCATALOGID,
        PRINTERLISTITEM.PRINTERNAME    
    from
        @AVAILABLEDOCUMENTS AVAILABLEDOCUMENTS inner join dbo.DOCUMENT on
            AVAILABLEDOCUMENTS.DOCUMENTID = DOCUMENT.ID
        inner join dbo.PRINTERLIST on
            AVAILABLEDOCUMENTS.PRINTERLISTID = PRINTERLIST.ID
        inner join dbo.PRINTERLISTITEM on
            PRINTERLIST.ID = PRINTERLISTITEM.PRINTERLISTID
        inner join dbo.WORKSTATIONPRINTER on
            PRINTERLISTITEM.PRINTERNAME = WORKSTATIONPRINTER.PRINTERNAME
    where
        WORKSTATIONPRINTER.WORKSTATIONID = @WORKSTATIONID
    order by
        AVAILABLEDOCUMENTS.NUMBERID,
        WORKSTATIONPRINTER.SEQUENCE

    return;
end