[tryton-debian-vcs] tryton-modules-calendar-todo branch debian updated. debian/3.4.1-1-2-gf219c29

Mathias Behrle tryton-debian-vcs at alioth.debian.org
Thu Apr 23 16:03:15 UTC 2015


The following commit has been merged in the debian branch:
https://alioth.debian.org/plugins/scmgit/cgi-bin/gitweb.cgi/?p=tryton/tryton-modules-calendar-todo.git;a=commitdiff;h=debian/3.4.1-1-2-gf219c29

commit f219c2924ebd70f66e26ac26023eb25ea23168a4
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Thu Apr 23 16:59:55 2015 +0200

    Merging upstream version 3.6.0.

diff --git a/CHANGELOG b/CHANGELOG
index 5945e8c..63eb9c6 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,7 @@
-Version 3.4.1 - 2015-03-01
+Version 3.6.0 - 2015-04-20
 * Bug fixes (see mercurial logs for details)
+* Add support for PyPy
+* Add full access to calendar admin. group
 
 Version 3.4.0 - 2014-10-20
 * Bug fixes (see mercurial logs for details)
diff --git a/PKG-INFO b/PKG-INFO
index 29300b5..7c24e9c 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: trytond_calendar_todo
-Version: 3.4.1
+Version: 3.6.0
 Summary: Tryton module to add TODO on CalDAV
 Home-page: http://www.tryton.org/
 Author: Tryton
 Author-email: issue_tracker at tryton.org
 License: GPL-3
-Download-URL: http://downloads.tryton.org/3.4/
+Download-URL: http://downloads.tryton.org/3.6/
 Description: trytond_calendar_todo
         =====================
         
@@ -66,4 +66,6 @@ Classifier: Natural Language :: Slovenian
 Classifier: Natural Language :: Spanish
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Office/Business
diff --git a/__init__.py b/__init__.py
index 5092231..1b3a3b9 100644
--- a/__init__.py
+++ b/__init__.py
@@ -1,5 +1,5 @@
-#This file is part of Tryton.  The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# This file is part of Tryton.  The COPYRIGHT file at the top level of
+# this repository contains the full copyright notices and license terms.
 
 from trytond.pool import Pool
 from . import caldav
diff --git a/caldav.py b/caldav.py
index b5f32b3..58a8773 100644
--- a/caldav.py
+++ b/caldav.py
@@ -1,5 +1,5 @@
-#This file is part of Tryton.  The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# This file is part of Tryton.  The COPYRIGHT file at the top level of
+# this repository contains the full copyright notices and license terms.
 from pywebdav.lib import propfind
 from pywebdav.lib.utils import get_uriparentpath
 from trytond.protocols.webdav import TrytonDAVInterface
@@ -13,13 +13,13 @@ def mk_prop_response(self, uri, good_props, bad_props, doc):
     if not parent_uri:
         return res
     dbname, parent_uri = TrytonDAVInterface.get_dburi(parent_uri)
-    #Disable groupdav attribute for iPhone
-    #if  parent_uri in ('Calendars', 'Calendars/'):
-    #    vc = doc.createElement('vtodo-collection')
-    #    vc.setAttribute('xmlns', 'http://groupdav.org/')
-    #    cols = res.getElementsByTagName('D:collection')
-    #    if cols:
-    #        cols[0].parentNode.appendChild(vc)
+    # Disable groupdav attribute for iPhone
+    # if  parent_uri in ('Calendars', 'Calendars/'):
+    #     vc = doc.createElement('vtodo-collection')
+    #     vc.setAttribute('xmlns', 'http://groupdav.org/')
+    #     cols = res.getElementsByTagName('D:collection')
+    #     if cols:
+    #         cols[0].parentNode.appendChild(vc)
     return res
 
 propfind.PROPFIND.mk_prop_response = mk_prop_response
diff --git a/locale/bg_BG.po b/locale/bg_BG.po
index 96b9317..b3879b6 100644
--- a/locale/bg_BG.po
+++ b/locale/bg_BG.po
@@ -102,18 +102,6 @@ msgctxt "field:calendar.todo,calendar:"
 msgid "Calendar"
 msgstr "Календар"
 
-msgctxt "field:calendar.todo,calendar_owner:"
-msgid "Owner"
-msgstr "Собственик"
-
-msgctxt "field:calendar.todo,calendar_read_users:"
-msgid "Read Users"
-msgstr "Потребители с права за четене"
-
-msgctxt "field:calendar.todo,calendar_write_users:"
-msgid "Write Users"
-msgstr "Записване на потребители"
-
 msgctxt "field:calendar.todo,categories:"
 msgid "Categories"
 msgstr "Категории"
diff --git a/locale/ca_ES.po b/locale/ca_ES.po
index 950fd97..fbe2818 100644
--- a/locale/ca_ES.po
+++ b/locale/ca_ES.po
@@ -110,18 +110,6 @@ msgctxt "field:calendar.todo,calendar:"
 msgid "Calendar"
 msgstr "Calendari"
 
-msgctxt "field:calendar.todo,calendar_owner:"
-msgid "Owner"
-msgstr "Propietaris"
-
-msgctxt "field:calendar.todo,calendar_read_users:"
-msgid "Read Users"
-msgstr "Usuaris amb permisos de lectura"
-
-msgctxt "field:calendar.todo,calendar_write_users:"
-msgid "Write Users"
-msgstr "Usuaris amb permisos d'escriptura"
-
 msgctxt "field:calendar.todo,categories:"
 msgid "Categories"
 msgstr "Categories"
@@ -148,7 +136,7 @@ msgstr "Descripció"
 
 msgctxt "field:calendar.todo,dtstart:"
 msgid "Start Date"
-msgstr "Data inici"
+msgstr "Data inicial"
 
 msgctxt "field:calendar.todo,due:"
 msgid "Due Date"
@@ -877,6 +865,10 @@ msgid "Categories"
 msgstr "Categories"
 
 msgctxt "view:calendar.todo:"
+msgid "Due Time"
+msgstr "Hora de venciment"
+
+msgctxt "view:calendar.todo:"
 msgid "General"
 msgstr "General"
 
@@ -885,6 +877,10 @@ msgid "Occurences"
 msgstr "Ocurrències"
 
 msgctxt "view:calendar.todo:"
+msgid "Start Time"
+msgstr "Hora d'inici"
+
+msgctxt "view:calendar.todo:"
 msgid "Todo"
 msgstr "Tasca"
 
diff --git a/locale/cs_CZ.po b/locale/cs_CZ.po
index 7254d90..8b7670a 100644
--- a/locale/cs_CZ.po
+++ b/locale/cs_CZ.po
@@ -102,18 +102,6 @@ msgctxt "field:calendar.todo,calendar:"
 msgid "Calendar"
 msgstr ""
 
-msgctxt "field:calendar.todo,calendar_owner:"
-msgid "Owner"
-msgstr ""
-
-msgctxt "field:calendar.todo,calendar_read_users:"
-msgid "Read Users"
-msgstr ""
-
-msgctxt "field:calendar.todo,calendar_write_users:"
-msgid "Write Users"
-msgstr ""
-
 msgctxt "field:calendar.todo,categories:"
 msgid "Categories"
 msgstr ""
diff --git a/locale/de_DE.po b/locale/de_DE.po
index 20c70d1..2f4c9c4 100644
--- a/locale/de_DE.po
+++ b/locale/de_DE.po
@@ -103,18 +103,6 @@ msgctxt "field:calendar.todo,calendar:"
 msgid "Calendar"
 msgstr "Kalender"
 
-msgctxt "field:calendar.todo,calendar_owner:"
-msgid "Owner"
-msgstr "Besitzer"
-
-msgctxt "field:calendar.todo,calendar_read_users:"
-msgid "Read Users"
-msgstr "Benutzer mit Leseberechtigung"
-
-msgctxt "field:calendar.todo,calendar_write_users:"
-msgid "Write Users"
-msgstr "Benutzer mit Schreibberechtigung"
-
 msgctxt "field:calendar.todo,categories:"
 msgid "Categories"
 msgstr "Kategorien"
@@ -341,7 +329,7 @@ msgstr "Erstellt durch"
 
 msgctxt "field:calendar.todo.exdate,date:"
 msgid "Is Date"
-msgstr "Als Datum"
+msgstr "Nur Datum verwenden"
 
 msgctxt "field:calendar.todo.exdate,datetime:"
 msgid "Date"
@@ -441,7 +429,7 @@ msgstr "Bis Datum"
 
 msgctxt "field:calendar.todo.exrule,until_date:"
 msgid "Is Date"
-msgstr "Als Datum"
+msgstr "Nur Datum verwenden"
 
 msgctxt "field:calendar.todo.exrule,wkst:"
 msgid "Week Day"
@@ -465,7 +453,7 @@ msgstr "Erstellt durch"
 
 msgctxt "field:calendar.todo.rdate,date:"
 msgid "Is Date"
-msgstr "Als Datum"
+msgstr "Nur Datum verwenden"
 
 msgctxt "field:calendar.todo.rdate,datetime:"
 msgid "Date"
@@ -565,7 +553,7 @@ msgstr "Bis Datum"
 
 msgctxt "field:calendar.todo.rrule,until_date:"
 msgid "Is Date"
-msgstr "Als Datum"
+msgstr "Nur Datum verwenden"
 
 msgctxt "field:calendar.todo.rrule,wkst:"
 msgid "Week Day"
@@ -876,6 +864,10 @@ msgid "Categories"
 msgstr "Kategorien"
 
 msgctxt "view:calendar.todo:"
+msgid "Due Time"
+msgstr "Fälligkeitszeit"
+
+msgctxt "view:calendar.todo:"
 msgid "General"
 msgstr "Allgemein"
 
@@ -884,6 +876,10 @@ msgid "Occurences"
 msgstr "Ereignisse"
 
 msgctxt "view:calendar.todo:"
+msgid "Start Time"
+msgstr "Anfangszeit"
+
+msgctxt "view:calendar.todo:"
 msgid "Todo"
 msgstr "Aufgabe"
 
diff --git a/locale/es_AR.po b/locale/es_AR.po
index 2028143..e5cfa91 100644
--- a/locale/es_AR.po
+++ b/locale/es_AR.po
@@ -114,18 +114,6 @@ msgctxt "field:calendar.todo,calendar:"
 msgid "Calendar"
 msgstr "Calendario"
 
-msgctxt "field:calendar.todo,calendar_owner:"
-msgid "Owner"
-msgstr "Dueño"
-
-msgctxt "field:calendar.todo,calendar_read_users:"
-msgid "Read Users"
-msgstr "Usuarios con lectura"
-
-msgctxt "field:calendar.todo,calendar_write_users:"
-msgid "Write Users"
-msgstr "Usuarios con escritura"
-
 msgctxt "field:calendar.todo,categories:"
 msgid "Categories"
 msgstr "Categorías"
@@ -152,7 +140,7 @@ msgstr "Descripción"
 
 msgctxt "field:calendar.todo,dtstart:"
 msgid "Start Date"
-msgstr "Fecha inicio"
+msgstr "Fecha inicial"
 
 msgctxt "field:calendar.todo,due:"
 msgid "Due Date"
@@ -881,6 +869,10 @@ msgid "Categories"
 msgstr "Categorías"
 
 msgctxt "view:calendar.todo:"
+msgid "Due Time"
+msgstr "Hora prevista"
+
+msgctxt "view:calendar.todo:"
 msgid "General"
 msgstr "General"
 
@@ -889,6 +881,10 @@ msgid "Occurences"
 msgstr "Ocurrencias"
 
 msgctxt "view:calendar.todo:"
+msgid "Start Time"
+msgstr "Hora de inicio"
+
+msgctxt "view:calendar.todo:"
 msgid "Todo"
 msgstr "Tarea"
 
diff --git a/locale/es_CO.po b/locale/es_CO.po
index 4971dd1..6525472 100644
--- a/locale/es_CO.po
+++ b/locale/es_CO.po
@@ -102,18 +102,6 @@ msgctxt "field:calendar.todo,calendar:"
 msgid "Calendar"
 msgstr "Calendario"
 
-msgctxt "field:calendar.todo,calendar_owner:"
-msgid "Owner"
-msgstr "Propietario"
-
-msgctxt "field:calendar.todo,calendar_read_users:"
-msgid "Read Users"
-msgstr "Leer Usuarios"
-
-msgctxt "field:calendar.todo,calendar_write_users:"
-msgid "Write Users"
-msgstr "Modificado por Usuario"
-
 msgctxt "field:calendar.todo,categories:"
 msgid "Categories"
 msgstr "Categorías"
@@ -871,6 +859,10 @@ msgid "Categories"
 msgstr "Categorías"
 
 msgctxt "view:calendar.todo:"
+msgid "Due Time"
+msgstr "Fecha Debida"
+
+msgctxt "view:calendar.todo:"
 msgid "General"
 msgstr "General"
 
@@ -879,6 +871,10 @@ msgid "Occurences"
 msgstr "Ocurrencias"
 
 msgctxt "view:calendar.todo:"
+msgid "Start Time"
+msgstr "Fecha de Inicio"
+
+msgctxt "view:calendar.todo:"
 msgid "Todo"
 msgstr "Pendiente"
 
diff --git a/locale/es_EC.po b/locale/es_EC.po
index 4886219..98f9271 100644
--- a/locale/es_EC.po
+++ b/locale/es_EC.po
@@ -4,87 +4,91 @@ msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:calendar.todo.exrule:"
 msgid "Invalid \"By Day\" in recurrence rule \"%s\""
-msgstr "No válido campo \"Por Día\" en regla de recurrencia \"%s\""
+msgstr "El campo \"Por Día\" de la regla de recurrencia \"%s\" no es válido."
 
 msgctxt "error:calendar.todo.exrule:"
 msgid "Invalid \"By Hour\" in recurrence rule \"%s\""
-msgstr "No válido campo \"Por Hora\" en regla de recurrencia \"%s\""
+msgstr "El campo \"Por Hora\" de la regla de recurrencia \"%s\" no es válido."
 
 msgctxt "error:calendar.todo.exrule:"
 msgid "Invalid \"By Minute\" in recurrence rule \"%s\""
-msgstr "No válido campo \"Por Minuto\" en regla de recurrencia \"%s\""
+msgstr "El campo \"Por Minuto\" de la regla de recurrencia \"%s\" no es válido."
 
 msgctxt "error:calendar.todo.exrule:"
 msgid "Invalid \"By Month Day\" in recurrence rule \"%s\""
-msgstr "No válido campo \"Por Día del Mes\" en regla de recurrencia \"%s\""
+msgstr "El campo \"Por Día del Mes\" de la regla de recurrencia \"%s\" no es válido."
 
 msgctxt "error:calendar.todo.exrule:"
 msgid "Invalid \"By Month\" in recurrence rule \"%s\""
-msgstr "No válido campo \"Por Mes\" en regla de recurrencia \"%s\""
+msgstr "El campo \"Por Mes\" de la regla de recurrencia \"%s\" no es válido."
 
 msgctxt "error:calendar.todo.exrule:"
 msgid "Invalid \"By Position\" in recurrence rule \"%s\""
-msgstr "No válido campo \"Por Posición\" en regla de recurrencia \"%s\""
+msgstr "El campo \"Por Ubicación\" de la regla de recurrencia \"%s\" no es válido."
 
 msgctxt "error:calendar.todo.exrule:"
 msgid "Invalid \"By Second\" in recurrence rule \"%s\""
-msgstr "No válido campo \"Por Segundo\" en regla de recurrencia \"%s\""
+msgstr "El campo \"Por Segundo\" de la regla de recurrencia \"%s\" no es válido."
 
 msgctxt "error:calendar.todo.exrule:"
 msgid "Invalid \"By Week Number\" in recurrence rule \"%s\""
-msgstr "No válido campo \"Por Número de la Semana\" en regla de recurrencia \"%s\""
+msgstr ""
+"El campo \"Por Número de la Semana\" de la regla de recurrencia \"%s\" no es"
+" válido."
 
 msgctxt "error:calendar.todo.exrule:"
 msgid "Invalid \"By Year Day\" in recurrence rule \"%s\""
-msgstr "No válido campo \"Por Día del Año\" en regla de recurrencia \"%s\""
+msgstr "El campo \"Por Día del Año\" de la regla de recurrencia \"%s\" no es válido."
 
 msgctxt "error:calendar.todo.exrule:"
 msgid "Only one of \"until\" and \"count\" can be set."
-msgstr "Sólo un \"hasta\" y \"contar\" pude ser establecido."
+msgstr "¡Puede establecer \"hasta\" o bien \"nº de veces\", no ambos!"
 
 msgctxt "error:calendar.todo.rrule:"
 msgid "Invalid \"By Day\" in recurrence rule \"%s\""
-msgstr "No válido campo \"Por Día\" en regla de recurrencia \"%s\""
+msgstr "El campo \"Por Día\" de la regla de recurrencia \"%s\" no es válido."
 
 msgctxt "error:calendar.todo.rrule:"
 msgid "Invalid \"By Hour\" in recurrence rule \"%s\""
-msgstr "No válido campo \"Por Hora\" en regla de recurrencia \"%s\""
+msgstr "El campo \"Por Hora\" de la regla de recurrencia \"%s\" no es válido."
 
 msgctxt "error:calendar.todo.rrule:"
 msgid "Invalid \"By Minute\" in recurrence rule \"%s\""
-msgstr "No válido campo \"Por Minuto\" en regla de recurrencia \"%s\""
+msgstr "El campo \"Por Minuto\" de la regla de recurrencia \"%s\" no es válido."
 
 msgctxt "error:calendar.todo.rrule:"
 msgid "Invalid \"By Month Day\" in recurrence rule \"%s\""
-msgstr "No válido campo \"Por Día del Mes\" en regla de recurrencia \"%s\""
+msgstr "El campo \"Por Día del Mes\" de la regla de recurrencia \"%s\" no es válido."
 
 msgctxt "error:calendar.todo.rrule:"
 msgid "Invalid \"By Month\" in recurrence rule \"%s\""
-msgstr "No válido campo \"Por Mes\" en regla de recurrencia \"%s\""
+msgstr "El campo \"Por Mes\" de la regla de recurrencia \"%s\" no es válido."
 
 msgctxt "error:calendar.todo.rrule:"
 msgid "Invalid \"By Position\" in recurrence rule \"%s\""
-msgstr "No válido campo \"Por Posición\" en regla de recurrencia \"%s\""
+msgstr "El campo \"Por Ubicación\" de la regla de recurrencia \"%s\" no es válido."
 
 msgctxt "error:calendar.todo.rrule:"
 msgid "Invalid \"By Second\" in recurrence rule \"%s\""
-msgstr "No válido campo \"Por Segundo\" en regla de recurrencia \"%s\""
+msgstr "El campo \"Por Segundo\" de la regla de recurrencia \"%s\" no es válido."
 
 msgctxt "error:calendar.todo.rrule:"
 msgid "Invalid \"By Week Number\" in recurrence rule \"%s\""
-msgstr "No válido campo \"Por Número de la Semana\" en regla de recurrencia \"%s\""
+msgstr ""
+"El campo \"Por Número de la Semana\" de la regla de recurrencia \"%s\" no es"
+" válido."
 
 msgctxt "error:calendar.todo.rrule:"
 msgid "Invalid \"By Year Day\" in recurrence rule \"%s\""
-msgstr "No válido campo \"Por Día del Año\" en regla de recurrencia \"%s\""
+msgstr "El campo \"Por Día del Año\" de la regla de recurrencia \"%s\" no es válido."
 
 msgctxt "error:calendar.todo.rrule:"
 msgid "Only one of \"until\" and \"count\" can be set."
-msgstr "Solo un \"hasta\" y \"contar\" pude ser establecido!"
+msgstr "¡Puede establecer \"hasta\" o bien \"nº de veces\", no ambos!"
 
 msgctxt "error:calendar.todo:"
 msgid "Todo \"%s\" can not be recurrent."
-msgstr "La tarea pendiente \"%s\" no puede ser recurrente."
+msgstr "La tarea \"%s\" no puede ser recurrente."
 
 msgctxt "error:calendar.todo:"
 msgid "UUID and recurrence must be unique in a calendar."
@@ -102,18 +106,6 @@ msgctxt "field:calendar.todo,calendar:"
 msgid "Calendar"
 msgstr "Calendario"
 
-msgctxt "field:calendar.todo,calendar_owner:"
-msgid "Owner"
-msgstr "Propietario"
-
-msgctxt "field:calendar.todo,calendar_read_users:"
-msgid "Read Users"
-msgstr "Usuarios con permisos de lectura"
-
-msgctxt "field:calendar.todo,calendar_write_users:"
-msgid "Write Users"
-msgstr "Usuarios con Permisos de Escritura"
-
 msgctxt "field:calendar.todo,categories:"
 msgid "Categories"
 msgstr "Categorías"
@@ -124,7 +116,7 @@ msgstr "Clasificación"
 
 msgctxt "field:calendar.todo,completed:"
 msgid "Completed"
-msgstr "Completado"
+msgstr "Completada"
 
 msgctxt "field:calendar.todo,create_date:"
 msgid "Create Date"
@@ -176,7 +168,7 @@ msgstr "Padre"
 
 msgctxt "field:calendar.todo,percent_complete:"
 msgid "Percent complete"
-msgstr "Porcentaje completo"
+msgstr "Porcentaje completado"
 
 msgctxt "field:calendar.todo,rdates:"
 msgid "Recurrence Dates"
@@ -248,7 +240,7 @@ msgstr "Nombre"
 
 msgctxt "field:calendar.todo-calendar.category,todo:"
 msgid "To-Do"
-msgstr "Pendiente"
+msgstr "Por hacer"
 
 msgctxt "field:calendar.todo-calendar.category,write_date:"
 msgid "Write Date"
@@ -276,7 +268,7 @@ msgstr "Nombre"
 
 msgctxt "field:calendar.todo.alarm,todo:"
 msgid "Todo"
-msgstr "Pendiente"
+msgstr "Tarea"
 
 msgctxt "field:calendar.todo.alarm,valarm:"
 msgid "valarm"
@@ -292,7 +284,7 @@ msgstr "Modificado por Usuario"
 
 msgctxt "field:calendar.todo.attendee,attendee:"
 msgid "attendee"
-msgstr "Asistente"
+msgstr "asistente"
 
 msgctxt "field:calendar.todo.attendee,create_date:"
 msgid "Create Date"
@@ -320,7 +312,7 @@ msgstr "Estado de Participación"
 
 msgctxt "field:calendar.todo.attendee,todo:"
 msgid "Todo"
-msgstr "Pendiente"
+msgstr "Tarea"
 
 msgctxt "field:calendar.todo.attendee,write_date:"
 msgid "Write Date"
@@ -356,7 +348,7 @@ msgstr "Nombre"
 
 msgctxt "field:calendar.todo.exdate,todo:"
 msgid "Todo"
-msgstr "Pendiente"
+msgstr "Tarea"
 
 msgctxt "field:calendar.todo.exdate,write_date:"
 msgid "Write Date"
@@ -404,7 +396,7 @@ msgstr "Por Día del Año"
 
 msgctxt "field:calendar.todo.exrule,count:"
 msgid "Count"
-msgstr "Contar"
+msgstr "Nº de veces"
 
 msgctxt "field:calendar.todo.exrule,create_date:"
 msgid "Create Date"
@@ -432,11 +424,11 @@ msgstr "Nombre"
 
 msgctxt "field:calendar.todo.exrule,todo:"
 msgid "Todo"
-msgstr "Pendiente"
+msgstr "Tarea"
 
 msgctxt "field:calendar.todo.exrule,until:"
 msgid "Until Date"
-msgstr "Hasta la Fecha"
+msgstr "Hasta la fecha"
 
 msgctxt "field:calendar.todo.exrule,until_date:"
 msgid "Is Date"
@@ -480,7 +472,7 @@ msgstr "Nombre"
 
 msgctxt "field:calendar.todo.rdate,todo:"
 msgid "Todo"
-msgstr "Pendiente"
+msgstr "Tarea"
 
 msgctxt "field:calendar.todo.rdate,write_date:"
 msgid "Write Date"
@@ -516,7 +508,7 @@ msgstr "Por Segundo"
 
 msgctxt "field:calendar.todo.rrule,bysetpos:"
 msgid "By Position"
-msgstr "Por Posición"
+msgstr "Por Ubicación"
 
 msgctxt "field:calendar.todo.rrule,byweekno:"
 msgid "By Week Number"
@@ -528,7 +520,7 @@ msgstr "Por Día del Año"
 
 msgctxt "field:calendar.todo.rrule,count:"
 msgid "Count"
-msgstr "Contar"
+msgstr "Nº de veces"
 
 msgctxt "field:calendar.todo.rrule,create_date:"
 msgid "Create Date"
@@ -556,7 +548,7 @@ msgstr "Nombre"
 
 msgctxt "field:calendar.todo.rrule,todo:"
 msgid "Todo"
-msgstr "Pendiente"
+msgstr "Tarea"
 
 msgctxt "field:calendar.todo.rrule,until:"
 msgid "Until Date"
@@ -584,27 +576,23 @@ msgstr "Identificador Universal Único"
 
 msgctxt "help:calendar.todo.exdate,date:"
 msgid "Ignore time of field \"Date\", but handle as date only."
-msgstr "Ignorar la hora del campo \"Fecha\", pero manejarla como fecha solamente."
+msgstr "Ignorar la hora del campo \"Fecha\" y considerar sólo la fecha."
 
 msgctxt "help:calendar.todo.exrule,until_date:"
 msgid "Ignore time of field \"Until Date\", but handle as date only."
-msgstr ""
-"Ignore tiempo del campo \"Hasta la Fecha\", pero manejelo como fecha "
-"solamente."
+msgstr "Ignorar la hora del campo \"Hasta la Fecha\" y considerar sólo la fecha."
 
 msgctxt "help:calendar.todo.rdate,date:"
 msgid "Ignore time of field \"Date\", but handle as date only."
-msgstr "Ignorar la hora del campo \"Fecha\", pero manejarla como fecha solamente."
+msgstr "Ignorar la hora del campo \"Fecha\" y considerar sólo la fecha."
 
 msgctxt "help:calendar.todo.rrule,until_date:"
 msgid "Ignore time of field \"Until Date\", but handle as date only."
-msgstr ""
-"Ignore tiempo del campo \"Hasta la Fecha\", pero manejelo como fecha "
-"solamente."
+msgstr "Ignorar la hora del campo \"Hasta la Fecha\" y considerar sólo la fecha."
 
 msgctxt "model:calendar.todo,name:"
 msgid "Todo"
-msgstr "Pendiente"
+msgstr "Tarea"
 
 msgctxt "model:calendar.todo-calendar.category,name:"
 msgid "Todo - Category"
@@ -628,7 +616,7 @@ msgstr "Regla de Excepción"
 
 msgctxt "model:calendar.todo.rdate,name:"
 msgid "Todo Recurrence Date"
-msgstr "Fecha de Recurrencia"
+msgstr "Fecha de Recurrencia de Tarea"
 
 msgctxt "model:calendar.todo.rrule,name:"
 msgid "Recurrence Rule"
@@ -688,7 +676,7 @@ msgstr "Aceptado"
 
 msgctxt "selection:calendar.todo.attendee,status:"
 msgid "Declined"
-msgstr "Declinado"
+msgstr "Rechazado"
 
 msgctxt "selection:calendar.todo.attendee,status:"
 msgid "Delegated"
@@ -700,7 +688,7 @@ msgstr "Necesita una Acción"
 
 msgctxt "selection:calendar.todo.attendee,status:"
 msgid "Tentative"
-msgstr "Tentativa"
+msgstr "Tentativo"
 
 msgctxt "selection:calendar.todo.exrule,freq:"
 msgid "Daily"
@@ -871,6 +859,10 @@ msgid "Categories"
 msgstr "Categorías"
 
 msgctxt "view:calendar.todo:"
+msgid "Due Time"
+msgstr "Hora de vencimiento"
+
+msgctxt "view:calendar.todo:"
 msgid "General"
 msgstr "General"
 
@@ -879,6 +871,10 @@ msgid "Occurences"
 msgstr "Ocurrencias"
 
 msgctxt "view:calendar.todo:"
+msgid "Start Time"
+msgstr "Hora de Inicio"
+
+msgctxt "view:calendar.todo:"
 msgid "Todo"
 msgstr "Tarea"
 
diff --git a/locale/es_ES.po b/locale/es_ES.po
index a919c8e..26f0785 100644
--- a/locale/es_ES.po
+++ b/locale/es_ES.po
@@ -114,18 +114,6 @@ msgctxt "field:calendar.todo,calendar:"
 msgid "Calendar"
 msgstr "Calendario"
 
-msgctxt "field:calendar.todo,calendar_owner:"
-msgid "Owner"
-msgstr "Propietario"
-
-msgctxt "field:calendar.todo,calendar_read_users:"
-msgid "Read Users"
-msgstr "Usuarios con permisos de lectura"
-
-msgctxt "field:calendar.todo,calendar_write_users:"
-msgid "Write Users"
-msgstr "Usuarios con permisos de escritura"
-
 msgctxt "field:calendar.todo,categories:"
 msgid "Categories"
 msgstr "Categorías"
@@ -156,7 +144,7 @@ msgstr "Fecha inicial"
 
 msgctxt "field:calendar.todo,due:"
 msgid "Due Date"
-msgstr "Fecha vencimiento"
+msgstr "Fecha de vencimiento"
 
 msgctxt "field:calendar.todo,exdates:"
 msgid "Exception Dates"
@@ -879,6 +867,10 @@ msgid "Categories"
 msgstr "Categorías"
 
 msgctxt "view:calendar.todo:"
+msgid "Due Time"
+msgstr "Hora de vencimiento"
+
+msgctxt "view:calendar.todo:"
 msgid "General"
 msgstr "General"
 
@@ -887,6 +879,10 @@ msgid "Occurences"
 msgstr "Ocurrencias"
 
 msgctxt "view:calendar.todo:"
+msgid "Start Time"
+msgstr "Hora de inicio"
+
+msgctxt "view:calendar.todo:"
 msgid "Todo"
 msgstr "Tarea"
 
diff --git a/locale/fr_FR.po b/locale/fr_FR.po
index 4af50ed..71431fe 100644
--- a/locale/fr_FR.po
+++ b/locale/fr_FR.po
@@ -104,18 +104,6 @@ msgctxt "field:calendar.todo,calendar:"
 msgid "Calendar"
 msgstr "Calendrier"
 
-msgctxt "field:calendar.todo,calendar_owner:"
-msgid "Owner"
-msgstr "Propriétaire"
-
-msgctxt "field:calendar.todo,calendar_read_users:"
-msgid "Read Users"
-msgstr "Utilisateurs en lecture"
-
-msgctxt "field:calendar.todo,calendar_write_users:"
-msgid "Write Users"
-msgstr "Utilisateurs en écriture"
-
 msgctxt "field:calendar.todo,categories:"
 msgid "Categories"
 msgstr "Catégories"
@@ -871,6 +859,10 @@ msgid "Categories"
 msgstr "Catégories"
 
 msgctxt "view:calendar.todo:"
+msgid "Due Time"
+msgstr "Heure d'échéance"
+
+msgctxt "view:calendar.todo:"
 msgid "General"
 msgstr "Général"
 
@@ -879,6 +871,10 @@ msgid "Occurences"
 msgstr "Occurrences"
 
 msgctxt "view:calendar.todo:"
+msgid "Start Time"
+msgstr "Heure de début"
+
+msgctxt "view:calendar.todo:"
 msgid "Todo"
 msgstr "Tâche"
 
diff --git a/locale/nl_NL.po b/locale/nl_NL.po
index 2a142ee..80e8b31 100644
--- a/locale/nl_NL.po
+++ b/locale/nl_NL.po
@@ -102,18 +102,6 @@ msgctxt "field:calendar.todo,calendar:"
 msgid "Calendar"
 msgstr ""
 
-msgctxt "field:calendar.todo,calendar_owner:"
-msgid "Owner"
-msgstr ""
-
-msgctxt "field:calendar.todo,calendar_read_users:"
-msgid "Read Users"
-msgstr ""
-
-msgctxt "field:calendar.todo,calendar_write_users:"
-msgid "Write Users"
-msgstr ""
-
 #, fuzzy
 msgctxt "field:calendar.todo,categories:"
 msgid "Categories"
diff --git a/locale/ru_RU.po b/locale/ru_RU.po
index 75e61ff..2999507 100644
--- a/locale/ru_RU.po
+++ b/locale/ru_RU.po
@@ -102,18 +102,6 @@ msgctxt "field:calendar.todo,calendar:"
 msgid "Calendar"
 msgstr "Календарь"
 
-msgctxt "field:calendar.todo,calendar_owner:"
-msgid "Owner"
-msgstr "Владелец"
-
-msgctxt "field:calendar.todo,calendar_read_users:"
-msgid "Read Users"
-msgstr "Пользователи могут читать"
-
-msgctxt "field:calendar.todo,calendar_write_users:"
-msgid "Write Users"
-msgstr "Пользователи могут писать"
-
 msgctxt "field:calendar.todo,categories:"
 msgid "Categories"
 msgstr "Категория"
diff --git a/locale/sl_SI.po b/locale/sl_SI.po
index f23744a..01c1b4d 100644
--- a/locale/sl_SI.po
+++ b/locale/sl_SI.po
@@ -84,7 +84,7 @@ msgstr "Nastavi se lahko samo \"do\" ali \"število\"."
 
 msgctxt "error:calendar.todo:"
 msgid "Todo \"%s\" can not be recurrent."
-msgstr "Todo \"%s\" se ne more ponavljati."
+msgstr "Zadolžitve \"%s\" ni možno ponavljati."
 
 msgctxt "error:calendar.todo:"
 msgid "UUID and recurrence must be unique in a calendar."
@@ -102,18 +102,6 @@ msgctxt "field:calendar.todo,calendar:"
 msgid "Calendar"
 msgstr "Koledar"
 
-msgctxt "field:calendar.todo,calendar_owner:"
-msgid "Owner"
-msgstr "Imetnik"
-
-msgctxt "field:calendar.todo,calendar_read_users:"
-msgid "Read Users"
-msgstr "Bralci"
-
-msgctxt "field:calendar.todo,calendar_write_users:"
-msgid "Write Users"
-msgstr "Zapisovalci"
-
 msgctxt "field:calendar.todo,categories:"
 msgid "Categories"
 msgstr "Kategorije"
@@ -276,7 +264,7 @@ msgstr "Ime"
 
 msgctxt "field:calendar.todo.alarm,todo:"
 msgid "Todo"
-msgstr "Todo"
+msgstr "Zadolžitev"
 
 msgctxt "field:calendar.todo.alarm,valarm:"
 msgid "valarm"
@@ -320,7 +308,7 @@ msgstr "Status udeleženca"
 
 msgctxt "field:calendar.todo.attendee,todo:"
 msgid "Todo"
-msgstr "Todo"
+msgstr "Zadolžitev"
 
 msgctxt "field:calendar.todo.attendee,write_date:"
 msgid "Write Date"
@@ -356,7 +344,7 @@ msgstr "Ime"
 
 msgctxt "field:calendar.todo.exdate,todo:"
 msgid "Todo"
-msgstr "Todo"
+msgstr "Zadolžitev"
 
 msgctxt "field:calendar.todo.exdate,write_date:"
 msgid "Write Date"
@@ -432,7 +420,7 @@ msgstr "Ime"
 
 msgctxt "field:calendar.todo.exrule,todo:"
 msgid "Todo"
-msgstr "Todo"
+msgstr "Zadolžitev"
 
 msgctxt "field:calendar.todo.exrule,until:"
 msgid "Until Date"
@@ -480,7 +468,7 @@ msgstr "Ime"
 
 msgctxt "field:calendar.todo.rdate,todo:"
 msgid "Todo"
-msgstr "Todo"
+msgstr "Zadolžitev"
 
 msgctxt "field:calendar.todo.rdate,write_date:"
 msgid "Write Date"
@@ -556,7 +544,7 @@ msgstr "Ime"
 
 msgctxt "field:calendar.todo.rrule,todo:"
 msgid "Todo"
-msgstr "Todo"
+msgstr "Zadolžitev"
 
 msgctxt "field:calendar.todo.rrule,until:"
 msgid "Until Date"
@@ -600,11 +588,11 @@ msgstr "Prezri čas v polju \"Do dne\" in ga samo obravnavaj kot datum."
 
 msgctxt "model:calendar.todo,name:"
 msgid "Todo"
-msgstr "Todo"
+msgstr "Zadolžitev"
 
 msgctxt "model:calendar.todo-calendar.category,name:"
 msgid "Todo - Category"
-msgstr "Todo - Kategorija"
+msgstr "Zadolžitev - Kategorija"
 
 msgctxt "model:calendar.todo.alarm,name:"
 msgid "Alarm"
@@ -624,7 +612,7 @@ msgstr "Izjemno pravilo"
 
 msgctxt "model:calendar.todo.rdate,name:"
 msgid "Todo Recurrence Date"
-msgstr "Todo datum ponovitve"
+msgstr "Datum ponovitve zadolžitve"
 
 msgctxt "model:calendar.todo.rrule,name:"
 msgid "Recurrence Rule"
@@ -632,15 +620,15 @@ msgstr "Pravilo ponovitve"
 
 msgctxt "model:ir.action,name:act_todo_form"
 msgid "Todos"
-msgstr "Todoji"
+msgstr "Zadolžitve"
 
 msgctxt "model:ir.action,name:act_todo_form3"
 msgid "Todos"
-msgstr "Todoji"
+msgstr "Zadolžitve"
 
 msgctxt "model:ir.ui.menu,name:menu_todo_form"
 msgid "Todos"
-msgstr "Todoji"
+msgstr "Zadolžitve"
 
 msgctxt "selection:calendar.todo,classification:"
 msgid "Confidential"
@@ -867,6 +855,10 @@ msgid "Categories"
 msgstr "Kategorije"
 
 msgctxt "view:calendar.todo:"
+msgid "Due Time"
+msgstr "Zapadlost"
+
+msgctxt "view:calendar.todo:"
 msgid "General"
 msgstr "Splošno"
 
@@ -875,9 +867,13 @@ msgid "Occurences"
 msgstr "Pojavljanje"
 
 msgctxt "view:calendar.todo:"
+msgid "Start Time"
+msgstr "Začetek"
+
+msgctxt "view:calendar.todo:"
 msgid "Todo"
-msgstr "Todo"
+msgstr "Zadolžitev"
 
 msgctxt "view:calendar.todo:"
 msgid "Todos"
-msgstr "Todoji"
+msgstr "Zadolžitve"
diff --git a/setup.py b/setup.py
index 03001a5..0eb2883 100644
--- a/setup.py
+++ b/setup.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
-#This file is part of Tryton.  The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# This file is part of Tryton.  The COPYRIGHT file at the top level of
+# this repository contains the full copyright notices and license terms.
 
 from setuptools import setup
 import re
@@ -87,6 +87,8 @@ setup(name=name,
         'Natural Language :: Spanish',
         'Operating System :: OS Independent',
         'Programming Language :: Python :: 2.7',
+        'Programming Language :: Python :: Implementation :: CPython',
+        'Programming Language :: Python :: Implementation :: PyPy',
         'Topic :: Office/Business',
         ],
     license='GPL-3',
diff --git a/tests/__init__.py b/tests/__init__.py
index 7593e9a..5b114ba 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -1,5 +1,5 @@
-#This file is part of Tryton.  The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# This file is part of Tryton.  The COPYRIGHT file at the top level of
+# this repository contains the full copyright notices and license terms.
 
 from .test_calendar_todo import suite
 
diff --git a/tests/test_calendar_todo.py b/tests/test_calendar_todo.py
index 6dbac21..f9aa535 100644
--- a/tests/test_calendar_todo.py
+++ b/tests/test_calendar_todo.py
@@ -1,23 +1,13 @@
-#This file is part of Tryton.  The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# This file is part of Tryton.  The COPYRIGHT file at the top level of
+# this repository contains the full copyright notices and license terms.
 import unittest
 import trytond.tests.test_tryton
-from trytond.tests.test_tryton import test_view, test_depends
+from trytond.tests.test_tryton import ModuleTestCase
 
 
-class CalendarTodoTestCase(unittest.TestCase):
+class CalendarTodoTestCase(ModuleTestCase):
     'Test Calendar Todo module'
-
-    def setUp(self):
-        trytond.tests.test_tryton.install_module('calendar_todo')
-
-    def test0005views(self):
-        'Test views'
-        test_view('calendar_todo')
-
-    def test0006depends(self):
-        'Test depends'
-        test_depends()
+    module = 'calendar_todo'
 
 
 def suite():
diff --git a/todo.py b/todo.py
index d5043ea..e207d87 100644
--- a/todo.py
+++ b/todo.py
@@ -1,5 +1,5 @@
-#This file is part of Tryton.  The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# This file is part of Tryton.  The COPYRIGHT file at the top level of
+# this repository contains the full copyright notices and license terms.
 import uuid
 import vobject
 import dateutil.tz
@@ -11,7 +11,7 @@ from sql import Table, Column
 from trytond.model import ModelSQL, ModelView, fields
 from trytond.tools import reduce_ids
 from trytond import backend
-from trytond.pyson import Eval, If, Bool
+from trytond.pyson import Eval, If, Bool, PYSONEncoder
 from trytond.transaction import Transaction
 from trytond.pool import Pool
 from trytond.modules.calendar import AlarmMixin, DateMixin, RRuleMixin, \
@@ -107,19 +107,13 @@ class Todo(ModelSQL, ModelView):
             states={
                 'invisible': Bool(Eval('parent')),
             }, depends=['parent'])
-    calendar_owner = fields.Function(fields.Many2One('res.user', 'Owner'),
-            'get_calendar_field', searcher='search_calendar_field')
-    calendar_read_users = fields.Function(fields.One2Many('res.user', None,
-        'Read Users'), 'get_calendar_field', searcher='search_calendar_field')
-    calendar_write_users = fields.Function(fields.One2Many('res.user', None,
-        'Write Users'), 'get_calendar_field', searcher='search_calendar_field')
     vtodo = fields.Binary('vtodo')
 
     @classmethod
     def __setup__(cls):
         super(Todo, cls).__setup__()
         cls._sql_constraints = [
-            #XXX should be unique across all componenets
+            # XXX should be unique across all componenets
             ('uuid_recurrence_uniq', 'UNIQUE(uuid, calendar, recurrence)',
                 'UUID and recurrence must be unique in a calendar.'),
             ]
@@ -133,13 +127,14 @@ class Todo(ModelSQL, ModelView):
         # Migrate from 1.4: remove classification_public
         ModelData = pool.get('ir.model.data')
         Rule = pool.get('ir.rule')
-        models_data = ModelData.search([
-            ('fs_id', '=', 'rule_group_read_todo_line3'),
-            ('module', '=', module_name),
-            ], limit=1)
-        if models_data:
-            model_data, = models_data
-            Rule.delete([Rule(model_data.db_id)])
+        with Transaction().set_user(0):
+            models_data = ModelData.search([
+                ('fs_id', '=', 'rule_group_read_todo_line3'),
+                ('module', '=', module_name),
+                ], limit=1)
+            if models_data:
+                model_data, = models_data
+                Rule.delete([Rule(model_data.db_id)])
         super(Todo, cls).__register__(module_name)
 
     @staticmethod
@@ -160,31 +155,17 @@ class Todo(ModelSQL, ModelView):
 
     @fields.depends('status', 'completed', 'percent_complete')
     def on_change_status(self):
-        res = {}
-        if not getattr(self, 'status', None):
-            return res
+        if not self.status:
+            return
         if self.status == 'completed':
-            res['percent_complete'] = 100
-            if not getattr(self, 'completed', None):
-                res['completed'] = datetime.datetime.now()
-
-        return res
+            self.percent_complete = 100
+            if not self.completed:
+                self.completed = datetime.datetime.now()
 
     @staticmethod
     def timezones():
         return [(x, x) for x in pytz.common_timezones] + [('', '')]
 
-    def get_calendar_field(self, name):
-        name = name[9:]
-        if name in ('read_users', 'write_users'):
-            return [x.id for x in getattr(self.calendar, name)]
-        else:
-            return getattr(self.calendar, name).id
-
-    @classmethod
-    def search_calendar_field(cls, name, clause):
-        return [('calendar.' + name[9:],) + tuple(clause[1:])]
-
     @classmethod
     def validate(cls, todos):
         super(Todo, cls).validate(todos)
@@ -205,6 +186,12 @@ class Todo(ModelSQL, ModelView):
             self.raise_user_error('invalid_recurrence', (self.rec_name,))
 
     @classmethod
+    def view_attributes(cls):
+        return [('//page[@id="occurences"]', 'states', {
+                    'invisible': Bool(Eval('_parent_parent')),
+                    })]
+
+    @classmethod
     def create(cls, vlist):
         pool = Pool()
         Calendar = pool.get('calendar.calendar')
@@ -226,7 +213,7 @@ class Todo(ModelSQL, ModelView):
                             if x.status != 'declined'
                             and x.email != todo.parent.organizer]
                 if attendee_emails:
-                    with Transaction().set_context(_check_access=False):
+                    with Transaction().set_user(0):
                         calendars = Calendar.search([
                             ('owner.email', 'in', attendee_emails),
                             ])
@@ -332,24 +319,27 @@ class Todo(ModelSQL, ModelView):
                                 if x.status != 'declined'
                                 and x.email != todo.organizer]
                     else:
-                        attendee_emails = [x.email for x in todo.parent.attendees
-                                if x.status != 'declined'
-                                and x.email != todo.parent.organizer]
+                        attendee_emails = [
+                            x.email for x in todo.parent.attendees
+                            if x.status != 'declined'
+                            and x.email != todo.parent.organizer]
                     if attendee_emails:
-                        with Transaction().set_context(_check_access=False):
+                        with Transaction().set_user(0):
                             todo2s = cls.search([
-                                ('uuid', '=', todo.uuid),
-                                ('calendar.owner.email', 'in', attendee_emails),
-                                ('id', '!=', todo.id),
-                                ('recurrence', '=', todo.recurrence),
-                                ])
+                                    ('uuid', '=', todo.uuid),
+                                    ('calendar.owner.email', 'in',
+                                        attendee_emails),
+                                    ('id', '!=', todo.id),
+                                    ('recurrence', '=', todo.recurrence),
+                                    ])
                         for todo2 in todo2s:
                             if todo2.calendar.owner.email in attendee_emails:
-                                attendee_emails.remove(todo2.calendar.owner.email)
-                        with Transaction().set_context(_check_access=False):
+                                attendee_emails.remove(
+                                    todo2.calendar.owner.email)
+                        with Transaction().set_user(0):
                             cls.write(todos, todo._todo2update())
                     if attendee_emails:
-                        with Transaction().set_context(_check_access=False):
+                        with Transaction().set_user(0):
                             calendars = Calendar.search([
                                 ('owner.email', 'in', attendee_emails),
                                 ])
@@ -402,7 +392,7 @@ class Todo(ModelSQL, ModelView):
                     attendee_emails = [x.email for x in todo.parent.attendees
                             if x.email != todo.parent.organizer]
                 if attendee_emails:
-                    with Transaction().set_context(_check_access=False):
+                    with Transaction().set_user(0):
                         todos_delete = cls.search([
                             ('uuid', '=', todo.uuid),
                             ('calendar.owner.email', 'in', attendee_emails),
@@ -416,7 +406,7 @@ class Todo(ModelSQL, ModelView):
                     organizer = todo.organizer
                 else:
                     organizer = todo.parent.organizer
-                with Transaction().set_context(_check_access=False):
+                with Transaction().set_user(0):
                     todo2s = cls.search([
                         ('uuid', '=', todo.uuid),
                         ('calendar.owner.email', '=', organizer),
@@ -1043,8 +1033,8 @@ class TodoAttendee(AttendeeMixin, ModelSQL, ModelView):
                     values=[attendee.select(attendee.email,
                             where=attendee.id == sql_table.calendar_attendee),
                         attendee.select(attendee.status,
-                            where=
-                            attendee.id == sql_table.calendar_attendee)]))
+                            where=(
+                                attendee.id == sql_table.calendar_attendee))]))
             table.drop_column('calendar_attendee', True)
 
     @classmethod
@@ -1073,7 +1063,7 @@ class TodoAttendee(AttendeeMixin, ModelSQL, ModelView):
                     attendee_emails = [x.email for x in todo.parent.attendees
                             if x.email != todo.parent.organizer]
                 if attendee_emails:
-                    with Transaction().set_context(_check_access=False):
+                    with Transaction().set_user(0):
                         todos = Todo.search([
                             ('uuid', '=', todo.uuid),
                             ('calendar.owner.email', 'in', attendee_emails),
@@ -1122,7 +1112,7 @@ class TodoAttendee(AttendeeMixin, ModelSQL, ModelView):
                     attendee_emails = [x.email for x in todo.parent.attendees
                             if x.email != todo.parent.organizer]
                 if attendee_emails:
-                    with Transaction().set_context(_check_access=False):
+                    with Transaction().set_user(0):
                         attendees2 = cls.search([
                                 ('todo.uuid', '=', todo.uuid),
                                 ('todo.calendar.owner.email', 'in',
@@ -1157,7 +1147,7 @@ class TodoAttendee(AttendeeMixin, ModelSQL, ModelView):
                     attendee_emails = [x.email for x in todo.attendees
                             if x.email != todo.parent.organizer]
                 if attendee_emails:
-                    with Transaction().set_context(_check_access=False):
+                    with Transaction().set_user(0):
                         attendees = cls.search([
                             ('todo.uuid', '=', todo.uuid),
                             ('todo.calendar.owner.email', 'in',
@@ -1175,7 +1165,7 @@ class TodoAttendee(AttendeeMixin, ModelSQL, ModelView):
                     organizer = todo.organizer
                 else:
                     organizer = todo.parent.organizer
-                with Transaction().set_context(_check_access=False):
+                with Transaction().set_user(0):
                     attendees = cls.search([
                         ('todo.uuid', '=', todo.uuid),
                         ('todo.calendar.owner.email', '=', organizer),
diff --git a/todo.xml b/todo.xml
index d673144..c77e3ec 100644
--- a/todo.xml
+++ b/todo.xml
@@ -27,7 +27,7 @@ this repository contains the full copyright notices and license terms. -->
         <record model="ir.action.act_window" id="act_todo_form">
             <field name="name">Todos</field>
             <field name="res_model">calendar.todo</field>
-            <field name="domain">[('parent', '=', None)]</field>
+            <field name="domain" eval="[('parent', '=', None)]" pyson="1"/>
         </record>
         <record model="ir.action.act_window.view" id="act_todo_form_view1">
             <field name="sequence" eval="10"/>
@@ -45,7 +45,9 @@ this repository contains the full copyright notices and license terms. -->
         <record model="ir.action.act_window" id="act_todo_form3">
             <field name="name">Todos</field>
             <field name="res_model">calendar.todo</field>
-            <field name="domain">[('parent', '=', None), ('calendar', 'in', Eval('active_ids'))]</field>
+            <field name="domain"
+                eval="[('parent', '=', None), ('calendar', 'in', Eval('active_ids', []))]"
+                pyson="1"/>
         </record>
         <record model="ir.action.act_window.view" id="act_todo_form3_view1">
             <field name="sequence" eval="10"/>
@@ -64,6 +66,25 @@ this repository contains the full copyright notices and license terms. -->
             <field name="action" ref="act_todo_form3"/>
         </record>
 
+        <record model="ir.rule.group" id="rule_group_todo_admin">
+            <field name="model" search="[('model', '=', 'calendar.todo')]"/>
+            <field name="global_p" eval="False"/>
+            <field name="default_p" eval="False"/>
+            <field name="perm_read" eval="True"/>
+            <field name="perm_write" eval="True"/>
+            <field name="perm_create" eval="True"/>
+            <field name="perm_delete" eval="True"/>
+        </record>
+        <record model="ir.rule" id="rule_group_todo_admin_line1">
+            <field name="domain" eval="[]" pyson="1"/>
+            <field name="rule_group" ref="rule_group_todo_admin"/>
+        </record>
+        <record model="ir.rule.group-res.group"
+            id="rule_group_todo_admin-calendar_admin">
+            <field name="rule_group" ref="rule_group_todo_admin"/>
+            <field name="group" ref="calendar.group_calendar_admin"/>
+        </record>
+
         <record model="ir.rule.group" id="rule_group_read_todo">
             <field name="model" search="[('model', '=', 'calendar.todo')]"/>
             <field name="global_p" eval="False"/>
@@ -74,11 +95,15 @@ this repository contains the full copyright notices and license terms. -->
             <field name="perm_delete" eval="False"/>
         </record>
         <record model="ir.rule" id="rule_group_read_todo_line1">
-            <field name="domain">[('calendar_owner', '=', user.id)]</field>
+            <field name="domain"
+                eval="[('calendar.owner', '=', Eval('user', {}).get('id', -1))]"
+                pyson="1"/>
             <field name="rule_group" ref="rule_group_read_todo"/>
         </record>
         <record model="ir.rule" id="rule_group_read_todo_line2">
-            <field name="domain">[('calendar_read_users', '=', user.id)]</field>
+            <field name="domain"
+                eval="[('calendar.read_users', '=', Eval('user', {}).get('id', -1))]"
+                pyson="1"/>
             <field name="rule_group" ref="rule_group_read_todo"/>
         </record>
 
@@ -92,11 +117,15 @@ this repository contains the full copyright notices and license terms. -->
             <field name="perm_delete" eval="True"/>
         </record>
         <record model="ir.rule" id="rule_group_write_todo_line1">
-            <field name="domain">[('calendar_owner', '=', user.id)]</field>
+            <field name="domain"
+                eval="[('calendar.owner', '=', Eval('user', {}).get('id', -1))]"
+                pyson="1"/>
             <field name="rule_group" ref="rule_group_write_todo"/>
         </record>
         <record model="ir.rule" id="rule_group_write_todo_line2">
-            <field name="domain">[('calendar_write_users', '=', user.id)]</field>
+            <field name="domain"
+                eval="[('calendar.write_users', '=', Eval('user', {}).get('id', -1))]"
+                pyson="1"/>
             <field name="rule_group" ref="rule_group_write_todo"/>
         </record>
 
diff --git a/tryton.cfg b/tryton.cfg
index febb018..2f708ac 100644
--- a/tryton.cfg
+++ b/tryton.cfg
@@ -1,5 +1,5 @@
 [tryton]
-version=3.4.1
+version=3.6.0
 depends:
     calendar
     ir
diff --git a/trytond_calendar_todo.egg-info/PKG-INFO b/trytond_calendar_todo.egg-info/PKG-INFO
index 95d0801..5cd55d5 100644
--- a/trytond_calendar_todo.egg-info/PKG-INFO
+++ b/trytond_calendar_todo.egg-info/PKG-INFO
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: trytond-calendar-todo
-Version: 3.4.1
+Version: 3.6.0
 Summary: Tryton module to add TODO on CalDAV
 Home-page: http://www.tryton.org/
 Author: Tryton
 Author-email: issue_tracker at tryton.org
 License: GPL-3
-Download-URL: http://downloads.tryton.org/3.4/
+Download-URL: http://downloads.tryton.org/3.6/
 Description: trytond_calendar_todo
         =====================
         
@@ -66,4 +66,6 @@ Classifier: Natural Language :: Slovenian
 Classifier: Natural Language :: Spanish
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Office/Business
diff --git a/trytond_calendar_todo.egg-info/requires.txt b/trytond_calendar_todo.egg-info/requires.txt
index f143337..9a16b15 100644
--- a/trytond_calendar_todo.egg-info/requires.txt
+++ b/trytond_calendar_todo.egg-info/requires.txt
@@ -3,5 +3,5 @@ PyWebDAV >= 0.9.8
 python-dateutil
 pytz
 python-sql
-trytond_calendar >= 3.4, < 3.5
-trytond >= 3.4, < 3.5
\ No newline at end of file
+trytond_calendar >= 3.6, < 3.7
+trytond >= 3.6, < 3.7
\ No newline at end of file
diff --git a/view/todo_form.xml b/view/todo_form.xml
index 63ce6dd..e6ec48d 100644
--- a/view/todo_form.xml
+++ b/view/todo_form.xml
@@ -35,8 +35,7 @@ this repository contains the full copyright notices and license terms. -->
             <field name="organizer"/>
             <field name="attendees" colspan="4"/>
         </page>
-        <page string="Occurences" id="occurences"
-            states="{'invisible': Bool(Eval('_parent_parent'))}">
+        <page string="Occurences" id="occurences">
             <field name="rrules" colspan="2"/>
             <field name="rdates" colspan="2"/>
             <field name="exrules" colspan="2"/>
diff --git a/view/todo_tree.xml b/view/todo_tree.xml
index 841d6bf..95af02b 100644
--- a/view/todo_tree.xml
+++ b/view/todo_tree.xml
@@ -4,8 +4,10 @@ this repository contains the full copyright notices and license terms. -->
 <tree string="Todos">
     <field name="calendar"/>
     <field name="summary"/>
-    <field name="dtstart"/>
-    <field name="due"/>
+    <field name="dtstart" widget="date"/>
+    <field name="dtstart" widget="time" string="Start Time"/>
+    <field name="due" widget="date"/>
+    <field name="due" widget="time" string="Due Time"/>
     <field name="status"/>
     <field name="percent_complete"/>
 </tree>
diff --git a/view/todo_tree_occurence.xml b/view/todo_tree_occurence.xml
index 852fcf0..1e60698 100644
--- a/view/todo_tree_occurence.xml
+++ b/view/todo_tree_occurence.xml
@@ -3,9 +3,12 @@
 this repository contains the full copyright notices and license terms. -->
 <tree string="Todos">
     <field name="summary"/>
-    <field name="recurrence"/>
-    <field name="dtstart"/>
-    <field name="due"/>
+    <field name="recurrence" widget="date"/>
+    <field name="recurrence" widget="time"/>
+    <field name="dtstart" widget="date"/>
+    <field name="dtstart" widget="time" string="Start Time"/>
+    <field name="due" widget="date"/>
+    <field name="due" widget="time" string="Due Time"/>
     <field name="status"/>
     <field name="percent_complete"/>
 </tree>
diff --git a/webdav.py b/webdav.py
index e837a2d..7a99912 100644
--- a/webdav.py
+++ b/webdav.py
@@ -1,5 +1,5 @@
-#This file is part of Tryton.  The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# This file is part of Tryton.  The COPYRIGHT file at the top level of
+# this repository contains the full copyright notices and license terms.
 import vobject
 import urllib
 from pywebdav.lib.errors import DAV_NotFound, DAV_Forbidden
-- 
tryton-modules-calendar-todo



More information about the tryton-debian-vcs mailing list