From 870e3abafda000b4a5c90beb4877392f59e75971 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Thu, 7 Mar 2024 13:48:57 +0100 Subject: [PATCH] [FIX] crm_salesperson_planner: Changes to make templates functional Changes done: - Removed the (unnecessary) recurrence field from templates. - Recurrence fields (from calendar.event) are set as store=True. - Create an onchange to avoid inconsistent values by UX. - Modified the form view to make it more functional (similar to calendar.event). - Consider in _get_max_date() if a deadline (until) has been set. TT48238 --- .pre-commit-config.yaml | 24 +++++------ crm_salesperson_planner/README.rst | 5 ++- .../crm_salesperson_planner_visit_template.py | 41 +++++++++++++++--- .../readme/CONTRIBUTORS.rst | 3 ++ .../static/description/index.html | 6 ++- ...lesperson_planner_visit_template_views.xml | 43 +++++++++---------- 6 files changed, 79 insertions(+), 43 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index fce34dcf8dee..a5a6eef59b09 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -35,7 +35,7 @@ repos: language: fail files: '[a-zA-Z0-9_]*/i18n/en\.po$' - repo: https://github.com/oca/maintainer-tools - rev: 969238e47c07d0c40573acff81d170f63245d738 + rev: 451de41fa3e8aa81d077c804322d48632eb5ff74 hooks: # update the NOT INSTALLABLE ADDONS section above - id: oca-update-pre-commit-excluded-addons @@ -49,12 +49,12 @@ repos: - --repo-name=crm - --if-source-changed - repo: https://github.com/OCA/odoo-pre-commit-hooks - rev: v0.0.25 + rev: v0.0.30 hooks: - id: oca-checks-odoo-module - id: oca-checks-po - repo: https://github.com/myint/autoflake - rev: v1.4 + rev: v2.3.0 hooks: - id: autoflake args: @@ -65,11 +65,11 @@ repos: - --remove-duplicate-keys - --remove-unused-variables - repo: https://github.com/psf/black - rev: 22.3.0 + rev: 24.2.0 hooks: - id: black - repo: https://github.com/pre-commit/mirrors-prettier - rev: v2.4.1 + rev: v4.0.0-alpha.8 hooks: - id: prettier name: prettier (with plugin-xml) @@ -80,7 +80,7 @@ repos: - --plugin=@prettier/plugin-xml files: \.(css|htm|html|js|json|jsx|less|md|scss|toml|ts|xml|yaml|yml)$ - repo: https://github.com/pre-commit/mirrors-eslint - rev: v7.32.0 + rev: v9.0.0-beta.1 hooks: - id: eslint verbose: true @@ -88,7 +88,7 @@ repos: - --color - --fix - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.0.1 + rev: v4.5.0 hooks: - id: trailing-whitespace # exclude autogenerated files @@ -110,12 +110,12 @@ repos: - id: mixed-line-ending args: ["--fix=lf"] - repo: https://github.com/asottile/pyupgrade - rev: v2.29.0 + rev: v3.15.1 hooks: - id: pyupgrade args: ["--keep-percent-format"] - repo: https://github.com/PyCQA/isort - rev: 5.12.0 + rev: 5.13.2 hooks: - id: isort name: isort except __init__.py @@ -123,7 +123,7 @@ repos: - --settings=. exclude: /__init__\.py$ - repo: https://github.com/acsone/setuptools-odoo - rev: 3.1.8 + rev: 3.2.1 hooks: - id: setuptools-odoo-make-default - id: setuptools-odoo-get-requirements @@ -133,13 +133,13 @@ repos: - --header - "# generated from manifests external_dependencies" - repo: https://github.com/PyCQA/flake8 - rev: 3.9.2 + rev: 7.0.0 hooks: - id: flake8 name: flake8 additional_dependencies: ["flake8-bugbear==21.9.2"] - repo: https://github.com/OCA/pylint-odoo - rev: 7.0.5 + rev: v9.0.5 hooks: - id: pylint_odoo name: pylint with optional checks diff --git a/crm_salesperson_planner/README.rst b/crm_salesperson_planner/README.rst index e56f49d1cac8..13bfa2befb34 100644 --- a/crm_salesperson_planner/README.rst +++ b/crm_salesperson_planner/README.rst @@ -7,7 +7,7 @@ Crm Salesperson Planner !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:76851d296a93e21d31374cac7458506bbbab7b48e25ed9a23e519a8dfaf74c6a + !! source digest: sha256:223707ca4fea07ed4be26ebfdff779a40a91a024a52606071846142d0e1b2236 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -79,6 +79,9 @@ Contributors * Valentin Vinagre * Manuel Regidor +* `Tecnativa `_: + + * Víctor Martínez Maintainers ~~~~~~~~~~~ diff --git a/crm_salesperson_planner/models/crm_salesperson_planner_visit_template.py b/crm_salesperson_planner/models/crm_salesperson_planner_visit_template.py index 1c86af5c53b6..dbddc433f0d1 100644 --- a/crm_salesperson_planner/models/crm_salesperson_planner_visit_template.py +++ b/crm_salesperson_planner/models/crm_salesperson_planner_visit_template.py @@ -1,5 +1,6 @@ # Copyright 2021 Sygel - Valentin Vinagre # Copyright 2021 Sygel - Manuel Regidor +# Copyright 2024 Tecnativa - Víctor Martínez # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) from datetime import timedelta @@ -68,14 +69,31 @@ class CrmSalespersonPlannerVisitTemplate(models.Model): string="Number of Sales Person Visits", compute="_compute_visit_ids_count" ) auto_validate = fields.Boolean(default=True) - rrule_type = fields.Selection( - default="daily", - required=True, - ) last_visit_date = fields.Date(compute="_compute_last_visit_date", store=True) final_date = fields.Date(string="Repeat Until") allday = fields.Boolean(default=True) - recurrency = fields.Boolean(default=True) + # Set all compute=_compute_recurrence fields of calendar.event as store=True. + # We want to manage the value of the fields manually and we don't want to depend + # on recurrence_id field (only possible with calendar.event). + # We don't use the recurrency field either because it is unnecessary. + rrule = fields.Char(store=True) + rrule_type = fields.Selection(store=True, default="daily", required=True) + event_tz = fields.Selection(store=True) + end_type = fields.Selection(store=True) + interval = fields.Integer(store=True) + count = fields.Integer(store=True) + mon = fields.Boolean(store=True) + tue = fields.Boolean(store=True) + wed = fields.Boolean(store=True) + thu = fields.Boolean(store=True) + fri = fields.Boolean(store=True) + sat = fields.Boolean(store=True) + sun = fields.Boolean(store=True) + month_by = fields.Selection(store=True) + day = fields.Integer(store=True) + weekday = fields.Selection(store=True) + byday = fields.Selection(store=True) + until = fields.Date(store=True) _sql_constraints = [ ( @@ -108,6 +126,17 @@ def _constrains_partner_ids(self): if len(item.partner_ids) > 1: raise ValidationError(_("Only one customer is allowed")) + @api.onchange("end_type") + def _onchange_end_type(self): + """Avoid inconsistent data if you switch from one thing to another.""" + if self.end_type == "count": + self.until = False + elif self.end_type == "end_date": + self.count = 0 + elif self.end_type == "forever": + self.count = 0 + self.until = False + @api.model_create_multi def create(self, vals_list): for vals in vals_list: @@ -161,7 +190,7 @@ def _prepare_crm_salesperson_planner_visit_vals(self, dates): ] def _get_max_date(self): - return self._increase_date(self.start_date, self.count) + return self.until or self._increase_date(self.start_date, self.count) def _increase_date(self, date, value): if self.rrule_type == "daily": diff --git a/crm_salesperson_planner/readme/CONTRIBUTORS.rst b/crm_salesperson_planner/readme/CONTRIBUTORS.rst index 35f658858ebb..0a4d94ba4111 100644 --- a/crm_salesperson_planner/readme/CONTRIBUTORS.rst +++ b/crm_salesperson_planner/readme/CONTRIBUTORS.rst @@ -2,3 +2,6 @@ * Valentin Vinagre * Manuel Regidor +* `Tecnativa `_: + + * Víctor Martínez diff --git a/crm_salesperson_planner/static/description/index.html b/crm_salesperson_planner/static/description/index.html index ed0b174e49ba..1055d8abfe61 100644 --- a/crm_salesperson_planner/static/description/index.html +++ b/crm_salesperson_planner/static/description/index.html @@ -366,7 +366,7 @@

Crm Salesperson Planner

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:76851d296a93e21d31374cac7458506bbbab7b48e25ed9a23e519a8dfaf74c6a +!! source digest: sha256:223707ca4fea07ed4be26ebfdff779a40a91a024a52606071846142d0e1b2236 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This application allows you to track and schedule salespeople visits to your customers, allowing you to determine which opportunities are going to be dealt on each visit. Visits create an all day event in calendar, and they can be easily rescheduled. @@ -426,6 +426,10 @@

Contributors

  • Manuel Regidor
  • +
  • Tecnativa:
      +
    • Víctor Martínez
    • +
    +
  • diff --git a/crm_salesperson_planner/views/crm_salesperson_planner_visit_template_views.xml b/crm_salesperson_planner/views/crm_salesperson_planner_visit_template_views.xml index d7a26b1d4e6c..503d466f96dd 100644 --- a/crm_salesperson_planner/views/crm_salesperson_planner_visit_template_views.xml +++ b/crm_salesperson_planner/views/crm_salesperson_planner_visit_template_views.xml @@ -91,41 +91,41 @@ /> + + + + +