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));
            }
        }
Exemple #3
0
        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);
                }
            }
        }