diff --git a/server/AyaNova/Controllers/UnitController.cs b/server/AyaNova/Controllers/UnitController.cs
index 0709f838..489c7e8b 100644
--- a/server/AyaNova/Controllers/UnitController.cs
+++ b/server/AyaNova/Controllers/UnitController.cs
@@ -61,7 +61,7 @@ namespace AyaNova.Api.Controllers
else
return CreatedAtAction(nameof(UnitController.GetUnit), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o));
}
-
+
///
/// Get Unit
///
@@ -97,7 +97,7 @@ namespace AyaNova.Api.Controllers
UnitBiz biz = UnitBiz.GetBiz(ct, HttpContext);
if (!Authorized.HasModifyRole(HttpContext.Items, biz.BizType))
return StatusCode(403, new ApiNotAuthorizedResponse());
- var o = await biz.PutAsync(updatedObject);
+ var o = await biz.PutAsync(updatedObject);
if (o == null)
{
if (biz.Errors.Exists(z => z.Code == ApiErrorCode.CONCURRENCY_CONFLICT))
@@ -339,7 +339,7 @@ namespace AyaNova.Api.Controllers
var UnitContractInfo = await ct.Unit.AsNoTracking().Where(x => x.Id == id).Select(x => new { x.ContractId, x.ContractExpires }).FirstOrDefaultAsync();
if (UnitContractInfo == null || UnitContractInfo.ContractExpires < DateTime.UtcNow)//none or expired
return Ok(ApiOkResponse.Response(ret));
-
+
var c = await ct.Contract.AsNoTracking().FirstOrDefaultAsync(x => x.Id == UnitContractInfo.ContractId);
if (c == null || c.Active == false)
return Ok(ApiOkResponse.Response(ret));
@@ -362,16 +362,36 @@ namespace AyaNova.Api.Controllers
{
if (!serverState.IsOpen)
return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
- UnitBiz biz = UnitBiz.GetBiz(ct, HttpContext);
- if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType))
+ UnitMeterReadingBiz biz = UnitMeterReadingBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.Unit))
return StatusCode(403, new ApiNotAuthorizedResponse());
if (!ModelState.IsValid)
return BadRequest(new ApiErrorResponse(ModelState));
- UnitMeterReading o = await biz.CreateMeterReadingAsync(newObject);
+ UnitMeterReading o = await biz.CreateAsync(newObject);
if (o == null)
return BadRequest(new ApiErrorResponse(biz.Errors));
else
- return CreatedAtAction(nameof(UnitController.GetUnit), new { id = o.UnitId, version = apiVersion.ToString() }, new ApiCreatedResponse(o));
+ return CreatedAtAction(nameof(UnitController.GetUnitMeterReading), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o));
+ }
+
+ ///
+ /// Get Unit Meter Reading entry
+ ///
+ ///
+ /// Unit
+ [HttpGet("meter-reading/{id}")]
+ public async Task GetUnitMeterReading([FromRoute] long id)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ UnitMeterReadingBiz biz = UnitMeterReadingBiz.GetBiz(ct, HttpContext);
+ if (!Authorized.HasReadFullRole(HttpContext.Items, AyaType.Unit))
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ var o = await biz.GetAsync(id);
+ if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND));
+ return Ok(ApiOkResponse.Response(o));
}
diff --git a/server/AyaNova/biz/PurchaseOrderBiz.cs b/server/AyaNova/biz/PurchaseOrderBiz.cs
index cbf64a58..f9b21b6e 100644
--- a/server/AyaNova/biz/PurchaseOrderBiz.cs
+++ b/server/AyaNova/biz/PurchaseOrderBiz.cs
@@ -217,10 +217,8 @@ namespace AyaNova.Biz
if (item.WorkOrderItemPartRequestId != null)
{
po.HasPartRequest = true;
- var wid = (await WorkOrderBiz.GetWorkOrderIdFromRelativeAsync(AyaType.WorkOrderItemPartRequest, (long)item.WorkOrderItemPartRequestId, ct)).ParentId;
- var WOSerial = await ct.WorkOrder.AsNoTracking().Where(x => x.Id == wid).Select(x => new { x.Serial }).FirstOrDefaultAsync();
- if (WOSerial != null)
- item.WorkOrderItemPartRequestViz = WOSerial.Serial.ToString();
+
+ item.WorkOrderItemPartRequestViz=(await WorkOrderBiz.GetWorkOrderSerialFromRelativeAsync(AyaType.WorkOrderItemPartRequest, (long)item.WorkOrderItemPartRequestId, ct)).ToString();
if (item.PartRequestedById != null)
item.PartRequestedByViz = await ct.User.AsNoTracking().Where(x => x.Id == item.PartRequestedById).Select(x => x.Name).FirstOrDefaultAsync();
}
diff --git a/server/AyaNova/biz/UnitBiz.cs b/server/AyaNova/biz/UnitBiz.cs
index 1a40838d..2bf6708b 100644
--- a/server/AyaNova/biz/UnitBiz.cs
+++ b/server/AyaNova/biz/UnitBiz.cs
@@ -434,7 +434,7 @@ namespace AyaNova.Biz
public async Task HandlePotentialNotificationEvent(AyaEvent ayaEvent, ICoreBizObjectModel proposedObj, ICoreBizObjectModel currentObj = null)
{
ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger();
- if (ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
+ if(ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
log.LogDebug($"HandlePotentialNotificationEvent processing: [AyaType:{this.BizType}, AyaEvent:{ayaEvent}]");
bool isNew = currentObj == null;
@@ -548,123 +548,21 @@ namespace AyaNova.Biz
}//Contract expiry event
+ //#todo: METER READING EVENT
+ //MIGRATE_OUTSTANDING need meter reading object to complete unit notification for UnitMeterReadingMultipleExceeded
+ //UnitMeterReadingMultipleExceeded = 26,//* UnitMeterReading object, Created, conditional on DecValue as the Multiple threshold, if passed then notifies
+ //{
+ //first remove any existing, potentially stale notifyevents for this exact object and notifyeventtype
+ //await NotifyEventHelper.ClearPriorEventsForObject(ct, AyaType.Unit, o.Id, NotifyEventType.UnitMeterReadingMultipleExceeded);
+ //then check if unit is still metered etc etc and do the rest once the unit meter reading is coded
+
+ //}
}
}//end of process notifications
- ////////////////// METER READING //////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////
- //CREATE
- //
- internal async Task CreateMeterReadingAsync(UnitMeterReading newObject)
- {
- await ValidateMeterReadingAsync(newObject);
- if (HasErrors)
- return null;
- else
- {
- await ct.UnitMeterReading.AddAsync(newObject);
- await ct.SaveChangesAsync();
- await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, BizType, AyaEvent.Created), ct);
- await SearchIndexAsync(newObject, true);
- await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null);
- await MeterReadingHandlePotentialNotificationEvent(AyaEvent.Created, newObject);
- return newObject;
- }
- }
-
-
-
-
- private async Task ValidateMeterReadingAsync(UnitMeterReading proposedObj)
- {
- //Unit required
- var unit = await ct.Unit.AsNoTracking().FirstOrDefaultAsync(z => z.Id == proposedObj.UnitId);
- if (unit == null)
- {
- AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "UnitId", "Unit not found with that id");//api issue not user issue so no need to translate
- return;
- }
-
- if(!unit.Metered){
- AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "UnitId", "This is not a metered unit, reading cannot be saved");//api issue not user issue so no need to translate
- return;
- }
-
- if(proposedObj.WorkOrderItemId!=null){
- if(!await ct.WorkOrderItem.AnyAsync(z=>z.Id==proposedObj.WorkOrderItemId)){
- AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "WorkOrderItemId", "work order item id was not found");//api issue not user issue so no need to translate
- return;
- }
- }
-
- }
-
-
- public async Task MeterReadingHandlePotentialNotificationEvent(AyaEvent ayaEvent, UnitMeterReading proposedObj)
- {
- ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger();
- if (ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
- log.LogDebug($"HandlePotentialNotificationEvent processing: [AyaType:{AyaType.UnitMeterReading}, AyaEvent:{ayaEvent}]");
-
-
-
- //## CREATED EVENTS (only ever created)
- if (ayaEvent == AyaEvent.Created || ayaEvent == AyaEvent.Modified)
- {
-
- // //# CONTRACT EXPIRY
- // {
- // if (o.ContractId != null && o.ContractExpires != null)
- // {
- // var ContractExpirydate = (DateTime)o.ContractExpires;
- // //notify users about contract expiry (time delayed)
- // var subs = await ct.NotifySubscription.Where(z => z.EventType == NotifyEventType.ContractExpiring).ToListAsync();
- // foreach (var sub in subs)
- // {
- // //not for inactive users
- // if (!await UserBiz.UserIsActive(sub.UserId)) continue;
-
- // //Tag match? (will be true if no sub tags so always safe to call this)
- // if (NotifyEventHelper.ObjectHasAllSubscriptionTags(o.Tags, sub.Tags))
- // {
- // NotifyEvent n = new NotifyEvent()
- // {
- // EventType = NotifyEventType.ContractExpiring,
- // UserId = sub.UserId,
- // AyaType = o.AyaType,
- // ObjectId = o.Id,
- // NotifySubscriptionId = sub.Id,
- // Name = o.Serial,
- // EventDate = ContractExpirydate
- // };
- // await ct.NotifyEvent.AddAsync(n);
- // log.LogDebug($"Adding NotifyEvent: [{n.ToString()}]");
- // await ct.SaveChangesAsync();
- // }
- // }
- // }
- // }//Contract expiry event
-
-
-
- }
-
-
- }//end of process notifications
-
- //#todo: METER READING EVENT
- //MIGRATE_OUTSTANDING need meter reading object to complete unit notification for UnitMeterReadingMultipleExceeded
- //UnitMeterReadingMultipleExceeded = 26,//* UnitMeterReading object, Created, conditional on DecValue as the Multiple threshold, if passed then notifies
- //{
- //first remove any existing, potentially stale notifyevents for this exact object and notifyeventtype
- //await NotifyEventHelper.ClearPriorEventsForObject(ct, AyaType.Unit, o.Id, NotifyEventType.UnitMeterReadingMultipleExceeded);
-
- //then check if unit is still metered etc etc and do the rest once the unit meter reading is coded
-
- //}
/////////////////////////////////////////////////////////////////////
diff --git a/server/AyaNova/biz/UnitMeterReadingBiz.cs b/server/AyaNova/biz/UnitMeterReadingBiz.cs
new file mode 100644
index 00000000..d296b20f
--- /dev/null
+++ b/server/AyaNova/biz/UnitMeterReadingBiz.cs
@@ -0,0 +1,220 @@
+using System;
+using System.Threading.Tasks;
+using Microsoft.EntityFrameworkCore;
+using System.Linq;
+using AyaNova.Util;
+using AyaNova.Api.ControllerHelpers;
+using Microsoft.Extensions.Logging;
+using AyaNova.Models;
+using Newtonsoft.Json.Linq;
+using System.Collections.Generic;
+using Newtonsoft.Json;
+
+namespace AyaNova.Biz
+{
+ internal class UnitMeterReadingBiz : BizObject, ISearchAbleObject, IReportAbleObject, IExportAbleObject
+ {
+ internal UnitMeterReadingBiz(AyContext dbcontext, long currentUserId, long userTranslationId, AuthorizationRoles UserRoles)
+ {
+ ct = dbcontext;
+ UserId = currentUserId;
+ UserTranslationId = userTranslationId;
+ CurrentUserRoles = UserRoles;
+ BizType = AyaType.UnitMeterReading;
+ }
+
+ internal static UnitMeterReadingBiz GetBiz(AyContext ct, Microsoft.AspNetCore.Http.HttpContext httpContext = null)
+ {
+ if (httpContext != null)
+ return new UnitMeterReadingBiz(ct, UserIdFromContext.Id(httpContext.Items), UserTranslationIdFromContext.Id(httpContext.Items), UserRolesFromContext.Roles(httpContext.Items));
+ else
+ return new UnitMeterReadingBiz(ct, 1, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, AuthorizationRoles.BizAdmin);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+ //EXISTS
+ internal async Task ExistsAsync(long id)
+ {
+ return await ct.UnitMeterReading.AnyAsync(z => z.Id == id);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+ //CREATE
+ //
+ internal async Task CreateAsync(UnitMeterReading newObject)
+ {
+ await ValidateAsync(newObject);
+ if (HasErrors)
+ return null;
+ else
+ {
+
+ await ct.UnitMeterReading.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
+ //
+ internal async Task GetAsync(long id, bool logTheGetEvent = true)
+ {
+ var ret = await ct.UnitMeterReading.AsNoTracking().SingleOrDefaultAsync(m => m.Id == id);
+ if (logTheGetEvent && ret != null)
+ await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, BizType, AyaEvent.Retrieved), ct);
+ return ret;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+ //SEARCH
+ //
+ private async Task SearchIndexAsync(UnitMeterReading obj, bool isNew)
+ {
+ var SearchParams = new Search.SearchIndexProcessObjectParameters(UserTranslationId, obj.Id, BizType);
+ DigestSearchText(obj, SearchParams);
+ if (isNew)
+ await Search.ProcessNewObjectKeywordsAsync(SearchParams);
+ else
+ await Search.ProcessUpdatedObjectKeywordsAsync(SearchParams);
+ }
+
+ public async Task GetSearchResultSummary(long id)
+ {
+ var obj = await GetAsync(id, false);
+ var SearchParams = new Search.SearchIndexProcessObjectParameters();
+ DigestSearchText(obj, SearchParams);
+ return SearchParams;
+ }
+
+ public void DigestSearchText(UnitMeterReading obj, Search.SearchIndexProcessObjectParameters searchParams)
+ {
+ if (obj != null)
+ searchParams.AddText(obj.Description)
+ .AddText(obj.Meter);
+ }
+
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+ //VALIDATION
+ //
+
+ private async Task ValidateAsync(UnitMeterReading proposedObj)
+ {
+ //Unit required
+ var unit = await ct.Unit.AsNoTracking().FirstOrDefaultAsync(z => z.Id == proposedObj.UnitId);
+ if (unit == null)
+ {
+ AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "UnitId", "Unit not found with that id");//api issue not user issue so no need to translate
+ return;
+ }
+
+ if (!unit.Metered)
+ {
+ AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "UnitId", "This is not a metered unit, reading cannot be saved");//api issue not user issue so no need to translate
+ return;
+ }
+
+ if (proposedObj.WorkOrderItemId != null)
+ {
+ if (!await ct.WorkOrderItem.AnyAsync(z => z.Id == proposedObj.WorkOrderItemId))
+ {
+ AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "WorkOrderItemId", "work order item id was not found");//api issue not user issue so no need to translate
+ return;
+ }
+ }
+
+
+ }
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+ //REPORTING
+ //
+ public async Task GetReportData(DataListSelectedRequest dataListSelectedRequest)
+ {
+ var idList = dataListSelectedRequest.SelectedRowIds;
+ JArray ReportData = new JArray();
+ while (idList.Any())
+ {
+ var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE);
+ idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray();
+ //query for this batch, comes back in db natural order unfortunately
+ var batchResults = await ct.UnitMeterReading.AsNoTracking().Where(z => batch.Contains(z.Id)).ToArrayAsync();
+ //order the results back into original
+ var orderedList = from id in batch join z in batchResults on id equals z.Id select z;
+ foreach (UnitMeterReading w in orderedList)
+ {
+ await PopulateVizFields(w);
+ var jo = JObject.FromObject(w);
+ ReportData.Add(jo);
+ }
+ }
+ return ReportData;
+ }
+
+
+ //populate viz fields from provided object
+ private async Task PopulateVizFields(UnitMeterReading o)
+ {
+ o.UnitViz = await ct.Unit.AsNoTracking().Where(x => x.Id == o.UnitId).Select(x => x.Serial).FirstOrDefaultAsync();
+ if (o.WorkOrderItemId != null)
+ o.WorkOrderViz = (await WorkOrderBiz.GetWorkOrderSerialFromRelativeAsync(AyaType.WorkOrderItem, (long)o.WorkOrderItemId, ct)).ToString();//await ct.Unit.AsNoTracking().Where(x => x.Id == o.UnitId).Select(x => x.Serial).FirstOrDefaultAsync();
+ }
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+ // IMPORT EXPORT
+ //
+
+ public async Task GetExportData(DataListSelectedRequest dataListSelectedRequest)
+ {
+ //for now just re-use the report data code
+ //this may turn out to be the pattern for most biz object types but keeping it seperate allows for custom usage from time to time
+ return await GetReportData(dataListSelectedRequest);
+ }
+
+
+
+
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+ // NOTIFICATION PROCESSING
+ //
+ public async Task HandlePotentialNotificationEvent(AyaEvent ayaEvent, UnitMeterReading proposedObj)
+ {
+ ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger();
+ if (ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
+ log.LogDebug($"HandlePotentialNotificationEvent processing: [AyaType:{this.BizType}, AyaEvent:{ayaEvent}]");
+
+ await Task.CompletedTask;
+ //SPECIFIC EVENTS FOR THIS OBJECT
+ //#todo: METER READING EVENT
+ //MIGRATE_OUTSTANDING need meter reading object to complete unit notification for UnitMeterReadingMultipleExceeded
+ //UnitMeterReadingMultipleExceeded = 26,//* UnitMeterReading object, Created, conditional on DecValue as the Multiple threshold, if passed then notifies
+ //{
+ //first remove any existing, potentially stale notifyevents for this exact object and notifyeventtype
+ //await NotifyEventHelper.ClearPriorEventsForObject(ct, AyaType.Unit, o.Id, NotifyEventType.UnitMeterReadingMultipleExceeded);
+
+ //then check if unit is still metered etc etc and do the rest once the unit meter reading is coded
+
+ //}
+
+ }//end of process notifications
+
+
+
+
+ /////////////////////////////////////////////////////////////////////
+
+ }//eoc
+
+
+}//eons
+
diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs
index 99276826..f6143cbf 100644
--- a/server/AyaNova/biz/WorkOrderBiz.cs
+++ b/server/AyaNova/biz/WorkOrderBiz.cs
@@ -586,7 +586,15 @@ namespace AyaNova.Biz
.SingleOrDefaultAsync();
w.ChildItemId = woitemid;
return w;
+ }
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+ //GET WORKORDER SERIAL FROM DESCENDANT TYPE AND ID
+ //
+ internal static async Task GetWorkOrderSerialFromRelativeAsync(AyaType ayaType, long id, AyContext ct)
+ {
+ var wid = (await GetWorkOrderIdFromRelativeAsync(ayaType, id, ct)).ParentId;
+ return await ct.WorkOrder.AsNoTracking().Where(x => x.Id == wid).Select(x => x.Serial).FirstOrDefaultAsync();
}
@@ -1033,7 +1041,7 @@ namespace AyaNova.Biz
public async Task WorkOrderHandlePotentialNotificationEvent(AyaEvent ayaEvent, ICoreBizObjectModel proposedObj, ICoreBizObjectModel currentObj = null)
{
ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger();
- if(ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
+ if (ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
log.LogDebug($"HandlePotentialNotificationEvent processing: [AyaType:{this.BizType}, AyaEvent:{ayaEvent}]");
bool isNew = currentObj == null;
WorkOrder oProposed = (WorkOrder)proposedObj;
@@ -1443,7 +1451,7 @@ namespace AyaNova.Biz
{
ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger();
- if(ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
+ if (ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
log.LogDebug($"HandlePotentialNotificationEvent processing: [AyaType:{proposedObj.AyaType}, AyaEvent:{ayaEvent}]");
bool isNew = currentObj == null;
@@ -2009,7 +2017,7 @@ namespace AyaNova.Biz
public async Task ItemHandlePotentialNotificationEvent(AyaEvent ayaEvent, ICoreBizObjectModel proposedObj, ICoreBizObjectModel currentObj = null)
{
ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger();
- if(ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
+ if (ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
log.LogDebug($"HandlePotentialNotificationEvent processing: [AyaType:{proposedObj.AyaType}, AyaEvent:{ayaEvent}]");
bool isNew = currentObj == null;
@@ -2367,7 +2375,7 @@ namespace AyaNova.Biz
public async Task ExpenseHandlePotentialNotificationEvent(AyaEvent ayaEvent, ICoreBizObjectModel proposedObj, ICoreBizObjectModel currentObj = null)
{
ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger();
- if(ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
+ if (ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
log.LogDebug($"HandlePotentialNotificationEvent processing: [AyaType:{proposedObj.AyaType}, AyaEvent:{ayaEvent}]");
bool isNew = currentObj == null;
@@ -2743,7 +2751,7 @@ namespace AyaNova.Biz
public async Task LaborHandlePotentialNotificationEvent(AyaEvent ayaEvent, ICoreBizObjectModel proposedObj, ICoreBizObjectModel currentObj = null)
{
ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger();
- if(ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
+ if (ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
log.LogDebug($"HandlePotentialNotificationEvent processing: [AyaType:{proposedObj.AyaType}, AyaEvent:{ayaEvent}]");
bool isNew = currentObj == null;
@@ -3170,7 +3178,7 @@ namespace AyaNova.Biz
public async Task LoanHandlePotentialNotificationEvent(AyaEvent ayaEvent, ICoreBizObjectModel proposedObj, ICoreBizObjectModel currentObj = null)
{
ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger();
- if(ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
+ if (ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
log.LogDebug($"HandlePotentialNotificationEvent processing: [AyaType:{proposedObj.AyaType}, AyaEvent:{ayaEvent}]");
bool isNew = currentObj == null;
@@ -3482,7 +3490,7 @@ namespace AyaNova.Biz
OutsideServiceReceived = 17,//* Workorder object , WorkOrderItemOutsideService updated, instant notification when item received, tag filterable
*/
ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger();
- if(ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
+ if (ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
log.LogDebug($"HandlePotentialNotificationEvent processing: [AyaType:{proposedObj.AyaType}, AyaEvent:{ayaEvent}]");
bool isNew = currentObj == null;
@@ -4223,7 +4231,7 @@ namespace AyaNova.Biz
public async Task PartHandlePotentialNotificationEvent(AyaEvent ayaEvent, ICoreBizObjectModel proposedObj, ICoreBizObjectModel currentObj = null)
{
ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger();
- if(ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
+ if (ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
log.LogDebug($"HandlePotentialNotificationEvent processing: [AyaType:{proposedObj.AyaType}, AyaEvent:{ayaEvent}]");
bool isNew = currentObj == null;
@@ -4472,7 +4480,7 @@ namespace AyaNova.Biz
public async Task PartRequestHandlePotentialNotificationEvent(AyaEvent ayaEvent, ICoreBizObjectModel proposedObj, ICoreBizObjectModel currentObj = null)
{
ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger();
- if(ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
+ if (ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
log.LogDebug($"HandlePotentialNotificationEvent processing: [AyaType:{proposedObj.AyaType}, AyaEvent:{ayaEvent}]");
bool isNew = currentObj == null;
@@ -4739,7 +4747,7 @@ namespace AyaNova.Biz
public async Task ScheduledUserHandlePotentialNotificationEvent(AyaEvent ayaEvent, ICoreBizObjectModel proposedObj, ICoreBizObjectModel currentObj = null)
{
ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger();
- if(ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
+ if (ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
log.LogDebug($"HandlePotentialNotificationEvent processing: [AyaType:{proposedObj.AyaType}, AyaEvent:{ayaEvent}]");
bool isNew = currentObj == null;
@@ -5122,7 +5130,7 @@ namespace AyaNova.Biz
public async Task TaskHandlePotentialNotificationEvent(AyaEvent ayaEvent, ICoreBizObjectModel proposedObj, ICoreBizObjectModel currentObj = null)
{
ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger();
- if(ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
+ if (ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
log.LogDebug($"HandlePotentialNotificationEvent processing: [AyaType:{proposedObj.AyaType}, AyaEvent:{ayaEvent}]");
bool isNew = currentObj == null;
@@ -5490,7 +5498,7 @@ namespace AyaNova.Biz
public async Task TravelHandlePotentialNotificationEvent(AyaEvent ayaEvent, ICoreBizObjectModel proposedObj, ICoreBizObjectModel currentObj = null)
{
ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger();
- if(ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
+ if (ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
log.LogDebug($"HandlePotentialNotificationEvent processing: [AyaType:{proposedObj.AyaType}, AyaEvent:{ayaEvent}]");
bool isNew = currentObj == null;
@@ -5773,7 +5781,7 @@ namespace AyaNova.Biz
public async Task UnitHandlePotentialNotificationEvent(AyaEvent ayaEvent, ICoreBizObjectModel proposedObj, ICoreBizObjectModel currentObj = null)
{
ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger();
- if(ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
+ if (ServerBootConfig.SEEDING || ServerBootConfig.MIGRATING) return;
log.LogDebug($"HandlePotentialNotificationEvent processing: [AyaType:{proposedObj.AyaType}, AyaEvent:{ayaEvent}]");
bool isNew = currentObj == null;
diff --git a/server/AyaNova/models/UnitMeterReading.cs b/server/AyaNova/models/UnitMeterReading.cs
index bf512003..139e0df0 100644
--- a/server/AyaNova/models/UnitMeterReading.cs
+++ b/server/AyaNova/models/UnitMeterReading.cs
@@ -10,22 +10,26 @@ namespace AyaNova.Models
//NOTE: Any non required field (nullable in DB) sb nullable here, i.e. decimal? not decimal,
//otherwise the server will call it an invalid record if the field isn't sent from client
- public class UnitMeterReading
+ public class UnitMeterReading
{
public long Id { get; set; }
- public uint Concurrency { get; set; }
+ public uint Concurrency { get; set; }
public string Description { get; set; }
- public long Meter { get; set; }
+ public long Meter { get; set; }
public DateTime MeterDate { get; set; }
public long UnitId { get; set; }
- public long? WorkOrderItemId { get; set; }
+ public long? WorkOrderItemId { get; set; }
+ [NotMapped]
+ public string UnitViz { get; set; }
+ [NotMapped]
+ public string WorkOrderViz { get; set; }
public UnitMeterReading()
{
-
+
}
-
+
}//eoc