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