Dynamic update for all writes for VehiclePreviousLog
This commit is contained in:
+58
-27
@@ -20,6 +20,14 @@ namespace MileageTraker.Web.DAL
|
||||
{
|
||||
log.Created = DateTime.Now;
|
||||
_db.Logs.Add(log);
|
||||
|
||||
// update previous log links
|
||||
var previousLog = SearchPreviousLog(log);
|
||||
log.VehiclePreviousLog = previousLog;
|
||||
var nextLog = SearchNextLog(log);
|
||||
if (nextLog != null)
|
||||
nextLog.VehiclePreviousLog = log;
|
||||
|
||||
_db.SaveChanges();
|
||||
|
||||
UpdateCurrentOdometer(log.VehicleId);
|
||||
@@ -190,60 +198,75 @@ namespace MileageTraker.Web.DAL
|
||||
return logs;
|
||||
}
|
||||
|
||||
public Log GetPreviousLog(Log current)
|
||||
public Log SearchPreviousLog(Log current)
|
||||
{
|
||||
var vehicleId = current.VehicleId;
|
||||
var date = current.Date;
|
||||
var endOdometer = current.EndOdometer;
|
||||
return GetPreviousLog(endOdometer, vehicleId, date, current.Created);
|
||||
return SearchPreviousLog(endOdometer, vehicleId, date, current.Created, current.LogId);
|
||||
}
|
||||
|
||||
public Log GetPreviousLog(int endOdometer, string vehicleId, DateTime date, DateTime created)
|
||||
public Log SearchPreviousLog(int endOdometer, string vehicleId, DateTime date, DateTime created, int? excludeLogId = null)
|
||||
{
|
||||
return GetPreviousLogQuery(endOdometer, vehicleId, date, created).FirstOrDefault();
|
||||
return (from pl in _db.Logs
|
||||
where pl.VehicleId == vehicleId &&
|
||||
((pl.Date <= date && pl.EndOdometer < endOdometer)
|
||||
|| (pl.EndOdometer == endOdometer && pl.Created < created)) &&
|
||||
pl.LogId != excludeLogId
|
||||
orderby pl.EndOdometer descending, pl.Created descending
|
||||
select pl).FirstOrDefault();
|
||||
}
|
||||
|
||||
private IOrderedQueryable<Log> GetPreviousLogQuery(int endOdometer, string vehicleId, DateTime date, DateTime created)
|
||||
{
|
||||
return from pl in _db.Logs
|
||||
where pl.VehicleId == vehicleId &&
|
||||
((pl.Date <= date && pl.EndOdometer < endOdometer)
|
||||
|| (pl.EndOdometer == endOdometer && pl.Created < created))
|
||||
orderby pl.EndOdometer descending, pl.Created descending
|
||||
select pl;
|
||||
}
|
||||
|
||||
public Log GetNextLog(Log current)
|
||||
public Log SearchNextLog(Log current)
|
||||
{
|
||||
var vehicleId = current.VehicleId;
|
||||
var date = current.Date;
|
||||
var endOdometer = current.EndOdometer;
|
||||
return GetNextLog(endOdometer, vehicleId, date, current.Created);
|
||||
return SearchNextLog(endOdometer, vehicleId, date, current.Created, current.LogId);
|
||||
}
|
||||
|
||||
public Log GetNextLog(int endOdometer, string vehicleId, DateTime date, DateTime created)
|
||||
public Log SearchNextLog(int endOdometer, string vehicleId, DateTime date, DateTime created, int? excludeLogId = null)
|
||||
{
|
||||
return (from nl in GetLogs()
|
||||
where nl.VehicleId == vehicleId &&
|
||||
((nl.Date >= date && nl.EndOdometer > endOdometer)
|
||||
|| (nl.EndOdometer == endOdometer && nl.Created > created))
|
||||
|| (nl.EndOdometer == endOdometer && nl.Created > created)) &&
|
||||
nl.LogId != excludeLogId
|
||||
orderby nl.EndOdometer ascending, nl.Created ascending
|
||||
select nl).FirstOrDefault();
|
||||
}
|
||||
|
||||
|
||||
public void UpdateLog(Log log)
|
||||
{
|
||||
var currentLog = GetLog(log.LogId);
|
||||
_db.Logs.Attach(log);
|
||||
var original = _db.Logs.Find(log.LogId);
|
||||
|
||||
// ignore these properties while updating
|
||||
log.Created = currentLog.Created;
|
||||
log.Source = currentLog.Source;
|
||||
log.UserAgent = currentLog.UserAgent;
|
||||
log.UserHostAddress = currentLog.UserHostAddress;
|
||||
log.Created = original.Created;
|
||||
log.Source = original.Source;
|
||||
log.UserAgent = original.UserAgent;
|
||||
log.UserHostAddress = original.UserHostAddress;
|
||||
|
||||
_db.Entry(currentLog).CurrentValues.SetValues(log);
|
||||
// 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;
|
||||
|
||||
_db.Entry(currentLog).State = EntityState.Modified;
|
||||
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);
|
||||
@@ -252,6 +275,14 @@ namespace MileageTraker.Web.DAL
|
||||
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();
|
||||
|
||||
@@ -335,7 +366,7 @@ namespace MileageTraker.Web.DAL
|
||||
// TODO HACK for testing, delete later
|
||||
try
|
||||
{
|
||||
if (_db.Logs.Count() == 0)
|
||||
if (!_db.Logs.Any())
|
||||
return null;
|
||||
}
|
||||
catch (NullReferenceException)
|
||||
|
||||
Reference in New Issue
Block a user