From 826eda45a34efd4d8a814b9593721e33a100eb65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Tue, 9 Sep 2008 11:19:24 +0200 Subject: [PATCH] Improve request view Add request reference object to handle many references Improve readonly states depending on user --- trytond/res/request.py | 78 ++++++++++++++++++++++++----------------- trytond/res/request.xml | 78 ++++++++++++++++++++++++++--------------- 2 files changed, 95 insertions(+), 61 deletions(-) diff --git a/trytond/res/request.py b/trytond/res/request.py index dbff91e6bf..ef45b78087 100644 --- a/trytond/res/request.py +++ b/trytond/res/request.py @@ -10,7 +10,8 @@ class Request(OSV): _description = __doc__ create_date = fields.DateTime('Created date', readonly=True) name = fields.Char('Subject', states={ - 'readonly': "state in ('waiting', 'active', 'closed')", + 'readonly': "(state in ('waiting', 'closed')) or " \ + "(state == 'active' and act_from != _user)", }, required=True) active = fields.Boolean('Active') priority = fields.Selection([ @@ -18,41 +19,34 @@ class Request(OSV): ('1', 'Normal'), ('2', 'High'), ], 'Priority', states={ - 'readonly': "state in ('waiting', 'closed')", + 'readonly': "(state in ('waiting', 'closed')) or " \ + "(state == 'active' and act_from != _user)", }, required=True) act_from = fields.Many2One('res.user', 'From', required=True, - readonly=True, states={ - 'readonly': "state == 'closed'", - }) + readonly=True) act_to = fields.Many2One('res.user', 'To', required=True, states={ - 'readonly': "state in ('waiting', 'closed')", + 'readonly': "(state in ('waiting', 'closed')) or " \ + "(state == 'active' and act_from != _user)", }) - body = fields.Text('Request', states={ - 'readonly': "state in ('waiting', 'closed')", + body = fields.Text('Body', states={ + 'readonly': "(state in ('waiting', 'closed')) or " \ + "(state == 'active' and act_from != _user)", }) date_sent = fields.DateTime('Date', readonly=True) trigger_date = fields.DateTime('Trigger Date', states={ - 'readonly': "state in ('waiting', 'closed')", + 'readonly': "(state in ('waiting', 'closed')) or " \ + "(state == 'active' and act_from != _user)", }) -# 'ref_partner_id': fields.Many2One('res.partner', 'Partner Ref.', -# states={ -# 'closed': [('readonly', True)], -# }) -# TODO: use one2many instead limit number of reference - ref_doc1 = fields.Reference('Document Ref 1', selection='links_get', - states={ - 'readonly': "state == 'closed'", - }) - ref_doc2 = fields.Reference('Document Ref 2', selection='links_get', - states={ - 'readonly': "state == 'closed'", + references = fields.One2Many('res.request.reference', 'request', + 'References', states={ + 'readonly': "state == 'closed' or act_from != _user", }) state = fields.Selection([ - ('draft', 'draft'), - ('waiting', 'waiting'), - ('active', 'active'), - ('closed', 'closed'), + ('draft', 'Draft'), + ('waiting', 'Waiting'), + ('active', 'Active'), + ('closed', 'Closed'), ], 'State', required=True, readonly=True) history = fields.One2Many('res.request.history', 'request', 'History', readonly=True) @@ -81,13 +75,6 @@ class Request(OSV): self._order.insert(1, ('trigger_date', 'ASC')) self._order.insert(2, ('create_date', 'DESC')) - def links_get(self, cursor, user, context=None): - request_link_obj = self.pool.get('res.request.link') - ids = request_link_obj.search(cursor, user, []) - request_links = request_link_obj.browse(cursor, user, ids, - context=context) - return [(x.model, x.name) for x in request_links] - def request_send(self, cursor, user, ids, context=None): request_history_obj = self.pool.get('res.request.history') for request in self.browse(cursor, user, ids, context=context): @@ -168,13 +155,17 @@ class RequestHistory(OSV): _description = __doc__ name = fields.Char('Summary', required=True) request = fields.Many2One('res.request', 'Request', required=True, - ondelete='cascade', select=True) + ondelete='CASCADE', select=1) act_from = fields.Many2One('res.user', 'From', required=True, readonly=True) act_to = fields.Many2One('res.user', 'To', required=True) body = fields.Text('Body') date_sent = fields.DateTime('Date sent', required=True) + def __init__(self): + super(RequestHistory, self).__init__() + self._order.insert(0, ('date_sent', 'DESC')) + def default_name(self, cursor, user, context=None): return 'No Name' @@ -188,3 +179,24 @@ class RequestHistory(OSV): return time.strftime('%Y-%m-%d %H:%M:%S') RequestHistory() + + +class RequestReference(OSV): + "Request Reference" + _name = 'res.request.reference' + _description = __doc__ + _rec_name = 'reference' + + request = fields.Many2One('res.request', required=True, + ondelete="CASCADE", select=1) + reference = fields.Reference('Reference', selection='links_get', + required=True) + + def links_get(self, cursor, user, context=None): + request_link_obj = self.pool.get('res.request.link') + ids = request_link_obj.search(cursor, user, []) + request_links = request_link_obj.browse(cursor, user, ids, + context=context) + return [(x.model, x.name) for x in request_links] + +RequestReference() diff --git a/trytond/res/request.xml b/trytond/res/request.xml index 63d036ae54..52af5065e9 100644 --- a/trytond/res/request.xml +++ b/trytond/res/request.xml @@ -26,47 +26,42 @@ form - +
+