Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
131 changes: 131 additions & 0 deletions calendar_import_ics/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association

=====================
Calendar - Import ics
=====================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:0b76e943a6186b958123d04eef313d6d66e7b9361daf4122b045fbca02b88b23
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcalendar-lightgray.png?logo=github
:target: https://github.com/OCA/calendar/tree/19.0/calendar_import_ics
:alt: OCA/calendar
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/calendar-19-0/calendar-19-0-calendar_import_ics
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/calendar&target_branch=19.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

This addon adds a Calendar wizard for uploading an iCalendar (``.ics``)
file. It creates calendar events from the file and uses each event's
unique identifier (UID) to update the same event on a later import. It
imports event descriptions and supports timed events, all-day events,
time zones, and basic repeating rules.

**Table of contents**

.. contents::
:local:

Usage
=====

**Before you start.** The **Import Ics File** menu is hidden until an
administrator assigns your user to the **Calendar Import Ics** access
group. In developer mode, the administrator can open **Settings → Users
& Companies → Groups**, find that group, and add your user. An ICS file
is a calendar exchange file with a ``.ics`` extension. Each event needs
a unique identifier (UID), a title, a start, and an end. The wizard
imports events into your own Odoo calendar.

1. In the **Calendar** app, open **Configuration** and select **Import
Ics File**. The import form appears.
2. Set **Start Import Date** if events must start on or after that date.
Leave it empty to include earlier events.
3. Set **End Import Date** if events must end on or before that date.
Leave it empty to include later events. Both date filters must be
empty when the file contains a repeating event.
4. Review **Remove old events?**. It is selected by default. When
selected, the import removes events previously imported for your
calendar that are missing from this file within the selected date
range. Clear it if the file is only a partial calendar export or if
you want to retain earlier imports. Events shared with another person
remain on that person's calendar.
5. Upload the ``.ics`` file in the file field and select **Import**.
Odoo creates new events and updates existing events with the same
UID. Importing the same file again should not create extra events.

**Check the result and handle errors.** Open the **Calendar** app and
check an imported event's title, description, and dates. Outlook
formatting in ``X-ALT-DESC`` is imported when it contains HTML, but an
image with an empty ``src`` in the ICS file cannot be displayed. For
example, an all-day event that starts on 1 September and has an
exclusive ICS end date of 3 September appears in Odoo on 1 and 2
September. A timed event is converted from its ICS time zone to the
corresponding Odoo time.

If Odoo rejects the file, correct it and upload it again. The wizard
rejects malformed files, events without required fields, and recurrence
exceptions such as ``EXDATE`` or ``RECURRENCE-ID``. A rejected import
does not complete its cleanup step. Date filters for timed events use
their UTC dates, so events near midnight can fall on a different date
from the local calendar view.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/calendar/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/calendar/issues/new?body=module:%20calendar_import_ics%0Aversion:%2019.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
-------

* ForgeFlow S.L.

Contributors
------------

- Arnau Cruz <arnau.cruz@forgeflow.com>

Do not contact contributors directly about support or help with
technical issues.

Maintainers
-----------

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

This module is part of the `OCA/calendar <https://github.com/OCA/calendar/tree/19.0/calendar_import_ics>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
2 changes: 2 additions & 0 deletions calendar_import_ics/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import wizards
from . import models
18 changes: 18 additions & 0 deletions calendar_import_ics/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright (C) 2024 - ForgeFlow S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

{
"name": "Calendar - Import ics",
"summary": "Allow importing an ics file to our calendar",
"version": "19.0.1.0.0",
"author": "ForgeFlow S.L.,Odoo Community Association (OCA)",
"website": "https://github.com/OCA/calendar",
"license": "AGPL-3",
"depends": ["calendar"],
"external_dependencies": {"python": ["vobject"]},
"data": [
"security/calendar_import_security.xml",
"security/ir.model.access.csv",
"wizards/wizard_import_ics.xml",
],
}
115 changes: 115 additions & 0 deletions calendar_import_ics/i18n/calendar_import_ics.pot
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * calendar_import_ics
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: calendar_import_ics
#: model:ir.model,name:calendar_import_ics.model_calendar_event
msgid "Calendar Event"
msgstr ""

#. module: calendar_import_ics
#: model:ir.model,name:calendar_import_ics.model_calendar_import_ics
#: model:res.groups,name:calendar_import_ics.group_calendar_import
msgid "Calendar Import Ics"
msgstr ""

#. module: calendar_import_ics
#: model_terms:ir.ui.view,arch_db:calendar_import_ics.calendar_import_ics_form
msgid "Cancel"
msgstr ""

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__create_uid
msgid "Created by"
msgstr ""

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__create_date
msgid "Created on"
msgstr ""

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__display_name
msgid "Display Name"
msgstr ""

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__import_end_date
msgid "End Import Date"
msgstr ""

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_event__event_identifier
msgid "Event Id"
msgstr ""

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__id
msgid "ID"
msgstr ""

#. module: calendar_import_ics
#: model:ir.model.fields,help:calendar_import_ics.field_calendar_import_ics__do_remove_old_event
msgid ""
"If checked, the previously imported events that are not in this import will "
"be deleted"
msgstr ""

#. module: calendar_import_ics
#: model_terms:ir.ui.view,arch_db:calendar_import_ics.calendar_import_ics_form
msgid "Import"
msgstr ""

#. module: calendar_import_ics
#: model:ir.actions.act_window,name:calendar_import_ics.action_import_ics_wizard
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__import_ics_file
#: model:ir.ui.menu,name:calendar_import_ics.menu_calendar_import_ics
msgid "Import Ics File"
msgstr ""

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__import_ics_filename
msgid "Import Ics Filename"
msgstr ""

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__write_uid
msgid "Last Updated by"
msgstr ""

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__write_date
msgid "Last Updated on"
msgstr ""

#. module: calendar_import_ics
#. odoo-python
#: code:addons/calendar_import_ics/wizards/wizard_import_ics.py:0
msgid "Only ics files are supported"
msgstr ""

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__partner_id
msgid "Partner"
msgstr ""

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__do_remove_old_event
msgid "Remove old events?"
msgstr ""

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__import_start_date
msgid "Start Import Date"
msgstr ""
120 changes: 120 additions & 0 deletions calendar_import_ics/i18n/it.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * calendar_import_ics
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-08-08 14:26+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.10.4\n"

#. module: calendar_import_ics
#: model:ir.model,name:calendar_import_ics.model_calendar_event
msgid "Calendar Event"
msgstr "Evento calendario"

#. module: calendar_import_ics
#: model:ir.model,name:calendar_import_ics.model_calendar_import_ics
#: model:res.groups,name:calendar_import_ics.group_calendar_import
msgid "Calendar Import Ics"
msgstr "Importa calendario ics"

#. module: calendar_import_ics
#: model_terms:ir.ui.view,arch_db:calendar_import_ics.calendar_import_ics_form
msgid "Cancel"
msgstr "Annulla"

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__create_uid
msgid "Created by"
msgstr "Creato da"

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__create_date
msgid "Created on"
msgstr "Creato il"

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__display_name
msgid "Display Name"
msgstr "Nome visualizzato"

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__import_end_date
msgid "End Import Date"
msgstr "Data fine importazione"

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_event__event_identifier
msgid "Event Id"
msgstr "ID evento"

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__id
msgid "ID"
msgstr "ID"

#. module: calendar_import_ics
#: model:ir.model.fields,help:calendar_import_ics.field_calendar_import_ics__do_remove_old_event
msgid ""
"If checked, the previously imported events that are not in this import will "
"be deleted"
msgstr ""
"Se selezionata, gli eventi precedentemente importati che non sono in questa "
"importazione saranno cancellati"

#. module: calendar_import_ics
#: model_terms:ir.ui.view,arch_db:calendar_import_ics.calendar_import_ics_form
msgid "Import"
msgstr "Importa"

#. module: calendar_import_ics
#: model:ir.actions.act_window,name:calendar_import_ics.action_import_ics_wizard
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__import_ics_file
#: model:ir.ui.menu,name:calendar_import_ics.menu_calendar_import_ics
msgid "Import Ics File"
msgstr "Importa file ics"

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__import_ics_filename
msgid "Import Ics Filename"
msgstr "Nome file importazione ics"

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__write_uid
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__write_date
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"

#. module: calendar_import_ics
#. odoo-python
#: code:addons/calendar_import_ics/wizards/wizard_import_ics.py:0
msgid "Only ics files are supported"
msgstr "Sono supportati solo i file ics"

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__partner_id
msgid "Partner"
msgstr "Partner"

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__do_remove_old_event
msgid "Remove old events?"
msgstr "Rimuovere i vecchi eventi?"

#. module: calendar_import_ics
#: model:ir.model.fields,field_description:calendar_import_ics.field_calendar_import_ics__import_start_date
msgid "Start Import Date"
msgstr "Data inizio importazione"
Loading
Loading