UFN_CREDIT_GETTAXES

Returns the tax to sales order item mapping for a given sales order id

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@SALESORDERID uniqueidentifier IN

Definition

Copy


CREATE function dbo.UFN_CREDIT_GETTAXES
(
    @SALESORDERID uniqueidentifier
) returns @TAXES table
(
    ITEMID uniqueidentifier,
    TAXID uniqueidentifier,
    TAXABLEAMOUNT money,
    REFUNDQUANTITY integer,
    MAXQUANTITY integer
)
begin
    declare @ORDERDISCOUNTTOTAL money;
    select @ORDERDISCOUNTTOTAL = coalesce(sum([SALESORDERITEM].[TOTAL]),0)
    from dbo.[SALESORDERITEM]
    where
        [SALESORDERITEM].[SALESORDERID] = @SALESORDERID and
        [SALESORDERITEM].[TYPECODE] = 5;  -- Discount


    --Total item amount that is discountable

    declare @TOTALDISCOUNTABLE money;
    select @TOTALDISCOUNTABLE = coalesce(sum([SALESORDERITEM].[TOTAL]),0)
    from dbo.[SALESORDERITEM]
    where 
        [SALESORDERITEM].[SALESORDERID] = @SALESORDERID and
        [SALESORDERITEM].[TYPECODE] = 0;  -- Ticket


    declare @CALCULATEDFIELDS table (
        [SALESORDERITEMID] uniqueidentifier,
        [ITEMDISCOUNTS] money,
        [ORDERDISCOUNTS] money,
        [REFUNDS] money,
        [QUANTITY] integer
    );

    insert into @CALCULATEDFIELDS ([SALESORDERITEMID],[ITEMDISCOUNTS],[ORDERDISCOUNTS],[REFUNDS],[QUANTITY])
    select V1.ID, sum(ITEMDISCOUNTS), sum(ORDERDISCOUNTS), sum(REFUNDS), max(QUANTITY)
    from (
        select 
            [SALESORDERITEM].[ID],
            (
                select coalesce(sum([AMOUNT]),0.0)
                from dbo.[SALESORDERITEMITEMDISCOUNT]
                where [SALESORDERITEMID] = [SALESORDERITEM].[ID]
            ) as [ITEMDISCOUNTS],
            coalesce([SALESORDERITEMORDERDISCOUNTDETAIL].[AMOUNT], 0) as ORDERDISCOUNTS,
            (
                select coalesce(sum((LI.QUANTITY * LI.UNITVALUE) - EXT.DISCOUNTS),0.0)
                from dbo.FINANCIALTRANSACTIONLINEITEM as LI
                inner join dbo.CREDITITEM_EXT as EXT on EXT.ID = LI.ID
                where EXT.SALESORDERITEMID = [SALESORDERITEM].[ID]
            ) as [REFUNDS],
            case SALESORDERITEMFEE.APPLIESTOCODE
                when 1 then (  -- Item

                    select SOI.QUANTITY - isnull(
                        (
                            select sum(LI.QUANTITY)
                            from dbo.FINANCIALTRANSACTIONLINEITEM as LI
                            inner join dbo.CREDITITEM_EXT as EXT on EXT.ID = LI.ID
                            where EXT.SALESORDERITEMID = SOI.ID
                        ), 0)
                    from dbo.SALESORDERITEM as SOI
                    where SOI.ID = SALESORDERITEMFEE.SALESORDERITEMID
                )
                else
                    [SALESORDERITEM].[QUANTITY] - coalesce(
                        (
                            select sum(LI.QUANTITY)
                            from dbo.FINANCIALTRANSACTIONLINEITEM as LI
                            inner join dbo.CREDITITEM_EXT as EXT on EXT.ID = LI.ID
                            where EXT.SALESORDERITEMID = SALESORDERITEM.ID
                        ), 0)
            end as [QUANTITY]
        from [SALESORDERITEM]
        left join [SALESORDERITEMORDERDISCOUNTDETAIL] on [SALESORDERITEMORDERDISCOUNTDETAIL].[SALESORDERITEMID] = [SALESORDERITEM].[ID]
        left outer join dbo.SALESORDERITEMFEE on SALESORDERITEMFEE.ID = SALESORDERITEM.ID
        where [SALESORDERITEM].[SALESORDERID] = @SALESORDERID
    ) V1
    group by ID;

    insert into @TAXES (ITEMID,TAXID,TAXABLEAMOUNT,REFUNDQUANTITY,MAXQUANTITY)
    select 
        case
            when [SALESORDERITEM].[TYPECODE] = 3 and [SALESORDERITEMFEE].[APPLIESTOCODE] = 1 then
                [SALESORDERITEMFEE].[ID]
            else
                [SALESORDERITEMTAX].[SALESORDERITEMID]
        end [SALESORDERITEMID], 
        [TAXITEMID], 
        [SALESORDERITEM].[TOTAL] - [CALCULATEDFIELDS].[ITEMDISCOUNTS] - [CALCULATEDFIELDS].[REFUNDS] - [CALCULATEDFIELDS].[ORDERDISCOUNTS],
        0,
        [CALCULATEDFIELDS].[QUANTITY]
    from dbo.[SALESORDERITEMTAX]
    inner join dbo.[SALESORDERITEM] on [SALESORDERITEM].[ID] = [SALESORDERITEMTAX].[SALESORDERITEMID]
    inner join dbo.[TAX] on [SALESORDERITEMTAX].[TAXID] = [TAX].[ID]
    left join dbo.[SALESORDERITEMFEE] on [SALESORDERITEM].[ID] = [SALESORDERITEMFEE].[ID]
    left join @CALCULATEDFIELDS as [CALCULATEDFIELDS] on [CALCULATEDFIELDS].[SALESORDERITEMID] = [SALESORDERITEM].[ID]
    left join dbo.SALESORDERITEMTICKET on SALESORDERITEM.ID = SALESORDERITEMTICKET.ID
    where [SALESORDERID] = @SALESORDERID
        and TAXITEMID is not null;

    return;
end