From 628ebef5b999e90a682e3d17da901542f61523a5 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Thu, 28 Aug 2014 14:44:56 +0200 Subject: [PATCH] [IMP] doc/howtos/backend: fix calendar view, improve search view, fix copy() --- doc/howtos/backend.rst | 39 +++++++++++++++------- doc/howtos/backend/exercise-calendar | 18 ++++++---- doc/howtos/backend/exercise-copy-override | 10 +++--- doc/howtos/backend/exercise-gantt | 14 ++++---- doc/howtos/backend/exercise-graph | 12 +++---- doc/howtos/backend/exercise-kanban | 10 +++--- doc/howtos/backend/exercise-searchview | 25 +++++++------- doc/howtos/backend/exercise-state-basic | 10 +++--- doc/howtos/backend/exercise-state-workflow | 16 ++++----- doc/howtos/backend/exercise-translations | 21 ++++++++++-- doc/howtos/backend/exercise-wizard-action | 10 +++--- doc/howtos/backend/exercise-wizard-launch | 10 +++--- doc/howtos/backend/exercise-wizard-multi | 10 +++--- 13 files changed, 120 insertions(+), 85 deletions(-) diff --git a/doc/howtos/backend.rst b/doc/howtos/backend.rst index 9f5bc5f2209..261268cde8b 100644 --- a/doc/howtos/backend.rst +++ b/doc/howtos/backend.rst @@ -922,7 +922,7 @@ Model constraints Odoo provides two ways to set up automatically verified invariants: :func:`Python constraints ` and -:attr:`SQL constaints `. +:attr:`SQL constraints `. A Python constraint is defined as a method decorated with :func:`~openerp.api.constrains`, and invoked on a recordset. The decorator @@ -1064,21 +1064,35 @@ field (to define the label for each calendar event) Search views ------------ -Search view fields can take custom operators or :ref:`reference/orm/domains` -for more flexible matching of results. +Search view ```` elements can have a ``@filter_domain`` that overrides +the domain generated for searching on the given field. In the given domain, +``self`` represents the value entered by the user. In the example below, it is +used to search on both fields ``name`` and ``description``. -Search views can also contain *filters* which act as toggles for predefined -searches (defined using :ref:`reference/orm/domains`): +Search views can also contain ```` elements, which act as toggles for +predefined searches. Filters must have one of the following attributes: + +``domain`` + add the given domain to the current search +``context`` + add some context to the current search; use the key ``group_by`` to group + results on the given field name .. code-block:: xml - - + + + + + + To use a non-default search view in an action, it should be linked using the @@ -1092,8 +1106,9 @@ default and behave as booleans (they can only be enabled by default). .. exercise:: Search views - Add a button to filter the courses for which the current user is the - responsible in the course search view. Make it selected by default. + #. Add a button to filter the courses for which the current user is the + responsible in the course search view. Make it selected by default. + #. Add a button to group courses by responsible user. .. only:: solutions @@ -1544,8 +1559,8 @@ for editing and merging PO/POT files. dedicated PO-file editor e.g. POEdit_ and translate the missing terms - #. Add ``from openerp import _`` to ``course.py`` and - mark missing strings as translatable + #. In ``models.py``, add an import statement for the function + ``openerp._`` and mark missing strings as translatable #. Repeat steps 3-6 diff --git a/doc/howtos/backend/exercise-calendar b/doc/howtos/backend/exercise-calendar index 872a5577a46..a5689111174 100644 --- a/doc/howtos/backend/exercise-calendar +++ b/doc/howtos/backend/exercise-calendar @@ -3,8 +3,8 @@ Index: addons/openacademy/models.py =================================================================== ---- addons.orig/openacademy/models.py 2014-08-26 17:26:10.179783221 +0200 -+++ addons/openacademy/models.py 2014-08-26 17:26:10.171783221 +0200 +--- addons.orig/openacademy/models.py 2014-08-28 13:45:01.987048512 +0200 ++++ addons/openacademy/models.py 2014-08-28 13:59:30.387035620 +0200 @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- @@ -21,7 +21,7 @@ Index: addons/openacademy/models.py @api.one @api.depends('seats', 'attendee_ids') -@@ -82,6 +85,26 @@ +@@ -82,6 +85,30 @@ } @api.one @@ -31,8 +31,10 @@ Index: addons/openacademy/models.py + self.end_date = self.start_date + return + ++ # Add duration to start_date, but: Monday + 5 days = Saturday, so ++ # subtract one second to get on Friday instead + start = fields.Datetime.from_string(self.start_date) -+ duration = timedelta(days=self.duration) ++ duration = timedelta(days=self.duration, seconds=-1) + self.end_date = start + duration + + @api.one @@ -40,9 +42,11 @@ Index: addons/openacademy/models.py + if not (self.start_date and self.end_date): + return + ++ # Compute the difference between dates, but: Friday - Monday = 4 days, ++ # so add one day to get 5 days instead + start_date = fields.Datetime.from_string(self.start_date) + end_date = fields.Datetime.from_string(self.end_date) -+ self.duration = (end_date - start_date).days ++ self.duration = (end_date - start_date).days + 1 + + @api.one @api.constrains('instructor_id', 'attendee_ids') @@ -50,8 +54,8 @@ Index: addons/openacademy/models.py if self.instructor_id and self.instructor_id in self.attendee_ids: Index: addons/openacademy/views/openacademy.xml =================================================================== ---- addons.orig/openacademy/views/openacademy.xml 2014-08-26 17:26:10.179783221 +0200 -+++ addons/openacademy/views/openacademy.xml 2014-08-26 17:26:10.171783221 +0200 +--- addons.orig/openacademy/views/openacademy.xml 2014-08-28 13:45:01.987048512 +0200 ++++ addons/openacademy/views/openacademy.xml 2014-08-28 13:54:02.000000000 +0200 @@ -125,11 +125,24 @@ diff --git a/doc/howtos/backend/exercise-copy-override b/doc/howtos/backend/exercise-copy-override index 41ed8888adb..3f7dce2840f 100644 --- a/doc/howtos/backend/exercise-copy-override +++ b/doc/howtos/backend/exercise-copy-override @@ -3,8 +3,8 @@ Index: addons/openacademy/models.py =================================================================== ---- addons.orig/openacademy/models.py 2014-08-27 14:20:12.363110598 +0200 -+++ addons/openacademy/models.py 2014-08-27 14:20:12.359110598 +0200 +--- addons.orig/openacademy/models.py 2014-08-28 11:00:44.343194847 +0200 ++++ addons/openacademy/models.py 2014-08-28 13:44:32.143048955 +0200 @@ -13,6 +13,20 @@ session_ids = fields.One2many( 'openacademy.session', 'course_id', string="Sessions") @@ -14,11 +14,11 @@ Index: addons/openacademy/models.py + default = dict(default or {}) + + copied_count = self.search_count( -+ [('name', '=like', "Copy of {}%".format(self.name))]) ++ [('name', '=like', u"Copy of {}%".format(self.name))]) + if not copied_count: -+ new_name = "Copy of {}".format(self.name) ++ new_name = u"Copy of {}".format(self.name) + else: -+ new_name = "Copy of {} ({})".format(self.name, copied_count) ++ new_name = u"Copy of {} ({})".format(self.name, copied_count) + + default['name'] = new_name + return super(Course, self).copy(default) diff --git a/doc/howtos/backend/exercise-gantt b/doc/howtos/backend/exercise-gantt index a4475d9c4c9..dc4033e18de 100644 --- a/doc/howtos/backend/exercise-gantt +++ b/doc/howtos/backend/exercise-gantt @@ -3,8 +3,8 @@ Index: addons/openacademy/models.py =================================================================== ---- addons.orig/openacademy/models.py 2014-08-26 17:26:12.059783193 +0200 -+++ addons/openacademy/models.py 2014-08-26 17:26:12.051783193 +0200 +--- addons.orig/openacademy/models.py 2014-08-28 14:21:46.543015785 +0200 ++++ addons/openacademy/models.py 2014-08-28 14:21:46.539015785 +0200 @@ -59,6 +59,9 @@ end_date = fields.Date(string="End Date", store=True, compute='_get_end_date', inverse='_set_end_date') @@ -15,8 +15,8 @@ Index: addons/openacademy/models.py @api.one @api.depends('seats', 'attendee_ids') def _taken_seats(self): -@@ -105,6 +108,15 @@ - self.duration = (end_date - start_date).days +@@ -109,6 +112,15 @@ + self.duration = (end_date - start_date).days + 1 @api.one + @api.depends('duration') @@ -33,9 +33,9 @@ Index: addons/openacademy/models.py if self.instructor_id and self.instructor_id in self.attendee_ids: Index: addons/openacademy/views/openacademy.xml =================================================================== ---- addons.orig/openacademy/views/openacademy.xml 2014-08-26 17:26:12.059783193 +0200 -+++ addons/openacademy/views/openacademy.xml 2014-08-26 17:26:12.055783193 +0200 -@@ -142,11 +142,24 @@ +--- addons.orig/openacademy/views/openacademy.xml 2014-08-28 14:21:46.543015785 +0200 ++++ addons/openacademy/views/openacademy.xml 2014-08-28 14:21:46.539015785 +0200 +@@ -145,11 +145,24 @@ diff --git a/doc/howtos/backend/exercise-graph b/doc/howtos/backend/exercise-graph index c7f03d24519..6b913ead5be 100644 --- a/doc/howtos/backend/exercise-graph +++ b/doc/howtos/backend/exercise-graph @@ -3,8 +3,8 @@ Index: addons/openacademy/models.py =================================================================== ---- addons.orig/openacademy/models.py 2014-08-26 17:26:13.007783179 +0200 -+++ addons/openacademy/models.py 2014-08-26 17:26:12.999783179 +0200 +--- addons.orig/openacademy/models.py 2014-08-28 14:21:55.039015659 +0200 ++++ addons/openacademy/models.py 2014-08-28 14:21:55.031015659 +0200 @@ -62,6 +62,9 @@ hours = fields.Float(string="Duration in hours", compute='_get_hours', inverse='_set_hours') @@ -15,7 +15,7 @@ Index: addons/openacademy/models.py @api.one @api.depends('seats', 'attendee_ids') def _taken_seats(self): -@@ -117,6 +120,11 @@ +@@ -121,6 +124,11 @@ self.duration = self.hours / 24 @api.one @@ -29,9 +29,9 @@ Index: addons/openacademy/models.py if self.instructor_id and self.instructor_id in self.attendee_ids: Index: addons/openacademy/views/openacademy.xml =================================================================== ---- addons.orig/openacademy/views/openacademy.xml 2014-08-26 17:26:13.007783179 +0200 -+++ addons/openacademy/views/openacademy.xml 2014-08-26 17:26:12.999783179 +0200 -@@ -155,11 +155,22 @@ +--- addons.orig/openacademy/views/openacademy.xml 2014-08-28 14:21:55.039015659 +0200 ++++ addons/openacademy/views/openacademy.xml 2014-08-28 14:21:55.031015659 +0200 +@@ -158,11 +158,22 @@ diff --git a/doc/howtos/backend/exercise-kanban b/doc/howtos/backend/exercise-kanban index 24dbec8a629..892ef6e0059 100644 --- a/doc/howtos/backend/exercise-kanban +++ b/doc/howtos/backend/exercise-kanban @@ -3,8 +3,8 @@ Index: addons/openacademy/models.py =================================================================== ---- addons.orig/openacademy/models.py 2014-08-26 17:26:13.919783165 +0200 -+++ addons/openacademy/models.py 2014-08-26 17:26:13.915783165 +0200 +--- addons.orig/openacademy/models.py 2014-08-28 14:21:58.627015606 +0200 ++++ addons/openacademy/models.py 2014-08-28 14:21:58.623015606 +0200 @@ -47,6 +47,7 @@ duration = fields.Float(digits=(6, 2), help="Duration in days") seats = fields.Integer(string="Number of seats") @@ -15,9 +15,9 @@ Index: addons/openacademy/models.py domain=['|', ('instructor', '=', True), Index: addons/openacademy/views/openacademy.xml =================================================================== ---- addons.orig/openacademy/views/openacademy.xml 2014-08-26 17:26:13.919783165 +0200 -+++ addons/openacademy/views/openacademy.xml 2014-08-26 17:26:13.915783165 +0200 -@@ -166,11 +166,57 @@ +--- addons.orig/openacademy/views/openacademy.xml 2014-08-28 14:21:58.627015606 +0200 ++++ addons/openacademy/views/openacademy.xml 2014-08-28 14:21:58.623015606 +0200 +@@ -169,11 +169,57 @@ diff --git a/doc/howtos/backend/exercise-searchview b/doc/howtos/backend/exercise-searchview index e638d636d39..6919e1708da 100644 --- a/doc/howtos/backend/exercise-searchview +++ b/doc/howtos/backend/exercise-searchview @@ -3,21 +3,22 @@ Index: addons/openacademy/views/openacademy.xml =================================================================== ---- addons.orig/openacademy/views/openacademy.xml 2014-08-26 17:26:11.107783207 +0200 -+++ addons/openacademy/views/openacademy.xml 2014-08-26 17:26:11.099783207 +0200 -@@ -33,7 +33,10 @@ - course.search - openacademy.course - -- -+ -+ +--- addons.orig/openacademy/views/openacademy.xml 2014-08-28 14:01:45.299033618 +0200 ++++ addons/openacademy/views/openacademy.xml 2014-08-28 14:18:58.847018275 +0200 +@@ -36,6 +36,12 @@ + ++ ++ ++ ++ -@@ -62,6 +65,7 @@ + + +@@ -62,6 +68,7 @@ openacademy.course form tree,form diff --git a/doc/howtos/backend/exercise-state-basic b/doc/howtos/backend/exercise-state-basic index f2a91d161c2..55085c56c3d 100644 --- a/doc/howtos/backend/exercise-state-basic +++ b/doc/howtos/backend/exercise-state-basic @@ -3,8 +3,8 @@ Index: addons/openacademy/models.py =================================================================== ---- addons.orig/openacademy/models.py 2014-08-26 17:26:14.907783150 +0200 -+++ addons/openacademy/models.py 2014-08-26 17:26:14.899783151 +0200 +--- addons.orig/openacademy/models.py 2014-08-28 14:22:01.371015565 +0200 ++++ addons/openacademy/models.py 2014-08-28 14:22:01.367015565 +0200 @@ -66,6 +66,24 @@ attendees_count = fields.Integer( string="Attendees count", compute='_get_attendees_count', store=True) @@ -32,9 +32,9 @@ Index: addons/openacademy/models.py def _taken_seats(self): Index: addons/openacademy/views/openacademy.xml =================================================================== ---- addons.orig/openacademy/views/openacademy.xml 2014-08-26 17:26:14.907783150 +0200 -+++ addons/openacademy/views/openacademy.xml 2014-08-26 17:26:14.899783151 +0200 -@@ -93,6 +93,19 @@ +--- addons.orig/openacademy/views/openacademy.xml 2014-08-28 14:22:01.371015565 +0200 ++++ addons/openacademy/views/openacademy.xml 2014-08-28 14:22:01.367015565 +0200 +@@ -96,6 +96,19 @@ openacademy.session
diff --git a/doc/howtos/backend/exercise-state-workflow b/doc/howtos/backend/exercise-state-workflow index ee6b318bb1e..0e1bf4b75b3 100644 --- a/doc/howtos/backend/exercise-state-workflow +++ b/doc/howtos/backend/exercise-state-workflow @@ -3,8 +3,8 @@ Index: addons/openacademy/__openerp__.py =================================================================== ---- addons.orig/openacademy/__openerp__.py 2014-08-26 17:26:15.771783138 +0200 -+++ addons/openacademy/__openerp__.py 2014-08-26 17:26:15.763783138 +0200 +--- addons.orig/openacademy/__openerp__.py 2014-08-28 14:22:04.135015524 +0200 ++++ addons/openacademy/__openerp__.py 2014-08-28 14:22:04.131015524 +0200 @@ -29,6 +29,7 @@ 'templates.xml', 'views/openacademy.xml', @@ -15,8 +15,8 @@ Index: addons/openacademy/__openerp__.py 'demo': [ Index: addons/openacademy/models.py =================================================================== ---- addons.orig/openacademy/models.py 2014-08-26 17:26:15.771783138 +0200 -+++ addons/openacademy/models.py 2014-08-26 17:26:15.763783138 +0200 +--- addons.orig/openacademy/models.py 2014-08-28 14:22:04.135015524 +0200 ++++ addons/openacademy/models.py 2014-08-28 14:22:04.131015524 +0200 @@ -70,7 +70,7 @@ ('draft', "Draft"), ('confirmed', "Confirmed"), @@ -28,9 +28,9 @@ Index: addons/openacademy/models.py def action_draft(self): Index: addons/openacademy/views/openacademy.xml =================================================================== ---- addons.orig/openacademy/views/openacademy.xml 2014-08-26 17:26:15.771783138 +0200 -+++ addons/openacademy/views/openacademy.xml 2014-08-26 17:26:15.763783138 +0200 -@@ -94,13 +94,13 @@ +--- addons.orig/openacademy/views/openacademy.xml 2014-08-28 14:22:04.135015524 +0200 ++++ addons/openacademy/views/openacademy.xml 2014-08-28 14:22:04.131015524 +0200 +@@ -97,13 +97,13 @@
@@ -50,7 +50,7 @@ Index: addons/openacademy/views/openacademy.xml Index: addons/openacademy/views/session_workflow.xml =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ addons/openacademy/views/session_workflow.xml 2014-08-26 17:26:15.763783138 +0200 ++++ addons/openacademy/views/session_workflow.xml 2014-08-28 14:22:04.131015524 +0200 @@ -0,0 +1,50 @@ + + diff --git a/doc/howtos/backend/exercise-translations b/doc/howtos/backend/exercise-translations index aa62a5d4dfb..6d6bdfb1afa 100644 --- a/doc/howtos/backend/exercise-translations +++ b/doc/howtos/backend/exercise-translations @@ -1,7 +1,7 @@ Index: addons/openacademy/models.py =================================================================== ---- addons.orig/openacademy/models.py 2014-08-26 17:26:19.919783076 +0200 -+++ addons/openacademy/models.py 2014-08-26 17:26:19.915783076 +0200 +--- addons.orig/openacademy/models.py 2014-08-28 14:02:42.203032773 +0200 ++++ addons/openacademy/models.py 2014-08-28 14:06:54.871029022 +0200 @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- @@ -11,6 +11,21 @@ Index: addons/openacademy/models.py class Course(models.Model): _name = 'openacademy.course' +@@ -19,11 +19,11 @@ + default = dict(default or {}) + + copied_count = self.search_count( +- [('name', '=like', u"Copy of {}%".format(self.name))]) ++ [('name', '=like', _(u"Copy of {}%").format(self.name))]) + if not copied_count: +- new_name = u"Copy of {}".format(self.name) ++ new_name = _(u"Copy of {}").format(self.name) + else: +- new_name = u"Copy of {} ({})".format(self.name, copied_count) ++ new_name = _(u"Copy of {} ({})").format(self.name, copied_count) + + default['name'] = new_name + return super(Course, self).copy(default) @@ -97,15 +97,15 @@ if self.seats < 0: return { @@ -31,7 +46,7 @@ Index: addons/openacademy/models.py }, } -@@ -147,4 +147,4 @@ +@@ -151,4 +151,4 @@ @api.constrains('instructor_id', 'attendee_ids') def _check_instructor_not_in_attendees(self): if self.instructor_id and self.instructor_id in self.attendee_ids: diff --git a/doc/howtos/backend/exercise-wizard-action b/doc/howtos/backend/exercise-wizard-action index 45a5f5c2a8c..3bc20624ee9 100644 --- a/doc/howtos/backend/exercise-wizard-action +++ b/doc/howtos/backend/exercise-wizard-action @@ -1,8 +1,8 @@ Index: addons/openacademy/views/openacademy.xml =================================================================== ---- addons.orig/openacademy/views/openacademy.xml 2014-08-27 15:01:00.355074258 +0200 -+++ addons/openacademy/views/openacademy.xml 2014-08-27 15:04:45.891070910 +0200 -@@ -245,6 +245,12 @@ +--- addons.orig/openacademy/views/openacademy.xml 2014-08-28 14:34:19.255004611 +0200 ++++ addons/openacademy/views/openacademy.xml 2014-08-28 14:34:19.251004612 +0200 +@@ -248,6 +248,12 @@ @@ -17,8 +17,8 @@ Index: addons/openacademy/views/openacademy.xml Index: addons/openacademy/wizard.py =================================================================== ---- addons.orig/openacademy/wizard.py 2014-08-27 14:43:02.323090261 +0200 -+++ addons/openacademy/wizard.py 2014-08-27 15:05:28.407070278 +0200 +--- addons.orig/openacademy/wizard.py 2014-08-28 14:34:19.255004611 +0200 ++++ addons/openacademy/wizard.py 2014-08-28 14:34:19.251004612 +0200 @@ -11,3 +11,8 @@ session_id = fields.Many2one('openacademy.session', string="Session", required=True, default=_default_session) diff --git a/doc/howtos/backend/exercise-wizard-launch b/doc/howtos/backend/exercise-wizard-launch index 7689bfd243f..bfd0f26bf30 100644 --- a/doc/howtos/backend/exercise-wizard-launch +++ b/doc/howtos/backend/exercise-wizard-launch @@ -1,7 +1,7 @@ Index: addons/openacademy/wizard.py =================================================================== ---- addons.orig/openacademy/wizard.py 2014-08-27 14:24:39.195106637 +0200 -+++ addons/openacademy/wizard.py 2014-08-27 14:43:02.323090261 +0200 +--- addons.orig/openacademy/wizard.py 2014-08-28 14:34:07.879004780 +0200 ++++ addons/openacademy/wizard.py 2014-08-28 14:34:07.871004780 +0200 @@ -5,6 +5,9 @@ class Wizard(models.TransientModel): _name = 'openacademy.wizard' @@ -15,9 +15,9 @@ Index: addons/openacademy/wizard.py attendee_ids = fields.Many2many('res.partner', string="Attendees") Index: addons/openacademy/views/openacademy.xml =================================================================== ---- addons.orig/openacademy/views/openacademy.xml 2014-08-27 14:20:50.071110038 +0200 -+++ addons/openacademy/views/openacademy.xml 2014-08-27 15:01:00.355074258 +0200 -@@ -235,5 +235,26 @@ +--- addons.orig/openacademy/views/openacademy.xml 2014-08-28 14:34:07.879004780 +0200 ++++ addons/openacademy/views/openacademy.xml 2014-08-28 14:34:07.871004780 +0200 +@@ -238,5 +238,26 @@ diff --git a/doc/howtos/backend/exercise-wizard-multi b/doc/howtos/backend/exercise-wizard-multi index 19a21a40df8..dc99dba2e31 100644 --- a/doc/howtos/backend/exercise-wizard-multi +++ b/doc/howtos/backend/exercise-wizard-multi @@ -1,8 +1,8 @@ Index: addons/openacademy/views/openacademy.xml =================================================================== ---- addons.orig/openacademy/views/openacademy.xml 2014-08-27 15:04:45.891070910 +0200 -+++ addons/openacademy/views/openacademy.xml 2014-08-27 15:27:13.919050898 +0200 -@@ -242,7 +242,7 @@ +--- addons.orig/openacademy/views/openacademy.xml 2014-08-28 14:34:28.583004473 +0200 ++++ addons/openacademy/views/openacademy.xml 2014-08-28 14:34:28.579004473 +0200 +@@ -245,7 +245,7 @@ @@ -13,8 +13,8 @@ Index: addons/openacademy/views/openacademy.xml