Repository
OCA/crm · module folder · Try on Runboat
Module version
1.1.0
Category
Customer Relationship Management
Folder size
0.3 MB
License
AGPL-3
Application
No
Auto-installable
No
Website
https://github.com/OCA/crm
Last tracking update
2026-08-07 08:42:48
Authors
Odoo Community Association (OCA), Sygel Technology
Maintainers
Odoo Community Association (OCA), Sygel Technology
Committers
sygel, Weblate, OCA-git-bot, oca-ci, Bhavesh Heliconia
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
None
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.

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
crm_lead_crm_salesperson_planner crm.lead.view.crm.salesperson.planner crm.lead form 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 form Inherits base.view_partner_form
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (8)

New fields (1)
  • salesperson_planner_visit_ids One2many → crm.salesperson.planner.visit
    comodel_name='crm.salesperson.planner.visit' inverse_name='calendar_event_id' string='Salesperson Visits'
Public methods (2)
  • unlink(self)
  • write(self, values)

New fields (1)
  • 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'
Public methods (0)

No public methods.

New fields (16)
  • 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'
Public methods (9)
  • 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)
    @api.model_create_multi
  • create_calendar_event(self)
  • unlink(self)
  • write(self, values)

New fields (4)
  • 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
Public methods (0)

No public methods.

New fields (8)
  • 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
Public methods (1)
  • action_close_reason_apply(self)

New fields (39)
  • 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
    args: 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
    args: WEEKDAY_SELECTION
Public methods (6)
  • action_cancel(self)
  • action_draft(self)
  • action_validate(self)
  • action_view_salesperson_planner_visit(self)
  • create(self, vals_list)
    @api.model_create_multi
  • create_visits(self, days=7)

New fields (1)
  • date_to Date
    default=<expr> required=True string='Date to'
Public methods (1)
  • create_visits(self)

New fields (1)
  • salesperson_planner_visit_count Integer
    compute='_compute_salesperson_planner_visit_count' string='Number of Salesperson Visits'
Public methods (1)
  • action_view_salesperson_planner_visit(self)

Loading…

Loading…

Loading…

Loading…

Status
Open migration PR — not merged yet for this version
CI status
checks failing
Open since
69 days ago
Last activity
20 days ago
Repository
OCA/crm
Pull request
[19.0][MIG] crm_salesperson_planner: Migration to 19.0 (#751)