TIP: You can type at any time to perform a new search.
CRM
crm · odoo/odoo
Security findings
- Repository
- odoo/odoo · module folder
- Module version
- 1.9
- Category
- Sales/CRM
- Folder size
- 10.39 MB
- License
- LGPL-3
- Application
- Yes
- Auto-installable
- No
- Website
- https://www.odoo.com/app/crm
- Last tracking update
- 2026-10-05 00:19:46
- Authors
- Odoo S.A.
- Maintainers
- Odoo S.A.
- Committers
- Xavier Morel, Raphael Collet, Thibault Delavallée, Odoo Translation Bot, Christophe Matthieu, Joren Van Onder, Aaron Bohy, Géry Debongnie, Pierre Masereel, Jorge Pinna Puissant, Aurélien Warnon, Xavier-Do, Romeo Fragomeli, Victor Feyens, Adrien Dieudonné, Sébastien Theys, Julien Mougenot, std-odoo, Prakash Prajapati, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, Romain Estievenart, Miquel Raïch, Didier (did), Florian Charlier, luvi, Renaud Thiry, Julien Banken, alsh-odoo, Victor Piryns (pivi), amdi-odoo, Gauthier Wala (gawa), Pierre-Yves Dufays, Dylan Kiss (dyki), Chong Wang (cwg), Xavier Bol (xbo), Brieuc-brd, Noe Antoine, Andrzej(pian), Ruben Gomes (rugo), adsh-odoo, Alex Kühn, nihp-odoo, Harsh Shah, Xavier Luyckx (xlu), guce, Claire (clbr), Mohammed Basioni, sben-odoo, Pierre Lamotte (pila), Pierre Pulinckx, Michaël Mattiello, Krzysztof Magusiak (krma), Ajit Singh, Hadi El Yakhni, nsirjacobs, bhna-odoo, defl, MAGREMENT, Julien Launois (jula), Yagnik ✗ (yagp), path-odoo, Saurabh, Amr Elkhatieb, Yash Tiwari (Yatiw), assh-odoo, Ziri, Mohamed Barakat, Séna Nshimiyimana, Zachary (zavan), alan-odoo, Kadam Darji, Julien Carion, ELCO, chpa-odoo, Oussema Heni, Frantisek Binovsky, dhrs-odoo, Julien Coppin (jucop), Francois Vasamillet (frva), Julien Piron, Jean Schoenlaub, SebVrc
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- crm_livechat, crm_mail_plugin, crm_sale_project, crm_sms, event_crm, iap_crm, mass_mailing_crm, partnership, sale_crm, survey_crm, test_crm_full, test_discuss_full, test_main_flows, website_crm, website_crm_partner_assign, website_crm_sms
- Description
Code Analysis
Views touched (59)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
crm_action_helper |
crm action helper | ir.ui.view | qweb | New |
crm_activity_report_view_graph |
crm.activity.report.graph | crm.activity.report | graph | New |
crm_activity_report_view_pivot |
crm.activity.report.pivot | crm.activity.report | pivot | New |
crm_activity_report_view_search |
crm.activity.report.search | crm.activity.report | search | New |
crm_activity_report_view_tree |
crm.activity.report.list | crm.activity.report | list | New |
crm_case_calendar_view_leads |
crm.lead.calendar.lead | crm.lead | calendar | New |
crm_case_kanban_view_leads |
crm.lead.kanban.lead | crm.lead | kanban | New |
crm_case_tree_view_leads |
crm.lead.list.lead | crm.lead | list | New |
crm_case_tree_view_oppor |
crm.lead.list.opportunity | crm.lead | list | New |
crm_lead_creation_message |
crm lead creation message | ir.ui.view | qweb | New |
crm_lead_lost_view_form |
crm.lead.lost.form | crm.lead.lost | form | New |
crm_lead_merge_summary |
crm_lead_merge_summary | ir.ui.view | qweb | New |
crm_lead_pls_update_view_form |
crm.lead.pls.update.view.form | crm.lead.pls.update | form | New |
crm_lead_stage_search |
Stage - Search | crm.stage | search | New |
crm_lead_view_activity |
crm.lead.view.activity | crm.lead | activity | New |
crm_lead_view_form |
crm.lead.form | crm.lead | form | New |
crm_lead_view_graph |
crm.lead.view.graph | crm.lead | graph | New |
crm_lead_view_graph_forecast |
crm.lead.view.graph.forecast | crm.lead | graph | New |
crm_lead_view_kanban_forecast |
crm.lead.view.kanban.forecast | crm.lead | kanban | Inherits crm.crm_case_kanban_view_leads |
crm_lead_view_list_activities |
crm.lead.list.activities | crm.lead | list | Inherits crm.crm_case_tree_view_oppor |
crm_lead_view_list_simplified |
crm.lead.view.list.simplified | crm.lead | list | New |
crm_lead_view_pivot |
crm.lead.view.pivot | crm.lead | pivot | New |
crm_lead_view_pivot_forecast |
crm.lead.view.pivot.forecast | crm.lead | pivot | New |
crm_lead_view_search_forecast |
crm.lead.view.search.forecast | crm.lead | search | Inherits crm.view_crm_case_opportunities_filter |
crm_lead_view_tree_forecast |
crm.lead.view.list.forecast | crm.lead | list | Inherits crm.crm_case_tree_view_oppor |
crm_lead_view_tree_opportunity_reporting |
crm.lead.list.opportunity.reporting | crm.lead | list | Inherits crm.crm_case_tree_view_oppor |
crm_lead_view_tree_reporting |
crm.lead.list.lead.reporting | crm.lead | list | Inherits crm.crm_case_tree_view_leads |
crm_lost_reason_view_form |
crm.lost.reason.form | crm.lost.reason | form | New |
crm_lost_reason_view_search |
crm.lost.reason.view.search | crm.lost.reason | search | New |
crm_lost_reason_view_tree |
crm.lost.reason.list | crm.lost.reason | list | New |
crm_module_access_request_template |
crm_module_access_request_template | ir.ui.view | qweb | Inherits base_install_request.mail_installation_request_template |
crm_opportunity_report_view_graph |
crm.opportunity.report.graph | crm.lead | graph | New |
crm_opportunity_report_view_graph_lead |
crm.opportunity.report.graph.lead | crm.lead | graph | New |
crm_opportunity_report_view_pivot |
crm.opportunity.report.pivot | crm.lead | pivot | New |
crm_opportunity_report_view_pivot_lead |
crm.opportunity.report.view.pivot.lead | crm.lead | pivot | New |
crm_opportunity_report_view_search |
crm.lead.search | crm.lead | search | New |
crm_recurring_plan_view_search |
crm.recurring.plan.view.search | crm.recurring.plan | search | New |
crm_recurring_plan_view_tree |
crm.recurring.plan.view.list | crm.recurring.plan | list | New |
crm_stage_form |
crm.stage.form | crm.stage | form | New |
crm_stage_tree |
crm.stage.list | crm.stage | list | New |
crm_team_member_view_form |
crm.team.member.view.form.inherit.crm | crm.team.member | form | Inherits sales_team.crm_team_member_view_form |
crm_team_member_view_kanban |
crm.team.member.view.kanban.inherit.crm | crm.team.member | kanban | Inherits sales_team.crm_team_member_view_kanban |
crm_team_member_view_tree |
crm.team.member.view.list | crm.team.member | list | Inherits sales_team.crm_team_member_view_tree |
crm_team_view_kanban_dashboard |
crm.team.view.kanban.dashboard.inherit.crm | crm.team | kanban | Inherits sales_team.crm_team_view_kanban_dashboard |
crm_team_view_tree |
crm.team.list.inherit.crm | crm.team | list | Inherits sales_team.crm_team_view_tree |
digest_digest_view_form |
digest.digest.view.form.inherit.crm.lead | digest.digest | form | Inherits digest.digest_digest_view_form |
merge_opportunity_form |
crm.merge.opportunity.form | crm.merge.opportunity | form | New |
quick_create_opportunity_form |
crm.lead.form.quick_create | crm.lead | form | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.crm | res.config.settings | form | Inherits base.res_config_settings_view_form |
sales_team_form_view_in_crm |
crm.team.form.inherit | crm.team | form | Inherits sales_team.crm_team_view_form |
utm_campaign_view_form |
utm.campaign.view.form | utm.campaign | form | Inherits utm.utm_campaign_view_form |
utm_campaign_view_kanban |
utm.campaign.view.kanban | utm.campaign | kanban | Inherits utm.utm_campaign_view_kanban |
view_crm_case_leads_filter |
crm.lead.search.lead | crm.lead | search | New |
view_crm_case_my_activities_filter |
crm.lead.search.myactivities | crm.lead | search | Inherits crm.view_crm_case_leads_filter |
view_crm_case_opportunities_filter |
crm.lead.search.opportunity | crm.lead | search | New |
view_crm_lead2opportunity_partner_mass |
crm.lead2opportunity.partner.mass.form | crm.lead2opportunity.partner.mass | form | New |
view_crm_lead_kanban |
crm.lead.kanban | crm.lead | kanban | New |
view_crm_meeting_search |
calendar.event.form.inherit | calendar.event | form | Inherits calendar.view_calendar_event_search |
view_partners_form_crm1 |
view.res.partner.form.crm.inherited1 | res.partner | form | Inherits base.view_partner_form |
HTTP endpoints (3)
| Route(s) | Handler | Auth | Type | Methods | Flags |
|---|---|---|---|---|---|
/lead/case_mark_lost |
CrmController.crm_lead_case_mark_lost |
user | http | GET | |
/lead/case_mark_won |
CrmController.crm_lead_case_mark_won |
user | http | GET | |
/lead/convert |
CrmController.crm_lead_convert |
user | http | GET |
Models touched (23)
New fields (1)
-
opportunity_idMany2one → crm.leaddomain="[('type', '=', 'opportunity')]"index=Trueondelete='set null' args: 'crm.lead', 'Opportunity'
-
create(self, vals_list)@api.model_create_multi -
default_get(self, fields)@api.model
New fields (20)
-
activeBooleanreadonly=True args: 'Active' -
author_idMany2one → res.partnerreadonly=True args: 'res.partner', 'Assigned To' -
bodyHtmlreadonly=True args: 'Activity Description' -
company_idMany2one → res.companyreadonly=True args: 'res.company', 'Company' -
country_idMany2one → res.countryreadonly=True args: 'res.country', 'Country' -
dateDatetimereadonly=True args: 'Completion Date' -
date_closedDatetimereadonly=True args: 'Closed Date' -
date_conversionDatetimereadonly=True args: 'Conversion Date' -
date_deadlineDatereadonly=True args: 'Expected Closing' -
lead_create_dateDatetimereadonly=True args: 'Creation Date' -
lead_idMany2one → crm.leadreadonly=True args: 'crm.lead', 'Opportunity' -
lead_typeSelectionhelp='Type is used to separate Leads and Opportunities'selection=[('lead', 'Lead'), ('opportunity', 'Opportunity')]string='Type' -
mail_activity_type_idMany2one → mail.activity.typereadonly=True args: 'mail.activity.type', 'Activity Type' -
partner_idMany2one → res.partnerreadonly=True args: 'res.partner', 'Customer' -
stage_idMany2one → crm.stagereadonly=True args: 'crm.stage', 'Stage' -
subtype_idMany2one → mail.message.subtypereadonly=True args: 'mail.message.subtype', 'Subtype' -
tag_idsMany2manyreadonly=Truerelated='lead_id.tag_ids' -
team_idMany2one → crm.teamreadonly=True args: 'crm.team', 'Sales Team' -
user_idMany2one → res.usersreadonly=True args: 'res.users', 'Salesperson' -
won_statusSelectionreadonly=Truestring='Is Won' args: [('won', 'Won'), ('lost', 'Lost'), ('pending', 'Pending')]
-
action_open_lead(self) -
init(self)
New fields (67)
-
activeBooleandefault=Truetracking=72 args: 'Active' -
automated_probabilityFloatcompute='_compute_probabilities'readonly=Truestore=True args: 'Automated Probability' -
calendar_event_idsOne2many → calendar.eventstring='Meetings' args: 'calendar.event', 'opportunity_id' -
campaign_idMany2oneondelete='set null' -
cityCharcompute='_compute_partner_address_values'readonly=Falsestore=Truetracking=63 args: 'City' -
colorIntegerdefault=0 args: 'Color Index' -
company_currencyMany2one → res.currencycompute='_compute_company_currency'compute_sql='_compute_sql_company_currency'compute_sudo=Truestring='Currency' args: 'res.currency' -
company_idMany2one → res.companycompute='_compute_company_id'index=Truereadonly=Falsestore=Truestring='Company' args: 'res.company' -
contact_nameCharcompute='_compute_contact_name'index='trigram'readonly=Falsestore=Truetracking=30 args: 'Contact Name' -
country_idMany2one → res.countrycompute='_compute_partner_address_values'index=Truereadonly=Falsestore=Truestring='Country'tracking=65 args: 'res.country' -
date_automation_lastDatetimereadonly=True args: 'Last Action' -
date_closedDatetimecopy=Falsereadonly=True args: 'Closed Date' -
date_conversionDatetimereadonly=True args: 'Conversion Date' -
date_deadlineDatehelp='Estimate of the date on which the opportunity will be won.' args: 'Expected Closing' -
date_last_stage_updateDatetimecompute='_compute_date_last_stage_update'index=Truereadonly=Truestore=True args: 'Last Stage Update' -
date_openDatetimecompute='_compute_date_open'readonly=Truestore=True args: 'Assignment Date' -
day_closeFloatcompute='_compute_day_close'store=True args: 'Days to Close' -
day_openFloatcompute='_compute_day_open'store=True args: 'Days to Assign' -
descriptionHtmlargs: 'Notes' -
duplicate_lead_countIntegercompute='_compute_potential_lead_duplicates'compute_sudo=Truestring='Potential Duplicate Lead Count' -
duplicate_lead_idsMany2many → crm.leadcompute='_compute_potential_lead_duplicates'compute_sudo=Truecontext={'active_test': False}string='Potential Duplicate Lead' args: 'crm.lead' -
email_domain_criterionCharcompute='_compute_email_domain_criterion'index='btree_not_null'store=Truestring='Email Domain Criterion' -
email_fromCharcompute='_compute_email_from'index='trigram'inverse='_inverse_email_from'readonly=Falsestore=Truetracking=40 args: 'Email' -
email_normalizedCharindex='trigram' -
email_stateSelectioncompute='_compute_email_state'store=Truestring='Email Quality' args: [('correct', 'Correct'), ('incorrect', 'Incorrect')] -
expected_revenueMonetarycurrency_field='company_currency'default=0.0tracking=True args: 'Expected Revenue' -
functionCharcompute='_compute_function'readonly=Falsestore=Truetracking=55 args: 'Job Position' -
is_automated_probabilityBooleancompute='_compute_is_automated_probability' args: 'Is automated probability?' -
lang_active_countIntegercompute='_compute_lang_active_count' -
lang_codeCharrelated='lang_id.code' -
lang_idMany2one → res.langcompute='_compute_lang_id'index=Truereadonly=Falsestore=Truestring='Language' args: 'res.lang' -
lead_propertiesPropertiescopy=Truedefinition='team_id.lead_properties_definition' args: 'Properties' -
lost_reason_idMany2one → crm.lost.reasonindex=Trueondelete='restrict'string='Lost Reason'tracking=71 args: 'crm.lost.reason' -
medium_idMany2oneondelete='set null' -
meeting_display_dateDatecompute='_compute_meeting_display' -
meeting_display_labelCharcompute='_compute_meeting_display' -
nameCharcompute='_compute_name'index='trigram'readonly=Falserequired=Truestore=True args: 'Opportunity' -
partner_email_updateBooleancompute='_compute_partner_email_update' args: 'Partner Email will Update' -
partner_idMany2one → res.partnercheck_company=Truehelp='Linked partner (optional). Usually created when converting the lead. You can find a partner by its Name, TIN, Email or Internal Reference.'index=Truestring='Contact'tracking=10 args: 'res.partner' -
partner_is_blacklistedBooleanreadonly=Truerelated='partner_id.is_blacklisted' args: 'Partner is blacklisted' -
partner_nameCharcompute='_compute_partner_name'help='The name of the future partner company that will be created while converting the lead into opportunity'index='trigram'readonly=Falsestore=Truetracking=20 args: 'Company Name' -
partner_phone_updateBooleancompute='_compute_partner_phone_update' args: 'Partner Phone will Update' -
phoneCharcompute='_compute_phone'inverse='_inverse_phone'readonly=Falsestore=Truetracking=50 args: 'Phone' -
phone_sanitizedCharindex='btree_not_null' -
phone_stateSelectioncompute='_compute_phone_state'store=Truestring='Phone Quality' args: [('correct', 'Correct'), ('incorrect', 'Incorrect')] -
prioritySelectiondefault=<expr>index=Truestring='Priority' args: crm_stage.AVAILABLE_PRIORITIES -
probabilityFloataggregator='avg'compute='_compute_probabilities'copy=Falsereadonly=Falsestore=True args: 'Probability' -
prorated_revenueMonetarycompute='_compute_prorated_revenue'currency_field='company_currency'store=True args: 'Prorated Revenue' -
recurring_planMany2one → crm.recurring.planindex='btree_not_null'string='Recurring Plan' args: 'crm.recurring.plan' -
recurring_revenueMonetarycurrency_field='company_currency'default=0.0tracking=True args: 'Recurring Revenues' -
recurring_revenue_monthlyMonetarycompute='_compute_recurring_revenue_monthly'currency_field='company_currency'store=True args: 'Expected MRR' -
recurring_revenue_monthly_proratedMonetarycompute='_compute_recurring_revenue_monthly_prorated'currency_field='company_currency'store=True args: 'Prorated MRR' -
recurring_revenue_proratedMonetarycompute='_compute_recurring_revenue_prorated'currency_field='company_currency'store=True args: 'Prorated Recurring Revenues' -
referredCharargs: 'Referred By' -
source_idMany2oneondelete='set null' -
stage_idMany2one → crm.stagecompute='_compute_stage_id'copy=Falsedomain="['|', ('team_ids', '=', False), ('team_ids', 'in', team_id)]"group_expand='_read_group_stage_ids'index=Trueondelete='restrict'readonly=Falsestore=Truestring='Stage'tracking=True args: 'crm.stage' -
state_idMany2one → res.country.statecompute='_compute_partner_address_values'domain="[('country_id', '=?', country_id)]"readonly=Falsestore=Truestring='State'tracking=64 args: 'res.country.state' -
streetCharcompute='_compute_partner_address_values'readonly=Falsestore=Truetracking=60 args: 'Street' -
street2Charcompute='_compute_partner_address_values'readonly=Falsestore=Truetracking=61 args: 'Street2' -
tag_idsMany2many → crm.taghelp='Classify and analyze your lead/opportunity categories like: Training, Service'string='Tags' args: 'crm.tag', 'crm_tag_rel', 'lead_id', 'tag_id' -
team_idMany2one → crm.teamcheck_company=Truecompute='_compute_team_id'index=Trueondelete='set null'precompute=Truereadonly=Falsestore=Truestring='Sales Team'tracking=True args: 'crm.team' -
typeSelectiondefault=<expr>index=Truerequired=Truetracking=15 args: [('lead', 'Lead'), ('opportunity', 'Opportunity')] -
user_company_idsMany2many → res.companycompute='_compute_user_company_ids'help='UX: Limit to lead company or all if no company' args: 'res.company' -
user_idMany2one → res.userscheck_company=Truedefault=<expr>domain="[('share', '=', False)]"index=Truestring='Salesperson'tracking=True args: 'res.users' -
websiteCharcompute='_compute_website'help='Website of the contact'readonly=Falsestore=Truetracking=35 args: 'Website' -
won_statusSelectioncompute='_compute_won_status'store=Truestring='Won/Lost'tracking=70 args: [('won', 'Won'), ('lost', 'Lost'), ('pending', 'Pending')] -
zipCharchange_default=Truecompute='_compute_partner_address_values'readonly=Falsestore=Truetracking=62 args: 'Zip'
-
action_convert_to_opportunity(self) -
action_reschedule_meeting(self) -
action_restore(self)Restoring a lost lead means that it should go back to its normal life cycle. This should reactivate the lead but also force the recompute of its probability, for the stage where the lead is currently at. During toggle_active, when reactivating a lost lead,only the automated probability will be recomputed, because the probability is not automated anymore. Restore will reset this automation. -
action_schedule_meeting(self, smart_calendar=True)Open meeting's calendar view to schedule meeting on current opportunity. :param bool smart_calendar: to set to False if the view should not try to choose relevant mode and initial date for calendar view, see ``_get_opportunity_meeting_view_parameters`` :returns: dictionary value for created Meeting view :rtype: dict -
action_set_automated_probability(self)Update the automated probability and align probability to that value -
action_set_lost(self, **additional_values)Lost semantic: probability = 0 AND active = False -
action_set_won(self)Won semantic: stage.is_won (AND probability = 100 but implied) -
action_set_won_rainbowman(self) -
action_show_potential_duplicates(self)Open kanban view to display duplicate leads or opportunity. :return dict: dictionary value for created kanban view -
action_unarchive(self)When re-activating, force update probability for both leads and opportunities. Note that archiving triggers nothing more, as a lead can be archived and not lost. -
convert_opportunity(self, partner, user_ids=False, team_id=False) -
copy_data(self, default=None) -
create(self, vals_list)@api.model_create_multi -
get_empty_list_help(self, help_message)@api.modelCustomize the help message to mention team membership or available alias. When all the conditions below are met, the returned message will invite users to join a team. Sales Managers will also be given a link to the teams' configuration so they can immediately join one on their own. * There are crm teams in the db, * The user is not a member of any team, and * The passed `help_message` is empty, or the context key `crm_lead_prioritize_team_help` is truthy Otherwise, * Passed non-empty `help_message` is returned as-is, * When `help_message` is empty, a simple message mentioning leads or opportunities based on the context's `default_type` is generated. Additionally, the generated message returned will mention the possibility to create records via an alias if there is one set. -
get_import_templates(self)@api.model -
get_rainbowman_message(self) -
log_meeting(self, meeting)Log the meeting info with a link to it in the chatter :param record meeting: the meeting we want to log -
merge_opportunity(self, user_id=False, team_id=False, auto_unlink=True)Merge opportunities in one. Different cases of merge: - merge leads together = 1 new lead - merge at least 1 opp with anything else (lead or opp) = 1 new opp The resulting lead/opportunity will be the most important one (based on its confidence level) updated with values from other opportunities to merge. :param user_id: the id of the saleperson. If not given, will be determined by :meth:`_merge_data`. :param team_id: the id of the Sales Team. If not given, will be determined by :meth:`_merge_data`. :returns: crm.lead record resulting of th merge -
message_new(self, msg_dict, custom_values=None)@api.model -
prepare_pls_tooltip_data(self)Compute and return all necessary information to render CrmPlsTooltip, displayed when pressing the small AI button, located next to the label of probability when automated, in the crm.lead form view. This method first replaces ids with display names of relational fields before returning data, then also recomputes probabilities and writes them on self. :returns: :: { low_3_data: list of field-value couples for lowest 3 criterions, lowest first probability: numerical value, used for display on tooltip team_name: string, name of lead team if any top_3_data: list of field-value couples for top 3 criterions, highest first } :rtype: dict -
redirect_lead_opportunity_view(self) -
search_fetch(self, domain, field_names=None, offset=0, limit=None, order=None)@api.modelOverride to support ordering on my_activity_date_deadline. Ordering through web client calls search_read() with an order parameter set. Method search_read() then calls search_fetch(). Here we override search_fetch() to intercept a search with an order on field my_activity_date_deadline. In that case we do the search in two steps. First step: fill with deadline-based results * Perform a read_group on my activities to get a mapping lead_id / deadline Remember date_deadline is required, we always have a value for it. Only the earliest deadline per lead is kept. * Search leads linked to those activities that also match the asked domain and order from the original search request. * Results of that search will be at the top of returned results. Use limit None because we have to search all leads linked to activities as ordering on deadline is done in post processing. * Reorder them according to deadline asc or desc depending on original search ordering. Finally take only a subset of those leads to fill with results matching asked offset / limit. Second step: fill with other results. If first step does not gives results enough to match offset and limit parameters we fill with a search on other leads. We keep the asked domain and ordering while filtering out already scanned leads to keep a coherent results. All other search and search_read are left untouched by this override to avoid side effects. Search_count is not affected by this override. -
unlink(self)Update meetings when removing opportunities, otherwise you have a link to a record that does not lead anywhere. -
write(self, vals)
New fields (3)
-
lead_idsMany2many → crm.leadcontext={'active_test': False}string='Leads' args: 'crm.lead' -
lost_feedbackHtmlsanitize=True args: 'Closing Note' -
lost_reason_idMany2one → crm.lost.reasonargs: 'crm.lost.reason', 'Lost Reason'
-
action_lost_reason_apply(self)Mark lead as lost and apply the loss reason
New fields (2)
-
pls_fieldsMany2many → crm.lead.scoring.frequency.fielddefault=_get_default_pls_fields args: 'crm.lead.scoring.frequency.field' -
pls_start_dateDatedefault=_get_default_pls_start_daterequired=True
-
action_update_crm_lead_probabilities(self)
New fields (5)
-
lost_countFloatdigits=(16, 1) args: 'Lost Count' -
team_idMany2one → crm.teamondelete='cascade' args: 'crm.team', 'Sales Team' -
valueCharargs: 'Value' -
variableCharindex=True args: 'Variable' -
won_countFloatdigits=(16, 1) args: 'Won Count'
No public methods.
New fields (3)
-
colorIntegerdefault=_get_default_color args: 'Color' -
field_idMany2one → ir.model.fieldsdomain=[('model_id.model', '=', 'crm.lead')]ondelete='cascade'required=True args: 'ir.model.fields' -
nameCharrelated='field_id.field_description'
No public methods.
New fields (8)
-
duplicated_lead_idsMany2many → crm.leadcompute='_compute_duplicated_lead_ids'compute_sudo=Falsecontext={'active_test': False}readonly=Falsestore=True args: 'crm.lead' -
duplicated_lead_ids_domainMany2many → crm.leadcompute='_compute_duplicated_lead_ids'compute_sudo=Falsecontext={'active_test': False}store=True args: 'crm.lead', 'crm_lead_duplicate_domain_rel' -
force_assignmentBooleanargs: 'Even if assigned' -
lead_tomerge_idsMany2many → crm.leadcontext={'active_test': False}default=<expr>string='Active Leads' args: 'crm.lead', 'crm_convert_lead_mass_lead_rel' -
link_to_matching_customerBooleanhelp='Link these opportunities to customers by either finding a match or creating a new one.'string='Link to matching customers' -
nameSelectiondefault='convert'readonly=Falserequired=True args: [('convert', 'Convert to Opportunities'), ('convert_and_merge', 'Convert & Merge with Opportunities')], 'Conversion Action' -
team_idMany2one → crm.teamcompute='_compute_team_id'compute_sudo=Falsereadonly=Falsestore=True args: 'crm.team', 'Sales Team' -
user_idsMany2many → res.usersstring='Salespersons' args: 'res.users'
-
action_apply(self)
New fields (3)
-
activeBooleandefault=True args: 'Active' -
leads_countIntegercompute='_compute_leads_count' args: 'Leads Count' -
nameCharrequired=Truetranslate=True args: 'Description'
-
action_lost_leads(self)
New fields (3)
-
opportunity_idsMany2many → crm.leadcontext={'active_test': False}string='Leads/Opportunities' args: 'crm.lead', 'merge_opportunity_rel', 'merge_id', 'opportunity_id' -
team_idMany2one → crm.teamcompute='_compute_team_id'readonly=Falsestore=True args: 'crm.team', 'Sales Team' -
user_idMany2one → res.userscompute='_compute_user_id'domain="[('share', '=', False)]"readonly=Falsestore=True args: 'res.users', 'Salesperson'
-
action_merge(self) -
default_get(self, fields)@api.modelUse active_ids from the context to fetch the leads/opps to merge. In order to get merged, these leads/opps cannot be already 'Won' (closed)
New fields (4)
-
activeBooleandefault=True args: 'Active' -
nameCharrequired=Truetranslate=True args: 'Plan Name' -
number_of_monthsIntegerrequired=True args: '# Months' -
sequenceIntegerdefault=10 args: 'Sequence'
No public methods.
New fields (8)
-
foldBooleanhelp='This stage is folded in the kanban view when there are no records in that stage to display.' args: 'Folded in Pipeline' -
is_wonBooleanargs: 'Is Won Stage?' -
nameCharrequired=Truetranslate=True args: 'Stage Name' -
requirementsTexthelp="Enter here the internal requirements for this stage (ex: Offer sent to customer). It will appear as a tooltip over the stage's name." args: 'Requirements' -
rotting_threshold_daysIntegerdefault=0help="Highlight opportunities that haven't been updated for this many days. Set to 0 to disable. Changing this parameter will not affect the rotting status/date of resources last updated before this change." args: 'Days to rot' -
sequenceIntegerdefault=1help='Used to order stages. Lower is better.' args: 'Sequence' -
team_countIntegercompute='_compute_team_count' args: 'team_count' -
team_idsMany2many → crm.teamondelete='restrict'string='Sales Teams' args: 'crm.team'
-
write(self, vals)Since leads that are in a won stage must have their probability = 100%, this override ensures that setting a stage as won will set all the leads in that stage to probability = 100%. Inversely, if a won stage is not marked as won anymore, the lead probability should be recomputed based on automated probability. Note: If a user sets a stage as won and changes his mind right after, the manual probability will be lost in the process.
New fields (15)
-
alias_full_nameCharrelated='alias_id.alias_full_name' -
alias_idMany2onehelp='The email address associated with this channel. New emails received will automatically create new leads assigned to the channel.' -
assignment_auto_enabledBooleancompute='_compute_assignment_enabled' args: 'Auto Assignment' -
assignment_domainCharhelp='Additional filter domain when fetching unassigned leads to allocate to the team.'tracking=True args: 'Assignment Domain' -
assignment_enabledBooleancompute='_compute_assignment_enabled' args: 'Lead Assign' -
assignment_maxIntegercompute='_compute_assignment_max'help='Monthly average leads capacity for all salesmen belonging to the team' args: 'Lead Average Capacity' -
assignment_optoutBooleanargs: 'Pause auto assignment' -
lead_all_assigned_month_countIntegercompute='_compute_lead_all_assigned_month_count'help='Number of leads and opportunities assigned this last month.'string='# Leads/Opps assigned this month' -
lead_all_assigned_month_exceededBooleancompute='_compute_lead_all_assigned_month_count'help='True if the monthly lead assignment count is greater than the maximum assignment limit, false otherwise.' args: 'Maximum Leads To Assign' -
lead_properties_definitionPropertiesDefinitionargs: 'Lead Properties' -
lead_unassigned_countIntegercompute='_compute_lead_unassigned_count'string='# Unassigned Leads' -
opportunity_countIntegercompute='_compute_opportunity_count'string='Number of assigned opportunities' -
show_assignment_maxBooleancompute='_compute_show_assignment_max' -
use_leadsBooleanhelp='Check this box to filter and qualify incoming requests as leads before converting them into opportunities and assigning them to a salesperson.' args: 'Leads' -
use_opportunitiesBooleandefault=Truehelp='Check this box to manage a presales process with opportunities.' args: 'Pipeline'
-
action_assign_leads(self)Manual (direct) leads assignment. This method both * assigns leads to teams given by self; * assigns leads to salespersons belonging to self; See sub methods for more details about assign process. :returns: action, a client notification giving some insights on assign process; -
action_open_opportunities(self) -
action_open_unassigned_opportunities(self)Open opportunities action without the opportunity domain as users want to see anything unassigned. -
action_primary_channel_button(self) -
get_team_switcher_data(self)@api.modelRetrieves the data for the team switcher. The switcher only considers teams using opportunities. :returns: A dictionary with: - "available": Whether or not the team switcher is available for display. There needs to be at least 2 teams using opportunities in DB, regardless of the current user's own access. - "teams": A list of dictionaries containing the data of the teams to be displayed in the switcher. Limited to own teams if the current user doesn't have "User: All Documents" access. Can be empty even when "available" is True, in this case only "All Teams" will be visible. -
unlink(self)When unlinking, concatenate ``crm.lead.scoring.frequency`` linked to the team into "no team" statistics. -
write(self, vals)
New fields (7)
-
assignment_domainChartracking=True args: 'Assignment Domain' -
assignment_domain_preferredChartracking=True args: 'Preference assignment Domain' -
assignment_enabledBooleanrelated='crm_team_id.assignment_enabled' -
assignment_maxIntegerdefault=MEMBER_MAX_LEAD_ASSIGNMENT_QUOTA args: 'Average Leads Capacity (on 30 days)' -
assignment_rulesSelectioncompute='_compute_assignment_rules'readonly=Falsestore=Falsestring='Auto-Assignment Rules' args: [('unlimited', 'Always in rotation'), ('limited', 'In rotation, with a limit'), ('opt-out', 'Out of rotation')] -
lead_day_countIntegercompute='_compute_lead_day_count'help='Number of leads assigned to this member in the last 24 hours (lost leads excluded)' args: 'Leads (last 24h)' -
lead_month_countIntegercompute='_compute_lead_month_count'help='Number of leads assigned to this member in the last 30 days' args: 'Leads (30 days)'
No public methods.
New fields (4)
-
kpi_crm_lead_createdBooleanargs: 'New Leads' -
kpi_crm_lead_created_valueIntegercompute='_compute_kpi_crm_lead_created_value' -
kpi_crm_opportunities_wonBooleanargs: 'Opportunities Won' -
kpi_crm_opportunities_won_valueIntegercompute='_compute_kpi_crm_opportunities_won_value'
No public methods.
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (0)
No new fields.
Public methods (3)-
create(self, vals_list)@api.model_create_multi -
unlink(self) -
write(self, vals)
New fields (0)
No new fields.
Public methods (1)-
action_create_calendar_event(self)Small override of the action that creates a calendar. If the activity is linked to a crm.lead through the "opportunity_id" field, we include in the action context the default values used when scheduling a meeting from the crm.lead form view. e.g: It will set the partner_id of the crm.lead as default attendee of the meeting.
New fields (20)
-
crm_auto_assignment_actionSelectioncompute='_compute_crm_auto_assignment_data'help='Manual assign allow to trigger assignment from team form view using an action button. Automatic configures a cron running repeatedly assignment in all teams.'readonly=Falsestore=Truestring='Auto Assignment Action' args: [('manual', 'Manually'), ('auto', 'Repeatedly')] -
crm_auto_assignment_interval_numberIntegercompute='_compute_crm_auto_assignment_data'help='Number of interval type between each cron run (e.g. each 2 days or each 4 days)'readonly=Falsestore=Truestring='Repeat every' -
crm_auto_assignment_interval_typeSelectioncompute='_compute_crm_auto_assignment_data'help='Interval type between each cron run (e.g. each 2 days or each 2 hours)'readonly=Falsestore=Truestring='Auto Assignment Interval Unit' args: [('minutes', 'Minutes'), ('hours', 'Hours'), ('days', 'Days'), ('weeks', 'Weeks')] -
crm_auto_assignment_run_datetimeDatetimecompute='_compute_crm_auto_assignment_data'readonly=Falsestore=Truestring='Auto Assignment Next Execution Date' -
crm_use_auto_assignmentBooleanconfig_parameter='crm.lead.auto.assignment'string='Rule-Based Assignment' -
group_use_leadBooleanimplied_group='crm.group_use_lead'string='Leads' -
group_use_recurring_revenuesBooleanimplied_group='crm.group_use_recurring_revenues'string='Recurring Revenues' -
is_membership_multiBooleanconfig_parameter='sales_team.membership_multi'string='Multi Teams' -
lead_enrich_autoSelectionconfig_parameter='crm.iap.lead.enrich.setting'default='auto'string='Enrich lead automatically' args: [('manual', 'Enrich leads on demand only'), ('auto', 'Enrich all leads automatically')] -
lead_mining_in_pipelineBooleanconfig_parameter='crm.lead_mining_in_pipeline' args: 'Create a lead mining request directly from the opportunity pipeline.' -
module_crm_iap_enrichBooleanargs: 'Enrich your leads automatically with company data based on their email address.' -
module_crm_iap_mineBooleanargs: 'Generate new leads based on their country, industries, size, etc.' -
module_partnershipBooleanargs: 'Membership / Partnership' -
module_website_crm_iap_revealBooleanargs: "Create Leads/Opportunities from your website's traffic" -
module_website_partnershipBooleanargs: 'Partners Website Page' -
predictive_lead_scoring_field_labelsCharcompute='_compute_predictive_lead_scoring_field_labels' -
predictive_lead_scoring_fieldsMany2many → crm.lead.scoring.frequency.fieldcompute='_compute_pls_fields'inverse='_inverse_pls_fields_str'string='Lead Scoring Frequency Fields' args: 'crm.lead.scoring.frequency.field' -
predictive_lead_scoring_fields_strCharconfig_parameter='crm.pls_fields'string='Lead Scoring Frequency Fields in String' -
predictive_lead_scoring_start_dateDatecompute='_compute_pls_start_date'inverse='_inverse_pls_start_date_str'string='Lead Scoring Starting Date' -
predictive_lead_scoring_start_date_strCharconfig_parameter='crm.pls_start_date'string='Lead Scoring Starting Date in String'
-
action_crm_assign_leads(self) -
set_values(self)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (2)
-
opportunity_countIntegercompute='_compute_opportunity_count'groups='sales_team.group_sale_salesman'string='Opportunity Count' -
opportunity_idsOne2many → crm.leaddomain=[('type', '=', 'opportunity')]string='Opportunities' args: 'crm.lead', 'partner_id'
-
action_view_opportunity(self)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (2)
-
crm_lead_countIntegercompute='_compute_crm_lead_count'groups='sales_team.group_sale_salesman' args: 'Leads/Opportunities count' -
use_leadsBooleancompute='_compute_use_leads' args: 'Use Leads'
-
action_redirect_to_leads_opportunities(self)
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…