private void btnGuardar_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                var corralRangoPl            = new CorralRangoPL();
                List <CorralRangoInfo> lista = dgCorralesRango.Items.Cast <CorralRangoInfo>().ToList();

                //Se Eliminan las configuraciones
                foreach (var corralGrid in _corralesEliminados)
                {
                    corralGrid.OrganizacionID        = _organizacionId;
                    corralGrid.UsuarioModificacionId = Convert.ToInt32(Application.Current.Properties["UsuarioID"]);
                }

                corralRangoPl.Guardar(lista, _corralesEliminados);

                SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                  Properties.Resources.ConfiguracionCorrales_Guardado,
                                  MessageBoxButton.OK,
                                  MessageImage.Correct);
                CargarCorralesConfigurados();
                btnGuardar.IsEnabled = false;
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                  Properties.Resources.ConfiguracionCorrales_ErrorGuardar,
                                  MessageBoxButton.OK,
                                  MessageImage.Error);
            }
        }
        /// <summary>
        /// Carga el grid de corrales configurados
        /// </summary>
        private void CargarCorralesConfigurados()
        {
            try
            {
                btnGuardar.IsEnabled = false;
                var corralRangoPl = new CorralRangoPL();
                dgCorralesRango.ItemsSource = null;
                var corralesConfigurados = corralRangoPl.ObtenerCorralesConfiguradosPorOrganizacionID(_organizacionId);

                _corralesDisponibles = corralesConfigurados ?? new List <CorralRangoInfo>();

                dgCorralesRango.ItemsSource = _corralesDisponibles;
            }
            catch (ExcepcionGenerica)
            {
                SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                  Properties.Resources.ConfigurarCorralesDisponibles_ErrorCorralesDisponibles,
                                  MessageBoxButton.OK,
                                  MessageImage.Error);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                  Properties.Resources.ConfigurarCorralesDisponibles_ErrorCorralesDisponibles,
                                  MessageBoxButton.OK,
                                  MessageImage.Error);
            }
        }
        /// <summary>
        /// Llena el combo de corral
        /// </summary>
        private void CargaCboCorral()
        {
            try
            {
                var corralRangoPl = new CorralRangoPL();
                _corrales = corralRangoPl.ObtenerPorOrganizacionID(_organizacionId);
                if (_corrales.Count > 0)
                {
                    var corralesAEliminar = new List <CorralRangoInfo>();
                    foreach (var corral in _corrales)
                    {
                        if (ExisteCorralEnGrid(corral))
                        {
                            corralesAEliminar.Add(corral);
                            //_corrales.Remove(corral);
                            //break;
                        }
                    }
                    //Se agregan los corrales a eliminar para q no se contemplen
                    if (_corralesEliminados != null && _corralesEliminados.Count > 0)
                    {
                        corralesAEliminar.AddRange(_corralesEliminados);
                    }

                    if (corralesAEliminar.Count > 0)
                    {
                        foreach (var corral in corralesAEliminar)
                        {
                            var listaCorrales = new List <CorralRangoInfo>();
                            listaCorrales.AddRange(_corrales);
                            foreach (var _corral in listaCorrales.Where(_corral => corral.CorralID == _corral.CorralID))
                            {
                                _corrales.Remove(_corral);
                            }
                        }
                    }

                    cboCorral.ItemsSource = _corrales;
                }
                else
                {
                    cboCorral.ItemsSource = null;
                }
            }
            catch (ExcepcionGenerica)
            {
                SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                  Properties.Resources.ConfigurarCorralesDisponibles_ErrorCorralesDisponibles,
                                  MessageBoxButton.OK,
                                  MessageImage.Error);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                  Properties.Resources.ConfigurarCorralesDisponibles_ErrorCorralesDisponibles,
                                  MessageBoxButton.OK,
                                  MessageImage.Error);
            }
        }
 /// <summary>
 /// Valida si el corral tiene un lote asignado para no permitir su edicion
 /// </summary>
 /// <param name="organizacion"></param>
 /// <param name="corralId"></param>
 private static Boolean ValidaLoteAsignado(int organizacion, int corralId)
 {
     try
     {
         var corralRangoPl = new CorralRangoPL();
         return(corralRangoPl.ObtenerLoteAsignado(organizacion, corralId));
     }
     catch (ExcepcionGenerica)
     {
         SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                           Properties.Resources.ConfigurarCorralesDisponibles_ErrorCorralesDisponibles,
                           MessageBoxButton.OK,
                           MessageImage.Error);
     }
     catch (Exception ex)
     {
         Logger.Error(ex);
         SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                           Properties.Resources.ConfigurarCorralesDisponibles_ErrorCorralesDisponibles,
                           MessageBoxButton.OK,
                           MessageImage.Error);
     }
     return(false);
 }
        /// <summary>
        /// Agrega un corral al Datagrid y a la base de datos
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAgregar_Click(object sender, RoutedEventArgs e)
        {
            try{
                if (cboCorral.SelectedItem != null && cboRangoInicial.SelectedItem != null && cboSexo.SelectedItem != null)
                {
                    var corralRangoPl         = new CorralRangoPL();
                    var sexoGanadoString      = ObtieneSexoGanado(cboSexo.SelectedValue, false);
                    var descripcionTipoGanado = cboTipoGanado.SelectedItem.ToString();
                    var usuarioID             = Convert.ToInt32(Application.Current.Properties["UsuarioID"]);
                    //creacion de la entidad
                    var corralRangoInfo = new CorralRangoInfo
                    {
                        OrganizacionID        = _organizacionId,
                        Activo                = 1, //estado inicial
                        CorralID              = ConvierteCorralRangoInfo(cboCorral.SelectedItem).CorralID,
                        Codigo                = ConvierteCorralRangoInfo(cboCorral.SelectedItem).Codigo,
                        Sexo                  = ObtieneSexoGanado(cboSexo.SelectedValue, true),
                        RangoInicial          = ConvierteTipoGanadoInfo(cboRangoInicial.SelectedItem).PesoMinimo,
                        RangoFinal            = int.Parse(cboRangoFinal.Text.Substring(0, cboRangoFinal.Text.Length - 4)),
                        DescripcionTipoGanado = descripcionTipoGanado,
                        UsuarioCreacionId     = usuarioID,
                        UsuarioModificacionId = usuarioID,
                    };
                    //datos del corral
                    var datosGrid = new CorralRangoInfo
                    {
                        Codigo                = corralRangoInfo.Codigo,
                        Sexo                  = sexoGanadoString,
                        RangoInicial          = corralRangoInfo.RangoInicial,
                        RangoFinal            = corralRangoInfo.RangoFinal,
                        DescripcionTipoGanado = descripcionTipoGanado
                    };

                    if (btnAgregar.Content.Equals(Properties.Resources.btnAgregar))
                    {
                        //Validamos que no tenga lote asignado
                        if (ValidaLoteAsignado(_organizacionId, corralRangoInfo.CorralID))
                        {
                            SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                              Properties.Resources.ConfigurarCorralesDisponibles_LoteAsignado,
                                              MessageBoxButton.OK,
                                              MessageImage.Warning);
                            return;
                        }

                        corralRangoInfo.UsuarioCreacionId = usuarioID;
                        //corralRangoInfo.FechaCreacion = DateTime.Now;

                        corralRangoInfo.Accion = AccionConfigurarCorrales.Agregar;

                        corralRangoInfo.Id = dgCorralesRango.Items.Count + 1;

                        _corralesDisponibles.Add(corralRangoInfo);
                        dgCorralesRango.ItemsSource = null;
                        dgCorralesRango.ItemsSource = _corralesDisponibles;

                        //dgCorralesRango.Items.Add(corralRangoInfo);

                        //Agrega el corral a CorralRango
                        //corralRangoPl.Crear(corralRangoInfo);
                        btnGuardar.IsEnabled = true;


                        corralRangoInfo.Modificado = true;
                        btnCancelar.IsEnabled      = true;
                    }
                    else
                    {
                        if (btnAgregar.Content.Equals(Properties.Resources.btnActualizar))
                        {
                            corralRangoInfo.CorralAnteriorID      = int.Parse(txtCorralAnteriorID.Text);
                            corralRangoInfo.UsuarioModificacionId = usuarioID;
                            //corralRangoInfo.FechaModificacion = DateTime.Now;

                            corralRangoInfo.Id     = corralConfiguradoID;
                            corralRangoInfo.Accion = _accion == AccionConfigurarCorrales.Agregar ? _accion : AccionConfigurarCorrales.Actualizar;

                            corralRangoInfo.Modificado = true;



                            ActualizarRegistroGrid(corralRangoInfo);
                            //corralRangoPl.Actualizar(corralRangoInfo);

                            LimpiarCampos();
                            btnGuardar.IsEnabled = true;
                            txtRangoInicial.Text = "0";
                            btnAgregar.Content   = Properties.Resources.btnAgregar;
                        }
                    }

                    //TODO: Revisar carga de nuevo del combo de corrales disponibles datosGrid q no se usa

                    CargaCboCorral();
                    cboRangoInicial.Items.Clear();
                    cboSexo.SelectedIndex       = -1;
                    cboTipoGanado.SelectedIndex = -1;
                    lblKg.Visibility            = Visibility.Hidden;
                    //CargarCorralesConfigurados();
                }
                else
                {
                    SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                      Properties.Resources.ConfigurarCorralesDisponibles_TodosObligatorios,
                                      MessageBoxButton.OK,
                                      MessageImage.Stop);
                }
            }
            catch (ExcepcionGenerica exg)
            {
                Logger.Error(exg);
                SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                  Properties.Resources.ConfigurarCorralesDisponibles_ErrorAgregarActualizar,
                                  MessageBoxButton.OK,
                                  MessageImage.Error);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                SkMessageBox.Show(Application.Current.Windows[ConstantesVista.WindowPrincipal],
                                  Properties.Resources.ConfigurarCorralesDisponibles_ErrorAgregarActualizar,
                                  MessageBoxButton.OK,
                                  MessageImage.Error);
            }
        }