This commit is contained in:
2020-12-30 17:52:08 +00:00
parent 7cf086425c
commit 21f5b7bcb0
3 changed files with 84 additions and 16 deletions

View File

@@ -44,7 +44,7 @@ namespace AyaNova.Api.Controllers
/// <param name="apiVersion">From route path</param>
/// <returns></returns>
[HttpPost]
public async Task<IActionResult> PostServiceBank([FromBody] ServiceBank newObject, ApiVersion apiVersion)
public async Task<IActionResult> PostServiceBank([FromBody] dtServiceBank newObject, ApiVersion apiVersion)
{
if (!serverState.IsOpen)
return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));

View File

@@ -41,19 +41,46 @@ namespace AyaNova.Biz
////////////////////////////////////////////////////////////////////////////////////////////////
//CREATE
//
internal async Task<ServiceBank> CreateAsync(ServiceBank newObject)
internal async Task<ServiceBank> 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<ServiceBank> 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

View File

@@ -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](