public void DirectOutput(RobotPack pack)
        {
            // send a output response to every PMR conencted and matching tenant.
            foreach (IConverterStream stream in this.converterStreamList)
            {
                if (pack.TenantID != stream.TenantID)
                {
                    continue;
                }

                StockOutputRequest stockOutputRequest = new StockOutputRequest(stream);
                stockOutputRequest.ID       = "1"; // is always 1
                stockOutputRequest.TenantID = pack.TenantID;

                int machineLocation;
                if (int.TryParse(pack.MachineLocation, out machineLocation))
                {
                    stockOutputRequest.Source = machineLocation;
                }
                stockOutputRequest.Destination = 100;

                stockOutputRequest.Order = new StockOutputOrder();
                stockOutputRequest.Order.OutputNumber = 1;

                StockOutputOrderItem orderItem = new StockOutputOrderItem();
                orderItem.RobotArticleCode = pack.RobotArticleCode;
                orderItem.PackID           = pack.ID;
                if (pack.SubItemQuantity == 0)
                {
                    orderItem.RequestedQuantity = 1;
                }
                else
                {
                    orderItem.RequestedSubItemQuantity = pack.SubItemQuantity;
                }

                stockOutputRequest.Order.Items.Add(orderItem);

                // create SimulatorOutputOrder to handle output result.
                SimulatorOutputOrder outputOrder = new SimulatorOutputOrder(
                    this.stock,
                    this.simulatorTenant,
                    this.simulatorStockLocation,
                    stockOutputRequest,
                    OutputResult.Normal,
                    this.enableAutoReply,
                    this.converterStreamList);
                outputOrder.OutputOrderUpdated += this.OutputOrder_OutputOrderUpdated;
                this.orderList.Add(outputOrder);

                this.DoOutputOrderListUpdated();
            }
        }
Пример #2
0
        /// <summary>
        /// Translates this object instance into a Mosaic message.
        /// </summary>
        /// <param name="converterStream">The converter stream instance which request the message conversion.</param>
        /// <returns>
        /// The Mosaic message representation of this object.
        /// </returns>
        public MosaicMessage ToMosaicMessage(IConverterStream converterStream)
        {
            StockInputMessage message = new StockInputMessage(converterStream);

            message.ID            = this.Id;
            message.Source        = this.Source;
            message.Destination   = this.Destination;
            message.IsNewDelivery = TypeConverter.ConvertBool(this.IsNewDelivery);

            if (this.Article.Count > 0)
            {
                foreach (var article in this.Article)
                {
                    var a = new Interfaces.Types.Articles.RobotArticle();
                    a.DosageForm         = TextConverter.UnescapeInvalidXmlChars(article.DosageForm);
                    a.Code               = TextConverter.UnescapeInvalidXmlChars(article.Id);
                    a.Name               = TextConverter.UnescapeInvalidXmlChars(article.Name);
                    a.PackagingUnit      = TextConverter.UnescapeInvalidXmlChars(article.PackagingUnit);
                    a.MaxSubItemQuantity = TypeConverter.ConvertInt(article.MaxSubItemQuantity);
                    message.Articles.Add(a);

                    foreach (var pack in article.Pack)
                    {
                        var p = new RobotPack
                        {
                            ID              = (long)TypeConverter.ConvertULong(pack.Id),
                            DeliveryNumber  = TextConverter.UnescapeInvalidXmlChars(pack.DeliveryNumber),
                            BatchNumber     = TextConverter.UnescapeInvalidXmlChars(pack.BatchNumber),
                            ExternalID      = TextConverter.UnescapeInvalidXmlChars(pack.ExternalId),
                            ExpiryDate      = TypeConverter.ConvertDate(pack.ExpiryDate),
                            StockInDate     = TypeConverter.ConvertDate(pack.StockInDate),
                            ScanCode        = TextConverter.UnescapeInvalidXmlChars(pack.ScanCode),
                            Depth           = TypeConverter.ConvertInt(pack.Depth),
                            Width           = TypeConverter.ConvertInt(pack.Width),
                            Height          = TypeConverter.ConvertInt(pack.Height),
                            Shape           = TypeConverter.ConvertEnum <PackShape>(pack.Shape, PackShape.Cuboid),
                            IsBlocked       = (TypeConverter.ConvertEnum <PackState>(pack.State, PackState.Available) != PackState.Available),
                            SubItemQuantity = TypeConverter.ConvertInt(pack.SubItemQuantity),
                            StockLocationID = string.IsNullOrEmpty(pack.StockLocationId) ? string.Empty : TextConverter.UnescapeInvalidXmlChars(pack.StockLocationId),
                            MachineLocation = string.IsNullOrEmpty(pack.MachineLocation) ? string.Empty : TextConverter.UnescapeInvalidXmlChars(pack.MachineLocation),
                            IsInFridge      = TypeConverter.ConvertBool(pack.IsInFridge)
                        };

                        message.Packs.Add(p);
                        message.Handlings.Add(p, pack.Handling.Input);
                    }
                }
            }

            return(message);
        }
Пример #3
0
        public void LoadInput(string articleCode,
                              string articleName,
                              string articleDosageForm,
                              string articlePackagingUnit,
                              int articleMaxSubItemQuantity,
                              string batchNumber,
                              string externalID,
                              DateTime expiryDate,
                              int subItemQuantity,
                              string machineLocation,
                              string tenantID,
                              string stockLocationInfoID,
                              bool updateUI = true)
        {
            // 1 add Item to the stock.
            StockProduct currentStockProduct = this.GetStockProduct(articleCode);
            RobotPack    pack = new RobotPack();

            pack.RobotArticleCode = articleCode;
            pack.ID     = this.GetNextPackID();
            pack.Depth  = 60;
            pack.Height = 60;
            pack.Width  = 60;
            pack.Shape  = PackShape.Cuboid;

            pack.BatchNumber     = batchNumber;
            pack.ExternalID      = externalID;
            pack.ExpiryDate      = expiryDate;
            pack.SubItemQuantity = subItemQuantity;
            pack.MachineLocation = machineLocation;
            pack.StockLocationID = stockLocationInfoID;
            pack.TenantID        = tenantID;
            currentStockProduct.AddItem(pack);

            // 2 update Article Information
            StorageSystemArticleInformation currentArticleInformation =
                this.articleInformationList.GetArticleInformation(articleCode, true);

            currentArticleInformation.Name               = articleName;
            currentArticleInformation.DosageForm         = articleDosageForm;
            currentArticleInformation.PackagingUnit      = articlePackagingUnit;
            currentArticleInformation.MaxSubItemQuantity = articleMaxSubItemQuantity;

            // 3 forward stock update Event.
            if (updateUI)
            {
                this.DoStockUpdated();
            }
        }
        private StockOutputOrderItemPack GetOrderItemPackFromStock(
            StockOutputOrder outputOrder,
            StorageSystemArticleInformation articleInformation,
            RobotPack packInStock)
        {
            StockOutputOrderItemPack result = new StockOutputOrderItemPack();

            if (articleInformation != null)
            {
                result.RobotArticleCode               = articleInformation.Code;
                result.RobotArticleName               = articleInformation.Name;
                result.RobotArticleDosageForm         = articleInformation.DosageForm;
                result.RobotArticlePackagingUnit      = articleInformation.PackagingUnit;
                result.RobotArticleMaxSubItemQuantity = articleInformation.MaxSubItemQuantity;
            }
            else
            {
                result.RobotArticleCode = packInStock.RobotArticleCode;
            }

            result.BoxNumber       = outputOrder.BoxNumber;
            result.BatchNumber     = packInStock.BatchNumber;
            result.Depth           = packInStock.Depth;
            result.Height          = packInStock.Height;
            result.Width           = packInStock.Width;
            result.ExpiryDate      = packInStock.ExpiryDate;
            result.ExternalID      = packInStock.ExternalID;
            result.ID              = packInStock.ID;
            result.LabelState      = StockOutputOrderItemPackLabelState.Labelled;
            result.OutputNumber    = outputOrder.OutputNumber;
            result.OutputPoint     = outputOrder.OutputPoint;
            result.Shape           = packInStock.Shape;
            result.SubItemQuantity = packInStock.SubItemQuantity;

            result.MachineLocation          = packInStock.MachineLocation;
            result.StockLocationID          = packInStock.StockLocationID;
            result.StockLocationDescription = this.simulatorStockLocation.GetDescription(result.StockLocationID);
            result.TenantID          = packInStock.TenantID;
            result.TenantDescription = this.simulatorTenant.GetDescription(result.TenantID);

            return(result);
        }
Пример #5
0
        private void dataGridViewPackStock_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex == -1)
            {
                return;
            }

            RobotPack selectedPack = (dataGridViewPackStock.Rows[e.RowIndex].DataBoundItem as RobotPack);

            if (e.ColumnIndex == this.ColumnStockOutputPack.Index)
            {
                this.simulatorCore.OutputCore.DirectOutput(selectedPack);
            }

            if (e.ColumnIndex == this.ColumnStockDeletePack.Index)
            {
                StockProduct stockProduct = this.simulatorCore.Stock.GetStockProduct(selectedPack.RobotArticleCode);
                stockProduct.RemoveItem(selectedPack);
                List <RobotPack> productPackList = stockProduct.GetPackList("");
                this.UpdateDataGridView(dataGridViewPackStock, productPackList);

                dataGridViewProductStock.CurrentRow.Cells["dataGridViewTextBoxColumnStockListPackCount"].Value = productPackList.Count;
            }
        }
Пример #6
0
        /// <summary>
        /// Gets a list of packs which fit to the specified filter criteria list.
        /// </summary>
        /// <param name="criteriaList">The criteria list to use.</param>
        /// <returns>List of packs that match the filter.</returns>
        public List <RobotPack> GetPacks(List <StockInfoCriteria> criteriaList)
        {
            List <RobotPack> resultList = new List <RobotPack>();
            StringBuilder    cmdBuilder = new StringBuilder();

            cmdBuilder.Append("SELECT * FROM RobotPacks ");
            cmdBuilder.Append(" WHERE TenantID = @TenantID");
            cmdBuilder.Append(criteriaList.Count > 0 ? " AND (" : string.Empty);

            for (int i = 0; i < criteriaList.Count; ++i)
            {
                StringBuilder conditionBuilder = new StringBuilder();

                if (string.IsNullOrEmpty(criteriaList[i].RobotArticleCode) == false)
                {
                    conditionBuilder.Append(string.Format("RobotArticleCode=@RobotArticleCode{0}", i));
                }

                if (string.IsNullOrEmpty(criteriaList[i].PISArticleCode) == false)
                {
                    // recursive with to get all PIS article matching the PISArticleCode and all child articles. (safety limit to 100 recursive select.
                    cmdBuilder.Insert(0, string.Format(@"with RECURSIVE PISArticlesTree(ParentPisArticleID, ID, code, RobotArticleCode, level) as
                        (Select null, ID, code, RobotArticleCode, 0 from PISArticles where code = @PISArticleCode{0}
                        UNION ALL
                        Select pisArticleChild.ParentPisArticleID, pisArticleChild.ID, pisArticleChild.code, pisArticleChild.RobotArticleCode, level + 1 
                            from PISArticles pisArticleChild
                            inner join PISArticlesTree as pisArticleParent on pisArticleChild.ParentPisArticleID = pisArticleParent.id and level < 100)
                        ", i));

                    // get stock matching the RobotArticleCode of the PIS articles related to the PISArticleCode
                    conditionBuilder.Append("RobotArticleCode in (Select RobotArticleCode from PISArticlesTree where RobotArticleCode is not null)");
                }

                if (string.IsNullOrEmpty(criteriaList[i].BatchNumber) == false)
                {
                    conditionBuilder.Append(conditionBuilder.Length > 0 ? " AND " : string.Empty);
                    conditionBuilder.Append(string.Format("BatchNumber=@BatchNumber{0}", i));
                }

                if (string.IsNullOrEmpty(criteriaList[i].ExternalID) == false)
                {
                    conditionBuilder.Append(conditionBuilder.Length > 0 ? " AND " : string.Empty);
                    conditionBuilder.Append(string.Format("ExternalID=@ExternalID{0}", i));
                }

                if (string.IsNullOrEmpty(criteriaList[i].StockLocationID) == false)
                {
                    conditionBuilder.Append(conditionBuilder.Length > 0 ? " AND " : string.Empty);
                    conditionBuilder.Append(string.Format("StockLocationID=@StockLocationID{0}", i));
                }

                if (string.IsNullOrEmpty(criteriaList[i].MachineLocation) == false)
                {
                    conditionBuilder.Append(conditionBuilder.Length > 0 ? " AND " : string.Empty);
                    conditionBuilder.Append(string.Format("MachineLocation=@MachineLocation{0}", i));
                }

                if (conditionBuilder.Length == 0)
                {
                    continue;
                }

                cmdBuilder.Append("(");
                cmdBuilder.Append(conditionBuilder);
                conditionBuilder.Clear();
                cmdBuilder.Append(")");

                if (i < criteriaList.Count - 1)
                {
                    cmdBuilder.Append(" OR ");
                }
            }

            cmdBuilder.Append(criteriaList.Count > 0 ? ")" : string.Empty);
            cmdBuilder.Append(";");

            using (SQLiteCommand cmd = new SQLiteCommand(cmdBuilder.ToString()))
            {
                cmd.Parameters.Add(new SQLiteParameter("@TenantID", _tenantId));

                for (int i = 0; i < criteriaList.Count; ++i)
                {
                    if (string.IsNullOrEmpty(criteriaList[i].RobotArticleCode) == false)
                    {
                        cmd.Parameters.Add(new SQLiteParameter(string.Format("@RobotArticleCode{0}", i), criteriaList[i].RobotArticleCode));
                    }

                    if (string.IsNullOrEmpty(criteriaList[i].PISArticleCode) == false)
                    {
                        cmd.Parameters.Add(new SQLiteParameter(string.Format("@PISArticleCode{0}", i), criteriaList[i].PISArticleCode));
                    }

                    if (string.IsNullOrEmpty(criteriaList[i].BatchNumber) == false)
                    {
                        cmd.Parameters.Add(new SQLiteParameter(string.Format("@BatchNumber{0}", i), criteriaList[i].BatchNumber));
                    }

                    if (string.IsNullOrEmpty(criteriaList[i].ExternalID) == false)
                    {
                        cmd.Parameters.Add(new SQLiteParameter(string.Format("@ExternalID{0}", i), criteriaList[i].ExternalID));
                    }

                    if (string.IsNullOrEmpty(criteriaList[i].StockLocationID) == false)
                    {
                        cmd.Parameters.Add(new SQLiteParameter(string.Format("@StockLocationID{0}", i), criteriaList[i].StockLocationID));
                    }

                    if (string.IsNullOrEmpty(criteriaList[i].MachineLocation) == false)
                    {
                        cmd.Parameters.Add(new SQLiteParameter(string.Format("@MachineLocation{0}", i), criteriaList[i].MachineLocation));
                    }
                }

                using (DataTable tblResult = _database.Execute(cmd))
                {
                    if (tblResult == null)
                    {
                        return(resultList);
                    }

                    foreach (DataRow row in tblResult.Rows)
                    {
                        RobotPack pack = new RobotPack();
                        pack.Load(row, _database);
                        resultList.Add(pack);
                    }
                }
            }

            cmdBuilder.Clear();
            return(resultList);
        }
Пример #7
0
 public void RemoveItem(RobotPack packInfo)
 {
     this.stockPackList.Remove(packInfo);
 }
Пример #8
0
 public void AddItem(RobotPack packInfo)
 {
     this.stockPackList.Add(packInfo);
 }