TIP: You can type at any time to perform a new search.

Security findings

Repository
odoo/odoo · module folder
Module version
3.0
Category
Sales/Sales
Folder size
3.12 MB
License
LGPL-3
Application
No
Auto-installable
Yes
Website
None
Last tracking update
2026-10-05 00:19:51
Authors
Odoo S.A.
Maintainers
Odoo S.A.
Committers
Raphael Collet, Thibault Delavallée, Odoo Translation Bot, Géry Debongnie, Lucas Perais (lpe), Julien Castiaux, Xavier-Do, Romeo Fragomeli, Victor Feyens, Adrien Dieudonné, Sébastien Theys, Julien Mougenot, std-odoo, Tiffany Chang (tic), Louis Baudoux, luvi, tsm-odoo, David, amdi-odoo, Pierre-Yves Dufays, Dylan Kiss (dyki), Chong Wang (cwg), aktr-odoo, Alex Kühn, Mohammed Basioni, Ricardo Gomes Rodrigues, Corentin Heinix (cohe), Krzysztof Magusiak (krma), igbe, Julien Launois (jula), ELCO, jsum-odoo, chpa-odoo, Joseph Nechleba (jonec), Julien Piron, Jean Schoenlaub, Dario Liotta (dalio)
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
base_automation, calendar_sms, crm_sms, event_sms, hr_presence, hr_recruitment_sms, mail_tracking_sms, mass_mailing_event_sms, mass_mailing_event_track_sms, mass_mailing_sms, pos_sms, project_sms, sale_sms, sms_twilio, stock_sms, test_mail_full, test_mail_sms, website_sms
Description
This module gives a framework for SMS text messaging
----------------------------------------------------

The service is provided by the In App Purchase Odoo platform.

Code Analysis info_outline

Views touched (19)
XML IDNameModelTypeStatus
iap_account_view_form iap.account.view.form iap.account form Inherits iap.iap_account_view_form
ir_actions_server_view_form ir.actions.server.view.form.inherit.sms ir.actions.server form Inherits base.view_server_action_form
mail_notification_view_form mail.notification.view.form mail.notification form Inherits mail.mail_notification_view_form
mail_notification_view_tree mail.notification.view.list mail.notification list Inherits mail.mail_notification_view_tree
res_config_settings_view_form res.config.settings.view.form.inherit.sms res.config.settings form Inherits base_setup.res_config_settings_view_form
res_partner_view_form res.partner.view.form.inherit.sms res.partner form Inherits base.view_partner_form
sms_account_code_view_form sms.account.code.view.form sms.account.code form New
sms_account_phone_view_form sms.account.phone.view.form sms.account.phone form New
sms_account_sender_view_form sms.account.sender.view.form sms.account.sender form New
sms_composer_view_form sms.composer.view.form sms.composer form New
sms_composer_view_form_template_save sms.composer.view.form.template.save sms.composer form New
sms_sms_view_search sms.sms.view.search sms.sms search New
sms_sms_view_tree sms.sms.view.list sms.sms list New
sms_template_preview_form sms.template.preview.form sms.template.preview form New
sms_template_reset_view_form sms.template.reset.view.form sms.template.reset form New
sms_template_view_form sms.template.view.form sms.template form New
sms_template_view_search sms.template.view.search sms.template search New
sms_template_view_tree sms.template.view.list sms.template list New
sms_tsms_view_form sms.sms.view.form sms.sms form New
HTTP endpoints (1)
Route(s)HandlerAuthTypeMethodsFlags
/sms/status SmsController.update_sms_status public jsonrpc ALL sudo
Models touched (18)

New fields (1)
  • sender_name Char
    help='This is the name that will be displayed as the sender of the SMS.' readonly=True
Public methods (2)
  • action_open_registration_wizard(self)
  • action_open_sender_name_wizard(self)

New fields (2)
  • sms_template_id Many2one → sms.template
    compute='_compute_sms_template_id' domain="[('model_id', '=', model_id)]" ondelete='set null' readonly=False store=True args: 'sms.template', 'SMS Template'
  • state Selection
    ondelete={'sms': 'cascade'} selection_add=[('log_note'), ('sms', 'Send SMS')]
Public methods (0)

No public methods.

New fields (1)
  • is_mail_thread_sms Boolean
    compute='_compute_is_mail_thread_sms' default=False help='Whether this model supports messages and notifications through SMS' search='_search_is_mail_thread_sms' store=False string='Mail Thread SMS'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • has_sms_error Boolean
    compute='_compute_has_sms_error' search='_search_has_sms_error' args: 'Has SMS error'
  • message_type Selection
    ondelete={'sms': <expr>} selection_add=[('sms', 'SMS')]
Public methods (0)

No public methods.

New fields (6)
  • failure_type Selection
    selection_add=[('sms_number_missing', 'Missing Number'), ('sms_number_format', 'Wrong Number Format'), ('sms_credit', 'Insufficient Credit'), ('sms_country_not_supported', 'Country Not Supported'), ('sms_registration_needed', 'Country-specific Registration Required'), ('sms_database_non_active', 'Database non active'), ('sms_server', 'Server Error'), ('sms_acc', 'Unregistered Account'), ('sms_expired', 'Expired'), ('sms_invalid_destination', 'Invalid Destination'), ('sms_not_allowed', 'Not Allowed'), ('sms_not_delivered', 'Not Delivered'), ('sms_rejected', 'Rejected')]
  • notification_type Selection
    ondelete={'sms': 'cascade'} selection_add=[('sms', 'SMS')]
  • sms_id Many2one → sms.sms
    compute='_compute_sms_id' store=False string='SMS' args: 'sms.sms'
  • sms_id_int Integer
    index='btree_not_null' args: 'SMS ID'
  • sms_number Char
    groups='base.group_user' args: 'SMS Number'
  • sms_tracker_ids One2many → sms.tracker
    string='SMS Trackers' args: 'sms.tracker', 'mail_notification_id'
Public methods (0)

No public methods.

New fields (1)
  • send_method Selection
    default='email' required=True selection=[('email', 'Email'), ('sms', 'SMS')] string='Send Method'
Public methods (1)
  • open_edit_form(self)

New fields (1)
  • message_has_sms_error Boolean
    compute='_compute_message_has_sms_error' help='If checked, some messages have a delivery error.' search='_search_message_has_sms_error' args: 'SMS Delivery error'
Public methods (2)
  • message_post(self, *args, body='', message_type='notification', **kwargs)
  • notify_cancel_by_type(self, notification_type)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • account_id Many2one → iap.account
    required=True args: 'iap.account'
  • verification_code Char
    required=True
Public methods (1)
  • action_register(self)

New fields (2)
  • account_id Many2one → iap.account
    required=True args: 'iap.account'
  • phone_number Char
    required=True
Public methods (1)
  • action_send_verification_code(self)

New fields (2)
  • account_id Many2one → iap.account
    required=True args: 'iap.account'
  • sender_name Char
Public methods (1)
  • action_set_sender_name(self)

New fields (25)
  • body Text
    compute='_compute_body' precompute=True readonly=False required=True store=True args: 'Message'
  • comment_single_recipient Boolean
    compute='_compute_comment_single_recipient' compute_sudo=False help='Indicates if the SMS composer targets a single specific recipient' args: 'Single Mode'
  • composition_mode Selection
    compute='_compute_composition_mode' precompute=True readonly=False required=True store=True string='Composition Mode' args: [('numbers', 'Send to numbers'), ('comment', 'Post on a document'), ('mass', 'Send SMS in batch')]
  • mail_scheduled_message_id Many2one → mail.scheduled.message
    string='Scheduled Message' args: 'mail.scheduled.message'
  • mass_force_send Boolean
    default=False args: 'Send directly'
  • mass_keep_log Boolean
    default=True args: 'Keep a note on document'
  • number_field_name Char
    args: 'Number Field'
  • numbers Char
    args: 'Recipients (Numbers)'
  • recipient_invalid_count Integer
    compute='_compute_recipients' compute_sudo=False args: '# Invalid recipients'
  • recipient_single_description Text
    compute='_compute_recipient_single_non_stored' compute_sudo=False args: 'Recipients (Partners)'
  • recipient_single_number Char
    compute='_compute_recipient_single_non_stored' compute_sudo=False args: 'Stored Recipient Number'
  • recipient_single_number_itf Char
    compute='_compute_recipient_single_stored' compute_sudo=False help="Phone number of the recipient. If changed, it will be recorded on recipient's profile." readonly=False store=True args: 'Recipient Number'
  • recipient_single_valid Boolean
    compute='_compute_recipient_single_valid' compute_sudo=False args: 'Is valid'
  • recipient_valid_count Integer
    compute='_compute_recipients' compute_sudo=False args: '# Valid recipients'
  • res_id Integer
    args: 'Document ID'
  • res_ids Char
    args: 'Document IDs'
  • res_ids_count Integer
    compute='_compute_res_ids_count' compute_sudo=False help='Number of recipients that will receive the SMS if sent in mass mode, without applying the Active Domain value' args: 'Visible records count'
  • res_model Char
    args: 'Document Model Name'
  • res_model_description Char
    compute='_compute_res_model_description' args: 'Document Model Description'
  • sanitized_numbers Char
    compute='_compute_sanitized_numbers' compute_sudo=False args: 'Sanitized Number'
  • scheduled_date Char
    compute='_compute_scheduled_date' compute_sudo=False readonly=False store=True args: 'Scheduled Date'
  • sms_type Selection
    args: [('marketing', 'Marketing'), ('alert', 'Alert')]
  • template_id Many2one → sms.template
    domain="[('model', '=', res_model)]" string='Use Template' args: 'sms.template'
  • template_name Char
    string='Template Name'
  • use_exclusion_list Boolean
    copy=False default=True help='Prevent sending messages to blacklisted contacts. Disable only when absolutely necessary.' args: 'Use Exclusion List'
Public methods (6)
  • action_create_sms_template(self)
  • action_schedule_message(self)
  • action_send_sms(self)
  • action_send_sms_mass_now(self)
  • default_get(self, fields)
    @api.model
  • open_template_creation_wizard(self)

New fields (10)
  • body Text
  • failure_type Selection
    copy=False args: [('unknown', 'Unknown error'), ('sms_number_missing', 'Missing Number'), ('sms_number_format', 'Wrong Number Format'), ('sms_country_not_supported', 'Country Not Supported'), ('sms_registration_needed', 'Country-specific Registration Required'), ('sms_credit', 'Insufficient Credit'), ('sms_database_non_active', 'Database non active'), ('sms_server', 'Server Error'), ('sms_acc', 'Unregistered Account'), ('sms_blacklist', 'Blacklisted'), ('sms_duplicate', 'Duplicate'), ('sms_optout', 'Opted Out')]
  • mail_message_id Many2one → mail.message
    index=True args: 'mail.message'
  • number Char
    args: 'Number'
  • partner_id Many2one → res.partner
    args: 'res.partner', 'Customer'
  • sms_tracker_id Many2one → sms.tracker
    compute='_compute_sms_tracker_id' string='SMS trackers' args: 'sms.tracker'
  • sms_type Selection
    args: [('marketing', 'Marketing'), ('alert', 'Alert')]
  • state Selection
    copy=False default='outgoing' readonly=True required=True args: [('outgoing', 'In Queue'), ('process', 'Processing'), ('pending', 'Sent'), ('sent', 'Delivered'), ('error', 'Error'), ('canceled', 'Cancelled')], 'SMS Status'
  • to_delete Boolean
    default=False help='Will automatically be deleted, while notifications will not be deleted in any case.' args: 'Marked for deletion'
  • uuid Char
    copy=False default=<expr> help='Alternate way to identify a SMS record, used for delivery reports' readonly=True args: 'UUID'
Public methods (9)
  • BOUNCE_DELIVERY_ERRORS(self)
    @property
  • DELIVERY_ERRORS(self)
    @property
  • IAP_TO_SMS_STATE_SUCCESS(self)
    @property
  • action_set_canceled(self)
  • action_set_error(self, failure_type)
  • action_set_outgoing(self)
  • create(self, vals_list)
    @api.model_create_multi
  • resend_failed(self)
  • send(self, unlink_sent=True, raise_exception=False)
    Main API method to send SMS. This contacts an external server. If the transaction fails, it may be retried which can result in sending multiple SMS messages! :param unlink_sent: unlink sent SMS after IAP feedback; :param raise_exception: raise if there is an issue contacting IAP;

New fields (5)
  • body Char
    required=True translate=True args: 'Body'
  • model Char
    index=True readonly=True related='model_id.model' store=True args: 'Related Document Model'
  • model_id Many2one → ir.model
    domain=['&', ('is_mail_thread_sms', '=', True), ('transient', '=', False)] help='The type of document this template can be used with' ondelete='cascade' required=True string='Applies to' args: 'ir.model'
  • name Char
    translate=True args: 'Name'
  • sidebar_action_id Many2one → ir.actions.act_window
    copy=False help='Sidebar action to make this template available on records of the related document model' readonly=True args: 'ir.actions.act_window', 'Sidebar action'
Public methods (4)
  • action_create_sidebar_action(self)
  • action_unlink_sidebar_action(self)
  • default_get(self, fields)
    @api.model
  • unlink(self)

New fields (6)
  • body Char
    compute='_compute_sms_template_fields' args: 'Body'
  • lang Selection
    string='Template Preview Language' args: _selection_languages
  • model_id Many2one → ir.model
    related='sms_template_id.model_id' args: 'ir.model'
  • no_record Boolean
    compute='_compute_no_record' args: 'No Record'
  • resource_ref Reference
    selection='_selection_target_model' string='Record reference'
  • sms_template_id Many2one → sms.template
    ondelete='cascade' required=True args: 'sms.template'
Public methods (1)
  • default_get(self, fields)
    @api.model

New fields (1)
  • template_ids Many2many → sms.template
    args: 'sms.template'
Public methods (1)
  • reset_template(self)

New fields (2)
  • mail_notification_id Many2one → mail.notification
    index='btree_not_null' ondelete='cascade' args: 'mail.notification'
  • sms_uuid Char
    required=True args: 'SMS uuid'
Public methods (1)
  • SMS_STATE_TO_NOTIFICATION_STATUS(self)
    @property

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…