public async Task <ActionResult <TipoProveedorDto> > UpdateTipoProveedor([FromBody] TipoProveedorDto itemDto)
        {
            try
            {
                var itemOld = await _repository.GetTipoProveedorPorId(itemDto.Id);

                if (itemOld == null)
                {
                    return(NotFound($"El tipo de proveedor {itemDto.tipo_proveedor}, no existe en la base de datos."));
                }

                var itemName = await _repository.GetTipoProveedorNombre(itemDto.tipo_proveedor);

                if (itemName != null)
                {
                    itemDto.error = $"Ya existe un tipo de proveedor con el nombre de {itemDto.tipo_proveedor}, en la base de datos.";
                    if (itemName.Id != itemDto.Id)
                    {
                        return(BadRequest(itemDto));
                    }
                }

                _mapper.Map(itemDto, itemOld);

                var updated = await _baseRepository.SaveChangesAsync();

                return(Ok(_mapper.Map <TipoProveedorDto>(itemOld)));
            }
            catch (Exception ex)
            {
                return(this.StatusCode(StatusCodes.Status500InternalServerError, ex.Message));
            }
        }
        public async Task <ActionResult <TipoProveedorDto> > Delete(int id)
        {
            try
            {
                var dto     = new TipoProveedorDto();
                var itemOld = await _repository.GetTipoProveedorPorId(id);

                if (itemOld == null)
                {
                    return(NotFound($"No existe el tipo de proveedor en la base de datos."));
                }

                var proveedores = await _repository.GetProveedoresPorTipoProveedor(id);

                if (proveedores.Any())
                {
                    dto.error = $"El tipo de proveedor no se puede eliminar porque tiene {proveedores.Count()} proveedores relacionados.";
                    return(BadRequest(dto));
                }

                _baseRepository.Delete(itemOld);

                if (await _baseRepository.SaveChangesAsync())
                {
                    return(Ok());
                }
            }
            catch (Exception ex)
            {
                return(this.StatusCode(StatusCodes.Status500InternalServerError, ex.Message));
            }

            return(BadRequest("An error ocurrs trying to delete the record"));
        }
        public async Task <ActionResult <TipoProveedorDto> > Post([FromBody] TipoProveedorDto tipoDto)
        {
            try
            {
                var erroDto = new TipoProveedorDto();
                var tipoOld = await _repository.GetTipoProveedorNombre(tipoDto.tipo_proveedor);

                if (tipoOld != null)
                {
                    erroDto.error = $"Ya existe un tipo de proveedor con el nombre de : {tipoDto.tipo_proveedor}, en la base de datos.";
                    return(BadRequest(erroDto));
                }


                if (tipoOld == null)
                {
                    var itemEntity = _mapper.Map <TipoProveedor>(tipoDto);
                    _baseRepository.Add(itemEntity);
                    if (await _baseRepository.SaveChangesAsync())
                    {
                        return(Ok(_mapper.Map <TipoProveedorDto>(itemEntity)));
                    }
                }
                else
                {
                    if (await _baseRepository.SaveChangesAsync())
                    {
                        return(Ok(_mapper.Map <TipoProveedorDto>(tipoDto)));
                    }
                }
            }
            catch (Exception ex)
            {
                return(this.StatusCode(StatusCodes.Status500InternalServerError, ex.Message));
            }

            return(BadRequest());
        }
        public async Task <ActionResult <TipoProveedorDto> > GetByNameAsync([FromQuery] string nombre)
        {
            try
            {
                var result = await _repository.GetTipoProveedorNombre(nombre);

                if (result == null)
                {
                    var error = new TipoProveedorDto()
                    {
                        error = "Tipo Proveedor no encontrado"
                    };
                    return(NotFound(error));
                }

                var items = _mapper.Map <TipoProveedorDto>(result);
                return(Ok(items));
            }
            catch (Exception err)
            {
                return(this.StatusCode(StatusCodes.Status500InternalServerError, "DataBase Failure " + err.Message));
            }
        }