public async Task <StockRecursoMaterialDTO> Create(UsuarioDTO userLogged, StockRecursoMaterialDTO dto)
        {
            var entity = _mapper.Map <StockRecursoMaterial>(dto);

            entity.CreationDate       = DateTime.Now;
            entity.CreationUserId     = userLogged.Id;
            entity.UpdateDate         = DateTime.Now;
            entity.UpdateUserId       = userLogged.Id;
            entity.Active             = true;
            entity.IdEmpresa          = userLogged.IdEmpresa;
            entity.CantidadDisponible = entity.CantidadTotal;
            entity.IdRecursoMaterial  = dto.IdRecursoMaterial.Value;

            entity = await _stockRecursoMaterialRepository.Insert(entity);

            var entityDTO = _mapper.Map <StockRecursoMaterialDTO>(entity);

            var recursoMaterial = await _recursoMaterialRepository.GetBy(s => s.Id == dto.IdRecursoMaterial, s => s.IdRecursoNavigation);

            if (await _stockRecursoMaterialRepository.Any(s => s.Active == true && s.IdRecursoMaterial == recursoMaterial.Id && s.CantidadDisponible > 0))
            {
                recursoMaterial.IdRecursoNavigation.IdEstado = EstadosEnum.Disponible.ToInt();
                await _recursoMaterialRepository.Update(recursoMaterial);
            }

            return(entityDTO);
        }
        public async Task <IActionResult> Update(int id, StockRecursoMaterialDTO dto)
        {
            if (ModelState.IsValid)
            {
                var entity = await _stockRecursoMaterialService.Update(this.Usuario, id, dto);

                return(Ok(entity));
            }
            else
            {
                return(BadRequest(ModelState));
            }
        }
        public async Task <IActionResult> Create(StockRecursoMaterialDTO dto)
        {
            if (ModelState.IsValid)
            {
                dto = await _stockRecursoMaterialService.Create(this.Usuario, dto);

                return(Ok(dto));
            }
            else
            {
                return(BadRequest(ModelState));
            }
        }
        public async Task <StockRecursoMaterialDTO> Update(UsuarioDTO userLogged, int id, StockRecursoMaterialDTO dto)
        {
            StockRecursoMaterial entity = _mapper.Map <StockRecursoMaterial>(dto);

            entity.UpdateDate   = DateTime.Now;
            entity.UpdateUserId = userLogged.Id;

            var entityOG = await _stockRecursoMaterialRepository.GetById(id);

            entity.CreationDate   = entityOG.CreationDate;
            entity.CreationUserId = entityOG.CreationUserId;
            entity.Active         = true;
            entity.IdEmpresa      = userLogged.IdEmpresa;

            if (dto.CantidadTotal < entityOG.CantidadDisponible)
            {
                entity.CantidadDisponible = entity.CantidadTotal - (entityOG.CantidadTotal - entityOG.CantidadDisponible);
            }
            else
            {
                entity.CantidadDisponible = entityOG.CantidadDisponible + (entity.CantidadTotal - entityOG.CantidadTotal);
            }

            entity = await _stockRecursoMaterialRepository.Update(id, entity);

            var entityDTO = _mapper.Map <StockRecursoMaterialDTO>(entity);

            var recursoMaterial = await _recursoMaterialRepository.GetBy(s => s.Id == dto.IdRecursoMaterial, s => s.IdRecursoNavigation);

            if (await _stockRecursoMaterialRepository.Any(s => s.Active == true && s.IdRecursoMaterial == recursoMaterial.Id && s.CantidadDisponible > 0))
            {
                recursoMaterial.IdRecursoNavigation.IdEstado = EstadosEnum.Disponible.ToInt();
                await _recursoMaterialRepository.Update(recursoMaterial);
            }
            else
            {
                recursoMaterial.IdRecursoNavigation.IdEstado = EstadosEnum.Asignado.ToInt();
                await _recursoMaterialRepository.Update(recursoMaterial);
            }

            return(entityDTO);
        }