Reviewers: ,
Please review this at http://codereview.tryton.org/586007/
Affected files:
M contact_mechanism.py
M contact_mechanism.xml
Index: contact_mechanism.py
===================================================================
--- a/contact_mechanism.py
+++ b/contact_mechanism.py
@@ -32,9 +32,9 @@
_rec_name = 'value'
type = fields.Selection(_TYPES, 'Type', required=True, states=STATES,
- sort=False, depends=DEPENDS)
+ sort=False, on_change=['value', 'type'], depends=DEPENDS)
value = fields.Char('Value', select=True, states=STATES,
- on_change=['value'], depends=DEPENDS)
+ on_change=['value', 'type'], depends=DEPENDS)
comment = fields.Text('Comment', states=STATES, depends=DEPENDS)
party = fields.Many2One('party.party', 'Party', required=True,
ondelete='CASCADE', states=STATES, select=True, depends=DEPENDS)
@@ -46,32 +46,39 @@
'invisible': Eval('type') != 'email',
'required': Eval('type') == 'email',
'readonly': ~Eval('active', True),
- }, on_change=['email'], depends=['value', 'type', 'active']),
+ }, on_change=['email', 'type'],
depends=['value', 'type', 'active']),
'get_value', setter='set_value')
website = fields.Function(fields.Char('Website', states={
'invisible': Eval('type') != 'website',
'required': Eval('type') == 'website',
'readonly': ~Eval('active', True),
- }, on_change=['website'], depends=['value', 'type', 'active']),
+ }, on_change=['website', 'type'],
depends=['value', 'type', 'active']),
'get_value', setter='set_value')
skype = fields.Function(fields.Char('Skype', states={
'invisible': Eval('type') != 'skype',
'required': Eval('type') == 'skype',
'readonly': ~Eval('active', True),
- }, on_change=['skype'], depends=['value', 'type', 'active']),
+ }, on_change=['skype', 'type'],
depends=['value', 'type', 'active']),
'get_value', setter='set_value')
sip = fields.Function(fields.Char('SIP', states={
'invisible': Eval('type') != 'sip',
'required': Eval('type') == 'sip',
'readonly': ~Eval('active', True),
- }, on_change=['sip'], depends=['value', 'type', 'active']),
+ }, on_change=['sip', 'type'], depends=['value', 'type', 'active']),
'get_value', setter='set_value')
other_value = fields.Function(fields.Char('Value', states={
'invisible':
Eval('type').in_(['email', 'website', 'skype', 'sip']),
'required': ~Eval('type').in_(['email', 'website']),
'readonly': ~Eval('active', True),
- }, on_change=['other_value'], depends=['value', 'type', 'active']),
+ }, on_change=['other_value', 'type'],
+ depends=['value', 'type', 'active']),
'get_value', setter='set_value')
+ url = fields.Function(fields.Char('URL', states={
+ 'invisible':
(~Eval('type').in_(['email', 'website', 'skip',
+ 'sip'])
+ | ~Eval('url')),
+ }, depends=['type']),
+ 'get_url')
@classmethod
def __setup__(cls):
@@ -106,6 +113,19 @@
return dict((name, dict((m.id, m.value) for m in mechanisms))
for name in names)
+ def get_url(self, name=None, value=None):
+ if value is None:
+ value = self.value
+ if self.type == 'email':
+ return 'mailto:%s' % value
+ elif self.type == 'website':
+ return value
+ elif self.type == 'skype':
+ return 'callto:%s' % value
+ elif self.type == 'sip':
+ return 'sip:%s' % value
+ return None
+
@classmethod
def set_value(cls, mechanisms, name, value):
cls.write(mechanisms, {
@@ -120,6 +140,12 @@
'skype': value,
'sip': value,
'other_value': value,
+ 'url': self.get_url(value=value)
+ }
+
+ def on_change_type(self):
+ return {
+ 'url': self.get_url(value=self.value),
}
def on_change_value(self):
Index: contact_mechanism.xml
===================================================================
--- a/contact_mechanism.xml
+++ b/contact_mechanism.xml
@@ -25,10 +25,11 @@
<field name="priority" eval="20"/>
<field name="arch" type="xml">
<![CDATA[
- <tree string="Contact Mechanisms" sequence="sequence">
+ <tree string="Contact Mechanisms" sequence="sequence"
+ editable="bottom">
<field name="type"/>
- <field name="value"/>
- <field name="comment" expand="1"/>
+ <field name="value" expand="1"/>
+ <field name="url" widget="url"/>
</tree>
]]>
</field>
--
[email protected] mailing list