diff --git a/README.md b/README.md index 6f3bd9ba588..3687070038c 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ addon | version | maintainers | summary [account_journal_restrict_mode](account_journal_restrict_mode/) | 16.0.1.1.0 | | Lock All Posted Entries of Journals. [account_loan](account_loan/) | 16.0.1.0.5 | [![etobella](https://github.com/etobella.png?size=30px)](https://github.com/etobella) | Account Loan management [account_lock_date_update](account_lock_date_update/) | 16.0.1.0.1 | | Allow an Account adviser to update locking date without having access to all technical settings +[account_lock_to_date](account_lock_to_date/) | 16.0.1.0.0 | | Allows to set an account lock date in the future. [account_move_budget](account_move_budget/) | 16.0.1.0.0 | | Create Accounting Budgets [account_move_fiscal_month](account_move_fiscal_month/) | 16.0.1.0.0 | | Display the fiscal month on journal entries/item [account_move_fiscal_year](account_move_fiscal_year/) | 16.0.1.0.0 | | Display the fiscal year on journal entries/item diff --git a/account_lock_to_date/README.rst b/account_lock_to_date/README.rst new file mode 100644 index 00000000000..edbeed48b58 --- /dev/null +++ b/account_lock_to_date/README.rst @@ -0,0 +1,93 @@ +==================== +Account Lock To Date +==================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:d9c89dea8edd605f8e986c2c2932c4ed82c20498b0eb130cb476013084315d1e + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Faccount--financial--tools-lightgray.png?logo=github + :target: https://github.com/OCA/account-financial-tools/tree/16.0/account_lock_to_date + :alt: OCA/account-financial-tools +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/account-financial-tools-16-0/account-financial-tools-16-0-account_lock_to_date + :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/account-financial-tools&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows to set a Period and Fiscal year Locking end dates. This +will prevent users from posting journal entries on a date after the defined +period or fiscal year end date. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To set a new lock to dates, go to *Invoicing / Accounting / Actions / Update accounting lock to dates*. + +A user without an Adviser group will not be able to post or update posted +journal entries on the date "Lock To Date for Non-Advisers" or after. + +A user that has an Adviser group will not be able to post or update posted +journal entries on the date "Lock To Date" or after. + +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 +~~~~~~~ + +* ForgeFlow + +Contributors +~~~~~~~~~~~~ + +* ForgeFlow + ** Jordi Ballester Alomar +* `Aion Tech `_: + + * Simone Rubino + +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/account-financial-tools `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_lock_to_date/__init__.py b/account_lock_to_date/__init__.py new file mode 100644 index 00000000000..aee8895e7a3 --- /dev/null +++ b/account_lock_to_date/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import wizards diff --git a/account_lock_to_date/__manifest__.py b/account_lock_to_date/__manifest__.py new file mode 100644 index 00000000000..e662bbfa758 --- /dev/null +++ b/account_lock_to_date/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2019 ForgeFlow S.L. +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Account Lock To Date", + "summary": """ + Allows to set an account lock date in the future.""", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "ForgeFlow, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/account-financial-tools", + "installable": True, + "depends": ["account"], + "data": [ + "security/ir.model.access.csv", + "wizards/account_update_lock_to_date.xml", + ], +} diff --git a/account_lock_to_date/i18n/account_lock_to_date.pot b/account_lock_to_date/i18n/account_lock_to_date.pot new file mode 100644 index 00000000000..22f456741ea --- /dev/null +++ b/account_lock_to_date/i18n/account_lock_to_date.pot @@ -0,0 +1,193 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_lock_to_date +# +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_lock_to_date +#: model:ir.model,name:account_lock_to_date.model_account_update_lock_to_date +msgid "Account Update Lock_to_date" +msgstr "" + +#. module: account_lock_to_date +#: model_terms:ir.ui.view,arch_db:account_lock_to_date.account_update_lock_to_date_form_view +msgid "Cancel" +msgstr "" + +#. module: account_lock_to_date +#: model:ir.model,name:account_lock_to_date.model_res_company +msgid "Companies" +msgstr "" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__company_id +msgid "Company" +msgstr "" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__create_uid +msgid "Created by" +msgstr "" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__create_date +msgid "Created on" +msgstr "" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__display_name +msgid "Display Name" +msgstr "" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__id +msgid "ID" +msgstr "" + +#. module: account_lock_to_date +#: model:ir.model,name:account_lock_to_date.model_account_move +msgid "Journal Entry" +msgstr "" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date____last_update +msgid "Last Modified on" +msgstr "" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__write_date +msgid "Last Updated on" +msgstr "" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__fiscalyear_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_res_company__fiscalyear_lock_to_date +msgid "Lock To Date" +msgstr "" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__period_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_res_company__period_lock_to_date +msgid "Lock To Date for Non-Advisers" +msgstr "" + +#. module: account_lock_to_date +#: model:ir.model.fields,help:account_lock_to_date.field_account_update_lock_to_date__fiscalyear_lock_to_date +msgid "" +"No users, including Advisers, can edit accounts after and inclusive of this " +"date. Use it for fiscal year locking for example." +msgstr "" + +#. module: account_lock_to_date +#: model:ir.model.fields,help:account_lock_to_date.field_res_company__fiscalyear_lock_to_date +msgid "" +"No users, including Advisers, can edit accounts after this date. Use it for " +"fiscal year locking for example." +msgstr "" + +#. module: account_lock_to_date +#: model:ir.model.fields,help:account_lock_to_date.field_account_update_lock_to_date__period_lock_to_date +msgid "" +"Only users with the 'Adviser' role can edit accounts after and inclusive of " +"this date. Use it for period locking inside an open fiscal year, for " +"example." +msgstr "" + +#. module: account_lock_to_date +#: model:ir.model.fields,help:account_lock_to_date.field_res_company__period_lock_to_date +msgid "" +"Only users with the 'Adviser' role can edit accounts after this date. Use it" +" for period locking inside an open fiscal year, for example." +msgstr "" + +#. module: account_lock_to_date +#. odoo-python +#: code:addons/account_lock_to_date/models/res_company.py:0 +#, python-format +msgid "The lock date for advisors is irreversible and can't be removed." +msgstr "" + +#. module: account_lock_to_date +#. odoo-python +#: code:addons/account_lock_to_date/models/res_company.py:0 +#, python-format +msgid "" +"The new lock to date for advisors must be set after the previous lock to " +"date." +msgstr "" + +#. module: account_lock_to_date +#. odoo-python +#: code:addons/account_lock_to_date/models/res_company.py:0 +#, python-format +msgid "" +"There are still unposted entries in the period to date you want to lock. You" +" should either post or delete them." +msgstr "" + +#. module: account_lock_to_date +#: model_terms:ir.ui.view,arch_db:account_lock_to_date.account_update_lock_to_date_form_view +msgid "Update" +msgstr "" + +#. module: account_lock_to_date +#: model:ir.actions.act_window,name:account_lock_to_date.account_update_lock_to_date_act_window +#: model:ir.ui.menu,name:account_lock_to_date.account_update_lock_to_date_menu +msgid "Update accounting lock to dates" +msgstr "" + +#. module: account_lock_to_date +#. odoo-python +#: code:addons/account_lock_to_date/wizards/account_update_lock_to_date.py:0 +#, python-format +msgid "You are not allowed to execute this action." +msgstr "" + +#. module: account_lock_to_date +#. odoo-python +#: code:addons/account_lock_to_date/models/account_move.py:0 +#, python-format +msgid "" +"You cannot add/modify entries after and inclusive of the lock to date %s" +msgstr "" + +#. module: account_lock_to_date +#. odoo-python +#: code:addons/account_lock_to_date/models/account_move.py:0 +#, python-format +msgid "" +"You cannot add/modify entries after and inclusive of the lock to date %s. " +"Check the company settings or ask someone with the 'Adviser' role" +msgstr "" + +#. module: account_lock_to_date +#. odoo-python +#: code:addons/account_lock_to_date/models/res_company.py:0 +#, python-format +msgid "" +"You cannot define stricter conditions on advisors than on users. Please make" +" sure that the lock date on advisor is set after the lock date for users." +msgstr "" + +#. module: account_lock_to_date +#. odoo-python +#: code:addons/account_lock_to_date/models/res_company.py:0 +#, python-format +msgid "" +"You cannot lock a period that is not finished yet. Please make sure that the" +" lock date for advisors is set at or after the last day of the next month." +msgstr "" diff --git a/account_lock_to_date/i18n/es.po b/account_lock_to_date/i18n/es.po new file mode 100644 index 00000000000..089dce50de0 --- /dev/null +++ b/account_lock_to_date/i18n/es.po @@ -0,0 +1,214 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_lock_to_date +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-08-09 15:10+0000\n" +"Last-Translator: Ivorra78 \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_lock_to_date +#: model:ir.model,name:account_lock_to_date.model_account_update_lock_to_date +msgid "Account Update Lock_to_date" +msgstr "Actualización de cuenta Lock_to_date" + +#. module: account_lock_to_date +#: model_terms:ir.ui.view,arch_db:account_lock_to_date.account_update_lock_to_date_form_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: account_lock_to_date +#: model:ir.model,name:account_lock_to_date.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__company_id +msgid "Company" +msgstr "Companía" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__display_name +msgid "Display Name" +msgstr "Mostrar Nombre" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__id +msgid "ID" +msgstr "ID (identificación)" + +#. module: account_lock_to_date +#: model:ir.model,name:account_lock_to_date.model_account_move +msgid "Journal Entry" +msgstr "Entrada Diaria" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date____last_update +msgid "Last Modified on" +msgstr "Última Modificación el" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__write_uid +msgid "Last Updated by" +msgstr "Actualizado por Última vez por" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__write_date +msgid "Last Updated on" +msgstr "Última Actualización el" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__fiscalyear_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_res_company__fiscalyear_lock_to_date +msgid "Lock To Date" +msgstr "Bloquear hasta la fecha" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__period_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_res_company__period_lock_to_date +msgid "Lock To Date for Non-Advisers" +msgstr "Bloqueo hasta la fecha para no asesores" + +#. module: account_lock_to_date +#: model:ir.model.fields,help:account_lock_to_date.field_account_update_lock_to_date__fiscalyear_lock_to_date +msgid "" +"No users, including Advisers, can edit accounts after and inclusive of this " +"date. Use it for fiscal year locking for example." +msgstr "" +"Ningún usuario, incluidos los Asesores, puede editar cuentas después de esta " +"fecha e inclusive. Utilícelo, por ejemplo, para el cierre del ejercicio." + +#. module: account_lock_to_date +#: model:ir.model.fields,help:account_lock_to_date.field_res_company__fiscalyear_lock_to_date +msgid "" +"No users, including Advisers, can edit accounts after this date. Use it for " +"fiscal year locking for example." +msgstr "" +"Ningún usuario, incluidos los Asesores, puede editar cuentas después de esta " +"fecha. Utilícelo, por ejemplo, para el cierre del ejercicio." + +#. module: account_lock_to_date +#: model:ir.model.fields,help:account_lock_to_date.field_account_update_lock_to_date__period_lock_to_date +msgid "" +"Only users with the 'Adviser' role can edit accounts after and inclusive of " +"this date. Use it for period locking inside an open fiscal year, for " +"example." +msgstr "" +"Sólo los usuarios con el rol de 'Asesor' pueden editar cuentas después e " +"inclusive de esta fecha. Utilícelo para bloquear periodos dentro de un " +"ejercicio fiscal abierto, por ejemplo." + +#. module: account_lock_to_date +#: model:ir.model.fields,help:account_lock_to_date.field_res_company__period_lock_to_date +msgid "" +"Only users with the 'Adviser' role can edit accounts after this date. Use it" +" for period locking inside an open fiscal year, for example." +msgstr "" +"Sólo los usuarios con el rol de 'Asesor' pueden editar cuentas después de " +"esta fecha. Utilícelo para bloquear periodos dentro de un ejercicio fiscal " +"abierto, por ejemplo." + +#. module: account_lock_to_date +#: code:addons/account_lock_to_date/models/res_company.py:0 +#, python-format +msgid "The lock date for advisors is irreversible and can't be removed." +msgstr "" +"La fecha de bloqueo de los asesores es irreversible y no puede eliminarse." + +#. module: account_lock_to_date +#: code:addons/account_lock_to_date/models/res_company.py:0 +#, python-format +msgid "" +"The new lock to date for advisors must be set after the previous lock to " +"date." +msgstr "" +"La nueva fecha de bloqueo para los asesores debe fijarse después de la fecha " +"de bloqueo anterior." + +#. module: account_lock_to_date +#: code:addons/account_lock_to_date/models/res_company.py:0 +#, python-format +msgid "" +"There are still unposted entries in the period to date you want to lock. You" +" should either post or delete them." +msgstr "" +"Todavía hay entradas sin contabilizar en el periodo hasta la fecha que desea " +"bloquear. Debe contabilizarlas o eliminarlas." + +#. module: account_lock_to_date +#: model_terms:ir.ui.view,arch_db:account_lock_to_date.account_update_lock_to_date_form_view +msgid "Update" +msgstr "Actualización" + +#. module: account_lock_to_date +#: model:ir.actions.act_window,name:account_lock_to_date.account_update_lock_to_date_act_window +#: model:ir.ui.menu,name:account_lock_to_date.account_update_lock_to_date_menu +msgid "Update accounting lock to dates" +msgstr "Actualizar el bloqueo contable a fechas" + +#. module: account_lock_to_date +#: code:addons/account_lock_to_date/wizards/account_update_lock_to_date.py:0 +#, python-format +msgid "You are not allowed to execute this action." +msgstr "No puede ejecutar esta acción." + +#. module: account_lock_to_date +#: code:addons/account_lock_to_date/models/account_move.py:0 +#, python-format +msgid "" +"You cannot add/modify entries after and inclusive of the lock to date %s" +msgstr "" +"No puede añadir/modificar entradas después e inclusive del bloqueo hasta la " +"fecha %s" + +#. module: account_lock_to_date +#: code:addons/account_lock_to_date/models/account_move.py:0 +#, python-format +msgid "" +"You cannot add/modify entries after and inclusive of the lock to date %s. " +"Check the company settings or ask someone with the 'Adviser' role" +msgstr "" +"No se pueden añadir/modificar entradas después e incluyendo el bloqueo hasta " +"la fecha %s. Compruebe la configuración de la empresa o pregunte a alguien " +"con el rol de 'Asesor'" + +#. module: account_lock_to_date +#: code:addons/account_lock_to_date/models/res_company.py:0 +#, python-format +msgid "" +"You cannot define stricter conditions on advisors than on users. Please make" +" sure that the lock date on advisor is set after the lock date for users." +msgstr "" +"No se pueden definir condiciones más estrictas para los asesores que para " +"los usuarios. Asegúrese de que la fecha de bloqueo de los asesores es " +"posterior a la fecha de bloqueo de los usuarios." + +#. module: account_lock_to_date +#: code:addons/account_lock_to_date/models/res_company.py:0 +#, python-format +msgid "" +"You cannot lock a period that is not finished yet. Please make sure that the" +" lock date for advisors is set at or after the last day of the next month." +msgstr "" +"No se puede bloquear un periodo que aún no ha terminado. Asegúrese de que la " +"fecha de bloqueo de los asesores sea igual o posterior al último día del mes " +"siguiente." diff --git a/account_lock_to_date/i18n/fr.po b/account_lock_to_date/i18n/fr.po new file mode 100644 index 00000000000..f0bb5b3bcbb --- /dev/null +++ b/account_lock_to_date/i18n/fr.po @@ -0,0 +1,204 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_lock_to_date +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2022-11-09 20:44+0000\n" +"Last-Translator: Valaeys Stéphane \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.14.1\n" + +#. module: account_lock_to_date +#: model:ir.model,name:account_lock_to_date.model_account_update_lock_to_date +msgid "Account Update Lock_to_date" +msgstr "Verrouillage des dates comptables futures" + +#. module: account_lock_to_date +#: model_terms:ir.ui.view,arch_db:account_lock_to_date.account_update_lock_to_date_form_view +msgid "Cancel" +msgstr "Annuler" + +#. module: account_lock_to_date +#: model:ir.model,name:account_lock_to_date.model_res_company +msgid "Companies" +msgstr "Sociétés" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__company_id +msgid "Company" +msgstr "Société" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__id +msgid "ID" +msgstr "ID" + +#. module: account_lock_to_date +#: model:ir.model,name:account_lock_to_date.model_account_move +msgid "Journal Entry" +msgstr "Pièce comptable" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date____last_update +msgid "Last Modified on" +msgstr "Dernière modification le" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__write_date +msgid "Last Updated on" +msgstr "Dernière mise à jour le" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__fiscalyear_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_res_company__fiscalyear_lock_to_date +msgid "Lock To Date" +msgstr "Date de verrouillage future" + +#. module: account_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_account_update_lock_to_date__period_lock_to_date +#: model:ir.model.fields,field_description:account_lock_to_date.field_res_company__period_lock_to_date +msgid "Lock To Date for Non-Advisers" +msgstr "Date de verrouillage future pour les non-conseillers" + +#. module: account_lock_to_date +#: model:ir.model.fields,help:account_lock_to_date.field_account_update_lock_to_date__fiscalyear_lock_to_date +msgid "" +"No users, including Advisers, can edit accounts after and inclusive of this " +"date. Use it for fiscal year locking for example." +msgstr "" +"Aucun utilisateur, y compris les conseillers, ne peuvent modifier des " +"éléments comptables à partir de et y compris cette date. À utiliser pour " +"limiter un exercice fiscal, par exemple." + +#. module: account_lock_to_date +#: model:ir.model.fields,help:account_lock_to_date.field_res_company__fiscalyear_lock_to_date +msgid "" +"No users, including Advisers, can edit accounts after this date. Use it for " +"fiscal year locking for example." +msgstr "" +"Aucun utilisateur, y compris les conseillers, ne peuvent modifier des " +"éléments comptables après cette date." + +#. module: account_lock_to_date +#: model:ir.model.fields,help:account_lock_to_date.field_account_update_lock_to_date__period_lock_to_date +msgid "" +"Only users with the 'Adviser' role can edit accounts after and inclusive of " +"this date. Use it for period locking inside an open fiscal year, for example." +msgstr "" + +#. module: account_lock_to_date +#: model:ir.model.fields,help:account_lock_to_date.field_res_company__period_lock_to_date +msgid "" +"Only users with the 'Adviser' role can edit accounts after this date. Use it " +"for period locking inside an open fiscal year, for example." +msgstr "" + +#. module: account_lock_to_date +#: code:addons/account_lock_to_date/models/res_company.py:0 +#, python-format +msgid "The lock date for advisors is irreversible and can't be removed." +msgstr "" + +#. module: account_lock_to_date +#: code:addons/account_lock_to_date/models/res_company.py:0 +#, python-format +msgid "" +"The new lock to date for advisors must be set after the previous lock to " +"date." +msgstr "" + +#. module: account_lock_to_date +#: code:addons/account_lock_to_date/models/res_company.py:0 +#, python-format +msgid "" +"There are still unposted entries in the period to date you want to lock. You " +"should either post or delete them." +msgstr "" + +#. module: account_lock_to_date +#: model_terms:ir.ui.view,arch_db:account_lock_to_date.account_update_lock_to_date_form_view +msgid "Update" +msgstr "Mettre à jour" + +#. module: account_lock_to_date +#: model:ir.actions.act_window,name:account_lock_to_date.account_update_lock_to_date_act_window +#: model:ir.ui.menu,name:account_lock_to_date.account_update_lock_to_date_menu +msgid "Update accounting lock to dates" +msgstr "Mettre à jour les dates de verrouillage futures" + +#. module: account_lock_to_date +#: code:addons/account_lock_to_date/wizards/account_update_lock_to_date.py:0 +#, python-format +msgid "You are not allowed to execute this action." +msgstr "Vous n'êtes pas autorisé à exécuter cette action." + +#. module: account_lock_to_date +#: code:addons/account_lock_to_date/models/account_move.py:0 +#, python-format +msgid "" +"You cannot add/modify entries after and inclusive of the lock to date %s" +msgstr "" +"Il n'est pas permis d'ajouter / modifier des éléments comptables après et y " +"compris la date de %s" + +#. module: account_lock_to_date +#: code:addons/account_lock_to_date/models/account_move.py:0 +#, python-format +msgid "" +"You cannot add/modify entries after and inclusive of the lock to date %s. " +"Check the company settings or ask someone with the 'Adviser' role" +msgstr "" +"Vous n'avez pas le droit d'ajouter / modifier des éléments comptables après " +"et y compris la date de %s. Veuillez vérifier la configuration de la société " +"ou vous rapprocher d'une personne avec le rôle de conseiller." + +#. module: account_lock_to_date +#: code:addons/account_lock_to_date/models/res_company.py:0 +#, python-format +msgid "" +"You cannot define stricter conditions on advisors than on users. Please make " +"sure that the lock date on advisor is set after the lock date for users." +msgstr "" +"Il n'est pas permis de définir des conditions plus strictes pour les " +"conseillers que les autres utilisateurs. Veuillez vous assurer que la date " +"de verrouillage future pour les conseillers et ultérieure à celle pour les " +"autres utilisateurs." + +#. module: account_lock_to_date +#: code:addons/account_lock_to_date/models/res_company.py:0 +#, python-format +msgid "" +"You cannot lock a period that is not finished yet. Please make sure that the " +"lock date for advisors is set at or after the last day of the next month." +msgstr "" +"Vous ne pouvez pas verrouiller une période qui n'est pas encore finie. " +"Veuille vous assurer que la date pour les conseillers est après le dernier " +"jour du mois prochain." diff --git a/account_lock_to_date/models/__init__.py b/account_lock_to_date/models/__init__.py new file mode 100644 index 00000000000..25ee4054fd4 --- /dev/null +++ b/account_lock_to_date/models/__init__.py @@ -0,0 +1,2 @@ +from . import res_company +from . import account_move diff --git a/account_lock_to_date/models/account_move.py b/account_lock_to_date/models/account_move.py new file mode 100644 index 00000000000..f5bfc0b832a --- /dev/null +++ b/account_lock_to_date/models/account_move.py @@ -0,0 +1,54 @@ +# Copyright 2019 ForgeFlow S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import _, models +from odoo.exceptions import ValidationError + + +class AccountMove(models.Model): + _inherit = "account.move" + + def _check_lock_to_dates(self): + """Prevent moves that are on or after lock to date. + + Advisors have more freedom than other users and are only constrained + by the fiscalyear_lock_to_date. + Other users will also be restricted by the period_lock_to_date. + """ + is_advisor = self.user_has_groups("account.group_account_manager") + for move in self: + advisor_lock_to_date = move.company_id.fiscalyear_lock_to_date + user_lock_to_date = move.company_id.period_lock_to_date + if is_advisor: + lock_to_date = advisor_lock_to_date or False + else: + lock_to_date = ( + min(user_lock_to_date, advisor_lock_to_date) + if user_lock_to_date and advisor_lock_to_date + else user_lock_to_date or advisor_lock_to_date or False + ) + if lock_to_date and move.date >= lock_to_date: + if is_advisor: + message = _( + "You cannot add/modify entries after and " + "inclusive of the lock to date %s" + ) % (lock_to_date,) + else: + message = _( + "You cannot add/modify entries after and " + "inclusive of the lock to date %s. " + "Check the company settings or ask someone " + "with the 'Adviser' role" + ) % (lock_to_date,) + raise ValidationError(message) + + def action_post(self): + self._check_lock_to_dates() + return super().action_post() + + def button_cancel(self): + self._check_lock_to_dates() + return super().button_cancel() + + def button_draft(self): + self._check_lock_to_dates() + return super().button_draft() diff --git a/account_lock_to_date/models/res_company.py b/account_lock_to_date/models/res_company.py new file mode 100644 index 00000000000..6adc757d1e4 --- /dev/null +++ b/account_lock_to_date/models/res_company.py @@ -0,0 +1,138 @@ +# Copyright 2019 ForgeFlow S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +import calendar +import time +from datetime import datetime +from time import mktime + +from dateutil.relativedelta import relativedelta + +from odoo import SUPERUSER_ID, _, fields, models +from odoo.exceptions import ValidationError +from odoo.tools.misc import DEFAULT_SERVER_DATE_FORMAT + + +class ResCompany(models.Model): + _inherit = "res.company" + + period_lock_to_date = fields.Date( + string="Lock To Date for Non-Advisers", + help="Only users with the 'Adviser' role can edit " + "accounts after this date. " + "Use it for period locking inside an open fiscal year, " + "for example.", + ) + fiscalyear_lock_to_date = fields.Date( + string="Lock To Date", + help="No users, including Advisers, can edit accounts after " + "this date. Use it for fiscal year locking for example.", + ) + + def write(self, vals): + # fiscalyear_lock_date can't be set to a prior date + if "fiscalyear_lock_to_date" in vals or "period_lock_to_date" in vals: + self._check_lock_to_dates(vals) + return super(ResCompany, self).write(vals) + + def _check_lock_to_dates(self, vals): + """Check the lock to dates for the current companies. + + :param vals: The values passed to the write method. + """ + period_lock_to_date = vals.get("period_lock_to_date") + fiscalyear_lock_to_date = vals.get("fiscalyear_lock_to_date") + + next_month = datetime.now() + relativedelta(months=+1) + days_next_month = calendar.monthrange(next_month.year, next_month.month) + next_month = next_month.replace(day=days_next_month[1]).timetuple() + next_month = datetime.fromtimestamp(mktime(next_month)).date() + for company in self: + old_fiscalyear_lock_to_date = company.fiscalyear_lock_to_date + + # The user attempts to remove the lock date for advisors + if ( + old_fiscalyear_lock_to_date + and not fiscalyear_lock_to_date + and "fiscalyear_lock_to_date" in vals + and not self._uid == SUPERUSER_ID + ): + raise ValidationError( + _( + "The lock date for advisors is " + "irreversible and can't be removed." + ) + ) + + # The user attempts to set a lock date for advisors prior + # to the previous one + if ( + old_fiscalyear_lock_to_date + and fiscalyear_lock_to_date + and fiscalyear_lock_to_date > old_fiscalyear_lock_to_date + ): + raise ValidationError( + _( + "The new lock to date for advisors must be set after " + "the previous lock to date." + ) + ) + + # In case of no new fiscal year in vals, fallback to the oldest + if not fiscalyear_lock_to_date: + if old_fiscalyear_lock_to_date: + fiscalyear_lock_to_date = old_fiscalyear_lock_to_date + else: + continue + + # The user attempts to set a lock date for advisors after + # the first day of next month + if fiscalyear_lock_to_date < next_month: + raise ValidationError( + _( + "You cannot lock a period that is not finished yet. " + "Please make sure that the lock date for advisors is " + "set at or after the last day of the next month." + ) + ) + + # In case of no new period lock to date in vals, + # fallback to the one defined in the company + if not period_lock_to_date: + if company.period_lock_date: + period_lock_to_date = time.strptime( + company.period_lock_to_date, DEFAULT_SERVER_DATE_FORMAT + ) + else: + continue + + # The user attempts to set a lock to date for advisors + # prior to the lock to date for users + if period_lock_to_date > fiscalyear_lock_to_date: + raise ValidationError( + _( + "You cannot define stricter conditions on advisors " + "than on users. Please make sure that the lock date " + "on advisor is set after the lock date for users." + ) + ) + + def _validate_fiscalyear_lock(self, values): + res = super()._validate_fiscalyear_lock(values) + if values.get("fiscalyear_lock_to_date"): + nb_draft_entries = self.env["account.move"].search( + [ + ("company_id", "in", self.ids), + ("state", "=", "draft"), + ("date", ">=", values["fiscalyear_lock_to_date"]), + ], + limit=1, + ) + if nb_draft_entries: + raise ValidationError( + _( + "There are still unposted entries in the period to date" + " you want to lock. " + "You should either post or delete them." + ) + ) + return res diff --git a/account_lock_to_date/readme/CONTRIBUTORS.rst b/account_lock_to_date/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..7ce03b5a8d4 --- /dev/null +++ b/account_lock_to_date/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* ForgeFlow + ** Jordi Ballester Alomar +* `Aion Tech `_: + + * Simone Rubino diff --git a/account_lock_to_date/readme/DESCRIPTION.rst b/account_lock_to_date/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..e1301431252 --- /dev/null +++ b/account_lock_to_date/readme/DESCRIPTION.rst @@ -0,0 +1,3 @@ +This module allows to set a Period and Fiscal year Locking end dates. This +will prevent users from posting journal entries on a date after the defined +period or fiscal year end date. diff --git a/account_lock_to_date/readme/USAGE.rst b/account_lock_to_date/readme/USAGE.rst new file mode 100644 index 00000000000..cbf12935ab1 --- /dev/null +++ b/account_lock_to_date/readme/USAGE.rst @@ -0,0 +1,7 @@ +To set a new lock to dates, go to *Invoicing / Accounting / Actions / Update accounting lock to dates*. + +A user without an Adviser group will not be able to post or update posted +journal entries on the date "Lock To Date for Non-Advisers" or after. + +A user that has an Adviser group will not be able to post or update posted +journal entries on the date "Lock To Date" or after. diff --git a/account_lock_to_date/security/ir.model.access.csv b/account_lock_to_date/security/ir.model.access.csv new file mode 100644 index 00000000000..7afa005185a --- /dev/null +++ b/account_lock_to_date/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_account_update_lock_to_date,Full access on account.update.lock_to_date,model_account_update_lock_to_date,account.group_account_invoice,1,1,1,1 diff --git a/account_lock_to_date/static/description/icon.png b/account_lock_to_date/static/description/icon.png new file mode 100644 index 00000000000..3a0328b516c Binary files /dev/null and b/account_lock_to_date/static/description/icon.png differ diff --git a/account_lock_to_date/static/description/index.html b/account_lock_to_date/static/description/index.html new file mode 100644 index 00000000000..c6732afad6f --- /dev/null +++ b/account_lock_to_date/static/description/index.html @@ -0,0 +1,439 @@ + + + + + +Account Lock To Date + + + +
+

Account Lock To Date

+ + +

Beta License: AGPL-3 OCA/account-financial-tools Translate me on Weblate Try me on Runboat

+

This module allows to set a Period and Fiscal year Locking end dates. This +will prevent users from posting journal entries on a date after the defined +period or fiscal year end date.

+

Table of contents

+ +
+

Usage

+

To set a new lock to dates, go to Invoicing / Accounting / Actions / Update accounting lock to dates.

+

A user without an Adviser group will not be able to post or update posted +journal entries on the date “Lock To Date for Non-Advisers” or after.

+

A user that has an Adviser group will not be able to post or update posted +journal entries on the date “Lock To Date” or after.

+
+
+

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

+
    +
  • ForgeFlow
  • +
+
+
+

Contributors

+ +
+
+

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.

+

This module is part of the OCA/account-financial-tools project on GitHub.

+

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

+
+
+
+ + diff --git a/account_lock_to_date/tests/__init__.py b/account_lock_to_date/tests/__init__.py new file mode 100644 index 00000000000..663d0707c92 --- /dev/null +++ b/account_lock_to_date/tests/__init__.py @@ -0,0 +1 @@ +from . import test_account_lock_to_date_update diff --git a/account_lock_to_date/tests/test_account_lock_to_date_update.py b/account_lock_to_date/tests/test_account_lock_to_date_update.py new file mode 100644 index 00000000000..c99f1c1c066 --- /dev/null +++ b/account_lock_to_date/tests/test_account_lock_to_date_update.py @@ -0,0 +1,145 @@ +# Copyright 2019 ForgeFlow S.L. +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from datetime import datetime + +from odoo.exceptions import ValidationError +from odoo.tests.common import TransactionCase +from odoo.tools.misc import DEFAULT_SERVER_DATE_FORMAT + + +class TestAccountLockToDateUpdate(TransactionCase): + def setUp(self): + super(TestAccountLockToDateUpdate, self).setUp() + self.company = self.env.ref("base.main_company") + self.demo_user = self.env.ref("base.user_demo") + self.adviser_group = self.env.ref("account.group_account_manager") + self.UpdateLockToDateUpdateObj = self.env[ + "account.update.lock_to_date" + ].with_user(self.demo_user) + self.AccountObj = self.env["account.account"] + self.AccountJournalObj = self.env["account.journal"] + self.AccountMoveObj = self.env["account.move"] + self.bank_journal = self.AccountJournalObj.create( + { + "name": "Bank Journal - BJ", + "code": "BJ", + "type": "bank", + "company_id": self.company.id, + } + ) + self.account_type_recv = "asset_receivable" + self.account_type_rev = "income" + + self.account_recv = self.AccountObj.create( + { + "code": "RECVDR", + "name": "Receivable (test)", + "reconcile": True, + "account_type": self.account_type_recv, + } + ) + self.account_sale = self.AccountObj.create( + { + "code": "SALEDR", + "name": "Receivable (sale)", + "reconcile": True, + "account_type": self.account_type_rev, + } + ) + + def create_account_move(self, date_str): + return self.AccountMoveObj.create( + { + "journal_id": self.bank_journal.id, + "date": date_str, + "line_ids": [ + ( + 0, + 0, + { + "name": "Debit", + "debit": 1000, + "account_id": self.account_recv.id, + }, + ), + ( + 0, + 0, + { + "name": "Credit", + "credit": 1000, + "account_id": self.account_sale.id, + }, + ), + ], + } + ) + + def create_account_lock_date_update(self): + return self.UpdateLockToDateUpdateObj.create({"company_id": self.company.id}) + + def test_01_update_without_access(self): + wizard = self.create_account_lock_date_update() + wizard.write( + { + "period_lock_to_date": "2900-01-01", + "fiscalyear_lock_to_date": "2900-01-01", + } + ) + self.demo_user.write({"groups_id": [(3, self.adviser_group.id)]}) + with self.assertRaises(ValidationError): + wizard.with_user(self.demo_user.id).execute() + + def test_02_update_with_access(self): + wizard = self.create_account_lock_date_update() + wizard.write( + { + "period_lock_to_date": "2900-01-01", + "fiscalyear_lock_to_date": "2900-02-01", + } + ) + self.demo_user.write({"groups_id": [(4, self.adviser_group.id)]}) + wizard.with_user(self.demo_user.id).execute() + self.assertEqual( + self.company.period_lock_to_date, + datetime.strptime("2900-01-01", DEFAULT_SERVER_DATE_FORMAT).date(), + ) + self.assertEqual( + self.company.fiscalyear_lock_to_date, + datetime.strptime("2900-02-01", DEFAULT_SERVER_DATE_FORMAT).date(), + ) + + def test_03_create_move_outside_period(self): + """We test that we cannot create journal entries after the + locked date""" + self.company.period_lock_to_date = "2900-01-01" + self.company.fiscalyear_lock_to_date = "2900-02-01" + user = self.demo_user + adviser_group = self.adviser_group + self.assertTrue(user in adviser_group.users) + user.groups_id -= adviser_group + # pre-condition + self.assertFalse(user in adviser_group.users) + + move = self.create_account_move("2900-01-01") + with self.assertRaises(ValidationError): + move.with_user(user.id).action_post() + + def test_04_create_move_inside_period(self): + """We test that we can successfully create a journal entry + within period that is not locked""" + self.company.period_lock_to_date = "2900-01-01" + self.company.fiscalyear_lock_to_date = "2900-02-01" + move = self.create_account_move("2800-01-01") + move.with_user(self.demo_user.id).action_post() + self.assertEqual(move.state, "posted") + + def test_05_lock_period_with_draft_moves(self): + """We test that we cannot change the fiscal year lock to date + if there are draft journal entries after that date.""" + self.create_account_move("2900-02-01") + with self.assertRaises(ValidationError): + self.company.period_lock_to_date = "2900-01-01" + self.company.fiscalyear_lock_to_date = "2900-02-01" diff --git a/account_lock_to_date/wizards/__init__.py b/account_lock_to_date/wizards/__init__.py new file mode 100644 index 00000000000..86389635fb2 --- /dev/null +++ b/account_lock_to_date/wizards/__init__.py @@ -0,0 +1 @@ +from . import account_update_lock_to_date diff --git a/account_lock_to_date/wizards/account_update_lock_to_date.py b/account_lock_to_date/wizards/account_update_lock_to_date.py new file mode 100644 index 00000000000..4f89c38025d --- /dev/null +++ b/account_lock_to_date/wizards/account_update_lock_to_date.py @@ -0,0 +1,58 @@ +# Copyright 2019 ForgeFlow S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import SUPERUSER_ID, _, api, fields, models +from odoo.exceptions import ValidationError + + +class AccountUpdateLockToDate(models.TransientModel): + _name = "account.update.lock_to_date" + _description = "Account Update Lock_to_date" + + company_id = fields.Many2one( + comodel_name="res.company", + string="Company", + required=True, + default=lambda self: self.env.user.company_id, + ) + period_lock_to_date = fields.Date( + string="Lock To Date for Non-Advisers", + help="Only users with the 'Adviser' role can edit accounts after " + "and inclusive of this date. Use it for period locking inside an " + "open fiscal year, for example.", + ) + fiscalyear_lock_to_date = fields.Date( + string="Lock To Date", + help="No users, including Advisers, can edit accounts after and " + "inclusive of this date. Use it for fiscal year locking for " + "example.", + ) + + @api.model + def default_get(self, field_list): + res = super(AccountUpdateLockToDate, self).default_get(field_list) + company = self.env.user.company_id + res.update( + { + "company_id": company.id, + "period_lock_to_date": company.period_lock_to_date, + "fiscalyear_lock_to_date": company.fiscalyear_lock_to_date, + } + ) + return res + + def _check_execute_allowed(self): + self.ensure_one() + has_adviser_group = self.env.user.has_group("account.group_account_manager") + if not (has_adviser_group or self.env.uid == SUPERUSER_ID): + raise ValidationError(_("You are not allowed to execute this action.")) + + def execute(self): + self.ensure_one() + self._check_execute_allowed() + self.company_id.sudo().write( + { + "period_lock_to_date": self.period_lock_to_date, + "fiscalyear_lock_to_date": self.fiscalyear_lock_to_date, + } + ) diff --git a/account_lock_to_date/wizards/account_update_lock_to_date.xml b/account_lock_to_date/wizards/account_update_lock_to_date.xml new file mode 100644 index 00000000000..2d1e8086e2b --- /dev/null +++ b/account_lock_to_date/wizards/account_update_lock_to_date.xml @@ -0,0 +1,50 @@ + + + + + account.update.lock_to_date.form + account.update.lock_to_date + +
+
+ + + + + + + +
+
+ + + + + Update accounting lock to dates + account.update.lock_to_date + form + new + + + Update accounting lock to dates + + + + + + diff --git a/setup/_metapackage/VERSION.txt b/setup/_metapackage/VERSION.txt index 0cbb31f64f7..797d424d8f6 100644 --- a/setup/_metapackage/VERSION.txt +++ b/setup/_metapackage/VERSION.txt @@ -1 +1 @@ -16.0.20241107.0 \ No newline at end of file +16.0.20241113.0 \ No newline at end of file diff --git a/setup/_metapackage/setup.py b/setup/_metapackage/setup.py index a3b40d369b6..12db221fcaf 100644 --- a/setup/_metapackage/setup.py +++ b/setup/_metapackage/setup.py @@ -28,6 +28,7 @@ 'odoo-addon-account_journal_restrict_mode>=16.0dev,<16.1dev', 'odoo-addon-account_loan>=16.0dev,<16.1dev', 'odoo-addon-account_lock_date_update>=16.0dev,<16.1dev', + 'odoo-addon-account_lock_to_date>=16.0dev,<16.1dev', 'odoo-addon-account_move_budget>=16.0dev,<16.1dev', 'odoo-addon-account_move_fiscal_month>=16.0dev,<16.1dev', 'odoo-addon-account_move_fiscal_year>=16.0dev,<16.1dev', diff --git a/setup/account_lock_to_date/odoo/addons/account_lock_to_date b/setup/account_lock_to_date/odoo/addons/account_lock_to_date new file mode 120000 index 00000000000..8fd472f684f --- /dev/null +++ b/setup/account_lock_to_date/odoo/addons/account_lock_to_date @@ -0,0 +1 @@ +../../../../account_lock_to_date \ No newline at end of file diff --git a/setup/account_lock_to_date/setup.py b/setup/account_lock_to_date/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/account_lock_to_date/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)