using System.Threading.Tasks; using System; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.Logging; using AyaNova.Models; using AyaNova.Api.ControllerHelpers; using AyaNova.Biz; using Microsoft.EntityFrameworkCore; using System.Linq; using System.Collections.Generic; namespace AyaNova.Api.Controllers { [ApiController] [ApiVersion("8.0")] [Route("api/v{version:apiVersion}/schedule")] [Produces("application/json")] [Authorize] public class ScheduleController : ControllerBase { private readonly AyContext ct; private readonly ILogger log; private readonly ApiServerState serverState; /// /// ctor /// /// /// /// public ScheduleController(AyContext dbcontext, ILogger logger, ApiServerState apiServerState) { ct = dbcontext; log = logger; serverState = apiServerState; } /// /// Get personal schedule for parameters specified /// /// Personal schedule parameters /// From route path /// [HttpPost("personal")] public async Task PostPersonalSchedule([FromBody] PersonalScheduleParams p, ApiVersion apiVersion) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); List r = new List(); var UserId = UserIdFromContext.Id(HttpContext.Items); var UType = UserTypeFromContext.Type(HttpContext.Items); if (UType == UserType.Service || UType == UserType.ServiceContractor) { //trying ad-hoc join https://entityframeworkcore.com/querying-data-joining var wo = await ct.ViewSchedulePersonalWorkOrder.Where(x => x.SchedUserId == UserId) .Select(x => new PersonalScheduleListItem() { Id = x.WoItemSchedUserId, Color = ColorFromWOItem(x, p), Start = x.StartDate, End = x.StopDate, Type = AyaType.WorkOrderItemScheduledUser, }) .ToListAsync(); } return Ok(r); } private string ColorFromWOItem(ViewSchedulePersonalWorkOrder v, PersonalScheduleParams p) { switch (p.ColorSource) { case PersonalScheduleWorkOrderColorSource.WorkOrderStatus: return v.WorkOrderStatusColor; case PersonalScheduleWorkOrderColorSource.WorkOrderItemStatus: return v.WorkOrderItemStatusColor; case PersonalScheduleWorkOrderColorSource.WorkOrderItemPriority: return v.WorkOrderItemPriorityColor; } return string.Empty; } public enum PersonalScheduleWorkOrderColorSource : int { None = 0, WorkOrderStatus = 2, WorkOrderItemStatus = 3, WorkOrderItemPriority = 4 } public class PersonalScheduleParams { public DateTime Start { get; set; } public DateTime End { get; set; } public PersonalScheduleWorkOrderColorSource ColorSource { get; set; } } public class PersonalScheduleListItem { public DateTime? Start { get; set; } public DateTime? End { get; set; } public string Name { get; set; } public string Color { get; set; } public AyaType Type { get; set; } public long Id { get; set; } } //------------ }//eoc }//eons