Welcome | Get started | Dive | Contribute | Topics | Reference | Changes | More
calview
: Calendar view¶
The lino_xl.lib.calview
plugin adds a calendar view.
Side note: Code snippets (lines starting with >>>
) in this document get
tested as part of our development workflow. The following
initialization snippet tells you which demo project is being used in
this document.
>>> from lino import startup
>>> startup('lino_book.projects.avanti1.settings')
>>> from lino.api.doctest import *
>>> ar = rt.login("robin")
Calendar views¶
- class lino_xl.lib.calview.CalendarView¶
Base class for all calendar views.
A calendar view is a virtual table that opens in detail view by default, the grid view is useless.
The detail of a calendar view varies, but it usually shows at least one slave table, which is usually a subclass of
DaySlave
.
- class lino_xl.lib.calview.DailyView¶
Shows a calendar navigator with a configurable daily view.
Inherits from
CalendarView
.- insert_event¶
Custom action for inserting a calendar entry in the DailyView.
Returns an eval_js that equates to running the insert window action for Events with the correct known values.
- class lino_xl.lib.calview.WeeklyView¶
Shows a calendar navigator with a configurable weekly view.
Inherits from
CalendarView
.
- class lino_xl.lib.calview.MonthlyView¶
Shows a calendar navigator with a configurable monthly view.
Inherits from
CalendarView
.
The calendar views¶
>>> day = calview.WeeklyView.get_row_by_pk(ar, 0)
>>> def doit(t):
... ar.show(t, master_instance=day, max_width=15)
>>> doit(calview.WeeklySlave)
+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+
| Time range | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday |
+=================+=================+=================+=================+=================+=================+=================+=================+
| `All day <…>`__ | **13****New** | **14****New** ` | ****15******New | **16****New** | **17****New** | **18****New** | **19****New** |
| | | ☒ romain Absent | ** ` ☑ rolf | ` ☐ Absent | ` ? romain | ` ☐ rolf | ` ? Absent |
| | | for private | Absent for | for private | Absent for | Absent for | for private |
| | | reasons <…>`__ | private reasons | reasons <…>`__ | private reasons | private reasons | reasons <…>`__ |
| | | | <…>`__ | | <…>`__ | <…>`__ | |
+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+
| `AM <…>`__ | ` 09:00 ? laura | ` 09:00 ? laura | ` 08:30 ☑ | ` 09:00 ? laura | ` 09:00 ? laura | | ` 08:30 ? |
| | Alphabetisation | Alphabetisation | romain Réunion | Alphabetisation | Alphabetisation | | Interview |
| | (16/01/2017) | (16/01/2017) | <…>`__ | (16/01/2017) | (16/01/2017) | | <…>`__` 09:40 ☐ |
| | Lesson 17 | Lesson 18 | | Lesson 19 | Lesson 20 | | romain Diner |
| | <…>`__` 09:40 ☑ | <…>`__` 11:10 ☑ | | <…>`__` 09:40 ? | <…>`__` 10:20 ☐ | | <…>`__ |
| | Interview | rolf Abendessen | | rolf Beratung | Seminar | | |
| | <…>`__` 10:20 ☒ | <…>`__ | | <…>`__ | <…>`__` 11:10 ? | | |
| | romain Diner | | | | romain | | |
| | <…>`__ | | | | Evaluation | | |
| | | | | | <…>`__ | | |
+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+
| `PM <…>`__ | ` 14:00 ? laura | ` 14:00 ? laura | ` 13:30 ☒ | ` 14:00 ? laura | ` 14:00 ? laura | ` 13:30 ☐ rolf | |
| | Alphabetisation | Alphabetisation | Breakfast | Alphabetisation | Alphabetisation | Erstgespräch | |
| | (16/01/2017) | (16/01/2017) | <…>`__ | (16/01/2017) | (16/01/2017) | <…>`__ | |
| | Lesson 17 | Lesson 18 | | Lesson 19 | Lesson 20 | | |
| | <…>`__` 18:00 ? | <…>`__` 18:00 ? | | <…>`__` 18:00 ? | <…>`__` 18:00 ? | | |
| | laura | laura | | laura | laura | | |
| | Alphabetisation | Alphabetisation | | Alphabetisation | Alphabetisation | | |
| | (16/01/2017) | (16/01/2017) | | (16/01/2017) | (16/01/2017) | | |
| | Lesson 17 | Lesson 18 | | Lesson 19 | Lesson 20 | | |
| | <…>`__ | <…>`__ | | <…>`__ | <…>`__ | | |
+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+
>>> doit(calview.MonthlySlave)
+-------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+
| Week | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday |
+=======+=================+=================+=================+=================+=================+=================+=================+
| **5** | **30****New**` | **31****New** | **1****New**` 1 | **2****New** | **3****New**` 0 | **4****New** | **5****New**` 1 |
| | 08:30 ☒ Seminar | | 1:10 ☑ | | 9:40 ☒ | | 3:30 ☑ Seminar |
| | <…>`__ | | Interview | | Breakfast | | <…>`__ |
| | | | <…>`__ | | <…>`__ | | |
+-------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+
| **6** | **6****New** | **7****New**` 1 | **8****New** | **9****New**` 0 | **10****New** | **11****New**` | **12****New** |
| | | 0:20 ☒ | | 8:30 ☑ | | 11:10 ☒ Seminar | |
| | | Interview | | Breakfast | | <…>`__ | |
| | | <…>`__ | | <…>`__ | | | |
+-------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+
| **7** | **13****New**` | **14****New** | ****15******New | **16****New**` | **17****New** ` | **18****New** | **19****New** ` |
| | 09:40 ☑ | | **` 13:30 ☒ | ☐ Absent for | 10:20 ☐ | | ? Absent for |
| | Interview | | Breakfast | private reasons | Seminar <…>`__ | | private reasons |
| | <…>`__ | | <…>`__ | <…>`__ | | | <…>`__` 08:30 ? |
| | | | | | | | Interview |
| | | | | | | | <…>`__ |
+-------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+
| **8** | **20****New**` | **21****New** ` | **22****New** ` | **23****New** | **24****New** | **25****New** | **26****New** |
| | <…>`__ | 11:10 ☐ | ☐ Absent for | ` 09:40 ? | | ` 13:30 ☐ | |
| | | Breakfast | private reasons | Seminar <…>`__ | | Interview | |
| | | <…>`__ | <…>`__ | | | <…>`__ | |
+-------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+
| **9** | **27****New**` | **28****New** | **1****New**` 0 | **2****New** | **3****New**` 1 | **4****New** | **5****New**` 0 |
| | 10:20 ? | | 8:30 ☐ Seminar | | 1:10 ? | | 9:40 ☐ |
| | Breakfast | | <…>`__ | | Interview | | Breakfast |
| | <…>`__ | | | | <…>`__ | | <…>`__ |
+-------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+
>>> doit(calview.DailySlave)
+-----------------+-----------------+----------+
| Time range | External | Internal |
+=================+=================+==========+
| `All day <…>`__ | ` ☒ romain | |
| | Absent for | |
| | private reasons | |
| | <…>`__` ☑ rolf | |
| | Absent for | |
| | private reasons | |
| | <…>`__ | |
+-----------------+-----------------+----------+
| `AM <…>`__ | ` 08:30 ☑ | |
| | romain Réunion | |
| | <…>`__ | |
+-----------------+-----------------+----------+
| `PM <…>`__ | | |
+-----------------+-----------------+----------+
The daily planner¶
The daily planner is a table that shows an overview on all events of a day.
>>> rt.show(calview.DailyPlanner)
...
================= ========================================================================================== ==========
Time range External Internal
----------------- ------------------------------------------------------------------------------------------ ----------
`All day <…>`__ ` ☒ romain Absent for private reasons <…>`__` ☑ rolf Absent for private reasons <…>`__
`AM <…>`__ ` 08:30 ☑ romain Réunion <…>`__
`PM <…>`__
================= ========================================================================================== ==========
- class lino_xl.lib.calview.DailyPlanner¶
The virtual table used to render the daily planner.
- class lino_xl.lib.calview.PlannerColumns¶
A choicelist that defines the columns to appear in the daily planner. This list can be modified locally.
A default configuration has two columns in the daily planner:
>>> rt.show(calview.PlannerColumns)
======= ========== ==========
value name text
------- ---------- ----------
10 external External
20 internal Internal
======= ========== ==========
- class lino_xl.lib.calview.DailyPlannerRow¶
A database object that represents one row of the daily planner. The default configuration has “AM”, “PM” and “All day”.
>>> rt.show(calview.DailyPlannerRows)
===== ============= ================== ================== ============ ==========
No. Designation Designation (de) Designation (fr) Start time End time
----- ------------- ------------------ ------------------ ------------ ----------
1 AM Vormittags Avant-midi 12:00:00
2 PM Nachmittags Après-midi 12:00:00
===== ============= ================== ================== ============ ==========
Utilities¶
- class lino_xl.lib.calview.Day¶
An in-memory wrapper around a datetime.date instance.
A subclass of
lino.core.fields.TableRow
.- date¶
- pk¶
- ar¶
- class lino_xl.lib.calview.DaySlave¶
Table mixin for slave tables of tables on
Day
.Used by both database and virtual tables.
Base class for the three calendar views, but also used for independent tables like working.WorkedHours. A virtual table whose rows are calview.Day instances. Subclasses must set navigation_mode.
Inherits from
DaysTable
.
Class inheritance¶
Multiple “planners”¶
>>> rt.show(calview.Planners)
========= ========= ========== ===================== ==================== ===================
value name text Monthly view Weekly view Daily view
--------- --------- ---------- --------------------- -------------------- -------------------
default default Calendar calview.MonthlyView calview.WeeklyView calview.DailyView
========= ========= ========== ===================== ==================== ===================
The Day object¶
>>> from lino_xl.lib.calview.mixins import Day
>>> modes = ('day', 'week', 'month')
>>> headers = ["Offset"] + list(modes)
>>> rows = []
>>> for offset in (0, -10, 15):
... cells = [str(offset)]
... for nm in modes:
... cells.append(str(Day(offset, ar, nm)))
... rows.append(cells)
>>> print(table(headers, rows))
======== ============================ ============================= ===============
Offset day week month
-------- ---------------------------- ----------------------------- ---------------
0 Wednesday 15 February 2017 Week 7 / 2017 (13 February) February 2017
-10 Sunday 5 February 2017 Week 5 / 2017 (30 January) February 2017
15 Thursday 2 March 2017 Week 9 / 2017 (27 February) March 2017
======== ============================ ============================= ===============
7 October 2015 : Wednesday or Saturday?¶
Trying to understand #5610 (calview.WeeklyView renders the weekdays wrong)
The 2015-10-07 is a Wednesday:
>>> offset = -497
>>> print(dd.today(offset))
2015-10-07
>>> day = calview.DailyView.get_row_by_pk(ar, offset)
>>> print(day)
Wednesday 7 October 2015
>>> ar.show(calview.WeeklySlave, master_instance=day, max_width=10)
+------------+------------+------------+------------+------------+------------+------------+------------+
| Time range | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday |
+============+============+============+============+============+============+============+============+
| `All day | **5****New | **6****New | **7****New | **8****New | **9****New | **10****Ne | **11****Ne |
| <…>`__ | ** | ** | ** | ** | ** | w** | w** |
+------------+------------+------------+------------+------------+------------+------------+------------+
| `AM <…>`__ | | | | | | | |
+------------+------------+------------+------------+------------+------------+------------+------------+
| `PM <…>`__ | | | | | | | |
+------------+------------+------------+------------+------------+------------+------------+------------+