Improve request view
Add request reference object to handle many references Improve readonly states depending on user
This commit is contained in:
1 parent
9668d696a2
commit
826eda45a3
2 files changed
+95
-61
No files matched your search
+45
-33
@@ -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
@@ -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>
|
||||
Reference in new issue
Block a user