Agregue las opciones de pago y el generador de pdf
This commit is contained in:
parent
a891a333c6
commit
4d91e64c2e
src/main
java
resources
|
@ -2,6 +2,7 @@ module org.example.saladeconciertos {
|
||||||
requires javafx.controls;
|
requires javafx.controls;
|
||||||
requires javafx.fxml;
|
requires javafx.fxml;
|
||||||
requires java.sql;
|
requires java.sql;
|
||||||
|
requires org.apache.pdfbox;
|
||||||
|
|
||||||
|
|
||||||
opens org.example.saladeconciertos to javafx.fxml;
|
opens org.example.saladeconciertos to javafx.fxml;
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
package org.example.saladeconciertos;
|
||||||
|
|
||||||
|
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||||
|
import org.apache.pdfbox.pdmodel.PDPage;
|
||||||
|
import org.apache.pdfbox.pdmodel.PDPageContentStream;
|
||||||
|
import org.apache.pdfbox.pdmodel.font.Standard14Fonts;
|
||||||
|
import org.apache.pdfbox.pdmodel.font.PDType1Font;
|
||||||
|
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class PDFGenerator {
|
||||||
|
|
||||||
|
public static void generarPDF(String eventName, String eventDate, String clientName, double totalPrice, String qrImagePath) {
|
||||||
|
// Ruta donde se guardará el PDF
|
||||||
|
String downloadsPath = System.getProperty("user.home") + "/Downloads/";
|
||||||
|
String fileName = "Ticket_" + eventName.replace(" ", "_") + ".pdf";
|
||||||
|
String pdfPath = downloadsPath + fileName;
|
||||||
|
|
||||||
|
try (PDDocument document = new PDDocument()) {
|
||||||
|
// Crear una nueva página
|
||||||
|
PDPage page = new PDPage();
|
||||||
|
document.addPage(page);
|
||||||
|
|
||||||
|
// Crear un flujo de contenido para la página
|
||||||
|
try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
|
||||||
|
// Configurar la fuente y el tamaño (usando Standard14Fonts)
|
||||||
|
PDType1Font font = new PDType1Font(Standard14Fonts.FontName.HELVETICA_BOLD);
|
||||||
|
contentStream.setFont(font, 12);
|
||||||
|
|
||||||
|
// Escribir los detalles del ticket
|
||||||
|
contentStream.beginText();
|
||||||
|
contentStream.newLineAtOffset(50, 700);
|
||||||
|
contentStream.showText("Evento: " + eventName);
|
||||||
|
contentStream.newLineAtOffset(0, -20);
|
||||||
|
contentStream.showText("Fecha: " + eventDate);
|
||||||
|
contentStream.newLineAtOffset(0, -20);
|
||||||
|
contentStream.showText("Cliente: " + clientName);
|
||||||
|
contentStream.newLineAtOffset(0, -20);
|
||||||
|
contentStream.showText("Total: $" + String.format("%.2f", totalPrice));
|
||||||
|
contentStream.endText();
|
||||||
|
|
||||||
|
// Agregar la imagen del código QR (si existe)
|
||||||
|
if (qrImagePath != null && !qrImagePath.isEmpty()) {
|
||||||
|
PDImageXObject qrImage = PDImageXObject.createFromFile(qrImagePath, document);
|
||||||
|
contentStream.drawImage(qrImage, 50, 500, 150, 150); // Ajusta la posición y el tamaño de la imagen
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Guardar el PDF en la carpeta de descargas
|
||||||
|
document.save(pdfPath);
|
||||||
|
System.out.println("Ticket generado y guardado en: " + pdfPath);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
System.out.println("Error al generar el PDF del ticket.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,11 +8,9 @@ import javafx.geometry.Insets;
|
||||||
import javafx.geometry.Pos;
|
import javafx.geometry.Pos;
|
||||||
import javafx.scene.layout.Priority;
|
import javafx.scene.layout.Priority;
|
||||||
import javafx.scene.layout.Region;
|
import javafx.scene.layout.Region;
|
||||||
|
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
public class VentanaPago {
|
public class VentanaPago {
|
||||||
private static final String DB_URL = "jdbc:mysql://sql10.freesqldatabase.com:3306/sql10766655";
|
private static final String DB_URL = "jdbc:mysql://sql10.freesqldatabase.com:3306/sql10766655";
|
||||||
|
@ -156,8 +154,8 @@ public class VentanaPago {
|
||||||
|
|
||||||
// Envolver el layout en un ScrollPane
|
// Envolver el layout en un ScrollPane
|
||||||
ScrollPane scrollPane = new ScrollPane(paymentLayout);
|
ScrollPane scrollPane = new ScrollPane(paymentLayout);
|
||||||
scrollPane.setFitToWidth(true);
|
scrollPane.setFitToWidth(true); // Ajustar el ancho del contenido al ScrollPane
|
||||||
scrollPane.setFitToHeight(true);
|
scrollPane.setFitToHeight(true); // Ajustar la altura del contenido al ScrollPane
|
||||||
|
|
||||||
// Configurar la escena y mostrar la ventana
|
// Configurar la escena y mostrar la ventana
|
||||||
Scene paymentScene = new Scene(scrollPane, 400, 450);
|
Scene paymentScene = new Scene(scrollPane, 400, 450);
|
||||||
|
@ -166,19 +164,18 @@ public class VentanaPago {
|
||||||
paymentStage.show();
|
paymentStage.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Método para validar tarjeta
|
|
||||||
private boolean validarTarjeta(String cardNumber, String expiryDate, String cvv) {
|
private boolean validarTarjeta(String cardNumber, String expiryDate, String cvv) {
|
||||||
return cardNumber.matches("\\d{13}") && // 13 dígitos
|
return cardNumber.matches("\\d{13}") && // 13 dígitos
|
||||||
expiryDate.matches("(0[1-9]|1[0-2])/[0-9]{2}") && // MM/YY
|
expiryDate.matches("(0[1-9]|1[0-2])/[0-9]{2}") && // MM/YY
|
||||||
cvv.matches("\\d{3}"); // 3 dígitos
|
cvv.matches("\\d{3}"); // 3 dígitos
|
||||||
}
|
}
|
||||||
|
|
||||||
// Método para validar email
|
|
||||||
private boolean validarEmail(String email) {
|
private boolean validarEmail(String email) {
|
||||||
return Pattern.compile("^[A-Za-z0-9+_.-]+@(.+)$").matcher(email).matches();
|
return email.matches("^[A-Za-z0-9+_.-]+@(.+)$"); // Validación básica de correo
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generarTicket(String clientName, List<Integer> selectedSeats, Map<Integer, Double> seatPrices, String eventName, String eventDate, double totalPrice) {
|
private void generarTicket(String clientName, List<Integer> selectedSeats, Map<Integer, Double> seatPrices, String eventName, String eventDate, double totalPrice) {
|
||||||
|
// Mostrar el ticket en una ventana (como antes)
|
||||||
StringBuilder ticketDetails = new StringBuilder();
|
StringBuilder ticketDetails = new StringBuilder();
|
||||||
ticketDetails.append("Evento: ").append(eventName).append("\n");
|
ticketDetails.append("Evento: ").append(eventName).append("\n");
|
||||||
ticketDetails.append("Fecha: ").append(eventDate).append("\n");
|
ticketDetails.append("Fecha: ").append(eventDate).append("\n");
|
||||||
|
@ -191,6 +188,10 @@ public class VentanaPago {
|
||||||
|
|
||||||
mostrarAlerta("Ticket Generado", "Detalles del Ticket", ticketDetails.toString());
|
mostrarAlerta("Ticket Generado", "Detalles del Ticket", ticketDetails.toString());
|
||||||
|
|
||||||
|
// Generar el PDF del ticket usando la clase PDFGenerator
|
||||||
|
String qrImagePath = "src/main/resources/qrcode.png"; // Cambia esto por la ruta de tu imagen QR
|
||||||
|
PDFGenerator.generarPDF(eventName, eventDate, clientName, totalPrice, qrImagePath);
|
||||||
|
|
||||||
// Actualizar el estado de los boletos comprados en la base de datos
|
// Actualizar el estado de los boletos comprados en la base de datos
|
||||||
actualizarEstadoBoletos(selectedSeats, 1); // Cambia el idevento según corresponda
|
actualizarEstadoBoletos(selectedSeats, 1); // Cambia el idevento según corresponda
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
After ![]() (image error) Size: 703 B |
Loading…
Reference in New Issue