Readonly publishing of calendars

base_ical
REPOSITORY
REPOSITORYOCA/server-backend
GIT
GIThttps://github.com/OCA/server-backend.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-backend/tree/18.0/base_ical
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYTools
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Hunki Enterprises BV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Hunki Enterprises BV
COMMITTERS
COMMITTERSHolger Brunn, Weblate, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/server-backend
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:19
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES vobject
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module allows administrators to configure iCalendars based on an
arbitrary selection on arbitrary models.

Users can selectively subscribe to them by enabling them in their
profile form.

This is useful for exposing Odoo data to calendaring application like
Nextcloud.

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
view_base_ical_form base.ical form New
view_base_ical_tree base.ical list New
view_icalendar_url_description_form iCalendar: Show Url base.ical.url.description form New
view_icalendar_url_show_form iCalendar: Show Url base.ical.url.show form New
view_res_users_form res.users notebook Inherits base.view_users_form_simple_modif
Models touched (4)

New fields (17)
  • active Boolean
    default=True
  • allowed_users_ids Many2many → res.users
    args: 'res.users'
  • auto Boolean
    copy=False help='If you check this, the calendar will be enabled for all current and future users. Note that unchecking this will not disable existing calendar subscriptions' args: 'Allow automatically'
  • auto_group_ids Many2many → res.groups
    default=<expr> help='Only users of selected groups will be auto-allowed. Leave empty for all users' relation='base_ical_auto_groups_rel' string='Groups' args: 'res.groups'
  • code Text
  • domain Char
    default='[]' help='You can use variables `env` and `user` here' required=True
  • expression_dtend Char
    help='You can use variables `record` and `user` here' string='DTEND' vevent_field='dtend'
  • expression_dtstamp Char
    default='record.write_date' help='You can use variables `record` and `user` here' string='DTSTAMP' vevent_field='dtstamp'
  • expression_dtstart Char
    help='You can use variables `record` and `user` here' string='DTSTART' vevent_field='dtstart'
  • expression_summary Char
    default='record.display_name' help='You can use variables `record` and `user` here' string='SUMMARY' vevent_field='summary'
  • expression_uid Char
    help='You can use variables `record` and `user` here' string='UID' vevent_field='uid'
  • help_text Html
    compute='_compute_help'
  • mode Selection
    default='simple' required=True args: '_get_operating_modes'
  • model Char
    related='model_id.model' args: 'Model Name'
  • model_id Many2one → ir.model
    ondelete='cascade' required=True args: 'ir.model'
  • name Char
    required=True translate=True
  • preview Text
    compute='_compute_preview'
Public methods (4)
  • action_new_url(self)
    Create or activate current user's token
  • create(self, vals_list)
    @api.model_create_multi
    Enable calendar for all users if auto flag is checked
  • default_variables(self)
  • write(self, vals)
    Enable calendar for all users if auto flag is checked

New fields (2)
  • calendar_id Many2one → base.ical
    required=True args: 'base.ical'
  • name Char
    required=True args: 'Description'
Public methods (1)
  • make_url(self)
    @check_identity

New fields (2)
  • id Id
  • url Char
    readonly=True
Public methods (0)

No public methods.

New fields (1)
  • ical_ids One2many → base.ical
    compute='_compute_ical_ids' args: 'base.ical'
Public methods (2)
  • SELF_READABLE_FIELDS(self)
    @property
  • create(self, vals_list)
    @api.model_create_multi
REPOSITORY
REPOSITORYOCA/server-backend
GIT
GIThttps://github.com/OCA/server-backend.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-backend/tree/15.0/base_ical
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYTools
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Hunki Enterprises BV
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Hunki Enterprises BV
COMMITTERS
COMMITTERSOCA-git-bot, oca-ci, fkantelberg, Jan Suhr
WEBSITE
WEBSITEhttps://github.com/OCA/server-backend
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:43
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - web
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES vobject
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
view_base_ical_form base.ical form New
view_base_ical_tree base.ical tree New
view_icalendar_url_description_form iCalendar: Show Url base.ical.url.description form New
view_icalendar_url_show_form iCalendar: Show Url base.ical.url.show form New
view_res_users_form res.users notebook Inherits base.view_users_form_simple_modif
Models touched (4)

New fields (16)
  • active Boolean
    default=True
  • allowed_users_ids Many2many → res.users
    args: 'res.users'
  • auto Boolean
    copy=False help='If you check this, the calendar will be enabled for all current and future users. Not that unchecking this will not disable existing calendar subscriptions' args: 'Allow automatically'
  • code Text
  • domain Char
    default='[]' help='You can use variables `env` and `user` here' required=True
  • expression_dtend Char
    help='You can use variables `record` and `user` here' string='DTEND' vevent_field='dtend'
  • expression_dtstamp Char
    default='record.write_date' help='You can use variables `record` and `user` here' string='DTSTAMP' vevent_field='dtstamp'
  • expression_dtstart Char
    help='You can use variables `record` and `user` here' string='DTSTART' vevent_field='dtstart'
  • expression_summary Char
    default='record.display_name' help='You can use variables `record` and `user` here' string='SUMMARY' vevent_field='summary'
  • expression_uid Char
    help='You can use variables `record` and `user` here' string='UID' vevent_field='uid'
  • help_text Html
    compute='_compute_help'
  • mode Selection
    default='simple' required=True args: '_get_operating_modes'
  • model Char
    related='model_id.model' args: 'Model Name'
  • model_id Many2one → ir.model
    ondelete='cascade' required=True args: 'ir.model'
  • name Char
    required=True translate=True
  • preview Text
    compute='_compute_preview'
Public methods (4)
  • action_new_url(self)
    Create or activate current user's token
  • create(self, vals_list)
    @api.model_create_multi
    Enable calendar for all users if auto flag is checked
  • default_variables(self)
  • write(self, vals)
    Enable calendar for all users if auto flag is checked

New fields (2)
  • calendar_id Many2one → base.ical
    required=True args: 'base.ical'
  • name Char
    required=True args: 'Description'
Public methods (1)
  • make_url(self)
    @check_identity

New fields (2)
  • id Id
  • url Char
    readonly=True
Public methods (0)

No public methods.

New fields (1)
  • ical_ids One2many → base.ical
    compute='_compute_ical_ids' args: 'base.ical'
Public methods (2)
  • SELF_READABLE_FIELDS(self)
    @property
  • create(self, vals_list)
    @api.model_create_multi