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)); }