Remove all oca-edi-framework packages

This commit is contained in:
Ernad Husremovic 2025-08-30 12:42:02 +02:00
parent df976c03db
commit 985f753d39
1090 changed files with 0 additions and 285896 deletions

View file

@ -1,44 +0,0 @@
# Account e-invoice Generate
Odoo addon: account_einvoice_generate
## Installation
```bash
pip install odoo-bringout-oca-edi-framework-account_einvoice_generate
```
## Dependencies
This addon depends on:
- account
## Manifest Information
- **Name**: Account e-invoice Generate
- **Version**: 16.0.1.1.0
- **Category**: Accounting & Finance
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/edi-framework](https://github.com/OCA/edi-framework) branch 16.0, addon `account_einvoice_generate`.
## License
This package maintains the original AGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -1,108 +0,0 @@
==========================
Account e-invoice Generate
==========================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:7d46d7a31c358dee3280b20b510f7eff3b7bbda3ca7629a5c3fa0ac20ba4fd22
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fedi-lightgray.png?logo=github
:target: https://github.com/OCA/edi/tree/16.0/account_einvoice_generate
:alt: OCA/edi
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/edi-16-0/edi-16-0-account_einvoice_generate
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/edi&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This is a technical module that ensure compatibility between the e-invoice generation modules of the `OCA/edi project <https://github.com/OCA/edi/>`_. It doesn't bring any feature by itself. You must also install one of the 2 OCA modules that generate electronic invoices:
* **account_invoice_ubl**: add support for the UBL format (Universal Business Language),
* **account_invoice_facturx**: add support for the `Factur-X <http://fnfe-mpe.org/factur-x/factur-x_en/>`_ format.
See the README of each module for more information.
These 2 modules are able to embed an XML file in the PDF invoice and
this module ensure that these 2 modules are compatible.
**Table of contents**
.. contents::
:local:
Installation
============
Before installing the module, you must **uninstall** the module **account_edi** from the official addons. As the account_edi module is auto-installable, it is certainly already installed on your Odoo database.
For that, go to the *Apps* menu, remove the *Apps* filter, search for the module *account_edi* (the title of the module is *Import/Export Invoices From XML/PDF*). Then click on the button *Module info* and then on the button *Uninstall*.
Configuration
=============
The new configuration parameter *XML Format embedded in PDF invoice*
is available in the menu *Invoicing > Configuration > Settings*.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/edi/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/edi/issues/new?body=module:%20account_einvoice_generate%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Akretion
* Onestein
Contributors
~~~~~~~~~~~~
* Alexis de Lattre <alexis.delattre@akretion.com>
* Andrea Stirpe <a.stirpe@onestein.nl>
* Shine IT <contact@openerp.cn>
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
.. |maintainer-alexis-via| image:: https://github.com/alexis-via.png?size=40px
:target: https://github.com/alexis-via
:alt: alexis-via
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-alexis-via|
This module is part of the `OCA/edi <https://github.com/OCA/edi/tree/16.0/account_einvoice_generate>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -1,4 +0,0 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import models
from . import wizards

View file

@ -1,17 +0,0 @@
# Copyright 2018-2022 Akretion France (http://www.akretion.com)
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Account e-invoice Generate",
"version": "16.0.1.1.0",
"category": "Accounting & Finance",
"license": "AGPL-3",
"summary": "Technical module to generate PDF invoices with " "embedded XML file",
"author": "Akretion,Onestein,Odoo Community Association (OCA)",
"maintainers": ["alexis-via"],
"website": "https://github.com/OCA/edi",
"depends": ["account"],
"data": ["views/res_config_settings.xml"],
"installable": True,
}

View file

@ -1,57 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_e-invoice_generate
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: account_e-invoice_generate
#: model_terms:ir.ui.view,arch_db:account_e-invoice_generate.view_account_config_settings
msgid ""
"<span class=\"o_form_label\">Select Format</span>\n"
" <span class=\"fa fa-lg fa-building-o\" title=\"Values set here are company-specific.\" groups=\"base.group_multi_company\"/>"
msgstr ""
#. module: account_e-invoice_generate
#: model:ir.model,name:account_e-invoice_generate.model_res_company
msgid "Companies"
msgstr ""
#. module: account_e-invoice_generate
#: model:ir.model,name:account_e-invoice_generate.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: account_e-invoice_generate
#: model_terms:ir.ui.view,arch_db:account_e-invoice_generate.view_account_config_settings
msgid "Electronic Invoices"
msgstr ""
#. module: account_e-invoice_generate
#: model:ir.model,name:account_e-invoice_generate.model_account_move
msgid "Journal Entries"
msgstr ""
#. module: account_e-invoice_generate
#: model:ir.model.fields.selection,name:account_e-invoice_generate.selection__res_company__xml_format_in_pdf_invoice__none
msgid "None"
msgstr ""
#. module: account_e-invoice_generate
#: model_terms:ir.ui.view,arch_db:account_e-invoice_generate.view_account_config_settings
msgid "Select the format of your e-invoices."
msgstr ""
#. module: account_e-invoice_generate
#: model:ir.model.fields,field_description:account_e-invoice_generate.field_res_company__xml_format_in_pdf_invoice
#: model:ir.model.fields,field_description:account_e-invoice_generate.field_res_config_settings__xml_format_in_pdf_invoice
msgid "XML Format embedded in PDF invoice"
msgstr ""

View file

@ -1,57 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_einvoice_generate
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: account_einvoice_generate
#: model_terms:ir.ui.view,arch_db:account_einvoice_generate.view_account_config_settings
msgid ""
"<span class=\"o_form_label\">Select Format</span>\n"
" <span class=\"fa fa-lg fa-building-o\" title=\"Values set here are company-specific.\" groups=\"base.group_multi_company\"/>"
msgstr ""
#. module: account_einvoice_generate
#: model:ir.model,name:account_einvoice_generate.model_res_company
msgid "Companies"
msgstr ""
#. module: account_einvoice_generate
#: model:ir.model,name:account_einvoice_generate.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: account_einvoice_generate
#: model_terms:ir.ui.view,arch_db:account_einvoice_generate.view_account_config_settings
msgid "Electronic Invoices"
msgstr ""
#. module: account_einvoice_generate
#: model:ir.model,name:account_einvoice_generate.model_account_move
msgid "Journal Entry"
msgstr ""
#. module: account_einvoice_generate
#: model:ir.model.fields.selection,name:account_einvoice_generate.selection__res_company__xml_format_in_pdf_invoice__none
msgid "None"
msgstr ""
#. module: account_einvoice_generate
#: model:ir.model.fields,field_description:account_einvoice_generate.field_res_company__xml_format_in_pdf_invoice
#: model:ir.model.fields,field_description:account_einvoice_generate.field_res_config_settings__xml_format_in_pdf_invoice
msgid "XML Format embedded in PDF invoice"
msgstr ""
#. module: account_einvoice_generate
#: model_terms:ir.ui.view,arch_db:account_einvoice_generate.view_account_config_settings
msgid "XML format attached to your PDF customer invoices"
msgstr ""

View file

@ -1,57 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_e-invoice_generate
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: account_e-invoice_generate
#: model_terms:ir.ui.view,arch_db:account_e-invoice_generate.view_account_config_settings
msgid ""
"<span class=\"o_form_label\">Select Format</span>\n"
" <span class=\"fa fa-lg fa-building-o\" title=\"Values set here are company-specific.\" groups=\"base.group_multi_company\"/>"
msgstr ""
#. module: account_e-invoice_generate
#: model:ir.model,name:account_e-invoice_generate.model_res_company
msgid "Companies"
msgstr "Kompanije"
#. module: account_e-invoice_generate
#: model:ir.model,name:account_e-invoice_generate.model_res_config_settings
msgid "Config Settings"
msgstr "Postavke"
#. module: account_e-invoice_generate
#: model_terms:ir.ui.view,arch_db:account_e-invoice_generate.view_account_config_settings
msgid "Electronic Invoices"
msgstr "Elektronički računi"
#. module: account_e-invoice_generate
#: model:ir.model,name:account_e-invoice_generate.model_account_move
msgid "Journal Entries"
msgstr "Žurnal (finansijski nalozi)"
#. module: account_e-invoice_generate
#: model:ir.model.fields.selection,name:account_e-invoice_generate.selection__res_company__xml_format_in_pdf_invoice__none
msgid "None"
msgstr "Ništa"
#. module: account_e-invoice_generate
#: model_terms:ir.ui.view,arch_db:account_e-invoice_generate.view_account_config_settings
msgid "Select the format of your e-invoices."
msgstr "Izaberite format vaših e-faktura."
#. module: account_e-invoice_generate
#: model:ir.model.fields,field_description:account_e-invoice_generate.field_res_company__xml_format_in_pdf_invoice
#: model:ir.model.fields,field_description:account_e-invoice_generate.field_res_config_settings__xml_format_in_pdf_invoice
msgid "XML Format embedded in PDF invoice"
msgstr "XML format ugnježđen u PDF račun"

View file

@ -1,66 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_einvoice_generate
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-08-07 08:11+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: account_einvoice_generate
#: model_terms:ir.ui.view,arch_db:account_einvoice_generate.view_account_config_settings
msgid ""
"<span class=\"o_form_label\">Select Format</span>\n"
" <span class=\"fa fa-lg fa-building-o\" title="
"\"Values set here are company-specific.\" groups=\"base.group_multi_company"
"\"/>"
msgstr ""
"<span class=\"o_form_label\">Seleccionar Formato</span>\n"
" <span class=\"fa fa-lg fa-building-o\" title="
"\"Values set here are company-specific.\" groups=\"base.group_multi_company"
"\"/>"
#. module: account_einvoice_generate
#: model:ir.model,name:account_einvoice_generate.model_res_company
msgid "Companies"
msgstr "Compañías"
#. module: account_einvoice_generate
#: model:ir.model,name:account_einvoice_generate.model_res_config_settings
msgid "Config Settings"
msgstr "Ajustes de Configuración"
#. module: account_einvoice_generate
#: model_terms:ir.ui.view,arch_db:account_einvoice_generate.view_account_config_settings
msgid "Electronic Invoices"
msgstr "Facturas electrónicas"
#. module: account_einvoice_generate
#: model:ir.model,name:account_einvoice_generate.model_account_move
msgid "Journal Entry"
msgstr "Entrada Diaria"
#. module: account_einvoice_generate
#: model:ir.model.fields.selection,name:account_einvoice_generate.selection__res_company__xml_format_in_pdf_invoice__none
msgid "None"
msgstr "Ninguno/a"
#. module: account_einvoice_generate
#: model:ir.model.fields,field_description:account_einvoice_generate.field_res_company__xml_format_in_pdf_invoice
#: model:ir.model.fields,field_description:account_einvoice_generate.field_res_config_settings__xml_format_in_pdf_invoice
msgid "XML Format embedded in PDF invoice"
msgstr "Formato XML integrado en factura PDF"
#. module: account_einvoice_generate
#: model_terms:ir.ui.view,arch_db:account_einvoice_generate.view_account_config_settings
msgid "XML format attached to your PDF customer invoices"
msgstr "Formato XML adjunto a sus facturas de clientes en PDF"

View file

@ -1,66 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_einvoice_generate
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-06-27 19:08+0000\n"
"Last-Translator: Alexis de Lattre <alexis@via.ecp.fr>\n"
"Language-Team: none\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: account_einvoice_generate
#: model_terms:ir.ui.view,arch_db:account_einvoice_generate.view_account_config_settings
msgid ""
"<span class=\"o_form_label\">Select Format</span>\n"
" <span class=\"fa fa-lg fa-building-o\" title="
"\"Values set here are company-specific.\" groups=\"base.group_multi_company"
"\"/>"
msgstr ""
"<span class=\"o_form_label\">Sélectionner le format</span>\n"
" <span class=\"fa fa-lg fa-building-o\" title="
"\"Values set here are company-specific.\" groups=\"base.group_multi_company"
"\"/>"
#. module: account_einvoice_generate
#: model:ir.model,name:account_einvoice_generate.model_res_company
msgid "Companies"
msgstr "Sociétés"
#. module: account_einvoice_generate
#: model:ir.model,name:account_einvoice_generate.model_res_config_settings
msgid "Config Settings"
msgstr "Configuration"
#. module: account_einvoice_generate
#: model_terms:ir.ui.view,arch_db:account_einvoice_generate.view_account_config_settings
msgid "Electronic Invoices"
msgstr "Factures électroniques"
#. module: account_einvoice_generate
#: model:ir.model,name:account_einvoice_generate.model_account_move
msgid "Journal Entry"
msgstr "Pièce comptable"
#. module: account_einvoice_generate
#: model:ir.model.fields.selection,name:account_einvoice_generate.selection__res_company__xml_format_in_pdf_invoice__none
msgid "None"
msgstr "Aucun"
#. module: account_einvoice_generate
#: model:ir.model.fields,field_description:account_einvoice_generate.field_res_company__xml_format_in_pdf_invoice
#: model:ir.model.fields,field_description:account_einvoice_generate.field_res_config_settings__xml_format_in_pdf_invoice
msgid "XML Format embedded in PDF invoice"
msgstr "Format XML embarqué dans la facture PDF"
#. module: account_einvoice_generate
#: model_terms:ir.ui.view,arch_db:account_einvoice_generate.view_account_config_settings
msgid "XML format attached to your PDF customer invoices"
msgstr "Format XML embarqué à l'intérieur de vos factures clients PDF"

View file

@ -1,81 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_e-invoice_generate
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-11-14 16:34+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>\n"
"Language-Team: none\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 3.8\n"
#. module: account_einvoice_generate
#: model_terms:ir.ui.view,arch_db:account_einvoice_generate.view_account_config_settings
#, fuzzy
msgid ""
"<span class=\"o_form_label\">Select Format</span>\n"
" <span class=\"fa fa-lg fa-building-o\" title="
"\"Values set here are company-specific.\" groups=\"base.group_multi_company"
"\"/>"
msgstr ""
"<span class=\"fa fa-lg fa-building-o\" title=\"Vrijednosti postavljene ovdje "
"su specifične za svaku tvrtku\" groups=\"base.group_multi_company\"/>"
#. module: account_einvoice_generate
#: model:ir.model,name:account_einvoice_generate.model_res_company
msgid "Companies"
msgstr "Tvrtke"
#. module: account_einvoice_generate
#: model:ir.model,name:account_einvoice_generate.model_res_config_settings
msgid "Config Settings"
msgstr "Postavke"
#. module: account_einvoice_generate
#: model_terms:ir.ui.view,arch_db:account_einvoice_generate.view_account_config_settings
msgid "Electronic Invoices"
msgstr "Elektronički računi"
#. module: account_einvoice_generate
#: model:ir.model,name:account_einvoice_generate.model_account_move
msgid "Journal Entry"
msgstr ""
#. module: account_einvoice_generate
#: model:ir.model.fields.selection,name:account_einvoice_generate.selection__res_company__xml_format_in_pdf_invoice__none
msgid "None"
msgstr "Ništa"
#. module: account_einvoice_generate
#: model:ir.model.fields,field_description:account_einvoice_generate.field_res_company__xml_format_in_pdf_invoice
#: model:ir.model.fields,field_description:account_einvoice_generate.field_res_config_settings__xml_format_in_pdf_invoice
msgid "XML Format embedded in PDF invoice"
msgstr "XML format ugnježđen u PDF račun"
#. module: account_einvoice_generate
#: model_terms:ir.ui.view,arch_db:account_einvoice_generate.view_account_config_settings
msgid "XML format attached to your PDF customer invoices"
msgstr ""
#~ msgid "Select the format of your e-invoices."
#~ msgstr "Odaberite format za vaše elektroničke račune."
#~ msgid "Format"
#~ msgstr "Format"
#~ msgid "Invoice"
#~ msgstr "Račun"
#~ msgid "Select Format"
#~ msgstr "Odabir formata"
#~ msgid "Universal Business Language (UBL)"
#~ msgstr "Universal Business Language (UBL)"

View file

@ -1,64 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_einvoice_generate
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-05-29 12:37+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: account_einvoice_generate
#: model_terms:ir.ui.view,arch_db:account_einvoice_generate.view_account_config_settings
msgid ""
"<span class=\"o_form_label\">Select Format</span>\n"
" <span class=\"fa fa-lg fa-building-o\" title=\"Values set here are company-specific.\" groups=\"base.group_multi_company\"/>"
msgstr ""
"<span class=\"o_form_label\">Seleziona formato</span>\n"
" <span class=\"fa fa-lg fa-building-o\" title=\"I "
"valori impostati qui sono specifici per azienda.\" groups=\"base."
"group_multi_company\"/>"
#. module: account_einvoice_generate
#: model:ir.model,name:account_einvoice_generate.model_res_company
msgid "Companies"
msgstr "Aziende"
#. module: account_einvoice_generate
#: model:ir.model,name:account_einvoice_generate.model_res_config_settings
msgid "Config Settings"
msgstr "Impostazioni configurazione"
#. module: account_einvoice_generate
#: model_terms:ir.ui.view,arch_db:account_einvoice_generate.view_account_config_settings
msgid "Electronic Invoices"
msgstr "Fatture elettroniche"
#. module: account_einvoice_generate
#: model:ir.model,name:account_einvoice_generate.model_account_move
msgid "Journal Entry"
msgstr "Registrazione contabile"
#. module: account_einvoice_generate
#: model:ir.model.fields.selection,name:account_einvoice_generate.selection__res_company__xml_format_in_pdf_invoice__none
msgid "None"
msgstr "Nessuna"
#. module: account_einvoice_generate
#: model:ir.model.fields,field_description:account_einvoice_generate.field_res_company__xml_format_in_pdf_invoice
#: model:ir.model.fields,field_description:account_einvoice_generate.field_res_config_settings__xml_format_in_pdf_invoice
msgid "XML Format embedded in PDF invoice"
msgstr "Formato XML incorporato nella fattura PDF"
#. module: account_einvoice_generate
#: model_terms:ir.ui.view,arch_db:account_einvoice_generate.view_account_config_settings
msgid "XML format attached to your PDF customer invoices"
msgstr "Formato XML allegato alla tua fattura PDF"

View file

@ -1,4 +0,0 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import res_company
from . import account_move

View file

@ -1,49 +0,0 @@
# Copyright 2018-2022 Akretion France
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, models
class AccountMove(models.Model):
_inherit = "account.move"
def get_payment_identifier(self):
"""This method is designed to be inherited in localization modules"""
self.ensure_one()
return self.payment_reference
@api.model
def _get_invoice_report_names(self):
return ["account.report_invoice", "account.report_invoice_with_payments"]
def _xml_format_in_pdf_invoice(self):
"""Returns the format if it is possible to generate the XML
Otherwize return False"""
self.ensure_one()
xml_format = self.company_id.xml_format_in_pdf_invoice
# I want to allow embedded XML even on draft invoice
# So I write here the conditions to be able to generate a valid XML
if (
xml_format
and xml_format != "none"
and self.move_type in ("out_invoice", "out_refund")
and self.partner_id
and self.state != "cancel"
and self.invoice_line_ids.filtered(lambda x: x.display_type == "product")
):
return xml_format
else:
return False
def _get_unece_due_date_type_code(self):
"""account.tax has a selection field 'tax_exigibility' with 2 possible values:
'on_invoice' or 'on_payment'.
As a consequence, tax exigibility is a property of the invoice line.
But, in real life (at least in France), tax exigibility is a property of the invoice,
not the invoice line!
This method is a hook to get the UNECE due date type code from the invoice instead
of the tax. If it returns None, Odoo will get it from the tax.
"""
self.ensure_one()
return None

View file

@ -1,13 +0,0 @@
# Copyright 2018-2022 Akretion (http://www.akretion.com)
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models
class ResCompany(models.Model):
_inherit = "res.company"
xml_format_in_pdf_invoice = fields.Selection(
[("none", "None")], string="XML Format embedded in PDF invoice"
)

View file

@ -1,2 +0,0 @@
The new configuration parameter *XML Format embedded in PDF invoice*
is available in the menu *Invoicing > Configuration > Settings*.

View file

@ -1,3 +0,0 @@
* Alexis de Lattre <alexis.delattre@akretion.com>
* Andrea Stirpe <a.stirpe@onestein.nl>
* Shine IT <contact@openerp.cn>

View file

@ -1,9 +0,0 @@
This is a technical module that ensure compatibility between the e-invoice generation modules of the `OCA/edi project <https://github.com/OCA/edi/>`_. It doesn't bring any feature by itself. You must also install one of the 2 OCA modules that generate electronic invoices:
* **account_invoice_ubl**: add support for the UBL format (Universal Business Language),
* **account_invoice_facturx**: add support for the `Factur-X <http://fnfe-mpe.org/factur-x/factur-x_en/>`_ format.
See the README of each module for more information.
These 2 modules are able to embed an XML file in the PDF invoice and
this module ensure that these 2 modules are compatible.

View file

@ -1,3 +0,0 @@
Before installing the module, you must **uninstall** the module **account_edi** from the official addons. As the account_edi module is auto-installable, it is certainly already installed on your Odoo database.
For that, go to the *Apps* menu, remove the *Apps* filter, search for the module *account_edi* (the title of the module is *Import/Export Invoices From XML/PDF*). Then click on the button *Module info* and then on the button *Uninstall*.

View file

@ -1,447 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>Account e-invoice Generate</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="account-e-invoice-generate">
<h1 class="title">Account e-invoice Generate</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:7d46d7a31c358dee3280b20b510f7eff3b7bbda3ca7629a5c3fa0ac20ba4fd22
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/edi/tree/16.0/account_einvoice_generate"><img alt="OCA/edi" src="https://img.shields.io/badge/github-OCA%2Fedi-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/edi-16-0/edi-16-0-account_einvoice_generate"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/edi&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This is a technical module that ensure compatibility between the e-invoice generation modules of the <a class="reference external" href="https://github.com/OCA/edi/">OCA/edi project</a>. It doesnt bring any feature by itself. You must also install one of the 2 OCA modules that generate electronic invoices:</p>
<ul class="simple">
<li><strong>account_invoice_ubl</strong>: add support for the UBL format (Universal Business Language),</li>
<li><strong>account_invoice_facturx</strong>: add support for the <a class="reference external" href="http://fnfe-mpe.org/factur-x/factur-x_en/">Factur-X</a> format.</li>
</ul>
<p>See the README of each module for more information.</p>
<p>These 2 modules are able to embed an XML file in the PDF invoice and
this module ensure that these 2 modules are compatible.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#installation" id="toc-entry-1">Installation</a></li>
<li><a class="reference internal" href="#configuration" id="toc-entry-2">Configuration</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-3">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-4">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-5">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-6">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="installation">
<h1><a class="toc-backref" href="#toc-entry-1">Installation</a></h1>
<p>Before installing the module, you must <strong>uninstall</strong> the module <strong>account_edi</strong> from the official addons. As the account_edi module is auto-installable, it is certainly already installed on your Odoo database.</p>
<p>For that, go to the <em>Apps</em> menu, remove the <em>Apps</em> filter, search for the module <em>account_edi</em> (the title of the module is <em>Import/Export Invoices From XML/PDF</em>). Then click on the button <em>Module info</em> and then on the button <em>Uninstall</em>.</p>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#toc-entry-2">Configuration</a></h1>
<p>The new configuration parameter <em>XML Format embedded in PDF invoice</em>
is available in the menu <em>Invoicing &gt; Configuration &gt; Settings</em>.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/edi/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/edi/issues/new?body=module:%20account_einvoice_generate%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-4">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-5">Authors</a></h2>
<ul class="simple">
<li>Akretion</li>
<li>Onestein</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-6">Contributors</a></h2>
<ul class="simple">
<li>Alexis de Lattre &lt;<a class="reference external" href="mailto:alexis.delattre&#64;akretion.com">alexis.delattre&#64;akretion.com</a>&gt;</li>
<li>Andrea Stirpe &lt;<a class="reference external" href="mailto:a.stirpe&#64;onestein.nl">a.stirpe&#64;onestein.nl</a>&gt;</li>
<li>Shine IT &lt;<a class="reference external" href="mailto:contact&#64;openerp.cn">contact&#64;openerp.cn</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/alexis-via"><img alt="alexis-via" src="https://github.com/alexis-via.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/edi/tree/16.0/account_einvoice_generate">OCA/edi</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

@ -1,3 +0,0 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import test_einvoice_generate

View file

@ -1,17 +0,0 @@
# Copyright 2019-2022 Onestein (<https://www.onestein.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo.tests.common import TransactionCase
class TestEInvoiceGenerate(TransactionCase):
def test_config(self):
"""Test configuration of Electronic Invoices."""
conf = self.env["res.config.settings"].create(
{"xml_format_in_pdf_invoice": "none"}
)
conf.execute()
self.assertTrue(self.env.company.xml_format_in_pdf_invoice)
conf.xml_format_in_pdf_invoice = False
conf.execute()
self.assertFalse(self.env.company.xml_format_in_pdf_invoice)

View file

@ -1,38 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<!--
Copyright 2018-2022 Akretion (http://www.akretion.com/)
@author: Alexis de Lattre <alexis.delattre@akretion.com>
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="view_account_config_settings" model="ir.ui.view">
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="account.res_config_settings_view_form" />
<field name="arch" type="xml">
<xpath
expr="//div[@id='print_vendor_checks_setting_container']"
position="after"
>
<h2>Electronic Invoices</h2>
<div class="row mt16 o_settings_container" id="invoicing_settings">
<div class="col-12 col-lg-8 o_setting_box" id="e-invoices">
<div class="o_setting_left_pane" />
<div class="o_setting_right_pane">
<span class="o_form_label">Select Format</span>
<span
class="fa fa-lg fa-building-o"
title="Values set here are company-specific."
groups="base.group_multi_company"
/>
<div class="text-muted">
XML format attached to your PDF customer invoices
</div>
<div class="text-muted" name="xml_format_in_pdf_invoice">
<field name="xml_format_in_pdf_invoice" />
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

View file

@ -1,13 +0,0 @@
# Copyright 2018-2022 Akretion (http://www.akretion.com)
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields, models
class ResConfigSettings(models.TransientModel):
_inherit = "res.config.settings"
xml_format_in_pdf_invoice = fields.Selection(
related="company_id.xml_format_in_pdf_invoice", readonly=False
)

View file

@ -1,32 +0,0 @@
# Architecture
```mermaid
flowchart TD
U[Users] -->|HTTP| V[Views and QWeb Templates]
V --> C[Controllers]
V --> W[Wizards Transient Models]
C --> M[Models and ORM]
W --> M
M --> R[Reports]
DX[Data XML] --> M
S[Security ACLs and Groups] -. enforces .-> M
subgraph Account_einvoice_generate Module - account_einvoice_generate
direction LR
M:::layer
W:::layer
C:::layer
V:::layer
R:::layer
S:::layer
DX:::layer
end
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
```
Notes
- Views include tree/form/kanban templates and report templates.
- Controllers provide website/portal routes when present.
- Wizards are UI flows implemented with `models.TransientModel`.
- Data XML loads data/demo records; Security defines groups and access.

View file

@ -1,3 +0,0 @@
# Configuration
Refer to Odoo settings for account_einvoice_generate. Configure related models, access rights, and options as needed.

View file

@ -1,3 +0,0 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -1,5 +0,0 @@
# Dependencies
This addon depends on:
- [account](../../odoo-bringout-oca-ocb-account)

View file

@ -1,4 +0,0 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon account_einvoice_generate or install in UI.

View file

@ -1,7 +0,0 @@
# Install
```bash
pip install odoo-bringout-oca-edi-framework-account_einvoice_generate"
# or
uv pip install odoo-bringout-oca-edi-framework-account_einvoice_generate"
```

View file

@ -1,13 +0,0 @@
# Models
Detected core models and extensions in account_einvoice_generate.
```mermaid
classDiagram
class account_move
class res_company
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -1,6 +0,0 @@
# Overview
Packaged Odoo addon: account_einvoice_generate. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon account_einvoice_generate
- License: LGPL-3

View file

@ -1,3 +0,0 @@
# Reports
This module does not define custom reports.

View file

@ -1,8 +0,0 @@
# Security
This module does not define custom security rules or access controls beyond Odoo defaults.
Default Odoo security applies:
- Base user access through standard groups
- Model access inherited from dependencies
- No custom row-level security rules

View file

@ -1,5 +0,0 @@
# Troubleshooting
- Ensure Python and Odoo environment matches repo guidance.
- Check database connectivity and logs if startup fails.
- Validate that dependent addons listed in DEPENDENCIES.md are installed.

View file

@ -1,7 +0,0 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon account_einvoice_generate
```

View file

@ -1,3 +0,0 @@
# Wizards
This module does not include UI wizards.

View file

@ -1,42 +0,0 @@
[project]
name = "odoo-bringout-oca-edi-framework-account_einvoice_generate"
version = "16.0.0"
description = "Account e-invoice Generate - Technical module to generate PDF invoices with embedded XML file"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ocb-account>=16.0.0",
"requests>=2.25.1"
]
readme = "README.md"
requires-python = ">= 3.11"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]
[project.urls]
homepage = "https://github.com/bringout/0"
repository = "https://github.com/bringout/0"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.metadata]
allow-direct-references = true
[tool.hatch.build.targets.wheel]
packages = ["account_einvoice_generate"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]

View file

@ -1,46 +0,0 @@
# Account Invoice EDIFACT
Odoo addon: account_invoice_edifact
## Installation
```bash
pip install odoo-bringout-oca-edi-framework-account_invoice_edifact
```
## Dependencies
This addon depends on:
- sale_management
- account
- base_edifact
## Manifest Information
- **Name**: Account Invoice EDIFACT
- **Version**: 16.0.1.0.0
- **Category**: Invoicing Management
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/edi-framework](https://github.com/OCA/edi-framework) branch 16.0, addon `account_invoice_edifact`.
## License
This package maintains the original AGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -1,93 +0,0 @@
=======================
Account Invoice EDIFACT
=======================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:70d9ca517fbd902f6eb1d5b7a7e6b51be92f174ec45f39548e2972b519876286
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png
:target: https://odoo-community.org/page/development-status
:alt: Alpha
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fedi-lightgray.png?logo=github
:target: https://github.com/OCA/edi/tree/16.0/account_invoice_edifact
:alt: OCA/edi
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/edi-16-0/edi-16-0-account_invoice_edifact
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/edi&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
UN/EDIFACT
United Nations rules for Elec­tronic Data Interchange for Administration, Commerce and Transport
This module will support exporting invoice in EDIFACT format.
https://www.stedi.com/edi/edifact/D96A/messages/INVOIC
.. IMPORTANT::
This is an alpha version, the data model and design can change at any time without warning.
Only for development or testing purpose, do not use in production.
`More details on development status <https://odoo-community.org/page/development-status>`_
**Table of contents**
.. contents::
:local:
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/edi/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/edi/issues/new?body=module:%20account_invoice_edifact%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Camptocamp
Contributors
~~~~~~~~~~~~
* Thien (Vo Hong) <thienvh@trobz.com>
Other credits
~~~~~~~~~~~~~
The development of this module has been financially supported by:
* Camptocamp
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
This module is part of the `OCA/edi <https://github.com/OCA/edi/tree/16.0/account_invoice_edifact>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -1,22 +0,0 @@
# Copyright 2023 Camptocamp
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl-3.0)
{
"name": "Account Invoice EDIFACT",
"summary": "Generate customer invoices with EDIFACT/D96A format",
"version": "16.0.1.0.0",
"development_status": "Alpha",
"category": "Invoicing Management",
"website": "https://github.com/OCA/edi",
"author": "Camptocamp, Odoo Community Association (OCA)",
"license": "AGPL-3",
"installable": True,
"depends": [
"sale_management",
"account",
"base_edifact",
],
"data": [],
"demo": [
"demo/data_demo.xml",
],
}

View file

@ -1,69 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record id="partner_edifact_dm" model="res.partner">
<field name="name">Partner Name 1</field>
<field name="is_company" eval="True" />
<field name="customer_rank" eval="1" />
<field name="street">Street 1</field>
<field name="zip">1234</field>
<field name="city">City 1</field>
<field name="country_id" ref="base.lu" />
</record>
<record id="partner_edifact_shipto_dm" model="res.partner">
<field name="name">Partner Name 2</field>
<field name="parent_id" ref="partner_edifact_dm" />
<field name="street">Street 2</field>
<field name="zip">4321</field>
<field name="city">City 2</field>
<field name="country_id" ref="base.pl" />
<field name="email" />
<field name="type">delivery</field>
</record>
<record id="partner_edifact_invoiceto_dm" model="res.partner">
<field name="name">Partner Name 3</field>
<field name="parent_id" ref="partner_edifact_dm" />
<field name="street">Street 3</field>
<field name="zip">3214</field>
<field name="city">City 3</field>
<field name="country_id" ref="base.pl" />
<field name="function">Accountant</field>
<field name="customer_rank" eval="1" />
<field name="type">invoice</field>
</record>
<record
id="user_edifact_sender_dm"
model="res.users"
context="{'no_reset_password': True}"
>
<field name="partner_id" ref="partner_edifact_dm" />
<field name="name">Edifact User</field>
<field name="login">edifact_username</field>
<field name="password">edifact_password</field>
</record>
<record id="res_partner_id_number_edifact" model="res.partner.id_number">
<field
name="category_id"
ref="partner_identification_gln.partner_identification_gln_number_category"
/>
<field name="partner_id" ref="partner_edifact_dm" />
<field name="name">9780201379624</field>
</record>
<record id="res_partner_id_number_edifact_shipto" model="res.partner.id_number">
<field
name="category_id"
ref="partner_identification_gln.partner_identification_gln_number_category"
/>
<field name="partner_id" ref="partner_edifact_shipto_dm" />
<field name="name">9780201379686</field>
</record>
<record id="res_partner_id_number_edifact_invoiceto" model="res.partner.id_number">
<field
name="category_id"
ref="partner_identification_gln.partner_identification_gln_number_category"
/>
<field name="partner_id" ref="partner_edifact_invoiceto_dm" />
<field name="name">9780201379174</field>
</record>
</odoo>

View file

@ -1,26 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_edifact
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: account_invoice_edifact
#: model:ir.model,name:account_invoice_edifact.model_account_move
msgid "Journal Entry"
msgstr ""
#. module: account_invoice_edifact
#. odoo-python
#: code:addons/account_invoice_edifact/models/account_move.py:0
#, python-format
msgid "Partner is not allowed to use the feature."
msgstr ""

View file

@ -1,29 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_edifact
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-15 21:35+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: account_invoice_edifact
#: model:ir.model,name:account_invoice_edifact.model_account_move
msgid "Journal Entry"
msgstr "Entrada en Diario"
#. module: account_invoice_edifact
#. odoo-python
#: code:addons/account_invoice_edifact/models/account_move.py:0
#, python-format
msgid "Partner is not allowed to use the feature."
msgstr "El socio no puede utilizar esta función."

View file

@ -1,29 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_edifact
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-05-13 10:34+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: account_invoice_edifact
#: model:ir.model,name:account_invoice_edifact.model_account_move
msgid "Journal Entry"
msgstr "Registrazione contabile"
#. module: account_invoice_edifact
#. odoo-python
#: code:addons/account_invoice_edifact/models/account_move.py:0
#, python-format
msgid "Partner is not allowed to use the feature."
msgstr "Il partner non è autorizzato ad utilizzare questa funzionalità."

View file

@ -1,328 +0,0 @@
# Copyright 2023 Camtocamp
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from datetime import datetime
from odoo import _, models
from odoo.exceptions import UserError
class AccountMove(models.Model):
_inherit = "account.move"
def edifact_invoice_generate_data(self):
self.ensure_one()
edifact_model = self.env["base.edifact"]
lines = []
interchange = self._edifact_invoice_get_interchange()
header = self._edifact_invoice_get_header()
product, vals = self._edifact_invoice_get_product()
summary = self._edifact_invoice_get_summary(vals)
lines += header + product + summary
for segment in lines:
interchange.add_segment(edifact_model.create_segment(*segment))
return interchange.serialize()
def _edifact_invoice_get_interchange(self):
id_number = self.env["res.partner.id_number"]
sender = id_number.search(
[("partner_id", "=", self.invoice_user_id.partner_id.id)], limit=1
)
recipient = id_number.search([("partner_id", "=", self.partner_id.id)], limit=1)
if not sender or not recipient:
raise UserError(_("Partner is not allowed to use the feature."))
sender_edifact = [sender.name, "14"]
recipient_edifact = [recipient.name, "14"]
syntax_identifier = ["UNOC", "3"]
return self.env["base.edifact"].create_interchange(
sender_edifact, recipient_edifact, self.id, syntax_identifier
)
def _edifact_invoice_get_address(self, partner):
# We apply the same logic as:
# https://github.com/OCA/edi/blob/
# c41829a8d986c6751c07299807c808d15adbf4db/base_ubl/models/ubl.py#L39
# oca/partner-contact/partner_address_street3 is installed
if hasattr(partner, "street3"):
return partner.street3 or partner.street2 or partner.street
else:
return partner.street2 or partner.street
def _edifact_invoice_get_buyer(self):
buyer = self.partner_id
street = self._edifact_invoice_get_address(buyer)
return [
# Invoice information
(
"NAD",
"IV",
[buyer.id, "", "92"],
"",
buyer.commercial_company_name,
[street, ""],
buyer.city,
"",
buyer.zip,
buyer.country_id.code,
),
# Internal customer number
("RFF", ["IT", buyer.id]),
# Buyer information
(
"NAD",
"BY",
[buyer.id, "", "92"],
"",
buyer.commercial_company_name,
[buyer.street, ""],
buyer.city,
"",
buyer.zip,
buyer.country_id.code,
),
("RFF", ["API", ""]),
]
def _edifact_invoice_get_seller(self):
id_number = self.env["res.partner.id_number"]
seller = self.invoice_user_id.partner_id
seller_id_number = id_number.search([("partner_id", "=", seller.id)], limit=1)
street = self._edifact_invoice_get_address(seller)
return [
# Seller information
(
"NAD",
"SE",
[seller_id_number.name, "", "92"],
"",
seller.commercial_company_name,
[street, ""],
seller.city,
"",
seller.zip,
seller.country_id.code,
),
# VAT registration number
("RFF", ["VA", seller.vat]),
# Government reference number
("RFF", ["GN", seller.vat]), # TODO: Fix it
]
def _edifact_invoice_get_shipper(self):
id_number = self.env["res.partner.id_number"]
shipper = self.partner_shipping_id
shipper_id_number = id_number.search([("partner_id", "=", shipper.id)], limit=1)
return [
# Delivery party Information
(
"NAD",
"DP",
[shipper_id_number.name, "", "92"],
"",
shipper.commercial_company_name,
[shipper.street, ""],
shipper.city,
"",
shipper.zip,
shipper.country_id.code,
),
("RFF", ["API", ""]),
]
def _edifact_invoice_get_header(self):
source_orders = self.line_ids.sale_line_ids.order_id
today = datetime.now().date().strftime("%Y%m%d")
buyer = self.partner_id
term_lines = self.invoice_payment_term_id.line_ids
discount_percentage, discount_days = (
term_lines.discount_percentage,
term_lines.discount_days if len(term_lines) == 1 else 0,
)
header = [
("UNH", "1", ["INVOIC", "D", "96A", "UN", "EAN008"]),
# Commercial invoice
("BGM", ["380", "", "", "Invoice"], self.payment_reference, "9"),
# 35: Delivery date/time, actual
(
"DTM",
[
"35",
max(
(
picking.date_done.date().strftime("%Y%m%d")
for order in source_orders
for picking in order.picking_ids
if picking.date_done
),
default="",
),
"102",
],
),
# 11: Despatch date and/or time
(
"DTM",
[
"11",
min(
(
order.commitment_date.date().strftime("%Y%m%d")
for order in source_orders
if order.commitment_date
),
default="",
),
"102",
],
),
# Document/message date/time
("DTM", ["137", today, "102"]),
("PAI", ["", "", "42"]),
# Regulatory information
("FTX", "REG", "", "", ""),
# Payment detail/remittance information
("FTX", "PMD", "", "", ""),
# Terms of payments
("FTX", "AAB", "", "", "30 jours net"),
# Delivery note number
("RFF", ["DQ", self.id]),
# Reference date/time
# TODO: fixed value for now, to be clarified
("DTM", ["171", "99991231", "102"]),
# Reference currency
("CUX", ["2", buyer.currency_id.name, "4"]),
# Rate of exchange
("DTM", ["134", today, "102"]),
("PAT", "3"),
# Terms net due date
("DTM", ["13", self.invoice_date_due, "102"]),
# Discount terms
(
"PAT",
"22",
"",
["5", "3", "D", discount_days],
),
# Discount percentage
(
"PCD",
"12",
discount_percentage,
"13",
),
# Penalty terms
# ("PAT", "20"), # TODO: check value this again later
# Penalty percentage
# ("PCD", "15", "0"), # TODO: check value this again later
# Allowance percentage
# ("PCD", "1", "0", "13"), # TODO: check value this again later
# Allowance or charge amount
# ("MOA", "8", "0"), # TODO: check value this again later
]
header = (
header[:11]
+ self._edifact_invoice_get_buyer()
+ self._edifact_invoice_get_seller()
+ self._edifact_invoice_get_shipper()
+ header[11:]
)
return header
def _edifact_invoice_get_product(self):
number = 0
segments = []
vals = {}
tax = {}
for line in self.line_ids:
if line.display_type != "product":
continue
order = line.sale_line_ids.order_id
number += 1
product_tax = 0
product = line.product_id
product_per_pack = line.product_uom_id._compute_quantity(
line.quantity, product.uom_id
)
if line.tax_ids and line.tax_ids.amount_type == "percent":
product_tax = line.tax_ids.amount
if product_tax not in tax:
tax[product_tax] = line.price_total
else:
tax[product_tax] += line.price_total
product_seg = [
# Line item number
("LIN", number, "", ["", "EN"]),
# Product identification of supplier's article number
("PIA", "5", [product.id, "SA", "", "91"]),
# Item description of product
(
"IMD",
"ANM",
["", "", "", product.product_tmpl_id.description_sale],
),
# Invoiced quantity
("QTY", "47", line.quantity, line.product_uom_id.name),
# Quantity per pack
(
"QTY",
"52",
product_per_pack if product_per_pack else 1,
"PCE",
), # TODO:check it again
# Pieces delivered
("QTY", "46", line.sale_line_ids.qty_delivered),
# Line item amount
("MOA", "203", line.price_total),
# Calculation net
("PRI", ["AAA", round(line.price_total / line.quantity, 2)]),
("PRI", ["AAB", round(line.price_total / line.quantity, 2)]),
# Order number of line item
("RFF", ["ON", order.id]),
# Tax information
(
"PRI",
"7",
"VAT",
"",
"",
["", "", "", product_tax],
), # TODO: check value this again later
# Allowance or charge amount of line item
("MOA", ["8", "0"]),
]
segments.extend(product_seg)
vals["tax"] = tax
vals["total_line_item"] = number
return segments, vals
def _edifact_invoice_get_summary(self, vals):
tax_list = []
total_line_item = vals["total_line_item"]
if "tax" in vals:
for product_tax, price_total in vals["tax"].items():
# Tax Information
tax_list.append(
("TAX", "7", "VAT", "", price_total, ["", "", "", product_tax])
)
# Tax amount
tax_list.append(("MOA", ["124", price_total * product_tax / 100]))
summary = [
("UNS", "S"),
# Number of line items in message
("CNT", ["2", total_line_item]),
# Taxable amount
("MOA", ["125", self.amount_untaxed]),
# Total amount
("MOA", ["128", self.amount_total]),
# Tax amount
("MOA", ["124", self.amount_tax]),
("MOA", ["8", "0"]),
("UNT", 33 + 11 * total_line_item + 2 * len(vals["tax"]), "1"),
]
summary = summary[:-2] + tax_list + summary[-2:]
return summary

View file

@ -1,3 +0,0 @@
The development of this module has been financially supported by:
* Camptocamp

View file

@ -1,6 +0,0 @@
UN/EDIFACT
United Nations rules for Elec­tronic Data Interchange for Administration, Commerce and Transport
This module will support exporting invoice in EDIFACT format.
https://www.stedi.com/edi/edifact/D96A/messages/INVOIC

View file

@ -1,440 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>Account Invoice EDIFACT</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="account-invoice-edifact">
<h1 class="title">Account Invoice EDIFACT</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:70d9ca517fbd902f6eb1d5b7a7e6b51be92f174ec45f39548e2972b519876286
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Alpha" src="https://img.shields.io/badge/maturity-Alpha-red.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/edi/tree/16.0/account_invoice_edifact"><img alt="OCA/edi" src="https://img.shields.io/badge/github-OCA%2Fedi-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/edi-16-0/edi-16-0-account_invoice_edifact"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/edi&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<dl class="docutils">
<dt>UN/EDIFACT</dt>
<dd>United Nations rules for Elec­tronic Data Interchange for Administration, Commerce and Transport</dd>
</dl>
<p>This module will support exporting invoice in EDIFACT format.</p>
<p><a class="reference external" href="https://www.stedi.com/edi/edifact/D96A/messages/INVOIC">https://www.stedi.com/edi/edifact/D96A/messages/INVOIC</a></p>
<div class="admonition important">
<p class="first admonition-title">Important</p>
<p class="last">This is an alpha version, the data model and design can change at any time without warning.
Only for development or testing purpose, do not use in production.
<a class="reference external" href="https://odoo-community.org/page/development-status">More details on development status</a></p>
</div>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-1">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-2">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-3">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-4">Contributors</a></li>
<li><a class="reference internal" href="#other-credits" id="toc-entry-5">Other credits</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-1">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/edi/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/edi/issues/new?body=module:%20account_invoice_edifact%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-2">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-3">Authors</a></h2>
<ul class="simple">
<li>Camptocamp</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-4">Contributors</a></h2>
<ul class="simple">
<li>Thien (Vo Hong) &lt;<a class="reference external" href="mailto:thienvh&#64;trobz.com">thienvh&#64;trobz.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="other-credits">
<h2><a class="toc-backref" href="#toc-entry-5">Other credits</a></h2>
<p>The development of this module has been financially supported by:</p>
<ul class="simple">
<li>Camptocamp</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/edi/tree/16.0/account_invoice_edifact">OCA/edi</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

@ -1,93 +0,0 @@
# Copyright 2023 Camptocamp
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.tests.common import TransactionCase
class TestEdifactInvoice(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
cls.base_edifact_model = cls.env["base.edifact"]
cls.company = cls.env.ref("base.main_company")
cls.product1 = cls.env.ref("product.product_product_4")
cls.product2 = cls.env.ref("product.product_product_1")
cls.invoice = cls.env["account.move"].create(
{
"company_id": cls.company.id,
"move_type": "out_invoice",
"partner_id": cls.env.ref(
"account_invoice_edifact.partner_edifact_invoiceto_dm"
).id,
"partner_shipping_id": cls.env.ref(
"account_invoice_edifact.partner_edifact_shipto_dm"
).id,
"invoice_user_id": cls.env.ref(
"account_invoice_edifact.user_edifact_sender_dm"
).id,
"currency_id": cls.company.currency_id.id,
"invoice_line_ids": [
(
0,
0,
{
"product_id": cls.product1.id,
"product_uom_id": cls.product1.uom_id.id,
"quantity": 12,
"price_unit": 42.42,
},
),
(
0,
0,
{
"product_id": cls.product2.id,
"product_uom_id": cls.product2.uom_id.id,
"quantity": 2,
"price_unit": 12.34,
},
),
],
}
)
cls.invoice.action_post()
def test_edifact_invoice_generate_data(self):
edifact_data = self.invoice.edifact_invoice_generate_data()
self.assertTrue(edifact_data)
self.assertEqual(isinstance(edifact_data, str), True)
def test_edifact_invoice_get_interchange(self):
interchange = self.invoice._edifact_invoice_get_interchange()
self.assertEqual(interchange.sender, ["9780201379624", "14"])
self.assertEqual(interchange.recipient, ["9780201379174", "14"])
self.assertEqual(interchange.syntax_identifier, ["UNOC", "3"])
def test_edifact_invoice_get_header(self):
segments = self.invoice._edifact_invoice_get_header()
seg = ("UNH", "1", ["INVOIC", "D", "96A", "UN", "EAN008"])
self.assertEqual(segments[0], seg)
self.assertEqual(len(segments), 26)
def test_edifact_invoice_get_product(self):
segments, vals = self.invoice._edifact_invoice_get_product()
self.assertEqual(len(segments), 24)
self.assertEqual(len(vals), 2)
def test_edifact_invoice_get_summary(self):
vals = {"tax": {0: 533.72}, "total_line_item": 2}
segments = self.invoice._edifact_invoice_get_summary(vals)
self.assertEqual(len(segments), 9)
def test_edifact_invoice_get_address(self):
partner = self.invoice.partner_id
if hasattr(partner, "street3"):
partner.street3 = "Address"
self.assertEqual(
self.invoice._edifact_invoice_get_address(partner), partner.street3
)
else:
self.assertEqual(
self.invoice._edifact_invoice_get_address(partner), partner.street
)

View file

@ -1,32 +0,0 @@
# Architecture
```mermaid
flowchart TD
U[Users] -->|HTTP| V[Views and QWeb Templates]
V --> C[Controllers]
V --> W[Wizards Transient Models]
C --> M[Models and ORM]
W --> M
M --> R[Reports]
DX[Data XML] --> M
S[Security ACLs and Groups] -. enforces .-> M
subgraph Account_invoice_edifact Module - account_invoice_edifact
direction LR
M:::layer
W:::layer
C:::layer
V:::layer
R:::layer
S:::layer
DX:::layer
end
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
```
Notes
- Views include tree/form/kanban templates and report templates.
- Controllers provide website/portal routes when present.
- Wizards are UI flows implemented with `models.TransientModel`.
- Data XML loads data/demo records; Security defines groups and access.

View file

@ -1,3 +0,0 @@
# Configuration
Refer to Odoo settings for account_invoice_edifact. Configure related models, access rights, and options as needed.

View file

@ -1,3 +0,0 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -1,7 +0,0 @@
# Dependencies
This addon depends on:
- [sale_management](../../odoo-bringout-oca-ocb-sale_management)
- [account](../../odoo-bringout-oca-ocb-account)
- [base_edifact](../../odoo-bringout-oca-edi-base_edifact)

View file

@ -1,4 +0,0 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon account_invoice_edifact or install in UI.

View file

@ -1,7 +0,0 @@
# Install
```bash
pip install odoo-bringout-oca-edi-framework-account_invoice_edifact"
# or
uv pip install odoo-bringout-oca-edi-framework-account_invoice_edifact"
```

View file

@ -1,12 +0,0 @@
# Models
Detected core models and extensions in account_invoice_edifact.
```mermaid
classDiagram
class account_move
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -1,6 +0,0 @@
# Overview
Packaged Odoo addon: account_invoice_edifact. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon account_invoice_edifact
- License: LGPL-3

View file

@ -1,3 +0,0 @@
# Reports
This module does not define custom reports.

View file

@ -1,8 +0,0 @@
# Security
This module does not define custom security rules or access controls beyond Odoo defaults.
Default Odoo security applies:
- Base user access through standard groups
- Model access inherited from dependencies
- No custom row-level security rules

View file

@ -1,5 +0,0 @@
# Troubleshooting
- Ensure Python and Odoo environment matches repo guidance.
- Check database connectivity and logs if startup fails.
- Validate that dependent addons listed in DEPENDENCIES.md are installed.

View file

@ -1,7 +0,0 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon account_invoice_edifact
```

View file

@ -1,3 +0,0 @@
# Wizards
This module does not include UI wizards.

View file

@ -1,44 +0,0 @@
[project]
name = "odoo-bringout-oca-edi-framework-account_invoice_edifact"
version = "16.0.0"
description = "Account Invoice EDIFACT - Generate customer invoices with EDIFACT/D96A format"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-edi-framework-sale_management>=16.0.0",
"odoo-bringout-oca-ocb-account>=16.0.0",
"odoo-bringout-oca-edi-framework-base_edifact>=16.0.0",
"requests>=2.25.1"
]
readme = "README.md"
requires-python = ">= 3.11"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]
[project.urls]
homepage = "https://github.com/bringout/0"
repository = "https://github.com/bringout/0"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.metadata]
allow-direct-references = true
[tool.hatch.build.targets.wheel]
packages = ["account_invoice_edifact"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]

View file

@ -1,45 +0,0 @@
# Account Invoice Export
Odoo addon: account_invoice_export
## Installation
```bash
pip install odoo-bringout-oca-edi-framework-account_invoice_export
```
## Dependencies
This addon depends on:
- account
- account_invoice_transmit_method
## Manifest Information
- **Name**: Account Invoice Export
- **Version**: 16.0.1.0.0
- **Category**: Invoicing Management
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/edi-framework](https://github.com/OCA/edi-framework) branch 16.0, addon `account_invoice_export`.
## License
This package maintains the original AGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -1,97 +0,0 @@
======================
Account Invoice Export
======================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:ded419ed17e642aaf14f71f78778c50e6480162d6931a6431f2574ffafa15adf
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fedi-lightgray.png?logo=github
:target: https://github.com/OCA/edi/tree/16.0/account_invoice_export
:alt: OCA/edi
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/edi-16-0/edi-16-0-account_invoice_export
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/edi&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
The goal of this module is to allow sending invoices in different format to external systems.
It extends the module `account_invoice_transmit_method`, adding options to configure an url and credentials (Basic Authentication).
In the UI a new button `Send ebill` send the invoice pdf to the configure url.
The actual sending of the invoice is manage by queue.job and the standard Odoo chatter on the invoice is used to inform the user on success/failure of the dispatch.
**Table of contents**
.. contents::
:local:
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/edi/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/edi/issues/new?body=module:%20account_invoice_export%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Camptocamp SA
Contributors
~~~~~~~~~~~~
* Thierry Ducrest <thierry.ducrest@camptocamp.com>
* Tam (Nguyen Duc) <tamnd@trobz.com>
Other credits
~~~~~~~~~~~~~
The development of this module has been financially supported by:
* Camptocamp
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
.. |maintainer-TDu| image:: https://github.com/TDu.png?size=40px
:target: https://github.com/TDu
:alt: TDu
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-TDu|
This module is part of the `OCA/edi <https://github.com/OCA/edi/tree/16.0/account_invoice_export>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -1,22 +0,0 @@
# Copyright 2020 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
{
"name": "Account Invoice Export",
"version": "16.0.1.0.0",
"category": "Invoicing Management",
"license": "AGPL-3",
"development_status": "Beta",
"summary": "",
"author": "Camptocamp SA, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/edi",
"depends": ["account", "account_invoice_transmit_method"],
"maintainers": ["TDu"],
"data": [
"data/mail_activity_type.xml",
"views/transmit_method.xml",
"views/account_move.xml",
"views/message_template.xml",
],
"installable": True,
}

View file

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record id="mail_activity_transmit_warning" model="mail.activity.type">
<field name="name">Transmission Error</field>
<field name="icon">fa-warning</field>
<field name="delay_count">0</field>
<field name="sequence">99</field>
<field name="decoration_type">warning</field>
</record>
</odoo>

View file

@ -1,149 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_export
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: account_invoice_export
#: model:ir.model.fields,help:account_invoice_export.field_account_bank_statement_line__send_through_http
#: model:ir.model.fields,help:account_invoice_export.field_account_move__send_through_http
#: model:ir.model.fields,help:account_invoice_export.field_account_payment__send_through_http
#: model:ir.model.fields,help:account_invoice_export.field_transmit_method__send_through_http
msgid "Adds a Send eBill button on the invoice"
msgstr ""
#. module: account_invoice_export
#. odoo-python
#: code:addons/account_invoice_export/models/account_move.py:0
#, python-format
msgid "An error of type {} occured."
msgstr ""
#. module: account_invoice_export
#: model_terms:ir.ui.view,arch_db:account_invoice_export.transmit_method_form
msgid ""
"By default the PDF of the invoice will be sent using the connection "
"parameters below (basic authenticaiton)."
msgstr ""
#. module: account_invoice_export
#: model_terms:ir.ui.view,arch_db:account_invoice_export.view_move_form
msgid "Ebill has already been sent. Are you sure you want to send it again ?"
msgstr ""
#. module: account_invoice_export
#: model:ir.model.fields,field_description:account_invoice_export.field_account_bank_statement_line__send_through_http
#: model:ir.model.fields,field_description:account_invoice_export.field_account_move__send_through_http
#: model:ir.model.fields,field_description:account_invoice_export.field_account_payment__send_through_http
#: model:ir.model.fields,field_description:account_invoice_export.field_transmit_method__send_through_http
msgid "Enable send eBill"
msgstr ""
#. module: account_invoice_export
#: model_terms:ir.ui.view,arch_db:account_invoice_export.exception_sending_invoice
msgid "Error sending invoice to"
msgstr ""
#. module: account_invoice_export
#. odoo-python
#: code:addons/account_invoice_export/models/account_move.py:0
#, python-format
msgid "HTTP error {status_code} sending invoice to {method_name}"
msgstr ""
#. module: account_invoice_export
#: model_terms:ir.ui.view,arch_db:account_invoice_export.transmit_method_form
msgid ""
"Handling specific connection needs and/or exporting other files can be done "
"through code."
msgstr ""
#. module: account_invoice_export
#: model:ir.model.fields,field_description:account_invoice_export.field_account_bank_statement_line__invoice_export_confirmed
#: model:ir.model.fields,field_description:account_invoice_export.field_account_move__invoice_export_confirmed
#: model:ir.model.fields,field_description:account_invoice_export.field_account_payment__invoice_export_confirmed
msgid "Invoice Export Confirmed"
msgstr ""
#. module: account_invoice_export
#: model:ir.model.fields,field_description:account_invoice_export.field_account_bank_statement_line__invoice_exported
#: model:ir.model.fields,field_description:account_invoice_export.field_account_move__invoice_exported
#: model:ir.model.fields,field_description:account_invoice_export.field_account_payment__invoice_exported
msgid "Invoice Exported"
msgstr ""
#. module: account_invoice_export
#. odoo-python
#: code:addons/account_invoice_export/models/account_move.py:0
#, python-format
msgid "Invoice successfuly sent to {}"
msgstr ""
#. module: account_invoice_export
#: model:ir.model,name:account_invoice_export.model_account_move
msgid "Journal Entry"
msgstr ""
#. module: account_invoice_export
#. odoo-python
#: code:addons/account_invoice_export/models/account_move.py:0
#, python-format
msgid "Nothing done, invoice has already been exported before."
msgstr ""
#. module: account_invoice_export
#: model:ir.model.fields,field_description:account_invoice_export.field_transmit_method__destination_pwd
msgid "Password"
msgstr ""
#. module: account_invoice_export
#: model_terms:ir.ui.view,arch_db:account_invoice_export.view_move_form
msgid "Resend eBill"
msgstr ""
#. module: account_invoice_export
#: model:ir.actions.server,name:account_invoice_export.action_send_ebill
#: model_terms:ir.ui.view,arch_db:account_invoice_export.view_move_form
msgid "Send eBill"
msgstr ""
#. module: account_invoice_export
#: model_terms:ir.ui.view,arch_db:account_invoice_export.exception_sending_invoice
msgid "The failed job has the uuid"
msgstr ""
#. module: account_invoice_export
#: model:mail.activity.type,name:account_invoice_export.mail_activity_transmit_warning
msgid "Transmission Error"
msgstr ""
#. module: account_invoice_export
#: model:ir.model,name:account_invoice_export.model_transmit_method
msgid "Transmit Method of a document"
msgstr ""
#. module: account_invoice_export
#. odoo-python
#: code:addons/account_invoice_export/models/account_move.py:0
#, python-format
msgid "Transmit method is not configured to send through HTTP"
msgstr ""
#. module: account_invoice_export
#: model:ir.model.fields,field_description:account_invoice_export.field_transmit_method__destination_url
msgid "Url"
msgstr ""
#. module: account_invoice_export
#: model:ir.model.fields,field_description:account_invoice_export.field_transmit_method__destination_user
msgid "User"
msgstr ""

View file

@ -1,156 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_invoice_export
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-08-23 12:06+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.6.2\n"
#. module: account_invoice_export
#: model:ir.model.fields,help:account_invoice_export.field_account_bank_statement_line__send_through_http
#: model:ir.model.fields,help:account_invoice_export.field_account_move__send_through_http
#: model:ir.model.fields,help:account_invoice_export.field_account_payment__send_through_http
#: model:ir.model.fields,help:account_invoice_export.field_transmit_method__send_through_http
msgid "Adds a Send eBill button on the invoice"
msgstr "Aggiunge un pulsante Invia e-fattura nella fattura"
#. module: account_invoice_export
#. odoo-python
#: code:addons/account_invoice_export/models/account_move.py:0
#, python-format
msgid "An error of type {} occured."
msgstr "Si è verificato un errore di tipo []."
#. module: account_invoice_export
#: model_terms:ir.ui.view,arch_db:account_invoice_export.transmit_method_form
msgid ""
"By default the PDF of the invoice will be sent using the connection "
"parameters below (basic authenticaiton)."
msgstr ""
"In modo predefinito il PDF della fattura verrà inviato utilizzando i "
"parametri di connessione sottostanti (autorizzazione base)."
#. module: account_invoice_export
#: model_terms:ir.ui.view,arch_db:account_invoice_export.view_move_form
msgid "Ebill has already been sent. Are you sure you want to send it again ?"
msgstr "L'e-fattura è già stata inviata. Si è sicuri di rispedirla?"
#. module: account_invoice_export
#: model:ir.model.fields,field_description:account_invoice_export.field_account_bank_statement_line__send_through_http
#: model:ir.model.fields,field_description:account_invoice_export.field_account_move__send_through_http
#: model:ir.model.fields,field_description:account_invoice_export.field_account_payment__send_through_http
#: model:ir.model.fields,field_description:account_invoice_export.field_transmit_method__send_through_http
msgid "Enable send eBill"
msgstr "Abilita invio e-fattura"
#. module: account_invoice_export
#: model_terms:ir.ui.view,arch_db:account_invoice_export.exception_sending_invoice
msgid "Error sending invoice to"
msgstr "Errore nell'invio della fattura a"
#. module: account_invoice_export
#. odoo-python
#: code:addons/account_invoice_export/models/account_move.py:0
#, python-format
msgid "HTTP error {status_code} sending invoice to {method_name}"
msgstr "Errore HTTP {status_code} nell'invio della fattura a {method_name}"
#. module: account_invoice_export
#: model_terms:ir.ui.view,arch_db:account_invoice_export.transmit_method_form
msgid ""
"Handling specific connection needs and/or exporting other files can be done "
"through code."
msgstr ""
"La gestione di esigenze specifiche di connessione e/o l'esportazione di "
"altri file può essere fatta attraverso il codice."
#. module: account_invoice_export
#: model:ir.model.fields,field_description:account_invoice_export.field_account_bank_statement_line__invoice_export_confirmed
#: model:ir.model.fields,field_description:account_invoice_export.field_account_move__invoice_export_confirmed
#: model:ir.model.fields,field_description:account_invoice_export.field_account_payment__invoice_export_confirmed
msgid "Invoice Export Confirmed"
msgstr "Esportazione fattura confermata"
#. module: account_invoice_export
#: model:ir.model.fields,field_description:account_invoice_export.field_account_bank_statement_line__invoice_exported
#: model:ir.model.fields,field_description:account_invoice_export.field_account_move__invoice_exported
#: model:ir.model.fields,field_description:account_invoice_export.field_account_payment__invoice_exported
msgid "Invoice Exported"
msgstr "Fattura esportata"
#. module: account_invoice_export
#. odoo-python
#: code:addons/account_invoice_export/models/account_move.py:0
#, python-format
msgid "Invoice successfuly sent to {}"
msgstr "Fattura inviata con successo a {}"
#. module: account_invoice_export
#: model:ir.model,name:account_invoice_export.model_account_move
msgid "Journal Entry"
msgstr "Registrazione contabile"
#. module: account_invoice_export
#. odoo-python
#: code:addons/account_invoice_export/models/account_move.py:0
#, python-format
msgid "Nothing done, invoice has already been exported before."
msgstr "Nessuna attività, la fattura è già stata esportata in precedenza."
#. module: account_invoice_export
#: model:ir.model.fields,field_description:account_invoice_export.field_transmit_method__destination_pwd
msgid "Password"
msgstr "Password"
#. module: account_invoice_export
#: model_terms:ir.ui.view,arch_db:account_invoice_export.view_move_form
msgid "Resend eBill"
msgstr "Reinvia e-fattura"
#. module: account_invoice_export
#: model:ir.actions.server,name:account_invoice_export.action_send_ebill
#: model_terms:ir.ui.view,arch_db:account_invoice_export.view_move_form
msgid "Send eBill"
msgstr "Invia e-fattura"
#. module: account_invoice_export
#: model_terms:ir.ui.view,arch_db:account_invoice_export.exception_sending_invoice
msgid "The failed job has the uuid"
msgstr "Il lavoro in errore ha uuid"
#. module: account_invoice_export
#: model:mail.activity.type,name:account_invoice_export.mail_activity_transmit_warning
msgid "Transmission Error"
msgstr "Errore di trasmissione"
#. module: account_invoice_export
#: model:ir.model,name:account_invoice_export.model_transmit_method
msgid "Transmit Method of a document"
msgstr "Metodo trasmissione di un documento"
#. module: account_invoice_export
#. odoo-python
#: code:addons/account_invoice_export/models/account_move.py:0
#, python-format
msgid "Transmit method is not configured to send through HTTP"
msgstr "Il metodo di trasmissione non è configurato per inviare attraverso HTTP"
#. module: account_invoice_export
#: model:ir.model.fields,field_description:account_invoice_export.field_transmit_method__destination_url
msgid "Url"
msgstr "URL"
#. module: account_invoice_export
#: model:ir.model.fields,field_description:account_invoice_export.field_transmit_method__destination_user
msgid "User"
msgstr "Utente"

View file

@ -1,2 +0,0 @@
from . import account_move
from . import transmit_method

View file

@ -1,121 +0,0 @@
# Copyright 2020 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
import requests
import odoo
from odoo import _, fields, models
from odoo.exceptions import UserError, except_orm
class AccountMove(models.Model):
_inherit = "account.move"
invoice_exported = fields.Boolean(copy=False)
# Usefull when the distant system does not validate the export synchronously
invoice_export_confirmed = fields.Boolean(copy=False)
send_through_http = fields.Boolean(related="transmit_method_id.send_through_http")
def export_invoice(self):
resend_invoice = self.env.context.get("resend_ebill", False)
for invoice in self:
invoice._job_export_invoice(resend_invoice)
def _job_export_invoice(self, resend_invoice=False):
"""Export ebill to external server and update the chatter."""
self.ensure_one()
if (
not resend_invoice
and self.invoice_exported
and self.invoice_export_confirmed
):
return _("Nothing done, invoice has already been exported before.")
try:
res = self._export_invoice()
except Exception as e:
values = {
"job_id": self.env.context.get("job_uuid"),
"error_detail": "",
"error_type": type(e).__name__,
"transmit_method_name": self.transmit_method_id.name,
}
if isinstance(e, except_orm):
values["error_detail"] = e.name
with odoo.api.Environment.manage():
with odoo.registry(self.env.cr.dbname).cursor() as new_cr:
# Create a new environment with new cursor database
new_env = odoo.api.Environment(
new_cr, self.env.uid, self.env.context
)
# The chatter of the invoice need to be updated, when the job fails
self.with_env(new_env).log_error_sending_invoice(values)
raise
self.log_success_sending_invoice()
return res
def _export_invoice(self):
"""Export electronic invoice to external service."""
if not self.transmit_method_id.send_through_http:
raise UserError(_("Transmit method is not configured to send through HTTP"))
file_data = self._get_file_for_transmission_method()
headers = self.transmit_method_id.get_transmission_http_header()
url = self.transmit_method_id.get_transmission_url()
# TODO: Should be configurable as a parameter
res = requests.post(url, headers=headers, files=file_data, timeout=10)
if res.status_code != 200:
raise UserError(
_(
"HTTP error {status_code} sending invoice to {method_name}".format(
status_code=res.status_code,
method_name=self.transmit_method_id.name,
)
)
)
self.invoice_exported = self.invoice_export_confirmed = True
return res.text
def _get_file_for_transmission_method(self):
"""Return the file description to send.
Use the format expected by the request library
By default returns the PDF report.
"""
report = "account.report_invoice"
pdf, _ = self.env["ir.actions.report"]._render(report, [self.id])
filename = self._get_report_base_filename().replace("/", "_") + ".pdf"
return {"file": (filename, pdf, "application/pdf")}
def log_error_sending_invoice(self, values):
"""Log an exception in invoice's chatter when sending fails.
If an exception already exists it is update otherwise a new one
is created.
"""
activity_type = "account_invoice_export.mail_activity_transmit_warning"
activity = self.activity_reschedule(
[activity_type], date_deadline=fields.Date.today()
)
if not activity:
template = "account_invoice_export.exception_sending_invoice"
message = self.env["ir.ui.view"]._render_template(template, values=values)
activity = self.activity_schedule(
activity_type, summary="Job error sending invoice", note=message
)
error_log = values.get("error_detail")
if not error_log:
error_log = _("An error of type {} occured.").format(
values.get("error_type")
)
activity.note += "<div class='mt16'><p>{}</p></div>".format(error_log)
def log_success_sending_invoice(self):
"""Log success sending invoice and clear existing exception, if any."""
self.activity_feedback(
["account_invoice_export.mail_activity_transmit_warning"],
feedback="It worked on a later try",
)
self.message_post(
body=_("Invoice successfuly sent to {}").format(
self.transmit_method_id.name
)
)

View file

@ -1,36 +0,0 @@
# Copyright 2020 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
import base64
from odoo import fields, models
class TransmitMethod(models.Model):
_inherit = "transmit.method"
send_through_http = fields.Boolean(
string="Enable send eBill", help="Adds a Send eBill button on the invoice"
)
destination_url = fields.Char(string="Url")
destination_user = fields.Char(string="User", copy=False)
destination_pwd = fields.Char(string="Password", copy=False)
def get_transmission_http_header(self):
"""Generate the HTTP header needed by the transmission method.
For now only basic authentication is implemented.
"""
self.ensure_one()
auth = "{}:{}".format(self.destination_user or "", self.destination_pwd or "")
auth64 = base64.encodebytes(auth.encode("ascii"))[:-1]
return {"Authorization": "Basic " + auth64.decode("utf-8")}
def get_transmission_url(self):
"""Returns the base url used to export.
Override it to add variable parameters.
"""
self.ensure_one()
return self.destination_url or ""

View file

@ -1,2 +0,0 @@
* Thierry Ducrest <thierry.ducrest@camptocamp.com>
* Tam (Nguyen Duc) <tamnd@trobz.com>

View file

@ -1,3 +0,0 @@
The development of this module has been financially supported by:
* Camptocamp

View file

@ -1,6 +0,0 @@
The goal of this module is to allow sending invoices in different format to external systems.
It extends the module `account_invoice_transmit_method`, adding options to configure an url and credentials (Basic Authentication).
In the UI a new button `Send ebill` send the invoice pdf to the configure url.
The actual sending of the invoice is manage by queue.job and the standard Odoo chatter on the invoice is used to inform the user on success/failure of the dispatch.

View file

@ -1,435 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>Account Invoice Export</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="account-invoice-export">
<h1 class="title">Account Invoice Export</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:ded419ed17e642aaf14f71f78778c50e6480162d6931a6431f2574ffafa15adf
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/edi/tree/16.0/account_invoice_export"><img alt="OCA/edi" src="https://img.shields.io/badge/github-OCA%2Fedi-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/edi-16-0/edi-16-0-account_invoice_export"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/edi&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>The goal of this module is to allow sending invoices in different format to external systems.</p>
<p>It extends the module <cite>account_invoice_transmit_method</cite>, adding options to configure an url and credentials (Basic Authentication).
In the UI a new button <cite>Send ebill</cite> send the invoice pdf to the configure url.</p>
<p>The actual sending of the invoice is manage by queue.job and the standard Odoo chatter on the invoice is used to inform the user on success/failure of the dispatch.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-1">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-2">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-3">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-4">Contributors</a></li>
<li><a class="reference internal" href="#other-credits" id="toc-entry-5">Other credits</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-1">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/edi/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/edi/issues/new?body=module:%20account_invoice_export%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-2">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-3">Authors</a></h2>
<ul class="simple">
<li>Camptocamp SA</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-4">Contributors</a></h2>
<ul class="simple">
<li>Thierry Ducrest &lt;<a class="reference external" href="mailto:thierry.ducrest&#64;camptocamp.com">thierry.ducrest&#64;camptocamp.com</a>&gt;</li>
<li>Tam (Nguyen Duc) &lt;<a class="reference external" href="mailto:tamnd&#64;trobz.com">tamnd&#64;trobz.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="other-credits">
<h2><a class="toc-backref" href="#toc-entry-5">Other credits</a></h2>
<p>The development of this module has been financially supported by:</p>
<ul class="simple">
<li>Camptocamp</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/TDu"><img alt="TDu" src="https://github.com/TDu.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/edi/tree/16.0/account_invoice_export">OCA/edi</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

@ -1,52 +0,0 @@
# Copyright 2023 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.tests.common import TransactionCase
class CommonCase(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
cls.send_exception = cls.env.ref(
"account_invoice_export.mail_activity_transmit_warning"
)
cls.transmit_method = cls.env["transmit.method"].create(
{
"name": "HttpPost",
"code": "httppost",
"customer_ok": True,
"send_through_http": True,
"destination_url": "https://example.com/post",
"destination_user": "user",
"destination_pwd": "pwd",
}
)
cls.country = cls.env.ref("base.ch")
cls.customer = cls.env.ref("base.res_partner_1")
cls.account = cls.env["account.account"].search(
[("account_type", "=", "income"), ("company_id", "=", cls.env.company.id)],
limit=1,
)
cls.product = cls.env.ref("product.product_product_1")
cls.invoice_1 = cls.env["account.move"].create(
{
"partner_id": cls.customer.id,
"move_type": "out_invoice",
"transmit_method_id": cls.transmit_method.id,
"invoice_line_ids": [
(
0,
0,
{
"account_id": cls.account.id,
"product_id": cls.product.product_variant_ids[:1].id,
"name": "Product 1",
"quantity": 4.0,
"price_unit": 123.00,
},
)
],
}
)
cls.invoice_1.action_post()

View file

@ -1,32 +0,0 @@
# Copyright 2020 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from .common import CommonCase
class TestExportAcountInvoice(CommonCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
def test_log_error_in_chatter(self):
values = {
"job_id": "13:123:123",
"send_error": 500,
"transmit_method_name": "SendMethod",
}
self.invoice_1.log_error_sending_invoice(values)
self.assertEqual(len(self.invoice_1.activity_ids), 1)
self.assertEqual(
self.invoice_1.activity_ids[0].activity_type_id, self.send_exception
)
# Multiple error only one exception message
self.invoice_1.log_error_sending_invoice(values)
self.assertEqual(len(self.invoice_1.activity_ids), 1)
# At success exception messages are cleared
self.invoice_1.log_success_sending_invoice()
self.assertEqual(len(self.invoice_1.activity_ids), 0)
def test_get_file_description(self):
res = self.invoice_1._get_file_for_transmission_method()
self.assertTrue(res["file"])

View file

@ -1,56 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_move_form" model="ir.ui.view">
<field name="name">Account Invoice Export on Invoice form view</field>
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_move_form" />
<field name="arch" type="xml">
<field name="transmit_method_id" position="after">
<field name="invoice_exported" invisible="1" />
<field name="invoice_export_confirmed" invisible="1" />
<field name="send_through_http" invisible="1" />
</field>
<button name="action_invoice_sent" position="after">
<button
name="export_invoice"
string="Send eBill"
type="object"
attrs="{'invisible':['|', '|', '|', ('send_through_http', '=', False), ('state', '!=', 'posted'), ('invoice_exported', '=', True), ('move_type', 'not in', ('out_invoice', 'out_refund'))]}"
groups="base.group_user"
class="oe_highlight"
/>
<button
name="export_invoice"
string="Resend eBill"
type="object"
attrs="{'invisible':['|', '|', '|', ('send_through_http', '=', False), ('state', '!=', 'posted'), ('invoice_exported', '=', False), ('move_type', 'not in', ('out_invoice', 'out_refund'))]}"
context="{'resend_ebill': True}"
groups="base.group_user"
class="oe_highlight"
confirm="Ebill has already been sent. Are you sure you want to send it again ?"
/>
</button>
</field>
</record>
<record id="view_invoice_tree" model="ir.ui.view">
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_invoice_tree" />
<field name="arch" type="xml">
<field name="state" position="after">
<field
name="activity_exception_decoration"
widget="activity_exception"
/>
</field>
</field>
</record>
<record model="ir.actions.server" id="action_send_ebill">
<field name="name">Send eBill</field>
<field name="model_id" ref="account.model_account_move" />
<field name="binding_model_id" ref="account.model_account_move" />
<field name="state">code</field>
<field name="code">
records.export_invoice()
</field>
</record>
</odoo>

View file

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<template id="exception_sending_invoice">
<div>
<p>Error sending invoice to <t t-out="transmit_method_name" />.</p>
<p>The failed job has the uuid <t t-out="job_id" /></p>
</div>
</template>
</odoo>

View file

@ -1,44 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="transmit_method_form" model="ir.ui.view">
<field name="name">Transmit Method Form view Export</field>
<field name="model">transmit.method</field>
<field
name="inherit_id"
ref="account_invoice_transmit_method.transmit_method_form"
/>
<field name="arch" type="xml">
<xpath expr="//group[@name='main']" position="after">
<group
name="export"
attrs="{'invisible': [('customer_ok', '=', False)]}"
>
<field name="send_through_http" />
<div
role="alert"
class="alert alert-info"
colspan="2"
attrs="{'invisible': [('send_through_http', '=', False)]}"
>
<p
>By default the PDF of the invoice will be sent using the connection parameters below (basic authenticaiton).</p>
<p
>Handling specific connection needs and/or exporting other files can be done through code.</p>
</div>
<field
name="destination_url"
attrs="{'invisible': [('send_through_http', '=', False)]}"
/>
<field
name="destination_user"
attrs="{'invisible': [('send_through_http', '=', False)]}"
/>
<field
name="destination_pwd"
attrs="{'invisible': [('send_through_http', '=', False)]}"
/>
</group>
</xpath>
</field>
</record>
</odoo>

View file

@ -1,32 +0,0 @@
# Architecture
```mermaid
flowchart TD
U[Users] -->|HTTP| V[Views and QWeb Templates]
V --> C[Controllers]
V --> W[Wizards Transient Models]
C --> M[Models and ORM]
W --> M
M --> R[Reports]
DX[Data XML] --> M
S[Security ACLs and Groups] -. enforces .-> M
subgraph Account_invoice_export Module - account_invoice_export
direction LR
M:::layer
W:::layer
C:::layer
V:::layer
R:::layer
S:::layer
DX:::layer
end
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
```
Notes
- Views include tree/form/kanban templates and report templates.
- Controllers provide website/portal routes when present.
- Wizards are UI flows implemented with `models.TransientModel`.
- Data XML loads data/demo records; Security defines groups and access.

View file

@ -1,3 +0,0 @@
# Configuration
Refer to Odoo settings for account_invoice_export. Configure related models, access rights, and options as needed.

View file

@ -1,3 +0,0 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -1,6 +0,0 @@
# Dependencies
This addon depends on:
- [account](../../odoo-bringout-oca-ocb-account)
- [account_invoice_transmit_method](../../odoo-bringout-oca-account-invoicing-account_invoice_transmit_method)

View file

@ -1,4 +0,0 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon account_invoice_export or install in UI.

View file

@ -1,7 +0,0 @@
# Install
```bash
pip install odoo-bringout-oca-edi-framework-account_invoice_export"
# or
uv pip install odoo-bringout-oca-edi-framework-account_invoice_export"
```

View file

@ -1,13 +0,0 @@
# Models
Detected core models and extensions in account_invoice_export.
```mermaid
classDiagram
class account_move
class transmit_method
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -1,6 +0,0 @@
# Overview
Packaged Odoo addon: account_invoice_export. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon account_invoice_export
- License: LGPL-3

View file

@ -1,3 +0,0 @@
# Reports
This module does not define custom reports.

Some files were not shown because too many files have changed in this diff Show more