Merge branch 'DriverReport-VehicleBreakdown' into Authentication-Driver
This commit is contained in:
@@ -78,7 +78,7 @@ namespace MileageTraker.Web.Controllers
|
|||||||
|
|
||||||
public ActionResult MonthlyDriverMileage(LogQueryViewModel query)
|
public ActionResult MonthlyDriverMileage(LogQueryViewModel query)
|
||||||
{
|
{
|
||||||
var items = DataService.GetMonthlyEmployeeMileageItems(query);
|
var items = DataService.GetMonthlyDriverMileageItems(query);
|
||||||
|
|
||||||
var report = new DriverMileageViewModel(items, query);
|
var report = new DriverMileageViewModel(items, query);
|
||||||
|
|
||||||
|
|||||||
+36
-6
@@ -188,15 +188,14 @@ namespace MileageTraker.Web.DAL
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<EmployeeMileageItem> GetMonthlyEmployeeMileageItems(LogQueryViewModel query)
|
public IEnumerable<DriverMileageItem> GetMonthlyDriverMileageItems(LogQueryViewModel query)
|
||||||
{
|
{
|
||||||
var items =
|
var items =
|
||||||
from l in
|
from l in
|
||||||
from log in FilterLogs(_db.Logs, query)
|
from log in FilterLogs(_db.Logs, query)
|
||||||
let previousLog = log.VehiclePreviousLog
|
let previousLog = log.VehiclePreviousLog
|
||||||
select new { log, previousLog, miles = (previousLog != null ? log.EndOdometer - previousLog.EndOdometer : 0) }
|
select new { log, previousLog, miles = (previousLog != null ? log.EndOdometer - previousLog.EndOdometer : 0) }
|
||||||
group l by l.log.User
|
group l by l.log.User into g
|
||||||
into g
|
|
||||||
let miles = g.Sum(l => l.miles)
|
let miles = g.Sum(l => l.miles)
|
||||||
let gasPurchased = g.Sum(l => l.log.GasPurchased)
|
let gasPurchased = g.Sum(l => l.log.GasPurchased)
|
||||||
where miles > 0 || gasPurchased > 0
|
where miles > 0 || gasPurchased > 0
|
||||||
@@ -204,22 +203,53 @@ namespace MileageTraker.Web.DAL
|
|||||||
from i in g
|
from i in g
|
||||||
orderby i.log.Date descending, i.log.EndOdometer descending
|
orderby i.log.Date descending, i.log.EndOdometer descending
|
||||||
select new { PreviousLog = i.previousLog, Log = i.log }
|
select new { PreviousLog = i.previousLog, Log = i.log }
|
||||||
|
let vehicleLogs =
|
||||||
|
from i in g
|
||||||
|
group i by i.log.VehicleId into v
|
||||||
|
from vehicle in _db.Vehicles
|
||||||
|
where vehicle.VehicleId == v.Key
|
||||||
|
let vehicleProg = vehicle.Prog
|
||||||
|
let vehicleMiles = v.Sum(l => l.miles)
|
||||||
|
let vehicleGasPurchased = v.Sum(l => l.log.GasPurchased)
|
||||||
|
where miles > 0 || gasPurchased > 0
|
||||||
|
let vehicleLogPairs =
|
||||||
|
from i in v
|
||||||
|
orderby i.log.Date descending, i.log.EndOdometer descending
|
||||||
|
select new { PreviousLog = i.previousLog, Log = i.log }
|
||||||
|
select new
|
||||||
|
{
|
||||||
|
VehicleId = v.Key,
|
||||||
|
Prog = vehicleProg,
|
||||||
|
Miles = vehicleMiles,
|
||||||
|
GasPurchased = vehicleGasPurchased,
|
||||||
|
LogPairs = vehicleLogPairs
|
||||||
|
}
|
||||||
select
|
select
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
User = g.Key,
|
User = g.Key,
|
||||||
GasPurchased = gasPurchased,
|
GasPurchased = gasPurchased,
|
||||||
Miles = miles,
|
Miles = miles,
|
||||||
LogPairs = logPairs
|
LogPairs = logPairs,
|
||||||
|
VehicleLogs = vehicleLogs
|
||||||
};
|
};
|
||||||
|
|
||||||
return items.ToList().Select(i => new EmployeeMileageItem
|
return items.ToList().Select(i => new DriverMileageItem
|
||||||
{
|
{
|
||||||
EmployeeName = i.User.FullName,
|
DriverName = i.User.FullName,
|
||||||
GasPurchased = i.GasPurchased,
|
GasPurchased = i.GasPurchased,
|
||||||
Miles = i.Miles,
|
Miles = i.Miles,
|
||||||
LogPairs = i.LogPairs.ToList()
|
LogPairs = i.LogPairs.ToList()
|
||||||
|
.Select(lp => new Tuple<Log, Log>(lp.PreviousLog, lp.Log)),
|
||||||
|
VehicleMileageItems = i.VehicleLogs.ToList().Select(v => new VehicleMileageItem
|
||||||
|
{
|
||||||
|
VehicleId = v.VehicleId,
|
||||||
|
Prog = v.Prog,
|
||||||
|
Miles = v.Miles,
|
||||||
|
GasPurchased = v.GasPurchased,
|
||||||
|
LogPairs = v.LogPairs.ToList()
|
||||||
.Select(lp => new Tuple<Log, Log>(lp.PreviousLog, lp.Log))
|
.Select(lp => new Tuple<Log, Log>(lp.PreviousLog, lp.Log))
|
||||||
|
}).ToList()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,17 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using MileageTraker.Web.ViewModels.Vehicle;
|
||||||
|
|
||||||
namespace MileageTraker.Web.ViewModels
|
namespace MileageTraker.Web.ViewModels
|
||||||
{
|
{
|
||||||
public class EmployeeMileageItem
|
public class DriverMileageItem
|
||||||
{
|
{
|
||||||
public string EmployeeName { get; set; }
|
public string DriverName { get; set; }
|
||||||
public int Miles { get; set; }
|
public int Miles { get; set; }
|
||||||
public double GasPurchased { get; set; }
|
public double GasPurchased { get; set; }
|
||||||
public IEnumerable<Tuple<Models.Log, Models.Log>> LogPairs { get; set; }
|
public IEnumerable<Tuple<Models.Log, Models.Log>> LogPairs { get; set; }
|
||||||
|
public IEnumerable<VehicleMileageItem> VehicleMileageItems { get; set; }
|
||||||
public int TripCount { get { return LogPairs.Count(); } }
|
public int TripCount { get { return LogPairs.Count(); } }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,13 +6,13 @@ namespace MileageTraker.Web.ViewModels
|
|||||||
{
|
{
|
||||||
public class DriverMileageViewModel
|
public class DriverMileageViewModel
|
||||||
{
|
{
|
||||||
public IEnumerable<EmployeeMileageItem> Items { get; set; }
|
public IEnumerable<DriverMileageItem> Items { get; set; }
|
||||||
public LogQueryViewModel Query { get; set; }
|
public LogQueryViewModel Query { get; set; }
|
||||||
|
|
||||||
public int TotalMiles { get { return Items.Sum(i => i.Miles); } }
|
public int TotalMiles { get { return Items.Sum(i => i.Miles); } }
|
||||||
public double TotalGasPurchased { get { return Items.Sum(i => i.GasPurchased); } }
|
public double TotalGasPurchased { get { return Items.Sum(i => i.GasPurchased); } }
|
||||||
|
|
||||||
public DriverMileageViewModel(IEnumerable<EmployeeMileageItem> items, LogQueryViewModel query)
|
public DriverMileageViewModel(IEnumerable<DriverMileageItem> items, LogQueryViewModel query)
|
||||||
{
|
{
|
||||||
Items = items;
|
Items = items;
|
||||||
Query = query;
|
Query = query;
|
||||||
|
|||||||
@@ -19,8 +19,6 @@ namespace MileageTraker.Web.ViewModels.Log
|
|||||||
|
|
||||||
public string CityName { get; set; }
|
public string CityName { get; set; }
|
||||||
|
|
||||||
//public string EmployeeName { get; set; }
|
|
||||||
|
|
||||||
public virtual Models.User User { get; set; }
|
public virtual Models.User User { get; set; }
|
||||||
|
|
||||||
public double GasPurchased { get; set; }
|
public double GasPurchased { get; set; }
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ namespace MileageTraker.Web.ViewModels.Log
|
|||||||
|
|
||||||
public string CityName { get; set; }
|
public string CityName { get; set; }
|
||||||
|
|
||||||
[Display(Name = "Employee / Driver")]
|
[Display(Name = "Driver")]
|
||||||
public string EmployeeName { get; set; }
|
public string UserFullName { get; set; }
|
||||||
|
|
||||||
[DisplayFormat(DataFormatString = "{0:0.000}", ApplyFormatInEditMode = true)]
|
[DisplayFormat(DataFormatString = "{0:0.000}", ApplyFormatInEditMode = true)]
|
||||||
public double GasPurchased { get; set; }
|
public double GasPurchased { get; set; }
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace MileageTraker.Web.ViewModels.Vehicle
|
namespace MileageTraker.Web.ViewModels.Vehicle
|
||||||
@@ -11,6 +10,5 @@ namespace MileageTraker.Web.ViewModels.Vehicle
|
|||||||
public double GasPurchased { get; set; }
|
public double GasPurchased { get; set; }
|
||||||
public string Prog { get; set; }
|
public string Prog { get; set; }
|
||||||
public IEnumerable<Tuple<Models.Log, Models.Log>> LogPairs { get; set; }
|
public IEnumerable<Tuple<Models.Log, Models.Log>> LogPairs { get; set; }
|
||||||
public int TripCount { get { return LogPairs.Count(); } }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -31,6 +31,9 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th>
|
<th>
|
||||||
Driver
|
Driver
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
Vehicle
|
||||||
</th>
|
</th>
|
||||||
<th>
|
<th>
|
||||||
Trips
|
Trips
|
||||||
@@ -45,22 +48,46 @@
|
|||||||
@foreach (var item in Model.Items)
|
@foreach (var item in Model.Items)
|
||||||
{
|
{
|
||||||
<tr>
|
<tr>
|
||||||
|
<td colspan="5">@Html.DisplayTextFor(i => item.DriverName)</td>
|
||||||
|
</tr>
|
||||||
|
foreach (var vehicleItem in item.VehicleMileageItems)
|
||||||
|
{
|
||||||
|
<tr>
|
||||||
|
<td style="border-top: 0"></td>
|
||||||
<td>
|
<td>
|
||||||
@Html.DisplayTextFor(i => item.EmployeeName)
|
@Html.DisplayTextFor(i => vehicleItem.VehicleId)
|
||||||
|
@Html.DisplayTextFor(i => vehicleItem.Prog)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
<td @if (vehicleItem.LogPairs.Any(lp => lp.Item1 == null)){
|
||||||
|
@:class="ui-state-error"
|
||||||
|
}>
|
||||||
|
<span class="report-miles">@Html.DisplayTextFor(i => vehicleItem.Miles)</span>
|
||||||
|
@Html.Partial("LogsSummary", vehicleItem.LogPairs)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@Html.DisplayTextFor(i => vehicleItem.GasPurchased)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
}
|
||||||
|
<tr>
|
||||||
|
<td style="border-top: 0"></td>
|
||||||
|
<td style="text-align: right">
|
||||||
|
Total:
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@Html.DisplayTextFor(i => item.TripCount)
|
@Html.DisplayTextFor(i => item.TripCount)
|
||||||
</td>
|
</td>
|
||||||
<td @if (item.LogPairs.Any(lp => lp.Item1 == null)){
|
<td>
|
||||||
@:class="ui-state-error"
|
@Html.DisplayTextFor(i => item.Miles)
|
||||||
}>
|
|
||||||
<span class="report-miles">@Html.DisplayTextFor(i => item.Miles)</span>
|
|
||||||
@Html.Partial("LogsSummary", item.LogPairs)
|
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@Html.DisplayTextFor(i => item.GasPurchased)
|
@Html.DisplayTextFor(i => item.GasPurchased)
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
}
|
}
|
||||||
<tfoot><tr><td colspan="2">Total:</td><td>@Html.DisplayTextFor(m => m.TotalMiles)</td><td>@Html.DisplayTextFor(m => m.TotalGasPurchased)</td></tr></tfoot>
|
<tfoot><tr><td colspan="3" style="text-align: right">Grand Total:</td><td>@Html.DisplayTextFor(m => m.TotalMiles)</td><td>@Html.DisplayTextFor(m => m.TotalGasPurchased)</td></tr></tfoot>
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
+1
-1
@@ -166,7 +166,7 @@
|
|||||||
<Compile Include="ViewModels\Account\NewPasswordViewModel.cs" />
|
<Compile Include="ViewModels\Account\NewPasswordViewModel.cs" />
|
||||||
<Compile Include="ViewModels\Account\RegisterModel.cs" />
|
<Compile Include="ViewModels\Account\RegisterModel.cs" />
|
||||||
<Compile Include="ViewModels\CheckBoxViewModel.cs" />
|
<Compile Include="ViewModels\CheckBoxViewModel.cs" />
|
||||||
<Compile Include="ViewModels\EmployeeMileageItem.cs" />
|
<Compile Include="ViewModels\DriverMileageItem.cs" />
|
||||||
<Compile Include="ViewModels\DriverMileageViewModel.cs" />
|
<Compile Include="ViewModels\DriverMileageViewModel.cs" />
|
||||||
<Compile Include="ViewModels\Log\LogViewModel.cs" />
|
<Compile Include="ViewModels\Log\LogViewModel.cs" />
|
||||||
<Compile Include="ViewModels\Log\LogIndexViewModel.cs" />
|
<Compile Include="ViewModels\Log\LogIndexViewModel.cs" />
|
||||||
|
|||||||
Reference in New Issue
Block a user