public async Task <Dal.Entities.WareHouse> UpdateWareHouse(Dal.Entities.WareHouse warehouse)
        {
            Guard.Argument(warehouse, nameof(warehouse)).NotNull();

            await ValidateWareHouse(warehouse);

            var currentWareHouse = await GetWareHouseById(warehouse.Id);

            if (_unitOfWork.WareHouseRepository.GetAll().Any(w => w.Code.ToLower() == warehouse.Code.ToLower() &&
                                                             w.Id != warehouse.Id))
            {
                throw new ServiceException(new ErrorMessage[]
                {
                    new ErrorMessage()
                    {
                        Message = $"{warehouse.Code} is already exits"
                    }
                });
            }

            var mapper = ServiceMapper.GetMapper();

            mapper.Map(warehouse, currentWareHouse);

            await _unitOfWork.SaveChanges();

            return(currentWareHouse);
        }
        private async Task ValidateWareHouse(Dal.Entities.WareHouse warehouse)
        {
            var warehouseValidator = new WareHouseValidator();
            var validateResult     = await warehouseValidator.ValidateAsync(warehouse);

            if (validateResult.IsValid)
            {
                return;
            }

            throw new ServiceException(validateResult.Errors.Select(e => new ErrorMessage()
            {
                Code = ErrorCodes.Model_Validation_Error_Code,
                Meta = new
                {
                    e.ErrorCode,
                    e.ErrorMessage,
                    e.PropertyName
                },
                Message = e.ErrorMessage
            }).ToArray());
        }
        public async Task <Dal.Entities.WareHouse> AddWareHouse(Dal.Entities.WareHouse warehouse)
        {
            Guard.Argument(warehouse, nameof(warehouse)).NotNull();

            await ValidateWareHouse(warehouse);

            if (_unitOfWork.WareHouseRepository.GetAll().Any(w => w.Code.ToLower() == warehouse.Code.ToLower()))
            {
                throw new ServiceException(new ErrorMessage[]
                {
                    new ErrorMessage()
                    {
                        Message = $"{warehouse.Code} is already exits"
                    }
                });
            }

            _unitOfWork.WareHouseRepository.Insert(warehouse);
            await _unitOfWork.SaveChanges();

            return(warehouse);
        }
 public bool IsActiveWareHouse(Dal.Entities.WareHouse wareHouse)
 {
     return(wareHouse.Active);
 }