Improve request view

Add request reference object to handle many references
Improve readonly states depending on user
This commit is contained in:
Cédric Krier committed 2008-09-09 11:19:24 +02:00
1 parent 9668d696a2
commit 826eda45a3
2 files changed
+95 -61

No files matched your search

+45 -33
View File
@@ -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()
+50 -28
View File
@@ -26,47 +26,42 @@
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
<form string="Requests">
<notebook>
<form string="Requests" col="6">
<label name="act_from"/>
<field name="act_from"/>
<label name="act_to"/>
<field name="act_to"/>
<label name="active"/>
<field name="active" xexpand="0" width="100"/>
<label name="name"/>
<field name="name" colspan="3"/>
<label name="priority"/>
<field name="priority"/>
<notebook colspan="6">
<page string="Request">
<separator string="Description" colspan="4"/>
<label name="act_from"/>
<field name="act_from"/>
<label name="act_to"/>
<field name="act_to"/>
<label name="name"/>
<field name="name" colspan="3"/>
<newline/>
<separator name="body" colspan="4"/>
<field name="body" colspan="4"/>
<field name="history" colspan="4"/>
<label name="trigger_date"/>
<field name="trigger_date"/>
<group col="2" colspan="2">
<button name="request_send" states="{'invisible': '''state not in ('draft', 'active')'''}"
<button name="request_send"
states="{'invisible': '''state not in ('draft', 'active')''', 'readonly': '''act_from != _user'''}"
string="Send" type="object"/>
<button name="request_reply" states="{'invisible': '''state != 'waiting' '''}"
<button name="request_reply"
states="{'invisible': '''state != 'waiting' ''', 'readonly': '''act_to != _user'''}"
string="Reply" type="object"/>
</group>
<separator string="References" colspan="4"/>
<!--field name="ref_partner_id"/-->
<label name="priority"/>
<field name="priority"/>
<newline/>
<label name="ref_doc1"/>
<field name="ref_doc1" colspan="3"/>
<label name="ref_doc2"/>
<field name="ref_doc2" colspan="3"/>
<separator name="state" colspan="4"/>
<field name="state" colspan="2"/>
<label name="state"/>
<field name="state"/>
<group col="3" colspan="2">
<label name="active"/>
<field name="active"/>
<button name="request_close" states="{'invisible': '''state not in ('waiting', 'draft', 'active')'''}"
<button name="request_close"
states="{'invisible': '''state not in ('waiting', 'draft', 'active')'''}"
string="Close" type="object"/>
</group>
</page>
<page string="History">
<field name="history" colspan="4"/>
<page string="References" col="1">
<field name="references"/>
</page>
</notebook>
</form>
@@ -173,5 +168,32 @@
]]>
</field>
</record>
<record model="ir.ui.view" id="request_reference_view_tree">
<field name="model">res.request.reference</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<![CDATA[
<tree string="Request References">
<field name="request"/>
<field name="reference"/>
</tree>
]]>
</field>
</record>
<record model="ir.ui.view" id="request_reference_view_form">
<field name="model">res.request.reference</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
<form string="Request Reference" col="2">
<label name="request"/>
<field name="request"/>
<label name="reference"/>
<field name="reference"/>
</form>
]]>
</field>
</record>
</data>
</tryton>