public IEnumerable <SalesReportQueryRow> FilterSalesReport(string user, DateTime?fromDate, DateTime?toDate)
        {
            var sales = new List <SalesReportQueryRow>();

            using (var cn = new SqlConnection(Settings.GetConnectionString()))
            {
                string query = (
                    @"SELECT U.UserName
		                ,SUM(S.PurchasePrice) AS TotalSales
                        ,COUNT(V.VehicleId) AS TotalVehicles
                    FROM Sales AS S
                    INNER JOIN Vehicles AS V ON S.SaleId = V.SaleId
                    INNER JOIN AspNetUsers AS U ON U.Id = V.UserId
                    WHERE 1 = 1
                ");

                SqlCommand cmd = new SqlCommand();
                cmd.Connection = cn;

                if (!string.IsNullOrEmpty(user))
                {
                    query += "AND U.Id = @UserId ";
                    cmd.Parameters.AddWithValue("@UserId", user);
                }

                if (fromDate.HasValue)
                {
                    query += "AND S.Date >= @FromDate ";
                    cmd.Parameters.AddWithValue("@FromDate", fromDate.Value);
                }

                if (toDate.HasValue)
                {
                    query += "AND S.Date <= @ToDate ";
                    cmd.Parameters.AddWithValue("@ToDate", toDate.Value);
                }

                query += "GROUP BY U.UserName ";
                query += "ORDER BY TotalSales DESC";

                cmd.CommandText = query;

                cn.Open();

                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        var row = new SalesReportQueryRow();

                        row.TotalVehicles = (int)dr["TotalVehicles"];
                        row.TotalSales    = (decimal)dr["TotalSales"];
                        row.UserName      = dr["UserName"].ToString();

                        sales.Add(row);
                    }
                }
            }
            return(sales);
        }
        public IEnumerable <SalesReportQueryRow> GetSalesReport()
        {
            var sales = new List <SalesReportQueryRow>();

            using (var cn = new SqlConnection(Settings.GetConnectionString()))
            {
                var cmd = new SqlCommand("SalesReport", cn);
                cmd.CommandType = CommandType.StoredProcedure;

                cn.Open();

                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        var row = new SalesReportQueryRow();
                        row.TotalVehicles = (int)dr["TotalVehicles"];
                        row.TotalSales    = (decimal)dr["TotalSales"];
                        row.UserName      = dr["UserName"].ToString();

                        sales.Add(row);
                    }
                }
            }
            return(sales);
        }