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

Security findings

Repository
odoo/odoo · module folder
Module version
1.1
Category
Productivity/Calendar
Folder size
10.0 MB
License
LGPL-3
Application
Yes
Auto-installable
No
Website
None
Last tracking update
2026-10-05 00:19:50
Authors
Odoo S.A.
Maintainers
Odoo S.A.
Committers
Xavier Morel, Raphael Collet, Thibault Delavallée, odoo, Odoo Translation Bot, Denis Ledoux, Aaron Bohy, Géry Debongnie, Jorge Pinna Puissant, Aurélien Warnon, Xavier-Do, Romeo Fragomeli, Victor Feyens, Adrien Dieudonné, Sébastien Theys, Julien Mougenot, David Beguin, Tiffany Chang (tic), Gorash, Pierre Paridans, Romain Estievenart, Didier (did), Florian Charlier, luvi, Renaud Thiry, tsm-odoo, Victor Piryns (pivi), Thomas Becquevort (thbe), amdi-odoo, Pierre-Yves Dufays, Andrew Gavgavian, Dylan Kiss (dyki), Chong Wang (cwg), Brieuc-brd, Sarah Bellefroid, Noe Antoine, omra-odoo, Zelong Lin, sesn-odoo, aktr-odoo, Maryam Kia, jorv-odoo, dhba, adsh-odoo, Alex Kühn, nihp-odoo, mano-odoo, Harsh Shah, guce, Pierre Pulinckx, Bastien PIERRE, Michaël Mattiello, pish-odoo, Krzysztof Magusiak (krma), krip-odoo, Sylvio Poliart (sypol), mojem, pajo, akha, jayp-odoo, Julien Launois (jula), adip-odoo, Jérôme Belpaire, Yagnik ✗ (yagp), assh-odoo, Omar Khalil (omkha), Jan Suhr, alan-odoo, Kadam Darji, ibo-odoo, Farah (ahmfa), MostafaTwfiq, Julien Carion, ELCO, chpa-odoo, Oussema Heni, stefanorigano (sri), Frantisek Binovsky, claireclan, Julien Piron, Jean Schoenlaub, SebVrc, Dario Liotta (dalio), Sylsee
Odoo dependencies
odoo/odoo:
- web
- bus
Python dependencies
None
System dependencies
None
Required by
calendar_sms, crm, google_calendar, hr_calendar, hr_recruitment, microsoft_calendar, test_discuss_full
Description
This is a full-featured calendar system.
========================================

It supports:
------------
    - Calendar of events
    - Recurring events

If you need to manage your meetings, you should install the CRM module.
    

Code Analysis info_outline

Views touched (25)
XML IDNameModelTypeStatus
calendar_alarm_view_form calendar.alarm.form calendar.alarm form New
calendar_alarm_view_kanban calendar.alarm.view.kanban calendar.alarm kanban New
calendar_alarm_view_search calendar.alarm.view.search calendar.alarm search New
calendar_calendar_view_form calendar.calendar.view.form calendar.calendar form New
calendar_calendar_view_list calendar.calendar.view.list calendar.calendar list New
calendar_event_archive_or_unlink_wizard_view_form calendar.event.archive.or.unlink.wizard.view.form calendar.event.archive.or.unlink.wizard form New
calendar_event_multi_archive_or_unlink_wizard_view_form calendar_event_multi_archive_or_unlink_wizard_view_form calendar.event.multi.archive.or.unlink.wizard form New
calendar_user_view_form calendar.user.view.form calendar.user form New
invitation_page_anonymous Calendar Invitation Page for anonymous users ir.ui.view qweb New
mail_activity_schedule_view_form mail.activity.schedule.inherit.calendar mail.activity.schedule calendar Inherits mail.mail_activity_schedule_view_form
mail_activity_view_form_popup mail.activity.form.inherit.calendar mail.activity calendar Inherits mail.mail_activity_view_form_popup
message_meeting_activity_done message_meeting_activity_done ir.ui.view qweb Inherits mail.message_activity_done
res_config_settings_view_form res.config.settings.view.form.inherit.calendar res.config.settings calendar Inherits base.res_config_settings_view_form
res_partner_view_form_simplified res.partner.view.form.simplified.calendar res.partner form New
res_users_form_view res.users.form.calendar res.users calendar Inherits base.view_users_form
res_users_form_view_calendars res.users.preferences.form.inherit res.users form Inherits base.view_users_form_simple_modif
res_users_view_form res.users.view.form.inherit.calendar res.users calendar Inherits base.view_users_form
view_calendar_alarm_tree calendar.alarm.list calendar.alarm list New
view_calendar_event_calendar calendar.event.calendar calendar.event calendar New
view_calendar_event_form calendar.event.form calendar.event form New
view_calendar_event_form_quick_create calendar.event.form.quick_create calendar.event form New
view_calendar_event_search calendar.event.search calendar.event search New
view_calendar_event_tree calendar.event.list calendar.event list New
view_calendar_event_type_tree calendar.event.type calendar.event.type list New
view_partners_form res_partner.view.form.calendar res.partner calendar Inherits base.view_partner_form
HTTP endpoints (10)
Route(s)HandlerAuthTypeMethodsFlags
/calendar/meeting/accept CalendarController.accept_meeting calendar http POST sudo
/calendar/recurrence/accept CalendarController.accept_recurrence calendar http ALL sudo
/calendar/ics/<int:calendar_event_id>/<string:access_token> CalendarController.calendar_get_ics_file public http ALL sudo website
/calendar/meeting/join CalendarController.calendar_join_meeting user http ALL sudo website
/calendar/join_videocall/<string:access_token> CalendarController.calendar_join_videocall public http ALL sudo
/calendar/meeting/decline CalendarController.decline_meeting calendar http POST sudo
/calendar/recurrence/decline CalendarController.decline_recurrence calendar http ALL sudo
/calendar/notify CalendarController.notify user jsonrpc ALL
/calendar/notify_ack CalendarController.notify_ack user jsonrpc ALL sudo
/calendar/meeting/view CalendarController.view_meeting calendar http ALL sudo
Models touched (20)

New fields (8)
  • alarm_type Selection
    default='email' required=True string='Type' args: [('notification', 'Notification'), ('email', 'Email')]
  • body Text
    help='Additional message that would be sent with the notification for the reminder' args: 'Additional Message'
  • duration Integer
    default=1 required=True args: 'Remind Before'
  • duration_minutes Integer
    compute='_compute_duration_minutes' search='_search_duration_minutes' store=True args: 'Duration in minutes'
  • interval Selection
    default='hours' required=True args: list(_interval_selection.items()), 'Unit'
  • mail_template_id Many2one → mail.template
    compute='_compute_mail_template_id' domain=[('model', 'in', ['calendar.attendee'])] help='Template used to render mail reminder content.' readonly=False store=True string='Email Template' args: 'mail.template'
  • name Char
    required=True translate=True args: 'Name'
  • notify_responsible Boolean
    default=False help='When activated, the event organizer will also receive this reminder.' args: 'Notify Responsible'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • do_check_alarm_for_one_date(self, one_date, event, event_maxdelta, in_the_next_X_seconds, alarm_type, after=False, missing=False)
    Search for some alarms in the interval of time determined by some parameters (after, in_the_next_X_seconds, ...) :param one_date: date of the event to check (not the same that in the event browse if recurrent) :param event: Event browse record :param event_maxdelta: biggest duration from alarms for this event :param in_the_next_X_seconds: looking in the future (in seconds) :param after: if not False: will return alert if after this date (date as string - todo: change in master) :param missing: if not False: will return alert even if we are too late :param notif: Looking for type notification :param mail: looking for type email
  • do_notif_reminder(self, alert)
  • get_next_notif(self)
    @api.model

New fields (10)
  • access_token Char
    default=_default_access_token groups='base.group_system' args: 'Invitation Token'
  • availability Selection
    readonly=True args: [('free', 'Available'), ('busy', 'Busy')], 'Available/Busy'
  • common_name Char
    compute='_compute_common_name' store=True args: 'Common name'
  • email Char
    related='partner_id.email' args: 'Email'
  • event_id Many2one → calendar.event
    index=True ondelete='cascade' required=True args: 'calendar.event', 'Meeting linked'
  • mail_tz Selection
    compute='_compute_mail_tz' help='Timezone used for displaying time in the mail template' args: _tz_get
  • partner_id Many2one → res.partner
    index=True ondelete='cascade' readonly=True required=True args: 'res.partner', 'Attendee'
  • phone Char
    related='partner_id.phone' args: 'Phone'
  • recurrence_id Many2one → calendar.recurrence
    related='event_id.recurrence_id' args: 'calendar.recurrence'
  • state Selection
    default='needsAction' string='Status' args: STATE_SELECTION
Public methods (7)
  • copy(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • do_accept(self)
    Marks event invitation as Accepted.
  • do_decline(self)
    Marks event invitation as Declined.
  • do_tentative(self)
    Makes event invitation as Tentative.
  • unlink(self)
  • write(self, vals)

New fields (11)
  • calendar_default_privacy Selection
    default=<expr> required=True args: [('public', 'Public by default'), ('private', 'Private by default'), ('confidential', 'Internal users only'), ('members_only', 'Shared Calendar Members Only')]
  • calendar_user_id Many2one → calendar.user
    compute='_compute_calendar_user' search='_search_calendar_user_id' string='Current Membership Record' args: 'calendar.user'
  • calendar_user_ids One2many → calendar.user
    default=<expr> inverse_name='calendar_id' string='Users' args: 'calendar.user'
  • color Integer
    readonly=False related='calendar_user_id.filter_color'
  • event_ids One2many → calendar.event
    args: 'calendar.event', 'calendar_id', 'Events'
  • is_primary Boolean
    related='calendar_user_id.is_primary'
  • name Char
    string='Name'
  • owner_id Many2one → res.users
    compute='_compute_owner_id' args: 'res.users'
  • recurrence_ids One2many → calendar.recurrence
    args: 'calendar.recurrence', 'calendar_id', 'Recurrences'
  • share_user_ids Many2many → res.users
    compute='_compute_share_user_ids' domain="[('id', 'not in', [owner_id, uid]), ('share', '=', False)]" inverse='_inverse_share_user_ids' string='Shared with' args: 'res.users'
  • user_access_role Selection
    related='calendar_user_id.access_role'
Public methods (3)
  • add_filter_to_list(self)
  • unlink(self)
  • write(self, vals)
    Forbid the calendar default privacy update from different users for keeping private events secured.

New fields (73)
  • accepted_count Integer
    compute='_compute_attendees_count'
  • access_token Char
    copy=False default=<expr> readonly=True args: 'Invitation Token'
  • active Boolean
    default=True help='If the active field is set to false, it will allow you to hide the event alarm information without removing it.' tracking=True args: 'Active'
  • alarm_ids Many2many → calendar.alarm
    compute='_compute_alarm_ids' help='Notifications sent to all attendees to remind of the meeting.' ondelete='restrict' readonly=False store=True string='Reminders' args: 'calendar.alarm', 'calendar_alarm_calendar_event_rel'
  • allday Boolean
    default=False args: 'All Day Duration'
  • attendee_ids One2many → calendar.attendee
    args: 'calendar.attendee', 'event_id', 'Participant'
  • attendees_count Integer
    compute='_compute_attendees_count'
  • awaiting_count Integer
    compute='_compute_attendees_count'
  • byday Selection
    compute='_compute_recurrence' readonly=False string='By day' args: BYDAY_SELECTION
  • calendar_color Integer
    related='calendar_id.color'
  • calendar_id Many2one → calendar.calendar
    compute='_compute_calendar_id' domain=<expr> index='btree' ondelete='cascade' readonly=False store=True string='Calendar' args: 'calendar.calendar'
  • categ_ids Many2many → calendar.event.type
    args: 'calendar.event.type', 'meeting_category_rel', 'event_id', 'type_id', 'Tags'
  • count Integer
    compute='_compute_recurrence' help='Repeat x times' readonly=False string='Number of Repetitions'
  • current_attendee Many2one → calendar.attendee
    compute='_compute_current_attendee' search='_search_current_attendee' args: 'calendar.attendee'
  • current_status Selection
    readonly=False related='current_attendee.state' string='Attending?'
  • day Integer
    compute='_compute_recurrence' readonly=False args: 'Date of month'
  • declined_count Integer
    compute='_compute_attendees_count'
  • description Html
    help='When synchronization with an external calendar is active, this description is synchronized with the one of the associated meeting in that external calendar. Any update will be propagated there and vice versa.' args: 'Description'
  • display_description Boolean
    compute='_compute_display_description'
  • display_time Char
    compute='_compute_display_time' args: 'Event Time'
  • duration Float
    compute='_compute_duration' readonly=False store=True args: 'Duration'
  • effective_privacy Selection
    compute='_compute_effective_privacy' help='Whether the event is private, considering the user privacy' search='_search_effective_privacy' args: [('public', 'Public'), ('private', 'Private'), ('confidential', 'Only internal users'), ('members_only', 'Shared Calendar Members Only')], 'Effective Privacy'
  • end_type Selection
    compute='_compute_recurrence' readonly=False string='Recurrence Termination' args: END_TYPE_SELECTION
  • event_tz Selection
    compute='_compute_recurrence' readonly=False string='Timezone' args: _tz_get
  • follow_recurrence Boolean
    default=False
  • fri Boolean
    compute='_compute_recurrence' readonly=False
  • google_calendar_url Char
    compute='_compute_google_calendar_url' help='Link to manually add the meeting to Google Calendar' args: 'Google Calendar URL'
  • interval Integer
    compute='_compute_recurrence' help='Repeat every (Days/Week/Month/Year)' readonly=False string='Repeat On'
  • invalid_email_partner_ids Many2many → res.partner
    compute='_compute_invalid_email_partner_ids' args: 'res.partner'
  • is_draft Boolean
    help="When True, this field mutes the notifications of the event. It allows to save the event without confirming it and avoids notifying attendees with update messages because some information was unknown at the creation of the event. To prevent event's flow issues, the draft state should be set at the creation of the event and never reset once it is removed." string='Is draft'
  • is_highlighted Boolean
    compute='_compute_is_highlighted' string='Is the Event Highlighted'
  • is_organizer_alone Boolean
    compute='_compute_is_organizer_alone' help="Check if the organizer is alone in the event, i.e. if the organizer is the only one that hasn't declined\n the event (only if the organizer is not the only attendee)" string='Is the Organizer Alone'
  • location Char
    tracking=True args: 'Location'
  • meeting_activity_ids One2many → mail.activity
    string='Meeting Activities' args: 'mail.activity', 'calendar_event_id'
  • mon Boolean
    compute='_compute_recurrence' readonly=False
  • month_by Selection
    compute='_compute_recurrence' readonly=False string='Option' args: MONTH_BY_SELECTION
  • name Char
    copy=True required=True args: 'Meeting Subject'
  • notes Html
    args: 'Notes'
  • partner_id Many2one → res.partner
    readonly=True related='user_id.partner_id' string='Scheduled by' args: 'res.partner'
  • partner_ids Many2many → res.partner
    default=_default_partners falsy_value_label='Unassigned' string='Attendees' args: 'res.partner', 'calendar_event_res_partner_rel'
  • privacy Selection
    help='People to whom this event will be visible.' args: [('public', 'Public'), ('private', 'Private'), ('confidential', 'Only internal users'), ('members_only', 'Calendar Members Only')], 'Privacy'
  • privacy_placeholder Char
    compute='_compute_privacy_placeholder'
  • recurrence_id Many2one → calendar.recurrence
    index='btree_not_null' string='Recurrence Rule' args: 'calendar.recurrence'
  • recurrence_update Selection
    copy=False default='self_only' help='Choose what to do with other events in the recurrence. Updating All Events is not allowed when dates or time is modified' store=False args: [('self_only', 'This event'), ('future_events', 'This and following events'), ('all_events', 'All events')]
  • recurrency Boolean
    args: 'Recurrent'
  • res_id Many2oneReference
    model_field='res_model' args: 'Document ID'
  • res_model Char
    readonly=True related='res_model_id.model' store=True args: 'Document Model Name'
  • res_model_id Many2one → ir.model
    index=True ondelete='cascade' args: 'ir.model', 'Document Model'
  • res_model_name Char
    related='res_model_id.name'
  • res_record Reference
    compute='_compute_res_record' inverse='_inverse_res_record' selection='_get_model_selection' string='Linked to'
  • rrule Char
    compute='_compute_recurrence' readonly=False args: 'Recurrent Rule'
  • rrule_type Selection
    compute='_compute_recurrence' help='Let the event automatically repeat at that interval' readonly=False string='Recurrence' args: RRULE_TYPE_SELECTION
  • rrule_type_ui Selection
    compute='_compute_rrule_type_ui' help='Let the event automatically repeat at that interval' readonly=False string='Repeat' args: RRULE_TYPE_SELECTION_UI
  • sat Boolean
    compute='_compute_recurrence' readonly=False
  • should_show_status Boolean
    compute='_compute_should_show_status'
  • show_as Selection
    default='busy' help="If the time is shown as 'busy', this event will be visible to other people with either the full information or simply 'busy' written depending on its privacy. Use this option to let other people know that you are unavailable during that period of time. \n If the event is shown as 'free', other users know that you are available during that period of time." required=True args: [('free', 'Available'), ('busy', 'Busy')], 'Show as'
  • start Datetime
    default=_default_start help='Start date of an event, without time for full days events' index=True required=True tracking=True args: 'Start'
  • start_date Date
    compute='_compute_dates' inverse='_inverse_dates' store=True tracking=True args: 'Start Date'
  • stop Datetime
    compute='_compute_stop' default=_default_stop help='Stop date of an event, without time for full days events' readonly=False required=True store=True tracking=True args: 'Stop'
  • stop_date Date
    compute='_compute_dates' inverse='_inverse_dates' store=True tracking=True args: 'End Date'
  • sun Boolean
    compute='_compute_recurrence' readonly=False
  • tentative_count Integer
    compute='_compute_attendees_count'
  • thu Boolean
    compute='_compute_recurrence' readonly=False
  • tue Boolean
    compute='_compute_recurrence' readonly=False
  • unavailable_partner_ids Many2many → res.partner
    compute='_compute_unavailable_partner_ids' string='Unavailable Attendees' args: 'res.partner'
  • until Date
    compute='_compute_recurrence' readonly=False
  • user_can_edit Boolean
    compute='_compute_user_can_edit'
  • user_id Many2one → res.users
    default=<expr> index='btree_not_null' args: 'res.users', 'Organizer'
  • videocall_channel_id Many2one → discuss.channel
    index='btree_not_null' args: 'discuss.channel', 'Discuss Channel'
  • videocall_location Char
    compute='_compute_videocall_location' copy=True store=True args: 'Meeting URL'
  • videocall_source Selection
    compute='_compute_videocall_source' args: [('discuss', 'Discuss'), ('custom', 'Custom')]
  • wed Boolean
    compute='_compute_recurrence' readonly=False
  • weekday Selection
    compute='_compute_recurrence' readonly=False args: WEEKDAY_SELECTION
Public methods (24)
  • action_confirm(self)
    The value of show_as for draft events is 'free' as the events are not yet confirmed and partners or resouces can still be allocated to other events. Once the draft state is removed from the events, they are shown as busy as the attendees receive a confirmation.
  • action_join_meeting(self, partner_id)
    Method used when an existing user wants to join
  • action_join_video_call(self)
  • action_mass_archive(self, recurrence_update_setting)
    The aim of this action purpose is to be called from sync calendar module when mass deletion is not possible.
  • action_mass_deletion(self, recurrence_update_setting)
  • action_open_archive_or_unlink_wizard(self, requested_action, next_action=None)
    This method allows users to manage some actions related to the archiving or deletion from the frontend. If the event belongs to a recurrence, then it shows a form offering to select which event of this one must be archived or deleted. If needed, it displays a wizard to approve the sending of the cancellation emails to the attendees. This wizard also allows to edit the cancellation email if only one event has been selected. :param requested_action: The action requested from the interface triggering the method and can be "archive" or "unlink" :param next_action: The action to perform once the events are unlinked or archived :return: Action to archive or unlink the event(s)
  • action_open_calendar_event(self)
  • action_open_composer(self)
  • action_sendmail(self)
  • change_attendee_status(self, status, recurrence_update_setting)
  • clear_videocall_location(self)
  • copy(self, default=None)
    When an event is copied, the attendees should be recreated to avoid sharing the same attendee records between copies
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • find_partner_customer(self)
  • get_default_duration(self)
    @api.model
  • get_discuss_videocall_location(self)
    @api.model
  • get_display_time_tz(self, tz=False)
    get the display_time of the meeting, forcing the timezone. This method is called from email template, to not use sudo().
  • get_formatted_date_and_time(self, datetime, date_format=None, time_format=None)
    @api.model
    get the date and time converted to the environment timezone and formatted according to date_format and time_format :param datetime: the datetime to format :param str date_format: the format or the date (LDML format), if not specified the default format of the lang :param str time_format: “medium”, or “short” to use res.lang format with or without the seconds. Or a custom time pattern compatible with `babel` lib :return: a tuple with (formatted_datetime.date, formatted_datetime.time)
  • get_next_alarm_date(self, events_by_alarm)
  • get_state_selections(self)
    @api.model
  • set_discuss_videocall_location(self)
  • unlink(self)
  • write(self, vals)

New fields (7)
  • block_mail Boolean
    default=False
  • calendar_event_id Many2one → calendar.event
    required=True args: 'calendar.event', 'Calendar Event'
  • recipient_ids Many2many → res.partner
    compute='_compute_recipient_ids' readonly=False store=True string='Recipients' args: 'res.partner'
  • recurrence_choice Selection
    default='self_only' help="This field allows to perform the archiving or deletion on several events belonging to the selected event's recurrence." args: [('self_only', 'This event'), ('future_events', 'This and following events'), ('all_events', 'All the events')]
  • recurrency Boolean
    related='calendar_event_id.recurrency' args: 'Recurrent'
  • requested_action Selection
    default='archive' required=True args: [('archive', 'archive'), ('unlink', 'delete')]
  • template_id Many2one
    compute='_compute_template_id'
Public methods (4)
  • action_archive(self)
  • action_send_mail_and_archive(self)
  • action_send_mail_and_unlink(self)
    Send the composed email and delete the event based on the specified deletion type.
  • action_unlink(self)
    Delete the events specified with recurrence_choice field. :return: Client action to reload the page.

New fields (4)
  • block_mail Boolean
    default=False
  • calendar_event_ids Many2many → calendar.event
    required=True args: 'calendar.event', 'calendar_event_multi_archive_or_unlink_wizard_rel'
  • has_recurrent_events Boolean
    compute='_compute_has_recurrent_events'
  • requested_action Selection
    default='archive' required=True args: [('archive', 'archive'), ('unlink', 'delete')]
Public methods (4)
  • action_archive(self)
  • action_send_mails_and_archive(self)
  • action_send_mails_and_unlink(self)
  • action_unlink(self)

New fields (2)
  • color Integer
    default=_default_color args: 'Color'
  • name Char
    required=True args: 'Name'
Public methods (0)

No public methods.

New fields (3)
  • active Boolean
    default=True args: 'Active'
  • partner_id Many2one → res.partner
    index=True required=True args: 'res.partner', 'Employee'
  • user_id Many2one → res.users
    default=<expr> index=True ondelete='cascade' required=True args: 'res.users', 'Me'
Public methods (2)
  • init_partner_filters(self)
    @api.model
    Default the partners filters on the ones listed in the context 'default_partner_ids' key if any. If there's none, reset every partner filters.
  • update_partner_filters(self, partner_ids)
    @api.model
    Update current user partner filters. Deactivating a partner filter by writing "active" to false instead of unlinking. This keeps things fast and safe, as the filter can be reactivated/deactivated instantly and the calendar view can reload right away (no need to debounce to prevent record not found crashes). :param partner_ids: Ids of the partners for which the filters should be activated. Not considering the current user partner as the current user events filtering is handled separatly from the partner filters.

New fields (24)
  • base_event_id Many2one → calendar.event
    copy=False index='btree' ondelete='set null' args: 'calendar.event'
  • byday Selection
    string='By day' args: BYDAY_SELECTION
  • calendar_event_ids One2many → calendar.event
    args: 'calendar.event', 'recurrence_id'
  • calendar_id Many2one
    related='base_event_id.calendar_id' string='Calendar'
  • count Integer
    default=1
  • day Integer
    default=1
  • dtstart Datetime
    compute='_compute_dtstart'
  • end_type Selection
    default='forever' args: END_TYPE_SELECTION
  • event_tz Selection
    default=<expr> string='Timezone' args: _tz_get
  • fri Boolean
  • interval Integer
    default=1
  • mon Boolean
  • month_by Selection
    default='date' args: MONTH_BY_SELECTION
  • name Char
    compute='_compute_name' store=True
  • rrule Char
    compute='_compute_rrule' inverse='_inverse_rrule' store=True
  • rrule_type Selection
    default='weekly' args: RRULE_TYPE_SELECTION
  • sat Boolean
  • sun Boolean
  • thu Boolean
  • trigger_id Many2one → ir.cron.trigger
    args: 'ir.cron.trigger'
  • tue Boolean
  • until Date
    args: 'Repeat Until'
  • wed Boolean
  • weekday Selection
    string='Weekday' args: WEEKDAY_SELECTION
Public methods (1)
  • get_recurrence_name(self)

New fields (10)
  • access_role Selection
    readonly=True required=True args: [('owner', 'Owner'), ('writer', 'Writer')]
  • calendar_id Many2one → calendar.calendar
    index='btree' ondelete='cascade' readonly=True required=True string='Calendar' args: 'calendar.calendar'
  • calendar_owner_id Many2one
    related='calendar_id.owner_id'
  • calendar_share_user_ids Many2many
    readonly=True related='calendar_id.share_user_ids'
  • filter_color Integer
    default=_get_default_color string='Color'
  • is_filter_active Boolean
    default=True args: 'Shown in Filters List'
  • is_filter_checked Boolean
    default=True args: 'Filter Enabled'
  • is_primary Boolean
    readonly=True args: 'Primary'
  • name Char
    args: 'Label'
  • user_id Many2one → res.users
    readonly=True required=True string='User' args: 'res.users'
Public methods (2)
  • unlink(self)
  • write(self, vals)

New fields (1)
  • calendar_event_ids One2many → calendar.event
    args: 'calendar.event', 'videocall_channel_id'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • calendar_event_id Many2one → calendar.event
    index='btree_not_null' ondelete='cascade' string='Calendar Meeting' args: 'calendar.event'
Public methods (3)
  • action_create_calendar_event(self)
  • unlink_w_meeting(self)
  • write(self, vals)

New fields (1)
  • activity_calendar_event_id Many2one → calendar.event
    compute='_compute_activity_calendar_event_id' groups='base.group_user' string='Next Activity Calendar Event' args: 'calendar.event'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_create_calendar_event(self)

New fields (1)
  • category Selection
    selection_add=[('meeting', 'Meeting')]
Public methods (0)

No public methods.

New fields (5)
  • calendar_last_notif_ack Datetime
    default=fields.Datetime.now args: 'Last notification marked as read from base Calendar'
  • meeting_count Integer
    compute='_compute_meeting_count' args: '# Meetings'
  • meeting_display_label Char
    compute='_compute_meeting_display'
  • meeting_ids Many2many → calendar.event
    copy=False string='Meetings' args: 'calendar.event', 'calendar_event_res_partner_rel', 'res_partner_id', 'calendar_event_id'
  • meeting_next_date Date
    compute='_compute_meeting_display' string='Next Meeting'
Public methods (2)
  • action_schedule_meeting(self)
  • get_attendee_detail(self, meeting_ids)
    Return a list of dict of the given meetings with the attendees details Used by: - many2many_attendee.js: Many2ManyAttendee - calendar_model.js (calendar.CalendarModel)

New fields (5)
  • calendar_ids One2many → calendar.calendar
    compute='_compute_calendar_ids' readonly=False user_writeable=True args: 'calendar.calendar'
  • calendar_user_ids One2many → calendar.user
    args: 'calendar.user', 'user_id'
  • owned_calendar_ids One2many → calendar.calendar
    compute='_compute_calendar_ids' args: 'calendar.calendar'
  • primary_calendar_id Many2one → calendar.calendar
    compute='_compute_primary_calendar' store=True args: 'calendar.calendar'
  • writable_calendar_ids One2many → calendar.calendar
    compute='_compute_calendar_ids' args: 'calendar.calendar'
Public methods (7)
  • check_calendar_credentials(self)
    @api.model
  • check_synchronization_status(self)
  • create(self, vals_list)
    @api.model_create_multi
  • get_calendar_model_data(self)
    @api.model
  • get_calendar_sync_email(self)
    @api.model
    Meant to be overridden by a specific calendar provider
  • get_selected_calendars_partner_ids(self, include_user=True)
    Retrieves the partner IDs of the attendees selected in the calendar view. :param bool include_user: Determines whether to include the current user's partner ID in the results. :return: A list of integer IDs representing the partners selected in the calendar view. If 'include_user' is True, the list will also include the current user's partner ID. :rtype: list
  • unlink(self)

New fields (1)
  • calendar_show_activities Boolean
    default=True string='Show Activities in Calendar'
Public methods (0)

No public methods.

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…