public int CrearVenta(HttpContextBase context, Venta venta, int idCliente, int credito, int IdSucursal) { /* * Proceso de la venta: * 1.- Setear los precios y cantidades finales de cada producto - Se hace en el controlador * 2.- Calcular el total de la venta, así como los impuestos y el Subtotal * 3.- Crear las relaciones de la venta con los productos * 4.- Mandar a crédito si asi se requiere * 5.- Mandar Datos a la FEL para la factura electrónica * 6.- Recibir la factura electrónica y guardarla */ decimal totalVenta = 0; var cartItems = GetElementos(); foreach (var item in cartItems) { var productoVenta = new ProductoVenta { ProductoId = item.ProductoId, VentaId = venta.ID, PrecioVenta = item.PrecioVenta, Count = item.Count, Producto = db.Productos.Find(item.ProductoId), Venta = db.Ventas.Find(venta.ID) }; db.ProductosVenta.Add(productoVenta); db.SaveChanges(); /*Aqui quitaremos los productos del inventario y generaremos un moviemiento en el*/ //Buscamos el elemento que representa en ProductoSucursal var PS = db.ProductosSucursal.Single(p => p.IdProducto == item.ProductoId && p.IdSucursal == IdSucursal); //Quitamos del inventario la cantidad PS.cantidad -= item.Count; //Establecer el Subtotal de la venta - Modificar para el cambio de precios totalVenta += (item.Count * productoVenta.PrecioVenta); } venta.Subtotal = totalVenta; venta.TotalImpuestosRetenidos = 0; venta.TotalImpuestosTrasladados = totalVenta * IVA; venta.IdCliente = idCliente; venta.IdSucursal = IdSucursal; venta.Total = venta.Subtotal + venta.TotalImpuestosTrasladados; venta.ImporteLetra = toText(venta.Total); venta.Liquidado = true; venta.FormaDePago = "Pago en una sola exhibición"; venta.IdSucursal = IdSucursal; decimal total = (totalVenta) + (totalVenta*IVA); venta.ImporteLetra = toText(total); venta.Total = total; /* * Averiguamos la cuenta de crédito a la que se va a cargar esta venta */ if(credito == 1) { var cCredito = db.CuentasCredito.Single(c => c.IdCliente == idCliente); venta.Liquidado = false; if (cCredito.Ventas.Count == 0) { cCredito.Ventas = new List<Venta>(); cCredito.Ventas.Add(venta); } else cCredito.Ventas.Add(venta); db.SaveChanges(); } //Aqui va la peticion con FEL db.SaveChanges(); VaciarCarrito(); return venta.ID; }
public int CrearVenta(CarritoDeCompras carrito, Venta venta, int idCliente, int credito, int IdSucursal) { decimal IVA = 0.16M; /* * Proceso de la venta: * 1.- Setear los precios y cantidades finales de cada producto - Se hace en el controlador * 2.- Calcular el total de la venta, así como los impuestos y el Subtotal * 3.- Crear las relaciones de la venta con los productos * 4.- Mandar a crédito si asi se requiere * 5.- Mandar Datos a la FEL para la factura electrónica * 6.- Recibir la factura electrónica y guardarla */ decimal totalVenta = 0; var cartItems = carrito.GetElementos(); foreach (var item in cartItems) { var productoVenta = new ProductoVenta { ProductoId = item.ProductoId, VentaId = venta.ID, PrecioVenta = item.PrecioVenta, Count = item.Count, Producto = db.Productos.Find(item.ProductoId), Venta = db.Ventas.Find(venta.ID) }; db.ProductosVenta.Add(productoVenta); db.SaveChanges(); /*Aqui quitaremos los productos del inventario y generaremos un moviemiento en el*/ //Buscamos el elemento que representa en ProductoSucursal var PS = db.ProductosSucursal.Single(p => p.IdProducto == item.ProductoId && p.IdSucursal == IdSucursal); //Quitamos del inventario la cantidad PS.cantidad -= item.Count; //Aqui generamos un movimiento de Almacen MovimientoAlmacen movimiento = new MovimientoAlmacen { DescripcionMovimiento = "Venta de " + item.Count + " del producto " + item.Producto.Nombre, Count = item.Count, FechaMovimiento = System.DateTime.Now, OrdenDeCompra = null, IdOrednCompra = 0, IdProducto = item.ProductoId, Producto = db.Productos.Find(item.ProductoId), IdSucursal = IdSucursal, Sucursal = db.Sucursales.Find(IdSucursal), TipoMovimiento = "Venta", IdVenta = venta.ID, username = HttpContext.User.Identity.Name }; db.MovimientosAlmacen.Add(movimiento); //Establecer el Subtotal de la venta - Modificar para el cambio de precios totalVenta += (item.Count * productoVenta.PrecioVenta); } venta.Moneda = "MXN Moneda Nacional (Peso Mexicano)"; venta.usuario = HttpContext.User.Identity.Name; venta.Subtotal = totalVenta; venta.TotalImpuestosRetenidos = 0; venta.TotalImpuestosTrasladados = totalVenta * IVA; venta.IdCliente = idCliente; venta.IdSucursal = IdSucursal; decimal total = venta.Subtotal + venta.TotalImpuestosTrasladados; venta.Total = total; decimal centavos = (total - (int)total) * 100; venta.ImporteLetra = toText(venta.Total) + ", " + (int)centavos + "/100 MXN"; venta.Liquidado = true; venta.FormaDePago = "Pago en una sola exhibición"; venta.IdSucursal = IdSucursal; decimal totalN = (totalVenta) + (totalVenta * IVA); decimal centavosN = 100*(totalN - (int)total); int cn = (int)centavosN; venta.ImporteLetra = toText(totalN) + " " + cn + "/100 M.N."; venta.Total = total; //Generamos un movimiento de Almacen /* * Averiguamos la cuenta de crédito a la que se va a cargar esta venta */ if (credito == 1) { var cCredito = db.CuentasCredito.Single(c => c.IdCliente == idCliente); venta.Liquidado = false; if (cCredito.Ventas.Count == 0) { cCredito.Ventas = new List<Venta>(); cCredito.Ventas.Add(venta); } else cCredito.Ventas.Add(venta); } db.SaveChanges(); carrito.VaciarCarrito(); return venta.ID; }