From f800728f890dc6dffede476fc91f0e96d923fab0 Mon Sep 17 00:00:00 2001 From: "Jorge E. Gomez" Date: Wed, 2 Jun 2021 19:32:37 -0500 Subject: [PATCH] first commit --- .gitignore | 1 + README.md | 8 + _firma_factura.png | Bin 0 -> 13141 bytes account.move-agofer_e_invoice.py | 176 ++++++++++++ factura_o_devolucion_v14.xml | 441 +++++++++++++++++++++++++++++++ 5 files changed, 626 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 _firma_factura.png create mode 100755 account.move-agofer_e_invoice.py create mode 100644 factura_o_devolucion_v14.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7aa4f3b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +firma_factura.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..8e8f11f --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ +# Modificar vistas Odoo v14 + +Estos programas modifican las vistas de Odoo (modelo `ir.ui.view`), +utilizando las propiedades de herencia entre vistas para ocultar campos, +o añadir restricciones sobre los mismos. + +Aplica también para la modificación de formatos impresos PDF. + diff --git a/_firma_factura.png b/_firma_factura.png new file mode 100644 index 0000000000000000000000000000000000000000..3d0a95c42ed375d7987b9efa2830f681aa2d384a GIT binary patch literal 13141 zcmV-bGpfvqP)v_d9cu7&Xa$SxDUdJL2QLc{6wJoZso^+<{+T zU(b8IwFU)DCX-BVwr%wa7hOgFA%pcMqseIGnM`~GzA@nw&uB0jv^=AUZ{qQcMw3a; zqhm}w{L|}=HMJ uqOMwcDMTERsk@4Ubi;RXiMRq8AK>Z)<96l&yo) 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%0Adtz>7)_cU*iSrhE2LimrxOLy3 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 literal 0 HcmV?d00001 diff --git a/account.move-agofer_e_invoice.py b/account.move-agofer_e_invoice.py new file mode 100755 index 0000000..04e1737 --- /dev/null +++ b/account.move-agofer_e_invoice.py @@ -0,0 +1,176 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Modifica el formato QWeb de facturas y devoluciones.""" +import os +import sys +import base64 +import erppeek + +def stringifyImage(archivo): + """Convierte archivo en el mismo directorio a una cadena en base64.""" + with open(os.path.join(__location__, archivo), 'rb') as f: + img = base64.b64encode(f.read()).decode('ascii') + return img + +def use_local_resources(): + """Facilita usar recursos en el mismo directorio del script.""" + global __location__ + __location__ = os.path.realpath( + os.path.join(os.getcwd(), os.path.dirname(__file__))) + +def replace_extid(objeto, modelo, nuevo_extid): + """Reemplaza el id externo de un objeto.""" + if objeto._external_id == nuevo_extid: + return + id_extid = odoo.model('ir.model.data').get( + [('model', '=', modelo), ('res_id', '=', objeto.id)]) + if id_extid: + try: + id_extid.unlink() + except: + xt, xc, tb = sys.exc_info() + xm = ''.join(erppeek.format_exception(xt, xc, tb, chain=False)) + print('### Error\n' + (xm.strip())) + try: + objeto._set_external_id(nuevo_extid) + print('{} (#{}) -> {}'.format(objeto.name, objeto.id, nuevo_extid)) + except: + xt, xc, tb = sys.exc_info() + xm = ''.join(erppeek.format_exception(xt, xc, tb, chain=False)) + print('### Error\n' + (xm.strip())) + return + +def main(): + odoo = erppeek.Client.from_config('Odoo14_6c60') + context = {'lang':'es_CO'} + + """Por ahora, desactivar (manualmente) + account_extended.report_invoice_document_agofer. + """ + + views = odoo.model('ir.ui.view') + baseid = 'account.report_invoice_document' + viewname = 'report.invoice.factura_o_devolucion_agofer' + viewextid = 'agofer_view.factura_o_devolucion' + + reports = odoo.model('ir.actions.report') + repextid = 'account.account_invoices' + + papers = odoo.model('report.paperformat') + papextid = 'agofer_paper.factura_carta' + papextid_base = 'base.paperformat_us' + + attachments = odoo.model('ir.attachment') + attextid_ff = 'agofer_adjunto.firma_factura' + attextid_iw = 'agofer_adjunto.icono_whatsapp' + + vista_base = views.get(baseid) + assert vista_base.name == 'report_invoice_document' + reporte = open(os.path.join(__location__, + 'factura_o_devolucion_v14.xml')).read() + + formato_carta = papers.get(papextid_base) + + destino_arch = """ + + + {} + + + """.format(viewname,baseid,reporte) + + viewvalues = { + 'active': True, + 'inherit_id': vista_base.id, + 'mode': 'extension', + 'name': viewname, + 'priority': 15, + 'type': 'qweb', + } + repvalues = { + 'name': 'Factura/Devolución', + 'attachment': False, + 'attachment_use': False, + 'report_type': 'qweb-html', + } + papvalues = { + 'name': 'Tamaño carta para factura', + 'dpi': 120, + 'format': 'Letter', + 'header_line': False, + 'header_spacing': 33, + 'margin_bottom': 17, + 'margin_left': 7, + 'margin_right': 7, + 'margin_top': 43, + 'orientation': 'Portrait', + 'page_height': 0, + 'page_width': 0, + } + attvalues_ff = { + 'datas': stringifyImage('firma_factura.png'), + 'store_fname': 'firma_factura.png', + 'db_datas': False, + 'description': False, + 'index_content': 'image', + 'mimetype': 'image/png', + 'name': 'firma_factura.png', + 'res_id': 0, + 'res_model': 'ir.ui.view', + 'type': 'binary', + } + attvalues_iw = { + 'datas': stringifyImage('WhatsApp_Number.png'), + 'store_fname': 'WhatsApp_Number.png', + 'db_datas': False, + 'description': False, + 'index_content': 'image', + 'mimetype': 'image/png', + 'name': 'WhatsApp_Number.png', + 'res_id': 0, + 'res_model': 'ir.ui.view', + 'type': 'binary', + } + + adjunto_ff = attachments.get(attextid_ff) + if adjunto_ff: + adjunto_ff.write(attvalues_ff) + else: + adjunto_ff = attachments.create(attvalues_ff) + adjunto_ff._set_external_id(attextid_ff) + #destino_arch = destino_arch.replace('firmaurl', adjunto_ff.website_url) + viewvalues['arch'] = destino_arch + + adjunto_iw = attachments.get(attextid_iw) + if adjunto_iw: + adjunto_iw.write(attvalues_iw) + else: + adjunto_iw = attachments.create(attvalues_iw) + adjunto_iw._set_external_id(attextid_iw) + viewvalues['arch'] = destino_arch + + destino_vista = views.get(viewextid) + if destino_vista: + destino_vista.write(viewvalues) + else: + destino_vista = views.create(viewvalues) + destino_vista._set_external_id(viewextid) + + paper = papers.get(papextid) + if paper: + paper.write(papvalues) + else: + paper = papers.create(papvalues) + paper._set_external_id(papextid) + repvalues['paperformat_id'] = paper.id + + # Asegurarse que el nombre de la Cedula de Ciudadania este abreviado: + # cc_extid = 'partner_extended_co.partner_co_document_type_CC' + # odoo.model('res.document.type').get(cc_extid).name = 'CC' + + reports.get(repextid).write(repvalues) + +if __name__ == "__main__": + use_local_resources() + main() + diff --git a/factura_o_devolucion_v14.xml b/factura_o_devolucion_v14.xml new file mode 100644 index 0000000..1e28b6d --- /dev/null +++ b/factura_o_devolucion_v14.xml @@ -0,0 +1,441 @@ + + + + + + Factura electrónica de venta + Factura borrador + Factura anulada + + Devolución + Devolución borrador + Devolución anulada + + Devolución de proveedor + + Soporte en adquisición efectuada a no-obligados a facturar + Factura de proveedor + + + +
+
+
+
+
+

+ + + +

+
+
+

+ Fecha: + + +

+

+ Fecha de vencimiento: + +

+
+
+

+ Condición de pago: + +

+

+ + Términos de negociación: + + : + + + +

+
+
+
+
+
+
+ + +
+
+ +
+
+
+
+ + +
+

+

+ +
+
+
+
+

+ +   + + + + + + – + + + +

+
+
+
+
+
+
Dirección:
+
Dirección de facturación:
+
+
+

+ +

+ +

+ , + +

+

+ + +

+

+ + +

+
+
+
+
+
+
+ Dirección de envío: +
+
+ Dirección de recepción: +
+

+ +

+ +

+ , + +

+

+ + +

+

+ +

+ +
+
+
+
+
+
+
+

+ Agofer S.A.S. NIT 800.216.499–1 : +

+
    +
  • + + Autorretenedor Res. №0010 1994-02-11 +
  • +
  • + + Gran contribuyente Res.DIAN №9061 2020-12-10 +
  • +
  • + + Régimen Común y Agente Retenedor de IVA +
  • +
  • + + Actividad Económica CIIU 4752 +
  • + + +
  • + + +
  • +
    +
    +
+ WhatsApp 310 674 4444 +
+
+ + +
+
+ Peso teórico total: +

+ + kg +

+
+
+ Source: +

+

+
+ Customer Code: +

+

+
+ Reference: +

+

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DescriptionQuantityUnit Price + Disc.% + Taxes + Amount + Total Price +
+ + + + + + + + + + + + + + + + + + + + +
+ Subtotal + +
+ + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Subtotal + +
+ + + + on + + + + +
Total + +
+ Paid on + + +
Amount Due + +
+
+
+
+
+
+
+

+ + Ésta es una representación gráfica + de la factura electrónica, que para todos sus + efectos cumple con lo dispuesto en el + Art. 774 del Código de Comercio, y en el + Decreto 2242 de 2015. + + + Esta factura cumple, para todos sus + efectos, con lo dispuesto en el + Art. 774 del Código de Comercio. + + Las mercancías viajan por cuenta y riesgo del comprador + salvo estipulación al contrario en esta misma factura. + Solo se aceptan devoluciones dentro de los + diez días calendario siguientes a la recepción de + la mercancía, conforme al Art. 2 de la + Ley 1231 de 2008, y no se aceptan reclamos + después de diez días de recibida la factura. + Esta factura causará intereses moratorios a la tasa + máxima permitida por la ley, a partir de la fecha de + vencimiento. + Se hace constar que la firma de una persona distinta al + comprador indica que dicha persona se encuentra + autorizada expresamente por el comprador para recibir + la mercancía y firmar el documento como dependiente + suyo, acorde al Art. 640 del Código de Comercio. + Firmada la presente, el cliente autoriza a ser + consultado y reportado en bases de datos y + centrales de riesgos, y confirma la autorización + dada a Agofer para almacenar y tratar sus datos + personales según la Ley 1581 de 2012. + La celebración del presente contrato se realiza + únicamente en las jurisdicciones donde Agofer está + matriculado ante cámara de comercio. Todo + material es entregado al cliente en las instalaciones + de Agofer. La actividad de transporte de mercancías no + es ejecutada por Agofer: es asumida por el cliente a + través de terceros no vinculados a la Compañía. + Este documento es prueba de la negociación + realizada entre el cliente y Agofer S.A.S. en la + jurisdicción de . + El cierre de esta venta es realizado únicamente por el + personal autorizado en nuestra sucursal en dicha ciudad. +

+
+
+
+

+ Please use the following communication for your payment : +

+

+ +

+

+ +

+

+ +

+

+ Incoterm: - +

+
+

+ Scan me with your banking app.

+ +

+
+
+
+