예제 #1
0
        //Habilita el step 2 despues de que se ha ingresados un Source Location
        //Valido
        private void OnLoadSource(object sender, DataEventArgs <string> e)
        {
            //View.Model.SourceData = null;
            //ClearForms();

            if (string.IsNullOrEmpty(e.Value))
            {
                return;
            }

            //Get Location Data
            WpfFront.WMSBusinessService.Label sourceLabel = service.GetLocationData(e.Value, false);

            //Show Location Data in the List View
            View.Model.SourceLocation = sourceLabel;

            //2. Logistic Label
            if (sourceLabel.LabelType.DocTypeID == LabelType.ProductLabel)
            {
                View.ComboProduct.Text    = sourceLabel.Product.FullDesc;
                View.ComboProduct.Product = sourceLabel.Product;

                LoadUnits(sourceLabel.Product);
            }

            EnableExecuteModule();
        }
예제 #2
0
        internal void LoadPackages(Document document, Document posted)
        {
            //Bloque de los botones si ya es un shipment completado y la opcion de 
            //reorder esta en false

            btnAddSerial.IsEnabled = true;
            btnMove.IsEnabled = true;
            btnMoveSN.IsEnabled = true;
            btnMoveRetail.IsEnabled = true;
            btnNew.IsEnabled = true;
            btnNewBox.IsEnabled = true;
            btnMovePack.IsEnabled = true;


            if (posted != null && Util.GetConfigOption("ALWREORDERPK").Equals("F"))
            {
                btnAddSerial.IsEnabled = false;
                btnMove.IsEnabled = false;
                btnMoveSN.IsEnabled = false;
                btnMoveRetail.IsEnabled = false;
                btnNew.IsEnabled = false;
                btnNewBox.IsEnabled = false;
                btnMovePack.IsEnabled = false;
            }

            WpfFront.WMSBusinessService.Label shipmentLabel;
            btnCreateShipment.Visibility = Visibility.Visible;
            brMove.Visibility = Visibility.Collapsed;


            sourceTree.Items.Refresh();
            destTree.Items.Refresh();

            Packages = null;



            if (posted == null)
            {

                //SEP 20 - 2010 - Jairo Murillo
                //Aqui Revisa si el Shipment number debe ser preasignado
                if (Util.GetConfigOption("PRESHIPMENT").Equals("T"))
                {
                    if (string.IsNullOrEmpty(document.PostingDocument))
                    { //Obtain Sequence                   
                        document.PostingDocument = service.GetNextDocSequence(document.Company, new DocumentType { DocTypeID = SDocType.SalesShipment }).CodeSequence; 
                        service.UpdateDocument(document);
                    }
                    shipmentLabel = new WpfFront.WMSBusinessService.Label { LabelCode = "Root of " + document.PostingDocument };
                }
                else
                    shipmentLabel = new WpfFront.WMSBusinessService.Label { LabelCode = "Root of " + document.DocNumber };

            }
            else //Shipment ya creado y posteado
            {
                btnCreateShipment.Visibility = Visibility.Collapsed;
                shipmentLabel = new WpfFront.WMSBusinessService.Label { LabelCode = "Root of " + posted.DocNumber };
            }


            Packages = new List<DocumentPackage>() { 
                new DocumentPackage { Document = document, 
                    PostingDocument = posted,
                    PostingDate = posted == null ? null : posted.CreationDate,
                    PostingUserName =posted == null ? null : posted.CreatedBy,
                    PackLabel = shipmentLabel,
                    PackDescExt = shipmentLabel.LabelCode,
                    Sequence = 1,
                    PackageType = "R"
                }
            };


            curDoc = document;
            curPosted = posted;

            LoadTrees();
        }
        internal void LoadPackages(Document document, Document posted)
        {
            //Bloque de los botones si ya es un shipment completado y la opcion de
            //reorder esta en false

            btnAddSerial.IsEnabled  = true;
            btnMove.IsEnabled       = true;
            btnMoveSN.IsEnabled     = true;
            btnMoveRetail.IsEnabled = true;
            btnNew.IsEnabled        = true;
            btnNewBox.IsEnabled     = true;
            btnMovePack.IsEnabled   = true;


            if (posted != null && Util.GetConfigOption("ALWREORDERPK").Equals("F"))
            {
                btnAddSerial.IsEnabled  = false;
                btnMove.IsEnabled       = false;
                btnMoveSN.IsEnabled     = false;
                btnMoveRetail.IsEnabled = false;
                btnNew.IsEnabled        = false;
                btnNewBox.IsEnabled     = false;
                btnMovePack.IsEnabled   = false;
            }

            WpfFront.WMSBusinessService.Label shipmentLabel;
            btnCreateShipment.Visibility = Visibility.Visible;
            brMove.Visibility            = Visibility.Collapsed;


            sourceTree.Items.Refresh();
            destTree.Items.Refresh();

            Packages = null;



            if (posted == null)
            {
                //SEP 20 - 2010 - Jairo Murillo
                //Aqui Revisa si el Shipment number debe ser preasignado
                if (Util.GetConfigOption("PRESHIPMENT").Equals("T"))
                {
                    if (string.IsNullOrEmpty(document.PostingDocument))
                    { //Obtain Sequence
                        document.PostingDocument = service.GetNextDocSequence(document.Company, new DocumentType {
                            DocTypeID = SDocType.SalesShipment
                        }).CodeSequence;
                        service.UpdateDocument(document);
                    }
                    shipmentLabel = new WpfFront.WMSBusinessService.Label {
                        LabelCode = "Root of " + document.PostingDocument
                    };
                }
                else
                {
                    shipmentLabel = new WpfFront.WMSBusinessService.Label {
                        LabelCode = "Root of " + document.DocNumber
                    }
                };
            }
            else //Shipment ya creado y posteado
            {
                btnCreateShipment.Visibility = Visibility.Collapsed;
                shipmentLabel = new WpfFront.WMSBusinessService.Label {
                    LabelCode = "Root of " + posted.DocNumber
                };
            }


            Packages = new List <DocumentPackage>()
            {
                new DocumentPackage {
                    Document        = document,
                    PostingDocument = posted,
                    PostingDate     = posted == null ? null : posted.CreationDate,
                    PostingUserName = posted == null ? null : posted.CreatedBy,
                    PackLabel       = shipmentLabel,
                    PackDescExt     = shipmentLabel.LabelCode,
                    Sequence        = 1,
                    PackageType     = "R"
                }
            };


            curDoc    = document;
            curPosted = posted;

            LoadTrees();
        }
예제 #4
0
        private void OnAddLine(object sender, EventArgs e)
        {
            //Variables Auxiliares
            DataRow dr = View.Model.ListRecords.NewRow();
            WpfFront.WMSBusinessService.Label EvalSerialLabel = new WpfFront.WMSBusinessService.Label
            {
                Bin = new Bin { Location = View.Model.RecordCliente }
            };
            DataInformation DataInformationLabel;
            List<ShowData> ShowDataList;
            ShowData ShowData;
            bool EvalSerial1 = true, EvalSerial2 = true, EvalSerial3 = true;

            //Validacion de los seriales(tamanos, datos y existencia en el sistema)
            foreach (DataDefinitionByBin DataDefinitionByBin in View.Model.CamposSeriales)
            {
                switch (DataDefinitionByBin.DataDefinition.Code)
                {
                    case "SERIAL1":
                        if (View.GetSerial1.Text == "")
                        {
                            Util.ShowError("Por favor digite el serial en " + DataDefinitionByBin.DataDefinition.DisplayName);
                            return;
                        }
                        if (View.GetSerial1.Text.Length != DataDefinitionByBin.DataDefinition.Size && DataDefinitionByBin.DataDefinition.Size != 0)
                        {
                            Util.ShowError("El serial en el campo " + DataDefinitionByBin.DataDefinition.DisplayName + " debe tener " + DataDefinitionByBin.DataDefinition.Size + " digitos.");
                            return;
                        }

                        //Asigno el serial para evaluar si existe en el sistema
                        EvalSerialLabel.LabelCode = View.GetSerial1.Text;

                        //Evaluo si existe la columna para validar el serial existente en el listado actual
                        if (View.Model.ListRecords.Columns.Contains(DataDefinitionByBin.DataDefinition.Code))
                            foreach (DataRow DataRow in View.Model.ListRecords.Rows)
                            {
                                EvalSerial1 = DataRow[DataDefinitionByBin.DataDefinition.Code].ToString() == View.GetSerial1.Text ? true : false;
                            }
                        break;
                    case "SERIAL2":
                        if (View.GetSerial2.Text == "")
                        {
                            Util.ShowError("Por favor digite el serial en " + DataDefinitionByBin.DataDefinition.DisplayName);
                            return;
                        }
                        if (View.GetSerial2.Text.Length != DataDefinitionByBin.DataDefinition.Size && DataDefinitionByBin.DataDefinition.Size != 0)
                        {
                            Util.ShowError("El serial en el campo " + DataDefinitionByBin.DataDefinition.DisplayName + " debe tener " + DataDefinitionByBin.DataDefinition.Size + " digitos.");
                            return;
                        }

                        //Asigno el serial para evaluar si existe en el sistema
                        EvalSerialLabel.PrintingLot = View.GetSerial2.Text;

                        //Evaluo si existe la columna para validar el serial existente en el listado actual
                        if (View.Model.ListRecords.Columns.Contains(DataDefinitionByBin.DataDefinition.Code))
                            foreach (DataRow DataRow in View.Model.ListRecords.Rows)
                            {
                                EvalSerial2 = DataRow[DataDefinitionByBin.DataDefinition.Code].ToString() == View.GetSerial2.Text ? true : false;
                            }
                        break;
                    case "SERIAL3":
                        if (View.GetSerial3.Text == "")
                        {
                            Util.ShowError("Por favor digite el serial en " + DataDefinitionByBin.DataDefinition.DisplayName);
                            return;
                        }
                        if (View.GetSerial3.Text.Length != DataDefinitionByBin.DataDefinition.Size && DataDefinitionByBin.DataDefinition.Size != 0)
                        {
                            Util.ShowError("El serial en el campo " + DataDefinitionByBin.DataDefinition.DisplayName + " debe tener " + DataDefinitionByBin.DataDefinition.Size + " digitos.");
                            return;
                        }

                        //Asigno el serial para evaluar si existe en el sistema
                        EvalSerialLabel.Manufacturer = View.GetSerial3.Text;

                        //Evaluo si existe la columna para validar el serial existente en el listado actual
                        if (View.Model.ListRecords.Columns.Contains(DataDefinitionByBin.DataDefinition.Code))
                            foreach (DataRow DataRow in View.Model.ListRecords.Rows)
                            {
                                EvalSerial3 = DataRow[DataDefinitionByBin.DataDefinition.Code].ToString() == View.GetSerial3.Text ? true : false;
                            }
                        break;
                }
            }

            //Analizo si el serial ya esta en la lista y el listado a lo sumo tiene un elemento
            if (EvalSerial1 && EvalSerial2 && EvalSerial3 && View.Model.ListRecords.Rows.Count > 0)
            {
                Util.ShowError("El serial ya existe en el listado de ingresos");
                return;
            }

            //Analizo si el serial esta en el sistema
            if (service.GetLabel(EvalSerialLabel).Count() == 0)
            {
                Util.ShowError("El serial no existe en el sistema");
                return;
            }

            //Analizo si el serial esta en el sistema y esta en el Bin Despachos
            EvalSerialLabel.Bin = BinDespachos;
            try
            {
                //Obtengo el Label
                EvalSerialLabel = service.GetLabel(EvalSerialLabel).First();
                //Obtengo el DataInformation asociado al Label
                DataInformationLabel = service.GetDataInformation(new DataInformation
                {
                    Entity = new ClassEntity { ClassEntityID = 20 },
                    EntityRowID = Int32.Parse(EvalSerialLabel.LabelID.ToString())
                }).First();
            }
            catch
            {
                Util.ShowError("El serial no se encuentra en el estado " + BinDespachos.BinCode);
                return;
            }

            //Guardo el Label y DataInformation en el listado para control de actualizacion
            View.Model.ListLabelScann.Add(EvalSerialLabel);
            View.Model.ListDataInformation.Add(DataInformationLabel);

            //Evaluo cuales seriales estan visibles para adicionarlos al registro
            int cont = 3;
            foreach (DataDefinitionByBin DataDefinitionByBin in View.Model.CamposSeriales)
            {
                switch (DataDefinitionByBin.DataDefinition.Code)
                {
                    case "SERIAL1":
                        dr[cont] = EvalSerialLabel.LabelCode;
                        break;
                    case "SERIAL2":
                        dr[cont] = EvalSerialLabel.PrintingLot;
                        break;
                    case "SERIAL3":
                        dr[cont] = EvalSerialLabel.Manufacturer;
                        break;
                }
                cont++;
            }

            //Asigno al campo 0 el LabelID
            dr[0] = EvalSerialLabel.LabelID;

            //Asigno al campo 1 ProductID, campo 2 ProducName
            dr[1] = EvalSerialLabel.Product.ProductID;
            dr[2] = EvalSerialLabel.Product.Name;

            //Deserializo el Xml para obtener los datos guardados anteriormente en el DataInformation
            ShowDataList = Util.DeserializeMetaDataWF(DataInformationLabel.XmlData);

            //Asigno a cada campo su valor definido por defecto o asigno el dato guardado anteriormente
            foreach (DataDefinitionByBin DataDefinitionByBin in View.Model.CamposDetails)
            {
                try
                {
                    ShowData = ShowDataList.Where(f => f.DataKey == DataDefinitionByBin.DataDefinition.Code).ToList().First();
                }
                catch { ShowData = null; }
                if (ShowData != null)
                {
                    dr[ShowData.DataKey] = ShowData.DataValue;
                }
                else
                {
                    dr[DataDefinitionByBin.DataDefinition.Code] = DataDefinitionByBin.DataDefinition.DefaultValue;
                }
            }

            //Adiciono el registro a la lista
            View.Model.ListRecords.Rows.Add(dr);

            //Limpio los seriales para digitar nuevos datos
            View.GetSerial1.Text = "";
            View.GetSerial2.Text = "";
            View.GetSerial3.Text = "";
            View.GetSerial1.Focus();
        }
예제 #5
0
        private void OnExecute(object sender, DataEventArgs <DocumentConcept> e)
        {
            //if (string.IsNullOrEmpty(View.TxtComment.Text.Trim()))
            //{
            //    Util.ShowError("Please enter the adjustment cause or observation.");
            //    return;
            //}

            if (e.Value == null)
            {
                Util.ShowError("Please select the adjustment cause.");
                return;
            }



            int count = 1;
            int step  = 0;

            Document curDocument = new Document
            {
                DocType = new DocumentType {
                    DocTypeID = SDocType.InventoryAdjustment
                },
                DocConcept   = e.Value,
                CreatedBy    = App.curUser.UserName,
                Location     = App.curLocation,
                Company      = App.curCompany,
                IsFromErp    = false,
                CrossDocking = false,
                Comment      = View.TxtComment.Text.Trim(),
                Date1        = DateTime.Now
            };

            if (Util.GetConfigOption("REASON2ERP").Equals("T"))
            {
                curDocument.Notes = curDocument.DocConcept.Name.ToUpper();
            }


            ProcessWindow pw = new ProcessWindow("Processing the Adjustment ... ");

            try
            {
                //Header del Documento de Ajuste
                curDocument = service.CreateNewDocument(curDocument, true);
                step        = 1; //Creo el header del documento

                DocumentLine curLine;
                foreach (DocumentLine docLine in View.Model.LinesToProcess)
                {
                    docLine.Document   = curDocument;
                    docLine.Location   = App.curLocation;
                    docLine.LineNumber = count++;

                    //LAbel Origen de la transaccion, guardada en lao notes de la linea
                    WpfFront.WMSBusinessService.Label source = service.GetLabel(new WpfFront.WMSBusinessService.Label {
                        LabelID = long.Parse(docLine.LinkDocNumber)
                    }).First();

                    curLine = service.SaveAdjustmentTransaction(docLine, source);
                    if (curLine.Note != "Adjust OK.")
                    {
                        throw new Exception(curLine.Note);
                    }
                }

                step = 2; //Creo las lineas

                service.CreateInventoryAdjustment(curDocument);


                View.BtnExecute.IsEnabled = false;
                ClearForms();
                LoadHistAdjustments();

                pw.Close();
                Util.ShowMessage("Adjustment document " + curDocument.DocNumber + " was created.");
            }
            catch (Exception ex)
            {
                pw.Close();

                if (step > 0)
                {
                    curDocument.DocStatus = new Status {
                        StatusID = DocStatus.Cancelled
                    };
                    curDocument.Comment = "Cancelled: " + ex.Message;
                    service.UpdateDocument(curDocument);
                }

                Util.ShowError("Adjustment document could not be created.\n" + ex.Message);
            }
        }
        private void OnAddLine(object sender, EventArgs e)
        {
            //Variables Auxiliares
            DataRow dr = View.Model.ListRecords.NewRow();

            WpfFront.WMSBusinessService.Label EvalSerialLabel = new WpfFront.WMSBusinessService.Label
            {
                Bin = new Bin {
                    Location = View.Model.RecordCliente
                }
            };
            DataInformation DataInformationLabel;
            List <ShowData> ShowDataList;
            ShowData        ShowData;
            bool            EvalSerial1 = true, EvalSerial2 = true, EvalSerial3 = true;

            //Validacion de los seriales(tamanos, datos y existencia en el sistema)
            foreach (DataDefinitionByBin DataDefinitionByBin in View.Model.CamposSeriales)
            {
                switch (DataDefinitionByBin.DataDefinition.Code)
                {
                case "SERIAL1":
                    if (View.GetSerial1.Text == "")
                    {
                        Util.ShowError("Por favor digite el serial en " + DataDefinitionByBin.DataDefinition.DisplayName);
                        return;
                    }
                    if (View.GetSerial1.Text.Length != DataDefinitionByBin.DataDefinition.Size && DataDefinitionByBin.DataDefinition.Size != 0)
                    {
                        Util.ShowError("El serial en el campo " + DataDefinitionByBin.DataDefinition.DisplayName + " debe tener " + DataDefinitionByBin.DataDefinition.Size + " digitos.");
                        return;
                    }

                    //Asigno el serial para evaluar si existe en el sistema
                    EvalSerialLabel.LabelCode = View.GetSerial1.Text;

                    //Evaluo si existe la columna para validar el serial existente en el listado actual
                    if (View.Model.ListRecords.Columns.Contains(DataDefinitionByBin.DataDefinition.Code))
                    {
                        foreach (DataRow DataRow in View.Model.ListRecords.Rows)
                        {
                            EvalSerial1 = DataRow[DataDefinitionByBin.DataDefinition.Code].ToString() == View.GetSerial1.Text ? true : false;
                        }
                    }
                    break;

                case "SERIAL2":
                    if (View.GetSerial2.Text == "")
                    {
                        Util.ShowError("Por favor digite el serial en " + DataDefinitionByBin.DataDefinition.DisplayName);
                        return;
                    }
                    if (View.GetSerial2.Text.Length != DataDefinitionByBin.DataDefinition.Size && DataDefinitionByBin.DataDefinition.Size != 0)
                    {
                        Util.ShowError("El serial en el campo " + DataDefinitionByBin.DataDefinition.DisplayName + " debe tener " + DataDefinitionByBin.DataDefinition.Size + " digitos.");
                        return;
                    }

                    //Asigno el serial para evaluar si existe en el sistema
                    EvalSerialLabel.PrintingLot = View.GetSerial2.Text;

                    //Evaluo si existe la columna para validar el serial existente en el listado actual
                    if (View.Model.ListRecords.Columns.Contains(DataDefinitionByBin.DataDefinition.Code))
                    {
                        foreach (DataRow DataRow in View.Model.ListRecords.Rows)
                        {
                            EvalSerial2 = DataRow[DataDefinitionByBin.DataDefinition.Code].ToString() == View.GetSerial2.Text ? true : false;
                        }
                    }
                    break;

                case "SERIAL3":
                    if (View.GetSerial3.Text == "")
                    {
                        Util.ShowError("Por favor digite el serial en " + DataDefinitionByBin.DataDefinition.DisplayName);
                        return;
                    }
                    if (View.GetSerial3.Text.Length != DataDefinitionByBin.DataDefinition.Size && DataDefinitionByBin.DataDefinition.Size != 0)
                    {
                        Util.ShowError("El serial en el campo " + DataDefinitionByBin.DataDefinition.DisplayName + " debe tener " + DataDefinitionByBin.DataDefinition.Size + " digitos.");
                        return;
                    }

                    //Asigno el serial para evaluar si existe en el sistema
                    EvalSerialLabel.Manufacturer = View.GetSerial3.Text;

                    //Evaluo si existe la columna para validar el serial existente en el listado actual
                    if (View.Model.ListRecords.Columns.Contains(DataDefinitionByBin.DataDefinition.Code))
                    {
                        foreach (DataRow DataRow in View.Model.ListRecords.Rows)
                        {
                            EvalSerial3 = DataRow[DataDefinitionByBin.DataDefinition.Code].ToString() == View.GetSerial3.Text ? true : false;
                        }
                    }
                    break;
                }
            }

            //Analizo si el serial ya esta en la lista y el listado a lo sumo tiene un elemento
            if (EvalSerial1 && EvalSerial2 && EvalSerial3 && View.Model.ListRecords.Rows.Count > 0)
            {
                Util.ShowError("El serial ya existe en el listado de ingresos");
                return;
            }

            //Analizo si el serial esta en el sistema
            if (service.GetLabel(EvalSerialLabel).Count() == 0)
            {
                Util.ShowError("El serial no existe en el sistema");
                return;
            }

            //Analizo si el serial esta en el sistema y esta en el Bin Despachos
            EvalSerialLabel.Bin = BinDespachos;
            try
            {
                //Obtengo el Label
                EvalSerialLabel = service.GetLabel(EvalSerialLabel).First();
                //Obtengo el DataInformation asociado al Label
                DataInformationLabel = service.GetDataInformation(new DataInformation
                {
                    Entity = new ClassEntity {
                        ClassEntityID = 20
                    },
                    EntityRowID = Int32.Parse(EvalSerialLabel.LabelID.ToString())
                }).First();
            }
            catch
            {
                Util.ShowError("El serial no se encuentra en el estado " + BinDespachos.BinCode);
                return;
            }

            //Guardo el Label y DataInformation en el listado para control de actualizacion
            View.Model.ListLabelScann.Add(EvalSerialLabel);
            View.Model.ListDataInformation.Add(DataInformationLabel);

            //Evaluo cuales seriales estan visibles para adicionarlos al registro
            int cont = 3;

            foreach (DataDefinitionByBin DataDefinitionByBin in View.Model.CamposSeriales)
            {
                switch (DataDefinitionByBin.DataDefinition.Code)
                {
                case "SERIAL1":
                    dr[cont] = EvalSerialLabel.LabelCode;
                    break;

                case "SERIAL2":
                    dr[cont] = EvalSerialLabel.PrintingLot;
                    break;

                case "SERIAL3":
                    dr[cont] = EvalSerialLabel.Manufacturer;
                    break;
                }
                cont++;
            }

            //Asigno al campo 0 el LabelID
            dr[0] = EvalSerialLabel.LabelID;

            //Asigno al campo 1 ProductID, campo 2 ProducName
            dr[1] = EvalSerialLabel.Product.ProductID;
            dr[2] = EvalSerialLabel.Product.Name;

            //Deserializo el Xml para obtener los datos guardados anteriormente en el DataInformation
            ShowDataList = Util.DeserializeMetaDataWF(DataInformationLabel.XmlData);

            //Asigno a cada campo su valor definido por defecto o asigno el dato guardado anteriormente
            foreach (DataDefinitionByBin DataDefinitionByBin in View.Model.CamposDetails)
            {
                try
                {
                    ShowData = ShowDataList.Where(f => f.DataKey == DataDefinitionByBin.DataDefinition.Code).ToList().First();
                }
                catch { ShowData = null; }
                if (ShowData != null)
                {
                    dr[ShowData.DataKey] = ShowData.DataValue;
                }
                else
                {
                    dr[DataDefinitionByBin.DataDefinition.Code] = DataDefinitionByBin.DataDefinition.DefaultValue;
                }
            }

            //Adiciono el registro a la lista
            View.Model.ListRecords.Rows.Add(dr);

            //Limpio los seriales para digitar nuevos datos
            View.GetSerial1.Text = "";
            View.GetSerial2.Text = "";
            View.GetSerial3.Text = "";
            View.GetSerial1.Focus();
        }
예제 #7
0
        private void OnAddLine(object sender, EventArgs e)
        {
            //Variables Auxiliares
            DataRow dr = View.Model.ListRecords.NewRow();

            //WpfFront.WMSBusinessService.Label EvalSerialSave = new WpfFront.WMSBusinessService.Label { Bin = new Bin { Location = View.Model.RecordCliente } };
            bool EvalSerial1 = false, EvalSerial2 = false, EvalSerial3 = false;
            DataSet ValidarSeriales;

            //Validacion si fue seleccionado el producto
            if (View.Model.ProductoSerial == null)
            {
                Util.ShowError("Por favor seleccionar un producto");
                return;
            }

            //Validacion si el producto no es serializable y no se coloco un valor en la cantidad
            if (View.Model.ProductoSerial.ErpTrackOpt == 0 && String.IsNullOrEmpty(View.GetCantidadProducto.Text))
            {
                Util.ShowError("Por favor digitar la cantidad a ingresar del producto.");
                return;
            }

            //Genero la variable del Label para adicionar el dato
            WpfFront.WMSBusinessService.Label SerialLabel = new WpfFront.WMSBusinessService.Label
            {
                LabelType = new DocumentType { DocTypeID = LabelType.UniqueTrackLabel },
                Status = new Status { StatusID = EntityStatus.Active },
                StartQty = Int32.Parse(View.GetCantidadProducto.Text),
                CurrQty = Int32.Parse(View.GetCantidadProducto.Text),
                Node = new Node { NodeID = NodeType.PreLabeled },
                Bin = BinRecibo,
                Printed = (View.Model.ProductoSerial.ErpTrackOpt == 0) ? false : true,
                Notes = (View.Model.IsCheckedCommentsSerial) ? View.Model.HeaderDocument.Comment : "Doc# " + View.Model.HeaderDocument.DocNumber,
                ReceivingDate = DateTime.Now,
                CreatedBy = App.curUser.UserName,
                CreationDate = DateTime.Now,
                ReceivingDocument = View.Model.HeaderDocument,
                Product = View.Model.ProductoSerial,
                Unit = View.Model.ProductoSerial.BaseUnit,
                CreTerminal = View.Model.RecordCliente.LocationID.ToString()
            };

            //Si el producto es serializable hago las evaluaciones, en caso contrario omito estos pasos
            if (View.Model.ProductoSerial.ErpTrackOpt == 1)
            {
                //Validacion de los seriales(tamanos, datos y existencia en el sistema)
                foreach (DataDefinitionByBin DataDefinitionByBin in View.Model.CamposSeriales)
                {
                    switch (DataDefinitionByBin.DataDefinition.Code)
                    {
                        case "SERIAL1":

                            if (View.GetSerial1.Text == "")
                            {
                                Util.ShowError("Por favor digite el serial en " + DataDefinitionByBin.DataDefinition.DisplayName);
                                return;
                            }
                            if (View.GetSerial1.Text.Length != DataDefinitionByBin.DataDefinition.Size && DataDefinitionByBin.DataDefinition.Size != 0)
                            {
                                Util.ShowError("El serial en el campo " + DataDefinitionByBin.DataDefinition.DisplayName + " debe tener " + DataDefinitionByBin.DataDefinition.Size + " digitos.");
                                return;
                            }

                            //Consulto el serial1 en el sistema
                            ValidarSeriales = service.DirectSQLQueryDS("EXEC dbo.spUtil 1, '" + View.Model.RecordCliente.LocationID + "', '" + View.GetSerial1.Text + "'", "", "Trace.Label", Local);

                            //Evaluo si la consulta me trajo serial alguno para mostrar el mensaje de error
                            if (ValidarSeriales.Tables[0].Rows.Count > 0)
                            {
                                Util.ShowError("El serial " + View.GetSerial1.Text + " ya existe en el sistema");
                                return;
                            }

                            //Evaluo si la consulta me trajo serial alguno para mostrar el mensaje de error
                            if (ValidarSeriales.Tables[1].Rows.Count > 0)
                            {
                                Util.ShowError("El serial " + View.GetSerial1.Text + " ya fue procesado y despachado anteriormente. Ha sido procesado en " + ValidarSeriales.Tables[1].Rows.Count + " oportunidad(es).");
                            }

                            //Consulto el serial2 en la bodega de despachos para saber si es un reingreso
                            /*ValidarSeriales = service.DirectSQLQuery("EXEC dbo.spUtil 1, '453', '" + View.GetSerial2.Text + "'", "", "Trace.Label", Local);

                            //Evaluo si la consulta me trajo serial alguno para mostrar el mensaje de error
                            if (ValidarSeriales.Rows.Count > 0)
                            {
                                Util.ShowError("El serial " + View.GetSerial2.Text + " ya fue procesado y despachado anteriormente. Ha sido procesado en " + ValidarSeriales.Rows.Count + " oportunidad(es).");
                            }*/

                            //Asigno el serial para evaluar si ya existe en el sistema
                            //EvalSerialSave.PrintingLot = View.GetSerial2.Text;

                            //Evaluo si existe la columna para validar el serial existente en el listado actual
                            if (View.Model.ListRecords.Columns.Contains(DataDefinitionByBin.DataDefinition.Code))
                            {
                                //Recorro el listado de seriales adicionados para validar que no este ingresando un serial repetido
                                foreach (DataRow DataRow in View.Model.ListRecords.Rows)
                                {
                                    EvalSerial1 = DataRow[DataDefinitionByBin.DataDefinition.Code].ToString() == View.GetSerial2.Text ? true : false;
                                    if (EvalSerial1)
                                        break;
                                }
                            }

                            //Evaluo si existe la columna del serial1 para validar la existencia del serial digitado en serial2
                            if (View.Model.ListRecords.Columns.Contains("SERIAL2") && !EvalSerial1)
                            {
                                //Evaluo que el serial1 sea diferente al serial2
                                if (View.GetSerial1.Text == View.GetSerial2.Text)
                                {
                                    Util.ShowError("No pueden haber seriales repetidos.");
                                    return;
                                }

                                //Recorro el listado de seriales adicionados para validar que no este ingresando un serial repetido
                                foreach (DataRow DataRow in View.Model.ListRecords.Rows)
                                {
                                    EvalSerial1 = DataRow["SERIAL2"].ToString() == View.GetSerial1.Text ? true : false;
                                    if (EvalSerial1)
                                        break;
                                }
                            }

                            //Evaluo si existe la columna del serial3 para validar la existencia del serial digitado en serial2
                            if (View.Model.ListRecords.Columns.Contains("SERIAL3") && !EvalSerial1)
                            {
                                //Evaluo que el serial1 sea diferente al serial3
                                if (View.GetSerial1.Text == View.GetSerial3.Text)
                                {
                                    Util.ShowError("No pueden haber seriales repetidos.");
                                    return;
                                }

                                //Recorro el listado de seriales adicionados para validar que no este ingresando un serial repetido
                                foreach (DataRow DataRow in View.Model.ListRecords.Rows)
                                {
                                    EvalSerial2 = DataRow["SERIAL3"].ToString() == View.GetSerial2.Text ? true : false;
                                    if (EvalSerial2)
                                        break;
                                }
                            }

                            break;

                        /*case "SERIAL2":
                            if (View.GetSerial2.Text == "")
                            {
                                Util.ShowError("Por favor digite el serial en " + DataDefinitionByBin.DataDefinition.DisplayName);
                                return;
                            }
                            if (View.GetSerial2.Text.Length != DataDefinitionByBin.DataDefinition.Size && DataDefinitionByBin.DataDefinition.Size != 0)
                            {
                                Util.ShowError("El serial en el campo " + DataDefinitionByBin.DataDefinition.DisplayName + " debe tener " + DataDefinitionByBin.DataDefinition.Size + " digitos.");
                                return;
                            }

                            //Consulto el serial2 en el sistema
                            ValidarSeriales = service.DirectSQLQueryDS("EXEC dbo.spUtil 1, '" + View.Model.RecordCliente.LocationID + "', '" + View.GetSerial2.Text + "'", "", "Trace.Label", Local);

                            //Evaluo si la consulta me trajo serial alguno para mostrar el mensaje de error
                            if (ValidarSeriales.Tables[0].Rows.Count > 0)
                            {
                                Util.ShowError("El serial " + View.GetSerial2.Text + " ya existe en el sistema");
                                return;
                            }

                            //Evaluo si la consulta me trajo serial alguno para mostrar el mensaje de error
                            if (ValidarSeriales.Tables[1].Rows.Count > 0)
                            {
                                Util.ShowError("El serial " + View.GetSerial2.Text + " ya fue procesado y despachado anteriormente. Ha sido procesado en " + ValidarSeriales.Tables[1].Rows.Count + " oportunidad(es).");
                            }

                            //Consulto el serial2 en la bodega de despachos para saber si es un reingreso
                            //ValidarSeriales = service.DirectSQLQuery("EXEC dbo.spUtil 1, '453', '" + View.GetSerial2.Text + "'", "", "Trace.Label", Local);

                            //Evaluo si la consulta me trajo serial alguno para mostrar el mensaje de error
                            //if (ValidarSeriales.Rows.Count > 0)
                            //{
                            //    Util.ShowError("El serial " + View.GetSerial2.Text + " ya fue procesado y despachado anteriormente. Ha sido procesado en " + ValidarSeriales.Rows.Count + " oportunidad(es).");
                            //}

                            //Asigno el serial para evaluar si ya existe en el sistema
                            //EvalSerialSave.PrintingLot = View.GetSerial2.Text;

                            //Evaluo si existe la columna para validar el serial existente en el listado actual
                            if (View.Model.ListRecords.Columns.Contains(DataDefinitionByBin.DataDefinition.Code))
                            {
                                //Recorro el listado de seriales adicionados para validar que no este ingresando un serial repetido
                                foreach (DataRow DataRow in View.Model.ListRecords.Rows)
                                {
                                    EvalSerial2 = DataRow[DataDefinitionByBin.DataDefinition.Code].ToString() == View.GetSerial2.Text ? true : false;
                                    if (EvalSerial2)
                                        break;
                                }
                            }

                            //Evaluo si existe la columna del serial1 para validar la existencia del serial digitado en serial2
                            if (View.Model.ListRecords.Columns.Contains("SERIAL1") && !EvalSerial2)
                            {
                                //Evaluo que el serial2 sea diferente al serial1
                                if (View.GetSerial2.Text == View.GetSerial1.Text)
                                {
                                    Util.ShowError("No pueden haber seriales repetidos.");
                                    return;
                                }

                                //Recorro el listado de seriales adicionados para validar que no este ingresando un serial repetido
                                foreach (DataRow DataRow in View.Model.ListRecords.Rows)
                                {
                                    EvalSerial2 = DataRow["SERIAL1"].ToString() == View.GetSerial2.Text ? true : false;
                                    if (EvalSerial2)
                                        break;
                                }
                            }

                            //Evaluo si existe la columna del serial3 para validar la existencia del serial digitado en serial2
                            if (View.Model.ListRecords.Columns.Contains("SERIAL3") && !EvalSerial2)
                            {
                                //Evaluo que el serial2 sea diferente al serial3
                                if (View.GetSerial2.Text == View.GetSerial3.Text)
                                {
                                    Util.ShowError("No pueden haber seriales repetidos.");
                                    return;
                                }

                                //Recorro el listado de seriales adicionados para validar que no este ingresando un serial repetido
                                foreach (DataRow DataRow in View.Model.ListRecords.Rows)
                                {
                                    EvalSerial2 = DataRow["SERIAL3"].ToString() == View.GetSerial2.Text ? true : false;
                                    if (EvalSerial2)
                                        break;
                                }
                            }

                            break;*/
                        /*case "SERIAL3":
                            if (View.GetSerial3.Text == "")
                            {
                                Util.ShowError("Por favor digite el serial en " + DataDefinitionByBin.DataDefinition.DisplayName);
                                return;
                            }
                            if (View.GetSerial3.Text.Length != DataDefinitionByBin.DataDefinition.Size && DataDefinitionByBin.DataDefinition.Size != 0)
                            {
                                Util.ShowError("El serial en el campo " + DataDefinitionByBin.DataDefinition.DisplayName + " debe tener " + DataDefinitionByBin.DataDefinition.Size + " digitos.");
                                return;
                            }

                            //Consulto el serial3 en el sistema
                            ValidarSeriales = service.DirectSQLQueryDS("EXEC dbo.spUtil 1, '" + View.Model.RecordCliente.LocationID + "', '" + View.GetSerial3.Text + "'", "", "Trace.Label", Local);

                            //Evaluo si la consulta me trajo serial alguno para mostrar el mensaje de error
                            if (ValidarSeriales.Tables[0].Rows.Count > 0)
                            {
                                Util.ShowError("El serial " + View.GetSerial3.Text + " ya existe en el sistema");
                                return;
                            }

                            //Evaluo si la consulta me trajo serial alguno para mostrar el mensaje de error
                            if (ValidarSeriales.Tables[1].Rows.Count > 0)
                            {
                                Util.ShowError("El serial " + View.GetSerial3.Text + " ya fue procesado y despachado anteriormente. Ha sido procesado en " + ValidarSeriales.Tables[1].Rows.Count + " oportunidad(es).");
                            }

                            //Consulto el serial3 en la bodega de despachos para saber si es un reingreso
                            //ValidarSeriales = service.DirectSQLQuery("EXEC dbo.spUtil 1, '453', '" + View.GetSerial3.Text + "'", "", "Trace.Label", Local);

                            //Evaluo si la consulta me trajo serial alguno para mostrar el mensaje de error
                            //if (ValidarSeriales.Rows.Count > 0)
                            //{
                            //    Util.ShowError("El serial " + View.GetSerial3.Text + " ya fue procesado y despachado anteriormente. Ha sido procesado en " + ValidarSeriales.Rows.Count + " oportunidad(es).");
                            //}

                            //Asigno el serial para evaluar si ya existe en el sistema
                            //EvalSerialSave.Manufacturer = View.GetSerial3.Text;

                            //Evaluo si existe la columna para validar el serial existente en el listado actual
                            if (View.Model.ListRecords.Columns.Contains(DataDefinitionByBin.DataDefinition.Code))
                            {
                                //Recorro el listado de seriales adicionados para validar que no este ingresando un serial repetido
                                foreach (DataRow DataRow in View.Model.ListRecords.Rows)
                                {
                                    EvalSerial3 = DataRow[DataDefinitionByBin.DataDefinition.Code].ToString() == View.GetSerial3.Text ? true : false;
                                    if (EvalSerial3)
                                        break;
                                }
                            }

                            //Evaluo si existe la columna del serial1 para validar la existencia del serial digitado en serial3
                            if (View.Model.ListRecords.Columns.Contains("SERIAL1") && !EvalSerial3)
                            {
                                //Evaluo que el serial3 sea diferente al serial1
                                if (View.GetSerial3.Text == View.GetSerial1.Text)
                                {
                                    Util.ShowError("No pueden haber seriales repetidos.");
                                    return;
                                }

                                //Recorro el listado de seriales adicionados para validar que no este ingresando un serial repetido
                                foreach (DataRow DataRow in View.Model.ListRecords.Rows)
                                {
                                    EvalSerial3 = DataRow["SERIAL1"].ToString() == View.GetSerial3.Text ? true : false;
                                    if (EvalSerial3)
                                        break;
                                }
                            }

                            //Evaluo si existe la columna del serial2 para validar la existencia del serial digitado en serial3
                            if (View.Model.ListRecords.Columns.Contains("SERIAL2") && !EvalSerial3)
                            {
                                //Evaluo que el serial3 sea diferente al serial2
                                if (View.GetSerial3.Text == View.GetSerial2.Text)
                                {
                                    Util.ShowError("No pueden haber seriales repetidos.");
                                    return;
                                }

                                //Recorro el listado de seriales adicionados para validar que no este ingresando un serial repetido
                                foreach (DataRow DataRow in View.Model.ListRecords.Rows)
                                {
                                    EvalSerial3 = DataRow["SERIAL2"].ToString() == View.GetSerial3.Text ? true : false;
                                    if (EvalSerial3)
                                        break;
                                }
                            }

                            break;*/
                    }
                }

                //Analizo si el serial ya esta en el sistema
                //EvalSerialSave.Bin = new Bin { Location = View.Model.RecordCliente };

                /*if (service.GetLabel(EvalSerialSave).Count() > 0)
                {
                    Util.ShowError("El serial ya existe en el sistema");
                    return;
                }*/

                //Analizo si el serial ya esta en la lista
                if (EvalSerial1 && EvalSerial2 && EvalSerial3)
                {
                    Util.ShowError("El serial ya existe en el listado de ingresos");
                    return;
                }

                //Evaluo cuales seriales estan visibles para adicionarlos al registro
                int cont = 4;
                foreach (DataDefinitionByBin DataDefinitionByBin in View.Model.CamposSeriales)
                {
                    switch (DataDefinitionByBin.DataDefinition.Code)
                    {
                        case "SERIAL1":
                            dr[cont] = View.GetSerial1.Text;
                            SerialLabel.LabelCode = View.GetSerial1.Text;
                            break;
                        case "SERIAL2":
                            dr[cont] = View.GetSerial2.Text;
                            SerialLabel.PrintingLot = View.GetSerial2.Text;
                            break;
                        case "SERIAL3":
                            dr[cont] = View.GetSerial3.Text;
                            SerialLabel.Manufacturer = View.GetSerial3.Text;
                            break;
                    }
                    cont++;
                }

                //offset = cont;
            }
            //Caso en que el producto no es serializable
            else
            {
                SerialLabel.LabelCode = Guid.NewGuid().ToString();
            }

            if (View.Model.ProductoSerial.ErpTrackOpt == 0)
            {
                //Realizo un control si hay algun error guardando los datos
                try
                {
                    //Define Document, Product, Unit and Qty to send to receiving transaction
                    DocumentLine receivingLine = new DocumentLine
                    {
                        Document = View.Model.HeaderDocument,
                        Product = SerialLabel.Product,
                        Unit = SerialLabel.Product.BaseUnit,
                        Quantity = SerialLabel.StartQty,
                        QtyPending = SerialLabel.StartQty,
                        QtyAllocated = 0,
                        CreatedBy = App.curUser.UserName,
                        Note = SerialLabel.Notes
                    };
                    service.ReceiveProduct(receivingLine, SerialLabel.Product.BaseUnit, SerialLabel.Bin, new Node { NodeID = NodeType.Received });
                }
                catch (Exception Ex)
                {
                    Util.ShowError("1. Hubo un error intentando recibir el producto, por favor volver a intentarlo. Error: " + Ex.Message);
                    return;
                }
            }
            else
            {
                //Realizo un control si hay algun error guardando los datos
                try
                {
                    //Guardo el serial en Label y asigno el Id
                    SerialLabel = service.SaveLabel(SerialLabel);
                    service.ReceiveLabel(View.Model.HeaderDocument, SerialLabel, SerialLabel.Bin, new Node { NodeID = NodeType.Received });

                    //Valido si el Label fue guardado correctamente para continuar, en caso contrario muestro mensaje de error y aborto el save
                    if (SerialLabel.LabelID == 0)
                    {
                        Util.ShowError("2. Hubo un error intentando recibir el producto no serializado, por favor volver a intentarlo.");
                        return;
                    }
                }
                catch
                {
                    //Util.ShowMessage("El sistema esta ocupado. Oprima enter para continuar con la carga.");
                    ////Guardo el serial en Label y asigno el Id
                    //SerialLabel = service.SaveLabel(SerialLabel);
                    //service.ReceiveLabel(View.Model.HeaderDocument, SerialLabel, SerialLabel.Bin, new Node { NodeID = NodeType.Received });

                    //Ciclo que espera por un recurso en la BD para guardar un registro.
                    Boolean Control = true;
                    //Util.ShowMessage("El sistema esta ocupado. Oprima enter para continuar con la carga.");
                    while (Control)
                    {
                        try
                        {
                            SerialLabel = service.SaveLabel(SerialLabel);
                            //service.SaveLabel(SerialLabel);
                            service.ReceiveLabel(View.Model.HeaderDocument, SerialLabel, SerialLabel.Bin, new Node { NodeID = NodeType.Received });
                            Control = false;
                        }
                        catch { Control = true; }
                    }
                }
            }

            #region Agregar los campos a la grilla

            //Asigno al campo 0 el LabelID
            dr[0] = SerialLabel.LabelID;

            //Asigno al campo 1 ProductID, campo 2 ProducName, campo 3 Cantidad
            dr[1] = View.Model.ProductoSerial.ProductID;
            dr[2] = View.Model.ProductoSerial.Name;
            dr[3] = View.GetCantidadProducto.Text;

            //Asigno a cada campo su valor definido por defecto
            foreach (DataDefinitionByBin DataDefinitionByBin in View.Model.CamposDetails)
            {
                dr[DataDefinitionByBin.DataDefinition.Code] = DataDefinitionByBin.DataDefinition.DefaultValue;
            }
            View.Model.ListRecords.Rows.Add(dr);

            //Limpio los campos para digitar nuevos valores
            if (View.Model.ProductoSerial.ErpTrackOpt == 1)
            {
                //Limpio los seriales para digitar nuevos datos
                View.GetSerial1.Text = (View.Model.RecordCliente.AddressLine3 == "1") ? View.Model.RecordCliente.City : "";
                View.GetSerial2.Text = "";
                View.GetSerial3.Text = "";
                View.GetSerial1.Focus();
            }
            else
            {
                //Limpio la cantidad de producto a ingresar
                View.GetCantidadProducto.Text = "";
                View.GetCantidadProducto.Focus();
            }
            #endregion
        }