public ActionResult CancelarVenta(int idVenta)
 {
     try
     {
         usuario oUsuario = (usuario)Session["Usuario"];
         if (oUsuario == null)
         {
             Session.Clear();
             return(RedirectToAction("Index", "Home"));
         }
         srvVenta sVenta      = new srvVenta();
         bool     boCancelada = sVenta.CancelarVenta(idVenta);
         if (boCancelada)
         {
             return(RedirectToAction("VistaVenta", "Venta", new { idVenta = idVenta }));
         }
         else
         {
             throw new Exception();
         }
     }
     catch (Exception)
     {
         return(RedirectToAction("Error", "Error", new { stError = "Se produjo un error al intentar cancelar la venta." }));
     }
 }
        public ActionResult VistaVenta(int idVenta)
        {
            try
            {
                usuario oUsuario = (usuario)Session["Usuario"];
                if (oUsuario == null)
                {
                    Session.Clear();
                    return(RedirectToAction("Index", "Home"));
                }

                srvVenta      sVenta   = new srvVenta();
                srvMetodoPago sMetodoP = new srvMetodoPago();
                venta         oVenta   = sVenta.ObtenerVenta(idVenta);
                ViewBag.metodosPago  = sMetodoP.ObtenerMetodosPago();
                ViewBag.detallesPago = sVenta.ObtenerDetallesPagoDeVenta(idVenta);
                if (oVenta.idCliente == 0 || oVenta.idCliente == null)
                {
                    oVenta.idCliente        = 0;
                    oVenta.cliente          = new cliente();
                    oVenta.cliente.nombre   = "CONSUMIDOR ";
                    oVenta.cliente.apellido = "FINAL";
                }
                return(View(oVenta));
            }
            catch (Exception)
            {
                return(RedirectToAction("Error", "Error", new { stError = "Se produjo un error al intentar obtener los datos del servidor." }));
            }
        }
        public ActionResult GenerarVenta()
        {
            try
            {
                Session["lstProducto"] = null;
                usuario oUsuario = (usuario)Session["Usuario"];
                if (oUsuario == null)
                {
                    Session.Clear();
                    return(RedirectToAction("Index", "Home"));
                }
                venta oVenta = (venta)Session["venta"];

                oVenta.cliente   = null;
                oVenta.idUsuario = oUsuario.idUsuario;
                oVenta.entregado = 0;
                oVenta.idEstado  = 9;
                srvVenta sVenta = new srvVenta();
                if (oVenta.detalleVenta.Count == 0)
                {
                    return(RedirectToAction("Error", "Error", new { stError = "Se produjo un error al intentar obtener los datos del servidor." }));
                }
                if (oVenta.idCliente == 0)
                {
                    oVenta.idCliente = null;
                }
                oVenta           = sVenta.guardarVenta(oVenta);
                Session["venta"] = null;
                return(RedirectToAction("VistaVenta", new { idVenta = oVenta.idVenta }));
            }
            catch (Exception)
            {
                return(RedirectToAction("Error", "Error", new { stError = "Se produjo un error al intentar obtener los datos del servidor." }));
            }
        }
        public PartialViewResult _CarritoVenta(int idProducto, string precio, string cantidad)
        {
            decimal precioD   = Convert.ToDecimal(precio);
            int     cantidadI = Convert.ToInt32(cantidad);

            try
            {
                venta oVenta = new venta();
                if (Session["venta"] == null)
                {
                    Session["venta"] = new venta();
                }
                else
                {
                    //Session["venta"] = Session["venta"];
                    oVenta = (venta)Session["venta"];
                }
                srvVenta sVenta = new srvVenta();
                oVenta           = sVenta.agregarDetalle(oVenta, idProducto, precioD, cantidadI);
                Session["venta"] = oVenta;
                return(PartialView());
            }
            catch (Exception)
            {
                return(null);
            }
        }
 public ActionResult ListarVentas(string fechaDesde, string fechaHasta, int idUsuario = 0, int idVenta = 0)
 {
     ViewBag.filtros = fechaDesde + ";" + fechaHasta + ";" + idUsuario;
     if (fechaDesde == "")
     {
         fechaDesde = "01/01/1000";
     }
     if (fechaHasta == "")
     {
         fechaHasta = "01/01/3000";
     }
     try
     {
         usuario oUsuario = (usuario)Session["Usuario"];
         if (oUsuario == null)
         {
             Session.Clear();
             return(RedirectToAction("Index", "Home"));
         }
         srvVenta     sVenta = new srvVenta();
         List <venta> lstVentas;
         srvUsuario   sUsuario = new srvUsuario();
         ViewBag.Ususarios    = sUsuario.ObtenerUsuarios();
         lstVentas            = sVenta.ObtenerVentas(Convert.ToDateTime(fechaDesde), Convert.ToDateTime(fechaHasta), idUsuario, idVenta);
         Session["lstVentas"] = lstVentas;
         PagedList <venta> ModelVentas = new PagedList <venta>(lstVentas.ToList(), 1, 10);
         return(View(ModelVentas));
     }
     catch (Exception)
     {
         return(RedirectToAction("Error", "Error", new { stError = "Se produjo un error al intentar obtener los datos del servidor." }));
     }
 }
 public ActionResult ListarVentas(int nroPagina = 1, int tamañoPagina = 10, bool paginacion = false)
 {
     try
     {
         usuario oUsuario = (usuario)Session["Usuario"];
         if (oUsuario == null)
         {
             Session.Clear();
             return(RedirectToAction("Index", "Home"));
         }
         srvUsuario sUsuario = new srvUsuario();
         ViewBag.Ususarios = sUsuario.ObtenerUsuarios();
         List <venta> lstVentas = (List <venta>)Session["lstVentas"];
         if (lstVentas == null || lstVentas.Count == 0 || paginacion == false)
         {
             srvVenta sVenta = new srvVenta();
             lstVentas            = sVenta.ObtenerVentas(Convert.ToDateTime("01/01/1000"), Convert.ToDateTime("01/01/3000"), oUsuario.idUsuario);
             Session["lstVentas"] = lstVentas;
         }
         ViewBag.filtros = ";;";
         PagedList <venta> ModelVentas = new PagedList <venta>(lstVentas.ToList(), nroPagina, tamañoPagina);
         return(View(ModelVentas));
     }
     catch (Exception)
     {
         return(RedirectToAction("Error", "Error", new { stError = "Se produjo un error al intentar obtener los datos del servidor." }));
     }
 }
        public JsonResult GuardarPago(string entrega, int idMetodoPago, int idVenta, int idCliente, bool usoSaldo, bool guardarSaldo)
        {
            try
            {
                srvVenta   sVenta   = new srvVenta();
                srvCliente sCliente = new srvCliente();
                cliente    oCliente = new cliente();
                venta      oVenta   = sVenta.ObtenerVenta(idVenta);

                decimal EntregaMasSaldo     = 0;    // total de $ entregado (saldo + dinero entregado)
                decimal entregoSaldo        = 0;    // saldo entregado
                decimal entregoDinero       = 0;    // dinero entregado
                decimal saldoAgregadoDinero = 0;    // saldo que sobra del dinero entregado


                decimal faltante = oVenta.costoTotal - Convert.ToDecimal(oVenta.entregado);
                entrega = entrega.Replace('.', ',');

                if (idCliente != 0)
                {
                    oCliente = sCliente.ObtenerCliente(idCliente);

                    if (usoSaldo)
                    {
                        //entrega todo el saldo cuando el saldo es menor al faltante de la venta
                        EntregaMasSaldo = Convert.ToDecimal(oCliente.saldo);
                        faltante        = faltante - Convert.ToDecimal(oCliente.saldo);
                        if (faltante < 0)
                        {
                            //pago todo con el saldo
                            EntregaMasSaldo = oVenta.costoTotal - Convert.ToDecimal(oVenta.entregado);
                            faltante        = 0;
                        }
                        oCliente.saldo = oCliente.saldo - (oVenta.costoTotal - Convert.ToDecimal(oVenta.entregado));
                        if (oCliente.saldo < 0)
                        {
                            oCliente.saldo = 0;
                        }
                        entregoSaldo = EntregaMasSaldo;
                    }
                }
                if (faltante > 0)
                {
                    //pagó o no algo con el saldo pero aún queda por pagar
                    //500 faltante
                    // 400 entrega
                    if (Convert.ToDecimal(entrega) > faltante)
                    {
                        EntregaMasSaldo = EntregaMasSaldo + faltante;
                    }
                    else
                    {
                        EntregaMasSaldo = EntregaMasSaldo + (Convert.ToDecimal(entrega));
                    }
                }
                if (oCliente.idCliente != 0)
                {
                    // lo guardo aca porque falta ver si queda resto en la entrega
                    // guardar siempre el saldo? o dejarlo así?
                    if (guardarSaldo)
                    {
                        saldoAgregadoDinero = (Convert.ToDecimal(entrega) - faltante);
                        oCliente.saldo      = oCliente.saldo + (Convert.ToDecimal(entrega) - faltante);
                        if (oCliente.saldo < 0)
                        {
                            saldoAgregadoDinero = 0;
                            oCliente.saldo      = 0;
                        }
                    }
                    sCliente.GuardarModificarCliente(oCliente);
                }
                entregoDinero = EntregaMasSaldo - entregoSaldo;

                //EntregaMasSaldo
                //entregoSaldo
                //entregoDinero
                //saldoAgregadoDinero


                detallePago oDetalleP = new detallePago();

                // guardo el detalle del saldo consumido (-)
                if (entregoSaldo > 0)
                {
                    oDetalleP.fechaPago    = DateTime.Now;
                    oDetalleP.idMetodoPago = idMetodoPago;
                    oDetalleP.idVenta      = idVenta;
                    oDetalleP.entrega      = Math.Round(entregoSaldo * -1, 0);
                    oDetalleP.tipoPago     = "SALDO";
                    sVenta.GuardarDetallePago(oDetalleP);
                }
                // guardo el detalle del dinero entregado (-)
                if (entregoDinero > 0)
                {
                    oDetalleP.fechaPago    = DateTime.Now;
                    oDetalleP.idMetodoPago = idMetodoPago;
                    oDetalleP.idVenta      = idVenta;
                    oDetalleP.entrega      = Math.Round(entregoDinero * -1, 0);
                    oDetalleP.tipoPago     = "DINERO";
                    sVenta.GuardarDetallePago(oDetalleP);
                }
                // guardo el detalle del saldo agregado (-)
                if (saldoAgregadoDinero > 0)
                {
                    oDetalleP.fechaPago    = DateTime.Now;
                    oDetalleP.idMetodoPago = idMetodoPago;
                    oDetalleP.idVenta      = idVenta;
                    oDetalleP.entrega      = Math.Round(saldoAgregadoDinero, 0);
                    oDetalleP.tipoPago     = "SALDO";
                    sVenta.GuardarDetallePago(oDetalleP);
                }


                oVenta.entregado = Math.Round(Convert.ToDecimal(oVenta.entregado) + EntregaMasSaldo, 0);
                sVenta.ModificarVenta(oVenta);
                return(Json(true));
            }
            catch (Exception)
            {
                return(Json(false));
            }
        }