private IResult SetupChileLots(IEnumerable <LabReportChileLotReturn> chileLots) { var lotToteReturns = new Dictionary <int, DehydratedInputReturn>(); var dehydratedItems = _lotUnitOfWork.ChileMaterialsReceivedItemRepository.All().AsNoTracking(); var selectInput = ChileMaterialsReceivedItemProjectors.SelectInput().Expand(); foreach (var chileLot in chileLots) { Initialize(chileLot); var dehydratedInputs = new List <DehydratedInputReturn>(); foreach (var pickedLot in chileLot.PickedLots.ToList()) { DehydratedInputReturn dehydratedInput; var lotToteHash = pickedLot.GetHashCode(); if (!lotToteReturns.TryGetValue(lotToteHash, out dehydratedInput)) { dehydratedInput = dehydratedItems.Where(ChileMaterialsReceivedItemPredicates.FilterByLotToteReturn(pickedLot).Expand()).Select(selectInput).FirstOrDefault(); lotToteReturns.Add(lotToteHash, dehydratedInput); } if (dehydratedInput != null) { dehydratedInputs.Add(dehydratedInput); } } chileLot.DehydratedInputs = dehydratedInputs; var weightedAveragesResult = CalculateAttributeWeightedAveragesCommand.CalculateWeightedAverages(chileLot.PickedLots); if (!weightedAveragesResult.Success) { return(weightedAveragesResult); } var weightedAverages = weightedAveragesResult.ResultingObject.ToDictionary(a => a.Key.AttributeNameKey.KeyValue, a => a.Value); foreach (var lotAttribute in chileLot.WeightedAttributes) { double average; lotAttribute.WeightedAverage = weightedAverages.TryGetValue(lotAttribute.Key, out average) ? average : 0.0f; } SetValidToPick(chileLot); } return(new SuccessResult()); }
private static IResult <IProductionPacketReturn> Process(IProductionPacketReturn packet) { foreach (var batch in packet.Batches.OfType <ProductionPacketBatchReturn>()) { var averages = CalculateAttributeWeightedAveragesCommand.CalculateWeightedAverages(batch.PickedItems); if (!averages.Success) { return(averages.ConvertTo <IProductionPacketReturn>(null)); } batch.CalculatedParameters = new ProductionBatchTargetParameters { BatchTargetWeight = batch.PickedItems.Any() ? batch.PickedItems.Sum(i => i.QuantityPicked * i.PackagingProduct.Weight) : 0.0f, BatchTargetAsta = averages.ResultingObject.Where(a => a.Key.AttributeNameKey.AttributeNameKey_ShortName == Constants.ChileAttributeKeys.Asta).Select(a => a.Value).FirstOrDefault(), BatchTargetScan = averages.ResultingObject.Where(a => a.Key.AttributeNameKey.AttributeNameKey_ShortName == Constants.ChileAttributeKeys.Scan).Select(a => a.Value).FirstOrDefault(), BatchTargetScoville = averages.ResultingObject.Where(a => a.Key.AttributeNameKey.AttributeNameKey_ShortName == Constants.ChileAttributeKeys.Scov).Select(a => a.Value).FirstOrDefault(), }; } return(new SuccessResult <IProductionPacketReturn>(packet)); }
public IResult Execute(ChileLot chileLot, List <PickedInventoryItem> pickedItems, DateTime timestamp) { if (chileLot == null) { throw new ArgumentNullException("chileLot"); } if (pickedItems == null) { throw new ArgumentNullException("pickedItems"); } var actualsRequired = new HashSet <AttributeNameKey>(_lotUnitOfWork.AttributeNameRepository .All().Where(a => a.ActualValueRequired) .ToList() .Select(a => a.ToAttributeNameKey())); foreach (var item in pickedItems) { item.PackagingProduct = _lotUnitOfWork.PackagingProductRepository.FindByKey(item.ToPackagingProductKey()); item.Lot = _lotUnitOfWork.LotRepository.FindByKey(item.ToLotKey(), i => i.Attributes.Select(a => a.AttributeName)); } var weightedAverages = CalculateAttributeWeightedAveragesCommand.Execute(pickedItems); if (!weightedAverages.Success) { return(weightedAverages); } var attributesToRemove = chileLot.Lot.Attributes.ToList(); var attributesToSet = weightedAverages.ResultingObject.Where(a => !actualsRequired.Contains(a.Key.Attribute.ToAttributeNameKey())).ToList(); foreach (var weightedAttribute in attributesToSet) { var namePredicate = weightedAttribute.Key.AttributeNameKey.FindByPredicate.Compile(); var lotAttribute = attributesToRemove.FirstOrDefault(a => namePredicate(a.AttributeName)); if (lotAttribute != null) { attributesToRemove.Remove(lotAttribute); } else { lotAttribute = new LotAttribute { LotDateCreated = chileLot.LotDateCreated, LotDateSequence = chileLot.LotDateSequence, LotTypeId = chileLot.LotTypeId, AttributeShortName = weightedAttribute.Key.AttributeNameKey.AttributeNameKey_ShortName, Computed = true }; chileLot.Lot.Attributes.Add(lotAttribute); } if (lotAttribute.Computed) { lotAttribute.AttributeValue = weightedAttribute.Value; lotAttribute.EmployeeId = chileLot.Production.PickedInventory.EmployeeId; lotAttribute.AttributeDate = (lotAttribute.TimeStamp = timestamp).Date; } } foreach (var attribute in attributesToRemove.Where(a => a.Computed)) { _lotUnitOfWork.LotAttributeRepository.Remove(attribute); } return(new SuccessResult()); }