| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- from django import forms
- from decimal import Decimal, InvalidOperation
- from .models import Movimiento, Cuenta
- class MovimientoForm(forms.ModelForm):
- monto = forms.CharField()
- class Meta:
- model = Movimiento
- fields = ['cuenta_origen', 'cuenta_destino', 'monto', 'fecha', 'descripcion']
- widgets = {
- 'cuenta_origen': forms.Select(attrs={'class': 'form-control'}),
- 'cuenta_destino': forms.Select(attrs={'class': 'form-control'}),
- 'monto': forms.TextInput(attrs={'class': 'form-control'}),
- 'descripcion': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}),
- 'fecha': forms.DateTimeInput(attrs={'type': 'datetime-local', 'class': 'form-control', 'placeholder': 'MM-DD-YYYY'}, format='%d-%m-%YT%H:%M'),
- }
- def clean(self):
- cleaned_data = super().clean()
- origen = cleaned_data.get('cuenta_origen')
- destino = cleaned_data.get('cuenta_destino')
- if origen and destino and origen == destino:
- raise forms.ValidationError("La cuenta de origen y la de destino no pueden ser la misma.")
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- self.fields['fecha'].input_formats = ['%d-%m-%YT%H:%M']
- if 'monto' in self.initial:
- self.initial['monto'] = str(self.initial['monto']).replace('.', ',')
- elif self.instance and self.instance.pk:
- self.fields['monto'].initial = str(self.instance.monto).replace('.', ',')
- def clean_monto(self):
- valor = self.cleaned_data['monto'].replace(',', '.')
- try:
- return Decimal(valor)
- except InvalidOperation:
- raise forms.ValidationError("Introduzca un número válido. Puede usar coma o punto como separador decimal.")
- class FiltroForm(forms.Form):
- # fecha_inicio = forms.DateField(required=False, widget=forms.DateInput(attrs={'type': 'date'}))
- # fecha_fin = forms.DateField(required=False, widget=forms.DateInput(attrs={'type': 'date'}))
- # cuenta = forms.ModelChoiceField(queryset=Cuenta.objects.all(), required=False)
- buscar = forms.CharField(required=False, label='',
- widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Buscar...'}))
- class CuentaForm(forms.ModelForm):
- saldo = forms.CharField()
- class Meta:
- model = Cuenta
- fields = ['nombre', 'tipo', 'saldo', 'favorita']
- widgets = {
- 'nombre': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'El nombre de la cuenta'}),
- 'tipo': forms.Select(attrs={'class': 'form-control'}),
- 'saldo': forms.TextInput(attrs={'class': 'form-control'}),
- 'favorita': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
- }
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- if 'saldo' in self.initial:
- self.initial['saldo'] = str(self.initial['saldo']).replace('.', ',')
- elif self.instance and self.instance.pk:
- self.fields['saldo'].initial = str(self.instance.saldo).replace('.', ',')
- def clean_saldo(self):
- valor = self.cleaned_data['saldo'].replace(',', '.')
- try:
- return Decimal(valor)
- except InvalidOperation:
- raise forms.ValidationError("Introduzca un número válido. Use coma o punto como separador decimal.")
|