示例#1
0
        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));
            }
        }