Content
View differences
Updated by Marc Alcobé over 3 years ago
# User Story
**As a** project team member
**I want t**o see my project calendar in my personal calendar
**So that** I don't have to maintain two different calendars to organize my work.
# Use case examples
1. Release dates and other project milestones
2. Submission deadlines of artefacts that require collaboration with other team members
3. Extend certificats (e.g. SSL, SMIME)
While trying to introduce OpenProject in a team that I’m part of, I realised that there is no way to integrate the calendar with MS Outlook, Apple Calendar, Google Calendar, and the likes. It would greatly increase the visibility of project planning if people were able to see changes in their preferred calendar apps, instead of having to check the OpenProject calendar webpage. Export functionality would provide a very natural means to integrate OpenProject with existing planning and coordination routines established in teams (most of which will be using a calendar app of sorts).
# Acceptance criteria
* Separate project permission
* Menu entry to create and copy URL
* Caching
* The calendar invite includes the main information of the workpackage
* The iCalendar-token can be revoked in "My account -> Access tokens"
# Attribute mapping
<figure class="table op-uc-figure_align-center op-uc-figure"><table class="op-uc-table"><thead class="op-uc-table--head"><tr class="op-uc-table--row"><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">Example</th><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">Work package attribute</th><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">mapped ics attribute</th><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">OX UI</th><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">Thunderbird UI</th><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">iOS UI</th></tr></thead><tbody><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">workPackageValue:15339:subject</td><td class="op-uc-p op-uc-table--cell">Subject</td><td class="op-uc-p op-uc-table--cell">SUMMARY</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell">Title</td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">workPackageValue:15339:status</td><td class="op-uc-p op-uc-table--cell">Status</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">workPackageValue:15339:author</td><td class="op-uc-p op-uc-table--cell">Author</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell">Status</td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">Delivering the first version of the new fancy product.</td><td class="op-uc-p op-uc-table--cell">Description</td><td class="op-uc-p op-uc-table--cell">DESCRIPTION</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">workPackageValue:15339:startDate</td><td class="op-uc-p op-uc-table--cell">Start date</td><td class="op-uc-p op-uc-table--cell">DTSTART</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell">Start Date</td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">workPackageValue:15339:dueDate</td><td class="op-uc-p op-uc-table--cell">Finish date</td><td class="op-uc-p op-uc-table--cell">DTEND</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell">End Date</td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">workPackageValue:15339:priority</td><td class="op-uc-p op-uc-table--cell">Priority</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">workPackageValue:15339:type</td><td class="op-uc-p op-uc-table--cell">Work package type</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">workPackageValue:15339:id</td><td class="op-uc-p op-uc-table--cell">Work package ID</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell">LOCATION</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell">Work package URL</td><td class="op-uc-p op-uc-table--cell">URL</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell">Calendar title (query title)</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td></tr></tbody></table></figure>
# Figma link
https://www.figma.com/file/fIFszjTJWyd0p94SXjih58/Calendar-view?node-id=111%3A7801
# ToDo
* [ ] Update mockups
* [x] [ ] URL: [https://openproject.example.com/projects/demo-project/calendars/27.ics?ical\_token=c6ec6fea407cb0eca52db380daefacbe](https://openproject.example.com/projects/demo-project/calendars/27.ics?ical_token=c6ec6fea407cb0eca52db380daefacbe)
* [ ] Screen to revoke all tokens (not separately)
* [ ] Calendar entry
* [ ] OX
* [ ] Thunderbird
* [ ] iOS
* [ ] Android
* [x] [ ] Add link to mockup here: https://www.figma.com/file/fIFszjTJWyd0p94SXjih58/Calendar-view?node-id=111%3A7801 here
* [ ] Specify permissions
* [ ] Investigate the capabilities to use emojis to visualise visualize content
* [ ] Work package type
* [ ] Status
* [ ] Priority
* [ ] Investigate if we can use the field "status" for any work package status such as "scheduled"
# Out of scope
* CalDAV (we focus on ics-files for now)
* Update calendar entries in the calendar applications (read-only, no bi-directional sync)
**As a** project team member
**I want t**o see my project calendar in my personal calendar
**So that** I don't have to maintain two different calendars to organize my work.
# Use case examples
1. Release dates and other project milestones
2. Submission deadlines of artefacts that require collaboration with other team members
3. Extend certificats (e.g. SSL, SMIME)
While trying to introduce OpenProject in a team that I’m part of, I realised that there is no way to integrate the calendar with MS Outlook, Apple Calendar, Google Calendar, and the likes. It would greatly increase the visibility of project planning if people were able to see changes in their preferred calendar apps, instead of having to check the OpenProject calendar webpage. Export functionality would provide a very natural means to integrate OpenProject with existing planning and coordination routines established in teams (most of which will be using a calendar app of sorts).
# Acceptance criteria
* Separate project permission
* Menu entry to create and copy URL
* Caching
* The calendar invite includes the main information of the workpackage
* The iCalendar-token can be revoked in "My account -> Access tokens"
# Attribute mapping
<figure class="table op-uc-figure_align-center op-uc-figure"><table class="op-uc-table"><thead class="op-uc-table--head"><tr class="op-uc-table--row"><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">Example</th><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">Work package attribute</th><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">mapped ics attribute</th><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">OX UI</th><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">Thunderbird UI</th><th class="op-uc-p op-uc-table--cell op-uc-table--cell_head">iOS UI</th></tr></thead><tbody><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">workPackageValue:15339:subject</td><td class="op-uc-p op-uc-table--cell">Subject</td><td class="op-uc-p op-uc-table--cell">SUMMARY</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell">Title</td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">workPackageValue:15339:status</td><td class="op-uc-p op-uc-table--cell">Status</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">workPackageValue:15339:author</td><td class="op-uc-p op-uc-table--cell">Author</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell">Status</td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">Delivering the first version of the new fancy product.</td><td class="op-uc-p op-uc-table--cell">Description</td><td class="op-uc-p op-uc-table--cell">DESCRIPTION</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">workPackageValue:15339:startDate</td><td class="op-uc-p op-uc-table--cell">Start date</td><td class="op-uc-p op-uc-table--cell">DTSTART</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell">Start Date</td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">workPackageValue:15339:dueDate</td><td class="op-uc-p op-uc-table--cell">Finish date</td><td class="op-uc-p op-uc-table--cell">DTEND</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell">End Date</td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">workPackageValue:15339:priority</td><td class="op-uc-p op-uc-table--cell">Priority</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">workPackageValue:15339:type</td><td class="op-uc-p op-uc-table--cell">Work package type</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell">workPackageValue:15339:id</td><td class="op-uc-p op-uc-table--cell">Work package ID</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell">LOCATION</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell">Work package URL</td><td class="op-uc-p op-uc-table--cell">URL</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td></tr><tr class="op-uc-table--row"><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell">Calendar title (query title)</td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td><td class="op-uc-p op-uc-table--cell"></td></tr></tbody></table></figure>
# Figma link
https://www.figma.com/file/fIFszjTJWyd0p94SXjih58/Calendar-view?node-id=111%3A7801
# ToDo
* [ ] Update mockups
* [x]
* [ ] Screen to revoke all tokens (not separately)
* [ ] Calendar entry
* [ ] OX
* [ ] Thunderbird
* [ ] iOS
* [ ] Android
* [x]
* [ ] Specify permissions
* [ ] Investigate the capabilities to use emojis to visualise
* [ ] Work package type
* [ ] Status
* [ ] Priority
* [ ] Investigate if we can use the field "status" for any work package status such as "scheduled"
# Out of scope
* CalDAV (we focus on ics-files for now)
* Update calendar entries in the calendar applications (read-only, no bi-directional sync)