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.fxml;
|
||||
requires java.sql;
|
||||
requires org.apache.pdfbox;
|
||||
|
||||
|
||||
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.scene.layout.Priority;
|
||||
import javafx.scene.layout.Region;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class VentanaPago {
|
||||
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
|
||||
ScrollPane scrollPane = new ScrollPane(paymentLayout);
|
||||
scrollPane.setFitToWidth(true);
|
||||
scrollPane.setFitToHeight(true);
|
||||
scrollPane.setFitToWidth(true); // Ajustar el ancho del contenido al ScrollPane
|
||||
scrollPane.setFitToHeight(true); // Ajustar la altura del contenido al ScrollPane
|
||||
|
||||
// Configurar la escena y mostrar la ventana
|
||||
Scene paymentScene = new Scene(scrollPane, 400, 450);
|
||||
|
@ -166,19 +164,18 @@ public class VentanaPago {
|
|||
paymentStage.show();
|
||||
}
|
||||
|
||||
// Método para validar tarjeta
|
||||
private boolean validarTarjeta(String cardNumber, String expiryDate, String cvv) {
|
||||
return cardNumber.matches("\\d{13}") && // 13 dígitos
|
||||
expiryDate.matches("(0[1-9]|1[0-2])/[0-9]{2}") && // MM/YY
|
||||
cvv.matches("\\d{3}"); // 3 dígitos
|
||||
}
|
||||
|
||||
// Método para validar 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) {
|
||||
// Mostrar el ticket en una ventana (como antes)
|
||||
StringBuilder ticketDetails = new StringBuilder();
|
||||
ticketDetails.append("Evento: ").append(eventName).append("\n");
|
||||
ticketDetails.append("Fecha: ").append(eventDate).append("\n");
|
||||
|
@ -191,6 +188,10 @@ public class VentanaPago {
|
|||
|
||||
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
|
||||
actualizarEstadoBoletos(selectedSeats, 1); // Cambia el idevento según corresponda
|
||||
}
|
||||
|
|
Binary file not shown.
After ![]() (image error) Size: 703 B |
Loading…
Reference in New Issue