diff --git a/.docker_files/main/__manifest__.py b/.docker_files/main/__manifest__.py index 9b8bca2e..171a98a8 100644 --- a/.docker_files/main/__manifest__.py +++ b/.docker_files/main/__manifest__.py @@ -15,6 +15,18 @@ "sale", # required for testing mail_message_from_author "stock", # required for testing base_extended_security "crm", # required for testing mail_notification_no_action_button + "admin_light_auditlog", + "admin_light_base", + "admin_light_bi_view_editor", + "admin_light_calendar", + "admin_light_company", + "admin_light_filters", + "admin_light_gamification", + "admin_light_mail", + "admin_light_mail_gmail", + "admin_light_mail_outlook", + "admin_light_user", + "admin_light_web", "auth_oauth_authentik", "automatic_activity_deadlines", "base_extended_security", @@ -34,14 +46,23 @@ "mail_notification_no_footer", "mail_template_default", "note_no_default_stage", + # "numipack", + # "numipack_account", + # "numipack_account_enterprise", + # "numipack_project", + # "numipack_purchase", + # "numipack_sale", + # "numipack_stock", "portal_signature_auto", "private_data_group", + #"profile_hr", "queue_job_auto_requeue", "test_http_request", "utm_archive", "web_email_field_new_tab", "dms_document_url", "event_allowed_ceu", + "web_base_url_freeze", ], "installable": True, } diff --git a/Dockerfile b/Dockerfile index 238c29a4..8573d49c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,6 +15,18 @@ RUN gitoo install-all --conf_file /gitoo.yml --destination "${THIRD_PARTY_ADDONS USER odoo +COPY admin_light_auditlog /mnt/extra-addons/admin_light_auditlog +COPY admin_light_base /mnt/extra-addons/admin_light_base +COPY admin_light_bi_view_editor /mnt/extra-addons/admin_light_bi_view_editor +COPY admin_light_calendar /mnt/extra-addons/admin_light_calendar +COPY admin_light_company /mnt/extra-addons/admin_light_company +COPY admin_light_filters /mnt/extra-addons/admin_light_filters +COPY admin_light_gamification /mnt/extra-addons/admin_light_gamification +COPY admin_light_mail /mnt/extra-addons/admin_light_mail +COPY admin_light_mail_gmail /mnt/extra-addons/admin_light_mail_gmail +COPY admin_light_mail_outlook /mnt/extra-addons/admin_light_mail_outlook +COPY admin_light_user /mnt/extra-addons/admin_light_user +COPY admin_light_web /mnt/extra-addons/admin_light_web COPY auth_oauth_authentik /mnt/extra-addons/auth_oauth_authentik COPY automatic_activity_deadlines /mnt/extra-addons/automatic_activity_deadlines COPY base_extended_security /mnt/extra-addons/base_extended_security @@ -34,7 +46,15 @@ COPY mail_message_from_author /mnt/extra-addons/mail_message_from_author COPY mail_notification_no_footer /mnt/extra-addons/mail_notification_no_footer COPY mail_template_default /mnt/extra-addons/mail_template_default COPY note_no_default_stage /mnt/extra-addons/note_no_default_stage +COPY numipack /mnt/extra-addons/numipack +COPY numipack_account /mnt/extra-addons/numipack_account +COPY numipack_account_enterprise /mnt/extra-addons/numipack_account_enterprise +COPY numipack_project /mnt/extra-addons/numipack_project +COPY numipack_purchase /mnt/extra-addons/numipack_purchase +COPY numipack_sale /mnt/extra-addons/numipack_sale +COPY numipack_stock /mnt/extra-addons/numipack_stock COPY portal_signature_auto /mnt/extra-addons/portal_signature_auto +COPY profile_hr /mnt/extra-addons/profile_hr COPY private_data_group /mnt/extra-addons/private_data_group COPY queue_job_auto_requeue /mnt/extra-addons/queue_job_auto_requeue COPY test_http_request /mnt/extra-addons/test_http_request @@ -42,6 +62,7 @@ COPY utm_archive /mnt/extra-addons/utm_archive COPY web_email_field_new_tab /mnt/extra-addons/web_email_field_new_tab COPY dms_document_url /mnt/extra-addons/dms_document_url COPY event_allowed_ceu /mnt/extra-addons/event_allowed_ceu +COPY web_base_url_freeze /mnt/extra-addons/web_base_url_freeze COPY .docker_files/main /mnt/extra-addons/main COPY .docker_files/odoo.conf /etc/odoo diff --git a/admin_light_auditlog/README.rst b/admin_light_auditlog/README.rst new file mode 100644 index 00000000..b9706a64 --- /dev/null +++ b/admin_light_auditlog/README.rst @@ -0,0 +1,18 @@ +Admin Light AuditLog +==================== +This module adds Auditlog to the Admin Light application. + +A new group `Safe Administration / Audit Logs` is added. + +This group has access to: + +* View audit logs +* Edit audit rules + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) + +More information +---------------- +* Meet us at https://bit.ly/numigi-com diff --git a/admin_light_auditlog/__init__.py b/admin_light_auditlog/__init__.py new file mode 100644 index 00000000..d7b793c9 --- /dev/null +++ b/admin_light_auditlog/__init__.py @@ -0,0 +1,4 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from . import audit_rule diff --git a/admin_light_auditlog/__manifest__.py b/admin_light_auditlog/__manifest__.py new file mode 100644 index 00000000..132a78f1 --- /dev/null +++ b/admin_light_auditlog/__manifest__.py @@ -0,0 +1,18 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + 'name': 'Admin Light Audit Logs', + 'version': '1.0.1', + 'author': 'Numigi', + 'maintainer': 'Numigi', + 'license': 'LGPL-3', + 'category': 'Other', + 'summary': 'Add a group to manage audit logs.', + 'depends': ['admin_light_base', 'auditlog'], + 'data': [ + 'data.xml', + 'security/ir.model.access.csv', + ], + 'installable': True, +} diff --git a/admin_light_auditlog/audit_rule.py b/admin_light_auditlog/audit_rule.py new file mode 100644 index 00000000..cb4e5fd2 --- /dev/null +++ b/admin_light_auditlog/audit_rule.py @@ -0,0 +1,27 @@ +# © 2019 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo import api, models + + +class AuditRule(models.Model): + """Use sudo when subscribing/unsubscribing an audit rule. + + The mechanism of creating/deleting the action in the form view + uses multiple objects that the admin/light should not be able + to access. + """ + + _inherit = 'auditlog.rule' + + def unsubscribe(self): + if self.env.user.has_group('admin_light_auditlog.group_auditlogs'): + self = self.sudo() + + return super(AuditRule, self).unsubscribe() + + def subscribe(self): + if self.env.user.has_group('admin_light_auditlog.group_auditlogs'): + self = self.sudo() + + return super(AuditRule, self).subscribe() diff --git a/admin_light_auditlog/data.xml b/admin_light_auditlog/data.xml new file mode 100644 index 00000000..649a5768 --- /dev/null +++ b/admin_light_auditlog/data.xml @@ -0,0 +1,45 @@ + + + + + Audit Logs + + + + + + + + + + + + + + diff --git a/admin_light_auditlog/i18n/fr.po b/admin_light_auditlog/i18n/fr.po new file mode 100644 index 00000000..75fa9d3f --- /dev/null +++ b/admin_light_auditlog/i18n/fr.po @@ -0,0 +1,43 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * admin_light_auditlog +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-24 16:34+0000\n" +"PO-Revision-Date: 2019-01-24 11:36-0500\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 2.0.6\n" + +#. module: admin_light_auditlog +#: model:ir.ui.menu,name:admin_light_auditlog.menu_audit +msgid "Audit" +msgstr "Audit" + +#. module: admin_light_auditlog +#: model:res.groups,name:admin_light_auditlog.group_auditlogs +msgid "Audit Logs" +msgstr "Journaux d'audit" + +#. module: admin_light_auditlog +#: model:ir.ui.menu,name:admin_light_auditlog.menu_audit_field_logs +msgid "Detailed Logs" +msgstr "Journaux détaillés" + +#. module: admin_light_auditlog +#: model:ir.ui.menu,name:admin_light_auditlog.menu_audit_logs +msgid "Logs" +msgstr "Journaux" + +#. module: admin_light_auditlog +#: model:ir.ui.menu,name:admin_light_auditlog.menu_action_auditlog_rule_tree +msgid "Rules" +msgstr "Règles" diff --git a/admin_light_auditlog/security/ir.model.access.csv b/admin_light_auditlog/security/ir.model.access.csv new file mode 100644 index 00000000..c647158a --- /dev/null +++ b/admin_light_auditlog/security/ir.model.access.csv @@ -0,0 +1,5 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_auditlog_rule_manager,Admin Light: auditlog.rule,auditlog.model_auditlog_rule,group_auditlogs,1,1,1,1 +access_auditlog_log_manager,Admin Light: auditlog.log,auditlog.model_auditlog_log,group_auditlogs,1,1,1,1 +access_auditlog_log_line_manager,Admin Light: auditlog.log.line,auditlog.model_auditlog_log_line,group_auditlogs,1,1,1,1 +access_auditlog_http_request_manager,Admin Light: auditlog.http.request,auditlog.model_auditlog_http_request,group_auditlogs,1,1,1,1 diff --git a/admin_light_auditlog/static/description/icon.png b/admin_light_auditlog/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/admin_light_auditlog/static/description/icon.png differ diff --git a/admin_light_auditlog/tests/__init__.py b/admin_light_auditlog/tests/__init__.py new file mode 100644 index 00000000..6ef2df91 --- /dev/null +++ b/admin_light_auditlog/tests/__init__.py @@ -0,0 +1,2 @@ +# © 2019 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/admin_light_auditlog/tests/test_admin_light_access.py b/admin_light_auditlog/tests/test_admin_light_access.py new file mode 100644 index 00000000..4c040a58 --- /dev/null +++ b/admin_light_auditlog/tests/test_admin_light_access.py @@ -0,0 +1,50 @@ +# © 2019 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import pytest +from odoo.exceptions import AccessError +from odoo.tests import common + + +class TestAdminLightAccess(common.SavepointCase): + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.group = cls.env.ref('admin_light_auditlog.group_auditlogs') + cls.user = cls.env['res.users'].create({ + 'name': 'Test', + 'login': 'testauditlog@test.com', + 'email': 'testauditlog@test.com', + 'groups_id': [(4, cls.group.id)], + }) + + cls.rule = cls.env['auditlog.rule'].create({ + 'name': 'Test', + 'model_id': cls.env.ref('base.model_ir_cron').id, + 'log_write': True, + 'log_unlink': True, + 'log_create': True, + }) + + def test_can_activate_audit_rule(self): + self.rule.sudo(self.user).subscribe() + assert self.rule.state == 'subscribed' + + def test_can_deactivate_audit_rule(self): + self.rule.subscribe() + assert self.rule.state == 'subscribed' + self.rule.sudo(self.user).unsubscribe() + assert self.rule.state == 'draft' + + def test_if_not_admin_light__can_not_activate_audit_rule(self): + self.user.groups_id -= self.group + with pytest.raises(AccessError): + self.rule.sudo(self.user).subscribe() + + def test_if_not_admin_light__can_not_deactivate_audit_rule(self): + self.rule.subscribe() + + self.user.groups_id -= self.group + with pytest.raises(AccessError): + self.rule.sudo(self.user).unsubscribe() diff --git a/admin_light_base/README.rst b/admin_light_base/README.rst new file mode 100644 index 00000000..6e8aecbc --- /dev/null +++ b/admin_light_base/README.rst @@ -0,0 +1,34 @@ +Admin Light +=========== +This module adds a new `Administration` menu with restricted functionalities. + +.. image:: static/description/app_icon.png + +The purpose of this module is to give partial administration access to the client. +This helps prevent manipulation errors and simplifies the navigation for the administrator. + +This module adds the new application without any content. +Specific modules add the functionalities to the application. + +Functionalities are added on an `ad hoc` basis, based on the trainings completed by the client. +Each functionnality is added by a specific user group. + +.. image:: static/description/user_form.png + +Sequences +--------- +A new group `Safe Administration / Sequences` is added. + +.. image:: static/description/sequence_group.png + +This group has access to create and edit sequences. + +.. image:: static/description/sequence_list.png + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) + +More information +---------------- +* Meet us at https://bit.ly/numigi-com diff --git a/admin_light_base/__init__.py b/admin_light_base/__init__.py new file mode 100644 index 00000000..c9a28baa --- /dev/null +++ b/admin_light_base/__init__.py @@ -0,0 +1,2 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/admin_light_base/__manifest__.py b/admin_light_base/__manifest__.py new file mode 100644 index 00000000..8a9f162d --- /dev/null +++ b/admin_light_base/__manifest__.py @@ -0,0 +1,20 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + 'name': 'Admin Light', + 'version': '1.0.2', + 'author': 'Numigi', + 'maintainer': 'Numigi', + 'license': 'LGPL-3', + 'category': 'Other', + 'summary': 'Add an admin menu with restricted functionalities.', + 'depends': ['base'], + 'data': [ + 'base.xml', + 'sequence.xml', + 'security/ir.model.access.csv', + ], + 'installable': True, + 'application': True +} diff --git a/admin_light_base/base.xml b/admin_light_base/base.xml new file mode 100644 index 00000000..9b5c930a --- /dev/null +++ b/admin_light_base/base.xml @@ -0,0 +1,28 @@ + + + + + Safe Administration + 100 + + + + Safe Administration / Base + + + + + + + + diff --git a/admin_light_base/i18n/fr.po b/admin_light_base/i18n/fr.po new file mode 100644 index 00000000..4b194a39 --- /dev/null +++ b/admin_light_base/i18n/fr.po @@ -0,0 +1,44 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * admin_light_base +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-24 16:38+0000\n" +"PO-Revision-Date: 2019-01-24 11:39-0500\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 2.0.6\n" + +#. module: admin_light_base +#: model:ir.ui.menu,name:admin_light_base.menu_admin +msgid "Administration" +msgstr "Administration" + +#. module: admin_light_base +#: model:ir.module.category,name:admin_light_base.module_category_admin +msgid "Safe Administration" +msgstr "Administration sécurisée" + +#. module: admin_light_base +#: model:res.groups,name:admin_light_base.group_admin +msgid "Safe Administration / Base" +msgstr "Administration sécurisée / Base" + +#. module: admin_light_base +#: model:ir.ui.menu,name:admin_light_base.menu_other +msgid "Other" +msgstr "Autre" + +#. module: admin_light_base +#: model:ir.ui.menu,name:admin_light_base.menu_sequence +#: model:res.groups,name:admin_light_base.group_sequence +msgid "Sequences" +msgstr "Séquences" diff --git a/admin_light_base/migrations/12.0.1.0.1/pre-migration.py b/admin_light_base/migrations/12.0.1.0.1/pre-migration.py new file mode 100644 index 00000000..208fbc23 --- /dev/null +++ b/admin_light_base/migrations/12.0.1.0.1/pre-migration.py @@ -0,0 +1,18 @@ +# © 2019 Numigi +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +from openupgradelib import openupgrade + + +def migrate(cr, installed_version): + """Update the xml_id of Admin Light / Sequences. + + The group was moved to admin_light_base. + This prevents blocking unique constraints when updating + the modules. + """ + openupgrade.rename_xmlids( + cr, + [('admin_light_specific.group_sequence', + 'admin_light_base.group_sequence')] + ) diff --git a/admin_light_base/security/ir.model.access.csv b/admin_light_base/security/ir.model.access.csv new file mode 100644 index 00000000..3891d622 --- /dev/null +++ b/admin_light_base/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_ir_sequence,Admin Light: ir.sequence,base.model_ir_sequence,group_sequence,1,1,1,1 diff --git a/admin_light_base/sequence.xml b/admin_light_base/sequence.xml new file mode 100644 index 00000000..1b65c50b --- /dev/null +++ b/admin_light_base/sequence.xml @@ -0,0 +1,19 @@ + + + + + Sequences + + + + + + + diff --git a/admin_light_base/static/description/app_icon.png b/admin_light_base/static/description/app_icon.png new file mode 100644 index 00000000..b7eb6d07 Binary files /dev/null and b/admin_light_base/static/description/app_icon.png differ diff --git a/admin_light_base/static/description/icon.png b/admin_light_base/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/admin_light_base/static/description/icon.png differ diff --git a/admin_light_base/static/description/sequence_group.png b/admin_light_base/static/description/sequence_group.png new file mode 100644 index 00000000..97877758 Binary files /dev/null and b/admin_light_base/static/description/sequence_group.png differ diff --git a/admin_light_base/static/description/sequence_list.png b/admin_light_base/static/description/sequence_list.png new file mode 100644 index 00000000..f07e4cf7 Binary files /dev/null and b/admin_light_base/static/description/sequence_list.png differ diff --git a/admin_light_base/static/description/user_form.png b/admin_light_base/static/description/user_form.png new file mode 100644 index 00000000..954d79d4 Binary files /dev/null and b/admin_light_base/static/description/user_form.png differ diff --git a/admin_light_bi_view_editor/README.rst b/admin_light_bi_view_editor/README.rst new file mode 100644 index 00000000..9d80f21d --- /dev/null +++ b/admin_light_bi_view_editor/README.rst @@ -0,0 +1,36 @@ +Admin Light BI View Editor +========================== +This module restricts access to the menu entries of the bi_view_editor module to all users +except `Admin Light / Base` and `Administration / Configuration` users. + +Usage +----- +* As a user in the `Administration / Configuration` or `Admin Light / Base` user group, +I go to the `Dashboard` application. + +I see that I have access to the `Custom Reports` and `Custom Bi Views` menu entries. + +.. image:: static/description/custom_bi_views_menu.png + +If I do a search in the search bar on the app panel (if the feature is available like on enterprise edition of Odoo), +, I see the menu. + + +* As a user not part of the `Administration / Configuration` or `Admin Light / Base` user group, +I go to the `Dashboard` application. + +I see that I don't have access to the `Custom Reports` and `Custom Bi Views` menu entries. + +.. image:: static/description/dasbhoard_menu.png + +Even if I do a search in the search bar on the app panel (if the feature is available like on enterprise edition of Odoo), +, I see the menu. + + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) + +More information +---------------- +* Meet us at https://bit.ly/numigi-com diff --git a/admin_light_bi_view_editor/__init__.py b/admin_light_bi_view_editor/__init__.py new file mode 100644 index 00000000..8e2364f6 --- /dev/null +++ b/admin_light_bi_view_editor/__init__.py @@ -0,0 +1,2 @@ +# © 2023 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/AGPL). diff --git a/admin_light_bi_view_editor/__manifest__.py b/admin_light_bi_view_editor/__manifest__.py new file mode 100644 index 00000000..3183e41d --- /dev/null +++ b/admin_light_bi_view_editor/__manifest__.py @@ -0,0 +1,20 @@ +# © 2023 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/AGPL). + +{ + 'name': 'Admin Light BI View Editor', + 'version': "14.0.1.0.0", + 'author': 'Numigi', + 'maintainer': 'Numigi', + 'license': 'AGPL-3', + 'category': 'Other', + 'summary': 'Add restrictions on the menu of bi_view_editor module.', + 'depends': [ + 'admin_light_base', + 'bi_view_editor' + ], + 'data': [ + 'views/bi_view_editor_menu.xml', + ], + 'installable': True, +} diff --git a/admin_light_bi_view_editor/static/description/custom_bi_views_menu.png b/admin_light_bi_view_editor/static/description/custom_bi_views_menu.png new file mode 100644 index 00000000..7b9de882 Binary files /dev/null and b/admin_light_bi_view_editor/static/description/custom_bi_views_menu.png differ diff --git a/admin_light_bi_view_editor/static/description/dasbhoard_menu.png b/admin_light_bi_view_editor/static/description/dasbhoard_menu.png new file mode 100644 index 00000000..6ab3b787 Binary files /dev/null and b/admin_light_bi_view_editor/static/description/dasbhoard_menu.png differ diff --git a/admin_light_bi_view_editor/static/description/icon.png b/admin_light_bi_view_editor/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/admin_light_bi_view_editor/static/description/icon.png differ diff --git a/admin_light_bi_view_editor/views/bi_view_editor_menu.xml b/admin_light_bi_view_editor/views/bi_view_editor_menu.xml new file mode 100644 index 00000000..8edb2010 --- /dev/null +++ b/admin_light_bi_view_editor/views/bi_view_editor_menu.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/admin_light_calendar/README.rst b/admin_light_calendar/README.rst new file mode 100644 index 00000000..0e4646f6 --- /dev/null +++ b/admin_light_calendar/README.rst @@ -0,0 +1,19 @@ +Admin Light Calendar +==================== +This module adds the editing of calendar objects to the Admin Light application. + +A new group `Admin Light / Calendar` is added. + +This group has access to edit the following objects: + +* Alarms (calendar.alarm) +* Event Types (calendar.event.type) +* Working Schedules (ressource.calendar) + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) + +More information +---------------- +* Meet us at https://bit.ly/numigi-com diff --git a/admin_light_calendar/__init__.py b/admin_light_calendar/__init__.py new file mode 100644 index 00000000..c9a28baa --- /dev/null +++ b/admin_light_calendar/__init__.py @@ -0,0 +1,2 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/admin_light_calendar/__manifest__.py b/admin_light_calendar/__manifest__.py new file mode 100644 index 00000000..a668a517 --- /dev/null +++ b/admin_light_calendar/__manifest__.py @@ -0,0 +1,18 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + 'name': 'Admin Light Calendar', + 'version': '1.0.0', + 'author': 'Numigi', + 'maintainer': 'Numigi', + 'license': 'LGPL-3', + 'category': 'Other', + 'summary': 'Add calendar objects to the Admin Light application.', + 'depends': ['admin_light_base', 'calendar', 'resource'], + 'data': [ + 'data.xml', + 'security/ir.model.access.csv', + ], + 'installable': True, +} diff --git a/admin_light_calendar/data.xml b/admin_light_calendar/data.xml new file mode 100644 index 00000000..75e069c0 --- /dev/null +++ b/admin_light_calendar/data.xml @@ -0,0 +1,55 @@ + + + + + Calendar + + + + + + + + + + + + + + Admin Light: Modify Calendar Leaves + + + [] + + + + + + + diff --git a/admin_light_calendar/i18n/fr.po b/admin_light_calendar/i18n/fr.po new file mode 100644 index 00000000..3e46fc95 --- /dev/null +++ b/admin_light_calendar/i18n/fr.po @@ -0,0 +1,39 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * admin_light_calendar +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-09-25 14:49-0400\n" +"PO-Revision-Date: 2018-09-25 14:50-0400\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 2.0.6\n" + +#. module: admin_light_calendar +#: model:ir.ui.menu,name:admin_light_calendar.menu_alarm +msgid "Alarms" +msgstr "Alarmes" + +#. module: admin_light_calendar +#: model:ir.ui.menu,name:admin_light_calendar.menu_calendar +#: model:res.groups,name:admin_light_calendar.group_calendar +msgid "Calendar" +msgstr "Calendrier" + +#. module: admin_light_calendar +#: model:ir.ui.menu,name:admin_light_calendar.menu_event_type +msgid "Meeting Types" +msgstr "Types de réunion" + +#. module: admin_light_calendar +#: model:ir.ui.menu,name:admin_light_calendar.menu_working_schedule +msgid "Working Schedules" +msgstr "Horaires de travail" diff --git a/admin_light_calendar/security/ir.model.access.csv b/admin_light_calendar/security/ir.model.access.csv new file mode 100644 index 00000000..f2c46f8e --- /dev/null +++ b/admin_light_calendar/security/ir.model.access.csv @@ -0,0 +1,6 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_event_type,Admin Light: calendar.event.type,calendar.model_calendar_event_type,group_calendar,1,1,1,1 +access_alarm,Admin Light: calendar.alarm,calendar.model_calendar_alarm,group_calendar,1,1,1,1 +access_resource_calendar,Admin Light: ressource.calendar,resource.model_resource_calendar,group_calendar,1,1,1,1 +access_resource_calendar_attendance,Admin Light: ressource.calendar.attendance,resource.model_resource_calendar_attendance,group_calendar,1,1,1,1 +access_resource_calendar_leaves,Admin Light: ressource.calendar.leaves,resource.model_resource_calendar_leaves,group_calendar,1,1,1,1 diff --git a/admin_light_calendar/static/description/icon.png b/admin_light_calendar/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/admin_light_calendar/static/description/icon.png differ diff --git a/admin_light_company/README.rst b/admin_light_company/README.rst new file mode 100644 index 00000000..e94ab835 --- /dev/null +++ b/admin_light_company/README.rst @@ -0,0 +1,19 @@ +Admin Light Company +=================== +This module adds the management of companies to the Admin Light application. + +A new group `Safe Administration / Company` is added. + +.. image:: static/description/company_group.png + +This group can create and edit companies. + +.. image:: static/description/company_list.png + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) + +More information +---------------- +* Meet us at https://bit.ly/numigi-com diff --git a/admin_light_company/__init__.py b/admin_light_company/__init__.py new file mode 100644 index 00000000..c2ef8022 --- /dev/null +++ b/admin_light_company/__init__.py @@ -0,0 +1,2 @@ +# © 2020 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/admin_light_company/__manifest__.py b/admin_light_company/__manifest__.py new file mode 100644 index 00000000..0231a799 --- /dev/null +++ b/admin_light_company/__manifest__.py @@ -0,0 +1,19 @@ +# © 2020 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + 'name': 'Admin Light Company', + 'version': '1.0.1', + 'author': 'Numigi', + 'maintainer': 'Numigi', + 'license': 'LGPL-3', + 'category': 'Other', + 'summary': 'Add companies to the admin light application', + 'depends': ['admin_light_base'], + 'data': [ + 'security/res_groups.xml', + 'security/ir.model.access.csv', + 'views/menu.xml', + ], + 'installable': True, +} diff --git a/admin_light_company/i18n/fr.po b/admin_light_company/i18n/fr.po new file mode 100644 index 00000000..7fad69bb --- /dev/null +++ b/admin_light_company/i18n/fr.po @@ -0,0 +1,24 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * admin_light_company +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-24 16:38+0000\n" +"PO-Revision-Date: 2019-01-24 11:39-0500\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 2.0.6\n" + +#. module: admin_light_company +#: model:ir.ui.menu,name:admin_light_company.menu_company +#: model:res.groups,name:admin_light_company.group_company +msgid "Companies" +msgstr "Sociétés" diff --git a/admin_light_company/security/ir.model.access.csv b/admin_light_company/security/ir.model.access.csv new file mode 100644 index 00000000..fee06e4e --- /dev/null +++ b/admin_light_company/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_res_company,Admin Light: res.company,base.model_res_company,group_company,1,1,1,0 diff --git a/admin_light_company/security/res_groups.xml b/admin_light_company/security/res_groups.xml new file mode 100644 index 00000000..1dff9b05 --- /dev/null +++ b/admin_light_company/security/res_groups.xml @@ -0,0 +1,10 @@ + + + + + Companies + + + + + diff --git a/admin_light_company/static/description/company_group.png b/admin_light_company/static/description/company_group.png new file mode 100644 index 00000000..21e85811 Binary files /dev/null and b/admin_light_company/static/description/company_group.png differ diff --git a/admin_light_company/static/description/company_list.png b/admin_light_company/static/description/company_list.png new file mode 100644 index 00000000..9bdf0af0 Binary files /dev/null and b/admin_light_company/static/description/company_list.png differ diff --git a/admin_light_company/static/description/icon.png b/admin_light_company/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/admin_light_company/static/description/icon.png differ diff --git a/admin_light_company/views/menu.xml b/admin_light_company/views/menu.xml new file mode 100644 index 00000000..43f70dd8 --- /dev/null +++ b/admin_light_company/views/menu.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/admin_light_filters/README.rst b/admin_light_filters/README.rst new file mode 100644 index 00000000..ca3d0529 --- /dev/null +++ b/admin_light_filters/README.rst @@ -0,0 +1,22 @@ +Admin Light Filters +=================== +This module adds user-defined filter management to the Admin Light user. + +User Filter +----------- +A new group `Safe Administration / Custom Filters` is added. + +As a normal user (not the default admin) and member of that group, +under the menu `Administration > User Interface > User-defined Filters`, I can : + +* Delete a filter for which the Owner field is empty, or for which the Owner field has my user filled in +* Modify a filter for which the Owner field is empty, or for which the Owner field has my user filled in +* Access the 'Groups' and 'Users' fields allowing filters to be shared with users or groups of users. + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) + +More information +---------------- +* Meet us at https://bit.ly/numigi-com diff --git a/admin_light_filters/__init__.py b/admin_light_filters/__init__.py new file mode 100644 index 00000000..0ca2c599 --- /dev/null +++ b/admin_light_filters/__init__.py @@ -0,0 +1,2 @@ +# © 2023 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/admin_light_filters/__manifest__.py b/admin_light_filters/__manifest__.py new file mode 100644 index 00000000..11435d36 --- /dev/null +++ b/admin_light_filters/__manifest__.py @@ -0,0 +1,19 @@ +# © 2023 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License AGPL-3 or later (http://www.gnu.org/licenses/lgpl). + +{ + 'name': 'Admin Light Filters', + 'version': "14.0.1.0.0", + 'author': 'Numigi', + 'maintainer': 'Numigi', + 'license': 'AGPL-3', + 'category': 'Other', + 'summary': 'Add user-defined filter management to the Admin Light user', + 'depends': ['admin_light_web', 'filter_multi_user'], + 'data': [ + 'security/admin_light_security.xml', + 'security/ir_filters_security.xml', + 'views/ir_filters_views.xml', + ], + 'installable': True, +} diff --git a/admin_light_filters/i18n/fr.po b/admin_light_filters/i18n/fr.po new file mode 100644 index 00000000..c13bd20d --- /dev/null +++ b/admin_light_filters/i18n/fr.po @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * admin_light_filters +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-04-24 01:42+0000\n" +"PO-Revision-Date: 2023-04-24 01:42+0000\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: admin_light_filters +#: model:res.groups,name:admin_light_filters.group_custom_filters +msgid "Custom Filters" +msgstr "Filtres personnalisés" + +#. module: admin_light_filters +#: model:ir.ui.menu,name:admin_light_filters.menu_user_ir_filters +msgid "User-defined Filters" +msgstr "Filtres utilisateurs" + +#. module: filter_multi_user +#: model:ir.model.fields,field_description:filter_multi_user.field_ir_filters__group_ids +msgid "Available for Groups" +msgstr "Disponible pour Groupes" + +#. module: filter_multi_user +#: model:ir.model.fields,field_description:filter_multi_user.field_ir_filters__manual_user_ids +#: model_terms:ir.ui.view,arch_db:filter_multi_user.ir_filters_view_tree +msgid "Available for Users" +msgstr "Disponible pour Utilisateurs" + +#. module: filter_multi_user +#: model:ir.model,name:filter_multi_user.model_ir_filters +msgid "Filters" +msgstr "Filtres" + +#. module: filter_multi_user +#: model_terms:ir.ui.view,arch_db:filter_multi_user.ir_filters_view_form +msgid "Owner" +msgstr "Propriétaire" + +#. module: filter_multi_user +#: model:ir.model.fields,field_description:filter_multi_user.field_ir_filters__user_ids +msgid "Users" +msgstr "Utilisateurs" diff --git a/admin_light_filters/security/admin_light_security.xml b/admin_light_filters/security/admin_light_security.xml new file mode 100644 index 00000000..e410718a --- /dev/null +++ b/admin_light_filters/security/admin_light_security.xml @@ -0,0 +1,10 @@ + + + + + Custom Filters + + + + + diff --git a/admin_light_filters/security/ir_filters_security.xml b/admin_light_filters/security/ir_filters_security.xml new file mode 100644 index 00000000..13176c28 --- /dev/null +++ b/admin_light_filters/security/ir_filters_security.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/admin_light_filters/static/description/icon.png b/admin_light_filters/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/admin_light_filters/static/description/icon.png differ diff --git a/admin_light_filters/tests/__init__.py b/admin_light_filters/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/admin_light_filters/tests/test_filter.py b/admin_light_filters/tests/test_filter.py new file mode 100644 index 00000000..b4d76db4 --- /dev/null +++ b/admin_light_filters/tests/test_filter.py @@ -0,0 +1,38 @@ +# © 2023 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo.tests import common + + +class TestPermission(common.SavepointCase): + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.group_user = cls.env.ref("base.group_user") + cls.group_admin_filter = cls.env.ref( + "admin_light_filters.group_custom_filters") + cls.user_1 = cls._create_user( + "user_1", [cls.group_user, cls.group_admin_filter]) + cls.user_2 = cls._create_user("user_2", [cls.group_user]) + + @classmethod + def _create_user(self, login, groups): + group_ids = [group.id for group in groups] + user = self.env["res.users"].create({ + "name": "Test User", + "login": login, + "password": "Demo_12345", + "email": "%s@yourcompany.com" % login, + "groups_id": [(6, 0, group_ids)] + }) + return user + + def test_05_delete_filter(self): + test_filter = self.env["ir.filters"].create({ + "name": "Test filter", + "model_id": "ir.filters", + "user_id": False, + "manual_user_ids": [(6, 0, (self.user_1 + self.user_2).ids)], + }) + test_filter.with_user(self.user_1).unlink() diff --git a/admin_light_filters/views/ir_filters_views.xml b/admin_light_filters/views/ir_filters_views.xml new file mode 100644 index 00000000..3b4251e7 --- /dev/null +++ b/admin_light_filters/views/ir_filters_views.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/admin_light_gamification/README.rst b/admin_light_gamification/README.rst new file mode 100644 index 00000000..45f80263 --- /dev/null +++ b/admin_light_gamification/README.rst @@ -0,0 +1,20 @@ +Admin Light Gamification +======================== +This module adds the gamification settings to the Admin Light application. + +A new group `Safe Administration / Gamification` is added. + +This group has access to: + +* Edit gamification challenges / goals / definitions / badges + +The gamification menu is simply moved from the main administration menu to the admin light application. +The reason is that these settings have no plus value to be managed by the super admin. + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) + +More information +---------------- +* Meet us at https://bit.ly/numigi-com diff --git a/admin_light_gamification/__init__.py b/admin_light_gamification/__init__.py new file mode 100644 index 00000000..c9a28baa --- /dev/null +++ b/admin_light_gamification/__init__.py @@ -0,0 +1,2 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/admin_light_gamification/__manifest__.py b/admin_light_gamification/__manifest__.py new file mode 100644 index 00000000..8d306f7b --- /dev/null +++ b/admin_light_gamification/__manifest__.py @@ -0,0 +1,18 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + 'name': 'Admin Light Gamification', + 'version': '1.0.0', + 'author': 'Numigi', + 'maintainer': 'Numigi', + 'license': 'LGPL-3', + 'category': 'Other', + 'summary': 'Add a group to manage gamification.', + 'depends': ['admin_light_base', 'gamification'], + 'data': [ + 'data.xml', + 'security/ir.model.access.csv', + ], + 'installable': True, +} diff --git a/admin_light_gamification/data.xml b/admin_light_gamification/data.xml new file mode 100644 index 00000000..f3586d48 --- /dev/null +++ b/admin_light_gamification/data.xml @@ -0,0 +1,20 @@ + + + + + Gamification + + + + + + + + + + + + + + + diff --git a/admin_light_gamification/security/ir.model.access.csv b/admin_light_gamification/security/ir.model.access.csv new file mode 100644 index 00000000..5819a3c0 --- /dev/null +++ b/admin_light_gamification/security/ir.model.access.csv @@ -0,0 +1,7 @@ +id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink +access_badge,Admin Light: gamification.badge,gamification.model_gamification_badge,group_gamification,1,1,1,1 +access_badge_user,Admin Light: gamification.badge.user,gamification.model_gamification_badge_user,group_gamification,1,1,1,1 +access_challenge,Admin Light: gamification.challenge,gamification.model_gamification_challenge,group_gamification,1,1,1,1 +access_challenge_line,Admin Light: gamification.line.challenge,gamification.model_gamification_challenge_line,group_gamification,1,1,1,1 +access_goal,Admin Light: gamification.goal,gamification.model_gamification_goal,group_gamification,1,1,1,1 +access_goal_definition,Admin Light: gamification.goal.definition,gamification.model_gamification_goal_definition,group_gamification,1,1,1,1 diff --git a/admin_light_gamification/static/description/icon.png b/admin_light_gamification/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/admin_light_gamification/static/description/icon.png differ diff --git a/admin_light_mail/README.rst b/admin_light_mail/README.rst new file mode 100644 index 00000000..951e431c --- /dev/null +++ b/admin_light_mail/README.rst @@ -0,0 +1,32 @@ +Admin Light Mail +================ +This module adds email management to the Admin Light application. + +Emails & Messages +----------------- +A new group `Safe Administration / Messages` is added. + +* View the list of emails and messages +* Resend a failed message + +Mail Templates +-------------- +A new group `Safe Administration / Email Templates` is added. + +This group has access to: + +* Edit mail templates + +Mail Servers +------------ +A new group `Safe Administration / Mail Servers` is added. + +* View and edit the list of incoming / outgoing mail servers. + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) + +More information +---------------- +* Meet us at https://bit.ly/numigi-com diff --git a/admin_light_mail/__init__.py b/admin_light_mail/__init__.py new file mode 100644 index 00000000..2b433349 --- /dev/null +++ b/admin_light_mail/__init__.py @@ -0,0 +1,4 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from . import models diff --git a/admin_light_mail/__manifest__.py b/admin_light_mail/__manifest__.py new file mode 100644 index 00000000..d59af307 --- /dev/null +++ b/admin_light_mail/__manifest__.py @@ -0,0 +1,25 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + 'name': 'Admin Light Email', + 'version': '1.0.1', + 'author': 'Numigi', + 'maintainer': 'Numigi', + 'license': 'LGPL-3', + 'category': 'Other', + 'summary': 'Add email management to the Admin Light application.', + 'depends': [ + 'admin_light_base', + 'fetchmail', + ], + 'data': [ + 'common.xml', + 'email_and_messages.xml', + 'mail_message_subtype.xml', + 'mail_server.xml', + 'mail_template.xml', + 'security/ir.model.access.csv', + ], + 'installable': True, +} diff --git a/admin_light_mail/common.xml b/admin_light_mail/common.xml new file mode 100644 index 00000000..dac7f5dc --- /dev/null +++ b/admin_light_mail/common.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/admin_light_mail/email_and_messages.xml b/admin_light_mail/email_and_messages.xml new file mode 100644 index 00000000..7dc06101 --- /dev/null +++ b/admin_light_mail/email_and_messages.xml @@ -0,0 +1,28 @@ + + + + + Emails and Messages + + + + + + + + + diff --git a/admin_light_mail/i18n/fr.po b/admin_light_mail/i18n/fr.po new file mode 100644 index 00000000..5d8f7951 --- /dev/null +++ b/admin_light_mail/i18n/fr.po @@ -0,0 +1,69 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * admin_light_mail +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-08-12 17:50+0000\n" +"PO-Revision-Date: 2019-08-12 13:51-0400\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 2.0.6\n" + +#. module: admin_light_mail +#: model:ir.ui.menu,name:admin_light_mail.menu_email +msgid "Email" +msgstr "Courriel" + +#. module: admin_light_mail +#: model:res.groups,name:admin_light_mail.group_email_server +msgid "Email Servers" +msgstr "Serveurs de courriels" + +#. module: admin_light_mail +#: model:ir.ui.menu,name:admin_light_mail.menu_email_template +#: model:res.groups,name:admin_light_mail.group_email_template +msgid "Email Templates" +msgstr "Modèles de courriels" + +#. module: admin_light_mail +#: model:ir.ui.menu,name:admin_light_mail.menu_email_list +msgid "Emails" +msgstr "Courriels" + +#. module: admin_light_mail +#: model:res.groups,name:admin_light_mail.group_email_messages +msgid "Emails and Messages" +msgstr "Courriels et messages" + +#. module: admin_light_mail +#: model:ir.ui.menu,name:admin_light_mail.menu_incoming_mail_server +msgid "Incoming Mail Servers" +msgstr "Serveurs entrants" + +#. module: admin_light_mail +#: model:res.groups,name:admin_light_mail.group_mail_subtype +msgid "Mail Subtypes" +msgstr "Sous-types de messages" + +#. module: admin_light_mail +#: model:ir.ui.menu,name:admin_light_mail.menu_messages +msgid "Messages" +msgstr "Messages" + +#. module: admin_light_mail +#: model:ir.ui.menu,name:admin_light_mail.menu_outgoing_mail_server +msgid "Outgoing Mail Servers" +msgstr "Serveurs sortants" + +#. module: admin_light_mail +#: model:ir.ui.menu,name:admin_light_mail.menu_mail_subtype +msgid "Subtypes" +msgstr "Sous-types" diff --git a/admin_light_mail/mail_message_subtype.xml b/admin_light_mail/mail_message_subtype.xml new file mode 100644 index 00000000..24b0e2f4 --- /dev/null +++ b/admin_light_mail/mail_message_subtype.xml @@ -0,0 +1,19 @@ + + + + + Mail Subtypes + + + + + + + diff --git a/admin_light_mail/mail_server.xml b/admin_light_mail/mail_server.xml new file mode 100644 index 00000000..cd7856f2 --- /dev/null +++ b/admin_light_mail/mail_server.xml @@ -0,0 +1,28 @@ + + + + + Email Servers + + + + + + + + + diff --git a/admin_light_mail/mail_template.xml b/admin_light_mail/mail_template.xml new file mode 100644 index 00000000..f2efa537 --- /dev/null +++ b/admin_light_mail/mail_template.xml @@ -0,0 +1,19 @@ + + + + + Email Templates + + + + + + + diff --git a/admin_light_mail/models/__init__.py b/admin_light_mail/models/__init__.py new file mode 100644 index 00000000..fca63d01 --- /dev/null +++ b/admin_light_mail/models/__init__.py @@ -0,0 +1,4 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from . import ir_mail_server diff --git a/admin_light_mail/models/ir_mail_server.py b/admin_light_mail/models/ir_mail_server.py new file mode 100644 index 00000000..a6796c9a --- /dev/null +++ b/admin_light_mail/models/ir_mail_server.py @@ -0,0 +1,14 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo import fields, models + +AUTHORIZED_GROUPS = "base.group_system,admin_light_mail.group_email_server" + + +class IrMailServer(models.Model): + + _inherit = "ir.mail_server" + + smtp_user = fields.Char(groups=AUTHORIZED_GROUPS) + smtp_pass = fields.Char(groups=AUTHORIZED_GROUPS) diff --git a/admin_light_mail/security/ir.model.access.csv b/admin_light_mail/security/ir.model.access.csv new file mode 100644 index 00000000..b5cbfb0a --- /dev/null +++ b/admin_light_mail/security/ir.model.access.csv @@ -0,0 +1,8 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_mail_template,Admin Light: mail.template,mail.model_mail_template,group_email_template,1,1,1,0 +access_mail_subtype,Admin Light: mail.message.subtype,mail.model_mail_message_subtype,group_mail_subtype,1,1,0,0 +access_ir_mail_server,Admin Light: ir.mail.server,base.model_ir_mail_server,group_email_server,1,1,1,1 +access_fetchmail_server,Admin Light: fetchmail.server,fetchmail.model_fetchmail_server,group_email_server,1,1,1,1 +access_ir_cron,Admin Light: ir.cron (Required for editing incoming mail servers),base.model_ir_cron,group_email_server,1,1,0,0 +access_mail_tracking_value,Admin Light: mail.tracking.value,mail.model_mail_tracking_value,group_email_messages,1,0,0,0 +access_mail_mail,Admin Light: mail.mail (Required for accessing to incoming mail servers),mail.model_mail_mail,group_email_server,1,0,0,0 diff --git a/admin_light_mail/static/description/icon.png b/admin_light_mail/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/admin_light_mail/static/description/icon.png differ diff --git a/admin_light_mail_gmail/README.rst b/admin_light_mail_gmail/README.rst new file mode 100644 index 00000000..ec454f32 --- /dev/null +++ b/admin_light_mail_gmail/README.rst @@ -0,0 +1,11 @@ +Admin Light Mail Gmail +====================== +This module extends Administration Light/Mail Servers rights to handle fetchmail_gmail functionalities. +It manages access to the new Gmail fields and add them to the existing `Administration (Light) / Mail Servers` right group. + +As a user with `Administration (Light) / Mail Servers` rights. +I go to an incoming or outgoing email servers submenu of `Administration > Email`. I see that I have sufficient rights to access it. + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) diff --git a/admin_light_mail_gmail/__init__.py b/admin_light_mail_gmail/__init__.py new file mode 100644 index 00000000..96b9372f --- /dev/null +++ b/admin_light_mail_gmail/__init__.py @@ -0,0 +1,4 @@ +# © 2023 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/admin_light_mail_gmail/__manifest__.py b/admin_light_mail_gmail/__manifest__.py new file mode 100644 index 00000000..bb5dd501 --- /dev/null +++ b/admin_light_mail_gmail/__manifest__.py @@ -0,0 +1,17 @@ +# © 2023 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Admin Light Mail Gmail", + "version": "1.0.0", + "author": "Numigi", + "maintainer": "Numigi", + "website": "https://bit.ly/numigi-com", + "license": "AGPL-3", + 'category': 'Other', + "depends": ["admin_light_mail", "fetchmail_gmail"], + "summary": """Extends Administration Light/Mail Servers rights to handle + fetchmail_gmail functionalities.""", + "data": [], + "installable": True, +} diff --git a/admin_light_mail_gmail/i18n/fr.po b/admin_light_mail_gmail/i18n/fr.po new file mode 100644 index 00000000..e8717e3c --- /dev/null +++ b/admin_light_mail_gmail/i18n/fr.po @@ -0,0 +1,18 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * admin_light_mail_gmail +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-08-12 17:50+0000\n" +"PO-Revision-Date: 2019-08-12 13:51-0400\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 2.0.6\n" diff --git a/admin_light_mail_gmail/models/__init__.py b/admin_light_mail_gmail/models/__init__.py new file mode 100644 index 00000000..73bfd406 --- /dev/null +++ b/admin_light_mail_gmail/models/__init__.py @@ -0,0 +1,4 @@ +# © 2023 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import google_gmail_mixin diff --git a/admin_light_mail_gmail/models/google_gmail_mixin.py b/admin_light_mail_gmail/models/google_gmail_mixin.py new file mode 100644 index 00000000..809990af --- /dev/null +++ b/admin_light_mail_gmail/models/google_gmail_mixin.py @@ -0,0 +1,17 @@ +# © 2023 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + +AUTHORIZED_GROUPS = "base.group_system,admin_light_mail.group_email_server" + + +class GoogleGmailMixin(models.AbstractModel): + _inherit = 'google.gmail.mixin' + + google_gmail_authorization_code = fields.Char(groups=AUTHORIZED_GROUPS) + google_gmail_refresh_token = fields.Char(groups=AUTHORIZED_GROUPS) + google_gmail_access_token = fields.Char(groups=AUTHORIZED_GROUPS) + google_gmail_access_token_expiration = fields.Integer( + groups=AUTHORIZED_GROUPS) + google_gmail_uri = fields.Char(groups=AUTHORIZED_GROUPS) diff --git a/admin_light_mail_gmail/static/description/icon.png b/admin_light_mail_gmail/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/admin_light_mail_gmail/static/description/icon.png differ diff --git a/admin_light_mail_outlook/README.rst b/admin_light_mail_outlook/README.rst new file mode 100644 index 00000000..9175dd2a --- /dev/null +++ b/admin_light_mail_outlook/README.rst @@ -0,0 +1,11 @@ +Admin Light Mail Outlook +======================== +This module extends Administration Light/Mail Servers rights to handle fetchmail_gmail functionalities. +It manages access to the new Outlook fields and add them to the existing `Administration (Light) / Mail Servers`` right group. + +As a user with `Administration (Light) / Mail Servers` rights. +I go to an incoming or outgoing email servers submenu of `Administration > Email`. I see that I have sufficient rights to access it. + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) diff --git a/admin_light_mail_outlook/__init__.py b/admin_light_mail_outlook/__init__.py new file mode 100644 index 00000000..96b9372f --- /dev/null +++ b/admin_light_mail_outlook/__init__.py @@ -0,0 +1,4 @@ +# © 2023 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/admin_light_mail_outlook/__manifest__.py b/admin_light_mail_outlook/__manifest__.py new file mode 100644 index 00000000..d6f184b2 --- /dev/null +++ b/admin_light_mail_outlook/__manifest__.py @@ -0,0 +1,17 @@ +# © 2023 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Admin Light Mail Outlook", + "version": "1.0.0", + "author": "Numigi", + "maintainer": "Numigi", + "website": "https://bit.ly/numigi-com", + "license": "AGPL-3", + 'category': 'Other', + "depends": ["admin_light_mail", "fetchmail_outlook"], + "summary": """Extends Administration Light/Mail Servers rights to handle + fetchmail_outlook functionalities.""", + "data": [], + "installable": True, +} diff --git a/admin_light_mail_outlook/i18n/fr.po b/admin_light_mail_outlook/i18n/fr.po new file mode 100644 index 00000000..233d50e5 --- /dev/null +++ b/admin_light_mail_outlook/i18n/fr.po @@ -0,0 +1,18 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * admin_light_mail_outlook +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-08-12 17:50+0000\n" +"PO-Revision-Date: 2019-08-12 13:51-0400\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 2.0.6\n" diff --git a/admin_light_mail_outlook/models/__init__.py b/admin_light_mail_outlook/models/__init__.py new file mode 100644 index 00000000..c0d2a76a --- /dev/null +++ b/admin_light_mail_outlook/models/__init__.py @@ -0,0 +1,4 @@ +# © 2023 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import microsoft_outlook_mixin diff --git a/admin_light_mail_outlook/models/microsoft_outlook_mixin.py b/admin_light_mail_outlook/models/microsoft_outlook_mixin.py new file mode 100644 index 00000000..228d9b18 --- /dev/null +++ b/admin_light_mail_outlook/models/microsoft_outlook_mixin.py @@ -0,0 +1,16 @@ +# © 2023 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + +AUTHORIZED_GROUPS = "base.group_system,admin_light_mail.group_email_server" + + +class MicrosoftOutlookMixin(models.AbstractModel): + _inherit = 'microsoft.outlook.mixin' + + microsoft_outlook_refresh_token = fields.Char(groups=AUTHORIZED_GROUPS) + microsoft_outlook_access_token = fields.Char(groups=AUTHORIZED_GROUPS) + microsoft_outlook_access_token_expiration = fields.Integer( + groups=AUTHORIZED_GROUPS) + microsoft_outlook_uri = fields.Char(groups=AUTHORIZED_GROUPS) diff --git a/admin_light_mail_outlook/static/description/icon.png b/admin_light_mail_outlook/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/admin_light_mail_outlook/static/description/icon.png differ diff --git a/admin_light_user/README.rst b/admin_light_user/README.rst new file mode 100644 index 00000000..882e466c --- /dev/null +++ b/admin_light_user/README.rst @@ -0,0 +1,22 @@ +Admin Light User +================ +This module adds the management of users to the Admin Light application. + +A new group `Safe Administration / Users` is added. + +This group can: + +* Create new users +* Deactivate users +* Reset passwords +* Add/remove a group to/from a user + +This group can not grant an `Administration` to another user. + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) + +More information +---------------- +* Meet us at https://bit.ly/numigi-com diff --git a/admin_light_user/__init__.py b/admin_light_user/__init__.py new file mode 100644 index 00000000..a5834b64 --- /dev/null +++ b/admin_light_user/__init__.py @@ -0,0 +1,8 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from . import ( + auth_signup_binding, + mask_admin_groups, + prevent_grand_admin_access, +) diff --git a/admin_light_user/__manifest__.py b/admin_light_user/__manifest__.py new file mode 100644 index 00000000..26052c74 --- /dev/null +++ b/admin_light_user/__manifest__.py @@ -0,0 +1,32 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + 'name': 'Admin Light User', + 'version': '1.0.4', + 'author': 'Numigi', + 'maintainer': 'Numigi', + 'license': 'LGPL-3', + 'category': 'Other', + 'summary': 'Add a group to manage user access.', + 'depends': [ + 'admin_light_base', + + # This module auth_signup is auto-installed on all clients. + # It is important that the module is installed before running + # tests because it may cause access errors when creating + # users by non-super-admin. + # See TA#6395 + 'auth_signup', + + 'base_extended_security', + ], + 'data': [ + 'data.xml', + 'mask_admin_groups.xml', + 'security/ir.model.access.csv', + 'security/extended_security_rule.xml', + 'security/ir_rule.xml', + ], + 'installable': True, +} diff --git a/admin_light_user/auth_signup_binding.py b/admin_light_user/auth_signup_binding.py new file mode 100644 index 00000000..e0d915f0 --- /dev/null +++ b/admin_light_user/auth_signup_binding.py @@ -0,0 +1,20 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo import models, fields + + +class ResPartner(models.Model): + """Add missing access to fields on res.partner when creating a user. + + See TA#6395 and module auth_signup from the odoo code base. + """ + + _inherit = 'res.partner' + + signup_token = fields.Char( + groups="admin_light_user.group_user_management,base.group_erp_manager") + signup_type = fields.Char( + groups="admin_light_user.group_user_management,base.group_erp_manager") + signup_expiration = fields.Datetime( + groups="admin_light_user.group_user_management,base.group_erp_manager") diff --git a/admin_light_user/data.xml b/admin_light_user/data.xml new file mode 100644 index 00000000..fca8b3d6 --- /dev/null +++ b/admin_light_user/data.xml @@ -0,0 +1,46 @@ + + + + + Users + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/admin_light_user/i18n/fr.po b/admin_light_user/i18n/fr.po new file mode 100644 index 00000000..6739463c --- /dev/null +++ b/admin_light_user/i18n/fr.po @@ -0,0 +1,95 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * admin_light_user +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-03-31 18:21+0000\n" +"PO-Revision-Date: 2021-03-31 14:23-0400\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 2.0.6\n" + +#. module: admin_light_user +#: model:ir.model,name:admin_light_user.model_res_groups +msgid "Access Groups" +msgstr "" + +#. module: admin_light_user +#: model:ir.model,name:admin_light_user.model_res_partner +msgid "Contact" +msgstr "" + +#. module: admin_light_user +#: model:ir.ui.menu,name:admin_light_user.menu_groups +msgid "Groups" +msgstr "Groupes" + +#. module: admin_light_user +#: model_terms:ir.ui.view,arch_db:admin_light_user.user_groups_view_without_admin_applications +msgid "Other" +msgstr "Autres" + +#. module: admin_light_user +#: model:ir.model.fields,field_description:admin_light_user.field_res_partner__signup_expiration +#: model:ir.model.fields,field_description:admin_light_user.field_res_users__signup_expiration +msgid "Signup Expiration" +msgstr "" + +#. module: admin_light_user +#: model:ir.model.fields,field_description:admin_light_user.field_res_partner__signup_token +#: model:ir.model.fields,field_description:admin_light_user.field_res_users__signup_token +msgid "Signup Token" +msgstr "" + +#. module: admin_light_user +#: model:ir.model.fields,field_description:admin_light_user.field_res_partner__signup_type +#: model:ir.model.fields,field_description:admin_light_user.field_res_users__signup_type +msgid "Signup Token Type" +msgstr "" + +#. module: admin_light_user +#: model_terms:ir.ui.view,arch_db:admin_light_user.user_groups_view_without_admin_applications +msgid "User Type" +msgstr "" + +#. module: admin_light_user +#: model:ir.model,name:admin_light_user.model_res_users +#: model:ir.ui.menu,name:admin_light_user.menu_user_management +#: model:ir.ui.menu,name:admin_light_user.menu_users +#: model:res.groups,name:admin_light_user.group_user_management +msgid "Users" +msgstr "Utilisateurs" + +#. module: admin_light_user +#: code:addons/admin_light_user/prevent_grand_admin_access.py:57 +#, python-format +msgid "" +"You are not authorized to archive or unarchive a user with super admin " +"priviledges. Only the super admin can." +msgstr "" +"Vous n'êtes pas autorisé à archiver ou désarchiver un utilisateur avec des " +"droits super administrateur. Seulement le super administrateur peut." + +#. module: admin_light_user +#: code:addons/admin_light_user/prevent_grand_admin_access.py:44 +#: code:addons/admin_light_user/prevent_grand_admin_access.py:46 +#, python-format +msgid "" +"You are not authorized to grant admin priviledges. Only the super admin can." +msgstr "" +"Vous n'êtes pas autorisé à accorder des privilèges administrateurs. " +"Seulement le super administrateur peut." + +#~ msgid "Application Accesses" +#~ msgstr "Accès à l'application" + +#~ msgid "Other Extra Rights" +#~ msgstr "Droits supplémentaires" diff --git a/admin_light_user/mask_admin_groups.py b/admin_light_user/mask_admin_groups.py new file mode 100644 index 00000000..580f8d1b --- /dev/null +++ b/admin_light_user/mask_admin_groups.py @@ -0,0 +1,99 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from lxml import etree +from odoo import api, models + +SUPER_ADMIN_APPLICATIONS = [ + 'admin_light_base.module_category_admin', + 'base.module_category_administration_administration', + 'base.module_category_hidden', + 'base.module_category_usability', +] + +ADMIN_LIGHT_USER_VIEW = 'admin_light_user.user_groups_view_without_admin_applications' + + +class GroupsWithUpdateAdminLightView(models.Model): + + _inherit = 'res.groups' + + @api.model + def _update_user_groups_view(self): + """After updating the main user/groups view, update the admin light view. + + This method can be loaded before the view is installed. In such case, we skip. + """ + super()._update_user_groups_view() + if self.env.ref(ADMIN_LIGHT_USER_VIEW, raise_if_not_found=False): + self.env['res.users'].update_admin_light_user_group_view() + + +class UsersWithAdminGroupsMasked(models.Model): + + _inherit = 'res.users' + + @api.model + def update_admin_light_user_group_view(self): + """Update the content of the admin light user form. + + This form is the same as the standard admin form view but with the groups + related to super admin applications removed. + """ + admin_view = self.env.ref('base.user_groups_view') + admin_view_tree = etree.fromstring(admin_view.arch) + + _remove_admin_application_selection_fields(admin_view_tree, self.env) + _remove_admin_application_checkbox_fields(admin_view_tree, self.env) + _remove_separators_with_no_fields_below(admin_view_tree) + + xml_content = etree.tostring(admin_view_tree, pretty_print=True, encoding="unicode") + admin_light_view = self.env.ref(ADMIN_LIGHT_USER_VIEW) + admin_light_view.write({'arch': xml_content}) + + +def _remove_admin_application_selection_fields(tree: etree._Element, env: api.Environment): + """Remove selection fields of groups related to super admin applications from the view tree. + + :param tree: the xml tree of the view to modify. + :param env: the odoo environment + """ + admin_applications = [env.ref(app) for app in SUPER_ADMIN_APPLICATIONS] + + selection_group_fields = tree.xpath("//field[starts-with(@name, 'sel_groups')]") + for node in selection_group_fields: + selected_group_ids = [ + int(g) for g in node.attrib['name'].replace('sel_groups_', '').split('_') + ] + selected_groups = env['res.groups'].browse(selected_group_ids) + if selected_groups[0].category_id in admin_applications: + node.getparent().remove(node) + + +def _remove_admin_application_checkbox_fields(tree: etree._Element, env: api.Environment): + """Remove checkbox fields of groups related to super admin applications from the view tree. + + :param tree: the xml tree of the view to modify. + :param env: the odoo environment + """ + admin_applications = [env.ref(app) for app in SUPER_ADMIN_APPLICATIONS] + + checkbox_group_fields = tree.xpath("//field[starts-with(@name, 'in_group_')]") + for node in checkbox_group_fields: + selected_group_id = int(node.attrib['name'].replace('in_group_', '')) + selected_group = env['res.groups'].browse(selected_group_id) + if selected_group.category_id in admin_applications: + node.getparent().remove(node) + + +def _remove_separators_with_no_fields_below(tree: etree._Element): + """Remove separators with no fields below from the view tree. + + :param tree: the xml tree of the view to modify. + """ + seperators = tree.xpath("//separator") + group_administration = tree.xpath("//group[@string='Administration']") + for node in seperators + group_administration: + sibling_node = node.getnext() + if sibling_node is None or sibling_node.tag != 'field': + node.getparent().remove(node) diff --git a/admin_light_user/mask_admin_groups.xml b/admin_light_user/mask_admin_groups.xml new file mode 100644 index 00000000..32f47806 --- /dev/null +++ b/admin_light_user/mask_admin_groups.xml @@ -0,0 +1,17 @@ + + + + + + + + + User Access View: Remove Admin Applications + res.users + + + + + + + diff --git a/admin_light_user/prevent_grand_admin_access.py b/admin_light_user/prevent_grand_admin_access.py new file mode 100644 index 00000000..326a8a8d --- /dev/null +++ b/admin_light_user/prevent_grand_admin_access.py @@ -0,0 +1,61 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo import api, models, _ +from odoo.exceptions import AccessError + +ADMIN_GROUPS = [ + "base.group_erp_manager", + "base.group_system", + "admin_light_base.group_admin", +] + + +class UsersWithNotGrantAdminAccessConstraint(models.Model): + + _inherit = "res.users" + + @api.model + def create(self, vals): + if self.env.user.has_group("admin_light_user.group_user_management"): + self._check_not_granting_admin_priviledges(vals) + + return super().create(vals) + + def write(self, vals): + if self.env.user.has_group("admin_light_user.group_user_management"): + self._check_not_granting_admin_priviledges(vals) + self._check_not_unarchiving_admin(vals) + + return super().write(vals) + + def _check_not_granting_admin_priviledges(self, vals): + groups_id = vals.get("groups_id", []) + + admin_group_ids = {self.env.ref(group_ref).id for group_ref in ADMIN_GROUPS} + + is_granting_admin = any( + (command[0] == 4 and command[1] in admin_group_ids) + or (command[0] == 6 and set(command[2]) & admin_group_ids) + for command in groups_id + ) + + if is_granting_admin: + raise AccessError( + _( + "You are not authorized to grant admin priviledges. " + "Only the super admin can." + ) + ) + + def _check_not_unarchiving_admin(self, vals): + if "active" in vals: + super_admin_group = self.env.ref("base.group_erp_manager") + if super_admin_group in self.mapped("groups_id"): + raise AccessError( + _( + "You are not authorized to archive or unarchive a user with " + "super admin priviledges. " + "Only the super admin can." + ) + ) diff --git a/admin_light_user/security/extended_security_rule.xml b/admin_light_user/security/extended_security_rule.xml new file mode 100644 index 00000000..e78cfd5c --- /dev/null +++ b/admin_light_user/security/extended_security_rule.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + diff --git a/admin_light_user/security/ir.model.access.csv b/admin_light_user/security/ir.model.access.csv new file mode 100644 index 00000000..9e712990 --- /dev/null +++ b/admin_light_user/security/ir.model.access.csv @@ -0,0 +1,11 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_groups,Admin Light: res.groups,base.model_res_groups,group_user_management,1,1,0,0 +access_ir_model_access,Admin Light: ir.model.access,base.model_ir_model_access,group_user_management,1,0,0,0 +access_ir_module_category,Admin Light: ir.module.category,base.model_ir_module_category,group_user_management,1,0,0,0 +access_ir_rule,Admin Light: ir.rule,base.model_ir_rule,group_user_management,1,0,0,0 +access_ir_ui_menu,Admin Light: ir.ui.menu,base.model_ir_ui_menu,group_user_management,1,0,0,0 +access_ir_ui_view,Admin Light: ir.ui.view,base.model_ir_ui_view,group_user_management,1,0,0,0 +access_users,Admin Light: res.users,base.model_res_users,group_user_management,1,1,1,1 +access_partners,Admin Light: res.partner,base.model_res_partner,group_user_management,1,1,1,0 +access_change_password_wizard,Admin Light: change.password.wizard,base.model_change_password_wizard,group_user_management,1,1,1,0 +access_change_password_user,Admin Light: change.password.user,base.model_change_password_user,group_user_management,1,1,1,0 diff --git a/admin_light_user/security/ir_rule.xml b/admin_light_user/security/ir_rule.xml new file mode 100644 index 00000000..a7775a5c --- /dev/null +++ b/admin_light_user/security/ir_rule.xml @@ -0,0 +1,11 @@ + + + + + Admin Light: multi-company + + + [] + + + diff --git a/admin_light_user/static/description/icon.png b/admin_light_user/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/admin_light_user/static/description/icon.png differ diff --git a/admin_light_user/tests/__init__.py b/admin_light_user/tests/__init__.py new file mode 100644 index 00000000..c9a28baa --- /dev/null +++ b/admin_light_user/tests/__init__.py @@ -0,0 +1,2 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/admin_light_user/tests/test_prevent_grand_admin_access.py b/admin_light_user/tests/test_prevent_grand_admin_access.py new file mode 100644 index 00000000..3bef4636 --- /dev/null +++ b/admin_light_user/tests/test_prevent_grand_admin_access.py @@ -0,0 +1,99 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from ddt import ddt, data + +import pytest + +from odoo.tests import common +from odoo.exceptions import AccessError +from ..prevent_grand_admin_access import ADMIN_GROUPS + + +@ddt +class TestPreventGrandAdminAccess(common.SavepointCase): + """Test that a light admin user may not grant admin priviledges.""" + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.admin = cls.env.ref('base.user_demo') + cls.admin.groups_id = ( + cls.env.ref('admin_light_user.group_user_management') | + cls.env.ref('base.group_user') + ) + + cls.user = cls.env['res.users'].create({ + 'name': 'Basic User', + 'login': 'basic_user', + }) + + def test_onWrite_ifGrantEmployeeAccess_thenAccessErrorNotRaised(self): + self.user.sudo(self.admin).write({ + 'groups_id': [(4, self.env.ref('base.group_user').id)], + }) + + @data(*ADMIN_GROUPS) + def test_onWrite_ifGrantAdmin_thenRaiseAccessError(self, admin_group): + with pytest.raises(AccessError): + self.user.sudo(self.admin).write({ + 'groups_id': [(4, self.env.ref(admin_group).id)], + }) + + def test_onCreate_ifGrantEmployeeAccess_thenAccessErrorNotRaised(self): + self.env['res.users'].sudo(self.admin).create({ + 'name': 'Basic User 2', + 'login': 'basic_user_2', + 'email': 'basic_user_2@example.com', + 'groups_id': [(4, self.env.ref('base.group_user').id)], + }) + + @data(*ADMIN_GROUPS) + def test_onCreate_ifGrantAdmin_thenRaiseAccessError(self, admin_group): + with pytest.raises(AccessError): + self.env['res.users'].sudo(self.admin).create({ + 'name': 'Basic User 2', + 'login': 'basic_user_2', + 'email': 'basic_user_2@example.com', + 'groups_id': [(4, self.env.ref(admin_group).id)], + }) + + def test_onWrite_withGroupList_ifGrantEmployeeAccess_thenAccessErrorNotRaised(self): + self.user.sudo(self.admin).write({ + 'groups_id': [(6, 0, [self.env.ref('base.group_user').id])], + }) + + @data(*ADMIN_GROUPS) + def test_onWrite_withGroupList_ifGrantAdmin_thenRaiseAccessError(self, admin_group): + groups = [self.env.ref('base.group_user').id, self.env.ref(admin_group).id] + with pytest.raises(AccessError): + self.user.sudo(self.admin).write({ + 'groups_id': [(6, 0, groups)], + }) + + def test_onCreate_withGroupList_ifGrantEmployeeAccess_thenAccessErrorNotRaised(self): + self.env['res.users'].sudo(self.admin).create({ + 'name': 'Basic User 2', + 'login': 'basic_user_2', + 'email': 'basic_user_2@example.com', + 'groups_id': [(6, 0, [self.env.ref('base.group_user').id])], + }) + + @data(*ADMIN_GROUPS) + def test_onCreate_withGroupList_ifGrantAdmin_thenRaiseAccessError(self, admin_group): + groups = [self.env.ref('base.group_user').id, self.env.ref(admin_group).id] + with pytest.raises(AccessError): + self.env['res.users'].sudo(self.admin).create({ + 'name': 'Basic User 2', + 'login': 'basic_user_2', + 'email': 'basic_user_2@example.com', + 'groups_id': [(6, 0, groups)], + }) + + def test_can_not_unarchive_super_admin(self): + self.user.groups_id |= self.env.ref("base.group_erp_manager") + with pytest.raises(AccessError): + self.user.sudo(self.admin).active = True + + def test_can_unarchive_non_admin_user(self): + self.user.sudo(self.admin).active = True diff --git a/admin_light_web/README.rst b/admin_light_web/README.rst new file mode 100644 index 00000000..44a1e106 --- /dev/null +++ b/admin_light_web/README.rst @@ -0,0 +1,27 @@ +Admin Light Web +=============== +This module adds customization of the user interface to the Admin Light application. + +Custom Labels +------------- +A new group `Safe Administration / Custom Labels` is added. + +This group has access to: + +* Edit the list of custom labels + +Date Filters +------------ +A new group `Safe Administration / Date Filters` is added. + +This group has access to: + +* Edit the list of custom date filters + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) + +More information +---------------- +* Meet us at https://bit.ly/numigi-com diff --git a/admin_light_web/__init__.py b/admin_light_web/__init__.py new file mode 100644 index 00000000..c9a28baa --- /dev/null +++ b/admin_light_web/__init__.py @@ -0,0 +1,2 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/admin_light_web/__manifest__.py b/admin_light_web/__manifest__.py new file mode 100644 index 00000000..8d673805 --- /dev/null +++ b/admin_light_web/__manifest__.py @@ -0,0 +1,24 @@ +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + 'name': 'Admin Light Web', + 'version': '1.0.0', + 'author': 'Numigi', + 'maintainer': 'Numigi', + 'license': 'LGPL-3', + 'category': 'Other', + 'summary': 'Add email management to the Admin Light application.', + 'depends': [ + 'admin_light_base', + 'web_custom_label', + 'web_search_date_range', + ], + 'data': [ + 'common.xml', + 'custom_labels.xml', + 'date_filters.xml', + 'security/ir.model.access.csv', + ], + 'installable': True, +} diff --git a/admin_light_web/common.xml b/admin_light_web/common.xml new file mode 100644 index 00000000..72d225ed --- /dev/null +++ b/admin_light_web/common.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/admin_light_web/custom_labels.xml b/admin_light_web/custom_labels.xml new file mode 100644 index 00000000..ede8457c --- /dev/null +++ b/admin_light_web/custom_labels.xml @@ -0,0 +1,19 @@ + + + + + Custom Labels + + + + + + + diff --git a/admin_light_web/date_filters.xml b/admin_light_web/date_filters.xml new file mode 100644 index 00000000..9f346863 --- /dev/null +++ b/admin_light_web/date_filters.xml @@ -0,0 +1,19 @@ + + + + + Date Filters + + + + + + + diff --git a/admin_light_web/i18n/fr.po b/admin_light_web/i18n/fr.po new file mode 100644 index 00000000..3c0d4c88 --- /dev/null +++ b/admin_light_web/i18n/fr.po @@ -0,0 +1,35 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * admin_light_web +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-24 16:34+0000\n" +"PO-Revision-Date: 2019-01-24 11:36-0500\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 2.0.6\n" + +#. module: admin_light_web +#: model:ir.ui.menu,name:admin_light_web.menu_custom_label +#: model:res.groups,name:admin_light_web.group_custom_label +msgid "Custom Labels" +msgstr "Libellés personnalisés" + +#. module: admin_light_web +#: model:ir.ui.menu,name:admin_light_web.menu_date_filter +#: model:res.groups,name:admin_light_web.group_date_filter +msgid "Date Filters" +msgstr "Filtres de dates" + +#. module: admin_light_web +#: model:ir.ui.menu,name:admin_light_web.menu_web +msgid "User Interface" +msgstr "Interface utilisateur" diff --git a/admin_light_web/security/ir.model.access.csv b/admin_light_web/security/ir.model.access.csv new file mode 100644 index 00000000..b5c6d4ca --- /dev/null +++ b/admin_light_web/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_web_custom_label,Admin Light: web.custom.label,web_custom_label.model_web_custom_label,group_custom_label,1,1,1,1 +access_web_date_filters,Admin Light: search.date.range.filter,web_search_date_range.model_search_date_range_filter,group_date_filter,1,1,1,1 diff --git a/admin_light_web/static/description/icon.png b/admin_light_web/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/admin_light_web/static/description/icon.png differ diff --git a/gitoo.yml b/gitoo.yml index b3f8af1a..672272c1 100644 --- a/gitoo.yml +++ b/gitoo.yml @@ -31,8 +31,29 @@ - url: https://github.com/OCA/dms branch: "14.0" # TA#46953 +- url: https://github.com/OCA/reporting-engine + branch: "14.0" + includes: + - bi_view_editor + +- url: https://github.com/OCA/server-tools + branch: "14.0" + includes: + - auditlog # TA#56928 + +- url: https://github.com/OCA/server-ux + branch: "14.0" + includes: + - filter_multi_user # TA#53673 + - url: https://github.com/OCA/web branch: "14.0" includes: - web_view_searchpanel # TA#46953 - web_drop_target # TA#46953 + +- url: https://github.com/numigi/odoo-web-addons + branch: "14.0" + includes: + - web_custom_label + - web_search_date_range diff --git a/numipack/README.rst b/numipack/README.rst new file mode 100644 index 00000000..a3015769 --- /dev/null +++ b/numipack/README.rst @@ -0,0 +1,42 @@ +NumiPack +======== +Module that install functionnal modules required on every projects. + +Installed Modules +----------------- + +Odoo Modules +~~~~~~~~~~~~ +* `Auth Password Policy `_ +* `Board `_ +* `Document `_ + +Numigi Modules +~~~~~~~~~~~~~~ +* `Aeroo Reports `_ +* `Attachment Access Token Portal `_ +* `Disable Quick Create `_ +* `Mail Message From Author `_ +* `Mail Template Default `_ +* `Partner Edit Group `_ +* `Partner Phone Validation `_ +* `Product Extra Views `_ +* `Web Contextual Search Favorite `_ +* `Web Custom Label `_ +* `Web Email Field New Tab `_ +* `Web Search Date Range `_ + +OCA Modules +~~~~~~~~~~~ +* `Base Technical Features `_ +* `Disable Odoo Online `_ +* `Mass Editing `_ +* `Web Search With And `_ + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) + +More information +---------------- +* Meet us at https://bit.ly/numigi-com diff --git a/numipack/__init__.py b/numipack/__init__.py new file mode 100644 index 00000000..b1432af8 --- /dev/null +++ b/numipack/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/numipack/__manifest__.py b/numipack/__manifest__.py new file mode 100644 index 00000000..d396b0ec --- /dev/null +++ b/numipack/__manifest__.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- +# © 2018 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + 'name': 'Numipack', + 'version': '1.0.4', + 'author': 'Numigi', + 'maintainer': 'Numigi', + 'license': 'LGPL-3', + 'category': 'Other', + 'summary': 'Functional dependencies for all Odoo instances.', + 'depends': [ + # Numigi/odoo-base + 'admin_light_auditlog', # TA#3892 + 'admin_light_calendar', # TA#3892 + 'admin_light_company', # TA#19785 + 'admin_light_filters', # TA#52688 + 'admin_light_mail', # TA#3892 + 'admin_light_base', # TA#4894 + 'admin_light_user', # TA#4894 + 'admin_light_web', # TA#3892 + 'prod2x', + 'prod2x_user_activation', + + # OCA/server-ux + 'base_technical_features', + 'mass_editing', # TA#4119 + + # odoo/odoo + 'auth_password_policy', # TA#9918 + 'board', + # 'document', # TA#3415 + 'product', + + # OCA/server-brand + 'disable_odoo_online', + + # Numigi/aeroo_reports + 'report_aeroo', + 'report_aeroo_replace_qweb', + + # Numigi/odoo-partner-addons + 'contacts_config_menu_moved_right', # TA#18504 + 'partner_autocomplete_disable', # TA#47076 + 'partner_edit_group', # TA#10975 + # 'partner_phone_validation', # TA#5979 + + # Numigi/odoo-base-addons + 'base_extended_security', + 'base_external_report_layout', # TA#57998 + 'ir_attachment_access_token_portal', # TA#6109 + 'mail_template_default', # TA#21323 + 'web_email_field_new_tab', # TA#9753 + + # Numigi/odoo-product-addons + # 'product_extra_views', # TA#15297 + + # Numigi/odoo-web-addons + 'web_custom_label', # TA#3928 + 'web_custom_modifier', # TA#16243 + 'web_search_date_range', + 'disable_quick_create', + + # OCA/web + 'web_advanced_search', # TA#53339 + 'web_search_with_and', # TA#2547 TA#53106 + + # itpp-labs/sync-addons + 'base_automation_webhook', # TA#56932 TA#59200 + + ], + 'data': [ + 'data/auditlog_rule.xml', + 'security/extended_security_rule.xml', + ], + 'installable': True, +} diff --git a/numipack/data/auditlog_rule.xml b/numipack/data/auditlog_rule.xml new file mode 100644 index 00000000..f710ef75 --- /dev/null +++ b/numipack/data/auditlog_rule.xml @@ -0,0 +1,84 @@ + + + + + Product Category Auditlog Rule + + + + + + + + Product Product Auditlog Rule + + + + + + + + Product Template Auditlog Rule + + + + + + + + Product uom Auditlog Rule + + + + + + + + Bank Auditlog Rule + + + + + + + + Company Auditlog Rule + + + + + + + + Currency Auditlog Rule + + + + + + + + Partner Auditlog Rule + + + + + + + + Partner Bank Auditlog Rule + + + + + + + + Partner Category Auditlog Rule + + + + + + + diff --git a/numipack/security/extended_security_rule.xml b/numipack/security/extended_security_rule.xml new file mode 100644 index 00000000..8c05ae58 --- /dev/null +++ b/numipack/security/extended_security_rule.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/numipack/static/description/icon.png b/numipack/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/numipack/static/description/icon.png differ diff --git a/numipack_account/README.rst b/numipack_account/README.rst new file mode 100644 index 00000000..d8b14162 --- /dev/null +++ b/numipack_account/README.rst @@ -0,0 +1,50 @@ +NumiPack - Accounting +===================== + +.. contents:: Table of Contents + +Installed Modules +----------------- +This module installs all modules required on every projects that use the accounting app. + +* `Account Bank Menu `_ +* `Account Check Printing Aeroo `_ +* `Account fr_CA labels `_ +* `Account Invoice Check Total`_ +* `Account Move Chatter `_ +* `Account Negative Debit Credit `_ +* `Account Payment Cancel Group `_ +* `Invoice Currency Validation `_ +* `Vendor Invoice Full List `_ + +_`Account Invoice Check Total` +------------------------------ +This module is from `OCA `_. + +(1) It adds a field to enter the total amount written on the supplier invoice. +(2) The difference between the total on the invoice and computed in Odoo is displayed. + +.. image:: static/description/account_invoice_check_total__supplier_invoice.png + +By default, the feature is hidden. +To activate it, you must fo to the settings of the accounting app and check the following box: + +.. image:: static/description/account_invoice_check_total__config.png + +Access Rights +------------- +The module removes all access rights to delete the following models: + +* Analytic Account (account.analytic.account) +* Analytic Account Group (account.analytic.group) +* Invoice (account.invoice) +* Journal Entry (account.move) +* Payment (account.payment) + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) + +More information +---------------- +* Meet us at https://bit.ly/numigi-com diff --git a/numipack_account/__init__.py b/numipack_account/__init__.py new file mode 100644 index 00000000..6ef2df91 --- /dev/null +++ b/numipack_account/__init__.py @@ -0,0 +1,2 @@ +# © 2019 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/numipack_account/__manifest__.py b/numipack_account/__manifest__.py new file mode 100644 index 00000000..8fded249 --- /dev/null +++ b/numipack_account/__manifest__.py @@ -0,0 +1,41 @@ +# © 2019 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + 'name': 'Numipack Accounting', + 'version': '1.2.2', + 'author': 'Numigi', + 'maintainer': 'Numigi', + 'license': 'LGPL-3', + 'category': 'Other', + 'summary': 'Functional dependencies for all Odoo instances using accounting.', + 'depends': [ + 'numipack', + + # Numigi/odoo-base-addons + 'base_extended_security', + + # Numigi/odoo-account-addons + 'account_bank_menu', + 'account_fr_ca_labels', + 'account_fiscalyear_end_on_company', # TA#58024 + # 'account_invoice_check_total', + 'account_move_reversal_access', # TA#33729 + 'account_move_unique_reversal', # TA#33729 + 'account_negative_debit_credit', + 'account_payment_cancel_group', + 'invoice_currency_validation', + + # Numigi/aeroo_reports + 'account_check_printing_aeroo', + + # Numigi/web-addons + 'web_search_date_range_account', + ], + 'data': [ + 'data/auditlog_rule.xml', + 'security/extended_security_rule.xml', + 'views/res_company.xml', + ], + 'installable': True, +} diff --git a/numipack_account/data/auditlog_rule.xml b/numipack_account/data/auditlog_rule.xml new file mode 100644 index 00000000..0c694d75 --- /dev/null +++ b/numipack_account/data/auditlog_rule.xml @@ -0,0 +1,84 @@ + + + + + Account Account Auditlog Rule + + + + + + + + Fiscal Position Auditlog Rule + + + + + + + + Account Invoice Auditlog Rule + + + + + + + + Account Journal Auditlog Rule + + + + + + + + Account Payment Auditlog Rule + + + + + + + + Account Payment Term Auditlog Rule + + + + + + + + Account Tax Auditlog Rule + + + + + + + + Account Analytic Auditlog Rule + + + + + + + + Account Analtic Auditlog Rule + + + + + + + + Payment Aquirer Auditlog Rule + + + + + + + diff --git a/numipack_account/i18n/fr.po b/numipack_account/i18n/fr.po new file mode 100644 index 00000000..ca6480a7 --- /dev/null +++ b/numipack_account/i18n/fr.po @@ -0,0 +1,23 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * numipack_account +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-24 16:34+0000\n" +"PO-Revision-Date: 2019-01-24 11:36-0500\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 2.0.6\n" + +#. module: numipack_account +#: model:ir.model.fields,field_description:numipack_account.field_res_company__account_setup_fy_data_state +msgid "State of the onboarding fiscal year step" +msgstr "État de l'étape de l'année fiscale d'intégration" \ No newline at end of file diff --git a/numipack_account/security/extended_security_rule.xml b/numipack_account/security/extended_security_rule.xml new file mode 100644 index 00000000..3b2737c1 --- /dev/null +++ b/numipack_account/security/extended_security_rule.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/numipack_account/static/description/account_invoice_check_total__config.png b/numipack_account/static/description/account_invoice_check_total__config.png new file mode 100644 index 00000000..3b1f0c9a Binary files /dev/null and b/numipack_account/static/description/account_invoice_check_total__config.png differ diff --git a/numipack_account/static/description/account_invoice_check_total__supplier_invoice.png b/numipack_account/static/description/account_invoice_check_total__supplier_invoice.png new file mode 100644 index 00000000..4a909181 Binary files /dev/null and b/numipack_account/static/description/account_invoice_check_total__supplier_invoice.png differ diff --git a/numipack_account/static/description/icon.png b/numipack_account/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/numipack_account/static/description/icon.png differ diff --git a/numipack_account/views/res_company.xml b/numipack_account/views/res_company.xml new file mode 100644 index 00000000..2a145db8 --- /dev/null +++ b/numipack_account/views/res_company.xml @@ -0,0 +1,13 @@ + + + + res.company.form.inherit.account + res.company + + + + + + + + diff --git a/numipack_account_enterprise/README.rst b/numipack_account_enterprise/README.rst new file mode 100644 index 00000000..df0cd437 --- /dev/null +++ b/numipack_account_enterprise/README.rst @@ -0,0 +1,13 @@ +NumiPack - Accounting - Enterprise +================================== +This module installs all enterprise modules required on every projects that use the accounting app. + +* `Account Report Line Menu `_ + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) + +More information +---------------- +* Meet us at https://bit.ly/numigi-com diff --git a/numipack_account_enterprise/__init__.py b/numipack_account_enterprise/__init__.py new file mode 100644 index 00000000..6ef2df91 --- /dev/null +++ b/numipack_account_enterprise/__init__.py @@ -0,0 +1,2 @@ +# © 2019 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/numipack_account_enterprise/__manifest__.py b/numipack_account_enterprise/__manifest__.py new file mode 100644 index 00000000..fe84c672 --- /dev/null +++ b/numipack_account_enterprise/__manifest__.py @@ -0,0 +1,20 @@ +# © 2019 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + 'name': 'Numipack Accounting', + 'version': '1.0.0', + 'author': 'Numigi', + 'maintainer': 'Numigi', + 'license': 'LGPL-3', + 'category': 'Other', + 'summary': 'Functional dependencies for all Odoo instances using enterprise accounting.', + 'depends': [ + # odoo/enterprise + 'account_accountant', + + # Numigi/odoo-account-addons + 'account_report_line_menu', + ], + 'installable': True, +} diff --git a/numipack_account_enterprise/static/description/icon.png b/numipack_account_enterprise/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/numipack_account_enterprise/static/description/icon.png differ diff --git a/numipack_project/README.rst b/numipack_project/README.rst new file mode 100644 index 00000000..38e18348 --- /dev/null +++ b/numipack_project/README.rst @@ -0,0 +1,30 @@ +NumiPack - Project +================== + +.. contents:: Table of Contents + +Installed Modules +----------------- + +* `Project Stage No Quick Create `_ +* `Project Task Date Planned `_ +* `Project Task Full Text Search `_ +* `Project Task Stage External Mail `_ +* `Project Task Type `_ +* `Project Type `_ + +Access Rights +------------- +The module removes access rights to delete the following models: + +* Analytic Account (account.analytic.account) +* Analytic Account Group (account.analytic.group) +* Project (project.project) + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) + +More information +---------------- +* Meet us at https://bit.ly/numigi-com diff --git a/numipack_project/__init__.py b/numipack_project/__init__.py new file mode 100644 index 00000000..6ef2df91 --- /dev/null +++ b/numipack_project/__init__.py @@ -0,0 +1,2 @@ +# © 2019 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/numipack_project/__manifest__.py b/numipack_project/__manifest__.py new file mode 100644 index 00000000..6d3b7fc4 --- /dev/null +++ b/numipack_project/__manifest__.py @@ -0,0 +1,34 @@ +# © 2019 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + 'name': 'Numipack - Project', + 'version': '1.0.1', + 'author': 'Numigi', + 'maintainer': 'Numigi', + 'license': 'LGPL-3', + 'category': 'Other', + 'summary': 'Functional dependencies for all Odoo instances using sales.', + 'depends': [ + 'numipack', + + # odoo/odoo + 'hr_timesheet', + 'project', + + # Numigi / odoo-project-addons + 'project_default_task_stage', # TA#34544 + 'project_list', # TA#55010 + 'project_stage_no_quick_create', + 'project_task_date_planned', + 'project_task_full_text_search', + 'project_task_stage_external_mail', # TA#15910 + 'project_task_type', + 'project_type', + ], + 'data': [ + 'data/auditlog_rule.xml', + 'security/extended_security_rule.xml', + ], + 'installable': True, +} diff --git a/numipack_project/data/auditlog_rule.xml b/numipack_project/data/auditlog_rule.xml new file mode 100644 index 00000000..bab99ef8 --- /dev/null +++ b/numipack_project/data/auditlog_rule.xml @@ -0,0 +1,12 @@ + + + + + Project Auditlog Rule + + + + + + + diff --git a/numipack_project/security/extended_security_rule.xml b/numipack_project/security/extended_security_rule.xml new file mode 100644 index 00000000..20d2b3b8 --- /dev/null +++ b/numipack_project/security/extended_security_rule.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/numipack_project/static/description/icon.png b/numipack_project/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/numipack_project/static/description/icon.png differ diff --git a/numipack_purchase/README.rst b/numipack_purchase/README.rst new file mode 100644 index 00000000..98e4ee85 --- /dev/null +++ b/numipack_purchase/README.rst @@ -0,0 +1,24 @@ +NumiPack - Purchase +=================== + +.. contents:: Table of Contents + +Installed Modules +----------------- +For now, this module only installs the purchase application. + +Access Rights +------------- +The module removes access rights to delete the following models: + +* Journal Entry (account.move) +* Invoice (account.invoice) +* Purchase Order (purchase.order) + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) + +More information +---------------- +* Meet us at https://bit.ly/numigi-com diff --git a/numipack_purchase/__init__.py b/numipack_purchase/__init__.py new file mode 100644 index 00000000..6ef2df91 --- /dev/null +++ b/numipack_purchase/__init__.py @@ -0,0 +1,2 @@ +# © 2019 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/numipack_purchase/__manifest__.py b/numipack_purchase/__manifest__.py new file mode 100644 index 00000000..fc7fc4c7 --- /dev/null +++ b/numipack_purchase/__manifest__.py @@ -0,0 +1,21 @@ +# © 2019 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + 'name': 'Numipack - Purchase', + 'version': '1.0.1', + 'author': 'Numigi', + 'maintainer': 'Numigi', + 'license': 'LGPL-3', + 'category': 'Other', + 'summary': 'Functional dependencies for all Odoo instances using purchases.', + 'depends': [ + 'numipack', + 'purchase', + ], + 'data': [ + 'data/auditlog_rule.xml', + 'security/extended_security_rule.xml', + ], + 'installable': True, +} diff --git a/numipack_purchase/data/auditlog_rule.xml b/numipack_purchase/data/auditlog_rule.xml new file mode 100644 index 00000000..2ef6801a --- /dev/null +++ b/numipack_purchase/data/auditlog_rule.xml @@ -0,0 +1,12 @@ + + + + + Purchase Order Auditlog Rule + + + + + + + diff --git a/numipack_purchase/security/extended_security_rule.xml b/numipack_purchase/security/extended_security_rule.xml new file mode 100644 index 00000000..4cc40357 --- /dev/null +++ b/numipack_purchase/security/extended_security_rule.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/numipack_purchase/static/description/icon.png b/numipack_purchase/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/numipack_purchase/static/description/icon.png differ diff --git a/numipack_sale/README.rst b/numipack_sale/README.rst new file mode 100644 index 00000000..58c5b1e2 --- /dev/null +++ b/numipack_sale/README.rst @@ -0,0 +1,23 @@ +NumiPack - Sales +================ + +.. contents:: Table of Contents + +Installed Modules +----------------- +For now, this module only installs the `Sale Management` application. + +Access Rights +------------- +The module removes access rights to delete the following models: + +* Invoice (account.invoice) +* Sale Order (sale.order) + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) + +More information +---------------- +* Meet us at https://bit.ly/numigi-com diff --git a/numipack_sale/__init__.py b/numipack_sale/__init__.py new file mode 100644 index 00000000..6ef2df91 --- /dev/null +++ b/numipack_sale/__init__.py @@ -0,0 +1,2 @@ +# © 2019 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/numipack_sale/__manifest__.py b/numipack_sale/__manifest__.py new file mode 100644 index 00000000..3e720a36 --- /dev/null +++ b/numipack_sale/__manifest__.py @@ -0,0 +1,26 @@ +# © 2019 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + 'name': 'Numipack - Sales', + 'version': '1.0.1', + 'author': 'Numigi', + 'maintainer': 'Numigi', + 'license': 'LGPL-3', + 'category': 'Other', + 'summary': 'Functional dependencies for all Odoo instances using sales.', + 'depends': [ + 'numipack', + + # odoo/odoo + 'sale_management', + + # numigi/odoo-product-addons + 'contacts_config_sale_manager', + ], + 'data': [ + 'data/auditlog_rule.xml', + 'security/extended_security_rule.xml', + ], + 'installable': True, +} diff --git a/numipack_sale/data/auditlog_rule.xml b/numipack_sale/data/auditlog_rule.xml new file mode 100644 index 00000000..1fefa824 --- /dev/null +++ b/numipack_sale/data/auditlog_rule.xml @@ -0,0 +1,12 @@ + + + + + Sale Order Auditlog Rule + + + + + + + diff --git a/numipack_sale/security/extended_security_rule.xml b/numipack_sale/security/extended_security_rule.xml new file mode 100644 index 00000000..35f76569 --- /dev/null +++ b/numipack_sale/security/extended_security_rule.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/numipack_sale/static/description/icon.png b/numipack_sale/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/numipack_sale/static/description/icon.png differ diff --git a/numipack_stock/README.rst b/numipack_stock/README.rst new file mode 100644 index 00000000..bb8a2aaa --- /dev/null +++ b/numipack_stock/README.rst @@ -0,0 +1,16 @@ +NumiPack - Stock +================ + +.. contents:: Table of Contents + +Installed Modules +----------------- +This module installs all modules required on every projects that use the inventory app. + +* `Stock Immediate Transfer Disable `_ +* `Stock Move Origin Link `_ +* `Stock Picking Show Address `_ + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) diff --git a/numipack_stock/__init__.py b/numipack_stock/__init__.py new file mode 100644 index 00000000..c2ef8022 --- /dev/null +++ b/numipack_stock/__init__.py @@ -0,0 +1,2 @@ +# © 2020 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/numipack_stock/__manifest__.py b/numipack_stock/__manifest__.py new file mode 100644 index 00000000..0883de0e --- /dev/null +++ b/numipack_stock/__manifest__.py @@ -0,0 +1,29 @@ +# © 2020 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + 'name': 'Numipack Stock', + 'version': '1.0.3', + 'author': 'Numigi', + 'maintainer': 'Numigi', + 'license': 'LGPL-3', + 'category': 'Other', + 'summary': 'Functional dependencies for all Odoo instances using the inventory.', + 'depends': [ + 'numipack', + + # numigi/odoo-stock-addons + 'stock_account_visibility', + 'stock_move_origin_link', + 'stock_picking_show_address', + 'stock_quant_by_category', # TA#58430 + + # oca/stock-logistics-workflow + 'stock_valuation_layer_by_category', # TA#58430 + ], + 'data': [ + 'data/auditlog_rule.xml', + 'security/extended_security_rule.xml', + ], + 'installable': True, +} diff --git a/numipack_stock/data/auditlog_rule.xml b/numipack_stock/data/auditlog_rule.xml new file mode 100644 index 00000000..d9a4dd1d --- /dev/null +++ b/numipack_stock/data/auditlog_rule.xml @@ -0,0 +1,76 @@ + + + + + Stock Inventory Auditlog Rule + + + + + + + + Stock Location Auditlog Rule + + + + + + + + Location Route Auditlog Rule + + + + + + + + Stock Picking Auditlog Rule + + + + + + + + Stock Picking Type Auditlog Rule + + + + + + + + Stock Production Lot Auditlog Rule + + + + + + + + Stock Scrap Auditlog Rule + + + + + + + + Stock Warehouse Auditlog Rule + + + + + + + + Stock Warehouse Orderpoint Auditlog Rule + + + + + + + diff --git a/numipack_stock/security/extended_security_rule.xml b/numipack_stock/security/extended_security_rule.xml new file mode 100644 index 00000000..c300658e --- /dev/null +++ b/numipack_stock/security/extended_security_rule.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/numipack_stock/static/description/icon.png b/numipack_stock/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/numipack_stock/static/description/icon.png differ diff --git a/profile_hr/README.rst b/profile_hr/README.rst new file mode 100644 index 00000000..7629f67c --- /dev/null +++ b/profile_hr/README.rst @@ -0,0 +1,25 @@ +HR Profile +========== +This module adds the dependencies included in the HR profile. + +.. contents:: Table of Contents + +Installed Modules +----------------- + +* `HR Contract Wage Type `_ +* `HR Contracts `_ +* `HR Employee Firstname `_ +* `HR Employee Phone Extension `_ +* `HR Events `_ +* `HR Holidays `_ +* `HR Organization Chart `_ +* `Partner Firstname `_ + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) + +More information +---------------- +* Meet us at https://bit.ly/numigi-com diff --git a/profile_hr/__init__.py b/profile_hr/__init__.py new file mode 100644 index 00000000..efbef73d --- /dev/null +++ b/profile_hr/__init__.py @@ -0,0 +1,2 @@ +# © 2020 - today Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/profile_hr/__manifest__.py b/profile_hr/__manifest__.py new file mode 100644 index 00000000..fa9bc8a2 --- /dev/null +++ b/profile_hr/__manifest__.py @@ -0,0 +1,30 @@ +# © 2020 - today Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + 'name': 'HR Profile', + 'version': '1.0.0', + 'author': 'Numigi', + 'maintainer': 'Numigi', + 'license': 'LGPL-3', + 'category': 'Other', + 'summary': 'Dependencies for the HR profile', + 'depends': [ + # odoo/odoo + 'hr_contract', + 'hr_holidays', + 'hr_org_chart', + + # Numigi/odoo-hr-addons + 'hr_contract_wage_type', + 'hr_event', + + # OCA/hr + 'hr_employee_firstname', + 'hr_employee_phone_extension', + + # OCA/partner-contact + 'partner_firstname', # dependency of hr_employee_firstname + ], + 'installable': False, +} diff --git a/profile_hr/static/description/icon.png b/profile_hr/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/profile_hr/static/description/icon.png differ diff --git a/web_base_url_freeze/README.rst b/web_base_url_freeze/README.rst new file mode 100644 index 00000000..1465e141 --- /dev/null +++ b/web_base_url_freeze/README.rst @@ -0,0 +1,11 @@ +Web Base URL Freeze +=================== +When installing this module, the config parameter web.base.url.freeze is set to True. + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) + +More information +---------------- +* Meet us at https://bit.ly/numigi-com diff --git a/web_base_url_freeze/__init__.py b/web_base_url_freeze/__init__.py new file mode 100644 index 00000000..7fa1774d --- /dev/null +++ b/web_base_url_freeze/__init__.py @@ -0,0 +1,2 @@ +# © 2023 - today Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/web_base_url_freeze/__manifest__.py b/web_base_url_freeze/__manifest__.py new file mode 100644 index 00000000..91b6d54e --- /dev/null +++ b/web_base_url_freeze/__manifest__.py @@ -0,0 +1,19 @@ +# © 2023 - today Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + 'name': 'Web Base Url Freeze', + 'version': "14.0.1.0.0", + 'author': 'Numigi', + 'maintainer': 'Numigi', + 'license': 'LGPL-3', + 'category': 'Extra Tools', + 'summary': 'Automatically set the config parameter web.base.url.freeze.', + 'depends': [ + 'base', + ], + 'data': [ + 'data/ir_config_parameter.xml', + ], + 'installable': True, +} diff --git a/web_base_url_freeze/data/ir_config_parameter.xml b/web_base_url_freeze/data/ir_config_parameter.xml new file mode 100644 index 00000000..f8fd1e89 --- /dev/null +++ b/web_base_url_freeze/data/ir_config_parameter.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/web_base_url_freeze/static/description/icon.png b/web_base_url_freeze/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/web_base_url_freeze/static/description/icon.png differ diff --git a/web_base_url_freeze/tests/__init__.py b/web_base_url_freeze/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/web_base_url_freeze/tests/test_config.py b/web_base_url_freeze/tests/test_config.py new file mode 100644 index 00000000..8e382787 --- /dev/null +++ b/web_base_url_freeze/tests/test_config.py @@ -0,0 +1,8 @@ + +from odoo.tests import TransactionCase + + +class TestConfig(TransactionCase): + + def test_web_base_url_freeze(self): + self.assertTrue(self.env['ir.config_parameter'].sudo().get_param('web.base.url.freeze'))