rearrange code in dataservice

This commit is contained in:
2012-12-07 14:08:15 -05:00
parent 6f28fb1621
commit 05e678c810
+83 -110
View File
@@ -33,6 +33,59 @@ namespace MileageTraker.Web.DAL
UpdateCurrentOdometer(log.VehicleId); UpdateCurrentOdometer(log.VehicleId);
} }
public void UpdateLog(Log log)
{
_db.Logs.Attach(log);
var original = _db.Logs.Find(log.LogId);
// ignore these properties while updating
log.Created = original.Created;
log.Source = original.Source;
log.UserAgent = original.UserAgent;
log.UserHostAddress = original.UserHostAddress;
// remove from the list
var nextLog =
(from l in _db.Logs
where l.VehiclePreviousLogId == log.LogId
select l).FirstOrDefault();
if (nextLog != null)
nextLog.VehiclePreviousLogId = log.VehiclePreviousLogId;
log.VehiclePreviousLog = null;
log.VehiclePreviousLogId = null;
// add it back in new position
var previousLog = SearchPreviousLog(log);
if (previousLog != null)
log.VehiclePreviousLogId = previousLog.LogId;
var newNextLog = SearchNextLog(log);
if (newNextLog != null)
newNextLog.VehiclePreviousLogId = log.LogId;
_db.Entry(log).State = EntityState.Modified;
_db.SaveChanges();
UpdateCurrentOdometer(log.VehicleId);
}
public void DeleteLog(int id)
{
var log = _db.Logs.Find(id);
var nextLog =
(from l in _db.Logs
where l.VehiclePreviousLogId == log.LogId
select l).FirstOrDefault();
if (nextLog != null)
nextLog.VehiclePreviousLog = log.VehiclePreviousLog;
_db.Logs.Remove(log);
_db.SaveChanges();
UpdateCurrentOdometer(log.VehicleId);
}
public IQueryable<Log> GetLogs() public IQueryable<Log> GetLogs()
{ {
return _db.Logs; return _db.Logs;
@@ -70,15 +123,9 @@ namespace MileageTraker.Web.DAL
{ {
var t = var t =
from log in logs from log in logs
let previousLog = (from ol in _db.Logs select new { log, log.VehiclePreviousLog };
where ol.VehicleId == log.VehicleId &&
((ol.Date <= log.Date && ol.EndOdometer < log.EndOdometer) ||
(ol.EndOdometer == log.EndOdometer && ol.Created < log.Created))
orderby ol.EndOdometer descending, ol.Created descending
select ol).FirstOrDefault()
select new {log, previousLog};
return from l in t.ToList() return from l in t.ToList()
select new LogIndexViewModel(l.log, l.previousLog); select new LogIndexViewModel(l.log, l.VehiclePreviousLog);
} }
public IEnumerable<VehicleMileageItem> GetMonthlyVehicleMileageItems(LogQueryViewModel query) public IEnumerable<VehicleMileageItem> GetMonthlyVehicleMileageItems(LogQueryViewModel query)
@@ -86,12 +133,7 @@ namespace MileageTraker.Web.DAL
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 = (from ol in _db.Logs let previousLog = log.VehiclePreviousLog
where ol.VehicleId == log.VehicleId &&
((ol.Date <= log.Date && ol.EndOdometer < log.EndOdometer) ||
(ol.EndOdometer == log.EndOdometer && ol.Created < log.Created))
orderby ol.EndOdometer descending, ol.Created descending
select ol).FirstOrDefault()
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.VehicleId group l by l.log.VehicleId
into g into g
@@ -130,12 +172,7 @@ namespace MileageTraker.Web.DAL
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 = (from ol in _db.Logs let previousLog = log.VehiclePreviousLog
where ol.VehicleId == log.VehicleId &&
((ol.Date <= log.Date && ol.EndOdometer < log.EndOdometer) ||
(ol.EndOdometer == log.EndOdometer && ol.Created < log.Created))
orderby ol.EndOdometer descending, ol.Created descending
select ol).FirstOrDefault()
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.EmployeeName group l by l.log.EmployeeName
into g into g
@@ -198,6 +235,17 @@ namespace MileageTraker.Web.DAL
return logs; return logs;
} }
public IEnumerable<Log> GetRecentLogsByEmployee(string employeeName)
{
return
(from l in _db.Logs
where l.EmployeeName == employeeName
orderby l.Created descending
select l)
.Take(3)
.ToList();
}
public Log SearchPreviousLog(Log current) public Log SearchPreviousLog(Log current)
{ {
var vehicleId = current.VehicleId; var vehicleId = current.VehicleId;
@@ -212,7 +260,7 @@ namespace MileageTraker.Web.DAL
where pl.VehicleId == vehicleId && where pl.VehicleId == vehicleId &&
((pl.Date <= date && pl.EndOdometer < endOdometer) ((pl.Date <= date && pl.EndOdometer < endOdometer)
|| (pl.EndOdometer == endOdometer && pl.Created < created)) && || (pl.EndOdometer == endOdometer && pl.Created < created)) &&
pl.LogId != excludeLogId pl.LogId != excludeLogId
orderby pl.EndOdometer descending, pl.Created descending orderby pl.EndOdometer descending, pl.Created descending
select pl).FirstOrDefault(); select pl).FirstOrDefault();
} }
@@ -228,76 +276,12 @@ namespace MileageTraker.Web.DAL
public Log SearchNextLog(int endOdometer, string vehicleId, DateTime date, DateTime created, int? excludeLogId = null) public Log SearchNextLog(int endOdometer, string vehicleId, DateTime date, DateTime created, int? excludeLogId = null)
{ {
return (from nl in GetLogs() return (from nl in GetLogs()
where nl.VehicleId == vehicleId && where nl.VehicleId == vehicleId &&
((nl.Date >= date && nl.EndOdometer > endOdometer) ((nl.Date >= date && nl.EndOdometer > endOdometer)
|| (nl.EndOdometer == endOdometer && nl.Created > created)) && || (nl.EndOdometer == endOdometer && nl.Created > created)) &&
nl.LogId != excludeLogId nl.LogId != excludeLogId
orderby nl.EndOdometer ascending, nl.Created ascending orderby nl.EndOdometer ascending, nl.Created ascending
select nl).FirstOrDefault(); select nl).FirstOrDefault();
}
public void UpdateLog(Log log)
{
_db.Logs.Attach(log);
var original = _db.Logs.Find(log.LogId);
// ignore these properties while updating
log.Created = original.Created;
log.Source = original.Source;
log.UserAgent = original.UserAgent;
log.UserHostAddress = original.UserHostAddress;
// remove from the list
var nextLog =
(from l in _db.Logs
where l.VehiclePreviousLogId == log.LogId
select l).FirstOrDefault();
if (nextLog != null)
nextLog.VehiclePreviousLogId = log.VehiclePreviousLogId;
log.VehiclePreviousLog = null;
log.VehiclePreviousLogId = null;
// add it back in new position
var previousLog = SearchPreviousLog(log);
if (previousLog != null)
log.VehiclePreviousLogId = previousLog.LogId;
var newNextLog = SearchNextLog(log);
if (newNextLog != null)
newNextLog.VehiclePreviousLogId = log.LogId;
_db.Entry(log).State = EntityState.Modified;
_db.SaveChanges();
UpdateCurrentOdometer(log.VehicleId);
}
public void DeleteLog(int id)
{
var log = _db.Logs.Find(id);
var nextLog =
(from l in _db.Logs
where l.VehiclePreviousLogId == log.LogId
select l).FirstOrDefault();
if (nextLog != null)
nextLog.VehiclePreviousLog = log.VehiclePreviousLog;
_db.Logs.Remove(log);
_db.SaveChanges();
UpdateCurrentOdometer(log.VehicleId);
}
public IEnumerable<Log> GetRecentLogsByEmployee(string employeeName)
{
return
(from l in _db.Logs
where l.EmployeeName == employeeName
orderby l.Created descending
select l)
.Take(3)
.ToList();
} }
#endregion #endregion
@@ -312,6 +296,14 @@ namespace MileageTraker.Web.DAL
_db.SaveChanges(); _db.SaveChanges();
} }
public void UpdateVehicle(Vehicle vehicle)
{
if (vehicle.Assigned == "Unassigned")
vehicle.Assigned = null;
_db.Entry(vehicle).State = EntityState.Modified;
_db.SaveChanges();
}
public IEnumerable<Vehicle> GetVehicles() public IEnumerable<Vehicle> GetVehicles()
{ {
var vehicles = _db.Vehicles; var vehicles = _db.Vehicles;
@@ -323,14 +315,6 @@ namespace MileageTraker.Web.DAL
return _db.Vehicles.Find(id); return _db.Vehicles.Find(id);
} }
public void UpdateVehicle(Vehicle vehicle)
{
if (vehicle.Assigned == "Unassigned")
vehicle.Assigned = null;
_db.Entry(vehicle).State = EntityState.Modified;
_db.SaveChanges();
}
public void UpdateCurrentOdometer(string vehicleId) public void UpdateCurrentOdometer(string vehicleId)
{ {
var mostRecentOdometerQuery = var mostRecentOdometerQuery =
@@ -363,17 +347,6 @@ namespace MileageTraker.Web.DAL
public Log GetFirstConflictingOdometerChronologyLog(string vehicleId, DateTime date, int odometer) public Log GetFirstConflictingOdometerChronologyLog(string vehicleId, DateTime date, int odometer)
{ {
// TODO HACK for testing, delete later
try
{
if (!_db.Logs.Any())
return null;
}
catch (NullReferenceException)
{
return null;
}
var conflictingLogsQuery = var conflictingLogsQuery =
from log in _db.Logs from log in _db.Logs
let existingDate = log.Date let existingDate = log.Date