internal IResult <Employee> GetEmployee(IUserIdentifiable userIdentifiable) { //todo: Introduce 'Token' and 'TokenExpiration' properties to Employee class. var employee = _coreUnitOfWork.EmployeesRepository.FindBy(e => e.UserName.Equals(userIdentifiable.UserToken)); if (employee == null) { return(new InvalidResult <Employee>(null, UserMessages.EmployeeByTokenNotFound)); } return(new SuccessResult <Employee>(employee)); }
internal IResult UpdatePickedInventory(InventoryShipmentOrderKey orderKey, IUserIdentifiable user, DateTime timestamp, List <PickedInventoryParameters> setPickedInventoryItems) { var employeeResult = new GetEmployeeCommand(_inventoryShipmentUnitOfWork).GetEmployee(user); if (!employeeResult.Success) { return(employeeResult.ConvertTo <InventoryShipmentOrder>()); } var orderResult = GetOrder(orderKey); if (!orderResult.Success) { return(orderResult); } orderResult.ResultingObject.PickedInventory.EmployeeId = employeeResult.ResultingObject.EmployeeId; orderResult.ResultingObject.PickedInventory.TimeStamp = timestamp; var pickedInventoryModifications = PickedInventoryHelper.CreateModifyPickedInventoryItemParameters(orderResult.ResultingObject.PickedInventory, setPickedInventoryItems); var validatorResult = ValidateModifyPickedInventoryItems(orderResult.ResultingObject, pickedInventoryModifications); if (!validatorResult.Success) { return(validatorResult.ConvertTo <SalesOrder>()); } var modifyPickedResult = new ModifyPickedInventoryItemsCommand(_inventoryShipmentUnitOfWork).Execute(orderResult.ResultingObject.PickedInventory, pickedInventoryModifications); if (!modifyPickedResult.Success) { return(modifyPickedResult); } return(new ModifyInventoryCommand(_inventoryShipmentUnitOfWork).Execute(pickedInventoryModifications.Select(p => p.ToModifySourceInventoryParameters()).ToList(), null)); }
internal IResult <ChileProduct> Execute(ChileProduct chileProduct, IUserIdentifiable user, DateTime timeStamp, IEnumerable <SetChileProductIngredientCommandParameters> ingredients, out List <AdditiveTypeKey> deletedIngredients) { deletedIngredients = new List <AdditiveTypeKey>(); var employeeResult = new GetEmployeeCommand(_productUnitOfWork).GetEmployee(user); if (!employeeResult.Success) { return(employeeResult.ConvertTo <ChileProduct>()); } AdditiveTypeKey[] missingAdditiveTypes; _productUnitOfWork.AdditiveTypeRepository.FindByKeys(out missingAdditiveTypes, ingredients.Select(i => i.AdditiveTypeKey).ToArray()); if (missingAdditiveTypes.Any()) { return(new InvalidResult <ChileProduct>(null, string.Format(UserMessages.AdditiveTypeNotFound, missingAdditiveTypes.First()))); } foreach (var match in (chileProduct.Ingredients ?? new List <ChileProductIngredient>()).BestMatches(ingredients, (e, n) => e.AdditiveTypeId == n.AdditiveTypeKey.AdditiveTypeKey_AdditiveTypeId, (e, n) => e.Percentage == n.Parameters.Percentage)) { if (match.Item2 == null) { deletedIngredients.Add(match.Item1.ToAdditiveTypeKey()); _productUnitOfWork.ChileProductIngredientRepository.Remove(match.Item1); } else { bool update; var ingredient = match.Item1; if (ingredient == null || ingredient.AdditiveTypeId != match.Item2.AdditiveTypeKey.AdditiveTypeKey_AdditiveTypeId) { if (ingredient != null) { deletedIngredients.Add(ingredient.ToAdditiveTypeKey()); _productUnitOfWork.ChileProductIngredientRepository.Remove(ingredient); } update = true; ingredient = _productUnitOfWork.ChileProductIngredientRepository.Add(new ChileProductIngredient { ChileProductId = chileProduct.Id, AdditiveTypeId = match.Item2.AdditiveTypeKey.AdditiveTypeKey_AdditiveTypeId }); } else { update = ingredient.Percentage != match.Item2.Parameters.Percentage; } if (update) { ingredient.EmployeeId = employeeResult.ResultingObject.EmployeeId; ingredient.TimeStamp = timeStamp; ingredient.Percentage = match.Item2.Parameters.Percentage; } } } return(new SuccessResult().ConvertTo(chileProduct)); }
internal IResult <ChileProduct> Execute(ChileProduct chileProduct, IUserIdentifiable user, DateTime timeStamp, IEnumerable <SetChileProductAttributeRangeParameters> ranges) { var employeeResult = new GetEmployeeCommand(_productUnitOfWork).GetEmployee(user); if (!employeeResult.Success) { return(employeeResult.ConvertTo <ChileProduct>()); } AttributeNameKey[] notFound; var attributeNames = _productUnitOfWork.AttributeNameRepository.FindByKeys(out notFound, ranges.Select(r => r.AttributeNameKey).ToArray()); if (notFound.Any()) { return(new InvalidResult <ChileProduct>(null, string.Format(UserMessages.AttributeNameNotFound, notFound.First()))); } var invalidForChile = attributeNames.FirstOrDefault(n => !n.ValidForChileInventory); if (invalidForChile != null) { return(new InvalidResult <ChileProduct>(null, string.Format(UserMessages.AttributeNameNotValidForChile, invalidForChile.ToAttributeNameKey()))); } foreach (var match in (chileProduct.ProductAttributeRanges ?? new List <ChileProductAttributeRange>()).BestMatches(ranges, (e, n) => e.AttributeShortName == n.AttributeNameKey.AttributeNameKey_ShortName, (e, n) => e.RangeMin == n.Parameters.RangeMin, (e, n) => e.RangeMax == n.Parameters.RangeMax)) { if (match.Item2 == null) { _productUnitOfWork.ChileProductAttributeRangeRepository.Remove(match.Item1); } else { bool update; var range = match.Item1; if (range == null || !match.Item2.AttributeNameKey.Equals(range)) { if (range != null) { _productUnitOfWork.ChileProductAttributeRangeRepository.Remove(range); } update = true; range = _productUnitOfWork.ChileProductAttributeRangeRepository.Add(new ChileProductAttributeRange { ChileProductId = chileProduct.Id, AttributeShortName = match.Item2.AttributeNameKey.AttributeNameKey_ShortName }); } else { update = range.RangeMin != match.Item2.Parameters.RangeMin || range.RangeMax != match.Item2.Parameters.RangeMax; } if (update) { range.EmployeeId = employeeResult.ResultingObject.EmployeeId; range.TimeStamp = timeStamp; range.RangeMin = match.Item2.Parameters.RangeMin; range.RangeMax = match.Item2.Parameters.RangeMax; } } } return(new SuccessResult <ChileProduct>(chileProduct)); }