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;
|
||||
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.*;
|
||||
import javafx.scene.layout.VBox;
|
||||
import javafx.stage.Stage;
|
||||
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";
|
||||
|
@ -28,7 +32,7 @@ public class VentanaPago {
|
|||
VBox paymentLayout = new VBox(20);
|
||||
paymentLayout.setPadding(new Insets(20));
|
||||
paymentLayout.getStyleClass().add("payment-window"); // Aplicar clase CSS
|
||||
paymentLayout.setAlignment(Pos.CENTER);
|
||||
paymentLayout.setAlignment(Pos.TOP_CENTER);
|
||||
|
||||
// Título de la ventana
|
||||
Label titleLabel = new Label("Confirmar Compra");
|
||||
|
@ -47,33 +51,133 @@ public class VentanaPago {
|
|||
nameField.setPromptText("Nombre del cliente");
|
||||
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
|
||||
Button payButton = new Button("Pagar");
|
||||
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 -> {
|
||||
String clientName = nameField.getText();
|
||||
if (clientName.isEmpty()) {
|
||||
mostrarAlerta("Advertencia", "Nombre del cliente vacío", "Por favor, ingrese el nombre del cliente.");
|
||||
} else {
|
||||
generarTicket(clientName, selectedSeats, seatPrices, eventName, eventDate, totalPrice);
|
||||
paymentStage.close();
|
||||
|
||||
// Refrescar la interfaz de VentaBoletos después de cerrar la ventana de pago
|
||||
ventaBoletos.refrescarInterfaz();
|
||||
return;
|
||||
}
|
||||
|
||||
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
|
||||
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
|
||||
Scene paymentScene = new Scene(paymentLayout, 400, 300);
|
||||
Scene paymentScene = new Scene(scrollPane, 400, 450);
|
||||
paymentScene.getStylesheets().add(getClass().getResource("/styles.css").toExternalForm()); // Aplicar CSS
|
||||
paymentStage.setScene(paymentScene);
|
||||
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) {
|
||||
StringBuilder ticketDetails = new StringBuilder();
|
||||
ticketDetails.append("Evento: ").append(eventName).append("\n");
|
||||
|
|
Loading…
Reference in New Issue