diff --git a/l10n_ro_account_edi_ubl/models/account_move.py b/l10n_ro_account_edi_ubl/models/account_move.py index 6baa53432..ec5a3670e 100644 --- a/l10n_ro_account_edi_ubl/models/account_move.py +++ b/l10n_ro_account_edi_ubl/models/account_move.py @@ -402,6 +402,10 @@ def action_post(self): "partner_id": invoice.partner_id.id, "product_name": line.name, "product_code": line.l10n_ro_vendor_code, + "product_id": line.product_id.id, + "price": line.price_unit, + "currency_id": invoice.currency_id.id, + "product_uom": line.product_uom_id.id, } ) else: diff --git a/l10n_ro_message_spv/README.rst b/l10n_ro_message_spv/README.rst new file mode 100644 index 000000000..440766003 --- /dev/null +++ b/l10n_ro_message_spv/README.rst @@ -0,0 +1,95 @@ +==================== +Romania - Mesaje SPV +==================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:335eed572846ba614b3502fae8b7f6ec5048ee48986d92b1764ec2bf1c9cce45 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fl10n--romania-lightgray.png?logo=github + :target: https://github.com/OCA/l10n-romania/tree/16.0/l10n_ro_message_spv + :alt: OCA/l10n-romania +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/l10n-romania-16-0/l10n-romania-16-0-l10n_ro_message_spv + :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/l10n-romania&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + + + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Terrabit +* NextERP Romania + +Contributors +~~~~~~~~~~~~ + +* `Terrabit `_: + + * Dorin Hongu + + + +Do not contact contributors directly about support or help with technical issues. + +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-dhongu| image:: https://github.com/dhongu.png?size=40px + :target: https://github.com/dhongu + :alt: dhongu + +Current `maintainer `__: + +|maintainer-dhongu| + +This module is part of the `OCA/l10n-romania `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/l10n_ro_message_spv/__init__.py b/l10n_ro_message_spv/__init__.py new file mode 100644 index 000000000..7e07e2275 --- /dev/null +++ b/l10n_ro_message_spv/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2024 Dorin Hongu + + + + Romania e-Invoicing: Download SPV Message + + code + model._l10n_ro_download_message_spv() + 1 + days + -1 + + + + diff --git a/l10n_ro_message_spv/i18n/l10n_ro_message_spv.pot b/l10n_ro_message_spv/i18n/l10n_ro_message_spv.pot new file mode 100644 index 000000000..8ce9b7a56 --- /dev/null +++ b/l10n_ro_message_spv/i18n/l10n_ro_message_spv.pot @@ -0,0 +1,262 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_ro_message_spv +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.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: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__attachment_anaf_pdf_id +msgid "ANAF PDF" +msgstr "" + +#. module: l10n_ro_message_spv +#: code:addons/l10n_ro_message_spv/models/message_spv.py:0 +#, python-format +msgid "ANAF configuration is missing." +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__amount +msgid "Amount" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__attachment_id +msgid "Attachment" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__cif +msgid "CIF" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model,name:l10n_ro_message_spv.model_res_company +msgid "Companies" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__company_id +msgid "Company" +msgstr "" + +#. module: l10n_ro_message_spv +#: model_terms:ir.ui.view,arch_db:l10n_ro_message_spv.view_l10n_ro_message_spv_form +#: model_terms:ir.ui.view,arch_db:l10n_ro_message_spv.view_l10n_ro_message_spv_tree +msgid "Create Invoice" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__create_uid +msgid "Created by" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__create_date +msgid "Created on" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__currency_id +msgid "Currency" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__date +msgid "Date" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__details +msgid "Details" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__display_name +msgid "Display Name" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields.selection,name:l10n_ro_message_spv.selection__l10n_ro_message_spv__state__done +#: model_terms:ir.ui.view,arch_db:l10n_ro_message_spv.view_l10n_ro_message_spv_search +msgid "Done" +msgstr "" + +#. module: l10n_ro_message_spv +#: model_terms:ir.ui.view,arch_db:l10n_ro_message_spv.view_l10n_ro_message_spv_form +#: model_terms:ir.ui.view,arch_db:l10n_ro_message_spv.view_l10n_ro_message_spv_tree +msgid "Download" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields.selection,name:l10n_ro_message_spv.selection__l10n_ro_message_spv__state__downloaded +msgid "Downloaded" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields.selection,name:l10n_ro_message_spv.selection__l10n_ro_message_spv__state__draft +#: model_terms:ir.ui.view,arch_db:l10n_ro_message_spv.view_l10n_ro_message_spv_search +msgid "Draft" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__attachment_embedded_pdf_id +msgid "Embedded PDF" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__error +#: model:ir.model.fields.selection,name:l10n_ro_message_spv.selection__l10n_ro_message_spv__message_type__error +#: model:ir.model.fields.selection,name:l10n_ro_message_spv.selection__l10n_ro_message_spv__state__error +msgid "Error" +msgstr "" + +#. module: l10n_ro_message_spv +#: model_terms:ir.ui.view,arch_db:l10n_ro_message_spv.view_l10n_ro_message_spv_search +msgid "Errors" +msgstr "" + +#. module: l10n_ro_message_spv +#: model_terms:ir.ui.view,arch_db:l10n_ro_message_spv.view_l10n_ro_message_spv_form +msgid "Errors and Info" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__file_name +msgid "File Name" +msgstr "" + +#. module: l10n_ro_message_spv +#: model_terms:ir.ui.view,arch_db:l10n_ro_message_spv.view_l10n_ro_message_spv_form +msgid "Files" +msgstr "" + +#. module: l10n_ro_message_spv +#: model_terms:ir.ui.view,arch_db:l10n_ro_message_spv.view_l10n_ro_message_spv_form +msgid "Get Embedded PDF" +msgstr "" + +#. module: l10n_ro_message_spv +#: model_terms:ir.ui.view,arch_db:l10n_ro_message_spv.view_l10n_ro_message_spv_form +#: model_terms:ir.ui.view,arch_db:l10n_ro_message_spv.view_l10n_ro_message_spv_tree +msgid "Get Invoice" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__id +msgid "ID" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields.selection,name:l10n_ro_message_spv.selection__l10n_ro_message_spv__message_type__in_invoice +msgid "In Invoice" +msgstr "" + +#. module: l10n_ro_message_spv +#: model_terms:ir.ui.view,arch_db:l10n_ro_message_spv.view_l10n_ro_message_spv_search +msgid "In Invoices" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__invoice_id +#: model:ir.model.fields.selection,name:l10n_ro_message_spv.selection__l10n_ro_message_spv__state__invoice +msgid "Invoice" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv____last_update +msgid "Last Modified on" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__write_date +msgid "Last Updated on" +msgstr "" + +#. module: l10n_ro_message_spv +#: model_terms:ir.ui.view,arch_db:l10n_ro_message_spv.view_l10n_ro_message_spv_form +msgid "Message" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__name +msgid "Message ID" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model,name:l10n_ro_message_spv.model_l10n_ro_message_spv +msgid "Message SPV" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.actions.act_window,name:l10n_ro_message_spv.action_l10n_ro_message_spv +#: model:ir.ui.menu,name:l10n_ro_message_spv.menu_l10n_ro_message_spv +msgid "Messages SPV" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields.selection,name:l10n_ro_message_spv.selection__l10n_ro_message_spv__message_type__out_invoice +msgid "Out Invoice" +msgstr "" + +#. module: l10n_ro_message_spv +#: model_terms:ir.ui.view,arch_db:l10n_ro_message_spv.view_l10n_ro_message_spv_search +msgid "Out Invoices" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__partner_id +msgid "Partner" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__ref +#: model_terms:ir.ui.view,arch_db:l10n_ro_message_spv.view_l10n_ro_message_spv_form +msgid "Reference" +msgstr "" + +#. module: l10n_ro_message_spv +#: model_terms:ir.ui.view,arch_db:l10n_ro_message_spv.view_l10n_ro_message_spv_form +msgid "Render PDF" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__request_id +msgid "Request ID" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.actions.server,name:l10n_ro_message_spv.ir_cron_res_company_download_message_spv_ir_actions_server +#: model:ir.cron,cron_name:l10n_ro_message_spv.ir_cron_res_company_download_message_spv +#: model:ir.cron,name:l10n_ro_message_spv.ir_cron_res_company_download_message_spv +msgid "Romania e-Invoicing: Download SPV Message" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__state +msgid "State" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__message_type +msgid "Type" +msgstr "" + +#. module: l10n_ro_message_spv +#: model:ir.model.fields,field_description:l10n_ro_message_spv.field_l10n_ro_message_spv__attachment_xml_id +msgid "XML" +msgstr "" diff --git a/l10n_ro_message_spv/models/__init__.py b/l10n_ro_message_spv/models/__init__.py new file mode 100644 index 000000000..8993a60ff --- /dev/null +++ b/l10n_ro_message_spv/models/__init__.py @@ -0,0 +1,2 @@ +from . import message_spv +from . import res_company diff --git a/l10n_ro_message_spv/models/message_spv.py b/l10n_ro_message_spv/models/message_spv.py new file mode 100644 index 000000000..77a36c5c1 --- /dev/null +++ b/l10n_ro_message_spv/models/message_spv.py @@ -0,0 +1,358 @@ +# Copyright (C) 2024 Dorin Hongu " + if err_msg: + err_msg = "Erori validare ANAF:
" + err_msg + return err_msg + except Exception as e: + _logger.warning(f"Error while checking the Zipped XML file: {e}") + return err_msg + + def get_invoice_from_move(self): + messages_without_invoice = self.filtered(lambda m: not m.invoice_id) + message_ids = messages_without_invoice.mapped("name") + request_ids = messages_without_invoice.mapped("request_id") + invoices = self.env["account.move"].search( + [ + "|", + ("l10n_ro_edi_download", "in", message_ids), + ("l10n_ro_edi_transaction", "in", request_ids), + ] + ) + for message in messages_without_invoice: + invoice = invoices.filtered( + lambda i: i.l10n_ro_edi_download == message.name + or i.l10n_ro_edi_transaction == message.request_id + ) + if not invoice: + domain = [ + ("partner_id", "=", message.partner_id.id), + ("ref", "=", message.ref), + ("move_type", "=", message.message_type), + ] + invoice = self.env["account.move"].search(domain, limit=1) + + if invoice: + state = "invoice" + if invoice.edi_state == "sent": + state = "done" + message.write( + { + "invoice_id": invoice.id, + "partner_id": invoice.commercial_partner_id.id, + "state": state, + } + ) + + def create_invoice(self): + for message in self.filtered(lambda m: not m.invoice_id): + if not message.message_type == "in_invoice": + continue + + move_obj = self.env["account.move"].with_company(message.company_id) + new_invoice = move_obj.with_context(default_move_type="in_invoice").create( + { + "name": "/", + "ref": message.ref, + "partner_id": message.partner_id.id, + "l10n_ro_edi_download": message.name, + "l10n_ro_edi_transaction": message.request_id, + } + ) + zip_content = message.attachment_id.raw + attachment = new_invoice.l10n_ro_save_anaf_xml_file(zip_content) + try: + new_invoice.l10n_ro_process_anaf_xml_file(attachment) + except Exception as e: + message.write({"state": "error", "error": str(e)}) + continue + + exist_invoice = move_obj.search( + [ + ("ref", "=", new_invoice.ref), + ("move_type", "=", "in_invoice"), + ("state", "=", "posted"), + ("partner_id", "=", new_invoice.partner_id.id), + ("id", "!=", new_invoice.id), + ], + limit=1, + ) + if exist_invoice: + domain = [ + ("res_model", "=", "account.move"), + ("res_id", "=", new_invoice.id), + ] + attachments = self.env["ir.attachment"].sudo().search(domain) + attachments.write({"res_id": exist_invoice.id}) + new_invoice.unlink() + exist_invoice.write( + { + "l10n_ro_edi_download": message.name, + "l10n_ro_edi_transaction": message.request_id, + } + ) + new_invoice = exist_invoice + + state = "invoice" + + message.write({"invoice_id": new_invoice.id, "state": state}) + + def render_anaf_pdf(self): + for message in self: + if not message.attachment_id: + continue + if not message.attachment_xml_id: + message.get_xml_fom_zip() + + xml_file = message.attachment_xml_id.raw + headers = {"Content-Type": "text/plain"} + xml = xml_file + val1 = "FACT1" + if b"`_: + + * Dorin Hongu + + + +Do not contact contributors directly about support or help with technical issues. diff --git a/l10n_ro_message_spv/readme/DESCRIPTION.rst b/l10n_ro_message_spv/readme/DESCRIPTION.rst new file mode 100644 index 000000000..e69de29bb diff --git a/l10n_ro_message_spv/security/ir.model.access.csv b/l10n_ro_message_spv/security/ir.model.access.csv new file mode 100644 index 000000000..51fb70e42 --- /dev/null +++ b/l10n_ro_message_spv/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_l10n_ro_message_spv,access_l10n_ro_message_spv,model_l10n_ro_message_spv,account.group_account_user,1,1,1,1 diff --git a/l10n_ro_message_spv/security/security.xml b/l10n_ro_message_spv/security/security.xml new file mode 100644 index 000000000..8393c04f1 --- /dev/null +++ b/l10n_ro_message_spv/security/security.xml @@ -0,0 +1,13 @@ + + + + + Message SPV + + [('company_id', 'in', company_ids + [False])] + + + + diff --git a/l10n_ro_message_spv/static/description/icon.png b/l10n_ro_message_spv/static/description/icon.png new file mode 100644 index 000000000..593120cf1 Binary files /dev/null and b/l10n_ro_message_spv/static/description/icon.png differ diff --git a/l10n_ro_message_spv/static/description/icon.svg b/l10n_ro_message_spv/static/description/icon.svg new file mode 100644 index 000000000..2cd9181bb --- /dev/null +++ b/l10n_ro_message_spv/static/description/icon.svg @@ -0,0 +1,107 @@ + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/l10n_ro_message_spv/static/description/index.html b/l10n_ro_message_spv/static/description/index.html new file mode 100644 index 000000000..a8f245f2c --- /dev/null +++ b/l10n_ro_message_spv/static/description/index.html @@ -0,0 +1,433 @@ + + + + + +Romania - Mesaje SPV + + + +
+

Romania - Mesaje SPV

+ + +

Beta License: AGPL-3 OCA/l10n-romania Translate me on Weblate Try me on Runboat

+

Table of contents

+ + +
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Terrabit
  • +
  • NextERP Romania
  • +
+
+
+

Contributors

+ +

Do not contact contributors directly about support or help with technical issues.

+
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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.

+

Current maintainer:

+

dhongu

+

This module is part of the OCA/l10n-romania project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/l10n_ro_message_spv/static/src/js/message_spv.js b/l10n_ro_message_spv/static/src/js/message_spv.js new file mode 100644 index 000000000..5dd9d940a --- /dev/null +++ b/l10n_ro_message_spv/static/src/js/message_spv.js @@ -0,0 +1,40 @@ +odoo.define("account.message.spv.tree", function (require) { + "use strict"; + + var ListController = require("web.ListController"); + var ListView = require("web.ListView"); + var viewRegistry = require("web.view_registry"); + + function messageRenderButtons($node) { + var self = this; + var refresh_button = $("
"); + refresh_button.html( + '' + ); + refresh_button.find("button").on("click", function () { + self.do_action( + "l10n_ro_message_spv.ir_cron_res_company_download_message_spv_ir_actions_server", + {} + ); + }); + this.$buttons.append(refresh_button); + if ($node) { + this.$buttons.appendTo($node); + } + } + + var MessageSPVListController = ListController.extend({ + renderButtons: function () { + this._super.apply(this, arguments); + return messageRenderButtons.apply(this, arguments); + }, + }); + + var MessageSPVListView = ListView.extend({ + config: _.extend({}, ListView.prototype.config, { + Controller: MessageSPVListController, + }), + }); + + viewRegistry.add("message_spv_tree", MessageSPVListView); +}); diff --git a/l10n_ro_message_spv/views/message_spv_view.xml b/l10n_ro_message_spv/views/message_spv_view.xml new file mode 100644 index 000000000..66bbec393 --- /dev/null +++ b/l10n_ro_message_spv/views/message_spv_view.xml @@ -0,0 +1,176 @@ + + + + + + l10n.ro.message.spv.tree + l10n.ro.message.spv + tree + + +
+
+ + + + + + + + + + + + +
+
+
+ + + l10n.ro.message.spv.form + l10n.ro.message.spv + form + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + l10n.ro.message.spv.search + l10n.ro.message.spv + search + + + + + + + + + + + + + + + + + + + + + + + + + + Messages SPV + l10n.ro.message.spv + tree,form + + + +
diff --git a/setup/l10n_ro_message_spv/odoo/addons/l10n_ro_message_spv b/setup/l10n_ro_message_spv/odoo/addons/l10n_ro_message_spv new file mode 120000 index 000000000..eea2d907c --- /dev/null +++ b/setup/l10n_ro_message_spv/odoo/addons/l10n_ro_message_spv @@ -0,0 +1 @@ +../../../../l10n_ro_message_spv \ No newline at end of file diff --git a/setup/l10n_ro_message_spv/setup.py b/setup/l10n_ro_message_spv/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/l10n_ro_message_spv/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)