Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (32-41) Capa Datos Venta
Buen día amigos, en este artículo implementaremos la clase DDetalle_Venta y la clase DVenta en la capa Datos que se comunicará con los procedimientos almacenados relacionados con la tabla venta de la base de datos; implementaremos dentro de esta clase el método Insertar para registrar las ventas junto con sus detalles donde especificaremos que artículos se están vendiendo, la cantidad de artículos, precio de venta, consultaremos la fecha de vencimiento y el stock que se encuentra en el almacén para actualizarlo después de generar la venta. Para completar la venta se seleccionará el comprobante a emitir (boleta, factura, ticket, otros), se ingresará un número de comprobante, seleccionaremos al cliente involucrado y al trabajador responsable de la venta.
Pueden descargar el paquete del proyecto desarrollado en el curso, la base de datos, los procedimientos almacenados y el sistema completo hasta el Video 41 desde:
Puedes descargar la versión completa del proyecto con todas las funcionalidades terminadas desde:
Pueden seguir el curso completo y aprender a desarrollar un Sistema de Ventas en Csharp.Net utilizando como IDE de desarrollo Visual Studio 2013 y como gestor de Base de datos SQL Server 2014 desde:
No se olviden siempre de Visitar mi canal www.youtube.com/jcarlosad7 para ver los nuevos cursos.
Tabla Venta - Detalle_Venta
Capa Datos - Clase DDetalle_Venta
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Data.SqlClient; namespace CapaDatos { public class DDetalle_Venta { private int _Iddetalle_venta; private int _Idventa; private int _Iddetalle_Ingreso; private int _Cantidad; private decimal _Precio_Venta; private decimal _Descuento; public int Iddetalle_venta { get { return _Iddetalle_venta; } set { _Iddetalle_venta = value; } } public int Idventa { get { return _Idventa; } set { _Idventa = value; } } public int Iddetalle_Ingreso { get { return _Iddetalle_Ingreso; } set { _Iddetalle_Ingreso = value; } } public int Cantidad { get { return _Cantidad; } set { _Cantidad = value; } } public decimal Precio_Venta { get { return _Precio_Venta; } set { _Precio_Venta = value; } } public decimal Descuento { get { return _Descuento; } set { _Descuento = value; } } //Constructores public DDetalle_Venta() { } public DDetalle_Venta(int iddetalle_venta,int idventa,int iddetalle_ingreso, int cantidad,decimal precio_venta,decimal descuento) { this.Iddetalle_venta = iddetalle_venta; this.Idventa = idventa; this.Iddetalle_Ingreso = iddetalle_ingreso; this.Cantidad = cantidad; this.Precio_Venta = precio_venta; this.Descuento = descuento; } //Método Insertar public string Insertar(DDetalle_Venta Detalle_Venta, ref SqlConnection SqlCon, ref SqlTransaction SqlTra) { string rpta = ""; try { SqlCommand SqlCmd = new SqlCommand(); SqlCmd.Connection = SqlCon; SqlCmd.Transaction = SqlTra; SqlCmd.CommandText = "spinsertar_detalle_venta"; SqlCmd.CommandType = CommandType.StoredProcedure; SqlParameter ParIddetalle_venta= new SqlParameter(); ParIddetalle_venta.ParameterName = "@iddetalle_venta"; ParIddetalle_venta.SqlDbType = SqlDbType.Int; ParIddetalle_venta.Direction = ParameterDirection.Output; SqlCmd.Parameters.Add(ParIddetalle_venta); SqlParameter ParIdventa= new SqlParameter(); ParIdventa.ParameterName = "@idventa"; ParIdventa.SqlDbType = SqlDbType.Int; ParIdventa.Value = Detalle_Venta.Idventa; SqlCmd.Parameters.Add(ParIdventa); SqlParameter ParIddetalle_ingreso = new SqlParameter(); ParIddetalle_ingreso.ParameterName = "@iddetalle_ingreso"; ParIddetalle_ingreso.SqlDbType = SqlDbType.Int; ParIddetalle_ingreso.Value = Detalle_Venta.Iddetalle_Ingreso; SqlCmd.Parameters.Add(ParIddetalle_ingreso); SqlParameter ParCantidad = new SqlParameter(); ParCantidad.ParameterName = "@cantidad"; ParCantidad.SqlDbType = SqlDbType.Int; ParCantidad.Value = Detalle_Venta.Cantidad; SqlCmd.Parameters.Add(ParCantidad); SqlParameter ParPrecio_Venta = new SqlParameter(); ParPrecio_Venta.ParameterName = "@precio_venta"; ParPrecio_Venta.SqlDbType = SqlDbType.Money; ParPrecio_Venta.Value = Detalle_Venta.Precio_Venta; SqlCmd.Parameters.Add(ParPrecio_Venta); SqlParameter ParDescuento= new SqlParameter(); ParDescuento.ParameterName = "@descuento"; ParDescuento.SqlDbType = SqlDbType.Money; ParDescuento.Value = Detalle_Venta.Descuento; SqlCmd.Parameters.Add(ParDescuento); //Ejecutamos nuestro comando rpta = SqlCmd.ExecuteNonQuery() == 1 ? "OK" : Convert.ToString(Idventa)+Convert.ToString(Iddetalle_Ingreso)+Convert.ToString(Cantidad)+Convert.ToString(Precio_Venta)+Convert.ToString(Descuento); } catch (Exception ex) { rpta = ex.Message; } return rpta; } } }
Capa Datos - Clase DVenta
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Data.SqlClient; namespace CapaDatos { public class DVenta { private int _Idventa; private int _Idcliente; private int _Idtrabajador; private DateTime _Fecha; private string _Tipo_Comprobante; private string _Serie; private string _Correlativo; private decimal _Igv; private string _Estado; //Propiedades public int Idventa { get { return _Idventa; } set { _Idventa = value; } } public int Idcliente { get { return _Idcliente; } set { _Idcliente = value; } } public int Idtrabajador { get { return _Idtrabajador; } set { _Idtrabajador = value; } } public DateTime Fecha { get { return _Fecha; } set { _Fecha=value;} } public string Tipo_Comprobante { get { return _Tipo_Comprobante; } set { _Tipo_Comprobante = value; } } public string Serie { get { return _Serie; } set { _Serie = value; } } public string Correlativo { get { return _Correlativo; } set { _Correlativo = value; } } public decimal Igv { get { return _Igv; } set { _Igv = value; } } public string Estado { get { return _Estado; } set { _Estado = value; } } //Constructores public DVenta() { } public DVenta(int idventa, int idcliente, int idtrabajador, DateTime fecha, string tipo_comprobante, string serie, string correlativo, decimal igv, string estado) { this.Idventa = idventa; this.Idcliente = idcliente; this.Idtrabajador = idtrabajador; this.Fecha = fecha; this.Tipo_Comprobante = tipo_comprobante; this.Serie = serie; this.Correlativo = correlativo; this.Igv = igv; this.Estado = estado; } //Métodos public string Insertar(DVenta Venta, ListDetalles) { string rpta = ""; SqlConnection SqlCon = new SqlConnection(); try { //Código SqlCon.ConnectionString = Conexion.Cn; SqlCon.Open(); //Establecer la transacción SqlTransaction SqlTra = SqlCon.BeginTransaction(); //Establecer el Comando SqlCommand SqlCmd = new SqlCommand(); SqlCmd.Connection = SqlCon; SqlCmd.Transaction = SqlTra; SqlCmd.CommandText = "spinsertar_venta"; SqlCmd.CommandType = CommandType.StoredProcedure; //Parámtros SqlParameter ParIdventa = new SqlParameter(); ParIdventa.ParameterName = "@idventa"; ParIdventa.SqlDbType = SqlDbType.Int; ParIdventa.Direction = ParameterDirection.Output; SqlCmd.Parameters.Add(ParIdventa); SqlParameter ParIdcliente = new SqlParameter(); ParIdcliente.ParameterName = "@idcliente"; ParIdcliente.SqlDbType = SqlDbType.Int; ParIdcliente.Value = Venta.Idcliente; SqlCmd.Parameters.Add(ParIdcliente); SqlParameter ParIdTrabajador = new SqlParameter(); ParIdTrabajador.ParameterName = "@idtrabajador"; ParIdTrabajador.SqlDbType = SqlDbType.Int; ParIdTrabajador.Value = Venta.Idtrabajador; SqlCmd.Parameters.Add(ParIdTrabajador); SqlParameter ParFecha = new SqlParameter(); ParFecha.ParameterName = "@fecha"; ParFecha.SqlDbType = SqlDbType.Date; ParFecha.Value = Venta.Fecha; SqlCmd.Parameters.Add(ParFecha); SqlParameter ParTipo_Comprobante = new SqlParameter(); ParTipo_Comprobante.ParameterName = "@tipo_comprobante"; ParTipo_Comprobante.SqlDbType = SqlDbType.VarChar; ParTipo_Comprobante.Size = 20; ParTipo_Comprobante.Value = Venta.Tipo_Comprobante; SqlCmd.Parameters.Add(ParTipo_Comprobante); SqlParameter ParSerie = new SqlParameter(); ParSerie.ParameterName = "@serie"; ParSerie.SqlDbType = SqlDbType.VarChar; ParSerie.Size = 4; ParSerie.Value = Venta.Serie; SqlCmd.Parameters.Add(ParSerie); SqlParameter ParCorrelativo = new SqlParameter(); ParCorrelativo.ParameterName = "@correlativo"; ParCorrelativo.SqlDbType = SqlDbType.VarChar; ParCorrelativo.Size = 7; ParCorrelativo.Value = Venta.Correlativo; SqlCmd.Parameters.Add(ParCorrelativo); SqlParameter ParIgv= new SqlParameter(); ParIgv.ParameterName = "@igv"; ParIgv.SqlDbType = SqlDbType.Decimal; ParIgv.Precision = 4; ParIgv.Scale = 2; ParIgv.Value = Venta.Igv; SqlCmd.Parameters.Add(ParIgv); SqlParameter ParEstado = new SqlParameter(); ParEstado.ParameterName = "@estado"; ParEstado.SqlDbType = SqlDbType.VarChar; ParEstado.Size = 7; ParEstado.Value = Venta.Estado; SqlCmd.Parameters.Add(ParEstado); //Ejecutamos nuestro comando rpta = SqlCmd.ExecuteNonQuery() == 1 ? "OK" : "NO se Ingreso el Registro"; if (rpta.Equals("OK")) { //Obtenemos el codigo del ingreso que se genero por la base de datos this.Idventa = Convert.ToInt32(SqlCmd.Parameters["@idventa"].Value); foreach (DDetalle_Venta det in Detalles) { //Establecemos el codigo del ingreso que se autogenero det.Idventa = this.Idventa; //Llamamos al metodo insertar de la clase DetalleIngreso //y le pasamos la conexion y la transaccion que debe de usar rpta = det.Insertar(det, ref SqlCon, ref SqlTra); if (!rpta.Equals("OK")) { //Si ocurre un error al insertar un detalle de ingreso salimos del for break; } else { //Actualizamos el Stock rpta = DisminuirStock(det.Iddetalle_Ingreso, det.Cantidad); if (!rpta.Equals("OK")) { break; } } } } if (rpta.Equals("OK")) { //Se inserto todo los detalles y confirmamos la transaccion SqlTra.Commit(); } else { //Algun detalle no se inserto y negamos la transaccion SqlTra.Rollback(); } } catch (Exception ex) { rpta = ex.Message; } finally { if (SqlCon.State == ConnectionState.Open) SqlCon.Close(); } return rpta; } public string Eliminar(DVenta Venta) { string rpta = ""; SqlConnection SqlCon = new SqlConnection(); try { //Código SqlCon.ConnectionString = Conexion.Cn; SqlCon.Open(); //Establecer el Comando SqlCommand SqlCmd = new SqlCommand(); SqlCmd.Connection = SqlCon; SqlCmd.CommandText = "speliminar_venta"; SqlCmd.CommandType = CommandType.StoredProcedure; SqlParameter ParIdventa = new SqlParameter(); ParIdventa.ParameterName = "@idventa"; ParIdventa.SqlDbType = SqlDbType.Int; ParIdventa.Value = Venta.Idventa; SqlCmd.Parameters.Add(ParIdventa); //Ejecutamos nuestro comando rpta = SqlCmd.ExecuteNonQuery() == 1 ? "OK" : "OK"; } catch (Exception ex) { rpta = ex.Message; } finally { if (SqlCon.State == ConnectionState.Open) SqlCon.Close(); } return rpta; } //Disminuir Stock public string DisminuirStock(int iddetalle_ingreso,int cantidad) { string rpta = ""; SqlConnection SqlCon = new SqlConnection(); try { //Código SqlCon.ConnectionString = Conexion.Cn; SqlCon.Open(); //Establecer el Comando SqlCommand SqlCmd = new SqlCommand(); SqlCmd.Connection = SqlCon; SqlCmd.CommandText = "spdisminuir_stock"; SqlCmd.CommandType = CommandType.StoredProcedure; SqlParameter ParIddetalle_ingreso = new SqlParameter(); ParIddetalle_ingreso.ParameterName = "@iddetalle_ingreso"; ParIddetalle_ingreso.SqlDbType = SqlDbType.Int; ParIddetalle_ingreso.Value = iddetalle_ingreso; SqlCmd.Parameters.Add(ParIddetalle_ingreso); SqlParameter ParCantidad = new SqlParameter(); ParCantidad.ParameterName = "@cantidad"; ParCantidad.SqlDbType = SqlDbType.Int; ParCantidad.Value = cantidad; SqlCmd.Parameters.Add(ParCantidad); //Ejecutamos nuestro comando rpta = SqlCmd.ExecuteNonQuery() == 1 ? "OK" : "Se actualizó el Stock"; } catch (Exception ex) { rpta = ex.Message; } finally { if (SqlCon.State == ConnectionState.Open) SqlCon.Close(); } return rpta; } //Método Mostrar public DataTable Mostrar() { DataTable DtResultado = new DataTable("venta"); SqlConnection SqlCon = new SqlConnection(); try { SqlCon.ConnectionString = Conexion.Cn; SqlCommand SqlCmd = new SqlCommand(); SqlCmd.Connection = SqlCon; SqlCmd.CommandText = "spmostrar_venta"; SqlCmd.CommandType = CommandType.StoredProcedure; SqlDataAdapter SqlDat = new SqlDataAdapter(SqlCmd); SqlDat.Fill(DtResultado); } catch (Exception ex) { DtResultado = null; } return DtResultado; } //Método BuscarFechas public DataTable BuscarFechas(String TextoBuscar,String TextoBuscar2) { DataTable DtResultado = new DataTable("venta"); SqlConnection SqlCon = new SqlConnection(); try { SqlCon.ConnectionString = Conexion.Cn; SqlCommand SqlCmd = new SqlCommand(); SqlCmd.Connection = SqlCon; SqlCmd.CommandText = "spbuscar_venta_fecha"; SqlCmd.CommandType = CommandType.StoredProcedure; SqlParameter ParTextoBuscar = new SqlParameter(); ParTextoBuscar.ParameterName = "@textobuscar"; ParTextoBuscar.SqlDbType = SqlDbType.VarChar; ParTextoBuscar.Size = 50; ParTextoBuscar.Value = TextoBuscar; SqlCmd.Parameters.Add(ParTextoBuscar); SqlParameter ParTextoBuscar2 = new SqlParameter(); ParTextoBuscar2.ParameterName = "@textobuscar2"; ParTextoBuscar2.SqlDbType = SqlDbType.VarChar; ParTextoBuscar2.Size = 50; ParTextoBuscar2.Value = TextoBuscar2; SqlCmd.Parameters.Add(ParTextoBuscar2); SqlDataAdapter SqlDat = new SqlDataAdapter(SqlCmd); SqlDat.Fill(DtResultado); } catch (Exception ex) { DtResultado = null; } return DtResultado; } //Método BuscarFechas public DataTable MostrarDetalle(String TextoBuscar) { DataTable DtResultado = new DataTable("detalle_venta"); SqlConnection SqlCon = new SqlConnection(); try { SqlCon.ConnectionString = Conexion.Cn; SqlCommand SqlCmd = new SqlCommand(); SqlCmd.Connection = SqlCon; SqlCmd.CommandText = "spmostrar_detalle_venta"; SqlCmd.CommandType = CommandType.StoredProcedure; SqlParameter ParTextoBuscar = new SqlParameter(); ParTextoBuscar.ParameterName = "@textobuscar"; ParTextoBuscar.SqlDbType = SqlDbType.VarChar; ParTextoBuscar.Size = 50; ParTextoBuscar.Value = TextoBuscar; SqlCmd.Parameters.Add(ParTextoBuscar); SqlDataAdapter SqlDat = new SqlDataAdapter(SqlCmd); SqlDat.Fill(DtResultado); } catch (Exception ex) { DtResultado = null; } return DtResultado; } public DataTable MostrarArticulo_Venta_Nombre(String TextoBuscar) { DataTable DtResultado = new DataTable("articulo"); SqlConnection SqlCon = new SqlConnection(); try { SqlCon.ConnectionString = Conexion.Cn; SqlCommand SqlCmd = new SqlCommand(); SqlCmd.Connection = SqlCon; SqlCmd.CommandText = "spbuscararticulo_venta_nombre"; SqlCmd.CommandType = CommandType.StoredProcedure; SqlParameter ParTextoBuscar = new SqlParameter(); ParTextoBuscar.ParameterName = "@textobuscar"; ParTextoBuscar.SqlDbType = SqlDbType.VarChar; ParTextoBuscar.Size = 50; ParTextoBuscar.Value = TextoBuscar; SqlCmd.Parameters.Add(ParTextoBuscar); SqlDataAdapter SqlDat = new SqlDataAdapter(SqlCmd); SqlDat.Fill(DtResultado); } catch (Exception ex) { DtResultado = null; } return DtResultado; } public DataTable MostrarArticulo_Venta_Codigo(String TextoBuscar) { DataTable DtResultado = new DataTable("articulo"); SqlConnection SqlCon = new SqlConnection(); try { SqlCon.ConnectionString = Conexion.Cn; SqlCommand SqlCmd = new SqlCommand(); SqlCmd.Connection = SqlCon; SqlCmd.CommandText = "spbuscararticulo_venta_codigo"; SqlCmd.CommandType = CommandType.StoredProcedure; SqlParameter ParTextoBuscar = new SqlParameter(); ParTextoBuscar.ParameterName = "@textobuscar"; ParTextoBuscar.SqlDbType = SqlDbType.VarChar; ParTextoBuscar.Size = 50; ParTextoBuscar.Value = TextoBuscar; SqlCmd.Parameters.Add(ParTextoBuscar); SqlDataAdapter SqlDat = new SqlDataAdapter(SqlCmd); SqlDat.Fill(DtResultado); } catch (Exception ex) { DtResultado = null; } return DtResultado; } } }
Video 32: Sistema de Ventas C# - Visual Studio 2013 - Sql Server 2014 (32-40) Clase DVenta
Saludos Imperio, un abrazo a la distancia!
Diseño Sistema de Ventas C# - Visual Studio 2013 y Sql Server 2014 (32-41) Capa Datos Venta
Reviewed by IncanatoIt-ad
on
18:02
Rating:
No hay comentarios: