[IMP] base_contact: improve the form view if the use_existing_address field has been selected

bzr revid: stw@openerp.com-20111214164650-yzy5x9084apuj5q4
This commit is contained in:
Stephane Wirtel 2011-12-14 17:46:50 +01:00
parent b12c719ed8
commit ab005420a5
2 changed files with 95 additions and 9 deletions

View File

@ -121,9 +121,29 @@ class res_partner_address(osv.osv):
_name = 'res.partner.address'
_inherits = { 'res.partner.location' : 'location_id' }
def _get_use_existing_address(self, cr, uid, ids, fieldnames, args, context=None):
result = dict.fromkeys(ids, False)
for obj in self.browse(cr, uid, ids, context=context):
result[obj.id] = int(obj.location_id)
return result
def _set_use_existing_address(self, cr, uid, ids, name, value, arg, context=None):
return True
def default_get(self, cr, uid, fieldnames, context=None):
result = super(res_partner_address, self).default_get(cr, uid, fieldnames, context=context)
result.update({ 'use_existing_address' : False, })
return result
_columns = {
'location_id' : fields.many2one('res.partner.location', 'Location'),
'location2_id' : fields.many2one('res.partner.location', 'Location'),
'use_existing_address' : fields.function(_get_use_existing_address,
fnct_inv=_set_use_existing_address,
type='boolean',
string='Use Existing Address'),
'contact_id' : fields.many2one('res.partner.contact', 'Contact', required=True),
'partner_id' : fields.many2one('res.partner', 'Partner'),
@ -137,12 +157,10 @@ class res_partner_address(osv.osv):
}
def name_get(self, cr, uid, ids, context=None):
result = []
append_call = result.append
for obj in self.browse(cr, uid, ids, context=context):
append_call((obj.id, "%s, %s" % (obj.contact_id.name_get()[0][1], obj.location_id.name_get()[0][1],)))
return result
return [
((obh.id, "%s, %s" % (obj.contact_id.name_get()[0][1], obj.location_id.name_get()[0][1],)))
for obj in self.browse(cr, uid, ids, context=context)
]
_description ='Contact Partner Function'
@ -152,12 +170,43 @@ class res_partner_address(osv.osv):
}
def create(self, cr, uid, values, context=None):
record_id = super(res_partner_address, self).create(cr, uid, values, context=context)
record = self.browse(cr, uid, record_id, context=context)
write_values = dict()
if values['partner_id'] and record.location_id:
record.location_id.write({'partner_id' : values['partner_id']}, context=context)
write_values['location2_id'] = record.location_id.id
if not record.partner_id and record.location2_id and record.location2_id.partner_id:
record.write({'partner_id' : record.location2_id.partner_id.id}, context=context)
write_values['partner_id'] = record.location2_id.partner_id.id
if write_values:
record.write(write_values, context=context)
return record_id
def on_change_use_existing_address(self, cr, uid, ids, use_existing_address, context=None):
#FIELDS = {
# False : ['location_id'],
# True: ['street', 'street2', 'city', 'country_id', 'state_id', 'phone', 'mobile', 'fax', 'email', 'zip'],
#}
#return {'value': dict((keyword, False) for keyword in FIELDS[use_existing_address])}
values = { }
if not use_existing_address:
nested_values = {
'location_id' : False
}
else:
nested_values = dict(
(keyword, False)
for keyword in ['street', 'street2', 'city', 'country_id', 'state_id', 'phone', 'mobile', 'fax', 'email', 'zip']
)
values.update(nested_values)
return {'value': values}
def _auto_init(self, cr, context=None):
def column_exists(column):
cr.execute("select count(attname) from pg_attribute where attrelid = \

View File

@ -273,17 +273,54 @@
<field name="name" position="replace" />
<field name="active" position="after">
<separator string="Contact" colspan="6" />
<group colspan="6" col="2">
<group colspan="6" col="4">
<field name="title" />
<field name="contact_id" />
</group>
</field>
<field name="street" position="before">
<field name="use_existing_address" on_change="on_change_use_existing_address(use_existing_address)"/>
<field name="location_id" required="0" attrs="{'readonly' : [('use_existing_address', '=', 0)]}" domain="[('partner_id', '=', partner_id)]" />
</field>
<field name="partner_id" position="replace">
<field name='partner_id' select='1'/>
<!-- <field name="location_id" domain="[('partner_id', '=', partner_id)]"/> -->
<field name='type' select='2' invisible="1"/>
<field name="function" />
</field>
<field name="street" position="attributes">
<attribute name="attrs">{'readonly' : [('use_existing_address', '=', 1)]}</attribute>
</field>
<field name="street2" position="attributes">
<attribute name="attrs">{'readonly' : [('use_existing_address', '=', 1)]}</attribute>
</field>
<field name="city" position="attributes">
<attribute name="attrs">{'readonly' : [('use_existing_address', '=', 1)]}</attribute>
</field>
<field name="zip" position="attributes">
<attribute name="attrs">{'readonly' : [('use_existing_address', '=', 1)]}</attribute>
</field>
<field name="phone" position="attributes">
<attribute name="attrs">{'readonly' : [('use_existing_address', '=', 1)]}</attribute>
</field>
<field name="fax" position="attributes">
<attribute name="attrs">{'readonly' : [('use_existing_address', '=', 1)]}</attribute>
</field>
<field name="email" position="attributes">
<attribute name="attrs">{'readonly' : [('use_existing_address', '=', 1)]}</attribute>
</field>
<field name="mobile" position="attributes">
<attribute name="attrs">{'readonly' : [('use_existing_address', '=', 1)]}</attribute>
</field>
<field name="state_id" position="attributes">
<attribute name="attrs">{'readonly' : [('use_existing_address', '=', 1)]}</attribute>
</field>
<field name="country_id" position="attributes">
<attribute name="attrs">{'readonly' : [('use_existing_address', '=', 1)]}</attribute>
</field>
<field name="state_id" position="after">
<separator string="State" colspan="6" />
<field name="state" />
</field>
</field>
</record>