public IResult <PickedInventory> Execute(ICreatePickedInventory parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            var dateCreated = parameters.TimeStamp.Date;
            var sequence    = new EFUnitOfWorkHelper(_pickedInventoryUnitOfWork).GetNextSequence <PickedInventory>(i => i.DateCreated == dateCreated, i => i.Sequence);

            var pickedInventory = new PickedInventory
            {
                EmployeeId = parameters.EmployeeKey.EmployeeKey_Id,
                TimeStamp  = parameters.TimeStamp,

                DateCreated  = dateCreated,
                Sequence     = sequence,
                PickedReason = parameters.PickedReason,
                Archived     = false,
                Items        = new List <PickedInventoryItem>()
            };

            _pickedInventoryUnitOfWork.PickedInventoryRepository.Add(pickedInventory);

            return(new SuccessResult <PickedInventory>(pickedInventory));
        }
        internal static PickedInventory EmptyItems(this PickedInventory pickedInventory)
        {
            if (pickedInventory == null)
            {
                throw new ArgumentNullException("pickedInventory");
            }

            pickedInventory.Items = null;

            return(pickedInventory);
        }
示例#3
0
        private PickedInventory CreatePickedInventory(DateTime entryDate, LotDTO lot)
        {
            _loadCount.AddRead(EntityTypes.PickedInventory);

            var identifiable = lot.tblOutgoingInputs.Cast <IEmployeeIdentifiableDTO>().ToList();

            identifiable.Add(lot);

            int?     employeeID;
            DateTime?timeStamp;

            identifiable.GetLatest(out employeeID, out timeStamp);

            if (timeStamp == null)
            {
                Log(new CallbackParameters(CallbackReason.PickedInventoryUndeterminedTimestamp)
                {
                    Lot = lot
                });
                return(null);
            }

            employeeID = employeeID ?? _newContextHelper.DefaultEmployee.EmployeeId;
            if (employeeID == _newContextHelper.DefaultEmployee.EmployeeId)
            {
                Log(new CallbackParameters(CallbackReason.PickedInventoryUsedDefaultEmployee)
                {
                    Lot        = lot,
                    EmployeeId = employeeID.Value
                });
            }

            var dateCreated = entryDate.Date;
            var sequence    = PickedInventoryKeyHelper.Singleton.GetNextSequence(dateCreated);

            var pickedInventory = new PickedInventory
            {
                EmployeeId = employeeID.Value,
                TimeStamp  = timeStamp.Value,

                DateCreated  = dateCreated,
                Sequence     = sequence,
                PickedReason = PickedReason.Production,
                Archived     = true,
            };

            pickedInventory.Items = CreatePickedInventoryItems(pickedInventory, lot.tblOutgoingInputs).ToList();

            return(pickedInventory);
        }
示例#4
0
        private PickedInventory CreateNewPickedInventory(ProductionBatchDTO batch)
        {
            _loadCount.AddRead(EntityTypes.PickedInventory);

            var dateCreated     = batch.BatchItems.Min(b => b.EntryDate.Date);
            var sequence        = PickedInventoryKeyHelper.Singleton.GetNextSequence(dateCreated);
            var latest          = batch.BatchItems.OrderByDescending(b => b.EntryDate).First();
            var pickedInventory = new PickedInventory
            {
                DateCreated = dateCreated,
                Sequence    = sequence,

                EmployeeId = latest.EmployeeID.Value,
                TimeStamp  = latest.EntryDate.ConvertLocalToUTC(),

                Archived     = false,
                PickedReason = PickedReason.Production
            };

            pickedInventory.Items = CreatePickedInventoryItems(pickedInventory, batch.BatchItems).ToList();

            return(pickedInventory);
        }
        internal static List <ModifyPickedInventoryItemParameters> CreateModifyPickedInventoryItemParameters(PickedInventory pickedInventory, List <PickedInventoryParameters> newItems)
        {
            if (pickedInventory.Items == null)
            {
                throw new ArgumentNullException("pickedInventory.Items");
            }
            var removeModifications = pickedInventory.Items.Select(i => new ModifyPickedInventoryItemParameters(i)).ToList();
            var modifications       = new List <ModifyPickedInventoryItemParameters>();

            foreach (var newItem in newItems ?? new List <PickedInventoryParameters>())
            {
                var closestMatch = ClosestMatch(removeModifications, newItem);
                if (closestMatch != null)
                {
                    if (closestMatch.OriginalQuantity != newItem.Quantity ||
                        closestMatch.CustomerLotCode != newItem.CustomerLotCode || closestMatch.CustomerProductCode != newItem.CustomerProductCode ||
                        !closestMatch.CurrentLocationKey.Equals(newItem.CurrentLocationKey))
                    {
                        closestMatch.NewQuantity         = newItem.Quantity;
                        closestMatch.CurrentLocationKey  = newItem.CurrentLocationKey;
                        closestMatch.CustomerLotCode     = newItem.CustomerLotCode;
                        closestMatch.CustomerProductCode = newItem.CustomerProductCode;
                        modifications.Add(closestMatch);
                    }
                    removeModifications.Remove(closestMatch);
                }
                else
                {
                    modifications.Add(new ModifyPickedInventoryItemParameters(newItem.InventoryKey, newItem.CurrentLocationKey, newItem.Quantity, newItem.CustomerLotCode, newItem.CustomerProductCode, newItem.OrderItemKey));
                }
            }

            modifications.AddRange(removeModifications);

            return(modifications);
        }
示例#6
0
        protected IResult UpdatePickedInventory(IInventoryValidator inventoryValidator, Employee employee, DateTime timeStamp, PickedInventory existingPickedInventory, List <PickedInventoryParameters> setPickedInventoryItems, ref List <ModifyInventoryParameters> pendingInventoryModifications, bool moveToDestination = false)
        {
            if (employee != null)
            {
                existingPickedInventory.EmployeeId = employee.EmployeeId;
            }
            existingPickedInventory.TimeStamp = timeStamp;

            var pickedInventoryModifications = PickedInventoryHelper.CreateModifyPickedInventoryItemParameters(existingPickedInventory, setPickedInventoryItems);

            if (inventoryValidator != null)
            {
                var validatorResult = inventoryValidator.ValidateItems(UnitOfWork.InventoryRepository, pickedInventoryModifications.Where(i => i.DeltaQuantity > 0).Select(i => i.InventoryKey));
                if (!validatorResult.Success)
                {
                    return(validatorResult.ConvertTo <List <PickedInventoryItem> >());
                }
            }

            var modifyPickedResult = new ModifyPickedInventoryItemsCommand(UnitOfWork).Execute(existingPickedInventory, pickedInventoryModifications);

            if (!modifyPickedResult.Success)
            {
                return(modifyPickedResult);
            }

            pendingInventoryModifications = pendingInventoryModifications ?? new List <ModifyInventoryParameters>();
            pendingInventoryModifications.AddRange(pickedInventoryModifications.Select(p => p.ToModifySourceInventoryParameters()));
            if (moveToDestination)
            {
                pendingInventoryModifications.AddRange(pickedInventoryModifications.Select(p => p.ToModifyDestinationInventoryParameters()));
            }

            return(modifyPickedResult);
        }
示例#7
0
        protected IResult UpdatePickedInventory(IInventoryValidator inventoryValidator, Employee employee, DateTime timeStamp, PickedInventory existingPickedInventory, List <PickedInventoryParameters> setPickedInventoryItems, bool moveToDestination = false)
        {
            List <ModifyInventoryParameters> inventoryModifications = null;
            var updateResult = UpdatePickedInventory(inventoryValidator, employee, timeStamp, existingPickedInventory, setPickedInventoryItems, ref inventoryModifications, moveToDestination);

            if (!updateResult.Success)
            {
                return(updateResult.ConvertTo <List <PickedInventoryItem> >());
            }

            var modifyInventoryResult = new ModifyInventoryCommand(UnitOfWork).Execute(inventoryModifications, null);

            if (!modifyInventoryResult.Success)
            {
                return(modifyInventoryResult.ConvertTo <List <PickedInventoryItem> >());
            }

            return(updateResult);
        }
示例#8
0
        private IEnumerable <PickedInventoryItem> CreatePickedInventoryItems(PickedInventory pickedInventory, IEnumerable <tblBatchItemDTO> batchItems)
        {
            var itemSequence = 1;

            foreach (var batchItem in batchItems)
            {
                _loadCount.AddRead(EntityTypes.PickedInventoryItem);

                LotKey lotKey;
                if (!LotNumberParser.ParseLotNumber(batchItem.Lot, out lotKey))
                {
                    Log(new CallbackParameters(CallbackReason.BatchItemInvalidLotNumber)
                    {
                        BatchItem = batchItem
                    });
                    continue;
                }

                if (!_newContextHelper.LotLoaded(lotKey))
                {
                    Log(new CallbackParameters(CallbackReason.BatchItemLotNotLoaded)
                    {
                        BatchItem = batchItem
                    });
                    continue;
                }

                var packaging = batchItem.PTypeID == (int?)LotTypeEnum.Packaging ? _newContextHelper.NoPackagingProduct : _newContextHelper.GetPackagingProduct(batchItem.PkgID);
                if (packaging == null)
                {
                    Log(new CallbackParameters(CallbackReason.BatchItemPackagingNotLoaded)
                    {
                        BatchItem = batchItem
                    });
                    continue;
                }

                var treatment = _newContextHelper.GetInventoryTreatment(batchItem.TrtmtID);
                if (treatment == null)
                {
                    Log(new CallbackParameters(CallbackReason.BatchItemTreatmentNotLoaded)
                    {
                        BatchItem = batchItem
                    });
                    continue;
                }

                int?currentLocationId  = null;
                var productionLocation = _newContextHelper.GetProductionLocation(batchItem.tblLocation);
                if (productionLocation != null)
                {
                    currentLocationId = productionLocation.Id;
                }
                else
                {
                    var warehouseLocation = _newContextHelper.GetLocation(batchItem.LocID);
                    if (warehouseLocation != null)
                    {
                        currentLocationId = warehouseLocation.Id;
                    }
                }

                if (currentLocationId == null)
                {
                    Log(new CallbackParameters(CallbackReason.BatchItemCurrentLocationCouldnotBeDetermined)
                    {
                        BatchItem = batchItem
                    });
                    continue;
                }

                int?warehouseLocationId;
                var warehouseLocationResult = _pickedInventoryItemLocationHelper.DeterminePickedFromLocation(batchItem, out warehouseLocationId);
                if (warehouseLocationResult == PickedInventoryItemLocationHelper.Result.UnableToDetermine)
                {
                    Log(new CallbackParameters(CallbackReason.BatchItemDefaultPickedLocation)
                    {
                        BatchItem = batchItem
                    });
                    warehouseLocationId = _newContextHelper.UnknownFacilityLocation.Id;
                }

                if (warehouseLocationId == null)
                {
                    Log(new CallbackParameters(CallbackReason.BatchItemPickedLocationNotDetermined)
                    {
                        BatchItem = batchItem
                    });
                    continue;
                }

                yield return(new PickedInventoryItem
                {
                    DateCreated = pickedInventory.DateCreated,
                    Sequence = pickedInventory.Sequence,
                    ItemSequence = itemSequence,

                    LotDateCreated = lotKey.LotKey_DateCreated,
                    LotDateSequence = lotKey.LotKey_DateSequence,
                    LotTypeId = lotKey.LotKey_LotTypeId,

                    PackagingProductId = packaging.Id,
                    FromLocationId = warehouseLocationId.Value,
                    TreatmentId = treatment.Id,
                    CurrentLocationId = currentLocationId.Value,
                    ToteKey = new string((batchItem.Tote ?? "").Take(Constants.StringLengths.ToteKeyLength).ToArray()),
                    Quantity = (int)(batchItem.Quantity ?? 0)
                });

                itemSequence += 1;
            }
        }