public async Task <IActionResult> Details(long id) { try { var dto = (FacturaDto)await _facturaServicio.Obtener(id); var model = new FacturaViewModel() { Id = dto.Id, ClienteId = dto.ClienteId, EmpresaId = dto.EmpresaId, FormaPagoId = dto.FormaPagoId, EstaEliminado = dto.EliminadoStr, Fecha = dto.Fecha, Total = dto.Total, TipoFactura = dto.TipoFactura, FacturaDetalles = dto.FacturaDetalles.Select(d => new FacturaDetalleViewModel() { FacturaId = d.FacturaId, EntradaId = d.EntradaId, Cantidad = d.Cantidad, SubTotal = d.SubTotal, Entrada = _helperEntrada.ObtenerEntrada(d.EntradaId).Result }), Cliente = _helperCliente.ObtenerNombreCliente(dto.ClienteId).Result, Empresa = _helperEmpresa.ObtenerEmpresa(dto.EmpresaId).Result, FormaPago = _helperFormaPago.ObtenerFormaPago(dto.FormaPagoId).Result, }; return(View(model)); } catch (Exception) { return(RedirectToAction(nameof(Index))); } }
public async Task <IActionResult> SeleccionarEntradas(PagoViewModel vm, long eventoId) { try { ViewBag.DatosInvalidos = false; ViewBag.EntradaInsuficiente = false; ViewBag.ClienteExistente = false; ViewBag.EventoId = eventoId; if (!ModelState.IsValid) { ViewBag.DatosInvalidos = true; throw new Exception("Error de validacion no controlado."); } var evento = await _helperEvento.Obtener(eventoId); if (evento.CupoDisponible < vm.Cantidad) { ViewBag.EntradaInsuficiente = true; throw new Exception("Cantidad de entradas insuficiente."); } long clienteId = vm.Cliente.Id; var clienteVm = vm.Cliente; if (!User.Identity.IsAuthenticated) { var existe = await _helperCliente.ExisteCliente(vm.Cliente.Dni, vm.Cliente.Email); if (existe) { ViewBag.ClienteExistente = true; throw new Exception("Ya existe un cliente con los datos especificados."); } var clienteDto = new ClienteDto() { Apellido = vm.Cliente.Apellido, Nombre = vm.Cliente.Nombre, Dni = vm.Cliente.Dni, Email = vm.Cliente.Email }; clienteId = await _clienteServicio.InsertarDevuelveId(clienteDto); clienteVm = await _helperCliente.Obtener(clienteId); } await _helperEvento.ActualizarCupoDisponible(evento.Id, vm.Cantidad); // guardo la forma de pago var formaPagoDto = new FormaPagoTarjetaDto() { Nombre = vm.FormaPago.Nombre, NumeroTarjeta = vm.FormaPago.NumeroTarjeta, AnioExp = vm.FormaPago.AnioExp, MesExp = vm.FormaPago.MesExp, CodigoSeguridad = vm.FormaPago.CodigoSeguridad, CodigoPostal = vm.FormaPago.CodigoPostal, DireccionFacturacion = vm.FormaPago.DireccionFacturacion }; var formaPagoId = await _formaPagoTarjetaServicio.InsertarDevuelveId(formaPagoDto); var formaPagoVm = await _helperFormaPagoTarjeta.Obtener(formaPagoId); // guardo las entradas para el cliente (for int i=0; 1 < cantidad; i++) var entradaVm = await _helperEntrada.ObtenerEntrada(vm.EntradaId); long[] entradas = new long[vm.Cantidad]; for (int i = 0; i < vm.Cantidad; i++) { var entrada = new EntradaDto() { ClienteId = clienteId, EventoId = entradaVm.EventoId, Precio = entradaVm.Precio, TipoEntradaId = entradaVm.TipoEntradaId }; var entradaId = await _entradaServicio.InsertarDevuelveId(entrada); entradas[i] = entradaId; } return(RedirectToAction("AltaFacturaRedirect", "FacturaPDF", new { clienteId = clienteVm.Id, formaPagoId = formaPagoVm.Id, entradaId = entradaVm.Id, cantidad = vm.Cantidad, entradas })); } catch (Exception) { vm.EntradasGenericas = await _helperEntrada.PoblarComboGeneric(eventoId); return(View(vm)); } }