From 21f5b7bcb0078530b15fb57534dcb82b5102b1e2 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Wed, 30 Dec 2020 17:52:08 +0000 Subject: [PATCH] --- .../Controllers/ServiceBankController.cs | 2 +- server/AyaNova/biz/ServiceBankBiz.cs | 58 +++++++++++++++---- server/AyaNova/models/ServiceBank.cs | 40 +++++++++++-- 3 files changed, 84 insertions(+), 16 deletions(-) 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](