UFN_SALESORDER_GETREFUNDSTATUS_BULK

Return

Return Type
table

Definition

Copy


CREATE function dbo.UFN_SALESORDER_GETREFUNDSTATUS_BULK()
returns table
as
    return
        with CREDITITEMQUANTITIES_CTE as
        (
            select 
                CREDITITEM_EXT.SALESORDERITEMID as ID, 
                sum(coalesce(FTLI.QUANTITY,0)) as QUANTITY
            from
                dbo.CREDITITEM_EXT
            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

                and CREDITITEM_EXT.SALESORDERITEMID is not null
            group by
                CREDITITEM_EXT.SALESORDERITEMID
        ),
        GROUPSALESREFUNDS_CTE as
        (
            select 
                RESERVATION.ID,
                case
                    when REFUNDS > 0 then
                        case
                            when AMOUNTPAID = REFUNDS then
                                2  -- Fully refunded

                            else
                                1  -- Partially refunded 

                        end
                    else
                        0  -- No refund

                end as GROUPSALESREFUNDSTATUS
            from 
                dbo.RESERVATION
            outer apply
                dbo.UFN_SALESORDER_TOTALS(RESERVATION.ID)
        )
        select
            SALESORDER.ID,
            case when SALESORDER.SALESMETHODTYPECODE = 3
                then GROUPSALESREFUNDS.GROUPSALESREFUNDSTATUS
            else
                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
            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
        left join
            GROUPSALESREFUNDS_CTE GROUPSALESREFUNDS on GROUPSALESREFUNDS.ID = SALESORDER.ID
        where
            (SALESORDERITEM.ID is null or SALESORDERITEM.TYPECODE in (0, 1, 2, 3, 6, 14, 16))
        group by SALESORDER.ID, GROUPSALESREFUNDS.GROUPSALESREFUNDSTATUS, SALESORDER.SALESMETHODTYPECODE