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'))