40356-vm/core/forms.py
2026-06-30 00:27:36 +00:00

60 lines
2.6 KiB
Python

from django import forms
from .models import PaymentConfirmation
class PaymentConfirmationForm(forms.ModelForm):
class Meta:
model = PaymentConfirmation
fields = [
"product",
"customer_name",
"customer_phone",
"customer_email",
"amount",
"method",
"reference",
"note",
"receipt",
]
widgets = {
"product": forms.Select(attrs={"class": "form-select"}),
"customer_name": forms.TextInput(attrs={"class": "form-control", "placeholder": "Tu nombre o negocio"}),
"customer_phone": forms.TextInput(attrs={"class": "form-control", "placeholder": "+53..."}),
"customer_email": forms.EmailInput(attrs={"class": "form-control", "placeholder": "correo@ejemplo.com"}),
"amount": forms.NumberInput(attrs={"class": "form-control", "min": "1", "step": "0.01", "placeholder": "Monto pagado"}),
"method": forms.Select(attrs={"class": "form-select"}),
"reference": forms.TextInput(attrs={"class": "form-control", "placeholder": "No. operación / referencia"}),
"note": forms.Textarea(attrs={"class": "form-control", "rows": 4, "placeholder": "Detalles útiles: fecha, banco, servicio solicitado..."}),
"receipt": forms.ClearableFileInput(attrs={"class": "form-control"}),
}
labels = {
"product": "Producto o servicio",
"customer_name": "Nombre",
"customer_phone": "Teléfono / WhatsApp",
"customer_email": "Correo (opcional)",
"amount": "Monto pagado",
"method": "Método de pago",
"reference": "Referencia de pago",
"note": "Nota para el equipo",
"receipt": "Comprobante (opcional)",
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["product"].queryset = self.fields["product"].queryset.filter(is_active=True).select_related("category")
self.fields["product"].empty_label = "Selecciona un servicio"
def clean_customer_phone(self):
phone = self.cleaned_data["customer_phone"].strip()
digits = [char for char in phone if char.isdigit()]
if len(digits) < 8:
raise forms.ValidationError("Escribe un teléfono válido para poder contactarte.")
return phone
def clean_reference(self):
reference = self.cleaned_data["reference"].strip()
if len(reference) < 4:
raise forms.ValidationError("La referencia debe tener al menos 4 caracteres.")
return reference