From 6c4700029ef224e837d64b1dea076c7e8bcbca54 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Fri, 17 Sep 2021 22:23:42 +0000 Subject: [PATCH] --- .../AyaNova/Controllers/ScheduleController.cs | 45 ++++++++++++++++++- server/AyaNova/biz/WorkOrderBiz.cs | 36 +++++++++++++++ .../models/dto/ScheduleItemAdjustParams.cs | 13 ++++++ 3 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 server/AyaNova/models/dto/ScheduleItemAdjustParams.cs diff --git a/server/AyaNova/Controllers/ScheduleController.cs b/server/AyaNova/Controllers/ScheduleController.cs index 41bbc3a5..776efde2 100644 --- a/server/AyaNova/Controllers/ScheduleController.cs +++ b/server/AyaNova/Controllers/ScheduleController.cs @@ -83,6 +83,48 @@ namespace AyaNova.Api.Controllers return Ok(ApiOkResponse.Response(r)); } + /// + /// Adjust a schedule item's start / end timestamp + /// + /// Adjustment parameters parameters + /// From route path + /// Error or OK response + [HttpPost("adjust")] + public async Task PostPersonalSchedule([FromBody] ScheduleItemAdjustParams ad, ApiVersion apiVersion) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + + switch (ad.Type) + { + case AyaType.WorkOrderItemScheduledUser: + { + WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext); + if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.WorkOrderItemScheduledUser) || biz.UserIsRestrictedType) + return StatusCode(403, new ApiNotAuthorizedResponse()); + var o = await biz.ScheduledUserPutNewScheduleTimeAsync(ad); + if (o == false) + { + if (biz.Errors.Exists(z => z.Code == ApiErrorCode.CONCURRENCY_CONFLICT)) + return StatusCode(409, new ApiErrorResponse(biz.Errors)); + else + return BadRequest(new ApiErrorResponse(biz.Errors)); + } + } + break; + default: + return BadRequest(new ApiErrorResponse(ApiErrorCode.VALIDATION_INVALID_VALUE, "Type", "Type not supported for adjustment")); + } + + //a-ok response + return Ok(ApiOkResponse.Response(true)); + } + + + + //#### UTILITY METHODS ############## private static PersonalScheduleListItem MakeWOSchedItem(ViewSchedulePersonalWorkOrder v, PersonalScheduleParams p) { var s = new PersonalScheduleListItem(); @@ -176,8 +218,9 @@ namespace AyaNova.Api.Controllers public string TextColor { get; set; } public AyaType Type { get; set; } public long Id { get; set; } - } + + //------------ diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs index 18037fc5..5926736f 100644 --- a/server/AyaNova/biz/WorkOrderBiz.cs +++ b/server/AyaNova/biz/WorkOrderBiz.cs @@ -4868,6 +4868,42 @@ namespace AyaNova.Biz return putObject; } + //////////////////////////////////////////////////////////////////////////////////////////////// + //UPDATE schedule only + // + internal async Task ScheduledUserPutNewScheduleTimeAsync(ScheduleItemAdjustParams p) + { + WorkOrderItemScheduledUser dbObject = await ct.WorkOrderItemScheduledUser.SingleOrDefaultAsync(z => z.Id == p.Id); + if (dbObject == null) + { + AddError(ApiErrorCode.NOT_FOUND, "id"); + return false; + } + + dbObject.StartDate = p.Start; + dbObject.StopDate = p.End; + + await ScheduledUserValidateAsync(dbObject, dbObject); + if (HasErrors) return false; + // ct.Replace(dbObject, putObject); + try + { + await ct.SaveChangesAsync(); + } + catch (DbUpdateConcurrencyException) + { + if (!await ScheduledUserExistsAsync(dbObject.Id)) + AddError(ApiErrorCode.NOT_FOUND); + else + AddError(ApiErrorCode.CONCURRENCY_CONFLICT); + return false; + } + await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, dbObject.AyaType, AyaEvent.Modified), ct); + await ScheduledUserPopulateVizFields(dbObject); + await ScheduledUserHandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, dbObject); + return true; + } + //////////////////////////////////////////////////////////////////////////////////////////////// //DELETE // diff --git a/server/AyaNova/models/dto/ScheduleItemAdjustParams.cs b/server/AyaNova/models/dto/ScheduleItemAdjustParams.cs new file mode 100644 index 00000000..b8a50b39 --- /dev/null +++ b/server/AyaNova/models/dto/ScheduleItemAdjustParams.cs @@ -0,0 +1,13 @@ +using System; +using AyaNova.Biz; + +namespace AyaNova.Models +{ + public class ScheduleItemAdjustParams + { + public AyaType Type { get; set; } + public long Id { get; set; } + public DateTime Start { get; set; } + public DateTime End { get; set; } + } +} \ No newline at end of file