diff --git a/server/AyaNova/Controllers/ServiceBankController.cs b/server/AyaNova/Controllers/ServiceBankController.cs
index f5c85072..e1f022b0 100644
--- a/server/AyaNova/Controllers/ServiceBankController.cs
+++ b/server/AyaNova/Controllers/ServiceBankController.cs
@@ -44,7 +44,7 @@ namespace AyaNova.Api.Controllers
/// From route path
///
[HttpPost]
- public async Task PostServiceBank([FromBody] ServiceBank newObject, ApiVersion apiVersion)
+ public async Task PostServiceBank([FromBody] dtServiceBank newObject, ApiVersion apiVersion)
{
if (!serverState.IsOpen)
return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
diff --git a/server/AyaNova/biz/ServiceBankBiz.cs b/server/AyaNova/biz/ServiceBankBiz.cs
index 2d7b4b22..74352de1 100644
--- a/server/AyaNova/biz/ServiceBankBiz.cs
+++ b/server/AyaNova/biz/ServiceBankBiz.cs
@@ -41,19 +41,46 @@ namespace AyaNova.Biz
////////////////////////////////////////////////////////////////////////////////////////////////
//CREATE
//
- internal async Task CreateAsync(ServiceBank newObject)
+ internal async Task CreateAsync(dtServiceBank newDtObject)
{
- await ValidateAsync(newObject);
- if (HasErrors)
- return null;
- else
+ using (var transaction = await ct.Database.BeginTransactionAsync())
{
- await ct.ServiceBank.AddAsync(newObject);
- await ct.SaveChangesAsync();
- await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, BizType, AyaEvent.Created), ct);
- await SearchIndexAsync(newObject, true);
- await HandlePotentialNotificationEvent(AyaEvent.Created, newObject);
- return newObject;
+ //get the last record
+ var LastEntry = await ct.ServiceBank.OrderByDescending(m => m.EntryDate).SingleOrDefaultAsync(m => m.ObjectId == newDtObject.ObjectId && m.ObjectType == newDtObject.ObjectType);
+ ServiceBank newObject = new ServiceBank();
+ newObject.Name = newDtObject.Name;
+ newObject.EntryDate = DateTime.UtcNow;
+ newObject.ObjectId = newDtObject.ObjectId;
+ newObject.ObjectType = newDtObject.ObjectType;
+ newObject.SourceId = newDtObject.SourceId;
+ newObject.SourceType = newDtObject.SourceType;
+ newObject.Incidents = newDtObject.Incidents;
+ newObject.Currency = newDtObject.Currency;
+ newObject.Hours = newDtObject.Hours;
+
+ if (LastEntry != null)
+ {
+ newObject.LastEntryDate = LastEntry.EntryDate;
+ newObject.LastCurrencyBalance = LastEntry.CurrencyBalance;
+ newObject.LastHoursBalance = LastEntry.HoursBalance;
+ newObject.LastIncidentsBalance = LastEntry.IncidentsBalance;
+ newObject.HoursBalance = LastEntry.HoursBalance + newObject.Hours;
+ newObject.IncidentsBalance = LastEntry.IncidentsBalance + newObject.Incidents;
+ newObject.CurrencyBalance = LastEntry.CurrencyBalance + newObject.Currency;
+ }
+
+ await ValidateAsync(newObject);
+ if (HasErrors)
+ return null;
+ else
+ {
+ await ct.ServiceBank.AddAsync(newObject);
+ await ct.SaveChangesAsync();
+ await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, BizType, AyaEvent.Created), ct);
+ await SearchIndexAsync(newObject, true);
+ await HandlePotentialNotificationEvent(AyaEvent.Created, newObject);
+ return newObject;
+ }
}
}
@@ -70,7 +97,16 @@ namespace AyaNova.Biz
return ret;
}
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+ //GET LAST
+ //
+ internal async Task GetLastForObjectAsync(AyaType objectType, long objectId)
+ {
+ var ret = await ct.ServiceBank.OrderByDescending(m => m.EntryDate).SingleOrDefaultAsync(m => m.ObjectId == objectId && m.ObjectType == objectType);
+
+ return ret;
+ }
////////////////////////////////////////////////////////////////////////////////////////////////
//SEARCH
diff --git a/server/AyaNova/models/ServiceBank.cs b/server/AyaNova/models/ServiceBank.cs
index b249673c..ca92bfdd 100644
--- a/server/AyaNova/models/ServiceBank.cs
+++ b/server/AyaNova/models/ServiceBank.cs
@@ -20,7 +20,7 @@ namespace AyaNova.Models
[Required]
public string Name { get; set; }
[Required]
- public DateTime EntryDate { get; set; }
+ public DateTime EntryDate { get; set; }
public DateTime? LastEntryDate { get; set; }
[Required]
public long ObjectId { get; set; }
@@ -33,17 +33,17 @@ namespace AyaNova.Models
[Required]
public decimal Incidents { get; set; }
[Required]
- public decimal IncidentsBalance { get; set; }
+ public decimal IncidentsBalance { get; set; }
public decimal? LastIncidentsBalance { get; set; }
[Required]
public decimal Currency { get; set; }
[Required]
- public decimal CurrencyBalance { get; set; }
+ public decimal CurrencyBalance { get; set; }
public decimal? LastCurrencyBalance { get; set; }
[Required]
public decimal Hours { get; set; }
[Required]
- public decimal HoursBalance { get; set; }
+ public decimal HoursBalance { get; set; }
public decimal? LastHoursBalance { get; set; }
@@ -57,6 +57,38 @@ namespace AyaNova.Models
}//eoc
+
+
+
+ //Data transfer version used by UI to make new entry or consume banked time
+ //this way the client doesn't need to bother with balances or last entries and such
+ public class dtServiceBank
+ {
+ public long Id { get; set; }
+ public uint Concurrency { get; set; }
+
+ [Required]
+ public string Name { get; set; }
+ [Required]
+ public long ObjectId { get; set; }
+ [Required]
+ public AyaType ObjectType { get; set; }
+ [Required]
+ public long SourceId { get; set; }
+ [Required]
+ public AyaType SourceType { get; set; }
+ [Required]
+ public decimal Incidents { get; set; }
+ [Required]
+ public decimal Currency { get; set; }
+ [Required]
+ public decimal Hours { get; set; }
+
+
+
+ }//eoc
+
+
}//eons
/*
CREATE TABLE [dbo].[ASERVICEBANK](