diff --git a/.eslintrc.yml b/.eslintrc.yml
index 9429bc688aab4993eae460767368f65089afa323..fed88d70d23ecb3297ea28854b320c4d62ee3c26 100644
--- a/.eslintrc.yml
+++ b/.eslintrc.yml
@@ -22,6 +22,7 @@ globals:
odoo: readonly
openerp: readonly
owl: readonly
+ luxon: readonly
# Styling is handled by Prettier, so we only need to enable AST rules;
# see https://github.com/OCA/maintainer-quality-tools/pull/618#issuecomment-558576890
diff --git a/.gitignore b/.gitignore
index 9c283fd41f6cc3330653f1d90a820b85e23caf65..0090721f5d248bc5342cb3699b64d2ddc863da8b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,7 @@ __pycache__/
*.py[cod]
/.venv
/.pytest_cache
+/.ruff_cache
# C extensions
*.so
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 10acf1e37e92961168f7539a4a84f689280f3710..3efb4d9157dc36d84e372eec5fc21e7f4a417a58 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -12,6 +12,10 @@ exclude: |
/static/(src/)?lib/|
# Repos using Sphinx to generate docs don't need prettying
^docs/_templates/.*\.html$|
+ # Don't bother non-technical authors with formatting issues in docs
+ readme/.*\.(rst|md)$|
+ # Ignore build and dist directories in addons
+ /build/|/dist/|
# You don't usually want a bot to modify your legal texts
(LICENSE.*|COPYING.*)
default_language_version:
@@ -33,27 +37,25 @@ repos:
language: fail
files: '[a-zA-Z0-9_]*/i18n/en\.po$'
- repo: https://github.com/oca/maintainer-tools
- rev: 4cd2b852214dead80822e93e6749b16f2785b2fe
+ rev: f71041f22b8cd68cf7c77b73a14ca8d8cd190a60
hooks:
# update the NOT INSTALLABLE ADDONS section above
- id: oca-update-pre-commit-excluded-addons
- id: oca-fix-manifest-website
args: ["https://le-filament.com"]
- - repo: https://github.com/myint/autoflake
- rev: v1.6.1
- hooks:
- - id: autoflake
+ - id: oca-gen-addon-readme
args:
- - --expand-star-imports
- - --ignore-init-module-imports
- - --in-place
- - --remove-all-unused-imports
- - --remove-duplicate-keys
- - --remove-unused-variables
- - repo: https://github.com/psf/black
- rev: 22.8.0
+ - --addons-dir=.
+ - --branch=16.0
+ - --org-name=lefilament
+ - --repo-name=template_module
+ - --if-source-changed
+ - --keep-source-digest
+ - repo: https://github.com/OCA/odoo-pre-commit-hooks
+ rev: v0.0.25
hooks:
- - id: black
+ - id: oca-checks-odoo-module
+ - id: oca-checks-po
- repo: https://github.com/pre-commit/mirrors-prettier
rev: v2.7.1
hooks:
@@ -95,27 +97,14 @@ repos:
- id: check-xml
- id: mixed-line-ending
args: ["--fix=lf"]
- - repo: https://github.com/asottile/pyupgrade
- rev: v2.38.2
- hooks:
- - id: pyupgrade
- args: ["--keep-percent-format"]
- - repo: https://github.com/PyCQA/isort
- rev: 5.12.0
- hooks:
- - id: isort
- name: isort except __init__.py
- args:
- - --settings=.
- exclude: /__init__\.py$
- - repo: https://github.com/PyCQA/flake8
- rev: 3.9.2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
+ rev: v0.1.3
hooks:
- - id: flake8
- name: flake8
- additional_dependencies: ["flake8-bugbear==21.9.2"]
+ - id: ruff
+ args: [--fix, --exit-non-zero-on-fix]
+ - id: ruff-format
- repo: https://github.com/OCA/pylint-odoo
- rev: 7.0.2
+ rev: v8.0.19
hooks:
- id: pylint_odoo
name: pylint with optional checks
diff --git a/.pylintrc-mandatory b/.pylintrc-mandatory
index ed2c2171ffe63ac191e30ed0759c4b6211ad5f15..99064933ef82c469ba5fda5b2904447c05c99dbe 100644
--- a/.pylintrc-mandatory
+++ b/.pylintrc-mandatory
@@ -4,12 +4,12 @@ load-plugins=pylint_odoo
score=n
[ODOOLINT]
-readme_template_url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst"
-manifest_required_authors=Le Filament
-manifest_required_keys=license
-manifest_deprecated_keys=description,active
-license_allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3
-valid_odoo_versions=16.0
+readme-template-url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst"
+manifest-required-authors=Le Filament
+manifest-required-keys=license
+manifest-deprecated-keys=description,active
+license-allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3
+valid-odoo-versions=16.0
[MESSAGES CONTROL]
disable=all
diff --git a/.ruff.toml b/.ruff.toml
new file mode 100644
index 0000000000000000000000000000000000000000..0240c75f6a4ae4550f3473ad0a5faaef022bf6c7
--- /dev/null
+++ b/.ruff.toml
@@ -0,0 +1,30 @@
+
+target-version = "py310"
+fix = true
+
+[lint]
+extend-select = [
+ "B",
+ "C90",
+ "E501", # line too long (default 88)
+ "I", # isort
+ "UP", # pyupgrade
+]
+exclude = ["setup/*"]
+
+[format]
+exclude = ["setup/*"]
+
+[per-file-ignores]
+"__init__.py" = ["F401", "I001"] # ignore unused and unsorted imports in __init__.py
+"__manifest__.py" = ["B018"] # useless expression
+
+[isort]
+section-order = ["future", "standard-library", "third-party", "odoo", "odoo-addons", "first-party", "local-folder"]
+
+[isort.sections]
+"odoo" = ["odoo"]
+"odoo-addons" = ["odoo.addons"]
+
+[mccabe]
+max-complexity = 16
diff --git a/__manifest__.py b/__manifest__.py
index a687eb54efa624ecc77ee6d86d18aca9c3b81f6d..09dbdcac4762cd4a4a715220514190791731da92 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -25,6 +25,7 @@
"views/event_views.xml",
"views/event_tag_views.xml",
"data/mail_data.xml",
+ "data/group_session.xml",
# report
],
"assets": {
diff --git a/data/group_session.xml b/data/group_session.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7254b28aee897b5e95d1909de46ce22b1d9a1acd
--- /dev/null
+++ b/data/group_session.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+ <record id="group_event_session" model="res.groups">
+ <field name="name">Gestion des sessions et séances</field>
+ </record>
+</odoo>
diff --git a/models/event.py b/models/event.py
index 8181f0849611a5e5efc89ff69a16a08635f66766..4036760fc8d1a0fde6e9fb99975f807be5de1488 100644
--- a/models/event.py
+++ b/models/event.py
@@ -35,8 +35,7 @@ class Event(models.Model):
required=True,
)
hide_website_event_title = fields.Boolean(
- string="Masquer le titre de l'évènement sur le site web",
- default=False
+ string="Masquer le titre de l'évènement sur le site web", default=False
)
# ------------------------------------------------------
@@ -47,6 +46,13 @@ class Event(models.Model):
for event in self:
event.type_event_cg = event.event_type_id.type_event_cg
+ # ------------------------------------------------------
+ # Action button
+ # ------------------------------------------------------
+ def active_sessions(self):
+ self.ensure_one()
+ self.use_sessions = not self.use_sessions
+
# ------------------------------------------------------
# Default functions
# ------------------------------------------------------
@@ -87,7 +93,7 @@ class Event(models.Model):
return super(Event, self)._get_menu_update_fields() + ["website_session"]
def _update_website_menus(self, menus_update_by_field=None):
- super(Event, self)._update_website_menus(
+ record = super(Event, self)._update_website_menus(
menus_update_by_field=menus_update_by_field
)
for event in self:
@@ -99,6 +105,8 @@ class Event(models.Model):
"website_session", "session_menu_ids", "session"
)
+ return record
+
def _get_website_menu_entries(self):
self.ensure_one()
return super(Event, self)._get_website_menu_entries() + [
diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv
index 1142c70acb7e3bc0c05d691d2bb4fcb6c33f3831..8bd54c046344ceaddf0e3d7563678ae31f658ddb 100644
--- a/security/ir.model.access.csv
+++ b/security/ir.model.access.csv
@@ -1,5 +1,8 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_event_session__public,event.session.public,model_event_session,,1,0,0,0
+event.access_event_event_user,event.event.user,model_event_event,event.group_event_user,1,0,0,0
+access_event_session_not_in_group_session,event.session.not.in.group.session,model_event_event,base.group_user,1,0,0,0
+access_event_session_group_session,event.session.group.session,model_event_session,cgscop_website_event.group_event_session,1,1,1,1
access_event_session_slot,event.track.session,model_event_session_slot,,1,0,0,0
access_event_session_slot_manager,event.track.session.manager,model_event_session_slot,event.group_event_manager,1,1,1,1
access_res_partner_intervenant,res.partner.intervenant,model_res_partner_intervenant,,1,0,0,0
diff --git a/views/event_views.xml b/views/event_views.xml
index 289815ef69d6026cbf776a21036e732ffc738080..3122bf55e08591e15eec7db221be951200f5a45a 100644
--- a/views/event_views.xml
+++ b/views/event_views.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
- <record id="view_event_form_create_sessions" model="ir.ui.view">
+ <record id="view_event_form_create_sessions" model="ir.ui.view">
<field name="model">event.event</field>
<field name="name">event.event.form.inherit.button</field>
<field name="inherit_id" ref="event_session.view_event_form_create_sessions" />
@@ -23,7 +23,7 @@
<field name="arch" type="xml">
<xpath expr="//field[@name='website_menu']" position="after">
<label for="website_session" string="Showcase Sessions" />
- <field name="website_session" />
+ <field name="website_session" /><!-- Ajouter groups id pour sessions -->
</xpath>
<field name="event_type_id" position="before">
<field name="type_event_cg" />
@@ -42,4 +42,43 @@
</field>
</field>
</record>
+
+ <record id="view_restrict_event_session_form" model="ir.ui.view">
+ <field name="model">event.event</field>
+ <field name="name">event session restrict</field>
+ <field name="inherit_id" ref="event_session.view_event_form_create_sessions" />
+ <field name="priority">50</field>
+ <field name="arch" type="xml">
+ <xpath expr="//header" position="inside">
+ <button
+ name="active_sessions"
+ type="object"
+ string="Activer les séances"
+ class="btn-outline-primary"
+ attrs="{'invisible': [('use_sessions', '=', True)]}"
+ groups="cgscop_website_event.group_event_session"
+ />
+ <button
+ name="active_sessions"
+ type="object"
+ string="Désactiver les séances"
+ class="btn-outline-primary"
+ attrs="{'invisible': [('use_sessions', '!=', True)]}"
+ groups="cgscop_website_event.group_event_session"
+ confirm="La désactivation des séances va entrainer la suppression des séances de cet évènement."
+ />
+ </xpath>
+ <xpath expr="//field[@name='use_sessions']" position="attributes">
+ <attribute name="invisible">True</attribute>
+ </xpath>
+ </field>
+ </record>
+
+ <record model="ir.ui.menu" id="event_session.event_session_menu_report">
+ <field
+ name="groups_id"
+ eval="[(6,0,[ref('cgscop_website_event.group_event_session')])]"
+ />
+ </record>
+
</odoo>