USP_REPORT_TAXES

Parameters

Parameter Parameter Type Mode Description
@SALESMETHODID uniqueidentifier IN
@TAXID uniqueidentifier IN
@TAXSELECTIONID uniqueidentifier IN
@FROMDATE date IN
@TODATE date IN

Definition

Copy

create procedure dbo.USP_REPORT_TAXES
(
    @SALESMETHODID uniqueidentifier = null,
    @TAXID uniqueidentifier = null,
    @TAXSELECTIONID uniqueidentifier = null,
    @FROMDATE date = null,
    @TODATE date = null
)
as 
    set nocount on;

    declare @SALESMETHODTYPECODE tinyint = (select TYPECODE from dbo.SALESMETHOD where ID = @SALESMETHODID);

    --Optimizing in case using selection
    declare @TAXIDS table (
        ID uniqueidentifier
    )

    if @TAXID is not null
        insert @TAXIDS
        values (@TAXID)
    else if @TAXSELECTIONID is not null
        insert @TAXIDS
        select [ID] 
        from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@TAXSELECTIONID)
    else
        insert @TAXIDS
        select [ID] 
        from dbo.TAX;

    with SALES_CTE as (
        select 
            SALESORDERITEMTAX.TAXID,
            sum(SOI.PRICE) TOTAL
        from
            dbo.UFN_SALESORDER_BETWEENDATES(@FROMDATE, @TODATE) as FILTEREDSALESORDERS
        inner join
            dbo.SALESORDER SO on SO.ID = FILTEREDSALESORDERS.ID
        inner join
            dbo.SALESORDERITEM SOI on SO.ID = SOI.SALESORDERID
        inner join (
            select distinct 
                TAXITEMID, 
                TAXID 
            from dbo.SALESORDERITEMTAX
            inner join @TAXIDS [TAXIDS] on
            SALESORDERITEMTAX.TAXID = [TAXIDS].ID
        ) SALESORDERITEMTAX on SOI.ID = SALESORDERITEMTAX.TAXITEMID
        where
            (@SALESMETHODTYPECODE is null or SO.SALESMETHODTYPECODE = @SALESMETHODTYPECODE)
            and SO.STATUSCODE in (1,3,4)
        group by
            SALESORDERITEMTAX.TAXID
    ),
    REFUNDS_CTE as (
        select
            SALESORDERITEMTAX.TAXID,
            sum((LI.QUANTITY * LI.UNITVALUE) - EXT.DISCOUNTS) as TOTAL
        from
            dbo.FINANCIALTRANSACTIONLINEITEM as LI
        inner join
            dbo.CREDITITEM_EXT as EXT on EXT.ID = LI.ID
        inner join (
            select distinct 
                TAXITEMID, 
                TAXID 
            from dbo.SALESORDERITEMTAX
            inner join @TAXIDS [TAXIDS] on
            SALESORDERITEMTAX.TAXID = [TAXIDS].ID
        ) SALESORDERITEMTAX on EXT.SALESORDERITEMID = SALESORDERITEMTAX.TAXITEMID
        inner join
            dbo.SALESORDERITEM on SALESORDERITEMTAX.TAXITEMID = SALESORDERITEM.ID
        inner join
            dbo.SALESORDER on SALESORDERITEM.SALESORDERID = SALESORDER.ID
        inner join
            dbo.FINANCIALTRANSACTION on LI.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
        where
            (@SALESMETHODTYPECODE is null or SALESORDER.SALESMETHODTYPECODE = @SALESMETHODTYPECODE) and
            (@FROMDATE is null or FINANCIALTRANSACTION.CALCULATEDDATE >= @FROMDATE) and
            (@TODATE is null or FINANCIALTRANSACTION.CALCULATEDDATE <= @TODATE)
        group by
            SALESORDERITEMTAX.TAXID
    )
    select 
        TAX.NAME as TAXNAME,
        isnull(SALES.TOTAL,0) - isnull(REFUNDS.TOTAL,0) TAXTOTAL,
        TAX.TOTALTAX as TAXAMOUNT
    from dbo.TAX
    left join SALES_CTE SALES
        on TAX.ID = SALES.TAXID
    left join REFUNDS_CTE REFUNDS
        on TAX.ID = REFUNDS.TAXID
    where isnull(SALES.TOTAL, REFUNDS.TOTAL) is not null
    order by TAX.NAME
    option (recompile);

    return 0;