UFN_SALESORDER_GETREFUNDSTATUS_BULK2

Return

Return Type
table

Definition

Copy


create function dbo.UFN_SALESORDER_GETREFUNDSTATUS_BULK2()
returns @REFUNDSTATUSTABLE TABLE
(
    ID uniqueidentifier,
    REFUNDSTATUS tinyint
)
as
begin
    with CREDITITEMQUANTITIES_CTE as
    (
    select SALESORDERITEM.ID, sum(coalesce(FTLI.QUANTITY,0)) as QUANTITY
    from dbo.CREDITITEM_EXT
        inner join dbo.SALESORDERITEM on SALESORDERITEM.ID = CREDITITEM_EXT.SALESORDERITEMID
        inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLI on FTLI.ID = CREDITITEM_EXT.ID
        inner join dbo.FINANCIALTRANSACTION FT on FTLI.FINANCIALTRANSACTIONID = FT.ID
    where FT.TYPECODE = 23 -- Refund

    group by SALESORDERITEM.ID 
    )
    insert into @REFUNDSTATUSTABLE
    select
        SALESORDER.ID,
        case
            when sum(coalesce(CREDITITEMS.QUANTITY, 0)) = 0 -- No part has been refunded

                then 0
            when sum(coalesce(SALESORDERITEM.QUANTITY, 0)) = sum(coalesce(CREDITITEMS.QUANTITY, 0)) -- Fully refunded

                then 2
            else 1    -- Partially refunded

        end as REFUNDSTATUS
    from dbo.SALESORDER
        left join dbo.SALESORDERITEM on SALESORDERITEM.SALESORDERID = SALESORDER.ID
        left join dbo.SALESORDERITEMFEE on SALESORDERITEM.ID = SALESORDERITEMFEE.ID
        left join CREDITITEMQUANTITIES_CTE CREDITITEMS on CREDITITEMS.ID = SALESORDERITEM.ID
    where
        (SALESORDERITEM.ID is null or SALESORDERITEM.TYPECODE in (0, 1, 2, 6, 14, 16) or (SALESORDERITEM.TYPECODE = 3 and SALESORDERITEMFEE.APPLIESTOCODE = 0)) -- see UFN_CREDIT_ISVALIDREFUNDTYPE

           and SALESORDER.SALESMETHODTYPECODE <> 3
    group by SALESORDER.ID 

    insert into @REFUNDSTATUSTABLE
    select 
        SALESORDER.ID,
        case when ((AMOUNTPAID > 0) and (REFUNDS > 0)) and ((AMOUNTPAID - REFUNDS) <= 0)
        then 2
        else
            case when ((AMOUNTPAID > 0) and (REFUNDS > 0)) and ((AMOUNTPAID - REFUNDS) < AMOUNTPAID)
                then 1
            else
                0
            end
        end
    from 
        dbo.SALESORDER
    outer apply
        dbo.UFN_SALESORDER_TOTALS(SALESORDER.ID)
    where 
        SALESORDER.SALESMETHODTYPECODE = 3


    return;
end