Esempio n. 1
0
        public void ProcessInputResponse(StockInputResponse inputReponse)
        {
            if (this.initiateStockInputWaitForInputResponse != null)
            {
                this.SendInputMessage(inputReponse.TenantID, inputReponse, inputReponse.Packs,
                                      (this.initiateStockInputState == InitiateStockInputState.Accepted));

                InitiateStockInputMessage initiateStockInputMessage = new InitiateStockInputMessage();
                initiateStockInputMessage.AdoptHeader(initiateStockInputWaitForInputResponse);
                initiateStockInputMessage.InputSource = this.initiateStockInputWaitForInputResponse.InputSource;
                initiateStockInputMessage.InputPoint  = this.initiateStockInputWaitForInputResponse.InputPoint;
                initiateStockInputMessage.Status      = this.initiateStockInputState;

                initiateStockInputMessage.Articles.AddRange(this.initiateStockInputWaitForInputResponse.Articles);
                initiateStockInputMessage.Packs.AddRange(this.initiateStockInputWaitForInputResponse.Packs);

                if (this.initiateStockInputState != InitiateStockInputState.Accepted)
                {
                    StockInputError inputError = new StockInputError();
                    inputError.Type = StockInputErrorType.Rejected;
                    foreach (RobotPack pack in initiateStockInputMessage.Packs)
                    {
                        initiateStockInputMessage.PackErrors.Add(pack, inputError);
                    }
                }

                this.initiateStockInputWaitForInputResponse = null;
            }
            else
            {
                this.DoInputResponseReceived(inputReponse);
            }
        }
        /// <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 response = new InitiateStockInputResponse(converterStream);

            response.ID                  = this.Id;
            response.Destination         = this.Destination;
            response.Source              = this.Source;
            response.IsDeliveryInput     = TypeConverter.ConvertBool(this.IsNewDelivery);
            response.SetPickingIndicator = TypeConverter.ConvertBool(this.SetPickingIndicator);
            response.InputSource         = (this.Details != null) ? TypeConverter.ConvertInt(this.Details.InputSource) : 0;
            response.InputPoint          = (this.Details != null) ? TypeConverter.ConvertInt(this.Details.InputPoint) : 0;
            response.Status              = (this.Details != null) ?
                                           TypeConverter.ConvertEnum <InitiateStockInputState>(this.Details.Status, InitiateStockInputState.Rejected) :
                                           InitiateStockInputState.Rejected;

            if (this.Article == null)
            {
                return(response);
            }

            foreach (var article in this.Article)
            {
                response.Articles.Add(new Interfaces.Types.Articles.RobotArticle()
                {
                    Code               = TextConverter.UnescapeInvalidXmlChars(article.Id),
                    Name               = TextConverter.UnescapeInvalidXmlChars(article.Name),
                    PackagingUnit      = TextConverter.UnescapeInvalidXmlChars(article.PackagingUnit),
                    DosageForm         = TextConverter.UnescapeInvalidXmlChars(article.DosageForm),
                    MaxSubItemQuantity = TypeConverter.ConvertInt(article.MaxSubItemQuantity)
                });

                foreach (var pack in article.Pack)
                {
                    response.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)
                    });
                }
            }

            return(response);
        }
Esempio n. 3
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);
            }
        }