Modificado VentanaPago(agregue metodos de pago)
This commit is contained in:
parent
40188bfb53
commit
ee1b46cadf
src/main/java/org/example/saladeconciertos
|
@ -1,14 +1,18 @@
|
||||||
package org.example.saladeconciertos;
|
package org.example.saladeconciertos;
|
||||||
|
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.*;
|
||||||
import javafx.scene.layout.VBox;
|
import javafx.scene.layout.VBox;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
import javafx.geometry.Insets;
|
import javafx.geometry.Insets;
|
||||||
import javafx.geometry.Pos;
|
import javafx.geometry.Pos;
|
||||||
|
import javafx.scene.layout.Priority;
|
||||||
|
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";
|
||||||
|
@ -28,7 +32,7 @@ public class VentanaPago {
|
||||||
VBox paymentLayout = new VBox(20);
|
VBox paymentLayout = new VBox(20);
|
||||||
paymentLayout.setPadding(new Insets(20));
|
paymentLayout.setPadding(new Insets(20));
|
||||||
paymentLayout.getStyleClass().add("payment-window"); // Aplicar clase CSS
|
paymentLayout.getStyleClass().add("payment-window"); // Aplicar clase CSS
|
||||||
paymentLayout.setAlignment(Pos.CENTER);
|
paymentLayout.setAlignment(Pos.TOP_CENTER);
|
||||||
|
|
||||||
// Título de la ventana
|
// Título de la ventana
|
||||||
Label titleLabel = new Label("Confirmar Compra");
|
Label titleLabel = new Label("Confirmar Compra");
|
||||||
|
@ -47,33 +51,133 @@ public class VentanaPago {
|
||||||
nameField.setPromptText("Nombre del cliente");
|
nameField.setPromptText("Nombre del cliente");
|
||||||
nameField.setMaxWidth(200);
|
nameField.setMaxWidth(200);
|
||||||
|
|
||||||
|
// Selección de método de pago
|
||||||
|
ChoiceBox<String> paymentMethod = new ChoiceBox<>();
|
||||||
|
paymentMethod.getItems().addAll("Tarjeta de Crédito/Débito", "PayPal");
|
||||||
|
paymentMethod.setValue(null); // No seleccionar ningún método por defecto
|
||||||
|
|
||||||
|
// Campos para tarjeta de crédito/débito
|
||||||
|
VBox cardFields = new VBox(10);
|
||||||
|
cardFields.setAlignment(Pos.TOP_CENTER); // Centrar los campos
|
||||||
|
TextField cardNumberField = new TextField();
|
||||||
|
cardNumberField.setPromptText("Número de tarjeta (13 dígitos)");
|
||||||
|
cardNumberField.setMaxWidth(200);
|
||||||
|
|
||||||
|
TextField expiryDateField = new TextField();
|
||||||
|
expiryDateField.setPromptText("MM/YY");
|
||||||
|
expiryDateField.setMaxWidth(200);
|
||||||
|
|
||||||
|
TextField cvvField = new TextField();
|
||||||
|
cvvField.setPromptText("CVV");
|
||||||
|
cvvField.setMaxWidth(200);
|
||||||
|
|
||||||
|
cardFields.getChildren().addAll(cardNumberField, expiryDateField, cvvField);
|
||||||
|
cardFields.setVisible(false); // Ocultar al inicio
|
||||||
|
|
||||||
|
// Campo para PayPal
|
||||||
|
VBox paypalFields = new VBox(10);
|
||||||
|
paypalFields.setAlignment(Pos.TOP_CENTER); // Centrar los campos
|
||||||
|
TextField emailField = new TextField();
|
||||||
|
emailField.setPromptText("Correo electrónico de PayPal");
|
||||||
|
emailField.setMaxWidth(200);
|
||||||
|
|
||||||
|
paypalFields.getChildren().add(emailField);
|
||||||
|
paypalFields.setVisible(false); // Ocultar al inicio
|
||||||
|
|
||||||
// Botón para confirmar el pago
|
// Botón para confirmar el pago
|
||||||
Button payButton = new Button("Pagar");
|
Button payButton = new Button("Pagar");
|
||||||
payButton.getStyleClass().add("button"); // Aplicar clase CSS
|
payButton.getStyleClass().add("button"); // Aplicar clase CSS
|
||||||
|
payButton.setDisable(true); // Deshabilitar al inicio
|
||||||
|
|
||||||
|
// Contenedor dinámico para campos y botón
|
||||||
|
VBox dynamicContainer = new VBox(10);
|
||||||
|
dynamicContainer.setAlignment(Pos.TOP_CENTER); // Centrar el contenido
|
||||||
|
|
||||||
|
// Mostrar u ocultar campos según el método de pago seleccionado
|
||||||
|
paymentMethod.getSelectionModel().selectedItemProperty().addListener((obs, oldVal, newVal) -> {
|
||||||
|
boolean isCard = newVal != null && newVal.equals("Tarjeta de Crédito/Débito");
|
||||||
|
boolean isPayPal = newVal != null && newVal.equals("PayPal");
|
||||||
|
|
||||||
|
cardFields.setVisible(isCard);
|
||||||
|
paypalFields.setVisible(isPayPal);
|
||||||
|
|
||||||
|
// Habilitar el botón de pago si se selecciona un método
|
||||||
|
payButton.setDisable(newVal == null);
|
||||||
|
|
||||||
|
// Actualizar el contenedor dinámico
|
||||||
|
dynamicContainer.getChildren().clear();
|
||||||
|
if (isCard) {
|
||||||
|
dynamicContainer.getChildren().addAll(cardFields, payButton);
|
||||||
|
} else if (isPayPal) {
|
||||||
|
dynamicContainer.getChildren().addAll(paypalFields, payButton);
|
||||||
|
} else {
|
||||||
|
dynamicContainer.getChildren().add(payButton);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
payButton.setOnAction(e -> {
|
payButton.setOnAction(e -> {
|
||||||
String clientName = nameField.getText();
|
String clientName = nameField.getText();
|
||||||
if (clientName.isEmpty()) {
|
if (clientName.isEmpty()) {
|
||||||
mostrarAlerta("Advertencia", "Nombre del cliente vacío", "Por favor, ingrese el nombre del cliente.");
|
mostrarAlerta("Advertencia", "Nombre del cliente vacío", "Por favor, ingrese el nombre del cliente.");
|
||||||
} else {
|
return;
|
||||||
generarTicket(clientName, selectedSeats, seatPrices, eventName, eventDate, totalPrice);
|
|
||||||
paymentStage.close();
|
|
||||||
|
|
||||||
// Refrescar la interfaz de VentaBoletos después de cerrar la ventana de pago
|
|
||||||
ventaBoletos.refrescarInterfaz();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String method = paymentMethod.getValue();
|
||||||
|
if (method.equals("Tarjeta de Crédito/Débito")) {
|
||||||
|
String cardNumber = cardNumberField.getText();
|
||||||
|
String expiryDate = expiryDateField.getText();
|
||||||
|
String cvv = cvvField.getText();
|
||||||
|
|
||||||
|
if (!validarTarjeta(cardNumber, expiryDate, cvv)) {
|
||||||
|
mostrarAlerta("Error", "Datos de tarjeta inválidos", "Por favor, ingrese un número de tarjeta válido (13 dígitos), fecha (MM/YY) y CVV.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else if (method.equals("PayPal")) {
|
||||||
|
String email = emailField.getText();
|
||||||
|
if (!validarEmail(email)) {
|
||||||
|
mostrarAlerta("Error", "Correo inválido", "Por favor, ingrese un correo electrónico válido.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Si todo está correcto, generar el ticket
|
||||||
|
generarTicket(clientName, selectedSeats, seatPrices, eventName, eventDate, totalPrice);
|
||||||
|
paymentStage.close();
|
||||||
|
ventaBoletos.refrescarInterfaz();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Agregar elementos al layout
|
// Agregar elementos al layout
|
||||||
paymentLayout.getChildren().addAll(titleLabel, eventLabel, dateLabel, totalLabel, new Label("Nombre del cliente:"), nameField, payButton);
|
paymentLayout.getChildren().addAll(
|
||||||
|
titleLabel, eventLabel, dateLabel, totalLabel,
|
||||||
|
new Label("Nombre del cliente:"), nameField,
|
||||||
|
new Label("Método de pago:"), paymentMethod,
|
||||||
|
dynamicContainer
|
||||||
|
);
|
||||||
|
|
||||||
|
// Envolver el layout en un ScrollPane
|
||||||
|
ScrollPane scrollPane = new ScrollPane(paymentLayout);
|
||||||
|
scrollPane.setFitToWidth(true);
|
||||||
|
scrollPane.setFitToHeight(true);
|
||||||
|
|
||||||
// Configurar la escena y mostrar la ventana
|
// Configurar la escena y mostrar la ventana
|
||||||
Scene paymentScene = new Scene(paymentLayout, 400, 300);
|
Scene paymentScene = new Scene(scrollPane, 400, 450);
|
||||||
paymentScene.getStylesheets().add(getClass().getResource("/styles.css").toExternalForm()); // Aplicar CSS
|
paymentScene.getStylesheets().add(getClass().getResource("/styles.css").toExternalForm()); // Aplicar CSS
|
||||||
paymentStage.setScene(paymentScene);
|
paymentStage.setScene(paymentScene);
|
||||||
paymentStage.show();
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
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) {
|
||||||
StringBuilder ticketDetails = new StringBuilder();
|
StringBuilder ticketDetails = new StringBuilder();
|
||||||
ticketDetails.append("Evento: ").append(eventName).append("\n");
|
ticketDetails.append("Evento: ").append(eventName).append("\n");
|
||||||
|
|
Loading…
Reference in New Issue