| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/crm |
| GIT | |
| GIT | https://github.com/OCA/crm.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/crm/tree/18.0/crm_salesperson_planner |
| VERSION | |
| VERSION | 1.1.0 |
| CATEGORY | |
| CATEGORY | Customer Relationship Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Sygel Technology |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Sygel Technology |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, sygel, Bhavesh Heliconia |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/crm |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:30:09 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - crm - base_setup - base - web - sales_team - bus - web_tour - html_editor - calendar - resource - utm - contacts - digest - portal - web_editor - http_routing - auth_signup - phone_validation |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | 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. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
crm_lead_crm_salesperson_planner |
crm.lead.view.crm.salesperson.planner | crm.lead | notebook | Inherits crm.crm_lead_view_form |
crm_salesperson_planner_visit_close_reason_form_view |
CRM - Salesperson Planner Visit Close Reason Form | crm.salesperson.planner.visit.close.reason | form | New |
crm_salesperson_planner_visit_close_reason_tree_view |
CRM - Salesperson Planner Visit Close Reason Tree | crm.salesperson.planner.visit.close.reason | list | New |
crm_salesperson_planner_visit_close_wiz_view_form |
crm.salesperson.lost.form | crm.salesperson.planner.visit.close.wiz | form | New |
crm_salesperson_planner_visit_filter |
CRM - Salesperson Planner Visit Search | crm.salesperson.planner.visit | search | New |
crm_salesperson_planner_visit_form_view |
CRM - Salesperson Planner Visit Form | crm.salesperson.planner.visit | form | New |
crm_salesperson_planner_visit_template_create_view_form |
crm.salesperson.planner.visit.template.create.form | crm.salesperson.planner.visit.template.create | form | New |
crm_salesperson_planner_visit_template_form_view |
CRM - Salesperson Planner Visit Template Form | crm.salesperson.planner.visit.template | form | New |
crm_salesperson_planner_visit_template_tree_view |
CRM - Salesperson Planner Visit Template Tree | crm.salesperson.planner.visit.template | list | New |
crm_salesperson_planner_visit_tree_view |
CRM - Salesperson Planner Visit Tree | crm.salesperson.planner.visit | list | New |
partner_view_crm_salesperson_planner |
partner.view.crm.salesperson.planner | res.partner | xpath | Inherits base.view_partner_form |
salesperson_planner_visit_ids
One2many → crm.salesperson.planner.visit
comodel_name='crm.salesperson.planner.visit'
inverse_name='calendar_event_id'
string='Salesperson Visits'
unlink(self)
write(self, values)
crm_salesperson_planner_visit_ids
Many2many → crm.salesperson.planner.visit
comodel_name='crm.salesperson.planner.visit'
copy=False
domain="[('partner_id', 'child_of', partner_id)]"
relation='crm_salesperson_planner_visit_crm_lead_rel'
string='Visits'
No public methods.
calendar_event_id
Many2one → calendar.event
comodel_name='calendar.event'
string='Calendar Event'
close_reason_id
Many2one → crm.salesperson.planner.visit.close.reason
comodel_name='crm.salesperson.planner.visit.close.reason'
string='Close Reason'
close_reason_image
Image
attachment=True
max_height=1024
max_width=1024
close_reason_notes
Text
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
date
Date
default=fields.Date.context_today
required=True
description
Html
name
Char
copy=False
default='/'
required=True
string='Visit Number'
opportunity_ids
Many2many → crm.lead
comodel_name='crm.lead'
copy=False
domain="[('type', '=', 'opportunity'), ('partner_id', 'child_of', partner_id)]"
relation='crm_salesperson_planner_visit_crm_lead_rel'
string='Opportunities'
partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='Customer'
partner_mobile
Char
related='partner_id.mobile'
string='Mobile'
partner_phone
Char
related='partner_id.phone'
string='Phone'
sequence
Integer
default=20
help='Used to order Visits in the different views'
state
Selection
copy=False
default='draft'
required=True
selection=[('draft', 'Draft'), ('confirm', 'Validated'), ('done', 'Visited'), ('cancel', 'Cancelled'), ('incident', 'Incident')]
string='Status'
tracking=True
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
domain=<expr>
index=True
string='Salesperson'
tracking=True
visit_template_id
Many2one → crm.salesperson.planner.visit.template
comodel_name='crm.salesperson.planner.visit.template'
string='Visit Template'
action_cancel(self, reason_id, image=None, notes=None)
action_confirm(self)
action_done(self)
action_draft(self)
action_incident(self, reason_id, image=None, notes=None)
create(self, vals_list)
create_calendar_event(self)
unlink(self)
write(self, values)
close_type
Selection
default='cancel'
required=True
selection=[('cancel', 'Cancel'), ('incident', 'Incident')]
string='Type'
name
Char
required=True
string='Description'
translate=True
require_image
Boolean
default=False
reschedule
Boolean
default=False
No public methods.
allow_reschedule
Boolean
related='reason_id.reschedule'
string='Allow Reschedule'
image
Image
max_height=1024
max_width=1024
new_date
Date
default=<expr>
new_sequence
Integer
default=<expr>
help='Used to order Visits in the different views'
string='Sequence'
notes
Text
reason_id
Many2one → crm.salesperson.planner.visit.close.reason
comodel_name='crm.salesperson.planner.visit.close.reason'
required=True
string='Reason'
require_image
Boolean
related='reason_id.require_image'
string='Require Image'
reschedule
Boolean
default=True
action_close_reason_apply(self)
alarm_ids
Many2many → calendar.alarm
comodel_name='calendar.alarm'
help='Notifications sent to all attendees to remind of the meeting.'
ondelete='restrict'
string='Reminders'
allday
Boolean
default=True
string='All Day'
auto_validate
Boolean
default=True
byday
Selection
categ_ids
Many2many → calendar.event.type
comodel_name='calendar.event.type'
string='Tags'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
count
Integer
help='Repeat x times'
string='Repeat'
day
Integer
string='Date of month'
description
Html
duration
Float
compute='_compute_duration'
readonly=False
store=True
end_type
Selection
string='Recurrence Termination'
args: END_TYPE_SELECTION
event_tz
Selection
string='Timezone'
args: _tz_get
final_date
Date
string='Repeat Until'
fri
Boolean
interval
Integer
help='Repeat every (Days/Week/Month/Year)'
string='Repeat Every'
last_visit_date
Date
compute='_compute_last_visit_date'
store=True
mon
Boolean
month_by
Selection
string='Option'
args: MONTH_BY_SELECTION
name
Char
copy=False
default='/'
string='Visit Template Number'
partner_id
Many2one → res.partner
comodel_name='res.partner'
related='user_id.partner_id'
string='Scheduled by'
partner_ids
Many2many → res.partner
comodel_name='res.partner'
default=False
required=True
string='Customer'
rrule
Char
string='Recurrent Rule'
rrule_type
Selection
default='daily'
help='Let the event automatically repeat at that interval'
required=True
string='Recurrence'
args: RRULE_TYPE_SELECTION
sat
Boolean
sequence
Integer
default=20
help='Used to order Visits in the different views'
start
Datetime
default=fields.Date.today
help='Start date of an event, without time for full days events'
required=True
tracking=True
start_date
Date
compute='_compute_dates'
inverse='_inverse_dates'
store=True
tracking=True
state
Selection
copy=False
default='draft'
required=True
selection=[('draft', 'Draft'), ('in-progress', 'In Progress'), ('done', 'Done'), ('cancel', 'Cancelled')]
string='Status'
tracking=True
stop
Datetime
compute='_compute_stop'
default=<expr>
help='Stop date of an event, without time for full days events'
required=True
store=True
tracking=True
stop_date
Date
compute='_compute_dates'
inverse='_inverse_dates'
store=True
string='End Date'
tracking=True
sun
Boolean
thu
Boolean
tue
Boolean
until
Date
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
domain=<expr>
string='Salesperson'
tracking=True
visit_ids
One2many → crm.salesperson.planner.visit
comodel_name='crm.salesperson.planner.visit'
inverse_name='visit_template_id'
string='Visit Template'
visit_ids_count
Integer
compute='_compute_visit_ids_count'
string='Number of Sales Person Visits'
wed
Boolean
weekday
Selection
action_cancel(self)
action_draft(self)
action_validate(self)
action_view_salesperson_planner_visit(self)
create(self, vals_list)
create_visits(self, days=7)
date_to
Date
default=<expr>
required=True
string='Date to'
create_visits(self)
salesperson_planner_visit_count
Integer
compute='_compute_salesperson_planner_visit_count'
string='Number of Salesperson Visits'
action_view_salesperson_planner_visit(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/crm |
| GIT | |
| GIT | https://github.com/OCA/crm.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/crm/tree/17.0/crm_salesperson_planner |
| VERSION | |
| VERSION | 1.1.0 |
| CATEGORY | |
| CATEGORY | Customer Relationship Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Sygel Technology |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Sygel Technology |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, sygel, bobrador, MohamedOsman7 |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/crm |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:20:03 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - crm - base_setup - base - web - sales_team - bus - web_tour - calendar - onboarding - resource - utm - contacts - digest - portal - web_editor - http_routing - auth_signup - phone_validation |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | 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. 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. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
crm_lead_crm_salesperson_planner |
crm.lead.view.crm.salesperson.planner | crm.lead | notebook | Inherits crm.crm_lead_view_form |
crm_salesperson_planner_visit_close_reason_form_view |
CRM - Salesperson Planner Visit Close Reason Form | crm.salesperson.planner.visit.close.reason | form | New |
crm_salesperson_planner_visit_close_reason_tree_view |
CRM - Salesperson Planner Visit Close Reason Tree | crm.salesperson.planner.visit.close.reason | tree | New |
crm_salesperson_planner_visit_close_wiz_view_form |
crm.salesperson.lost.form | crm.salesperson.planner.visit.close.wiz | form | New |
crm_salesperson_planner_visit_filter |
CRM - Salesperson Planner Visit Search | crm.salesperson.planner.visit | search | New |
crm_salesperson_planner_visit_form_view |
CRM - Salesperson Planner Visit Form | crm.salesperson.planner.visit | form | New |
crm_salesperson_planner_visit_template_create_view_form |
crm.salesperson.planner.visit.template.create.form | crm.salesperson.planner.visit.template.create | form | New |
crm_salesperson_planner_visit_template_form_view |
CRM - Salesperson Planner Visit Template Form | crm.salesperson.planner.visit.template | form | New |
crm_salesperson_planner_visit_template_tree_view |
CRM - Salesperson Planner Visit Template Tree | crm.salesperson.planner.visit.template | tree | New |
crm_salesperson_planner_visit_tree_view |
CRM - Salesperson Planner Visit Tree | crm.salesperson.planner.visit | tree | New |
partner_view_crm_salesperson_planner |
partner.view.crm.salesperson.planner | res.partner | xpath | Inherits base.view_partner_form |
salesperson_planner_visit_ids
One2many → crm.salesperson.planner.visit
comodel_name='crm.salesperson.planner.visit'
inverse_name='calendar_event_id'
string='Salesperson Visits'
unlink(self)
write(self, values)
crm_salesperson_planner_visit_ids
Many2many → crm.salesperson.planner.visit
comodel_name='crm.salesperson.planner.visit'
copy=False
domain="[('partner_id', 'child_of', partner_id)]"
relation='crm_salesperson_planner_visit_crm_lead_rel'
string='Visits'
No public methods.
calendar_event_id
Many2one → calendar.event
comodel_name='calendar.event'
string='Calendar Event'
close_reason_id
Many2one → crm.salesperson.planner.visit.close.reason
comodel_name='crm.salesperson.planner.visit.close.reason'
string='Close Reason'
close_reason_image
Image
attachment=True
max_height=1024
max_width=1024
close_reason_notes
Text
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
date
Date
default=fields.Date.context_today
required=True
description
Html
name
Char
copy=False
default='/'
required=True
string='Visit Number'
opportunity_ids
Many2many → crm.lead
comodel_name='crm.lead'
copy=False
domain="[('type', '=', 'opportunity'), ('partner_id', 'child_of', partner_id)]"
relation='crm_salesperson_planner_visit_crm_lead_rel'
string='Opportunities'
partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='Customer'
partner_mobile
Char
related='partner_id.mobile'
string='Mobile'
partner_phone
Char
related='partner_id.phone'
string='Phone'
sequence
Integer
default=20
help='Used to order Visits in the different views'
state
Selection
copy=False
default='draft'
required=True
selection=[('draft', 'Draft'), ('confirm', 'Validated'), ('done', 'Visited'), ('cancel', 'Cancelled'), ('incident', 'Incident')]
string='Status'
tracking=True
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
domain=<expr>
index=True
string='Salesperson'
tracking=True
visit_template_id
Many2one → crm.salesperson.planner.visit.template
comodel_name='crm.salesperson.planner.visit.template'
string='Visit Template'
action_cancel(self, reason_id, image=None, notes=None)
action_confirm(self)
action_done(self)
action_draft(self)
action_incident(self, reason_id, image=None, notes=None)
create(self, vals_list)
create_calendar_event(self)
unlink(self)
write(self, values)
close_type
Selection
default='cancel'
required=True
selection=[('cancel', 'Cancel'), ('incident', 'Incident')]
string='Type'
name
Char
required=True
string='Description'
translate=True
require_image
Boolean
default=False
reschedule
Boolean
default=False
No public methods.
allow_reschedule
Boolean
related='reason_id.reschedule'
string='Allow Reschedule'
image
Image
max_height=1024
max_width=1024
new_date
Date
default=<expr>
new_sequence
Integer
default=<expr>
help='Used to order Visits in the different views'
string='Sequence'
notes
Text
reason_id
Many2one → crm.salesperson.planner.visit.close.reason
comodel_name='crm.salesperson.planner.visit.close.reason'
required=True
string='Reason'
require_image
Boolean
related='reason_id.require_image'
string='Require Image'
reschedule
Boolean
default=True
action_close_reason_apply(self)
alarm_ids
Many2many → calendar.alarm
comodel_name='calendar.alarm'
help='Notifications sent to all attendees to remind of the meeting.'
ondelete='restrict'
string='Reminders'
allday
Boolean
default=True
string='All Day'
auto_validate
Boolean
default=True
byday
Selection
categ_ids
Many2many → calendar.event.type
comodel_name='calendar.event.type'
string='Tags'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
count
Integer
help='Repeat x times'
string='Repeat'
day
Integer
string='Date of month'
description
Html
duration
Float
compute='_compute_duration'
readonly=False
store=True
end_type
Selection
string='Recurrence Termination'
args: END_TYPE_SELECTION
event_tz
Selection
string='Timezone'
args: _tz_get
final_date
Date
string='Repeat Until'
fri
Boolean
interval
Integer
help='Repeat every (Days/Week/Month/Year)'
string='Repeat Every'
last_visit_date
Date
compute='_compute_last_visit_date'
store=True
mon
Boolean
month_by
Selection
string='Option'
args: MONTH_BY_SELECTION
name
Char
copy=False
default='/'
string='Visit Template Number'
partner_id
Many2one → res.partner
comodel_name='res.partner'
related='user_id.partner_id'
string='Scheduled by'
partner_ids
Many2many → res.partner
comodel_name='res.partner'
default=False
required=True
string='Customer'
rrule
Char
string='Recurrent Rule'
rrule_type
Selection
default='daily'
help='Let the event automatically repeat at that interval'
required=True
string='Recurrence'
args: RRULE_TYPE_SELECTION
sat
Boolean
sequence
Integer
default=20
help='Used to order Visits in the different views'
start
Datetime
default=fields.Date.today
help='Start date of an event, without time for full days events'
required=True
tracking=True
start_date
Date
compute='_compute_dates'
inverse='_inverse_dates'
store=True
tracking=True
state
Selection
copy=False
default='draft'
required=True
selection=[('draft', 'Draft'), ('in-progress', 'In Progress'), ('done', 'Done'), ('cancel', 'Cancelled')]
string='Status'
tracking=True
stop
Datetime
compute='_compute_stop'
default=<expr>
help='Stop date of an event, without time for full days events'
required=True
store=True
tracking=True
stop_date
Date
compute='_compute_dates'
inverse='_inverse_dates'
store=True
string='End Date'
tracking=True
sun
Boolean
thu
Boolean
tue
Boolean
until
Date
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
domain=<expr>
string='Salesperson'
tracking=True
visit_ids
One2many → crm.salesperson.planner.visit
comodel_name='crm.salesperson.planner.visit'
inverse_name='visit_template_id'
string='Visit Template'
visit_ids_count
Integer
compute='_compute_visit_ids_count'
string='Number of Sales Person Visits'
wed
Boolean
weekday
Selection
action_cancel(self)
action_draft(self)
action_validate(self)
action_view_salesperson_planner_visit(self)
create(self, vals_list)
create_visits(self, days=7)
date_to
Date
default=<expr>
required=True
string='Date to'
create_visits(self)
salesperson_planner_visit_count
Integer
compute='_compute_salesperson_planner_visit_count'
string='Number of Salesperson Visits'
action_view_salesperson_planner_visit(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/crm |
| GIT | |
| GIT | https://github.com/OCA/crm.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/crm/tree/16.0/crm_salesperson_planner |
| VERSION | |
| VERSION | 2.0.2 |
| CATEGORY | |
| CATEGORY | Customer Relationship Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Sygel Technology |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Sygel Technology |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, Zina Rasoamanana |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/crm |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:53:42 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - crm - base_setup - base - web - sales_team - bus - web_tour - calendar - resource - utm - web_kanban_gauge - contacts - digest - portal - web_editor - http_routing - auth_signup - phone_validation |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
crm_lead_crm_salesperson_planner |
crm.lead.view.crm.salesperson.planner | crm.lead | notebook | Inherits crm.crm_lead_view_form |
crm_salesperson_planner_visit_close_reason_form_view |
CRM - Salesperson Planner Visit Close Reason Form | crm.salesperson.planner.visit.close.reason | form | New |
crm_salesperson_planner_visit_close_reason_tree_view |
CRM - Salesperson Planner Visit Close Reason Tree | crm.salesperson.planner.visit.close.reason | tree | New |
crm_salesperson_planner_visit_close_wiz_view_form |
crm.salesperson.lost.form | crm.salesperson.planner.visit.close.wiz | form | New |
crm_salesperson_planner_visit_filter |
CRM - Salesperson Planner Visit Search | crm.salesperson.planner.visit | search | New |
crm_salesperson_planner_visit_form_view |
CRM - Salesperson Planner Visit Form | crm.salesperson.planner.visit | form | New |
crm_salesperson_planner_visit_template_create_view_form |
crm.salesperson.planner.visit.template.create.form | crm.salesperson.planner.visit.template.create | form | New |
crm_salesperson_planner_visit_template_form_view |
CRM - Salesperson Planner Visit Template Form | crm.salesperson.planner.visit.template | form | New |
crm_salesperson_planner_visit_template_tree_view |
CRM - Salesperson Planner Visit Template Tree | crm.salesperson.planner.visit.template | tree | New |
crm_salesperson_planner_visit_tree_view |
CRM - Salesperson Planner Visit Tree | crm.salesperson.planner.visit | tree | New |
partner_view_crm_salesperson_planner |
partner.view.crm.salesperson.planner | res.partner | xpath | Inherits base.view_partner_form |
salesperson_planner_visit_ids
One2many → crm.salesperson.planner.visit
comodel_name='crm.salesperson.planner.visit'
inverse_name='calendar_event_id'
string='Salesperson Visits'
unlink(self)
write(self, values)
crm_salesperson_planner_visit_ids
Many2many → crm.salesperson.planner.visit
comodel_name='crm.salesperson.planner.visit'
copy=False
domain="[('partner_id', 'child_of', partner_id)]"
relation='crm_salesperson_planner_visit_crm_lead_rel'
string='Visits'
No public methods.
calendar_event_id
Many2one → calendar.event
comodel_name='calendar.event'
string='Calendar Event'
close_reason_id
Many2one → crm.salesperson.planner.visit.close.reason
comodel_name='crm.salesperson.planner.visit.close.reason'
string='Close Reason'
close_reason_image
Image
attachment=True
max_height=1024
max_width=1024
close_reason_notes
Text
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
date
Date
default=fields.Date.context_today
required=True
description
Html
name
Char
copy=False
default='/'
readonly=True
required=True
string='Visit Number'
opportunity_ids
Many2many → crm.lead
comodel_name='crm.lead'
copy=False
domain="[('type', '=', 'opportunity'), ('partner_id', 'child_of', partner_id)]"
relation='crm_salesperson_planner_visit_crm_lead_rel'
string='Opportunities'
partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='Customer'
partner_mobile
Char
related='partner_id.mobile'
string='Mobile'
partner_phone
Char
related='partner_id.phone'
string='Phone'
sequence
Integer
default=20
help='Used to order Visits in the different views'
state
Selection
copy=False
default='draft'
readonly=True
required=True
selection=[('draft', 'Draft'), ('confirm', 'Validated'), ('done', 'Visited'), ('cancel', 'Cancelled'), ('incident', 'Incident')]
string='Status'
tracking=True
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
domain=<expr>
index=True
string='Salesperson'
tracking=True
visit_template_id
Many2one → crm.salesperson.planner.visit.template
comodel_name='crm.salesperson.planner.visit.template'
string='Visit Template'
action_cancel(self, reason_id, image=None, notes=None)
action_confirm(self)
action_done(self)
action_draft(self)
action_incident(self, reason_id, image=None, notes=None)
create(self, vals_list)
create_calendar_event(self)
unlink(self)
write(self, values)
close_type
Selection
default='cancel'
required=True
selection=[('cancel', 'Cancel'), ('incident', 'Incident')]
string='Type'
name
Char
required=True
string='Description'
translate=True
require_image
Boolean
default=False
reschedule
Boolean
default=False
No public methods.
allow_reschedule
Boolean
related='reason_id.reschedule'
string='Allow Reschedule'
image
Image
max_height=1024
max_width=1024
new_date
Date
default=<expr>
new_sequence
Integer
default=<expr>
help='Used to order Visits in the different views'
string='Sequence'
notes
Text
reason_id
Many2one → crm.salesperson.planner.visit.close.reason
comodel_name='crm.salesperson.planner.visit.close.reason'
required=True
string='Reason'
require_image
Boolean
related='reason_id.require_image'
string='Require Image'
reschedule
Boolean
default=True
action_close_reason_apply(self)
alarm_ids
Many2many → calendar.alarm
comodel_name='calendar.alarm'
help='Notifications sent to all attendees to remind of the meeting.'
ondelete='restrict'
string='Reminders'
allday
Boolean
default=True
string='All Day'
auto_validate
Boolean
default=True
byday
Selection
categ_ids
Many2many → calendar.event.type
comodel_name='calendar.event.type'
string='Tags'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
count
Integer
help='Repeat x times'
string='Repeat'
day
Integer
string='Date of month'
description
Html
duration
Float
compute='_compute_duration'
readonly=False
store=True
end_type
Selection
string='Recurrence Termination'
args: END_TYPE_SELECTION
event_tz
Selection
string='Timezone'
args: _tz_get
final_date
Date
string='Repeat Until'
fri
Boolean
interval
Integer
help='Repeat every (Days/Week/Month/Year)'
string='Repeat Every'
last_visit_date
Date
compute='_compute_last_visit_date'
store=True
mon
Boolean
month_by
Selection
string='Option'
args: MONTH_BY_SELECTION
name
Char
copy=False
default='/'
readonly=True
string='Visit Template Number'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
related='user_id.partner_id'
string='Scheduled by'
partner_ids
Many2many → res.partner
comodel_name='res.partner'
default=False
required=True
string='Customer'
rrule
Char
string='Recurrent Rule'
rrule_type
Selection
default='daily'
help='Let the event automatically repeat at that interval'
required=True
string='Recurrence'
args: RRULE_TYPE_SELECTION
sat
Boolean
sequence
Integer
default=20
help='Used to order Visits in the different views'
start
Datetime
default=fields.Date.today
help='Start date of an event, without time for full days events'
required=True
tracking=True
start_date
Date
compute='_compute_dates'
inverse='_inverse_dates'
store=True
tracking=True
state
Selection
copy=False
default='draft'
required=True
selection=[('draft', 'Draft'), ('in-progress', 'In Progress'), ('done', 'Done'), ('cancel', 'Cancelled')]
string='Status'
tracking=True
stop
Datetime
compute='_compute_stop'
default=<expr>
help='Stop date of an event, without time for full days events'
readonly=False
required=True
store=True
tracking=True
stop_date
Date
compute='_compute_dates'
inverse='_inverse_dates'
store=True
string='End Date'
tracking=True
sun
Boolean
thu
Boolean
tue
Boolean
until
Date
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
domain=<expr>
string='Salesperson'
tracking=True
visit_ids
One2many → crm.salesperson.planner.visit
comodel_name='crm.salesperson.planner.visit'
inverse_name='visit_template_id'
string='Visit Template'
visit_ids_count
Integer
compute='_compute_visit_ids_count'
string='Number of Sales Person Visits'
wed
Boolean
weekday
Selection
action_cancel(self)
action_draft(self)
action_validate(self)
action_view_salesperson_planner_visit(self)
create(self, vals_list)
create_visits(self, days=7)
date_to
Date
default=<expr>
required=True
string='Date to'
create_visits(self)
salesperson_planner_visit_count
Integer
compute='_compute_salesperson_planner_visit_count'
string='Number of Salesperson Visits'
action_view_salesperson_planner_visit(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/crm |
| GIT | |
| GIT | https://github.com/OCA/crm.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/crm/tree/15.0/crm_salesperson_planner |
| VERSION | |
| VERSION | 3.0.1 |
| CATEGORY | |
| CATEGORY | Customer Relationship Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Sygel Technology |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Sygel Technology |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, sergio-teruel, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, Roger, ilo |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/crm |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:46:31 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - crm - base_setup - base - web - sales_team - bus - web_tour - calendar - resource - fetchmail - utm - web_kanban_gauge - contacts - digest - portal - web_editor - http_routing - auth_signup - phone_validation |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
crm_lead_crm_salesperson_planner |
crm.lead.view.crm.salesperson.planner | crm.lead | notebook | Inherits crm.crm_lead_view_form |
crm_salesperson_planner_visit_close_reason_form_view |
CRM - Salesperson Planner Visit Close Reason Form | crm.salesperson.planner.visit.close.reason | form | New |
crm_salesperson_planner_visit_close_reason_tree_view |
CRM - Salesperson Planner Visit Close Reason Tree | crm.salesperson.planner.visit.close.reason | tree | New |
crm_salesperson_planner_visit_close_wiz_view_form |
crm.salesperson.lost.form | crm.salesperson.planner.visit.close.wiz | form | New |
crm_salesperson_planner_visit_filter |
CRM - Salesperson Planner Visit Search | crm.salesperson.planner.visit | search | New |
crm_salesperson_planner_visit_form_view |
CRM - Salesperson Planner Visit Form | crm.salesperson.planner.visit | form | New |
crm_salesperson_planner_visit_template_create_view_form |
crm.salesperson.planner.visit.template.create.form | crm.salesperson.planner.visit.template.create | form | New |
crm_salesperson_planner_visit_template_form_view |
CRM - Salesperson Planner Visit Template Form | crm.salesperson.planner.visit.template | form | New |
crm_salesperson_planner_visit_template_tree_view |
CRM - Salesperson Planner Visit Template Tree | crm.salesperson.planner.visit.template | tree | New |
crm_salesperson_planner_visit_tree_view |
CRM - Salesperson Planner Visit Tree | crm.salesperson.planner.visit | tree | New |
partner_view_crm_salesperson_planner |
partner.view.crm.salesperson.planner | res.partner | xpath | Inherits base.view_partner_form |
salesperson_planner_visit_ids
One2many → crm.salesperson.planner.visit
comodel_name='crm.salesperson.planner.visit'
inverse_name='calendar_event_id'
string='Salesperson Visits'
unlink(self)
write(self, values)
crm_salesperson_planner_visit_ids
Many2many → crm.salesperson.planner.visit
comodel_name='crm.salesperson.planner.visit'
copy=False
domain="[('partner_id', 'child_of', partner_id)]"
relation='crm_salesperson_planner_visit_crm_lead_rel'
string='Visits'
No public methods.
calendar_event_id
Many2one → calendar.event
comodel_name='calendar.event'
string='Calendar Event'
close_reason_id
Many2one → crm.salesperson.planner.visit.close.reason
comodel_name='crm.salesperson.planner.visit.close.reason'
string='Close Reason'
close_reason_image
Image
attachment=True
max_height=1024
max_width=1024
close_reason_notes
Text
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
date
Date
default=fields.Date.context_today
required=True
description
Html
name
Char
copy=False
default='/'
readonly=True
required=True
string='Visit Number'
opportunity_ids
Many2many → crm.lead
comodel_name='crm.lead'
copy=False
domain="[('type', '=', 'opportunity'), ('partner_id', 'child_of', partner_id)]"
relation='crm_salesperson_planner_visit_crm_lead_rel'
string='Opportunities'
partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='Customer'
partner_mobile
Char
related='partner_id.mobile'
string='Mobile'
partner_phone
Char
related='partner_id.phone'
string='Phone'
sequence
Integer
default=20
help='Used to order Visits in the different views'
state
Selection
copy=False
default='draft'
readonly=True
required=True
selection=[('draft', 'Draft'), ('confirm', 'Validated'), ('done', 'Visited'), ('cancel', 'Cancelled'), ('incident', 'Incident')]
string='Status'
tracking=True
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
domain=<expr>
index=True
string='Salesperson'
tracking=True
visit_template_id
Many2one → crm.salesperson.planner.visit.template
comodel_name='crm.salesperson.planner.visit.template'
string='Visit Template'
action_cancel(self, reason_id, image=None, notes=None)
action_confirm(self)
action_done(self)
action_draft(self)
action_incident(self, reason_id, image=None, notes=None)
create(self, vals_list)
create_calendar_event(self)
unlink(self)
write(self, values)
close_type
Selection
default='cancel'
required=True
selection=[('cancel', 'Cancel'), ('incident', 'Incident')]
string='Type'
name
Char
required=True
string='Description'
translate=True
require_image
Boolean
default=False
reschedule
Boolean
default=False
No public methods.
allow_reschedule
Boolean
related='reason_id.reschedule'
string='Allow Reschedule'
image
Image
max_height=1024
max_width=1024
new_date
Date
default=<expr>
new_sequence
Integer
default=<expr>
help='Used to order Visits in the different views'
string='Sequence'
notes
Text
reason_id
Many2one → crm.salesperson.planner.visit.close.reason
comodel_name='crm.salesperson.planner.visit.close.reason'
required=True
string='Reason'
require_image
Boolean
related='reason_id.require_image'
string='Require Image'
reschedule
Boolean
default=True
action_close_reason_apply(self)
alarm_ids
Many2many → calendar.alarm
comodel_name='calendar.alarm'
help='Notifications sent to all attendees to remind of the meeting.'
ondelete='restrict'
string='Reminders'
allday
Boolean
default=True
string='All Day'
auto_validate
Boolean
default=True
byday
Selection
categ_ids
Many2many → calendar.event.type
comodel_name='calendar.event.type'
string='Tags'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
count
Integer
help='Repeat x times'
string='Repeat'
day
Integer
string='Date of month'
description
Html
duration
Float
compute='_compute_duration'
readonly=False
store=True
end_type
Selection
string='Recurrence Termination'
args: END_TYPE_SELECTION
event_tz
Selection
string='Timezone'
args: _tz_get
final_date
Date
string='Repeat Until'
fri
Boolean
interval
Integer
help='Repeat every (Days/Week/Month/Year)'
string='Repeat Every'
last_visit_date
Date
compute='_compute_last_visit_date'
store=True
mon
Boolean
month_by
Selection
string='Option'
args: MONTH_BY_SELECTION
name
Char
copy=False
default='/'
readonly=True
string='Visit Template Number'
partner_id
Many2one → res.partner
comodel_name='res.partner'
readonly=True
related='user_id.partner_id'
string='Scheduled by'
partner_ids
Many2many → res.partner
comodel_name='res.partner'
default=False
required=True
string='Customer'
rrule
Char
string='Recurrent Rule'
rrule_type
Selection
default='daily'
help='Let the event automatically repeat at that interval'
required=True
string='Recurrence'
args: RRULE_TYPE_SELECTION
sat
Boolean
sequence
Integer
default=20
help='Used to order Visits in the different views'
start
Datetime
default=fields.Date.today
help='Start date of an event, without time for full days events'
required=True
tracking=True
start_date
Date
compute='_compute_dates'
inverse='_inverse_dates'
store=True
tracking=True
state
Selection
copy=False
default='draft'
required=True
selection=[('draft', 'Draft'), ('in-progress', 'In Progress'), ('done', 'Done'), ('cancel', 'Cancelled')]
string='Status'
tracking=True
stop
Datetime
compute='_compute_stop'
default=<expr>
help='Stop date of an event, without time for full days events'
readonly=False
required=True
store=True
tracking=True
stop_date
Date
compute='_compute_dates'
inverse='_inverse_dates'
store=True
string='End Date'
tracking=True
sun
Boolean
thu
Boolean
tue
Boolean
until
Date
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
domain=<expr>
string='Salesperson'
tracking=True
visit_ids
One2many → crm.salesperson.planner.visit
comodel_name='crm.salesperson.planner.visit'
inverse_name='visit_template_id'
string='Visit Template'
visit_ids_count
Integer
compute='_compute_visit_ids_count'
string='Number of Sales Person Visits'
wed
Boolean
weekday
Selection
action_cancel(self)
action_draft(self)
action_validate(self)
action_view_salesperson_planner_visit(self)
create(self, vals_list)
create_visits(self, days=7)
date_to
Date
default=<expr>
required=True
string='Date to'
create_visits(self)
salesperson_planner_visit_count
Integer
compute='_compute_salesperson_planner_visit_count'
string='Number of Salesperson Visits'
action_view_salesperson_planner_visit(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/crm |
| GIT | |
| GIT | https://github.com/OCA/crm.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/crm/tree/13.0/crm_salesperson_planner |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Customer Relationship Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Sygel Technology |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Sygel Technology |
| COMMITTERS | |
| COMMITTERS | oca-travis, Weblate, OCA-git-bot, Valentin Vinagre Urteaga |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/crm |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:34:10 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - crm - base_setup - base - web - sales_team - bus - web_tour - calendar - resource - fetchmail - utm - contacts - digest - portal - web_editor - http_routing - auth_signup - phone_validation |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
crm_lead_crm_salesperson_planner |
crm.lead.view.crm.salesperson.planner | crm.lead | notebook | Inherits crm.crm_lead_view_form |
crm_salesperson_planner_visit_close_reason_form_view |
CRM - Salesperson Planner Visit Close Reason Form | crm.salesperson.planner.visit.close.reason | form | New |
crm_salesperson_planner_visit_close_reason_tree_view |
CRM - Salesperson Planner Visit Close Reason Tree | crm.salesperson.planner.visit.close.reason | tree | New |
crm_salesperson_planner_visit_close_wiz_view_form |
crm.salesperson.lost.form | crm.salesperson.planner.visit.close.wiz | form | New |
crm_salesperson_planner_visit_filter |
CRM - Salesperson Planner Visit Search | crm.salesperson.planner.visit | search | New |
crm_salesperson_planner_visit_form_view |
CRM - Salesperson Planner Visit Form | crm.salesperson.planner.visit | form | New |
crm_salesperson_planner_visit_template_create_view_form |
crm.salesperson.planner.visit.template.create.form | crm.salesperson.planner.visit.template.create | form | New |
crm_salesperson_planner_visit_template_form_view |
CRM - Salesperson Planner Visit Template Form | crm.salesperson.planner.visit.template | form | New |
crm_salesperson_planner_visit_template_tree_view |
CRM - Salesperson Planner Visit Template Tree | crm.salesperson.planner.visit.template | tree | New |
crm_salesperson_planner_visit_tree_view |
CRM - Salesperson Planner Visit Tree | crm.salesperson.planner.visit | tree | New |
partner_view_crm_salesperson_planner |
partner.view.crm.salesperson.planner | res.partner | xpath | Inherits base.view_partner_form |
salesperson_planner_visit_ids
One2many → crm.salesperson.planner.visit
comodel_name='crm.salesperson.planner.visit'
inverse_name='calendar_event_id'
string='Salesperson Visits'
unlink(self, can_be_deleted=True)
write(self, values)
crm_salesperson_planner_visit_ids
Many2many → crm.salesperson.planner.visit
comodel_name='crm.salesperson.planner.visit'
copy=False
domain="[('partner_id', 'child_of', partner_id)]"
relation='crm_salesperson_planner_visit_crm_lead_rel'
string='Visits'
No public methods.
calendar_event_id
Many2one → calendar.event
comodel_name='calendar.event'
string='Calendar Event'
close_reason_id
Many2one → crm.salesperson.planner.visit.close.reason
comodel_name='crm.salesperson.planner.visit.close.reason'
string='Close Reason'
close_reason_image
Image
attachment=True
max_height=1024
max_width=1024
string='Close Reason Image'
close_reason_notes
Text
string='Close Reason Notes'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
date
Date
default=fields.Date.context_today
required=True
string='Date'
description
Html
string='Description'
name
Char
copy=False
default='/'
readonly=True
required=True
string='Visit Number'
opportunity_ids
Many2many → crm.lead
comodel_name='crm.lead'
copy=False
domain="[('type', '=', 'opportunity'), ('partner_id', 'child_of', partner_id)]"
relation='crm_salesperson_planner_visit_crm_lead_rel'
string='Opportunities'
partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='Customer'
partner_mobile
Char
related='partner_id.mobile'
string='Mobile'
partner_phone
Char
related='partner_id.phone'
string='Phone'
sequence
Integer
default=20
help='Used to order Visits in the different views'
string='Sequence'
state
Selection
copy=False
default='draft'
readonly=True
required=True
selection=[('draft', 'Draft'), ('confirm', 'Validated'), ('done', 'Visited'), ('cancel', 'Cancelled'), ('incident', 'Incident')]
string='Status'
tracking=True
user_id
Many2one → res.users
comodel_name='res.users'
default=<expr>
domain=<expr>
index=True
string='Salesperson'
tracking=True
visit_template_id
Many2one → crm.salesperson.planner.visit.template
comodel_name='crm.salesperson.planner.visit.template'
string='Visit Template'
action_cancel(self, reason_id, image=None, notes=None)
action_confirm(self)
action_done(self)
action_draft(self)
action_incident(self, reason_id, image=None, notes=None)
create(self, vals_list)
create_calendar_event(self)
unlink(self)
write(self, values)
close_type
Selection
default='cancel'
required=True
selection=[('cancel', 'Cancel'), ('incident', 'Incident')]
string='Type'
name
Char
required=True
string='Description'
translate=True
require_image
Boolean
default=False
string='Require Image'
reschedule
Boolean
default=False
string='Reschedule'
No public methods.
allow_reschedule
Boolean
related='reason_id.reschedule'
string='Allow Reschedule'
image
Image
max_height=1024
max_width=1024
string='Image'
new_date
Date
default=<expr>
string='New Date'
new_sequence
Integer
default=<expr>
help='Used to order Visits in the different views'
string='Sequence'
notes
Text
string='Notes'
reason_id
Many2one → crm.salesperson.planner.visit.close.reason
comodel_name='crm.salesperson.planner.visit.close.reason'
required=True
string='Reason'
require_image
Boolean
related='reason_id.require_image'
string='Require Image'
reschedule
Boolean
default=True
string='Reschedule'
action_close_reason_apply(self)
alarm_ids
Many2many
relation='visit_calendar_event_rel'
allday
Boolean
default=True
auto_validate
Boolean
default=True
string='Auto Validate'
categ_ids
Many2many
relation='visit_category_rel'
company_id
Many2one → res.company
comodel_name='res.company'
default=<expr>
string='Company'
final_date
Date
string='Repeat Until'
last_visit_date
Date
compute='_compute_last_visit_date'
store=True
string='Last Visit Date'
name
Char
copy=False
default='/'
readonly=True
string='Visit Template Number'
partner_ids
Many2many
default=False
relation='salesperson_planner_res_partner_rel'
required=True
string='Customer'
recurrency
Boolean
default=True
rrule_type
Selection
default='daily'
required=True
sequence
Integer
default=20
help='Used to order Visits in the different views'
string='Sequence'
state
Selection
copy=False
default='draft'
required=True
selection=[('draft', 'Draft'), ('in-progress', 'In Progress'), ('done', 'Done'), ('cancel', 'Cancelled')]
string='Status'
tracking=True
user_id
Many2one
default=<expr>
domain=<expr>
string='Salesperson'
tracking=True
visit_ids
One2many → crm.salesperson.planner.visit
comodel_name='crm.salesperson.planner.visit'
inverse_name='visit_template_id'
string='Visit Template'
visit_ids_count
Integer
compute='_compute_visit_ids_count'
string='Number of Sales Person Visits'
action_cancel(self)
action_draft(self)
action_validate(self)
action_view_salesperson_planner_visit(self)
create(self, vals_list)
create_attendees(self)
create_visits(self, days=7)
filter_dates(self, recurrences, days='7')
get_recurrent_ids(self, domain, order=None)
unlink(self, can_be_deleted=True)
write(self, vals)
date_to
Date
default=<expr>
required=True
string='Date to'
create_visits(self)
salesperson_planner_visit_count
Integer
compute='_compute_salesperson_planner_visit_count'
string='Number of Salesperson Visits'
action_view_salesperson_planner_visit(self)
| STATUS | |
|---|---|
| STATUS | Open migration PR - not merged yet for this version |
| REPOSITORY | |
| REPOSITORY | OCA/crm |
| PULL REQUEST | |
| PULL REQUEST | [19.0][MIG] crm_salesperson_planner: Migration to 19.0 (#751) |