# l10n_mx_ir_attachment_facture modulo
Este modulo esta destinado a ser el principal manejador cuando se trate de timbrar un documento en el SAT. El modulo maneja todo el proceso necesario; desde la creacion del archivo XML, pasando por la creacion el sello digital, timbrado del XML en el SAT, hasta la creacion del archivo PDF
## Uso del modulo
El archivo python principal de este modulo es ir_attachment_facture.py. Los otros archivos python solo se encargan de proporcionar una relacion entre el archivo ir_attachment_facture.py con el resto del ERP. Por ejemplo analizemos account_journal.py:
sign_sat = fields.Boolean(
'Sign SAT', copy=False,
help='If this field is enabled, then sign through the'
' webservice of the Mexican SAT'
)
param_pacs = fields.One2many(
'params.pac', 'pararm_pac_id'
)
sign_sat es usado para indicarle al ERP si los documentos creados en el diario deben ser timbrados en el SAT o no
param_pacs nos permite seleccionar los proveedores PACs que queremos esten disponibles en ese diario, pueden ser tantos como el ERP tenga disponibles

### ir_attachment_facture.py
Este archivo de python tienen dos funciones principales:
- Una de ellas es sign_cfdi_sat, la cual es usada para timbrar uno o muchos CFDIs ante el SAT.
- La segunda funcion es cancel_cfdi_sat, la cual es usada para cancelar CFDIs
Hablando de timbrar un CFDI podemos revisemos los siguientes datos importantes:
- Cuando se emite un CFDI, los pasos para timbrarlo ante el SAT son siempre los mismos, no importa de que tipo de CFDI se trate.
- Los unicos cambios en el proceso de timbrar un CFDI de un tipo o uno de otro, son la estructura de los arhivos XML y PDF, todo lo demas se mantiene igual.
Entonces este archivo realiza todo el funcionamiento en general y deja para ir_attachment_facturae_config.py el resto
En resumen:
- Ningun otro modulo nececista agregar funcionalidad alguna para tener su CFDI timbrado ante el SAT, este modulo lo hace todo
- Cualquier modulo que quiera hacer uso de este modulo debe añadir un registro en la tabla ir_attachment_facture_config
### ir_attachment_facturae_config.py
Que es esto??
Como comentamos anteriormente, la unica diferencia al momento de timbar una factura y una nomia, por dar un ejemmplo, es la estructura de sus archivos XML y PDF.
Entoces lo que la tabla ir_attachment_facture_config contiene es
La tabla ir_attachment_facturae_config debe contener la refencia a las plantillas a usar para la generacion del XML y PDF (tanto de timbrado como de cancelacion)
Un ejemplo tomado del modulo l10n_mx_facturae: > Note: El modulo l10n_mx_facturae se conectara al modulo l10n_mx_ir_attachment para que juntos puedan timbrar una factura >
Solo dos cosas requiere hacer el modulo l10n_mx_facturae
-
Crear una entrada en ir_attachment_facture_config:
<record model="ir.attachment.facturae.mx.config" id="ir_attachment_facturae_mx_config_invoice"> <field name="model">account.invoice</field> <field name="template_xml_sign">invoice.report.aaero.xml</field> <field name="template_pdf_sign">invoice.report.aaero</field> </record>
-
Llamar a la funcion sign_cfdi_sat:
def sign_invoice_sat(self, cr, uid, ids, context=None): context = dict(context or {}) ir_attach_obj = self.pool.get('ir.attachment.facturae.mx') for account_invoice in self.browse(cr, uid, ids, context): if account_invoice.journal_id.sign_sat: ir_attach_obj.sign_cfdi_sat( cr, uid, ids, object_id=account_invoice.id, object_model='account.invoice',** name=account_invoice.fname_invoice)
### Como funciona sign_cfdi_sat:
Busca en la tabla ir_attachment_facture_config que tenga modelo
igual al parametro object_model
if Existe alguna entrada:
if no existe un objeto ir_attachment_facture previo relacionado con el documento a timbrar en el SAT:
1.- Recrear objecto a timbrar usado los paramentros pasados a la funcion
(_object_model_ y _object_id_),
2.- Crear objecto ir_attachment_facturae
3.- Crear archivo XML
4.- Firmar archivo XML usando los certificados cargados en el ERP
5.- Mandar a timbrar el archivo timbrado, pasando como paremetro todos
los PACs posibles que se seleccionaron a usar en el diario.
El diario se lee del objecto recreado en el paso 1
6.- Guardar XML timbrado en ir_attachment, pero haciendo referencia al
objecto recreado en paso 1
7.- Crear archivo PDF
8.- Guardar archivo PDF creado en ir_attachment, pero haciendo referencia al
objecto recreado en paso 1
else:
Mandar mensaje de Error al usuario
### Descripcion de los parametros de sign_cfdi_sat
A continuacion se describe los paramentros que recibe la funcion y su uso
- object_id: Id del objecto a timbrar. Ejemplo: 150
- object_model: Nombre del modelo a timbrar. Ejemplo: account.invoice
- name: Nombre que tendran los archivos adjuntos. Ejemplo: F-150