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());
        }
Example #2
0
        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));
        }