Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
e503411
[MIG] crm_salesperson_planner: Migration to 18.0
fsmw Nov 4, 2025
0c3e2d1
[FIX] crm_salesperson_planner: Fix external ID references for Odoo 18.0
fsmw Nov 4, 2025
6f61a1a
[FIX] crm_salesperson_planner: Convert 'tree' views to 'list' for Odo…
fsmw Nov 4, 2025
a471b79
Fix ir.cron field name for Odoo 18.0 compatibility
fsmw Nov 4, 2025
f9794ee
[MIG] crm_salesperson_planner: remove invalid number_calls field for …
fsmw Dec 6, 2025
d082ffa
Merge upstream/18.0 and resolve crm_salesperson_planner conflicts fav…
fsmw Dec 6, 2025
40a7aad
[MIG] crm_salesperson_planner: merge conflicts resolved; remove inval…
fsmw Dec 6, 2025
ca2c3bd
[MIG] crm_salesperson_planner: fix xml formatting and indentation, ra…
fsmw Dec 6, 2025
24fd877
pre-commit fixes: formatting and README regen
fsmw Dec 6, 2025
8939620
chore: remove exec bit from crm_salesperson_planner/data/ir_cron_data…
fsmw Dec 6, 2025
e7584d0
[MIG] crm_salesperson_planner: remove invalid ir.cron doall field
fsmw Dec 6, 2025
2ba0af4
tests: update expected view modes to include list instead of tree
fsmw Dec 6, 2025
77173c5
tests: avoid translation calls inside test assertions to match odoo b…
fsmw Dec 6, 2025
45bbdfc
tests: remove unused _ import from test file
fsmw Dec 6, 2025
166d797
feat: comprehensive test coverage improvements for crm_salesperson_pl…
fsmw Dec 6, 2025
f8f575e
fix: Remove incompatible test files and restore working state
fsmw Dec 6, 2025
f077b73
fix: Clean up markdown artifacts and restore pre-commit compliance
fsmw Dec 6, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 19 additions & 31 deletions crm_salesperson_planner/README.rst
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association

=======================
Crm Salesperson Planner
=======================
Expand All @@ -11,13 +7,13 @@ Crm Salesperson Planner
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:f1b722670bd496e4b778024da1edf1cf0acba510f3cbf830331f438b3e1f2dc2
!! source digest: sha256:cd7e659bf93da7bd1619470b56609f64f8f73b1851875ee485e4198d83737a99
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcrm-lightgray.png?logo=github
Expand All @@ -34,17 +30,14 @@ Crm Salesperson Planner

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 the calendar and they can be easily
rescheduled. Visits can be automatically created from a template, in
which it is possible to select the frequency of visits, as well as the
start and end dates. The last visit can also be calculated by selecting
the total number of repetitions.

This module creates a cron job that generates visits from templates, but
an option to create them manually is available from the template form
view when the template is validated.
to be dealt on each visit. Visits create an all day event in calendar,
and they can be easily rescheduled. Visits can be automatically created
from a template, in which it is possible to select the frequency of
visits, as well as the start and end dates. The last visit can also be
calculated by selecting the total number of repetitions. This module
creates a cron that generates visits from templates, but an option to
create them manually is available from the template form view when the
template is validated.

**Table of contents**

Expand All @@ -62,18 +55,15 @@ To configure this module, you need to:
Usage
=====

1. Go to **CRM > Salesperson Planner > My Visits** or **All Visits**.
2. Create a new visit.
3. Or go to **CRM > Salesperson Planner > Visit Templates** and create a
new recurring template to create periodical visits.
4. For templates, select a Start Date.
5. Set either a total number of repetitions or an End Date to calculate
the last repetition.
6. To reschedule a validated visit, either:

- Change the date from the visit record.
- Change the date from the calendar event automatically created for
the visit.
Go to new menu **CRM > Salesperson Planner > My Visits or All Visits**
and create a new visit. or Go to **CRM > Salesperson Planner > Visit
Templates** and create a new recurring template for create periodical
visits. In this case, it is necessary to select a start date. The date
of the last repetition can be calculated by selection the total number
of repetitions or an end date. There are two options available to
reschedule visits that is already validated: \* Change the date from the
visit. \* Change the date straight from the event automatically created
in the calendar.

Bug Tracker
===========
Expand Down Expand Up @@ -113,8 +103,6 @@ Contributors

- Bernat Obrador <bobrador@apsl.net>

- Heliconia Solutions Pvt. Ltd. <https://www.heliconia.io>

Maintainers
-----------

Expand Down
2 changes: 1 addition & 1 deletion crm_salesperson_planner/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)
{
"name": "Crm Salesperson Planner",
"version": "18.0.1.1.0",
"version": "18.0.1.0.0",
"development_status": "Beta",
"category": "Customer Relationship Management",
"author": "Sygel Technology," "Odoo Community Association (OCA)",
Expand Down
12 changes: 11 additions & 1 deletion crm_salesperson_planner/i18n/crm_salesperson_planner.pot
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Project-Id-Version: Odoo Server 17.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
Expand Down Expand Up @@ -275,6 +275,7 @@ msgstr ""
#. module: crm_salesperson_planner
#. odoo-python
#: code:addons/crm_salesperson_planner/models/calendar_event.py:0
#, python-format
msgid ""
"Event %(event_name)s is related to salesperson visit %(partner_name)s. "
"Cancel it to delete this event.\n"
Expand Down Expand Up @@ -572,6 +573,7 @@ msgstr ""
#. odoo-python
#: code:addons/crm_salesperson_planner/models/crm_salesperson_planner_visit_template.py:0
#: code:addons/crm_salesperson_planner/tests/test_crm_salesperson_planner_visit.py:0
#, python-format
msgid "Only one customer is allowed"
msgstr ""

Expand Down Expand Up @@ -834,36 +836,43 @@ msgstr ""
#. module: crm_salesperson_planner
#. odoo-python
#: code:addons/crm_salesperson_planner/wizards/crm_salesperson_planner_visit_close_wiz.py:0
#, python-format
msgid "The close reason type haven't a function."
msgstr ""

#. module: crm_salesperson_planner
#. odoo-python
#: code:addons/crm_salesperson_planner/wizards/crm_salesperson_planner_visit_template_create.py:0
#, python-format
msgid "The date can't be earlier than today"
msgstr ""

#. module: crm_salesperson_planner
#. odoo-python
#: code:addons/crm_salesperson_planner/models/crm_salesperson_planner_visit.py:0
#, python-format
msgid "The visit must be in cancelled, incident or visited state"
msgstr ""

#. module: crm_salesperson_planner
#. odoo-python
#: code:addons/crm_salesperson_planner/models/crm_salesperson_planner_visit.py:0
#, python-format
msgid "The visit must be in confirmed state"
msgstr ""

#. module: crm_salesperson_planner
#. odoo-python
#: code:addons/crm_salesperson_planner/models/crm_salesperson_planner_visit.py:0
#: code:addons/crm_salesperson_planner/models/crm_salesperson_planner_visit.py:0
#, python-format
msgid "The visit must be in draft or validated state"
msgstr ""

#. module: crm_salesperson_planner
#. odoo-python
#: code:addons/crm_salesperson_planner/models/crm_salesperson_planner_visit.py:0
#, python-format
msgid "The visit must be in draft state"
msgstr ""

Expand Down Expand Up @@ -993,6 +1002,7 @@ msgstr ""
#. module: crm_salesperson_planner
#. odoo-python
#: code:addons/crm_salesperson_planner/models/crm_salesperson_planner_visit.py:0
#, python-format
msgid "Visits must be in cancelled state"
msgstr ""

Expand Down
31 changes: 15 additions & 16 deletions crm_salesperson_planner/i18n/es.po
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@ msgstr "Por dia"

#. module: crm_salesperson_planner
#: model:ir.actions.server,name:crm_salesperson_planner.ir_cron_create_visits_ir_actions_server
#: model:ir.cron,cron_name:crm_salesperson_planner.ir_cron_create_visits
msgid "CRM: Create salesperson visits"
msgstr "CRM: Crear visitas comerciales"

Expand Down Expand Up @@ -145,6 +144,7 @@ msgstr "CompaΓ±Γ­a"

#. module: crm_salesperson_planner
#: model_terms:ir.ui.view,arch_db:crm_salesperson_planner.crm_salesperson_planner_visit_form_view
#: model_terms:ir.ui.view,arch_db:crm_salesperson_planner.crm_salesperson_planner_visit_tree_view
msgid "Confirm"
msgstr "Confirmar"

Expand Down Expand Up @@ -249,13 +249,15 @@ msgstr "Nombre mostrado"
#. module: crm_salesperson_planner
#: model:ir.model.fields.selection,name:crm_salesperson_planner.selection__crm_salesperson_planner_visit_template__state__done
#: model_terms:ir.ui.view,arch_db:crm_salesperson_planner.crm_salesperson_planner_visit_form_view
#: model_terms:ir.ui.view,arch_db:crm_salesperson_planner.crm_salesperson_planner_visit_tree_view
msgid "Done"
msgstr "Hecho"

#. module: crm_salesperson_planner
#: model:ir.model.fields.selection,name:crm_salesperson_planner.selection__crm_salesperson_planner_visit__state__draft
#: model:ir.model.fields.selection,name:crm_salesperson_planner.selection__crm_salesperson_planner_visit_template__state__draft
#: model_terms:ir.ui.view,arch_db:crm_salesperson_planner.crm_salesperson_planner_visit_form_view
#: model_terms:ir.ui.view,arch_db:crm_salesperson_planner.crm_salesperson_planner_visit_tree_view
msgid "Draft"
msgstr "Borrador"

Expand Down Expand Up @@ -412,15 +414,6 @@ msgstr "Γ‰s seguidor"
msgid "Last"
msgstr "Último"

#. module: crm_salesperson_planner
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit____last_update
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit_close_reason____last_update
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit_close_wiz____last_update
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit_template____last_update
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit_template_create____last_update
msgid "Last Modified on"
msgstr "Última modificación el"

#. module: crm_salesperson_planner
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit__write_uid
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit_close_reason__write_uid
Expand Down Expand Up @@ -459,12 +452,6 @@ msgstr "Iniciativa/Oportunidad"
msgid "Let the event automatically repeat at that interval"
msgstr "Permite que el evento se repita automΓ‘ticamente en ese intervalo"

#. module: crm_salesperson_planner
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit__message_main_attachment_id
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit_template__message_main_attachment_id
msgid "Main Attachment"
msgstr "Adjunto principal"

#. module: crm_salesperson_planner
#: model_terms:ir.ui.view,arch_db:crm_salesperson_planner.crm_salesperson_planner_visit_template_form_view
msgid "Manually Create Visits"
Expand Down Expand Up @@ -623,6 +610,12 @@ msgstr "Datos del usuario relativos a la empresa"
msgid "Phone"
msgstr "TelΓ©fono"

#. module: crm_salesperson_planner
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit__rating_ids
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit_template__rating_ids
msgid "Ratings"
msgstr ""

#. module: crm_salesperson_planner
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit_close_wiz__reason_id
msgid "Reason"
Expand Down Expand Up @@ -1070,6 +1063,12 @@ msgstr "AΓ±os"
msgid "crm salesperson planner visit template create"
msgstr "Crear plantilla de visita al planificador de vendedores de CRM"

#~ msgid "Last Modified on"
#~ msgstr "Última modificación el"

#~ msgid "Main Attachment"
#~ msgstr "Adjunto principal"

#~ msgid "Active"
#~ msgstr "Activo"

Expand Down
37 changes: 18 additions & 19 deletions crm_salesperson_planner/i18n/it.po
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-04-03 15:36+0000\n"
"PO-Revision-Date: 2025-03-12 09:06+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
"X-Generator: Weblate 5.10.2\n"

#. module: crm_salesperson_planner
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit__message_needaction
Expand Down Expand Up @@ -80,7 +80,6 @@ msgstr "Di giorno"

#. module: crm_salesperson_planner
#: model:ir.actions.server,name:crm_salesperson_planner.ir_cron_create_visits_ir_actions_server
#: model:ir.cron,cron_name:crm_salesperson_planner.ir_cron_create_visits
msgid "CRM: Create salesperson visits"
msgstr "CRM: crea visita addetto vendite"

Expand Down Expand Up @@ -144,6 +143,7 @@ msgstr "Azienda"

#. module: crm_salesperson_planner
#: model_terms:ir.ui.view,arch_db:crm_salesperson_planner.crm_salesperson_planner_visit_form_view
#: model_terms:ir.ui.view,arch_db:crm_salesperson_planner.crm_salesperson_planner_visit_tree_view
msgid "Confirm"
msgstr "Conferma"

Expand Down Expand Up @@ -248,13 +248,15 @@ msgstr "Nome visualizzato"
#. module: crm_salesperson_planner
#: model:ir.model.fields.selection,name:crm_salesperson_planner.selection__crm_salesperson_planner_visit_template__state__done
#: model_terms:ir.ui.view,arch_db:crm_salesperson_planner.crm_salesperson_planner_visit_form_view
#: model_terms:ir.ui.view,arch_db:crm_salesperson_planner.crm_salesperson_planner_visit_tree_view
msgid "Done"
msgstr "Eseguita"

#. module: crm_salesperson_planner
#: model:ir.model.fields.selection,name:crm_salesperson_planner.selection__crm_salesperson_planner_visit__state__draft
#: model:ir.model.fields.selection,name:crm_salesperson_planner.selection__crm_salesperson_planner_visit_template__state__draft
#: model_terms:ir.ui.view,arch_db:crm_salesperson_planner.crm_salesperson_planner_visit_form_view
#: model_terms:ir.ui.view,arch_db:crm_salesperson_planner.crm_salesperson_planner_visit_tree_view
msgid "Draft"
msgstr "Bozza"

Expand Down Expand Up @@ -411,15 +413,6 @@ msgstr "Segue"
msgid "Last"
msgstr "Ultimo"

#. module: crm_salesperson_planner
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit____last_update
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit_close_reason____last_update
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit_close_wiz____last_update
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit_template____last_update
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit_template_create____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"

#. module: crm_salesperson_planner
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit__write_uid
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit_close_reason__write_uid
Expand Down Expand Up @@ -458,12 +451,6 @@ msgstr "Contatto/OpportunitΓ "
msgid "Let the event automatically repeat at that interval"
msgstr "Consente la ripetizione automatica dell'evento con quell'intervallo"

#. module: crm_salesperson_planner
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit__message_main_attachment_id
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit_template__message_main_attachment_id
msgid "Main Attachment"
msgstr "Allegato principale"

#. module: crm_salesperson_planner
#: model_terms:ir.ui.view,arch_db:crm_salesperson_planner.crm_salesperson_planner_visit_template_form_view
msgid "Manually Create Visits"
Expand Down Expand Up @@ -621,6 +608,12 @@ msgstr "Dati dell'utente relativi al partner"
msgid "Phone"
msgstr "Telefono"

#. module: crm_salesperson_planner
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit__rating_ids
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit_template__rating_ids
msgid "Ratings"
msgstr "Valutazioni"

#. module: crm_salesperson_planner
#: model:ir.model.fields,field_description:crm_salesperson_planner.field_crm_salesperson_planner_visit_close_wiz__reason_id
msgid "Reason"
Expand Down Expand Up @@ -969,7 +962,7 @@ msgstr "Conferma"
#. module: crm_salesperson_planner
#: model:ir.model.fields.selection,name:crm_salesperson_planner.selection__crm_salesperson_planner_visit__state__confirm
msgid "Validated"
msgstr "Confermata"
msgstr "Approvata"

#. module: crm_salesperson_planner
#: model_terms:ir.ui.view,arch_db:crm_salesperson_planner.crm_salesperson_planner_visit_form_view
Expand Down Expand Up @@ -1070,6 +1063,12 @@ msgstr "Anni"
msgid "crm salesperson planner visit template create"
msgstr "Crea modello visita agenda addetto vendite CRM"

#~ msgid "Last Modified on"
#~ msgstr "Ultima modifica il"

#~ msgid "Main Attachment"
#~ msgstr "Allegato principale"

#~ msgid "Active"
#~ msgstr "Attiva"

Expand Down
4 changes: 2 additions & 2 deletions crm_salesperson_planner/models/calendar_event.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Copyright 2021 Sygel - Manuel Regidor
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)

from odoo import fields, models
from odoo import _, fields, models
from odoo.exceptions import ValidationError


Expand Down Expand Up @@ -46,7 +46,7 @@ def unlink(self):
if salesperson_visit_events:
error_msg = ""
for event in salesperson_visit_events:
error_msg += self.env._(
error_msg += _(
"Event %(event_name)s is related to salesperson visit "
"%(partner_name)s. Cancel it to delete this event.\n"
) % {
Expand Down
Loading