Esempio n. 1
0
        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));
        }
Esempio n. 3
0
        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));
        }