/// <summary>
        /// Registrar una inconsistencia en un manifiesto del CEF.
        /// </summary>
        /// <param name="i">Objeto InconsistenciaManifiestoCEF con los datos de la inconsistencia</param>
        public void agregarInconsistencia(ref InconsistenciaManifiestoCEF i)
        {
            SqlCommand comando = _manejador.obtenerProcedimiento("InsertInconsistenciaManifiestoCEF");

            _manejador.agregarParametro(comando, "@camara", i.Camara, SqlDbType.TinyInt);
            _manejador.agregarParametro(comando, "@manifiesto", i.Manifiesto, SqlDbType.Int);
            _manejador.agregarParametro(comando, "@monto_colones_reportado", i.Monto_colones_reportado, SqlDbType.Money);
            _manejador.agregarParametro(comando, "@monto_dolares_reportado", i.Monto_dolares_reportado, SqlDbType.Money);
            _manejador.agregarParametro(comando, "@monto_euros_reportado", i.Monto_euros_reportado, SqlDbType.Money);
            _manejador.agregarParametro(comando, "@monto_total_reportado", i.Monto_total_reportado, SqlDbType.Money);
            _manejador.agregarParametro(comando, "@monto_total_real", i.Monto_total_real, SqlDbType.Money);
            _manejador.agregarParametro(comando, "@fecha", i.Fecha, SqlDbType.DateTime);
            _manejador.agregarParametro(comando, "@comentario", i.Comentario, SqlDbType.VarChar);

            try
            {
                i.Id = (int)_manejador.ejecutarEscalar(comando);
                comando.Connection.Close();
            }
            catch (Exception)
            {
                comando.Connection.Close();
                throw new Excepcion("ErrorInconsistenciaManifiestoCEFRegistro");
            }
        }
        /// <summary>
        /// Verificar si existe una inconsistencia para un manifiesto del CEF.
        /// </summary>
        /// <param name="i">Objeto InconsistenciaManifiestoCEF con los datos de la inconsistencia</param>
        /// <returns>Valor que indica si la inconsistencia existe</returns>
        public bool verificarInconsistencia(InconsistenciaManifiestoCEF i)
        {
            bool existe = false;

            SqlCommand    comando    = _manejador.obtenerProcedimiento("SelectExisteInconsistenociaManifiestoCEF");
            SqlDataReader datareader = null;

            _manejador.agregarParametro(comando, "@manifiesto", i.Manifiesto, SqlDbType.Int);

            try
            {
                datareader = _manejador.ejecutarConsultaDatos(comando);

                if (datareader.Read())
                {
                    int id_encontrado = (int)datareader["pk_ID"];

                    existe = id_encontrado != i.Id;
                }

                comando.Connection.Close();
            }
            catch (Exception)
            {
                comando.Connection.Close();
                throw new Excepcion("ErrorVerificarInconsistenciaManifiestoCEFDuplicado");
            }

            return(existe);
        }
        /// <summary>
        /// Formato de la lista de inconsistencias en los manifiestos del CEF.
        /// </summary>
        private void dgvInconsistenciasManifiestosCEF_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.ColumnIndex == ManifiestoManifiesto.Index)
            {
                InconsistenciaManifiestoCEF inconsistencia =
                    (InconsistenciaManifiestoCEF)dgvInconsistenciasManifiestosCEF.Rows[e.RowIndex].DataBoundItem;
                ManifiestoCEF manifiesto = inconsistencia.Manifiesto;

                if (manifiesto.Fecha_procesamiento != null)
                {
                    dgvInconsistenciasManifiestosCEF[CajeroManifiesto.Index, e.RowIndex].Value      = manifiesto.Cajero;
                    dgvInconsistenciasManifiestosCEF[CoordinadorManifiesto.Index, e.RowIndex].Value = manifiesto.Coordinador;
                }

                dgvInconsistenciasManifiestosCEF[MontoColonesManifiesto.Index, e.RowIndex].Value = manifiesto.Monto_colones;
                dgvInconsistenciasManifiestosCEF[MontoDolaresManifiesto.Index, e.RowIndex].Value = manifiesto.Monto_dolares;
                dgvInconsistenciasManifiestosCEF[Depositos.Index, e.RowIndex].Value = manifiesto.Depositos;
            }
            else if (e.ColumnIndex == MontoTotal.Index)
            {
                InconsistenciaManifiestoCEF inconsistencia =
                    (InconsistenciaManifiestoCEF)dgvInconsistenciasManifiestosCEF.Rows[e.RowIndex].DataBoundItem;

                dgvInconsistenciasManifiestosCEF[DiferenciaInconsistenciaManifiesto.Index, e.RowIndex].Value =
                    Math.Abs(inconsistencia.Monto_total_real - inconsistencia.Monto_total_reportado);
                dgvInconsistenciasManifiestosCEF[TipoInconsistenciaManifiesto.Index, e.RowIndex].Value =
                    inconsistencia.Monto_total_real > inconsistencia.Monto_total_reportado ?
                    "Sobrante" : "Faltante";
            }
        }
        /// <summary>
        /// Listar las inconsistencias de manifiestos del CEF.
        /// </summary>
        /// <param name="i">Fecha inicial del periodo de tiempo</param>
        /// <param name="f">Fecha final del periodo de tiempo</param>
        /// <returns>Lista de las inconsistencias registradas en el periodo de tiempo indicado</returns>
        public BindingList <InconsistenciaManifiestoCEF> listarInconsistencias(DateTime i, DateTime f)
        {
            BindingList <InconsistenciaManifiestoCEF> inconsistencias = new BindingList <InconsistenciaManifiestoCEF>();

            SqlCommand    comando    = _manejador.obtenerProcedimiento("SelectInconsistenciasManifiestosCEF");
            SqlDataReader datareader = null;

            _manejador.agregarParametro(comando, "@fecha_inicio", i, SqlDbType.DateTime);
            _manejador.agregarParametro(comando, "@fecha_fin", f, SqlDbType.DateTime);

            try
            {
                datareader = _manejador.ejecutarConsultaDatos(comando);

                while (datareader.Read())
                {
                    int      id_inconsistenca        = (int)datareader["ID_Incosistencia"];
                    DateTime fecha                   = (DateTime)datareader["Fecha"];
                    decimal  monto_colones_reportado = (decimal)datareader["Monto_Colones_Reportado"];
                    decimal  monto_dolares_reportado = (decimal)datareader["Monto_Dolares_Reportado"];
                    decimal  monto_euros_reportado   = 0;
                    if (datareader["Monto_Euros_Reportado"] != DBNull.Value)
                    {
                        monto_euros_reportado = (decimal)datareader["Monto_Euros_Reportado"];
                    }
                    decimal monto_total_reportado = (decimal)datareader["Monto_Total_Reportado"];
                    decimal monto_total_real      = (decimal)datareader["Monto_Total_Real"];
                    string  comentario            = (string)datareader["Comentario"];

                    int     id_manifiesto = (int)datareader["ID_Manifiesto"];
                    string  codigo        = (string)datareader["Codigo"];
                    decimal monto_colones = (decimal)datareader["Monto_Colones"];
                    decimal monto_dolares = (decimal)datareader["Monto_Dolares"];
                    short   depositos     = (short)datareader["Depositos"];
                    byte    id_camara     = (byte)datareader["ID_Camara"];
                    string  identificador = (string)datareader["Identificador"];

                    ManifiestoCEF manifiesto = new ManifiestoCEF(id_manifiesto, codigo: codigo, monto_colones: monto_colones,
                                                                 monto_dolares: monto_dolares, depositos: depositos);
                    Camara camara = new Camara(identificador, id: id_camara);

                    InconsistenciaManifiestoCEF inconsistencia =
                        new InconsistenciaManifiestoCEF(id_inconsistenca, manifiesto, camara, fecha, monto_colones_reportado,
                                                        monto_dolares_reportado, monto_total_reportado, monto_total_real,
                                                        comentario, monto_euros_reportado);

                    inconsistencias.Add(inconsistencia);
                }

                comando.Connection.Close();
            }
            catch (Exception)
            {
                comando.Connection.Close();
                throw new Excepcion("ErrorDatosConexion");
            }

            return(inconsistencias);
        }
        /// <summary>
        /// Agregar una inconsistencia a la lista de inconsistencias en manifiestos del CEF.
        /// </summary>
        public void agregarInconsistenciaManifiestoCEF(InconsistenciaManifiestoCEF inconsistencia)
        {
            BindingList <InconsistenciaManifiestoCEF> inconsistencias =
                (BindingList <InconsistenciaManifiestoCEF>)dgvInconsistenciasManifiestosCEF.DataSource;

            inconsistencias.Add(inconsistencia);
            dgvInconsistenciasManifiestosCEF.AutoResizeColumns();
        }
        /// <summary>
        /// Mostrar la ventana de modificación de inconsistencias en manifiestos por causa de los clientes.
        /// </summary>
        public void mostarVentanaModificacionClientesManifiestos()
        {
            try
            {
                InconsistenciaManifiestoCEF inconsistencia =
                    (InconsistenciaManifiestoCEF)dgvInconsistenciasManifiestosCEF.SelectedRows[0].DataBoundItem;
                frmMantenimientoInconsistenciasManifiestosCEF formulario = new frmMantenimientoInconsistenciasManifiestosCEF(inconsistencia, _coordinador);

                formulario.ShowDialog(this);
            }
            catch (Excepcion ex)
            {
                ex.mostrarMensaje();
            }
        }
        /// <summary>
        /// Eliminar los datos de una inconsistencia en un manifiesto del CEF.
        /// </summary>
        /// <param name="i">Objeto InconsistenciaManifiestoCEF con los datos de la inconsistencia</param>
        public void eliminarInconsistencia(InconsistenciaManifiestoCEF i)
        {
            SqlCommand comando = _manejador.obtenerProcedimiento("DeleteInconsistenciaManifiestoCEF");

            _manejador.agregarParametro(comando, "@inconsistencia", i.Id, SqlDbType.Int);

            try
            {
                _manejador.ejecutarConsultaActualizacion(comando);
                comando.Connection.Close();
            }
            catch (Exception)
            {
                comando.Connection.Close();
                throw new Excepcion("ErrorInconsistenciaManifiestoCEFEliminacion");
            }
        }
        public frmMantenimientoInconsistenciasManifiestosCEF(InconsistenciaManifiestoCEF inconsistencia, Colaborador coordinador)
        {
            InitializeComponent();

            _inconsistencia = inconsistencia;
            _coordinador    = coordinador;

            try
            {
                this.cargarDatos();

                // Mostrar los datos de la inconsistencia

                cboCamara.Text = _inconsistencia.Camara.Identificador;

                txtComentario.Text = _inconsistencia.Comentario;

                this.mostrarDatos(_inconsistencia.Manifiesto);

                nudMontoColonesReportado.Value = _inconsistencia.Monto_colones_reportado;
                nudMontoDolaresReportado.Value = _inconsistencia.Monto_dolares_reportado;
                nudMontoEurosReportado.Value   = _inconsistencia.Monto_euros_reportado;
                nudMontoTotalReportado.Value   = _inconsistencia.Monto_total_reportado;
                nudMontoTotalReal.Value        = _inconsistencia.Monto_total_real;

                BindingList <Manifiesto> manifiestos = (BindingList <Manifiesto>)dgvManifiestos.DataSource;

                manifiestos.Add(_inconsistencia.Manifiesto);

                // Validar si se pueden modificar los datos de la inconsistencia

                bool estado = _supervisor || (_coordinador_valido && _dia_valido);

                gbManifiestos.Enabled     = estado;
                gbDatosReportados.Enabled = estado;
                gbDetalle.Enabled         = estado;
                btnGuardar.Enabled        = estado;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// Clic en el botón de eliminar una inconsistencia en un manifiesto.
        /// </summary>
        private void btnEliminarInconsistenciaManifiesto_Click(object sender, EventArgs e)
        {
            try
            {
                if (Mensaje.mostrarMensajeConfirmacion("MensajeInconsistenciaEliminacion") == DialogResult.Yes)
                {
                    InconsistenciaManifiestoCEF inconsistencia =
                        (InconsistenciaManifiestoCEF)dgvInconsistenciasManifiestosCEF.SelectedRows[0].DataBoundItem;

                    _coordinacion.eliminarInconsistenciaManifiestoCEF(inconsistencia);

                    dgvInconsistenciasManifiestosCEF.Rows.Remove(dgvInconsistenciasManifiestosCEF.SelectedRows[0]);
                    Mensaje.mostrarMensaje("MensajeInconsistenciaConfirmacionEliminacion");
                }
            }
            catch (Excepcion ex)
            {
                ex.mostrarMensaje();
            }
        }
        /// <summary>
        /// Se selecciona otra inconsistencia en un manifiesto del CEF.
        /// </summary>
        private void dgvInconsistenciasManifiestosCEF_SelectionChanged(object sender, EventArgs e)
        {
            if (dgvInconsistenciasManifiestosCEF.SelectedRows.Count == 0)
            {
                btnEliminarInconsistenciaManifiesto.Enabled  = false;
                btnModificarInconsistenciaManifiesto.Enabled = false;
            }
            else
            {
                InconsistenciaManifiestoCEF inconsistencia =
                    (InconsistenciaManifiestoCEF)dgvInconsistenciasManifiestosCEF.SelectedRows[0].DataBoundItem;
                ManifiestoCEF manifiesto = inconsistencia.Manifiesto;

                bool estado = true;

                if (manifiesto.Coordinador != null)
                {
                    estado = manifiesto.Coordinador.Equals(_coordinador);
                }

                btnEliminarInconsistenciaManifiesto.Enabled  = true;
                btnModificarInconsistenciaManifiesto.Enabled = true;
            }
        }
        /// <summary>
        /// Clic en el botón de guardar.
        /// </summary>
        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if (dgvManifiestos.SelectedRows.Count == 0 || cboCajero.SelectedItem == null || cboDigitador.SelectedItem == null ||
                cboPuntoVenta.SelectedItem == null || cboCamara.SelectedItem == null)
            {
                Excepcion.mostrarMensaje("ErrorInconsistenciaDatosRegistro");
                return;
            }

            try
            {
                frmAdministracionInconsistenciasCEF padre = (frmAdministracionInconsistenciasCEF)this.Owner;

                Camara   camara     = (Camara)cboCamara.SelectedItem;
                DateTime fecha      = dtpFecha.Value;
                string   comentario = txtComentario.Text;

                decimal monto_colones_reportado = nudMontoColonesReportado.Value;
                decimal monto_dolares_reportado = nudMontoDolaresReportado.Value;
                decimal monto_total_reportado   = nudMontoTotalReportado.Value;
                decimal monto_euros_reportado   = nudMontoEurosReportado.Value;

                PuntoVenta  punto_venta      = (PuntoVenta)cboPuntoVenta.SelectedItem;
                Colaborador cajero           = (Colaborador)cboCajero.SelectedItem;
                Colaborador digitador        = (Colaborador)cboDigitador.SelectedItem;
                DateTime    fecha_manifiesto = dtpFechaManifiesto.Value;

                decimal monto_colones = nudMontoColonesReal.Value;
                decimal monto_dolares = nudMontoDolaresReal.Value;
                decimal monto_total   = nudMontoTotalReal.Value;
                decimal monto_euros   = nudMontoEurosReal.Value;
                short   depositos     = (short)nudDepositosReales.Value;

                _manifiesto.Cajero              = cajero;
                _manifiesto.Digitador           = digitador;
                _manifiesto.Coordinador         = _coordinador;
                _manifiesto.Fecha_procesamiento = fecha_manifiesto;
                _manifiesto.Punto_venta         = punto_venta;
                _manifiesto.Monto_colones       = monto_colones;
                _manifiesto.Monto_dolares       = monto_dolares;
                _manifiesto.Depositos           = depositos;
                _manifiesto.Monto_Euros         = monto_euros;

                // Verificar si la inconsistencia es nueva

                if (_inconsistencia == null)
                {
                    // Agregar la inconsistencia

                    if (Mensaje.mostrarMensajeConfirmacion("MensajeInconsistenciaRegistro") == DialogResult.Yes)
                    {
                        InconsistenciaManifiestoCEF nueva =
                            new InconsistenciaManifiestoCEF(_manifiesto, camara, fecha, monto_colones_reportado,
                                                            monto_dolares_reportado, monto_total_reportado, monto_total,
                                                            comentario, monto_euros_reportado);

                        _coordinacion.agregarInconsistenciaManifiestoCEF(ref nueva);

                        padre.agregarInconsistenciaManifiestoCEF(nueva);
                        Mensaje.mostrarMensaje("MensajeInconsistenciaConfirmacionRegistro");
                        this.Close();
                    }
                }
                else
                {
                    InconsistenciaManifiestoCEF copia =
                        new InconsistenciaManifiestoCEF(_inconsistencia.Id, _manifiesto, camara, fecha, monto_colones_reportado,
                                                        monto_dolares_reportado, monto_total_reportado, monto_total,
                                                        comentario, monto_euros_reportado);

                    _coordinacion.actualizarInconsistenciaManifiestoCEF(copia);

                    //Actualizar la inconsistencia

                    _inconsistencia.Manifiesto = _manifiesto;
                    _inconsistencia.Camara     = camara;
                    _inconsistencia.Fecha      = fecha;

                    _inconsistencia.Monto_colones_reportado = monto_colones_reportado;
                    _inconsistencia.Monto_dolares_reportado = monto_dolares_reportado;

                    _inconsistencia.Monto_total_reportado = monto_total_reportado;
                    _inconsistencia.Monto_total_real      = monto_total;

                    padre.actualizarListaClientesManifiestos();
                    Mensaje.mostrarMensaje("MensajeInconsistenciaConfirmacionActualizacion");
                    this.Close();
                }
            }
            catch (Excepcion ex)
            {
                ex.mostrarMensaje();
            }
        }