USP_REPORT_DASHBOARD_SALES

Parameters

Parameter Parameter Type Mode Description
@STARTDATE datetime IN
@ENDDATE datetime IN
@ALLDATES bit IN

Definition

Copy

create procedure dbo.USP_REPORT_DASHBOARD_SALES
(
    @STARTDATE datetime = null,
    @ENDDATE datetime = null,
    @ALLDATES bit
)
as
    set nocount on;

    declare @MINDATE datetime                

    -- Checking TRANSACTIONDATE for null so that the index will perform a seek.

    -- Removed check for STATUSCODE since the earliest TRANSACTIONDATE should be a complete order

    -- and including STATUSCODE would require a key lookup.

    select @MINDATE = min(SALESORDER.TRANSACTIONDATE) from dbo.SALESORDER where SALESORDER.TRANSACTIONDATE is not null;

    set @MINDATE = coalesce(@MINDATE, getdate())

    if @ALLDATES = 1 begin                                
        set @STARTDATE = @MINDATE
        set @ENDDATE = getdate()
    end

    set @STARTDATE = coalesce(@STARTDATE, @MINDATE)
    set @ENDDATE = coalesce(@ENDDATE, getdate())

    if @STARTDATE > @ENDDATE
        set @STARTDATE = @ENDDATE                        

    set @STARTDATE = cast(@STARTDATE as date)
    set @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@ENDDATE)

    declare @TOTALSALES money
    declare @TOTALREFUNDS money
    declare @ORDERDISCOUNTS money
    declare @ITEMDISCOUNTS money

    --total sales

    select 
        @TOTALSALES = isnull(sum(SALESORDERITEM.TOTAL), 0)
    from 
        dbo.SALESORDER
    inner join
        dbo.SALESORDERITEM on SALESORDER.ID = SALESORDERITEM.SALESORDERID
    where
        SALESORDER.TRANSACTIONDATE between @STARTDATE and @ENDDATE and
        SALESORDER.STATUSCODE = 1 and  -- Complete

        SALESORDERITEM.TYPECODE not in (4,5)  -- Tax, Discount


    --total order discounts

    select 
        @ORDERDISCOUNTS = isnull(sum(SALESORDERITEM.TOTAL), 0)
    from 
        dbo.SALESORDER
    inner join
        dbo.SALESORDERITEM on SALESORDER.ID = SALESORDERITEM.SALESORDERID
    where
        SALESORDER.TRANSACTIONDATE between @STARTDATE and @ENDDATE and
        SALESORDER.STATUSCODE = 1 and  -- Complete

        SALESORDERITEM.TYPECODE = 5  -- Discount


    --total item discounts

    select 
        @ITEMDISCOUNTS = isnull(sum(SALESORDERITEMITEMDISCOUNT.AMOUNT), 0)
    from 
        dbo.SALESORDER
    inner join
        dbo.SALESORDERITEM on SALESORDER.ID = SALESORDERITEM.SALESORDERID
    inner join
        dbo.SALESORDERITEMITEMDISCOUNT on SALESORDERITEM.ID = SALESORDERITEMITEMDISCOUNT.SALESORDERITEMID
    where
        SALESORDER.TRANSACTIONDATE between @STARTDATE and @ENDDATE and
        SALESORDER.STATUSCODE = 1  -- Complete


    --total refunds    

    select 
        @TOTALREFUNDS = isnull(sum((LI.QUANTITY * LI.UNITVALUE) - EXT.DISCOUNTS), 0)
    from
        dbo.FINANCIALTRANSACTION as FT
    inner join
        dbo.FINANCIALTRANSACTIONLINEITEM as LI on LI.FINANCIALTRANSACTIONID = FT.ID
    inner join
        dbo.CREDITITEM_EXT as EXT on EXT.ID = LI.ID
    where
        FT.CALCULATEDDATE between @STARTDATE and @ENDDATE
        and EXT.TYPECODE <> 4  -- Tax

        and FT.TYPECODE = 23  -- Refund


    select @TOTALSALES - @TOTALREFUNDS - @ORDERDISCOUNTS - @ITEMDISCOUNTS amount;

    return 0;