public bool Registrar_TransaccDetalle(beTransaccionDetalle obeTransaccDet,
                                       ref string mensajeError,
                                       ref bool insertar,
                                       ref DateTime fechaRegistro,
                                       bool registrarSDF)
 {
     return o_daTransaccionDetalle.Registrar_TransaccDetalle(obeTransaccDet,
                                                             ref mensajeError,
                                                             ref insertar,
                                                             ref fechaRegistro,
                                                             registrarSDF);
 }
        public bool Registrar_TransaccDetalle(beTransaccionDetalle obeTransaccDet,
                                              ref string mensajeError,
                                              ref bool insertar,
                                              ref DateTime fechaRegistro,
                                              bool registrarSDF)
        {
            int totalRegDet = 0;
            int totalRegDetVar = 0;
            correcto = false;
            SqlCeCommand cmdSqlCE = new SqlCeCommand();

            //1° Abrir conexión
            correcto = clsCnxPDA.Accion_BD_PDA(true, ref mensajeError);
            if (!(correcto))
            {
                return correcto;
            }

            try
            {
                //2° Verificar si ya fue registrado
                if (registrarSDF)
                {
                    //Detalle
                    totalRegDet = 0;
                    consulta = "Select Count(1) From TransaccionDetalle Where IdTx=@IdTx And Coalesce(FlgAnulado,0)= 0";
                    cmdSqlCE.CommandText = consulta;
                    cmdSqlCE.Connection = daCnxPDA.cnxPDA;
                    cmdSqlCE.Parameters.Clear();
                    cmdSqlCE.Parameters.Add("@IdTx", SqlDbType.NVarChar, 12).Value = obeTransaccDet.IdTx;
                    totalRegDet = Convert.ToInt32(cmdSqlCE.ExecuteScalar());

                    //Detalle Varios
                    totalRegDetVar = 0;
                    consulta = "Select Count(1) From TransacDetalleVarios Where IdTx=@IdTx And Coalesce(FlgAnulado,0)= 0";
                    cmdSqlCE.CommandText = consulta;
                    cmdSqlCE.Connection = daCnxPDA.cnxPDA;
                    cmdSqlCE.Parameters.Clear();
                    cmdSqlCE.Parameters.Add("@IdTx", SqlDbType.NVarChar, 12).Value = obeTransaccDet.IdTx;
                    totalRegDetVar = Convert.ToInt32(cmdSqlCE.ExecuteScalar());

                    //Consultar si el registro ya se encuentra
                    consulta = "Select Count(1) From TransaccionDetalle Where IdTx = @IdTx And CodBarraTicket = @CodBarraTicket " +
                               "And Coalesce(FlgAnulado,0)= 0";
                    cmdSqlCE.CommandText = consulta;
                    cmdSqlCE.Connection = daCnxPDA.cnxPDA;
                    cmdSqlCE.Parameters.Clear();
                    cmdSqlCE.Parameters.Add("@IdTx", SqlDbType.NVarChar, 12).Value = obeTransaccDet.IdTx;
                    cmdSqlCE.Parameters.Add("@CodBarraTicket", SqlDbType.NVarChar, 20).Value = obeTransaccDet.CodBaraTicket;
                    totalRegistros = Convert.ToInt32(cmdSqlCE.ExecuteScalar());

                    if (totalRegistros == 0)
                    {
                        //3° Insertar detalle
                        insertar = true;
                        consulta = "Insert Into TransaccionDetalle(IdTx, CodBarraTicket, NumLectura, Obs," +
                                   "TipoTarifa, FechaRegistro, Usuario, FlgAnulado, FlgSubida) " +
                                   "Values (@IdTx, @CodBarraTicket, @NumLectura, @Obs, @TipoTarifa," +
                                   "@FechaRegistro, @Usuario, @FlgAnulado, @FlgSubida)";

                        cmdSqlCE.CommandText = consulta;
                        cmdSqlCE.Connection = daCnxPDA.cnxPDA;
                        cmdSqlCE.Parameters.Clear();
                        cmdSqlCE.Parameters.Add("@IdTx", SqlDbType.NVarChar, 12).Value = obeTransaccDet.IdTx;
                        cmdSqlCE.Parameters.Add("@CodBarraTicket", SqlDbType.NVarChar, 20).Value = obeTransaccDet.CodBaraTicket;
                        cmdSqlCE.Parameters.Add("@NumLectura", SqlDbType.SmallInt).Value = obeTransaccDet.NumLectura;
                        cmdSqlCE.Parameters.Add("@Obs", SqlDbType.NText).Value = obeTransaccDet.Obs;
                        cmdSqlCE.Parameters.Add("@TipoTarifa", SqlDbType.NChar, 50).Value = "";
                        cmdSqlCE.Parameters.Add("@FechaRegistro", SqlDbType.DateTime).Value = DateTime.Now;
                        cmdSqlCE.Parameters.Add("@Usuario", SqlDbType.NVarChar, 20).Value = obeTransaccDet.Usuario;
                        cmdSqlCE.Parameters.Add("@FlgAnulado", SqlDbType.Bit).Value = false;
                        cmdSqlCE.Parameters.Add("@FlgSubida", SqlDbType.Bit).Value = obeTransaccDet.FlgSubida;
                        cmdSqlCE.ExecuteNonQuery();
                        mensajeError = "Error al registrar transacción detalle";
                    }
                    else
                    {
                        //3° Actualiza detalle
                        insertar = false;
                        consulta = "Select FechaRegistro From TransaccionDetalle Where IdTx = @IdTx And CodBarraTicket = @CodBarraTicket";
                        cmdSqlCE.CommandText = consulta;
                        cmdSqlCE.Connection = daCnxPDA.cnxPDA;
                        cmdSqlCE.Parameters.Clear();
                        cmdSqlCE.Parameters.Add("@IdTx", SqlDbType.NVarChar, 12).Value = obeTransaccDet.IdTx;
                        cmdSqlCE.Parameters.Add("@CodBarraTicket", SqlDbType.NVarChar, 20).Value = obeTransaccDet.CodBaraTicket;
                        fechaRegistro = Convert.ToDateTime(cmdSqlCE.ExecuteNonQuery());
                        mensajeError = "Error al seleccionar 'Fecha de Registro'";
                    }

                    //4° Verificar si es el primer registro
                    if ((totalRegDet == 0) && (totalRegDetVar == 0))
                    {
                        //5° Solo si es el primer registro se actualiza el estado
                        consulta = "Update Transaccion " +
                                   "Set FlgEstado = 1," +
                                   "FechaUpdate   = @FechaUpdate," +
                                   "UsuarioUpdate = @UsuarioUpdate," +
                                   "HoraInicio    = @HoraInicio " +
                                   "Where IdTx    = @IdTx";

                        cmdSqlCE.CommandText = consulta;
                        cmdSqlCE.Connection = daCnxPDA.cnxPDA;
                        cmdSqlCE.Parameters.Clear();
                        cmdSqlCE.Parameters.Add("@FechaUpdate", SqlDbType.DateTime).Value = DateTime.Now;
                        cmdSqlCE.Parameters.Add("@UsuarioUpdate", SqlDbType.NVarChar, 20).Value = obeTransaccDet.Usuario;
                        cmdSqlCE.Parameters.Add("@HoraInicio", SqlDbType.DateTime).Value = DateTime.Now;
                        cmdSqlCE.Parameters.Add("@IdTx", SqlDbType.NVarChar, 12).Value = obeTransaccDet.IdTx;
                        cmdSqlCE.ExecuteNonQuery();

                        mensajeError = "Error al actualizar el estado de la transacción";
                    }

                    //5° Total de registros


                }
                correcto = true;
            }

            catch (SqlCeException sqlCEex)
            {
                if (clsCompartida.mostrarMsjeError)
                {
                    mensajeError = sqlCEex.Message;
                }
                correcto = false;
            }

            catch (Exception ex)
            {
                if (clsCompartida.mostrarMsjeError)
                {
                    mensajeError = ex.Message;
                }
                correcto = false;
            }

            finally
            {
                //6° Cerrar conexión
                correcto = clsCnxPDA.Accion_BD_PDA(false, ref mensajeError);
                cmdSqlCE.Dispose();
            }

            return correcto;
        }
        public bool Listar_DetallePendiente(string IdTx,
                                            ref string mensajeError,
                                            ref List<beTransaccionDetalle> listaTransaccionDetalle,
                                            ref bool totalDescargado,
                                            bool consultarSincronizar)
        {
            correcto = false;
            totalDescargado = false;
            SqlCeCommand cmdSqlCE = new SqlCeCommand();
            SqlCeDataReader drSqlCE;
            beTransaccionDetalle oeTransaccionDetalle;

            //1° Abrir conexión
            correcto = clsCnxPDA.Accion_BD_PDA(true, ref mensajeError);
            if (!(correcto))
            {
                return correcto;
            }

            try
            {
                //2° Verificar cuantos registros fueron descargados
                int TotDet = 0;
                int SubDet = 0;

                //Total Detalle
                if (consultarSincronizar)
                {
                    consulta = "Select Count(1) From TransaccionDetalle Where Coalesce(FlgAnulado,0)= 0";
                }
                else
                {
                    consulta = "Select Count(1) From TransaccionDetalle Where IdTx = @IdTx And Coalesce(FlgAnulado,0)= 0";
                }
                cmdSqlCE.CommandText = consulta;
                cmdSqlCE.Connection = daCnxPDA.cnxPDA;
                cmdSqlCE.Parameters.Clear();
                if (consultarSincronizar == false)
                {
                    cmdSqlCE.Parameters.Add("@IdTx", SqlDbType.NVarChar, 12).Value = IdTx;
                }
                TotDet = Convert.ToInt32(cmdSqlCE.ExecuteScalar());

                //Total Descargado
                if (consultarSincronizar)
                {
                    consulta = "Select Count(1) From TransaccionDetalle Where Coalesce(FlgAnulado,0)= 0 And Coalesce(FlgSubida,0) = 1";
                }
                else
                {
                    consulta = "Select Count(1) From TransaccionDetalle Where IdTx = @IdTx And Coalesce(FlgAnulado,0)= 0 And Coalesce(FlgSubida,0) = 1";
                }

                cmdSqlCE.CommandText = consulta;
                cmdSqlCE.Connection = daCnxPDA.cnxPDA;
                cmdSqlCE.Parameters.Clear();
                if (consultarSincronizar == false)
                {
                    cmdSqlCE.Parameters.Add("@IdTx", SqlDbType.NVarChar, 12).Value = IdTx;
                }
                SubDet = Convert.ToInt32(cmdSqlCE.ExecuteScalar());

                mensajeError = "Error al verificar cantidad de ítems";
                correcto = true;

                if (TotDet == SubDet)
                {
                    totalDescargado = true;
                }
                else
                {
                    //3° Listar
                    if (consultarSincronizar)
                    {
                        consulta = "Select CodBarraTicket, NumLectura, Coalesce(TipoTarifa,'') as 'TipoTarifa', Obs, Usuario " +
                                   "From  TransaccionDetalle " +
                                   "Where IdTx = @IdTx And Coalesce(FlgAnulado,0)= 0 And Coalesce(FlgSubida,0)= 0";
                    }
                    else
                    {
                        consulta = "Select CodBarraTicket, NumLectura, Coalesce(TipoTarifa,'') as 'TipoTarifa', Obs, Usuario " +
                                   "From  TransaccionDetalle " +
                                   "Where Coalesce(FlgAnulado,0)= 0 And Coalesce(FlgSubida,0)= 0";
                    }
                    cmdSqlCE.CommandText = consulta;
                    cmdSqlCE.Connection = daCnxPDA.cnxPDA;
                    cmdSqlCE.Parameters.Clear();
                    if (consultarSincronizar == false)
                    {
                        cmdSqlCE.Parameters.Add("@IdTx", SqlDbType.NVarChar, 12).Value = IdTx;
                    }
                    drSqlCE = cmdSqlCE.ExecuteReader();

                    while (drSqlCE.Read())
                    {
                        oeTransaccionDetalle = new beTransaccionDetalle();
                        oeTransaccionDetalle.CodBaraTicket = drSqlCE.GetString(drSqlCE.GetOrdinal("CodBarraTicket"));
                        oeTransaccionDetalle.NumLectura = drSqlCE.GetInt16(drSqlCE.GetOrdinal("NumLectura"));
                        oeTransaccionDetalle.TipoTarifa = drSqlCE.GetString(drSqlCE.GetOrdinal("TipoTarifa"));
                        oeTransaccionDetalle.Obs = drSqlCE.GetString(drSqlCE.GetOrdinal("Obs"));
                        oeTransaccionDetalle.Usuario = drSqlCE.GetString(drSqlCE.GetOrdinal("Usuario"));
                        oeTransaccionDetalle.IdTx = IdTx;
                        listaTransaccionDetalle.Add(oeTransaccionDetalle);
                    }
                    drSqlCE.Close();

                    mensajeError = "Error al listar 'Transaccion detalle'";
                    correcto = true;
                }
            }

            catch (SqlCeException sqlCEex)
            {
                if (clsCompartida.mostrarMsjeError)
                {
                    mensajeError = sqlCEex.Message;
                }
                correcto = false;
            }

            catch (Exception ex)
            {
                if (clsCompartida.mostrarMsjeError)
                {
                    mensajeError = ex.Message;
                }
                correcto = false;
            }

            finally
            {
                //4° Cerrar conexión
                correcto = clsCnxPDA.Accion_BD_PDA(false, ref mensajeError);
                cmdSqlCE.Dispose();
            }

            return correcto;
        }
        public bool Listar_Detalle(string IdTx,
                                   ref string mensajeError,
                                   ref List<beTransaccionDetalle> listaTransaccionDetalle)
        {
            correcto = false;
            SqlCeCommand cmdSqlCE = new SqlCeCommand();
            SqlCeDataReader drSqlCE;
            beTransaccionDetalle oeTransaccionDetalle;

            //1° Abrir conexión
            correcto = clsCnxPDA.Accion_BD_PDA(true, ref mensajeError);
            if (!(correcto))
            {
                return correcto;
            }

            try
            {
                //2° Listar
                consulta = "Select NumLectura, CodBarraTicket, IdTx, Coalesce(FlgSubida,0) as FlgSubida " +
                           "From  TransaccionDetalle " +
                           "Where IdTx = @IdTx And Coalesce(FlgAnulado,0)= 0 " +
                           "Order by NumLectura Desc";

                cmdSqlCE.CommandText = consulta;
                cmdSqlCE.Connection = daCnxPDA.cnxPDA;
                cmdSqlCE.Parameters.Clear();
                cmdSqlCE.Parameters.Add("@IdTx", SqlDbType.NVarChar, 12).Value = IdTx;
                drSqlCE = cmdSqlCE.ExecuteReader();

                while (drSqlCE.Read())
                {
                    oeTransaccionDetalle = new beTransaccionDetalle();
                    oeTransaccionDetalle.NumLectura = drSqlCE.GetInt16(drSqlCE.GetOrdinal("NumLectura"));
                    oeTransaccionDetalle.CodBaraTicket = drSqlCE.GetString(drSqlCE.GetOrdinal("CodBarraTicket"));
                    oeTransaccionDetalle.IdTx = IdTx;
                    oeTransaccionDetalle.FlgSubida = drSqlCE.GetBoolean(drSqlCE.GetOrdinal("FlgSubida"));
                    listaTransaccionDetalle.Add(oeTransaccionDetalle);
                }
                drSqlCE.Close();

                mensajeError = "Error al listar 'Transaccion detalle'";
                correcto = true;
            }

            catch (SqlCeException sqlCEex)
            {
                if (clsCompartida.mostrarMsjeError)
                {
                    mensajeError = sqlCEex.Message;
                }
                correcto = false;
            }

            catch (Exception ex)
            {
                if (clsCompartida.mostrarMsjeError)
                {
                    mensajeError = ex.Message;
                }
                correcto = false;
            }

            finally
            {
                //4° Cerrar conexión
                correcto = clsCnxPDA.Accion_BD_PDA(false, ref mensajeError);
                cmdSqlCE.Dispose();
            }

            return correcto;
        }