public IActionResult Put(Guid id, ScheduleUpdateDto scheduleUpdateDto)
        {
            var schedule = _repository.FindByIdWithAssociations(id);

            if (schedule == null)
            {
                return(NotFound());
            }

            if (scheduleUpdateDto.ActualStart.Date > scheduleUpdateDto.ActualEnd.Date)
            {
                return(UnprocessableEntity("A data inicial dev ser menor ou igual a data final."));
            }

            if (_repository.IsAnyScheduleAtRange(scheduleUpdateDto.EmployeeId, scheduleUpdateDto.ActualStart, scheduleUpdateDto.ActualEnd))
            {
                return(UnprocessableEntity("O funcionário indicado já possui um agendamento para esse intervalo."));
            }

            _mapper.Map(scheduleUpdateDto, schedule);
            _repository.Update(schedule);

            if (_repository.SaveChanges())
            {
                return(Ok(_mapper.Map <ScheduleWithDetailsReadDto>(schedule)));
            }
            else
            {
                return(BadRequest());
            }
        }
Exemplo n.º 2
0
        public async Task <IActionResult> UpdateScheduleAsync(
            [FromRoute, SwaggerParameter("Id of employee to update schedule for", Required = true)] Guid employeeId,
            [FromRoute, SwaggerParameter("Id of schedule to update", Required = true)] Guid scheduleId,
            [FromBody, SwaggerParameter("schedule object to update with", Required = true)] ScheduleUpdateDto scheduleToUpdate,
            [FromHeader(Name = "accept"), SwaggerParameter("Request Hateoas")] string mediaType)
        {
            if (!await _scheduleRepository.EntityExists <Employee>(e => e.Id == employeeId))
            {
                return(NotFound());
            }

            var foundSchedule = await _scheduleRepository.GetFirstByConditionAsync(j => j.Id == scheduleId);

            if (foundSchedule == null)
            {
                var scheduleToAdd = Mapper.Map <Schedule>(scheduleToUpdate);
                scheduleToAdd.Id         = Guid.NewGuid();
                scheduleToAdd.EmployeeId = employeeId;

                _scheduleRepository.Create(scheduleToAdd);

                if (!await _scheduleRepository.SaveChangesAsync())
                {
                    throw new Exception("Failed to save on upserting");
                }

                var scheduleToReturn = Mapper.Map <ScheduleDto>(await _scheduleRepository.GetFirstByConditionAsync(j => j.Id == scheduleToAdd.Id));

                if (mediaType == "application/vnd.AO.json+hateoas")
                {
                    var shapedSchedule = _controllerHelper.ShapeAndAddLinkToObject(scheduleToReturn, "Employee", null);
                    return(CreatedAtRoute("GetEmployee", new { employeeId, scheduleId = scheduleToReturn.Id }, shapedSchedule));
                }

                return(CreatedAtRoute("GetSchedule", new { employeeId, scheduleId = scheduleToReturn.Id }, scheduleToReturn));
            }

            Mapper.Map(scheduleToUpdate, foundSchedule);

            _scheduleRepository.Update(foundSchedule);

            if (!await _scheduleRepository.SaveChangesAsync())
            {
                throw new Exception("Failed to save on updating");
            }

            return(NoContent());
        }
Exemplo n.º 3
0
        private async Task <ScheduleUpdateDto> AddSchedule(ScheduleDtoForImportExcel scheduleDto)
        {
            var result  = new ScheduleUpdateDto();
            var process = await _repoProcess.FindAll().FirstOrDefaultAsync(x => x.Name.ToUpper().Equals(scheduleDto.Process.ToUpper()));

            if (process != null)
            {
                result.ProcessID = process.ID;
            }
            result.ModelName = scheduleDto.ModelName;
            result.ModelNo   = scheduleDto.ModelNo;
            result.ArticleNo = scheduleDto.ArticleNo;
            result.Treatment = scheduleDto.Process;

            result.Process = scheduleDto.Object;
            result.Part    = scheduleDto.Part;

            result.CreatedBy      = scheduleDto.CreatedBy;
            result.ProductionDate = scheduleDto.ProductionDate;

            return(result);
        }
Exemplo n.º 4
0
        public async Task <IActionResult> PartialUpdateScheduleAsync(
            [FromRoute, SwaggerParameter("Id of employee to update schedule for", Required = true)] Guid employeeId,
            [FromRoute, SwaggerParameter("Id of schedule to update", Required = true)] Guid scheduleId,
            [FromBody, SwaggerParameter("json patch operations to perform", Required = true)] JsonPatchDocument <ScheduleUpdateDto> scheduleToPartialUpdate,
            [FromHeader(Name = "accept"), SwaggerParameter("Request Hateoas")] string mediaType)
        {
            if (!await _scheduleRepository.EntityExists <Employee>(e => e.Id == employeeId))
            {
                return(NotFound());
            }

            var foundSchedule = await _scheduleRepository.GetFirstByConditionAsync(j => j.Id == scheduleId);

            if (foundSchedule == null)
            {
                var scheduleToCreate = new ScheduleUpdateDto();

                // check if necessary
                scheduleToPartialUpdate.ApplyTo(scheduleToCreate, ModelState);

                if (!ModelState.IsValid)
                {
                    throw new Exception("invalid model state");
                }

                var scheduleToAdd = Mapper.Map <Schedule>(scheduleToCreate);
                scheduleToAdd.Id         = Guid.NewGuid();
                scheduleToAdd.EmployeeId = employeeId;

                _scheduleRepository.Create(scheduleToAdd);

                if (!await _scheduleRepository.SaveChangesAsync())
                {
                    throw new Exception("Failed to save on upserting");
                }

                var scheduleToReturn = Mapper.Map <ScheduleDto>(await _scheduleRepository.GetFirstByConditionAsync(j => j.Id == scheduleToAdd.Id));

                if (mediaType == "application/vnd.AO.json+hateoas")
                {
                    var shapedSchedule = _controllerHelper.ShapeAndAddLinkToObject(scheduleToReturn, "Schedule", null);
                    return(CreatedAtRoute("GetEmployee", new { employeeId, scheduleId = scheduleToReturn.Id }, shapedSchedule));
                }

                return(CreatedAtRoute("GetSchedule", new { employeeId, scheduleId = scheduleToReturn.Id }, scheduleToReturn));
            }


            var scheduleToPatch = Mapper.Map <ScheduleUpdateDto>(foundSchedule);

            scheduleToPartialUpdate.ApplyTo(scheduleToPatch, ModelState);

            if (!ModelState.IsValid)
            {
                throw new Exception("invalid model state");
            }

            Mapper.Map(scheduleToPatch, foundSchedule);

            _scheduleRepository.Update(foundSchedule);

            if (!await _scheduleRepository.SaveChangesAsync())
            {
                throw new Exception("Failed to save on updating");
            }

            return(NoContent());
        }