martes, febrero 22, 2011

C# - Aplicación de Escritorio, Sistemas de Ventas Part III - Creación de la Capa de Negocios


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"

1. Entorno


  • Visual Studio 2008
  • SQL Server 2008

2. Introducción


Ya vimos que en la Parte II del tutorial creamos la Capa de Dato de nuestro sistema, la cual es la encargada de comunicarse con la base de datos. Ahora nos tocaría desarrollar la Capa de Negocios que es la capa en la cual se implementa la lógica del negocio de la empresa como obtener descuentos, aumentos, etc.

3. Desarrollo


3.1. Creando el proyecto

Ahora debemos de agregar a nuestro proyecto un proyecto del tipo biblioteca de clases que se llamara "CapaNegocios"
















3.2. Agregando al referencia con la Capa de Datos

Debemos de establecer la comunicacion entre la Capa de Negocios y la Capa de Datos. Para eso hacemos clic derecho en nuestro proyecto que se llama "CapaNegocios" y nos vamos a la opcion de "Agregar Referencia"























Y de ahí seleccionamos que se comunique con el proyecto que se llama "CapaDatos"




















3.3. Clase NegProducto

La clase "NegProducto" se encarga de comunicarse con la clase "Producto" de la capa de datos

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
//Para que se comunique con la Capa de Datos
using CapaDatos;
//Desarollado por Henry Joe Wong Urquiza
namespace CapaNegocios
{
  public class NegProducto
  {
    //Metodo que llama al metodo Insertar de la Capa de Datos 
    //de la clase Producto
    public static string Insertar(string Nombre, decimal Precio)
    {
      Producto pro = new Producto();
      pro.nombre = Nombre;
      pro.precio = Precio;
      return pro.Insertar(pro);
    }
    //Metodo que llama al metodo Actualizar de la Capa de Datos 
    //de la clase Producto
    public static string Actualizar(int CodigoProducto, string Nombre, decimal Precio)
    {
      Producto pro = new Producto();
      pro.codigoProducto = CodigoProducto;
      pro.nombre = Nombre;
      pro.precio = Precio;
      return pro.Actualizar(pro);
    }
    //Metodo que se encarga de llamar al metodo ObtenerProducto
    //de la clase Producto
    public static DataTable ObtenerProducto()
    {
      return new Producto().ObtenerProducto();
    }
  }
}



3.4. Clase NegDetalleVenta


La clase "NegDetalleVenta" se encarga de establecer los descuentos de los detalles de venta. Si el subtotal supera los 50 soles, dolares, euros, etc se le aplica un descuento del 5% del detalle de la venta. Y eso se aplica en la Capa de Negocios debido a que pertenece a la lógica de la empresa.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//Desarollado por Henry Joe Wong Urquiza
namespace CapaNegocios
{
  public class NegDetalleVenta
  {
    //Metodo utilizado para obtener el descuento del detalle de la venta
    //si la venta supera los 50 soles, dolares, euros, etc
    //se le hace un descuento del 5% del detalle de la venta
    public static decimal ObtenerDescuento(decimal cantidad, decimal pu)
    {
      if ((cantidad * pu) > 50)
      {
        decimal porcentaje = Convert.ToDecimal(0.05);
        decimal descuento = ((cantidad * pu) * porcentaje);
        return descuento;
      }
      else
      {
        return 0;
      }
    }
  }
}

3.5. Clase NegVenta

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
//Para que se comunique con la Capa de Datos
using CapaDatos;
//Desarollado por Henry Joe Wong Urquiza

namespace CapaNegocios
{
  public class NegVenta
  {
    //Metodo que llama al metodo Insertar de la Capa de Datos 
    //de la clase Venta
    public static string Insertar(string cliente, DataTable dtDetalles)
    {
      Venta venta = new Venta();
      venta.cliente = cliente;
      List<DetalleVenta> detalles=new List<DetalleVenta>();
      foreach (DataRow row in dtDetalles.Rows)
      {
        DetalleVenta detalle = new DetalleVenta();
        detalle.codigoProducto = Convert.ToInt32(row["codigoProducto"].ToString());
        detalle.cantidad = Convert.ToDecimal(row["cantidad"].ToString());
        detalle.descuento = NegDetalleVenta.ObtenerDescuento(detalle.cantidad, Convert.ToDecimal(row["PU"].ToString()));
        detalles.Add(detalle);
      }
      return venta.Insertar(venta, detalles);
    }
    //Metodo que se encarga de llamar al metodo ObtenerProducto
    //de la clase Venta
    public static DataTable ObtenerVenta()
    {
      return new Venta().ObtenerVenta();
    }
    //Metodo que se encarga de llamar al metodo ObtenerProducto 
    //por codigo de la clase Venta
    public static DataTable ObtenerVenta(int codigoVenta)
    {
      return new Venta().ObtenerVenta(codigoVenta);
    }
  }
}

4. Resumen


Al final deberíamos tener las siguientes clases

8 comentarios:

Hola, encuentro que el tutorial es bien bueno, pero me parece que hay un error, he copiado el codigo y me encontrado que el haber declarado el constructor con parametros producto no es posible acceder a sus variales por que fueron declaradas como privadas, en la funcion insertar de la capa de negocios se setean las variables pero por ser declaradas como privadas no son visbles desde esa capa.
Saludos

Hola Carlos, lo he probado el ejemplo copiando y pegando todo y si funciona. Recuerda que para acceder a las variables es por los métodos get y set

Hola el tutorial está excelente y te agradezco mucho por tu tiempo. Yo tengo un problema en el DatagridView, no me está mostrando datos, sin embargo esta mostrando las filas que existen en la tabla. Si me puedes ayudar te lo agradecería.

Hola estoy siguiendo tu tutorial y hay algo que no comprendo como puedes llamas al metodo Actualizar de la capa de datos de la clase Producto si no esta declarada la funcion Actualizar...Eso es todo gracias de antemano y sigue publicando este tipo de tutoriales... estas salvando la vida a varios XD

Que ciego que soy como no vi Actualizar XD disculpa la molestia...

No te preocupes !!! Espero que te haya servido el tutorial =)

bueno profe excelente los tutoriales, espero que le vaya bien en todo saludos desde trujillo
Rebaza Rebaza

Bueno profe espero que se encuentre bien saludos a la distancia
Rebaza Rebaza