public ActionResult PagarReserva(VenderEntradaModel model) { int codVenta = model.idVenta; if (validacionVenta(model)) { DateTime hoy = DateTime.Now; //buscamos la venta Ventas venta = db.Ventas.Find(model.idVenta); venta.montoDev = 0; //asignamos el vendedor venta.vendedor = User.Identity.Name; //estado y la fecha de pago venta.Estado = MagicHelpers.Compra; venta.fecha = hoy; //monto usados al pagar //venta.montoEfectivoSoles = model.MontoDolares * db.TipoDeCambio.Where(c => c.estado == "Activo").ToList().Last().valor.Value / MagicHelpers.ConstanteTipoCambio + model.MontoEfe - model.Vuelto; venta.montoEfectivoDolares = model.MontoDolares; double dolarsoles = (double)model.MontoDolares * db.TipoDeCambio.Where(c => c.estado == "Activo").ToList().Last().valor.Value / MagicHelpers.ConstanteTipoCambio; if (model.MontoEfe > dolarsoles) { venta.montoEfectivoSoles = model.MontoEfe - model.Vuelto; } else { venta.montoEfectivoSoles = model.MontoEfe; venta.montoEfectivoDolares = (dolarsoles - model.Vuelto) / (db.TipoDeCambio.Where(c => c.estado == "Activo").ToList().Last().valor.Value / MagicHelpers.ConstanteTipoCambio); } venta.montoCreditoSoles = model.MontoTar; venta.MontoTotalSoles = model.MontoPagar; //modalidad de pago if (venta.montoCreditoSoles > 0 && venta.montoEfectivoSoles == 0 && venta.montoEfectivoDolares == 0) venta.modalidad = "T"; if (venta.montoCreditoSoles == 0 && (venta.montoEfectivoDolares + venta.montoEfectivoSoles) > 0) venta.modalidad = "E"; if ((venta.montoCreditoSoles + venta.montoEfectivoDolares) > 0 && venta.montoEfectivoDolares > 0) venta.modalidad = "M"; //buscamos la ventaxfuncion VentasXFuncion vxf = db.VentasXFuncion.Where(c => c.codVen == venta.codVen).First(); vxf.subtotal = model.Importe; double? porcDescuento = 0; //default es mixto vxf.descuento = (int)model.Descuento; //-- if (venta.modalidad == "T") { if (model.idPromociones[0] != -1) { int idPromocion = model.idPromociones[0]; Promociones promocion = db.Promociones.Where(c => c.codPromo == idPromocion && c.codEvento == model.idEvento).First(); porcDescuento = promocion.descuento / 100; } vxf.descuento = (int?)(vxf.subtotal * porcDescuento); } if (venta.modalidad == "E") { vxf.descuento = (int?)model.Descuento; } vxf.total = model.Importe - model.Descuento; Eventos evento = db.Eventos.Find(vxf.Funcion.codEvento); DetalleVenta detalle = db.DetalleVenta.Where(c => c.codVen == venta.codVen && c.codFuncion == vxf.Funcion.codFuncion).First(); //aumantemos el monto adeduado del organizador evento.monto_adeudado += evento.montoFijoVentaEntrada.Value + evento.porccomision.Value * detalle.total.Value / 100; //si es que tiene asientos, debo cambiar el estado de todos los asientos que ha comprado if (db.AsientosXFuncion.Any(c => c.codFuncion == vxf.Funcion.codFuncion && c.codDetalleVenta == detalle.codDetalleVenta)) { List<AsientosXFuncion> axf = db.AsientosXFuncion.Where(c => c.codFuncion == vxf.Funcion.codFuncion && c.codDetalleVenta == detalle.codDetalleVenta).ToList(); foreach (AsientosXFuncion asientoxf in axf) { asientoxf.estado = MagicHelpers.Ocupado; asientoxf.PrecioPagado = model.MontoPagar; } } //busco al cliente y le aumento los puntos correspondientes CuentaUsuario cuenta = db.CuentaUsuario.Where(c => c.codDoc == model.Dni).First(); cuenta.puntos += db.Eventos.Find(vxf.Funcion.codEvento).puntosAlCliente * (int)detalle.cantEntradas; try { db.SaveChanges(); Session["ReservaBusca"] = null; } catch (Exception ex) { TempData["tipo"] = "alert alert-warning"; TempData["message"] = "Error en el pago."; return Redirect("~/Ventas/PagarReserva?reserva=" + model.idVenta); } TempData["tipo"] = "alert alert-success"; TempData["message"] = "Reserva Pagada. Muchas Gracias."; //le envio el correo al cliente de que la reserva ha sido pagada EmailController.EnviarCorreoCompra(model.idVenta, cuenta.correo); //return RedirectToAction("BuscarReserva","Ventas"); return RedirectToAction("Index2", "Home"); } //si hay un error volver a rellenar todo Ventas queryVentas = db.Ventas.Where(c => c.codVen == codVenta).First(); VentasXFuncion queryVF = db.VentasXFuncion.Where(c => c.codVen == codVenta).First(); int codFun = queryVF.codFuncion; Funcion queryF = db.Funcion.Where(c => c.codFuncion == codFun).First(); int codEvento2 = queryF.codEvento; double? precio = queryVF.subtotal; //lista de bancos List<Banco> bancos = db.Banco.ToList(); ViewBag.Bancos = new SelectList(bancos, "codigo", "nombre", model.idBanco); //lista de tarjetas List<TipoTarjeta> tipoTarjeta = db.TipoTarjeta.ToList(); ViewBag.TipoTarjeta = new SelectList(tipoTarjeta, "idTipoTar", "nombre", model.idTipoTarjeta); List<Promociones> listaPromociones = new List<Promociones>(); List<Promociones> listaPromocionesEfectivo = new List<Promociones>(); double? descuento = 0; double? descuentoE = 0; double? total = 0; total += precio; Promociones promocion2 = PromocionController.CalculaMejorPromocionTarjeta(model.idEvento, bancos.First().codigo, tipoTarjeta.First().idTipoTar); if (promocion2 == null) { Promociones dummy = new Promociones(); dummy.codPromo = -1; listaPromociones.Add(dummy); } else { descuento += precio * promocion2.descuento.Value / 100; listaPromociones.Add(promocion2); } promocion2 = PromocionController.CalculaMejorPromocionEfectivo(model.idEvento); if (promocion2 != null) { if (queryVF.cantEntradas >= promocion2.cantAdq) { descuentoE += 1.0 * promocion2.cantAdq * precio * (1 - (promocion2.cantComp.Value * 1.0 / promocion2.cantAdq.Value)); listaPromocionesEfectivo.Add(promocion2); } else { Promociones dummy = new Promociones(); dummy.codPromo = -1; listaPromocionesEfectivo.Add(dummy); } } else { Promociones dummy = new Promociones(); dummy.codPromo = -1; listaPromocionesEfectivo.Add(dummy); } ViewBag.PromocionesEfectivo = listaPromocionesEfectivo; ViewBag.Promociones = listaPromociones; ViewBag.Funciones = model.idFunciones; ViewBag.Total = total; //efectivo if (model.MontoTar == 0 && model.MontoEfe >= 0 && model.MontoDolares >= 0) { ViewBag.DescuentoE = model.Descuento; ViewBag.MontoPagarE = model.MontoPagar; ViewBag.MontoSE = model.MontoEfe; ViewBag.MontoDE = model.MontoDolares; ViewBag.VueltoE = model.Vuelto; //tarjeta ViewBag.Descuento = descuento; ViewBag.MontoPagarT = total - descuento; ViewBag.MontoTarjeta = total - descuento; //mixto ViewBag.MontoPagarM = total; ViewBag.MontoSM = 0; ViewBag.MontoDM = 0; ViewBag.MontoTarjetaM = 0; ViewBag.VueltoM = 0; model.modalidad = 1; } //tarjeta if (model.MontoTar > 0 && model.MontoEfe == 0 && model.MontoDolares == 0) { ViewBag.DescuentoE = descuentoE; ViewBag.MontoPagarE = total - descuentoE; ViewBag.MontoSE = 0; ViewBag.MontoDE = 0; ViewBag.VueltoE = 0; //tarjeta ViewBag.Descuento = model.Descuento; ViewBag.MontoPagarT = model.MontoPagar; ViewBag.MontoTarjeta = model.MontoTar; //mixto ViewBag.MontoPagarM = total; ViewBag.MontoSM = 0; ViewBag.MontoDM = 0; ViewBag.MontoTarjetaM = 0; ViewBag.VueltoM = 0; model.modalidad = 2; } if (model.MontoTar >= 0 && model.MontoEfe >= 0 && model.MontoDolares >= 0) { ViewBag.DescuentoE = descuentoE; ViewBag.MontoPagarE = total - descuentoE; ViewBag.MontoSE = 0; ViewBag.MontoDE = 0; ViewBag.VueltoE = 0; //tarjeta ViewBag.Descuento = descuento; ViewBag.MontoPagarT = total - descuento; ViewBag.MontoTarjeta = total - descuento; //mixto ViewBag.MontoPagarM = model.MontoPagar; ViewBag.MontoSM = model.MontoEfe; ViewBag.MontoDM = model.MontoDolares; ViewBag.MontoTarjetaM = model.MontoTar; ViewBag.VueltoM = model.Vuelto; model.modalidad = 3; } ViewBag.Mes = Fechas.Mes(); ViewBag.AnVen = Fechas.Anio(); return View(model); }
public ActionResult PagarReserva(string reserva) { VenderEntradaModel model = new VenderEntradaModel(); if (reserva != "" && reserva != null) { int id = int.Parse(reserva); Ventas queryVentas = db.Ventas.Where(c => c.codVen == id).First(); VentasXFuncion queryVF = db.VentasXFuncion.Where(c => c.codVen == id).First(); int codFun = queryVF.codFuncion; model.Nombre = queryVentas.CuentaUsuario.nombre + " " + queryVentas.CuentaUsuario.apellido; model.Dni = queryVentas.CuentaUsuario.codDoc; Funcion queryF = db.Funcion.Where(c => c.codFuncion == codFun).First(); model.idVenta = id; int codEvento = queryF.codEvento; double? precio = queryVF.subtotal; //lista de bancos List<Banco> bancos = db.Banco.ToList(); ViewBag.Bancos = new SelectList(bancos, "codigo", "nombre"); //lista de tarjetas List<TipoTarjeta> tipoTarjeta = db.TipoTarjeta.ToList(); ViewBag.TipoTarjeta = new SelectList(tipoTarjeta, "idTipoTar", "nombre"); List<Promociones> listaPromociones = new List<Promociones>(); List<Promociones> listaPromocionesEfectivo = new List<Promociones>(); double? descuento = 0; double? descuentoE = 0; Promociones promocion = PromocionController.CalculaMejorPromocionTarjeta(codEvento, bancos.First().codigo, tipoTarjeta.First().idTipoTar); if (promocion == null) { Promociones dummy = new Promociones(); dummy.codPromo = -1; listaPromociones.Add(dummy); } else { descuento += precio * promocion.descuento.Value / 100; listaPromociones.Add(promocion); } promocion = PromocionController.CalculaMejorPromocionEfectivo(codEvento); if (promocion != null) { if (queryVF.cantEntradas >= promocion.cantAdq) { descuentoE += 1.0 * promocion.cantAdq / queryVF.cantEntradas * precio * (1 - (promocion.cantComp.Value * 1.0 / promocion.cantAdq.Value)); listaPromocionesEfectivo.Add(promocion); } else { Promociones dummy = new Promociones(); dummy.codPromo = -1; listaPromocionesEfectivo.Add(dummy); } } else { Promociones dummy = new Promociones(); dummy.codPromo = -1; listaPromocionesEfectivo.Add(dummy); } model.idEventos = new List<int>(); model.idEventos.Add(codEvento); ViewBag.PromocionesEfectivo = listaPromocionesEfectivo; ViewBag.Promociones = listaPromociones; ViewBag.Total = precio; //efectivo ViewBag.DescuentoE = descuentoE; ViewBag.MontoPagarE = precio - descuentoE; ViewBag.MontoSE = 0; ViewBag.MontoDE = 0; ViewBag.VueltoE = 0; //tarjeta ViewBag.Descuento = descuento; ViewBag.MontoPagarT = precio - descuento; ViewBag.MontoTarjeta = precio - descuento; //mixto ViewBag.MontoPagarM = precio; ViewBag.MontoSM = 0; ViewBag.MontoDM = 0; ViewBag.MontoTarjetaM = 0; ViewBag.VueltoM = 0; ViewBag.Mes = Fechas.Mes(); ViewBag.AnVen = Fechas.Anio(); model.idEvento = codEvento; //modalidad model.modalidad = 1; return View(model); } TempData["tipo"] = "alert alert-warning"; TempData["message"] = "No ha seleccionado una reserva."; return RedirectToAction("BuscaReserva"); }
public ActionResult VenderEntrada(VenderEntradaModel model) { if (Session["CarritoItemVentas"] != null) { if (validacionVenta(model)) { if (verificaSiCompra(model.idFunciones, model.Dni)) { int idVenta = 0; DateTime hoy = DateTime.Now; CuentaUsuario cuenta = new CuentaUsuario(); using (var context = new inf245netsoft()) { try { List<CarritoItem> carrito = (List<CarritoItem>)Session["CarritoItemVentas"]; Ventas ve = new Ventas(); int cantidadEntradasTotales = carrito.Sum(c => c.cantidad); try {//si es un usuario registrado busco la cuenta y la asigno luego a la venta cuenta = context.CuentaUsuario.Where(c => c.codDoc.CompareTo(model.Dni) == 0).First(); } catch (Exception ex) {//si no es un cliente registrado guardo la venta como si fuera anonima cuenta = context.CuentaUsuario.Find(MagicHelpers.AnonimoUniversal); } ve.fecha = DateTime.Now; ve.cantAsientos = cantidadEntradasTotales; //de todas maneras en la venta se registra el nombre, dni y tipo de documento del que esta comprando. ve.cliente = model.Nombre; ve.CuentaUsuario = cuenta; ve.codDoc = model.Dni; //-- ve.Estado = MagicHelpers.Compra; ve.tipoDoc = 1; ve.montoEfectivoDolares = model.MontoDolares; ve.MontoTotalSoles = model.MontoPagar; ve.montoCreditoSoles = model.MontoTar; double dolarsoles = (double)model.MontoDolares * db.TipoDeCambio.Where(c => c.estado == "Activo").ToList().Last().valor.Value / MagicHelpers.ConstanteTipoCambio; if (model.MontoEfe > dolarsoles) { ve.montoEfectivoSoles = model.MontoEfe - model.Vuelto; } else { ve.montoEfectivoSoles = model.MontoEfe; ve.montoEfectivoDolares = (dolarsoles - model.Vuelto) / (db.TipoDeCambio.Where(c => c.estado == "Activo").ToList().Last().valor.Value / MagicHelpers.ConstanteTipoCambio); } //--vendedor, guardo el correo del vendedor en la venta ve.vendedor = User.Identity.Name; // if (model.MontoTar > 0 && model.MontoEfe == 0) {//para compra solo en tarjeta ve.modalidad = "T"; } if (model.MontoEfe > 0 && model.MontoTar > 0) {//mixto ve.modalidad = "M"; } if (model.MontoTar == 0) {//solo efectivo ve.modalidad = "E"; } context.Ventas.Add(ve); try { context.SaveChanges(); idVenta = ve.codVen; } catch (DbEntityValidationException dbEx) { foreach (var validationErrors in dbEx.EntityValidationErrors) { foreach (var validationError in validationErrors.ValidationErrors) { Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage); } } } //para cada item del carrito for (int w = 0; w < carrito.Count; w++) { CarritoItem paquete = carrito[w]; //zona del evento ZonaEvento zo = context.ZonaEvento.Find(paquete.idZona); //en que perdiodo de venta estamos PeriodoVenta per = context.PeriodoVenta.Where(c => c.codEvento == paquete.idEvento && c.fechaInicio <= hoy && c.fechaFin >= hoy).ToList().First(); PrecioEvento pr = context.PrecioEvento.Where(c => c.codZonaEvento == paquete.idZona && c.codPeriodoVenta == per.idPerVent).ToList().First(); //la venta x funcion requerida VentasXFuncion vf = new VentasXFuncion(); //si ya existe una venta x funcion de esta venta if (context.VentasXFuncion.Any(c => c.codVen == ve.codVen && c.codFuncion == paquete.idFuncion)) { vf = context.VentasXFuncion.Where(c => c.codVen == ve.codVen && c.codFuncion == paquete.idFuncion).First(); vf.cantEntradas += paquete.cantidad; vf.subtotal += paquete.cantidad * pr.precio; float? porcDescuento = 0; //default es para pago mixto vf.descuento += (int)model.Descuento; //vuelvo a modificar los descuentos si es tarjeta o efectivo if (ve.modalidad == "T") { if (model.idPromociones[w] != -1) { int idPromocion = model.idPromociones[w]; Promociones promocion = context.Promociones.Where(c => c.codPromo == idPromocion && c.codEvento == paquete.idEvento).First(); porcDescuento = promocion.descuento / 100; } vf.descuento = (int?)(vf.subtotal * porcDescuento); } if (ve.modalidad == "E") { vf.descuento = (int?)model.Descuento; } vf.total += vf.subtotal - vf.descuento; } else { //creo una nueva ventaxfuncion vf.codVen = ve.codVen; vf.cantEntradas = paquete.cantidad; vf.codFuncion = paquete.idFuncion; vf.Ventas = ve; vf.Funcion = context.Funcion.Find(paquete.idFuncion); vf.hanEntregado = false; vf.subtotal = paquete.cantidad * pr.precio; float? porcDescuento = 0; //default es para pago mixto vf.descuento = (int)model.Descuento; //solo registro la promocion si es una venta solo con tarjeta o solo con efectivo if (ve.modalidad == "T") { if (model.idPromociones[w] != -1) { int idPromocion = model.idPromociones[w]; Promociones promocion = context.Promociones.Where(c => c.codPromo == idPromocion && c.codEvento == paquete.idEvento).First(); porcDescuento = promocion.descuento / 100; } vf.descuento = (int?)(vf.subtotal * porcDescuento); } if (ve.modalidad == "E") { vf.descuento = (int?)model.Descuento; } vf.total = vf.subtotal - vf.descuento; context.VentasXFuncion.Add(vf); } context.SaveChanges(); //detalle de venta DetalleVenta dt = new DetalleVenta(); dt.cantEntradas = paquete.cantidad; dt.codFuncion = paquete.idFuncion; dt.codPrecE = pr.codPrecioEvento; dt.total = vf.total; dt.entradasDev = 0; dt.descTot = vf.descuento; dt.codVen = vf.codVen; context.DetalleVenta.Add(dt); if (paquete.filas != null && paquete.filas.Count > 0) paquete.tieneAsientos = true; //actualizo el mondo adeudado Eventos evento = context.Eventos.Find(paquete.idEvento); evento.monto_adeudado += (double)(paquete.cantidad * pr.precio * evento.porccomision / 100 + evento.montoFijoVentaEntrada); context.SaveChanges(); //si tengo asientos, actualizo los asientos a ocupado if (paquete.tieneAsientos) { for (int i = 0; i < paquete.cantidad; i++) { int col = paquete.columnas[i]; int fil = paquete.filas[i]; List<Asientos> listasiento = context.Asientos.Where(x => x.codZona == paquete.idZona && x.fila == fil && x.columna == col).ToList(); AsientosXFuncion actAsiento = context.AsientosXFuncion.Find(listasiento.First().codAsiento, paquete.idFuncion); if (actAsiento.estado != "libre") { throw new OptimisticConcurrencyException(); } actAsiento.estado = MagicHelpers.Ocupado; actAsiento.codDetalleVenta = dt.codDetalleVenta; actAsiento.PrecioPagado = pr.precio; } } else { //si no tiene asientos es una zonax funcion ZonaxFuncion ZXF = context.ZonaxFuncion.Find(paquete.idFuncion, paquete.idZona); if (ZXF.cantLibres < paquete.cantidad) { //genero una exception para detener la compra? throw new OptimisticConcurrencyException(); } else ZXF.cantLibres -= paquete.cantidad; } try { CuentaUsuario dbCuenta = context.CuentaUsuario.Find(cuenta.correo); dbCuenta.puntos += context.Eventos.Find(paquete.idEvento).puntosAlCliente * paquete.cantidad; } catch (Exception ex) { //usuario anonimo } } context.SaveChanges(); } catch (OptimisticConcurrencyException ex) { //hubo un problema con la compra, remuevo el item if (idVenta != 0) { context.Dispose(); Ventas remover = db.Ventas.Find(idVenta); db.Ventas.Remove(remover); db.SaveChanges(); } TempData["tipo"] = "alert alert-warning"; TempData["message"] = "Error en la venta."; return RedirectToAction("CarritoVentas"); } } TempData["tipo"] = "alert alert-success"; TempData["message"] = "Venta Realizada"; //si toda la compra se procesa de manera correcta eliminamos los session Session["CarritoItemVentas"] = null; Session["CarritoVendedor"] = null; //enviamos un correo al cliente que lo compro - no funcionara con un anonimo EmailController.EnviarCorreoCompra(idVenta, cuenta.correo); return RedirectToAction("Index2", "Home"); } } //saco el carrito del session List<CarritoItem> carrito2 = (List<CarritoItem>)Session["CarritoItemVentas"]; //lista de bancos List<Banco> bancos = db.Banco.ToList(); ViewBag.Bancos = new SelectList(bancos, "codigo", "nombre"); //lista de tarjetas List<TipoTarjeta> tipoTarjeta = db.TipoTarjeta.ToList(); ViewBag.TipoTarjeta = new SelectList(tipoTarjeta, "idTipoTar", "nombre"); List<Promociones> listaPromociones = new List<Promociones>(); List<Promociones> listaPromocionesEfectivo = new List<Promociones>(); double total = 0; double descuento = 0; double? descuentoE = 0; foreach (CarritoItem item in carrito2) { total += item.precio; Promociones promocion = PromocionController.CalculaMejorPromocionTarjeta(item.idEvento, bancos.First().codigo, tipoTarjeta.First().idTipoTar); if (promocion == null) { Promociones dummy = new Promociones(); dummy.codPromo = -1; listaPromociones.Add(dummy); } else { descuento += item.precio * promocion.descuento.Value / 100; listaPromociones.Add(promocion); } promocion = PromocionController.CalculaMejorPromocionEfectivo(item.idEvento); if (promocion != null) { if (item.cantidad >= promocion.cantAdq) { descuentoE += 1.0 * promocion.cantAdq * (item.precio / item.cantidad) * (1 - (promocion.cantComp.Value * 1.0 / promocion.cantAdq.Value)); listaPromocionesEfectivo.Add(promocion); } else { Promociones dummy = new Promociones(); dummy.codPromo = -1; listaPromocionesEfectivo.Add(dummy); } } else { Promociones dummy = new Promociones(); dummy.codPromo = -1; listaPromocionesEfectivo.Add(dummy); } } ViewBag.PromocionesEfectivo = listaPromocionesEfectivo; ViewBag.Promociones = listaPromociones; ViewBag.Funciones = model.idFunciones; ViewBag.Total = total; //efectivo if (model.MontoTar == 0 && model.MontoEfe >= 0 && model.MontoDolares >= 0) { ViewBag.DescuentoE = model.Descuento; ViewBag.MontoPagarE = model.MontoPagar; ViewBag.MontoSE = model.MontoEfe; ViewBag.MontoDE = model.MontoDolares; ViewBag.VueltoE = model.Vuelto; //tarjeta ViewBag.Descuento = descuento; ViewBag.MontoPagarT = total - descuento; ViewBag.MontoTarjeta = total - descuento; //mixto ViewBag.MontoPagarM = total; ViewBag.MontoSM = 0; ViewBag.MontoDM = 0; ViewBag.MontoTarjetaM = 0; ViewBag.VueltoM = 0; model.modalidad = 1; } //tarjeta if (model.MontoTar > 0 && model.MontoEfe == 0 && model.MontoDolares == 0) { ViewBag.DescuentoE = descuentoE; ViewBag.MontoPagarE = total - descuentoE; ViewBag.MontoSE = 0; ViewBag.MontoDE = 0; ViewBag.VueltoE = 0; //tarjeta ViewBag.Descuento = model.Descuento; ViewBag.MontoPagarT = model.MontoPagar; ViewBag.MontoTarjeta = model.MontoTar; //mixto ViewBag.MontoPagarM = total; ViewBag.MontoSM = 0; ViewBag.MontoDM = 0; ViewBag.MontoTarjetaM = 0; ViewBag.VueltoM = 0; model.modalidad = 2; } if (model.MontoTar >= 0 && model.MontoEfe >= 0 && model.MontoDolares >= 0) { ViewBag.DescuentoE = descuentoE; ViewBag.MontoPagarE = total - descuentoE; ViewBag.MontoSE = 0; ViewBag.MontoDE = 0; ViewBag.VueltoE = 0; //tarjeta ViewBag.Descuento = descuento; ViewBag.MontoPagarT = total - descuento; ViewBag.MontoTarjeta = total - descuento; //mixto ViewBag.MontoPagarM = model.MontoPagar; ViewBag.MontoSM = model.MontoEfe; ViewBag.MontoDM = model.MontoDolares; ViewBag.MontoTarjetaM = model.MontoTar; ViewBag.VueltoM = model.Vuelto; model.modalidad = 3; } ViewBag.Mes = Fechas.Mes(); ViewBag.AnVen = Fechas.Anio(); return View(model); } TempData["tipo"] = "alert alert-warning"; TempData["message"] = "No hay items en el carrito."; return RedirectToAction("CarritoVentas"); }
private bool validacionVenta(VenderEntradaModel model) { bool indicador = true; Politicas montoMinTarjeta = db.Politicas.Find(3); double montoMin = montoMinTarjeta.valor.Value; //si se utiliza tarjeta, tiene que ser mayor al monto minimo segun las politicas if (model.MontoTar == 0) return true; if (model.MontoTar >= montoMin) { //usa tarjeta, verificar que hayan datos de la tarjeta if (String.IsNullOrEmpty(model.NumeroTarjeta)) {//reviso si no hay una tarjeta seleccionadad ModelState.AddModelError("NumeroTarjeta", "El campo Nro. de Tarjeta: es obligatorio."); indicador = false; } else {//si hay una tarjeta tengo que ver si pertenece al banco ComprarEntradaModel compra = new ComprarEntradaModel(); compra.idBanco = (int)model.idBanco; compra.NumeroTarjeta = model.NumeroTarjeta; compra.Mes = model.Mes; compra.AnioVen = model.AnioVen; indicador = ValidacionesCompra(compra); } if (String.IsNullOrEmpty(model.CodCcv)) {//reviso si no hay codigo ccv ModelState.AddModelError("CodCcv", "El campo CCV: es obligatorio."); indicador = false; } } else { TempData["tipo"] = "alert alert-warning"; TempData["message"] = "Se debe pagar como mínimo " + montoMin + " soles."; indicador = false; } return indicador; }
public ActionResult VenderEntrada() { if (Session["CarritoItemVentas"] != null) { //saco el carrito del session List<CarritoItem> carrito = (List<CarritoItem>)Session["CarritoItemVentas"]; if (carrito.Count != 0) { //lista de bancos List<Banco> bancos = db.Banco.ToList(); ViewBag.Bancos = new SelectList(bancos, "codigo", "nombre"); //lista de tarjetas List<TipoTarjeta> tipoTarjeta = db.TipoTarjeta.ToList(); ViewBag.TipoTarjeta = new SelectList(tipoTarjeta, "idTipoTar", "nombre"); List<Promociones> listaPromociones = new List<Promociones>(); List<Promociones> listaPromocionesEfectivo = new List<Promociones>(); List<int> idFunciones = new List<int>(); double total = 0; double? descuento = 0; double? descuentoE = 0; foreach (CarritoItem item in carrito) { idFunciones.Add(item.idFuncion); total += item.precio; Promociones promocion = PromocionController.CalculaMejorPromocionTarjeta(item.idEvento, bancos.First().codigo, tipoTarjeta.First().idTipoTar); if (promocion == null) { Promociones dummy = new Promociones(); dummy.codPromo = -1; listaPromociones.Add(dummy); } else { descuento += item.precio * promocion.descuento.Value / 100; listaPromociones.Add(promocion); } promocion = PromocionController.CalculaMejorPromocionEfectivo(item.idEvento); if (promocion != null) { if (item.cantidad >= promocion.cantAdq) { descuentoE += 1.0 * promocion.cantAdq * (item.precio / item.cantidad) * (1 - (promocion.cantComp.Value * 1.0 / promocion.cantAdq.Value)); listaPromocionesEfectivo.Add(promocion); } else { Promociones dummy = new Promociones(); dummy.codPromo = -1; listaPromocionesEfectivo.Add(dummy); } } else { Promociones dummy = new Promociones(); dummy.codPromo = -1; listaPromocionesEfectivo.Add(dummy); } } ViewBag.Total = total; ViewBag.Funciones = idFunciones; //efectivo ViewBag.DescuentoE = descuentoE; ViewBag.MontoPagarE = total - descuentoE; ViewBag.MontoSE = 0; ViewBag.MontoDE = 0; ViewBag.VueltoE = 0; //tarjeta ViewBag.Descuento = descuento; ViewBag.MontoPagarT = total - descuento; ViewBag.MontoTarjeta = total - descuento; //mixto ViewBag.MontoPagarM = total; ViewBag.MontoSM = 0; ViewBag.MontoDM = 0; ViewBag.MontoTarjetaM = 0; ViewBag.VueltoM = 0; ViewBag.PromocionesEfectivo = listaPromocionesEfectivo; ViewBag.Promociones = listaPromociones; ViewBag.Mes = Fechas.Mes(); ViewBag.AnVen = Fechas.Anio(); VenderEntradaModel model = new VenderEntradaModel(); model.modalidad = 1; return View(model); } } TempData["tipo"] = "alert alert-warning"; TempData["message"] = "No hay items en el carrito."; return RedirectToAction("CarritoVentas"); }