Exemplo n.º 1
0
        private MessagePart CreateResponsePart(MessagePart part, VocollectSession session)
        {
            MessagePart responsePart = new VocollectMessagePart();

            responsePart.Properties.Write("SystemContainerId", part.Properties.ReadAsString("SEQNUM").PadLeft(session.ReadAsInt("VOICE_MIN_DIGITS_CARCODE"), '0'));
            responsePart.Properties.Write("ScannedContainerValidation", part.Properties.Read("CARCODE"));

            string carCode = part.Properties.ReadAsString("CARCODE");

            if (carCode.Length > session.ReadAsDecimal("VOICE_MIN_DIGITS_CARCODE"))
            {
                carCode = carCode.Substring(carCode.Length - session.ReadAsInt("VOICE_MIN_DIGITS_CARCODE"), session.ReadAsInt("VOICE_MIN_DIGITS_CARCODE"));
            }
            else if (carCode.Length < session.ReadAsInt("VOICE_MIN_DIGITS_CARCODE"))
            {
                carCode = carCode.PadLeft(session.ReadAsInt("VOICE_MIN_DIGITS_CARCODE"), '0');
            }

            responsePart.Properties.Write("SpokenContainerValidation", carCode);
            responsePart.Properties.Write("WorkId", "1");
            responsePart.Properties.Write("TargetContainer", "");
            responsePart.Properties.Write("ContainerStatus", "O");
            responsePart.Properties.Write("Printed", "1");
            responsePart.Properties.Write("ContainerType", part.Properties.Read("CARNAME"));
            responsePart.Properties.Write("Area", part.Properties.Read("WSID"));
            responsePart.Properties.Write("Location", part.Properties.Read("WPADR"));
            responsePart.Properties.Write("CustomerNumber", GetCotainerHashCode(part).ToString());
            responsePart.Properties.Write("ErrorCode", VocollectErrorCodeNoError);
            responsePart.Properties.Write("Message", "");

            return(responsePart);
        }
Exemplo n.º 2
0
        public static void Print(string printerNumber, string containerId, VocollectSession session, bool isReprint)
        {
            if ((string.IsNullOrEmpty(printerNumber)) || (printerNumber == "1"))
            {
                printerNumber = "";
            }

            CorrelationContext context;

            /* Save printer number in session for use when finish pick to print PS */
            session.Write("PRINTERNUMBER", printerNumber);

            if (string.IsNullOrEmpty(containerId) && isReprint)
            {
                MultiPartMessage reprintMsg = CreateRequestMessage("wlvoicepick", "print_allloadcarriers", session);
                reprintMsg.Properties.Write("PBHEADID_I", session.ReadAsString("PBHEADID"));
                reprintMsg.Properties.Write("TERID_I", session.ReadAsString("TERID"));
                reprintMsg.Properties.Write("EMPID_I", session.ReadAsString("EMPID"));
                reprintMsg.Properties.Write("PRTID_I", printerNumber);

                reprintMsg.Properties.Write("ALMID_O", "");

                MessageEngine.Instance.TransmitRequestMessage(reprintMsg, reprintMsg.MessageId, out context);
            }
            else if (string.IsNullOrEmpty(containerId))
            {
                MultiPartMessage whMsg = CreateRequestMessage("wlvoicepick", "print", session);
                whMsg.Properties.Write("PBHEADID_I", session.ReadAsString("PBHEADID"));
                whMsg.Properties.Write("TERID_I", session.ReadAsString("TERID"));
                whMsg.Properties.Write("EMPID_I", session.ReadAsString("EMPID"));
                whMsg.Properties.Write("PRTID_I", printerNumber);

                if (string.IsNullOrEmpty(session.ReadAsString("PBROWID")) && (session.ReadAsInt("PBROW_COUNT") > 0))
                {
                    whMsg.Properties.Write("PRINTCOD_I", "BP");
                }
                else
                {
                    whMsg.Properties.Write("PRINTCOD_I", "AP");
                }

                whMsg.Properties.Write("ALMID_O", "");

                MessageEngine.Instance.TransmitRequestMessage(whMsg, whMsg.MessageId, out context);
            }
            else
            {
                MultiPartMessage reprintMsg = CreateRequestMessage("wlvoicepick", "print_singleloadcarrier", session);
                reprintMsg.Properties.Write("PBHEADID_I", session.ReadAsString("PBHEADID"));
                reprintMsg.Properties.Write("SEQNUM_I", TrimContainerId(containerId));
                reprintMsg.Properties.Write("TERID_I", session.ReadAsString("TERID"));
                reprintMsg.Properties.Write("EMPID_I", session.ReadAsString("EMPID"));
                reprintMsg.Properties.Write("PRTID_I", printerNumber);

                reprintMsg.Properties.Write("ALMID_O", "");

                MessageEngine.Instance.TransmitRequestMessage(reprintMsg, reprintMsg.MessageId, out context);
            }
        }
        /// <summary>
        /// Invokes the subscriber.
        /// </summary>
        /// <param name="msg">A reference to the subscribed message.</param>
        /// <param name="session">The current <see cref="VocollectSession"/> object.</param>
        /// <exception cref="WarehouseAdapterException">
        /// </exception>
        /// <exception cref="MessageEngineException">
        /// </exception>
        public override void Invoke(MultiPartMessage msg, VocollectSession session)
        {
            MultiPartMessage responseMsg = CreateResponseMessage(msg);

            responseMsg.Properties.Write("DeliveryLocation", "");
            responseMsg.Properties.Write("DeliveryLocationCheckDigits", 0);
            responseMsg.Properties.Write("ContainerId", 0);
            responseMsg.Properties.Write("ErrorCode", VocollectErrorCodeNoError);
            responseMsg.Properties.Write("Message", "");

            try
            {
                using (TransactionScope transactionScope = new TransactionScope())
                {
                    /* Execute drop of previous container if not already dropped using the alternate delivery command */
                    if (!string.IsNullOrEmpty(session.ReadAsString("DROPSEQNUM")))
                    {
                        PrTaskLUTAltDeliveryLocations.DropLoadCarrier(session.ReadAsString("DROPSEQNUM"), session.ReadAsString("DROPWSID"), session.ReadAsString("DROPWPADR"), session);
                    }

                    MultiPartMessage whMsg = CreateRequestMessage("wlvoicepick", "get_drop_location", session);
                    whMsg.Properties.Write("TERID_I", session.ReadAsString("TERID"));
                    whMsg.Properties.Write("PBHEADID_I", session.ReadAsString("PBHEADID"));
                    whMsg.Properties.Write("SEQNUM_I", TrimContainerId(msg.Properties.ReadAsString("ContainerId")));
                    whMsg.Properties.Write("DROPWSID_O", "");
                    whMsg.Properties.Write("DROPWPADR_O", "");
                    whMsg.Properties.Write("WPCOD_O", "");
                    whMsg.Properties.Write("SLOT_O", "");
                    whMsg.Properties.Write("ALMID_O", "");

                    CorrelationContext context;

                    MessageEngine.Instance.TransmitRequestMessage(whMsg, whMsg.MessageId, out context);

                    PropertyCollection properties = context.ResponseMessages[0].Properties;

                    if (!string.IsNullOrEmpty(properties.ReadAsString("SLOT_O")))
                    {
                        /* VOICEPICK015 = 'slot' */
                        string slot = GetCachedAlarmText("VOICEPICK015", session);

                        responseMsg.Properties.Write("DeliveryLocation", properties.Read("DROPWSID_O") + " , " + properties.Read("DROPWPADR_O") + " , " + slot + " , " + properties.Read("SLOT_O"));
                    }
                    else
                    {
                        responseMsg.Properties.Write("DeliveryLocation", properties.Read("DROPWSID_O") + " , " + properties.Read("DROPWPADR_O"));
                    }

                    if (session.ReadAsString("VERIFY_DROPWPADR") == "1")
                    {
                        string checkDigits = properties.ReadAsString("WPCOD_O");

                        if (!string.IsNullOrEmpty(checkDigits))
                        {
                            long temp;

                            if (!long.TryParse(checkDigits, out temp))
                            {
                                checkDigits = "";
                            }

                            if (checkDigits.Length > session.ReadAsInt("VOICE_MIN_DIGITS_PPCODE"))
                            {
                                checkDigits = checkDigits.Substring(checkDigits.Length - session.ReadAsInt("VOICE_MIN_DIGITS_PPCODE"), session.ReadAsInt("VOICE_MIN_DIGITS_PPCODE"));
                            }
                        }

                        responseMsg.Properties.Write("DeliveryLocationCheckDigits", checkDigits);
                    }
                    else
                    {
                        responseMsg.Properties.Write("DeliveryLocationCheckDigits", "");
                    }

                    responseMsg.Properties.Write("ContainerId", msg.Properties.ReadAsString("ContainerId"));

                    session.Write("DROPSEQNUM", TrimContainerId(msg.Properties.ReadAsString("ContainerId")));
                    session.Write("DROPWSID", properties.Read("DROPWSID_O"));
                    session.Write("DROPWPADR", properties.Read("DROPWPADR_O"));

                    transactionScope.Complete();
                }
            }
            catch (WarehouseAdapterException ex)
            {
                responseMsg.Properties.Write("ErrorCode", WarehouseAlarm);
                responseMsg.Properties.Write("Message", ex.Message);

                throw;
            }
            catch (Exception)
            {
                responseMsg.Properties.Write("ErrorCode", VocollectErrorCodeCritialError);
                responseMsg.Properties.Write("Message", GetCriticalErrorMessageText(msg));

                throw;
            }
            finally
            {
                TransmitResponseMessage(responseMsg, session);
            }
        }
        /// <summary>
        /// Invokes the subscriber.
        /// </summary>
        /// <param name="msg">A reference to the subscribed message.</param>
        /// <param name="session">The current <see cref="VocollectSession"/> object.</param>
        /// <exception cref="WarehouseAdapterException">
        /// </exception>
        /// <exception cref="MessageEngineException">
        /// </exception>
        public override void Invoke(MultiPartMessage msg, VocollectSession session)
        {
            MultiPartMessage responseMsg = CreateResponseMessage(msg);

            try
            {
                CorrelationContext context;

                if (!string.IsNullOrEmpty(session.ReadAsString("PBROWID")))
                {
                    /* Refresh rows in status Registrated before the shorts pass */
                    MultiPartMessage refreshMsg = CreateRequestMessage("wlvoicepick", "refresh_pickorderrows", session);
                    refreshMsg.Properties.Write("TERID_I", session.ReadAsString("TERID"));
                    refreshMsg.Properties.Write("PBHEADID_I", session.ReadAsString("PBHEADID"));
                    refreshMsg.Properties.Write("EMPID_I", session.ReadAsString("EMPID"));
                    refreshMsg.Properties.Write("ALMID_O", "");

                    MessageEngine.Instance.TransmitRequestMessage(refreshMsg, refreshMsg.MessageId, out context);
                }

                MultiPartMessage whMsg = CreateRequestMessage("wlvoicepick", "get_mt_pbrow", session);
                whMsg.Properties.Write("TERID_I", session.ReadAsString("TERID"));
                whMsg.Properties.Write("PBHEADID_I", session.ReadAsString("PBHEADID"));
                whMsg.Properties.Write("NLANGCOD_I", session.ReadAsString("NLANGCOD"));
                whMsg.Properties.Write("PBROW_Cur_O", new object());
                whMsg.Properties.Write("ALMID_O", "");

                MessageEngine.Instance.TransmitRequestMessage(whMsg, whMsg.MessageId, out context);

                PropertyCollection properties = context.ResponseMessages[0].Parts[0].Properties;

                string prevContainer = "";
                string prevLocation  = "";
                int    rowCount      = 0;

                foreach (MessagePart part in context.ResponseMessages[0].Parts)
                {
                    string status  = null;
                    double pickQty = 0;

                    if ((part.Properties.ReadAsString("PBROWSTAT") == PBROWSTAT_Finished) &&
                        (part.Properties.ReadAsDouble("PICKQTY") < part.Properties.ReadAsDouble("ORDQTY")))
                    {
                        rowCount++;
                        status  = "G"; //Go back  for shortage
                        pickQty = part.Properties.ReadAsDouble("ORDQTY") - part.Properties.ReadAsDouble("PICKQTY");
                    }
                    else if (((part.Properties.ReadAsString("PBROWSTAT") == PBROWSTAT_Started) ||
                              (part.Properties.ReadAsString("PBROWSTAT") == PBROWSTAT_Registrated)) &&
                             (!string.IsNullOrEmpty(session.ReadAsString("PBROWID"))))
                    {
                        rowCount++;
                        status  = "S"; //Skipped
                        pickQty = part.Properties.ReadAsDouble("ORDQTY");
                    }
                    else if ((part.Properties.ReadAsString("PBROWSTAT") == PBROWSTAT_Started) ||
                             (part.Properties.ReadAsString("PBROWSTAT") == PBROWSTAT_Registrated))
                    {
                        rowCount++;
                        status  = "N"; //Not picked
                        pickQty = part.Properties.ReadAsDouble("ORDQTY");
                    }
                    else
                    {
                        status = "P"; //Picked
                    }
                    MessagePart responsePart = new VocollectMessagePart();

                    responsePart.Properties.Write("Status", status);
                    responsePart.Properties.Write("BaseItem", "0");
                    responsePart.Properties.Write("Sequence", part.Properties.Read("PBROWID"));

                    /* Check if multiple picks for same location and pick load carrier */
                    if ((prevLocation == part.Properties.ReadAsString("PPKEY")) &&
                        (prevContainer == part.Properties.ReadAsString("SEQNUM")) &&
                        (session.ReadAsInt("NOCARS") == 1))
                    {
                        /* Append PBROWID to make location unique to prevent terminal from merging the lines */
                        responsePart.Properties.Write("LocationId", string.Format("{0}|{1}|{2}", part.Properties.Read("PPKEY"), part.Properties.ReadAsString("ITEID"), part.Properties.Read("PBROWID")));
                    }
                    else
                    {
                        /*Append PAKID to make location unique for each pick package. Will prevent terminal from merging different pick packages*/
                        responsePart.Properties.Write("LocationId", string.Format("{0}|{1}|{2}", part.Properties.Read("PPKEY"), part.Properties.ReadAsString("ITEID"), part.Properties.Read("PAKID")));
                    }

                    responsePart.Properties.Write("Region", "0");

                    /* VOICEPICK013 = 'Go to area {0}' */
                    string preAisle = GetCachedAlarmText("VOICEPICK013", session);
                    preAisle = string.Format(preAisle, part.Properties.ReadAsString("WSNAME").PadRight(35, ' '));
                    responsePart.Properties.Write("PreAisleDirection", preAisle);

                    responsePart.Properties.Write("Aisle", part.Properties.ReadAsString("AISLE").PadRight(3, ' '));
                    responsePart.Properties.Write("PostAisleDirection", "");

                    string slot = part.Properties.ReadAsString("WPADR");

                    string itemLoadId = part.Properties.ReadAsString("ITEID");

                    if (!string.IsNullOrEmpty(itemLoadId))
                    {
                        if (itemLoadId.Length > session.ReadAsInt("VOICE_DIGITS_ITEID"))
                        {
                            itemLoadId = itemLoadId.Substring(itemLoadId.Length - session.ReadAsInt("VOICE_DIGITS_ITEID"), session.ReadAsInt("VOICE_DIGITS_ITEID"));
                        }
                    }

                    if ((part.Properties.ReadAsString("PBROWSTAT") == PBROWSTAT_Registrated) ||
                        (((part.Properties.ReadAsString("ITEVERIFY") == "1") || (part.Properties.ReadAsString("ITETRACE") == "1")) &&
                         (string.IsNullOrEmpty(part.Properties.ReadAsString("ITEID")))))
                    {
                        /* No item load found */
                        slot += "," + GetCachedAlarmText("VOICEPICK010", session);
                    }
                    else if (part.Properties.ReadAsString("ITEVERIFY") == "1")
                    {
                        /* Append verify item load id to slot */
                        slot += string.Format("," + GetCachedAlarmText("VOICEPICK008", session), itemLoadId);
                    }
                    else if (part.Properties.ReadAsString("ITEVERIFY") == "2")
                    {
                        /* Append verify lot to slot */
                        string lot = part.Properties.ReadAsString("PRODLOT");

                        if (!string.IsNullOrEmpty(lot))
                        {
                            if (lot.Length > session.ReadAsInt("VOICE_CHARS_PRODLOT"))
                            {
                                lot = lot.Substring(lot.Length - session.ReadAsInt("VOICE_CHARS_PRODLOT"), session.ReadAsInt("VOICE_CHARS_PRODLOT"));
                            }
                        }

                        slot += string.Format("," + GetCachedAlarmText("VOICEPICK017", session), lot);
                    }
                    else if (!string.IsNullOrEmpty(part.Properties.ReadAsString("ITEID")))
                    {
                        /* Append item load id to slot */
                        slot += string.Format("," + GetCachedAlarmText("VOICEPICK009", session), itemLoadId);
                    }

                    responsePart.Properties.Write("Slot", slot.PadRight(64, ' '));

                    responsePart.Properties.Write("QuantityToPick", pickQty);
                    responsePart.Properties.Write("UnitOfMeasure", part.Properties.ReadAsString("PAKNAME").Replace('"', ' '));
                    responsePart.Properties.Write("ItemNumber", part.Properties.Read("ARTID"));
                    responsePart.Properties.Write("VariableWeight", part.Properties.Read("MEASURE"));

                    /* Convert weight tolerances from per LUM to per package */
                    double baseQty = part.Properties.ReadAsDouble("BASEQTY");

                    if (string.IsNullOrEmpty(part.Properties.ReadAsString("MEASQTYLOTOL")))
                    {
                        responsePart.Properties.Write("VariableWeightMinimum", "000000.0000");
                    }
                    else
                    {
                        double weightMinimum = part.Properties.ReadAsDouble("MEASQTYLOTOL") * baseQty;
                        responsePart.Properties.Write("VariableWeightMinimum", weightMinimum);
                    }

                    if (string.IsNullOrEmpty(part.Properties.ReadAsString("MEASQTYUPTOL")))
                    {
                        responsePart.Properties.Write("VariableWeightMaximum", "999999.0000");
                    }
                    else
                    {
                        double weightMaximum = part.Properties.ReadAsDouble("MEASQTYUPTOL") * baseQty;
                        responsePart.Properties.Write("VariableWeightMaximum", weightMaximum);
                    }

                    responsePart.Properties.Write("QuantityPicked", "".PadLeft(5, '0'));

                    #region Check digits, product verification id and item load id

                    string checkDigits = part.Properties.ReadAsString("PPCODE");

                    if (part.Properties.ReadAsString("ITEVERIFY") == "1")
                    {
                        /* Verify pick location by item load id */

                        string verifyItemLoadId = part.Properties.ReadAsString("ITEID");

                        if (!string.IsNullOrEmpty(verifyItemLoadId))
                        {
                            if (verifyItemLoadId.Length > session.ReadAsInt("VOICE_MIN_DIGITS_ITEVERIFY"))
                            {
                                verifyItemLoadId = verifyItemLoadId.Substring(verifyItemLoadId.Length - session.ReadAsInt("VOICE_MIN_DIGITS_ITEVERIFY"), session.ReadAsInt("VOICE_MIN_DIGITS_ITEVERIFY"));
                            }
                        }

                        if ((part.Properties.ReadAsString("PBROWSTAT") == PBROWSTAT_Registrated) ||
                            ((part.Properties.ReadAsString("ITEVERIFY") == "1") &&
                             (string.IsNullOrEmpty(part.Properties.ReadAsString("ITEID")))))
                        {
                            responsePart.Properties.Write("CheckDigits", "");
                            responsePart.Properties.Write("ScanProductId", part.Properties.ReadAsString("ITEID"));
                            responsePart.Properties.Write("SpokenProductId", "00000");
                        }
                        else
                        {
                            responsePart.Properties.Write("CheckDigits", "0");
                            responsePart.Properties.Write("ScanProductId", part.Properties.ReadAsString("ITEID"));
                            responsePart.Properties.Write("SpokenProductId", verifyItemLoadId);
                        }
                    }
                    else if (part.Properties.ReadAsString("ITEVERIFY") == "2")
                    {
                        /* Verify pick location by lot */

                        string verifyLot = part.Properties.ReadAsString("PRODLOT");

                        if (!string.IsNullOrEmpty(verifyLot))
                        {
                            if (verifyLot.Length > session.ReadAsInt("VOICE_MIN_CHARS_PRODLOTVERIFY"))
                            {
                                verifyLot = verifyLot.Substring(verifyLot.Length - session.ReadAsInt("VOICE_MIN_CHARS_PRODLOTVERIFY"), session.ReadAsInt("VOICE_MIN_CHARS_PRODLOTVERIFY"));
                            }
                        }

                        responsePart.Properties.Write("CheckDigits", "0");
                        responsePart.Properties.Write("ScanProductId", part.Properties.ReadAsString("PRODLOT"));
                        responsePart.Properties.Write("SpokenProductId", verifyLot);
                    }
                    else if ((part.Properties.ReadAsString("PPVERIFY") == PPVERIFY_ARTID) ||
                             (part.Properties.ReadAsString("PPVERIFY") == PPVERIFY_EANDUN))
                    {
                        /* Verify pick location by ARTID or EANDUN */

                        if (!string.IsNullOrEmpty(checkDigits))
                        {
                            if (checkDigits.Length > session.ReadAsInt("VOICE_MIN_DIGITS_PPCODE"))
                            {
                                checkDigits = checkDigits.Substring(checkDigits.Length - session.ReadAsInt("VOICE_MIN_DIGITS_PPCODE"), session.ReadAsInt("VOICE_MIN_DIGITS_PPCODE"));
                            }
                        }

                        responsePart.Properties.Write("CheckDigits", "0");

                        /* If the system hasn't found any item load dont verify anything */
                        if ((part.Properties.ReadAsString("PBROWSTAT") == PBROWSTAT_Registrated) &&
                            (string.IsNullOrEmpty(part.Properties.ReadAsString("ITEID"))))
                        {
                            responsePart.Properties.Write("CheckDigits", "");
                        }

                        responsePart.Properties.Write("ScanProductId", checkDigits);
                        responsePart.Properties.Write("SpokenProductId", checkDigits);
                    }
                    else
                    {
                        /* Verify pick location by pick location code */

                        if (!string.IsNullOrEmpty(checkDigits))
                        {
                            if (checkDigits.Length > session.ReadAsInt("VOICE_MIN_DIGITS_PPCODE"))
                            {
                                checkDigits = checkDigits.Substring(checkDigits.Length - session.ReadAsInt("VOICE_MIN_DIGITS_PPCODE"), session.ReadAsInt("VOICE_MIN_DIGITS_PPCODE"));
                            }

                            long temp;

                            if (!long.TryParse(checkDigits, out temp))
                            {
                                checkDigits = "";
                            }
                        }

                        responsePart.Properties.Write("CheckDigits", checkDigits);
                        responsePart.Properties.Write("ScanProductId", "");
                        responsePart.Properties.Write("SpokenProductId", "");

                        /* If the system hasn't found any item load dont verify anything */
                        if (((part.Properties.ReadAsString("PBROWSTAT") == PBROWSTAT_Registrated) || (part.Properties.ReadAsString("ITETRACE") == "1")) &&
                            (string.IsNullOrEmpty(part.Properties.ReadAsString("ITEID"))))
                        {
                            responsePart.Properties.Write("CheckDigits", "");
                            responsePart.Properties.Write("ScanProductId", part.Properties.ReadAsString("ITEID"));
                            responsePart.Properties.Write("SpokenProductId", "00000");
                        }
                    }

                    #endregion

                    responsePart.Properties.Write("Description", part.Properties.ReadAsString("ARTNAME1").Replace('"', ' '));
                    responsePart.Properties.Write("Size", "");

                    if (part.Properties.ReadAsString("PPVERIFY") == PPVERIFY_EANDUN)
                    {
                        responsePart.Properties.Write("UniversalProductCode", part.Properties.Read("PPCODE"));
                    }
                    else
                    {
                        responsePart.Properties.Write("UniversalProductCode", "");
                    }

                    responsePart.Properties.Write("WorkId", "1");
                    responsePart.Properties.Write("DeliveryLocation", "");
                    responsePart.Properties.Write("Dummy", "");
                    responsePart.Properties.Write("Store", "");
                    responsePart.Properties.Write("CaseLabelCheckDigit", "");

                    responsePart.Properties.Write("TargetContainer", part.Properties.ReadAsString("SEQNUM").PadLeft(session.ReadAsInt("VOICE_MIN_DIGITS_CARCODE"), '0'));

                    if (part.Properties.ReadAsString("SERIAL") == "1")
                    {
                        responsePart.Properties.Write("CaptureLot", "1");
                        responsePart.Properties.Write("LotText", GetCachedAlarmText("VOICEPICK006", session));
                    }
                    else if ((part.Properties.ReadAsString("PRODLOT_VER") == "1") &&
                             (string.IsNullOrEmpty(part.Properties.ReadAsString("PRODLOTREQ"))))
                    {
                        responsePart.Properties.Write("CaptureLot", "1");
                        responsePart.Properties.Write("LotText", GetCachedAlarmText("VOICEPICK004", session));
                    }
                    else
                    {
                        responsePart.Properties.Write("CaptureLot", "0");
                        responsePart.Properties.Write("LotText", "");
                    }

                    responsePart.Properties.Write("PickMessage", part.Properties.ReadAsString("INSTRUCTIONS"));

                    string verifyLocation = "0";

                    if (session.ReadAsString("VOICE_VERIFY_PP_BALANCE") == "1")
                    {
                        verifyLocation = "1";
                    }
                    else if ((session.ReadAsString("VOICE_VERIFY_PP_BALANCE") == "2") &&
                             (status == "G"))
                    {
                        verifyLocation = "1";
                    }

                    responsePart.Properties.Write("VerifyLocation", verifyLocation);

                    responsePart.Properties.Write("CycleCount", "0");
                    responsePart.Properties.Write("CustomerId", PrTaskLUTContainer.GetCotainerHashCode(part));

                    if (part.Properties.ReadAsString("SERIAL") == "1")
                    {
                        responsePart.Properties.Write("PutLotPrompt", GetCachedAlarmText("VOICEPICK005", session));
                    }
                    else if (part.Properties.ReadAsString("PRODLOT_VER") == "1")
                    {
                        responsePart.Properties.Write("PutLotPrompt", GetCachedAlarmText("VOICEPICK003", session));
                    }
                    else
                    {
                        responsePart.Properties.Write("PutLotPrompt", "");
                    }

                    responsePart.Properties.Write("ErrorCode", VocollectErrorCodeNoError);
                    responsePart.Properties.Write("Message", "");

                    responseMsg.Parts.Add(responsePart);

                    prevLocation  = part.Properties.ReadAsString("PPKEY");
                    prevContainer = part.Properties.ReadAsString("SEQNUM");
                }

                //Reset session values
                session.Write("PBROW_COUNT", rowCount);
                session.Write("SPLIT_PBROWID", "");
                session.Write("SPLIT_STATUS", "0");
                session.Write("PREV_PPKEY", "");
                session.Write("RESTCOD", "");
                session.Write("PRODLOT", "");
                session.Write("PRODLOTQTY", 0d);
            }
            catch (WarehouseAdapterException ex)
            {
                responseMsg.Parts.Clear();
                MessagePart part = CreateEmptyMessagePart(35);
                part.Properties.Write("ErrorCode", WarehouseAlarm);
                part.Properties.Write("Message", ex.Message);
                responseMsg.Parts.Add(part);

                throw;
            }
            catch (Exception)
            {
                responseMsg.Parts.Clear();
                MessagePart part = CreateEmptyMessagePart(35);
                part.Properties.Write("ErrorCode", VocollectErrorCodeCritialError);
                part.Properties.Write("Message", GetCriticalErrorMessageText(msg));
                responseMsg.Parts.Add(part);

                throw;
            }
            finally
            {
                TransmitResponseMessage(responseMsg, session);
            }
        }