/// <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)
        {
            var request = new InitiateStockInputRequest(converterStream);

            request.ID                  = this.Id;
            request.Destination         = this.Destination;
            request.Source              = this.Source;
            request.IsDeliveryInput     = TypeConverter.ConvertBool(this.IsNewDelivery);
            request.SetPickingIndicator = TypeConverter.ConvertBool(this.SetPickingIndicator);
            request.InputSource         = (this.Details != null) ? TypeConverter.ConvertInt(this.Details.InputSource) : 0;
            request.InputPoint          = (this.Details != null) ? TypeConverter.ConvertInt(this.Details.InputPoint) : 0;

            if ((this.Article != null) && (this.Article.Pack != null))
            {
                foreach (var pack in this.Article.Pack)
                {
                    request.Packs.Add(new Interfaces.Types.Packs.RobotPack()
                    {
                        ScanCode        = TextConverter.UnescapeInvalidXmlChars(pack.ScanCode),
                        DeliveryNumber  = TextConverter.UnescapeInvalidXmlChars(pack.DeliveryNumber),
                        BatchNumber     = TextConverter.UnescapeInvalidXmlChars(pack.BatchNumber),
                        ExternalID      = TextConverter.UnescapeInvalidXmlChars(pack.ExternalId),
                        ExpiryDate      = TypeConverter.ConvertDate(pack.ExpiryDate),
                        SubItemQuantity = TypeConverter.ConvertInt(pack.SubItemQuantity),
                        Depth           = TypeConverter.ConvertInt(pack.Depth),
                        Width           = TypeConverter.ConvertInt(pack.Width),
                        Height          = TypeConverter.ConvertInt(pack.Height),
                        Shape           = TypeConverter.ConvertEnum <PackShape>(pack.Shape, PackShape.Cuboid),
                        StockLocationID = string.IsNullOrEmpty(pack.StockLocationId) ? string.Empty : TextConverter.UnescapeInvalidXmlChars(pack.StockLocationId),
                        MachineLocation = string.IsNullOrEmpty(pack.MachineLocation) ? string.Empty : TextConverter.UnescapeInvalidXmlChars(pack.MachineLocation)
                    });
                }
            }

            return(request);
        }
예제 #2
0
        public void ProcessInitiateStockInputRequest(InitiateStockInputRequest initiateInputRequest)
        {
            InitiateStockInputResponse initiateInputReponse = new InitiateStockInputResponse();

            initiateInputReponse.AdoptHeader(initiateInputRequest);
            initiateInputReponse.IsDeliveryInput     = initiateInputRequest.IsDeliveryInput;
            initiateInputReponse.SetPickingIndicator = initiateInputRequest.SetPickingIndicator;
            initiateInputReponse.InputSource         = initiateInputRequest.InputSource;
            initiateInputReponse.InputPoint          = initiateInputRequest.InputPoint;
            initiateInputReponse.Status = this.initiateStockInputState;

            foreach (RobotPack pack in initiateInputRequest.Packs)
            {
                bool articleInfoFound = false;
                foreach (RobotArticle article in initiateInputReponse.Articles)
                {
                    if (article.Code == pack.RobotArticleCode)
                    {
                        articleInfoFound = true;
                        break;
                    }
                }

                if (!articleInfoFound)
                {
                    // get article Info
                    StorageSystemArticleInformation articleInformation =
                        this.stock.ArticleInformationList.GetArticleInformation(pack.RobotArticleCode, false);

                    if (articleInformation == null)
                    {
                        // article not found ? try with the scan code.
                        articleInformation = this.stock.ArticleInformationList.GetArticleInformation(pack.ScanCode, false);
                    }

                    if (articleInformation != null)
                    {
                        RobotArticle newArticle = new RobotArticle();
                        newArticle.Code               = articleInformation.Code;
                        newArticle.Name               = articleInformation.Name;
                        newArticle.DosageForm         = articleInformation.DosageForm;
                        newArticle.PackagingUnit      = articleInformation.PackagingUnit;
                        newArticle.MaxSubItemQuantity = articleInformation.MaxSubItemQuantity;
                        initiateInputReponse.Articles.Add(newArticle);
                    }
                }
            }

            initiateInputReponse.Packs.AddRange(initiateInputRequest.Packs);
            initiateInputReponse.ConverterStream.Write(initiateInputReponse);

            if (initiateInputReponse.Status == InitiateStockInputState.Accepted)
            {
                this.initiateStockInputWaitForInputResponse = initiateInputReponse;
                this.ScanPack(initiateInputReponse.TenantID,
                              "",
                              initiateInputRequest.SetPickingIndicator,
                              initiateInputRequest.IsDeliveryInput,
                              initiateInputReponse.Packs);
            }
        }