This commit is contained in:
@@ -673,7 +673,7 @@ namespace AyaNova.Api.Controllers
|
|||||||
return StatusCode(403, new ApiNotAuthorizedResponse());
|
return StatusCode(403, new ApiNotAuthorizedResponse());
|
||||||
if (!ModelState.IsValid)
|
if (!ModelState.IsValid)
|
||||||
return BadRequest(new ApiErrorResponse(ModelState));
|
return BadRequest(new ApiErrorResponse(ModelState));
|
||||||
var o = await biz.GetPartAsync(WorkOrderItemPartId);
|
var o = await biz.PartGetAsync(WorkOrderItemPartId);
|
||||||
if (o == null)
|
if (o == null)
|
||||||
return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND));
|
return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND));
|
||||||
return Ok(ApiOkResponse.Response(o, !Authorized.HasModifyRole(HttpContext.Items, AyaType.WorkOrderItemPart)));
|
return Ok(ApiOkResponse.Response(o, !Authorized.HasModifyRole(HttpContext.Items, AyaType.WorkOrderItemPart)));
|
||||||
|
|||||||
@@ -1251,7 +1251,7 @@ namespace AyaNova.Biz
|
|||||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// GET
|
// GET
|
||||||
//
|
//
|
||||||
internal async Task<WorkOrderItemPart> GetPartAsync(long id, bool logTheGetEvent = true)
|
internal async Task<WorkOrderItemPart> PartGetAsync(long id, bool logTheGetEvent = true)
|
||||||
{
|
{
|
||||||
//Note: there could be rules checking here in future, i.e. can only get own workorder or something
|
//Note: there could be rules checking here in future, i.e. can only get own workorder or something
|
||||||
//if so, then need to implement AddError and in route handle Null return with Error check just like PUT route does now
|
//if so, then need to implement AddError and in route handle Null return with Error check just like PUT route does now
|
||||||
@@ -2342,7 +2342,70 @@ namespace AyaNova.Biz
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#region Utility
|
||||||
|
public ICoreBizObjectModel GetWorkOrderGraphItem(AyaType ayaType, long id)
|
||||||
|
{
|
||||||
|
switch (ayaType)
|
||||||
|
{
|
||||||
|
case AyaType.WorkOrder:
|
||||||
|
return (ICoreBizObjectModel)WorkOrderGetAsync(id, false);
|
||||||
|
case AyaType.WorkOrderItem:
|
||||||
|
return (ICoreBizObjectModel)ItemGetAsync(id, false);
|
||||||
|
case AyaType.WorkOrderItemExpense:
|
||||||
|
return (ICoreBizObjectModel)ExpenseGetAsync(id, false);
|
||||||
|
case AyaType.WorkOrderItemLabor:
|
||||||
|
return (ICoreBizObjectModel)LaborGetAsync(id, false);
|
||||||
|
case AyaType.WorkOrderItemLoan:
|
||||||
|
return (ICoreBizObjectModel)LoanGetAsync(id, false);
|
||||||
|
case AyaType.WorkOrderItemPart:
|
||||||
|
return (ICoreBizObjectModel)PartGetAsync(id, false);
|
||||||
|
case AyaType.WorkOrderItemPartRequest:
|
||||||
|
return (ICoreBizObjectModel)PartRequestGetAsync(id, false);
|
||||||
|
case AyaType.WorkOrderItemScheduledUser:
|
||||||
|
return (ICoreBizObjectModel)ScheduledUserGetAsync(id, false);
|
||||||
|
case AyaType.WorkOrderItemTask:
|
||||||
|
return (ICoreBizObjectModel)TaskGetAsync(id, false);
|
||||||
|
case AyaType.WorkOrderItemTravel:
|
||||||
|
return (ICoreBizObjectModel)TravelGetAsync(id, false);
|
||||||
|
case AyaType.WorkOrderItemUnit:
|
||||||
|
return (ICoreBizObjectModel)UnitGetAsync(id, false);
|
||||||
|
default:
|
||||||
|
throw new System.ArgumentOutOfRangeException($"WorkOrder::GetWorkOrderGraphItem -> Invalid ayaType{ayaType}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICoreBizObjectModel PutWorkOrderGraphItem(AyaType ayaType, ICoreBizObjectModel o)
|
||||||
|
{
|
||||||
|
ClearErrors();
|
||||||
|
switch (ayaType)
|
||||||
|
{
|
||||||
|
case AyaType.WorkOrder:
|
||||||
|
return (ICoreBizObjectModel)WorkOrderPutAsync((dtWorkOrder)o);
|
||||||
|
case AyaType.WorkOrderItem:
|
||||||
|
return (ICoreBizObjectModel)ItemPutAsync((dtWorkOrderItem)o);
|
||||||
|
case AyaType.WorkOrderItemExpense:
|
||||||
|
return (ICoreBizObjectModel)ExpensePutAsync((WorkOrderItemExpense)o);
|
||||||
|
case AyaType.WorkOrderItemLabor:
|
||||||
|
return (ICoreBizObjectModel)LaborPutAsync((WorkOrderItemLabor)o);
|
||||||
|
case AyaType.WorkOrderItemLoan:
|
||||||
|
return (ICoreBizObjectModel)LoanPutAsync((WorkOrderItemLoan)o);
|
||||||
|
case AyaType.WorkOrderItemPart:
|
||||||
|
return (ICoreBizObjectModel)PartPutAsync((WorkOrderItemPart)o);
|
||||||
|
case AyaType.WorkOrderItemPartRequest:
|
||||||
|
return (ICoreBizObjectModel)PartRequestPutAsync((WorkOrderItemPartRequest)o);
|
||||||
|
case AyaType.WorkOrderItemScheduledUser:
|
||||||
|
return (ICoreBizObjectModel)ScheduledUserPutAsync((WorkOrderItemScheduledUser)o);
|
||||||
|
case AyaType.WorkOrderItemTask:
|
||||||
|
return (ICoreBizObjectModel)TaskPutAsync((WorkOrderItemTask)o);
|
||||||
|
case AyaType.WorkOrderItemTravel:
|
||||||
|
return (ICoreBizObjectModel)TravelPutAsync((WorkOrderItemTravel)o);
|
||||||
|
case AyaType.WorkOrderItemUnit:
|
||||||
|
return (ICoreBizObjectModel)UnitPutAsync((WorkOrderItemUnit)o);
|
||||||
|
default:
|
||||||
|
throw new System.ArgumentOutOfRangeException($"WorkOrder::PutWorkOrderGraphItem -> Invalid ayaType{ayaType}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion utility
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -2356,100 +2419,74 @@ namespace AyaNova.Biz
|
|||||||
{
|
{
|
||||||
case JobType.BulkCoreBizObjectOperation:
|
case JobType.BulkCoreBizObjectOperation:
|
||||||
await ProcessBulkJobAsync(job);
|
await ProcessBulkJobAsync(job);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new System.ArgumentOutOfRangeException($"WorkOrder.HandleJob-> Invalid job type{job.JobType.ToString()}");
|
throw new System.ArgumentOutOfRangeException($"WorkOrder.HandleJob-> Invalid job type{job.JobType.ToString()}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private async Task ProcessBulkJobAsync(OpsJob job)
|
private async Task ProcessBulkJobAsync(OpsJob job)
|
||||||
{
|
{
|
||||||
await JobsBiz.UpdateJobStatusAsync(job.GId, JobStatus.Running, ct);
|
await JobsBiz.UpdateJobStatusAsync(job.GId, JobStatus.Running, ct);
|
||||||
await JobsBiz.LogJobAsync(job.GId, $"Bulk job {job.SubType} started...", ct);
|
await JobsBiz.LogJobAsync(job.GId, $"Bulk job {job.SubType} started...", ct);
|
||||||
|
|
||||||
List<long> idList = new List<long>();
|
List<long> idList = new List<long>();
|
||||||
long ProcessedObjectCount = 0;
|
long ProcessedObjectCount = 0;
|
||||||
JObject jobData = JObject.Parse(job.JobInfo);
|
JObject jobData = JObject.Parse(job.JobInfo);
|
||||||
|
|
||||||
|
|
||||||
//TAGS?
|
|
||||||
string ToTag = null;
|
|
||||||
string Tag = null;
|
|
||||||
if (jobData.ContainsKey("tag"))
|
|
||||||
Tag = (string)jobData["tag"];
|
|
||||||
|
|
||||||
if (jobData.ContainsKey("toTag"))
|
|
||||||
ToTag = (string)jobData["toTag"];
|
|
||||||
|
|
||||||
if (jobData.ContainsKey("idList"))
|
if (jobData.ContainsKey("idList"))
|
||||||
{
|
|
||||||
idList = ((JArray)jobData["idList"]).ToObject<List<long>>();
|
idList = ((JArray)jobData["idList"]).ToObject<List<long>>();
|
||||||
// jobData["idList"].Value<List<long>>();
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
//we need to fetch a list of them all because ALL items was selected
|
|
||||||
//If they wanted to filter (say by Active=true) they can do that from a grid list mass op
|
|
||||||
idList = await ct.Widget.Select(m => m.Id).ToListAsync();
|
idList = await ct.Widget.Select(m => m.Id).ToListAsync();
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool SaveIt = false;
|
bool SaveIt = false;
|
||||||
//Iterate the list fetching each in turn and sending to the processor to handle
|
|
||||||
foreach (long id in idList)
|
foreach (long id in idList)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
SaveIt = false;
|
SaveIt = false;
|
||||||
//errors would pile up here if not cleared on each iteration
|
|
||||||
ClearErrors();
|
ClearErrors();
|
||||||
|
ICoreBizObjectModel o = null;
|
||||||
|
switch (job.ObjectType)
|
||||||
|
{
|
||||||
|
case AyaType.WorkOrder:
|
||||||
|
o = (ICoreBizObjectModel)WorkOrderGetAsync(id, false);
|
||||||
|
break;
|
||||||
|
case AyaType.WorkOrderItem:
|
||||||
|
case AyaType.WorkOrderItemExpense:
|
||||||
|
case AyaType.WorkOrderItemLabor:
|
||||||
|
case AyaType.WorkOrderItemLoan:
|
||||||
|
case AyaType.WorkOrderItemPart:
|
||||||
|
case AyaType.WorkOrderItemPartRequest:
|
||||||
|
case AyaType.WorkOrderItemScheduledUser:
|
||||||
|
case AyaType.WorkOrderItemTask:
|
||||||
|
case AyaType.WorkOrderItemTravel:
|
||||||
|
case AyaType.WorkOrderItemUnit:
|
||||||
|
|
||||||
//Fetch
|
}
|
||||||
var o = (ICoreBizObjectModel)await WorkOrderGetAsync(id, false);
|
|
||||||
//call out processor for each item in turn
|
// var o = await GetAsync(id, false);
|
||||||
switch (job.SubType)
|
switch (job.SubType)
|
||||||
{
|
{
|
||||||
case JobSubType.TagAddAny:
|
case JobSubType.TagAddAny:
|
||||||
case JobSubType.TagAdd:
|
case JobSubType.TagAdd:
|
||||||
if (!o.Tags.Contains(Tag))
|
|
||||||
{
|
|
||||||
o.Tags.Add(Tag);
|
|
||||||
SaveIt = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case JobSubType.TagRemoveAny:
|
case JobSubType.TagRemoveAny:
|
||||||
case JobSubType.TagRemove:
|
case JobSubType.TagRemove:
|
||||||
SaveIt = o.Tags.Remove(Tag);
|
|
||||||
break;
|
|
||||||
case JobSubType.TagReplaceAny:
|
case JobSubType.TagReplaceAny:
|
||||||
case JobSubType.TagReplace:
|
case JobSubType.TagReplace:
|
||||||
int index = o.Tags.IndexOf(Tag);
|
SaveIt = TagBiz.ProcessBulkTagOperation(o.Tags, (string)jobData["tag"], jobData.ContainsKey("toTag") ? (string)jobData["toTag"] : null, job.SubType);
|
||||||
if (index != -1)
|
|
||||||
{
|
|
||||||
o.Tags[index] = ToTag;
|
|
||||||
SaveIt = true;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new System.ArgumentOutOfRangeException($"ProcessBulkJob -> Invalid job Subtype{job.SubType}");
|
throw new System.ArgumentOutOfRangeException($"ProcessBulkJob -> Invalid job Subtype{job.SubType}");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SaveIt)
|
if (SaveIt)
|
||||||
{
|
{
|
||||||
o = await WorkOrderPutAsync((dtWorkOrder)o);
|
// o = await PutAsync(o);
|
||||||
if (o == null)
|
if (o == null)
|
||||||
await JobsBiz.LogJobAsync(job.GId, $"Error processing item {id}: {GetErrorsAsString()}", ct);
|
await JobsBiz.LogJobAsync(job.GId, $"Error processing item {id}: {GetErrorsAsString()}", ct);
|
||||||
else
|
else
|
||||||
ProcessedObjectCount++;
|
ProcessedObjectCount++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
|
|
||||||
ProcessedObjectCount++;
|
ProcessedObjectCount++;
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -2462,8 +2499,6 @@ namespace AyaNova.Biz
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
}//eoc
|
}//eoc
|
||||||
|
|||||||
Reference in New Issue
Block a user