private void AsignarDatos(Agendamiento_cobros agendamiento)
        {
            StringBuilder info = new StringBuilder();

            info.Append(agendamiento.Estado_cobro).Append(" - ").Append(agendamiento.Fecha_cobro.ToLongDateString()).Append(Environment.NewLine);
            info.Append("Valor de cuota: ").Append(agendamiento.Valor_cobro.ToString("C"));
            if (agendamiento.Estado_cobro.Equals("TERMINADO"))
            {
                info.Append(" - Valor pagado: ").Append(Agendamiento.Valor_pagado.ToString("C"));
            }

            info.Append(" - Saldo restante: ").Append(agendamiento.Saldo_restante.ToString("C"));
            this.txtInfoCliente.Text = info.ToString();

            if (agendamiento.Estado_cobro.Equals("TERMINADO"))
            {
                this.panel1.BackColor = Color.SteelBlue;
            }
            else
            {
                this.panel1.BackColor = Color.FromArgb(255, 128, 128);

                if ((DateTime.Now - agendamiento.Fecha_cobro).Days < 1)
                {
                    this.btnAbono.Visible = true;
                }
                else
                {
                    this.btnAbono.Visible = false;
                }
            }
        }
Пример #2
0
        private async void LoadAgendamientos(string tipo_busqueda, string texto_busqueda)
        {
            try
            {
                var(rpta, dtAgendamiento) = await NAgendamiento_cobros.BuscarAgendamientos(tipo_busqueda, texto_busqueda);

                this.Agendamientos = new List <Agendamiento_cobros>();
                if (dtAgendamiento != null)
                {
                    int pagos   = 0;
                    int nopagos = 0;

                    List <UserControl> controls = new List <UserControl>();
                    this.UltimoAgendamiento = new Agendamiento_cobros(dtAgendamiento.Rows[0]);
                    foreach (DataRow row in dtAgendamiento.Rows)
                    {
                        Agendamiento_cobros ag = new Agendamiento_cobros(row);
                        this.Agendamientos.Add(ag);
                        if (ag.Estado_cobro.Equals("TERMINADO"))
                        {
                            pagos += 1;
                        }
                        else
                        {
                            nopagos += 1;
                        }

                        AgendamientoSmall agendamientoSmall = new AgendamientoSmall
                        {
                            Agendamiento = ag,
                        };
                        agendamientoSmall.OnRefresh += AgendamientoSmall_OnRefresh;
                        controls.Add(agendamientoSmall);
                    }
                    this.panelPagos.AddArrayControl(controls);

                    this.rdNoPagos.Text    = "No pagos (" + nopagos + ")";
                    this.rdTerminados.Text = "Terminados (" + pagos + ")";
                }
            }
            catch (Exception ex)
            {
                Mensajes.MensajeErrorCompleto(this.Name, "LoadAgendamientos",
                                              "Hubo un error al buscar los agendamientos", ex.Message);
            }
        }
        private async void AsignarDatos(Ventas venta)
        {
            this.IsEditar = true;

            //Obtener el último agendamiento
            var(rptaAg, dt) =
                await NAgendamiento_cobros.BuscarAgendamientos("ID VENTA", venta.Id_venta.ToString());

            if (dt != null)
            {
                Agendamiento_cobros agendamiento = new Agendamiento_cobros(dt.Rows[0]);

                this.txtValorAbono.Text   = agendamiento.Valor_pagado.ToString("C");
                this.txtValorAbono.Tag    = agendamiento.Valor_pagado;
                this.dateUltimoPago.Value = agendamiento.Fecha_cobro;
            }

            this.gbValorAbono.Visible = true;
            this.rdActual.Visible     = false;
            this.rdAnterior.Visible   = false;
            this.gbUltimoPago.Visible = true;

            this.dateFechaVenta.Value    = venta.Fecha_venta;
            this.txtNombres.Text         = venta.Cliente.Nombres;
            this.txtApellidos.Text       = venta.Cliente.Apellidos;
            this.txtIdentificacion.Text  = venta.Cliente.Identificacion;
            this.txtValorTotalVenta.Tag  = venta.Total_venta;
            this.txtValorTotalVenta.Text = venta.Total_venta.ToString("C");

            this.txtDireccionResidencia.Text = venta.Direccion.Direccion;
            this.txtTelCliente.Text          = venta.Cliente.Celular;

            this.numericPlazo.Value = venta.Numero_cuotas;

            this.dateFechaVenta.Value = venta.Fecha_venta;

            this.LoadListaFrecuencia();
            this.listaFrecuencia.Text = venta.Frecuencia_cobro;

            this.LoadCiudades("ID PAIS", "2020");
            this.listaCiudades.SelectedValue = venta.Direccion.Zona.Id_ciudad.ToString();

            this.LoadBarrios("ID CIUDAD", venta.Direccion.Zona.Id_ciudad.ToString());
            this.listaBarrios.SelectedValue = venta.Direccion.Zona.Id_zona;
        }
        private async Task LoadAgendamientos(string tipo_busqueda, string texto_busqueda)
        {
            try
            {
                MensajeEspera.ShowWait("Cargando...");
                var(rpta, dtAgendamiento) = await NAgendamiento_cobros.BuscarAgendamientos(tipo_busqueda, texto_busqueda);

                this.panelClientes.clearDataSource();
                this.positionChanged = 1;
                this.DtAgendamientos = dtAgendamiento;

                if (dtAgendamiento != null)
                {
                    List <UserControl> userControls = new List <UserControl>();

                    foreach (DataRow row in dtAgendamiento.Rows)
                    {
                        Agendamiento_cobros ag           = new Agendamiento_cobros(row);
                        ClienteSmall        clienteSmall = new ClienteSmall
                        {
                            Agendamiento = ag,
                        };
                        clienteSmall.OnRefresh += ClienteSmall_OnRefresh;
                        userControls.Add(clienteSmall);
                    }

                    this.panelClientes.PageSize             = 20;
                    this.panelClientes.OnBsPositionChanged += PaneClientes_OnBsPositionChanged;
                    this.panelClientes.SetPagedDataSource(userControls, this.bindingNavigator2);
                }

                MensajeEspera.CloseForm();
                this.Show();
            }
            catch (Exception ex)
            {
                MensajeEspera.CloseForm();
                Mensajes.MensajeErrorCompleto(this.Name, "LoadClientes",
                                              "Hubo un error al cargar los agendamientos", ex.Message);
            }
        }
        private void AsignarDatos(Agendamiento_cobros agendamiento)
        {
            StringBuilder infoCliente = new StringBuilder();

            infoCliente.Append("(" + agendamiento.Venta.Cliente.Id_usuario + ") " + agendamiento.Venta.Cliente.NombreCompleto + " - Celular: " + agendamiento.Venta.Cliente.Celular + " - Cédula: " + agendamiento.Venta.Cliente.Identificacion).Append(Environment.NewLine);

            StringBuilder infoPago = new StringBuilder();

            infoPago.Append("Total de la venta: " + agendamiento.Venta.Total_venta + " - Valor cuota: " + agendamiento.Venta.Valor_cuota.ToString("C")).Append(Environment.NewLine);

            this.txtInfoPago.Text    = infoPago.ToString();
            this.txtInfoCliente.Text = infoCliente.ToString();

            if (agendamiento.Estado_cobro.Equals("PENDIENTE"))
            {
                this.panel1.BackColor = Color.FromArgb(255, 128, 128);
            }
            else
            {
                this.panel1.BackColor = Color.SteelBlue;
            }

            this.btnAbono.Visible = true;
        }
        public static string InsertarAgendamiento(out int id_agendamiento, Agendamiento_cobros agendamiento)
        {
            DAgendamiento_cobros DAgendamiento_cobros = new DAgendamiento_cobros();

            return(DAgendamiento_cobros.InsertarAgendamiento(out id_agendamiento, agendamiento));
        }
        public static async Task <string> EditarAgendamiento(int id_agendamiento, Agendamiento_cobros agendamiento)
        {
            DAgendamiento_cobros DAgendamiento_cobros = new DAgendamiento_cobros();

            return(await DAgendamiento_cobros.EditarAgendamiento(id_agendamiento, agendamiento));
        }
        public string InsertarAgendamiento(out int id_agendamiento, Agendamiento_cobros agendamiento)
        {
            id_agendamiento = 0;
            int    contador = 0;
            string rpta     = "";

            //string consulta = "INSERT INTO Agendamiento_cobros (Id_venta, Id_turno, Orden_cobro, Fecha_cobro, Hora_cobro, " +
            //    "Valor_cobro, Valor_pagado, Saldo_restante, Tipo_cobro, Observaciones_cobro, Estado_cobro) " +
            //    "VALUES(@Id_venta, @Id_turno, @Orden_cobro, @Fecha_cobro, @Hora_cobro, " +
            //    "@Valor_cobro, @Valor_pagado, @Saldo_restante, @Tipo_cobro, @Observaciones_cobro, @Estado_cobro) " +
            //    "SET @Id_agendamiento = SCOPE_IDENTITY() ";

            SqlConnection SqlCon = new SqlConnection();

            SqlCon.InfoMessage += new SqlInfoMessageEventHandler(SqlCon_InfoMessage);
            SqlCon.FireInfoMessageEventOnUserErrors = true;
            try
            {
                SqlCon.ConnectionString = DConexion.Cn;
                SqlCon.Open();
                SqlCommand SqlCmd = new SqlCommand
                {
                    Connection  = SqlCon,
                    CommandText = "sp_Insertar_agendamiento",
                    CommandType = CommandType.StoredProcedure,
                };

                SqlParameter Id_agendamiento = new SqlParameter
                {
                    ParameterName = "@Id_agendamiento",
                    SqlDbType     = SqlDbType.Int,
                    Direction     = ParameterDirection.Output
                };
                SqlCmd.Parameters.Add(Id_agendamiento);

                SqlParameter Id_venta = new SqlParameter
                {
                    ParameterName = "@Id_venta",
                    SqlDbType     = SqlDbType.Int,
                    Value         = agendamiento.Id_venta
                };
                SqlCmd.Parameters.Add(Id_venta);
                contador += 1;

                SqlParameter Id_turno = new SqlParameter
                {
                    ParameterName = "@Id_turno",
                    SqlDbType     = SqlDbType.Int,
                    Value         = agendamiento.Id_turno
                };
                SqlCmd.Parameters.Add(Id_turno);
                contador += 1;

                SqlParameter Orden_cobro = new SqlParameter
                {
                    ParameterName = "@Orden_cobro",
                    SqlDbType     = SqlDbType.Int,
                    Value         = agendamiento.Orden_cobro,
                };
                SqlCmd.Parameters.Add(Orden_cobro);
                contador += 1;

                SqlParameter Fecha_cobro = new SqlParameter
                {
                    ParameterName = "@Fecha_cobro",
                    SqlDbType     = SqlDbType.Date,
                    Value         = agendamiento.Fecha_cobro,
                };
                SqlCmd.Parameters.Add(Fecha_cobro);
                contador += 1;

                SqlParameter Hora_cobro = new SqlParameter
                {
                    ParameterName = "@Hora_cobro",
                    SqlDbType     = SqlDbType.Time,
                    Value         = agendamiento.Hora_cobro,
                };
                SqlCmd.Parameters.Add(Hora_cobro);
                contador += 1;

                SqlParameter Valor_cobro = new SqlParameter
                {
                    ParameterName = "@Valor_cobro",
                    SqlDbType     = SqlDbType.Decimal,
                    Value         = agendamiento.Valor_cobro,
                };
                SqlCmd.Parameters.Add(Valor_cobro);
                contador += 1;

                SqlParameter Valor_pagado = new SqlParameter
                {
                    ParameterName = "@Valor_pagado",
                    SqlDbType     = SqlDbType.Decimal,
                    Value         = agendamiento.Valor_pagado,
                };
                SqlCmd.Parameters.Add(Valor_pagado);
                contador += 1;

                SqlParameter Saldo_restante = new SqlParameter
                {
                    ParameterName = "@Saldo_restante",
                    SqlDbType     = SqlDbType.Decimal,
                    Value         = agendamiento.Saldo_restante,
                };
                SqlCmd.Parameters.Add(Saldo_restante);
                contador += 1;

                SqlParameter Tipo_cobro = new SqlParameter
                {
                    ParameterName = "@Tipo_cobro",
                    SqlDbType     = SqlDbType.VarChar,
                    Size          = 50,
                    Value         = agendamiento.Tipo_cobro.Trim().ToUpper()
                };
                SqlCmd.Parameters.Add(Tipo_cobro);
                contador += 1;

                SqlParameter Observaciones_cobro = new SqlParameter
                {
                    ParameterName = "@Observaciones_cobro",
                    SqlDbType     = SqlDbType.VarChar,
                    Size          = 150,
                    Value         = agendamiento.Observaciones_cobro.Trim().ToUpper()
                };
                SqlCmd.Parameters.Add(Observaciones_cobro);
                contador += 1;

                SqlParameter Estado_cobro = new SqlParameter
                {
                    ParameterName = "@Estado_cobro",
                    SqlDbType     = SqlDbType.VarChar,
                    Size          = 50,
                    Value         = agendamiento.Estado_cobro.Trim().ToUpper()
                };
                SqlCmd.Parameters.Add(Estado_cobro);
                contador += 1;

                //Ejecutamos nuestro comando
                rpta = SqlCmd.ExecuteNonQuery() >= 1 ? "OK" : "NO SE INGRESÓ";
                if (!rpta.Equals("OK"))
                {
                    if (this.Mensaje_respuesta != null)
                    {
                        rpta = this.Mensaje_respuesta;
                    }
                }
                else
                {
                    id_agendamiento = Convert.ToInt32(SqlCmd.Parameters["@Id_agendamiento"].Value);
                }
            }
            //Mostramos posible error que tengamos
            catch (SqlException ex)
            {
                rpta = ex.Message;
            }
            catch (Exception ex)
            {
                rpta = ex.Message;
            }
            finally
            {
                //Si la cadena SqlCon esta abierta la cerramos
                if (SqlCon.State == ConnectionState.Open)
                {
                    SqlCon.Close();
                }
            }
            return(rpta);
        }
        public async Task <string> EditarAgendamiento(int id_agendamiento, Agendamiento_cobros agendamiento)
        {
            int    contador = 0;
            string rpta     = "";

            string consulta = "UPDATE Agendamiento_cobros SET " +
                              "Id_venta = @Id_venta, " +
                              "Id_turno = @Id_turno, " +
                              "Fecha_cobro = @Fecha_cobro, " +
                              "Hora_cobro = @Hora_cobro, " +
                              "Valor_cobro = @Valor_cobro, " +
                              "Valor_pagado = @Valor_pagado, " +
                              "Saldo_restante = @Saldo_restante, " +
                              "Tipo_cobro = @Tipo_cobro, " +
                              "Observaciones_cobro = Observaciones_cobro, " +
                              "Estado_cobro = @Estado_cobro " +
                              "WHERE Id_agendamiento = @Id_agendamiento ";

            SqlConnection SqlCon = new SqlConnection();

            SqlCon.InfoMessage += new SqlInfoMessageEventHandler(SqlCon_InfoMessage);
            SqlCon.FireInfoMessageEventOnUserErrors = true;
            try
            {
                SqlCon.ConnectionString = DConexion.Cn;
                await SqlCon.OpenAsync();

                SqlCommand SqlCmd = new SqlCommand
                {
                    Connection  = SqlCon,
                    CommandText = consulta,
                    CommandType = CommandType.Text
                };

                SqlParameter Id_agendamiento = new SqlParameter
                {
                    ParameterName = "@Id_agendamiento",
                    SqlDbType     = SqlDbType.Int,
                    Value         = id_agendamiento,
                };
                SqlCmd.Parameters.Add(Id_agendamiento);

                SqlParameter Id_venta = new SqlParameter
                {
                    ParameterName = "@Id_venta",
                    SqlDbType     = SqlDbType.Int,
                    Value         = agendamiento.Id_venta,
                };
                SqlCmd.Parameters.Add(Id_venta);
                contador += 1;

                SqlParameter Id_turno = new SqlParameter
                {
                    ParameterName = "@Id_turno",
                    SqlDbType     = SqlDbType.Int,
                    Value         = agendamiento.Id_turno,
                };
                SqlCmd.Parameters.Add(Id_turno);
                contador += 1;

                SqlParameter Fecha_cobro = new SqlParameter
                {
                    ParameterName = "@Fecha_cobro",
                    SqlDbType     = SqlDbType.Date,
                    Value         = agendamiento.Fecha_cobro,
                };
                SqlCmd.Parameters.Add(Fecha_cobro);
                contador += 1;

                SqlParameter Hora_cobro = new SqlParameter
                {
                    ParameterName = "@Hora_cobro",
                    SqlDbType     = SqlDbType.Time,
                    Value         = agendamiento.Hora_cobro,
                };
                SqlCmd.Parameters.Add(Hora_cobro);
                contador += 1;

                SqlParameter Valor_cobro = new SqlParameter
                {
                    ParameterName = "@Valor_cobro",
                    SqlDbType     = SqlDbType.Decimal,
                    Value         = agendamiento.Valor_cobro,
                };
                SqlCmd.Parameters.Add(Valor_cobro);
                contador += 1;

                SqlParameter Valor_pagado = new SqlParameter
                {
                    ParameterName = "@Valor_pagado",
                    SqlDbType     = SqlDbType.Decimal,
                    Value         = agendamiento.Valor_pagado,
                };
                SqlCmd.Parameters.Add(Valor_pagado);
                contador += 1;

                SqlParameter Saldo_restante = new SqlParameter
                {
                    ParameterName = "@Saldo_restante",
                    SqlDbType     = SqlDbType.Decimal,
                    Value         = agendamiento.Saldo_restante,
                };
                SqlCmd.Parameters.Add(Saldo_restante);
                contador += 1;

                SqlParameter Tipo_cobro = new SqlParameter
                {
                    ParameterName = "@Tipo_cobro",
                    SqlDbType     = SqlDbType.VarChar,
                    Size          = 50,
                    Value         = agendamiento.Tipo_cobro.Trim().ToUpper()
                };
                SqlCmd.Parameters.Add(Tipo_cobro);
                contador += 1;

                SqlParameter Observaciones_cobro = new SqlParameter
                {
                    ParameterName = "@Observaciones_cobro",
                    SqlDbType     = SqlDbType.VarChar,
                    Size          = 150,
                    Value         = agendamiento.Observaciones_cobro.Trim().ToUpper()
                };
                SqlCmd.Parameters.Add(Observaciones_cobro);
                contador += 1;

                SqlParameter Estado_cobro = new SqlParameter
                {
                    ParameterName = "@Estado_cobro",
                    SqlDbType     = SqlDbType.VarChar,
                    Size          = 50,
                    Value         = agendamiento.Estado_cobro.Trim().ToUpper()
                };
                SqlCmd.Parameters.Add(Estado_cobro);
                contador += 1;

                //Ejecutamos nuestro comando
                rpta = await SqlCmd.ExecuteNonQueryAsync() >= 1 ? "OK" : "NO SE INGRESÓ";

                if (!rpta.Equals("OK"))
                {
                    if (this.Mensaje_respuesta != null)
                    {
                        rpta = this.Mensaje_respuesta;
                    }
                }
            }
            //Mostramos posible error que tengamos
            catch (SqlException ex)
            {
                rpta = ex.Message;
            }
            catch (Exception ex)
            {
                rpta = ex.Message;
            }
            finally
            {
                //Si la cadena SqlCon esta abierta la cerramos
                if (SqlCon.State == ConnectionState.Open)
                {
                    SqlCon.Close();
                }
            }
            return(rpta);
        }
        private async void BtnSave_Click(object sender, EventArgs e)
        {
            try
            {
                var(result, usuario, direccion, venta, agendamiento) = await this.Comprobaciones();

                if (result)
                {
                    MensajeEspera.ShowWait("Guardando...");
                    List <string> errores = new List <string>();
                    string        rpta    = "";

                    if (this.IsEditar)
                    {
                        rpta = NUsuarios.EditarUsuario(usuario.Id_usuario, usuario);
                    }
                    else
                    {
                        rpta = NUsuarios.InsertarUsuario(out int id_usuario, usuario);
                        direccion.Id_usuario = id_usuario;
                        venta.Id_cliente     = id_usuario;
                        usuario.Id_usuario   = id_usuario;
                    }

                    if (rpta.Equals("OK"))
                    {
                        if (this.IsEditar)
                        {
                            rpta = NDireccion_clientes.EditarDireccion(direccion.Id_direccion, direccion);
                        }
                        else
                        {
                            rpta = NDireccion_clientes.InsertarDireccion(out int id_direccion, direccion);
                            venta.Id_direccion = id_direccion;
                        }

                        if (rpta.Equals("OK"))
                        {
                            if (this.IsEditar)
                            {
                                rpta = NVentas.EditarVenta(venta.Id_venta, venta);
                            }
                            else
                            {
                                rpta           = NVentas.InsertarVenta(out int id_venta, venta);
                                venta.Id_venta = id_venta;
                            }

                            if (rpta.Equals("OK"))
                            {
                                if (this.rdActual.Checked && !this.IsEditar && this.chkDescontar.Checked)
                                {
                                    foreach (Articulos art in this.ArticulosSelected)
                                    {
                                        Detalle_articulos_venta detalle = new Detalle_articulos_venta
                                        {
                                            Articulo          = art,
                                            Id_articulo       = art.Id_articulo,
                                            Venta             = venta,
                                            Id_venta          = venta.Id_venta,
                                            Cantidad_articulo = (int)art.Cantidad_articulo,
                                            Valor_articulo    = art.Valor_articulo,
                                            Estado_detalle    = "ACTIVO",
                                        };

                                        var(rptaDetalle, id_detalle) =
                                            await NDetalle_articulos_venta.InsertarDetalle(detalle);

                                        if (!rptaDetalle.Equals("OK"))
                                        {
                                            errores.Add(rptaDetalle);
                                        }
                                    }
                                }

                                MainController main = MainController.GetInstance();

                                if (!this.IsEditar)
                                {
                                    rpta = NUsuariosVentas.InsertarUsuarioVenta(new Usuarios_ventas
                                    {
                                        Id_usuario = main.Usuario.Id_usuario,
                                        Id_venta   = venta.Id_venta,
                                    });

                                    if (rpta.Equals("OK"))
                                    {
                                        agendamiento.Id_venta = venta.Id_venta;
                                        rpta = NAgendamiento_cobros.InsertarAgendamiento(out int id_agendamiento, agendamiento);
                                        if (rpta.Equals("OK"))
                                        {
                                            MensajeEspera.CloseForm();
                                            Mensajes.MensajeInformacion("Se guardó correctamente el cliente, " +
                                                                        "número cliente: " + usuario.Id_usuario + " Número venta: " + venta.Id_venta, "Entendido");
                                            this.Close();
                                        }
                                        else
                                        {
                                            throw new Exception(rpta);
                                        }
                                    }
                                    else
                                    {
                                        throw new Exception(rpta);
                                    }
                                }
                                else
                                {
                                    //Obtener el último agendamiento
                                    var(rptaAg, dt) =
                                        await NAgendamiento_cobros.BuscarAgendamientos("ID VENTA", venta.Id_venta.ToString());

                                    if (dt != null)
                                    {
                                        agendamiento             = new Agendamiento_cobros(dt.Rows[0]);
                                        agendamiento.Valor_cobro = venta.Valor_cuota;
                                        agendamiento.Fecha_cobro = this.dateUltimoPago.Value;
                                        rptaAg = await NAgendamiento_cobros.EditarAgendamiento(agendamiento.Id_agendamiento, agendamiento);

                                        if (rptaAg != "OK")
                                        {
                                            Mensajes.MensajeInformacion("Se actualizó el cliente pero no su último pago," +
                                                                        "número cliente: " + usuario.Id_usuario + " Número venta: " + venta.Id_venta, "Entendido");
                                            this.OnRefresh?.Invoke(sender, e);
                                            this.Close();
                                        }
                                        else
                                        {
                                            Mensajes.MensajeInformacion("Se actualizó correctamente el cliente, " +
                                                                        "número cliente: " + usuario.Id_usuario + " Número venta: " + venta.Id_venta, "Entendido");
                                            this.OnRefresh?.Invoke(sender, e);
                                            this.Close();
                                        }
                                    }
                                    else
                                    {
                                        Mensajes.MensajeInformacion("Se actualizó correctamente el cliente pero no se encontraron sus agendamientos, número asignado: " + usuario.Id_usuario, "Entendido");
                                        this.OnRefresh?.Invoke(sender, e);
                                        this.Close();
                                    }
                                }
                            }
                        }
                        else
                        {
                            throw new Exception(rpta);
                        }
                    }
                    else
                    {
                        throw new Exception(rpta);
                    }
                }
                MensajeEspera.CloseForm();
            }
            catch (Exception ex)
            {
                MensajeEspera.CloseForm();
                Mensajes.MensajeErrorCompleto(this.Name, "BtnSave_Click",
                                              "Hubo un error al guardar el cliente", ex.Message);
            }
        }
                             Agendamiento_cobros agendamiento)> Comprobaciones()
        {
            bool           result = true;
            MainController main   = MainController.GetInstance();

            Agendamiento_cobros agendamiento = new Agendamiento_cobros();
            Usuarios            usuario      = new Usuarios();
            Direccion_clientes  direccion    = new Direccion_clientes();
            Ventas venta = new Ventas();

            int id_cobro         = 0;
            int id_tipo_producto = 0;

            if (this.IsEditar)
            {
                id_tipo_producto = this.Venta.Id_tipo_producto;
                id_cobro         = this.Venta.Id_cobro;
                usuario          = this.Venta.Cliente;
                direccion        = this.Venta.Direccion;
                venta            = this.Venta;

                venta.Id_cobro = id_cobro;

                venta.Id_tipo_producto = id_tipo_producto;

                venta.Id_turno = main.Turno.Id_turno;

                this.Total_articulos = venta.Total_venta;
            }
            else
            {
                usuario   = new Usuarios();
                direccion = new Direccion_clientes();
                venta     = new Ventas();

                id_tipo_producto = 2;
                id_cobro         = main.Turno.Id_cobro;

                usuario.Fecha_ingreso  = DateTime.Now;
                usuario.Tipo_usuario   = "CLIENTE";
                usuario.Estado_usuario = "ACTIVO";
                usuario.Email          = string.Empty;

                direccion.Estado_direccion = "ACTIVO";

                venta.Fecha_venta      = DateTime.Now;
                venta.Id_cobro         = id_cobro;
                venta.Id_tipo_producto = id_tipo_producto;
                venta.Id_turno         = main.Turno.Id_turno;
                venta.Hora_venta       = DateTime.Now.TimeOfDay;
                venta.Valor_venta      = this.Total_articulos;
                venta.Total_venta      = this.Total_articulos;
                venta.Fecha_venta      = this.dateFechaVenta.Value;
                venta.Tipo_venta       = "NUEVA";
                venta.Interes_venta    = 0;
                venta.Estado_venta     = "ACTIVO";

                agendamiento.Orden_cobro = 0;
            }

            if (string.IsNullOrEmpty(this.txtNombres.Text))
            {
                Mensajes.MensajeInformacion("Verifique el nombre del cliente", "Entendido");
                result = false;
            }

            if (string.IsNullOrEmpty(this.txtDireccionResidencia.Text))
            {
                Mensajes.MensajeInformacion("Verifique la dirección del cliente", "Entendido");
                result = false;
            }

            if (string.IsNullOrEmpty(this.txtTelCliente.Text))
            {
                Mensajes.MensajeInformacion("Verifique el teléfono del cliente", "Entendido");
                result = false;
            }

            if (string.IsNullOrEmpty(this.listaFrecuencia.Text))
            {
                Mensajes.MensajeInformacion("Verifique la frecuencia de cobro", "Entendido");
                result = false;
            }

            if (this.numericPlazo.Value == 0)
            {
                Mensajes.MensajeInformacion("Verifique el plazo de cobro", "Entendido");
                result = false;
            }

            if (!int.TryParse(this.listaBarrios.SelectedValue.ToString(), out int id_barrio))
            {
                Mensajes.MensajeInformacion("Verifique el barrio seleccionado", "Entendido");
                result = false;
            }

            venta.Fecha_venta = this.dateFechaVenta.Value;

            var(dt, rpta) =
                await NUsuarios.BuscarClientes("IDENTIFICACION", this.txtIdentificacion.Text, "");

            if (dt != null)
            {
                usuario = new Usuarios(dt.Rows[0]);
                Mensajes.MensajeInformacion("El cliente ya existe, se realizará una venta nueva", "Entendido");
            }
            else
            {
                usuario.Alias          = this.txtNombres.Text;
                usuario.Nombres        = this.txtNombres.Text;
                usuario.Apellidos      = this.txtApellidos.Text;
                usuario.Identificacion = this.txtIdentificacion.Text;

                if (string.IsNullOrEmpty(this.txtTelResidencia.Text))
                {
                    usuario.Celular = this.txtTelCliente.Text;
                }
                else
                {
                    usuario.Celular = this.txtTelCliente.Text + " - " + this.txtTelResidencia.Text;
                }
            }

            direccion.Id_zona   = id_barrio;
            direccion.Direccion = this.txtDireccionResidencia.Text;

            venta.Numero_cuotas    = Convert.ToInt32(numericPlazo.Value);
            venta.Frecuencia_cobro = this.listaFrecuencia.Text;
            venta.Valor_cuota      = (this.Total_articulos / Convert.ToInt32(numericPlazo.Value));

            if (!this.IsEditar)
            {
                if (!decimal.TryParse(Convert.ToString(this.txtValorAbono.Tag), out decimal valor_abono))
                {
                    Mensajes.MensajeInformacion("Verifique el valor del abono", "Entendido");
                    result = false;
                }

                agendamiento.Id_turno = main.Turno.Id_turno;

                if (this.rdActual.Checked)
                {
                    agendamiento.Fecha_cobro = dateUltimoPago.Value;
                }
                else
                {
                    agendamiento.Fecha_cobro = dateUltimoPago.Value;
                }

                agendamiento.Hora_cobro          = DateTime.Now.TimeOfDay;
                agendamiento.Valor_cobro         = venta.Valor_cuota;
                agendamiento.Valor_pagado        = valor_abono;
                agendamiento.Saldo_restante      = this.Total_saldo;
                agendamiento.Tipo_cobro          = this.listaFrecuencia.Text;
                agendamiento.Observaciones_cobro = "";
                agendamiento.Estado_cobro        = "TERMINADO";
            }

            return(result, usuario, direccion, venta, agendamiento);
        }
        private async void BtnReporteClientes_Click(object sender, EventArgs e)
        {
            MensajeEspera.ShowWait("Cargando reporte...");
            DataTable dtClientes = new DataTable("Clientes");

            dtClientes.Columns.Add("Id_cliente", typeof(int));
            dtClientes.Columns.Add("Nombre_cliente", typeof(string));
            dtClientes.Columns.Add("Celular_cliente", typeof(string));
            dtClientes.Columns.Add("Referencia_articulo", typeof(string));
            dtClientes.Columns.Add("Saldo_restante", typeof(string));
            dtClientes.Columns.Add("Venta_total", typeof(string));
            dtClientes.Columns.Add("Fecha_venta", typeof(string));
            dtClientes.Columns.Add("Fecha_ultimo_pago", typeof(string));
            dtClientes.Columns.Add("Dias_mora", typeof(int));

            int            id_cliente          = 0;
            string         nombre_cliente      = string.Empty;
            string         celular_cliente     = string.Empty;
            string         referencia_articulo = string.Empty;
            decimal        saldo_restante      = 0;
            decimal        total_venta         = 0;
            DateTime       fecha_venta         = DateTime.Now;
            decimal        suma_ventas         = 0;
            decimal        suma_saldos         = 0;
            DateTime       fecha_ultimo_pago   = DateTime.Now;
            MainController main = MainController.GetInstance();

            var(rpta, dtVentas) =
                await NVentas.BuscarVentas("ID COBRO ACTIVO", main.Id_cobro.ToString());

            if (dtVentas != null)
            {
                foreach (DataRow row in dtVentas.Rows)
                {
                    Ventas venta = new Ventas(row);
                    id_cliente      = venta.Id_cliente;
                    nombre_cliente  = venta.Cliente.NombreCompleto;
                    celular_cliente = venta.Cliente.Celular;
                    total_venta     = venta.Total_venta;
                    fecha_venta     = venta.Fecha_venta;
                    suma_ventas    += venta.Total_venta;

                    //Buscar los agendamientos de cada venta para ver su saldo restante
                    var(rpta1, dtAgendamientos) = await NAgendamiento_cobros.BuscarAgendamientos("ID VENTA", venta.Id_venta.ToString());

                    if (dtAgendamientos != null)
                    {
                        Agendamiento_cobros ag = new Agendamiento_cobros(dtAgendamientos.Rows[0]);
                        saldo_restante    = ag.Saldo_restante;
                        suma_saldos      += ag.Saldo_restante;
                        fecha_ultimo_pago = ag.Fecha_cobro;
                    }

                    TimeSpan timeSpan  = DateTime.Now - fecha_ultimo_pago;
                    double   dias_mora = timeSpan.TotalDays;

                    DataRow newRow = dtClientes.NewRow();
                    newRow["Id_cliente"]          = id_cliente;
                    newRow["Nombre_cliente"]      = nombre_cliente;
                    newRow["Celular_cliente"]     = celular_cliente;
                    newRow["Referencia_articulo"] = referencia_articulo;
                    newRow["Saldo_restante"]      = saldo_restante.ToString("C");
                    newRow["Venta_total"]         = total_venta.ToString("C");
                    newRow["Fecha_venta"]         = fecha_venta.ToString("dd-MM-yyyy");
                    newRow["Fecha_ultimo_pago"]   = fecha_ultimo_pago.ToString("dd-MM-yyyy");
                    newRow["Dias_mora"]           = dias_mora;
                    dtClientes.Rows.Add(newRow);
                }

                if (dtClientes.Rows.Count > 0)
                {
                    MensajeEspera.CloseForm();
                    //Enviar informe
                    FrmReporteClientes frmReporteClientes = new FrmReporteClientes
                    {
                        WindowState  = FormWindowState.Maximized,
                        dtClientes   = dtClientes,
                        Total_saldos = suma_saldos.ToString("C"),
                        Total_ventas = suma_ventas.ToString("C"),
                    };
                    frmReporteClientes.Show();
                }
                else
                {
                    MensajeEspera.CloseForm();
                    Mensajes.MensajeInformacion("No se encontraron clientes", "Entendido");
                }
            }
            else
            {
                MensajeEspera.CloseForm();
                Mensajes.MensajeInformacion("No se encontraron clientes", "Entendido");
            }

            MensajeEspera.CloseForm();
        }
        private void BtnPrint_Click(object sender, EventArgs e)
        {
            try
            {
                MensajeEspera.ShowWait("Cargando...");

                DataTable dtAgendamiento = new DataTable();
                dtAgendamiento.Columns.Add("Id_agendamiento", typeof(int));
                dtAgendamiento.Columns.Add("Fecha_agendamiento", typeof(string));
                dtAgendamiento.Columns.Add("Nombre_cliente", typeof(string));
                dtAgendamiento.Columns.Add("Celular_cliente", typeof(string));
                dtAgendamiento.Columns.Add("Saldo_restante", typeof(string));
                dtAgendamiento.Columns.Add("Valor_cuota", typeof(string));
                dtAgendamiento.Columns.Add("Valor_pagado", typeof(string));
                dtAgendamiento.Columns.Add("Tipo_cobro", typeof(string));


                if (this.DtAgendamientos != null)
                {
                    decimal total_recaudo = 0;

                    foreach (DataRow row in this.DtAgendamientos.Rows)
                    {
                        Agendamiento_cobros ag = new Agendamiento_cobros(row);

                        int      id_agendamiento    = ag.Id_agendamiento;
                        DateTime fecha_agendamiento = ag.Fecha_cobro;
                        string   nombre_cliente     = ag.Venta.Cliente.NombreCompleto;
                        string   celular_cliente    = ag.Venta.Cliente.Celular;
                        decimal  saldo_restante     = ag.Saldo_restante;
                        decimal  valor_cuota        = ag.Valor_cobro;
                        decimal  valor_pagado       = 0;
                        string   tipo_cobro         = ag.Tipo_cobro;

                        total_recaudo += valor_cuota;

                        DataRow newRow = dtAgendamiento.NewRow();
                        newRow["Id_agendamiento"]    = id_agendamiento;
                        newRow["Fecha_agendamiento"] = fecha_agendamiento.ToString("yyyy-MM-dd");
                        newRow["Nombre_cliente"]     = nombre_cliente;
                        newRow["Celular_cliente"]    = celular_cliente;
                        newRow["Saldo_restante"]     = saldo_restante.ToString("C");
                        newRow["Valor_cuota"]        = valor_cuota.ToString("C");
                        newRow["Valor_pagado"]       = valor_pagado.ToString("C");
                        newRow["Tipo_cobro"]         = tipo_cobro;
                        dtAgendamiento.Rows.Add(newRow);
                    }
                    MensajeEspera.CloseForm();
                    FrmReporteAgendamientos frmReporteAgendamientos = new FrmReporteAgendamientos
                    {
                        DtAgendamientos = dtAgendamiento,
                        Total_recaudo   = "Total a recaudar: " + total_recaudo.ToString("C"),
                    };
                    frmReporteAgendamientos.ShowDialog();
                }
                MensajeEspera.CloseForm();
            }
            catch (Exception ex)
            {
                MensajeEspera.CloseForm();
                Mensajes.MensajeErrorCompleto(this.Name, "",
                                              "Hubo un error al cargar el reporte", ex.Message);
            }
        }