private bool ValidateServicioRecurso(ServicioRecursoDTO dto) { if (!ModelState.IsValid) { return(false); } if (dto.Recurso == null || !dto.Recurso.IdTipoRecurso.HasValue) { return(false); } switch ((TipoRecursoEnum)dto.Recurso.IdTipoRecurso.Value) { case TipoRecursoEnum.Recurso_Humano: { var rrhh = _recursoHumanoService.ListRecursosHumanosAvailables(Usuario, dto.IdServicio).GetAwaiter().GetResult(); return(rrhh.Any(s => s.IdRecurso == dto.IdRecurso)); } case TipoRecursoEnum.Recurso_Material: { var rrMat = _recursoMaterialService.ListRecursosMaterialesAvailables(dto.IdServicio, Usuario).GetAwaiter().GetResult(); return(rrMat.Any(s => s.IdRecurso == dto.IdRecurso)); } default: return(false); } }
public async Task <IActionResult> InsertServicioRecurso(int idServicio, ServicioRecursoDTO dto) { try { if (ValidateServicioRecurso(dto)) { await _recursoService.InsertServicioRecurso(idServicio, dto, Usuario); return(Ok()); } else { return(BadRequest(ModelState)); } } catch (NotFoundException e) { return(NotFound(e.Message)); } catch (Exception e) { return(StatusCode(500, e.Message)); } }
public async Task InsertServicioRecurso(int idServicio, ServicioRecursoDTO dto, UsuarioDTO currUser) { if (!await _servicioRepository.Any(s => s.Id == idServicio && s.IdEmpresa == currUser.IdEmpresa)) { throw new NotFoundException(); } var entity = _mapper.Map <ServicioRecurso>(dto); entity.Active = true; entity.UpdateDate = entity.FechaAsignado = entity.CreationDate = DateTime.Now; entity.UpdateUserId = entity.CreationUserId = currUser.Id; entity.IdServicio = idServicio; entity = await _servicioRecursoRepository.Insert(entity); if (dto.IdUbicacion.HasValue && dto.Recurso.IdTipoRecurso == TipoRecursoEnum.Recurso_Material.ToInt()) { var rMat = await _recursoMaterialRepository.GetBy(s => s.IdRecurso == dto.IdRecurso, s => s.IdRecursoNavigation); if (rMat == null) { await _servicioRecursoRepository.Remove(entity); throw new NotFoundException(); } var stock = await _stockRecursoMaterialRepository.GetBy(s => s.IdRecursoMaterial == rMat.Id && s.IdUbicacion == dto.IdUbicacion.Value && s.CantidadDisponible > 0); if (stock == null) { await _servicioRecursoRepository.Remove(entity); throw new NotFoundException(); } stock.CantidadDisponible -= 1; await _stockRecursoMaterialRepository.Update(stock.Id, stock); if (await _stockRecursoMaterialRepository.Any(s => s.Active == true && s.IdRecursoMaterial == rMat.Id && s.CantidadDisponible > 0)) { rMat.IdRecursoNavigation.IdEstado = EstadosEnum.Disponible.ToInt(); await _recursoMaterialRepository.Update(rMat); } else { rMat.IdRecursoNavigation.IdEstado = EstadosEnum.Asignado.ToInt(); await _recursoMaterialRepository.Update(rMat); } } else { var recurso = await _recursoRepository.GetBy(s => s.Id == entity.IdRecurso, r => r.RecursoHumano, r => r.RecursoMaterial); if (recurso != null && ((recurso.RecursoMaterial.Any() && recurso.RecursoMaterial.FirstOrDefault().Multiservicio != true) || (recurso.RecursoHumano.Any() && recurso.RecursoHumano.FirstOrDefault().Multiservicio != true))) { recurso.UpdateDate = DateTime.Now; recurso.UpdateUserId = currUser.Id; recurso.IdEstado = EstadosEnum.Asignado.ToInt(); await _recursoRepository.Update(recurso); } } }