95 lines
3.1 KiB
Python
95 lines
3.1 KiB
Python
#!/usr/bin/env python3
|
|
|
|
from django import forms
|
|
from . import models
|
|
from .util import util
|
|
|
|
|
|
class AdminFormClients(forms.ModelForm):
|
|
file_key = forms.FileField(label='Fiel Key', required=False)
|
|
file_cer = forms.FileField(label='Fiel Cer', required=False)
|
|
contra = forms.CharField(label='Contraseña', required=False)
|
|
|
|
class Meta:
|
|
model = models.Clients
|
|
fields = ('rfc', 'name')
|
|
widgets = {
|
|
'contra': forms.PasswordInput,
|
|
}
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
self.cert = None
|
|
super().__init__(*args,**kwargs)
|
|
|
|
def clean(self):
|
|
super().clean()
|
|
|
|
rfc = self.cleaned_data.get('rfc')
|
|
file_key = self.cleaned_data.get('file_key')
|
|
file_cer = self.cleaned_data.get('file_cer')
|
|
contra = self.cleaned_data.get('contra')
|
|
|
|
if (bool(file_key) + bool(file_cer) + bool(contra)) > 0:
|
|
msg_error = ''
|
|
if not file_key:
|
|
msg_error = 'Falta el archivo KEY'
|
|
self.add_error('file_key', msg_error)
|
|
if not file_cer:
|
|
msg_error = 'Falta el archivo CER'
|
|
self.add_error('file_cer', msg_error)
|
|
if not contra:
|
|
msg_error = 'Captura la contraseña'
|
|
self.add_error('contra', msg_error)
|
|
|
|
if not msg_error:
|
|
self.cert = util.SATCertificate(file_cer.read(), file_key.read(), contra)
|
|
if not self.cert.is_valid:
|
|
raise forms.ValidationError(self.cert.error)
|
|
elif not self.cert.is_fiel:
|
|
raise forms.ValidationError('No es FIEL')
|
|
elif rfc.upper() != self.cert.rfc:
|
|
msg_error = 'El certificado no corresponde al RFC'
|
|
raise forms.ValidationError(msg_error)
|
|
|
|
return self.cleaned_data
|
|
|
|
|
|
class AdminFormCfdi(forms.ModelForm):
|
|
file_xml = forms.FileField(label='Archivo XML', required=False)
|
|
|
|
class Meta:
|
|
model = models.Cfdi
|
|
fields = ('uuid',)
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
self.file_xml = None
|
|
self._data = {}
|
|
super().__init__(*args,**kwargs)
|
|
|
|
def clean(self):
|
|
super().clean()
|
|
self.file_xml = self.cleaned_data.get('file_xml')
|
|
|
|
if not self.file_xml.content_type in ('text/xml', 'application/xml'):
|
|
msg = 'El archivo no es XML'
|
|
raise forms.ValidationError(msg)
|
|
|
|
self.data = util.get_data_from_cfdi(self.file_xml.read())
|
|
if models.Cfdi.objects.filter(uuid=self.data['uuid']).exists():
|
|
msg = f"'CFDI con UUID: {self.data['uuid']} importado previamente"
|
|
raise forms.ValidationError(msg)
|
|
|
|
return self.cleaned_data
|
|
|
|
|
|
class AdminUploadXmlForm(forms.Form):
|
|
_selected_action = forms.CharField(widget=forms.MultipleHiddenInput)
|
|
file_xml = forms.FileField(label='Archivo XML', required=False)
|
|
|
|
|
|
class AdminUploadZipForm(forms.Form):
|
|
_selected_action = forms.CharField(widget=forms.MultipleHiddenInput)
|
|
file_zip = forms.FileField(label='Archivo ZIP', required=False)
|
|
|
|
|