[IMP] base_contact, new architecture

bzr revid: fp@tinyerp.com-20111218114239-c0zh1b0xdrggglrl
This commit is contained in:
Fabien Pinckaers
2011-12-18 12:42:39 +01:00
parent 8b0311d85e
commit 56fbd7c0b2
6 changed files with 207 additions and 424 deletions
-2
View File
@@ -21,5 +21,3 @@
import base_contact
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+2 -3
View File
@@ -19,15 +19,14 @@
#
##############################################################################
{
'name': 'Contacts Management',
'version': '1.0',
'category': 'Customer Relationship Management',
'complexity': "expert",
'description': """
This module allows you to manage your contacts entirely.
========================================================
This module allows you to manage your contacts
==============================================
It lets you define:
* contacts unrelated to a partner,
+101 -92
View File
@@ -28,11 +28,18 @@ class res_partner_contact(osv.osv):
_name = "res.partner.contact"
_description = "Contact"
def _name_get_full(self, cr, uid, ids, prop, unknow_none, context=None):
result = {}
for rec in self.browse(cr, uid, ids, context=context):
result[rec.id] = rec.last_name+' '+(rec.first_name or '')
return result
_columns = {
'name': fields.char('Last Name', size=64, required=True),
'name': fields.function(_name_get_full, string='Name', size=64, type="char", store=True),
'last_name': fields.char('Last Name', size=64, required=True),
'first_name': fields.char('First Name', size=64),
'mobile': fields.char('Mobile', size=64),
'title': fields.many2one('res.partner.title','Title'),
'title': fields.many2one('res.partner.title','Title', domain=[('domain','=','contact')]),
'website': fields.char('Website', size=120),
'lang_id': fields.many2one('res.lang', 'Language'),
'job_ids': fields.one2many('res.partner.address', 'contact_id', 'Functions and Addresses'),
@@ -40,14 +47,13 @@ class res_partner_contact(osv.osv):
'birthdate': fields.date('Birth Date'),
'active': fields.boolean('Active', help="If the active field is set to False,\
it will allow you to hide the partner contact without removing it."),
'partner_id': fields.related('job_ids', 'location_id', 'partner_id', type='many2one',\
'partner_id': fields.related('job_ids', 'partner_id', type='many2one',\
relation='res.partner', string='Main Employer'),
'function': fields.related('job_ids', 'function', type='char', \
string='Main Function'),
'email': fields.char('E-Mail', size=240),
'comment': fields.text('Notes', translate=True),
'photo': fields.binary('Photo'),
}
def _get_photo(self, cr, uid, context=None):
@@ -74,24 +80,53 @@ class res_partner_contact(osv.osv):
def name_get(self, cr, uid, ids, context=None):
return [
(obj.id, " ".join(filter(None, [obj.first_name, obj.name])),)
(obj.id, obj.name)
for obj in self.browse(cr, uid, ids, context=context)
]
res_partner_contact()
def _auto_init(self, cr, context=None):
def table_exists(view_name):
cr.execute('SELECT count(relname) FROM pg_class WHERE relname = %s', (view_name,))
value = cr.fetchone()[0]
return bool(value == 1)
class res_partner(osv.osv):
_inherit = 'res.partner'
_columns = {
'address': fields.one2many('res.partner.location', 'partner_id', 'Address')
}
res_partner()
exists = table_exists(self._table)
super(res_partner_contact, self)._auto_init(cr, context)
if not exists:
cr.execute("""
INSERT INTO
res_partner_contact
(id,name,last_name,title,active)
SELECT
id,COALESCE(name, '/'),COALESCE(name, '/'),title,true
FROM
res_partner_address""")
cr.execute("alter table res_partner_address add contact_id int references res_partner_contact")
cr.execute("update res_partner_address set contact_id=id")
cr.execute("select setval('res_partner_contact_id_seq', (select max(id)+1 from res_partner_contact))")
res_partner_contact()
class res_partner_location(osv.osv):
_name = 'res.partner.location'
_inherit = 'res.partner.address'
_rec_name = 'street'
_columns = {
'street': fields.char('Street', size=128),
'street2': fields.char('Street2', size=128),
'zip': fields.char('Zip', change_default=True, size=24),
'city': fields.char('City', size=128),
'state_id': fields.many2one("res.country.state", 'Fed. State', domain="[('country_id','=',country_id)]"),
'country_id': fields.many2one('res.country', 'Country'),
'partner_id': fields.many2one('res.partner', 'Partner Name', ondelete='set null', select=True, help="Keep empty for a private address, not related to partner."),
'company_id': fields.many2one('res.company', 'Company',select=1),
'job_ids': fields.one2many('res.partner.address', 'location_id', 'Contacts'),
'partner_id': fields.related('job_ids', 'partner_id', type='many2one',\
relation='res.partner', string='Main Partner'),
}
_defaults = {
'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'res.partner.address', context=c),
}
def _auto_init(self, cr, context=None):
def table_exists(view_name):
@@ -103,29 +138,34 @@ class res_partner_location(osv.osv):
super(res_partner_location, self)._auto_init(cr, context)
if not exists:
sequence_name = self.pool.get('res.partner.address')._sequence
cr.execute("SELECT last_value FROM " + sequence_name)
last_sequence = cr.fetchone()[0]
cr.execute("INSERT INTO res_partner_location SELECT * FROM res_partner_address")
cr.execute("ALTER SEQUENCE " + self._sequence + " RESTART WITH " + str(last_sequence + 10))
cr.execute("""
INSERT INTO
res_partner_location
(id,street,street2,zip,city,
state_id,country_id,company_id)
SELECT
id,street,street2,zip,city,
state_id,country_id,company_id
FROM
res_partner_address""")
cr.execute("alter table res_partner_address add location_id int references res_partner_location")
cr.execute("update res_partner_address set location_id=id")
cr.execute("select setval('res_partner_location_id_seq', (select max(id)+1 from res_partner_address))")
def name_get(self, cr, uid, ids, context=None):
return [
((obj.id, "%s, %s" % (obj.city, obj.country_id and obj.country_id.name or '')))
for obj in self.browse(cr, uid, ids, context=context)
]
result = {}
for obj in self.browse(cr, uid, ids, context=context):
res = []
if obj.partner_id: res.append(obj.partner_id.name_get()[0][1])
if obj.city: res.append(obj.city)
if obj.country_id: res.append(obj.country_id.name_get()[0][1])
result[obj.id] = ', '.join(res)
return result
res_partner_location()
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):
return dict(map(lambda x: (x, False), ids))
def _set_use_existing_address(self, cr, uid, ids, name, value, arg, context=None):
return True
_inherit = 'res.partner.address'
def _default_location_id(self, cr, uid, context=None):
context = context or {}
@@ -134,86 +174,55 @@ class res_partner_address(osv.osv):
ids = self.pool.get('res.partner.location').search(cr, uid, [('partner_id','=',context['default_partner_id'])], context=context)
return ids and ids[0] or False
def _default_existing_get(self, cr, uid, context=None):
return bool(self._default_location_id(cr, uid, context))
def onchange_location_id(self,cr, uid, ids, location_id=False, context={}):
if not location_id:
return {}
location = self.pool.get('res.partner.location').browse(cr, uid, location_id, context=context)
return {'value':{
'street': location.street,
'street2': location.street2,
'zip': location.zip,
'city': location.city,
'country_id': location.country_id and location.country_id.id or False,
'state_id': location.state_id and location.state_id.id or False,
}}
_columns = {
'location_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='Link to Existing Address'),
'location_id' : fields.many2one('res.partner.location', 'Location', required=True),
'contact_id' : fields.many2one('res.partner.contact', 'Contact'),
# come modules are doing SQL reports on those fields (crm)
# fields from location
'street': fields.related('location_id', 'street', string='Street', type="char", store=True, size=128),
'street2': fields.related('location_id', 'street2', string='Street2', type="char", store=True, size=128),
'zip': fields.related('location_id', 'zip', string='Zip', type="char", store=True, change_default=True, size=24),
'city': fields.related('location_id', 'city', string='City', type="char", store=True, size=128),
'state_id': fields.related('location_id', 'state_id', relation="res.country.state", string='Fed. State', type="many2one", store=True, domain="[('country_id','=',country_id)]"),
'country_id': fields.related('location_id', 'country_id', type='many2one', string='Country', store=True, relation='res.country'),
'company_id': fields.related('location_id', 'company_id', type='many2one', string='Company', store=True, relation='res.company'),
# Do not use the one of the location, each job position has it's phone
'phone': fields.char('Phone', size=64),
'fax': fields.char('Fax', size=64),
'email': fields.char('E-Mail', size=240),
'function': fields.char('Partner Function', size=64, help="Function of this contact with this partner"),
#'partner_id' : fields.related('location_id', 'partner_id', type="many2one", relation='res.partner', string='Partner'),
'contact_firstname' : fields.related('contact_id', 'first_name', type='char', size=64, string='Firstname'),
'contact_name' : fields.related('contact_id', 'name', type='char', size=64, string="Lastname"),
'name' : fields.related('contact_id', 'name', type='char', size=64, string="Lastname", store=True),
# fields from contact
'mobile' : fields.related('contact_id', 'mobile', type='char', size=64, string='Mobile'),
'name' : fields.related('contact_id', 'name', type='char', size=64, string="Contact Name", store=True),
'title' : fields.related('contact_id', 'title', type='many2one', relation='res.partner.title', string="Title", store=True),
}
def name_get(self, cr, uid, ids, context=None):
return [
((obj.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)
]
result = {}
for rec in self.browse(cr,uid, ids, context=context):
res = []
for obj in [rec.partner_id, rec.contact_id, rec.location_id]:
if obj:
res.append(obj.name_get()[0][1])
result[rec.id] = ', '.join(res)
return result
_defaults = {
'use_existing_address': _default_existing_get,
'location_id': _default_location_id
}
def _auto_init(self, cr, context=None):
def column_exists(column):
cr.execute("select count(attname) from pg_attribute where attrelid = \
(select oid from pg_class where relname = %s) \
and attname = %s", (self._table, column,))
value = cr.fetchone()[0]
return bool(value == 1)
exists = column_exists('location_id')
super(res_partner_address, self)._auto_init(cr, context)
if not exists:
contact_proxy = self.pool.get('res.partner.contact')
uid = 1
cr.execute("SELECT id, name, mobile, country_id, partner_id, phone, email, street, street2, city, company_id, state_id, zip, location_id \
FROM res_partner_address")
for item in cr.fetchall():
values = {
'name' : item[1] or '/',
'mobile' : item[2],
'country_id' : item[3],
'phone' : item[5],
'email' : item[6],
'company_id' : item[10],
}
contact_id = contact_proxy.create(cr, uid, values, context=context)
values = {
'street' : item[7],
'street2' : item[8],
'city' : item[9],
'country_id' : item[3],
'company_id' : item[10],
'state_id' : item[11],
'zip' : item[12],
}
location_id = self.pool.get('res.partner.location').create(cr, uid, values, context=context)
cr.execute("UPDATE res_partner_address SET location_id = %s, contact_id = %s, partner_id = %s WHERE id = %s",
(location_id, contact_id, item[4], item[0],))
def default_get(self, cr, uid, fields=[], context=None):
context = context or {}
if 'default_type' in context:
+61 -84
View File
@@ -3,141 +3,118 @@
<data>
<record id="base.user_demo" model="res.users">
<field eval="[(4, ref('base.group_sale_salesman'))]" name="groups_id"/>
<field eval="[(4,ref('base.group_sale_salesman'))]" name="groups_id"/>
</record>
<!-- Create the contacts -->
<record id="res_partner_contact_mortier0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Benoit&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;Mortier&quot;&quot;&quot;" name="name"/>
<field name="first_name">Benoit</field>
<field name="last_name">Mortier</field>
<field name="title" ref="base.res_partner_title_sir"/>
<field eval="1" name="active"/>
</record>
<record id="res_partner_contact_jacot0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Laurent&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;Jacot&quot;&quot;&quot;" name="name"/>
<field name="first_name">Laurent</field>
<field name="last_name">Jacot</field>
<field ref="base.res_partner_title_sir" name="title"/>
<field eval="1" name="active"/>
</record>
<record id="res_partner_contact_passot0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Thomas&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;Passot&quot;&quot;&quot;" name="name"/>
<field name="first_name">Thomas</field>
<field name="last_name">Passot</field>
<field ref="base.res_partner_title_sir" name="title"/>
<field eval="1" name="active"/>
</record>
<record id="res_partner_contact_lacarte0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Etienne&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;Lacarte&quot;&quot;&quot;" name="name"/>
<field eval="1" name="active"/>
<field name="first_name">Etienne</field>
<field name="last_name">Lacarte</field>
</record>
<record id="res_partner_contact_tang0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Tang&quot;&quot;&quot;" name="name"/>
<field eval="1" name="active"/>
<field name="last_name">Tang</field>
</record>
<record id="res_partner_contact_wong0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Wong&quot;&quot;&quot;" name="name"/>
<field eval="1" name="active"/>
<field name="last_name">Wong</field>
</record>
<record id="res_partner_contact_lavente0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Jean-Guy&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;Lavente&quot;&quot;&quot;" name="name"/>
<field name="first_name">Jean-Guy</field>
<field name="last_name">Lavente</field>
<field ref="base.res_partner_title_sir" name="title"/>
<field eval="1" name="active"/>
</record>
<record id="res_partner_contact_lelitre0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Sylvie&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;Lelitre&quot;&quot;&quot;" name="name"/>
<field name="first_name">Sylvie</field>
<field name="last_name">Lelitre</field>
<field ref="base.res_partner_title_sir" name="title"/>
<field eval="1" name="active"/>
</record>
<record id="res_partner_contact_grosbonnet0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Arthur&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;Grosbonnet&quot;&quot;&quot;" name="name"/>
<field name="first_name">Arthur</field>
<field name="last_name">Grosbonnet</field>
<field ref="base.res_partner_title_sir" name="title"/>
<field eval="1" name="active"/>
</record>
<record id="res_partner_contact_lesbrouffe0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Karine&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;Lesbrouffe&quot;&quot;&quot;" name="name"/>
<field name="first_name">Karine</field>
<field name="last_name">Lesbrouffe</field>
<field ref="base.res_partner_title_madam" name="title"/>
<field eval="1" name="active"/>
</record>
<record id="res_partner_contact_zen0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Zen&quot;&quot;&quot;" name="name"/>
<field eval="1" name="active"/>
<field name="last_name">Zen</field>
</record>
<record id="res_partner_contact_pinckears0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;http://fptiny.blogspot.com/&quot;&quot;&quot;" name="website"/>
<field eval="&quot;&quot;&quot;Fabien&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;Pinckaers&quot;&quot;&quot;" name="name"/>
<field name="website">http://fptiny.blogspot.com/</field>
<field name="first_name">Fabien</field>
<field name="last_name">Pinckaers</field>
<field ref="base.res_partner_title_sir" name="title"/>
<field eval="1" name="active"/>
</record>
<record id="res_partner_contact_debois0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Marc&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;Debois&quot;&quot;&quot;" name="name"/>
<field name="first_name">Marc</field>
<field name="last_name">Debois</field>
<field ref="base.res_partner_title_sir" name="title"/>
<field eval="1" name="active"/>
</record>
<record id="res_partner_contact_luu0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Phuong&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;Luu&quot;&quot;&quot;" name="name"/>
<field name="first_name">Phuong</field>
<field name="last_name">Luu</field>
<field ref="base.res_partner_title_madam" name="title"/>
<field eval="1" name="active"/>
</record>
<record id="res_partner_contact_elkhayat0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Najlaa&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;Khayat&quot;&quot;&quot;" name="name"/>
<field name="first_name">Najlaa</field>
<field name="last_name">Khayat</field>
<field ref="base.res_partner_title_madam" name="title"/>
<field eval="1" name="active"/>
</record>
<record id="res_partner_contact_depaoli0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Quentin&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;Paolino&quot;&quot;&quot;" name="name"/>
<field name="first_name">Quentin</field>
<field name="last_name">Paolino</field>
<field ref="base.res_partner_title_sir" name="title"/>
<field eval="1" name="active"/>
</record>
<record id="res_partner_contact_semal0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Fabian&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;W.&quot;&quot;&quot;" name="name"/>
<field name="first_name">Fabian</field>
<field name="last_name">W.</field>
<field ref="base.res_partner_title_sir" name="title"/>
<field eval="1" name="active"/>
</record>
<record id="res_partner_contact_vandewerve0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Yvan&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;van de Werve&quot;&quot;&quot;" name="name"/>
<field name="first_name">Yvan</field>
<field name="last_name">Van</field>
<field ref="base.res_partner_title_sir" name="title"/>
<field eval="1" name="active"/>
</record>
<record id="res_partner_contact_lambotte0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Henry&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;Lambotte&quot;&quot;&quot;" name="name"/>
<field name="first_name">Henry</field>
<field name="last_name">Lambotte</field>
<field ref="base.res_partner_title_sir" name="title"/>
<field eval="1" name="active"/>
</record>
<record id="res_partner_contact_laurent0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Olivier&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;Laurent&quot;&quot;&quot;" name="name"/>
<field name="first_name">Olivier</field>
<field name="last_name">Laurent</field>
<field ref="base.res_partner_title_sir" name="title"/>
<field eval="1" name="active"/>
</record>
<record id="res_partner_contact_simonis0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Christophe&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;Dupont&quot;&quot;&quot;" name="name"/>
<field name="first_name">Christophe</field>
<field name="last_name">Dupont</field>
<field ref="base.res_partner_title_sir" name="title"/>
<field eval="1" name="active"/>
</record>
<record id="res_partner_contact_wirtel0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Stéphane&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;Andre&quot;&quot;&quot;" name="name"/>
<field name="first_name">Stéphane</field>
<field name="last_name">Andre</field>
<field ref="base.res_partner_title_sir" name="title"/>
<field eval="1" name="active"/>
</record>
<record id="res_partner_contact_mignon0" model="res.partner.contact">
<field eval="&quot;&quot;&quot;Philippe&quot;&quot;&quot;" name="first_name"/>
<field eval="&quot;&quot;&quot;Antoine&quot;&quot;&quot;" name="name"/>
<field name="first_name">Philippe</field>
<field name="last_name">Antoine</field>
<field ref="base.res_partner_title_sir" name="title"/>
<field eval="1" name="active"/>
</record>
@@ -152,13 +129,13 @@
<record id="res_partner_job_1" model="res.partner.job">
<field name="address_id" ref="base.res_partner_address_2"/>
<field name="function">Salesman</field>
<field eval="&quot;&quot;&quot;contact@tecsas.fr&quot;&quot;&quot;" name="email"/>
<field name="email">contact@tecsas.fr</field>
<field name="contact_id" ref="res_partner_contact_jacot0"/>
</record>
<record id="res_partner_job_2" model="res.partner.job">
<field name="address_id" ref="base.res_partner_address_3"/>
<field name="function">CTO</field>
<field eval="&quot;&quot;&quot;info@mycompany.com&quot;&quot;&quot;" name="email"/>
<field name="email">info@mycompany.com</field>
<field name="contact_id" ref="res_partner_contact_passot0"/>
</record>
<record id="res_partner_job_3" model="res.partner.job">
@@ -207,74 +184,74 @@
<record id="res_partner_job_11" model="res.partner.job">
<field name="address_id" ref="base.main_address"/>
<field name="function">Salesman</field>
<field eval="&quot;&quot;&quot;re@mycompany.com&quot;&quot;&quot;" name="email"/>
<field name="email">re@mycompany.com</field>
<field name="contact_id" ref="res_partner_contact_mignon0"/>
</record>
<record id="res_partner_job_12" model="res.partner.job">
<field name="address_id" ref="base.main_address"/>
<field name="function">CTO</field>
<field eval="&quot;&quot;&quot;st@mycompany.com&quot;&quot;&quot;" name="email"/>
<field name="email">st@mycompany.com</field>
<field name="contact_id" ref="res_partner_contact_wirtel0"/>
</record>
<record id="res_partner_job_13" model="res.partner.job">
<field name="address_id" ref="base.main_address"/>
<field name="function">CTO</field>
<field eval="&quot;&quot;&quot;ch@mycompany.com&quot;&quot;&quot;" name="email"/>
<field name="email">ch@mycompany.com</field>
<field name="contact_id" ref="res_partner_contact_simonis0"/>
</record>
<record id="res_partner_job_14" model="res.partner.job">
<field name="address_id" ref="base.main_address"/>
<field name="function">CTO</field>
<field eval="&quot;&quot;&quot;ol@mycompany.com&quot;&quot;&quot;" name="email"/>
<field name="email">ol@mycompany.com</field>
<field name="contact_id" ref="res_partner_contact_laurent0"/>
</record>
<record id="res_partner_job_15" model="res.partner.job">
<field name="address_id" ref="base.main_address"/>
<field name="function">CTO</field>
<field eval="&quot;&quot;&quot;fl@mycompany.com&quot;&quot;&quot;" name="email"/>
<field name="email">fl@mycompany.com</field>
<field name="contact_id" ref="res_partner_contact_lambotte0"/>
</record>
<record id="res_partner_job_16" model="res.partner.job">
<field name="address_id" ref="base.main_address"/>
<field name="function">Salesman</field>
<field eval="&quot;&quot;&quot;av@mycompany.com&quot;&quot;&quot;" name="email"/>
<field name="email">av@mycompany.com</field>
<field name="contact_id" ref="res_partner_contact_vandewerve0"/>
</record>
<record id="res_partner_job_17" model="res.partner.job">
<field name="address_id" ref="base.main_address"/>
<field name="function">CTO</field>
<field eval="&quot;&quot;&quot;fb@mycompany.com&quot;&quot;&quot;" name="email"/>
<field name="email">fb@mycompany.com</field>
<field name="contact_id" ref="res_partner_contact_semal0"/>
</record>
<record id="res_partner_job_18" model="res.partner.job">
<field name="address_id" ref="base.main_address"/>
<field name="function">CTO</field>
<field eval="&quot;&quot;&quot;qd@mycompany.com&quot;&quot;&quot;" name="email"/>
<field name="email">qd@mycompany.com</field>
<field name="contact_id" ref="res_partner_contact_depaoli0"/>
</record>
<record id="res_partner_job_19" model="res.partner.job">
<field name="address_id" ref="base.main_address"/>
<field name="function">CTO</field>
<field eval="&quot;&quot;&quot;ne@mycompany.com&quot;&quot;&quot;" name="email"/>
<field name="email">ne@mycompany.com</field>
<field name="contact_id" ref="res_partner_contact_elkhayat0"/>
</record>
<record id="res_partner_job_20" model="res.partner.job">
<field name="address_id" ref="base.main_address"/>
<field name="function">CTO</field>
<field eval="&quot;&quot;&quot;ph@mycompany.com&quot;&quot;&quot;" name="email"/>
<field name="email">ph@mycompany.com</field>
<field name="contact_id" ref="res_partner_contact_luu0"/>
</record>
<record id="res_partner_job_21" model="res.partner.job">
<field name="address_id" ref="base.main_address"/>
<field name="function">CEO</field>
<field eval="&quot;&quot;&quot;fp@mycompany.com&quot;&quot;&quot;" name="email"/>
<field name="email">fp@mycompany.com</field>
<field name="contact_id" ref="res_partner_contact_pinckears0"/>
<field name="sequence_partner">-1</field>
</record>
<record id="res_partner_job_22" model="res.partner.job">
<field name="address_id" ref="base.main_address"/>
<field name="function">Salesman</field>
<field eval="&quot;&quot;&quot;cd@mycompany.com&quot;&quot;&quot;" name="email"/>
<field name="email">cd@mycompany.com</field>
<field name="contact_id" ref="res_partner_contact_debois0"/>
</record>
<record id="res_partner_job_23" model="res.partner.job">
@@ -284,14 +261,14 @@
<field name="function">PA</field>
</record>
<record id="res_partner_job_24" model="res.partner.job">
<field eval="1" name="sequence_contact"/>
<field name="sequence_contact">1</field>
<field name="address_id" ref="res_partner_address_1"/>
<field name="contact_id" ref="res_partner_contact_lacarte0"/>
<field name="function">PA</field>
<field name="sequence_contact">5</field>
</record>
<record id="res_partner_job_25" model="res.partner.job">
<field eval="2" name="sequence_contact"/>
<field name="sequence_contact">2</field>
<field name="address_id" ref="base.res_partner_address_1"/>
<field name="contact_id" ref="res_partner_contact_lacarte0"/>
<field name="function">CEO</field>
+40 -240
View File
@@ -30,7 +30,7 @@
<field name="arch" type="xml">
<form string="Partner Contact">
<group colspan="4" col="6">
<field name="name" select="1"/>
<field name="last_name" select="1"/>
<field name="first_name" select="1"/>
<field name="title" select="1" widget="selection" domain="[('domain', '=', 'contact')]" size="0"/>
</group>
@@ -50,22 +50,17 @@
</group>
<field name="job_ids" colspan="4" nolabel="1" mode="tree,form">
<form string="Functions and Addresses">
<group colspan="4" col="4">
<field name="function"/>
<field name="name" />
</group>
<field name="location_id"/>
<field name="function" />
<separator string="Communication" colspan="4"/>
<group colspan="4" col="4">
<field name="phone"/>
<field name="fax"/>
<field name="email" widget="email"/>
</group>
</form>
<tree string="Functions and Addresses">
<field name="function"/>
<field name="name" on_change="onchange_partner(name)"/>
<field name="phone"/>
<field name="fax"/>
<field name="email" widget="email"/>
</form>
<tree string="Functions and Addresses">
<field name="location_id"/>
<field name="function"/>
<field name="phone"/>
<field name="email"/>
</tree>
</field>
@@ -95,8 +90,8 @@
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Partner Contact">
<field name="name"/>
<field name="first_name"/>
<field name="name" string="First/Lastname"
filter_domain="['|', ('firstname','ilike', self), ('lastname','ilike',self)]"/>
<field name="partner_id" string="Partner"/>
</search>
</field>
@@ -139,119 +134,43 @@
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="type">form</field>
<field name="arch" type="xml">
<field name="address" mode="form,tree" colspan="4" nolabel="1" select="1" position="replace">
<field name="address" mode="form,tree" colspan="4" nolabel="1" select="1">
<form string="Address">
<group colspan="2" col="2">
<separator string="Postal Address" colspan="2" col="2"/>
<field name="type" />
<field name="street"/>
<field name="street2"/>
<field name="zip"/>
<field name="city"/>
<field name="country_id" completion="1"/>
<field name="state_id"/>
</group>
<group colspan="2" col="2">
<separator string="Communication" colspan="2" col="2"/>
<field name="phone"/>
<field name="fax"/>
<field name="email" widget="email"/>
</group>
<field name="job_ids" mode="tree,form" nolabel="1" colspan="4">
<tree string="Contacts" editable="top">
<field name="contact_id"/>
<field name="function"/>
<field name="phone"/>
<field name="fax"/>
<field name="email"/>
</tree>
<form string="Contacts">
<group colspan="4" col="4">
<field name="contact_id"/>
<field name="function"/>
</group>
<separator string="Communication" colspan="4"/>
<group colspan="4" col="4">
<field name="phone"/>
<field name="fax"/>
<field name="email" widget="email"/>
</group>
</form>
</field>
</form>
<tree string="Addresses">
<field name="type"/>
<field name="zip"/>
<field name="city"/>
<field name="country_id"/>
<field name="phone"/>
<field name="job_ids"/>
</tree>
</field>
</field>
<separator string="Postal Address" position="after">
<field name="location_id"/>
</separator>
<xpath expr="//field[@string='Contact Name']" position="replace">
<field name="contact_id"/>
</xpath>
</field>
</record>
<!-- don't display the categories, since it is displayed in an other tab-->
<record model="ir.ui.view" id="view_partner_form_inherit2">
<field name="name">res.partner.form</field>
<field name="type">form</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<field name="category_id" position="replace">
</field>
</field>
</record>
<!-- don't display the categories label-->
<record model="ir.ui.view" id="view_partner_form_inherit2bis">
<field name="name">res.partner.form</field>
<field name="type">form</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<separator colspan="4" string="Categories" position="replace"/>
</field>
</record>
<record model="ir.ui.view" id="view_partner_form_inherit3">
<field name="name">res.partner.form</field>
<field name="type">form</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<notebook position="inside">
<page string="Categories">
<separator colspan="4" string="Categories"/>
<field colspan="4" name="category_id" nolabel="1"/>
</page>
</notebook>
</field>
</record>
<!-- Views for Addresses -->
<record model="ir.ui.view" id="view_partner_location_form">
<field name="name">res.partner.location.form</field>
<field name="model">res.partner.location</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Locations">
<field name="street" colspan="4"/>
<field name="street2" colspan="4"/>
<field name="zip"/>
<field name="city"/>
<field name="country_id" />
<field name="state_id"/>
</form>
</field>
</record>
<record model="ir.ui.view" id="view_partner_location_tree">
<field name="name">res.partner.location.tree</field>
<field name="model">res.partner.location</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Locations">
<field name="type" />
<field name="street"/>
<field name="street2"/>
<field name="zip"/>
<field name="city"/>
<field name="country_id" />
<field name="state_id"/>
<field name="phone"/>
<field name="fax"/>
</tree>
</field>
</record>
@@ -262,134 +181,15 @@
<field name="inherit_id" ref="base.view_partner_address_form1"/>
<field name='type'>form</field>
<field name='arch' type='xml'>
<field name="type" position="replace" />
<field name="title" position="replace" />
<field name="function" position="replace" />
<field name="name" position="replace" />
<field name="active" position="after">
<separator string="Contact" colspan="6" />
<group colspan="6" col="4">
<field name="contact_id" />
<field name="function" />
<field name='type' invisible="1"/>
</group>
</field>
<field name="street" position="before">
<field name="use_existing_address"/>
<field name="location_id" required="0"
attrs="{'readonly': [('use_existing_address', '=', 0)], 'invisible': [('use_existing_address', '=', 0)]}"
domain="[('partner_id', '=', partner_id)]" />
</field>
<field name="street" position="attributes">
<attribute name="attrs">{'invisible' : [('use_existing_address', '=', 1)], 'readonly' : [('use_existing_address', '=', 1)]}</attribute>
</field>
<field name="street2" position="attributes">
<attribute name="attrs">{'invisible' : [('use_existing_address', '=', 1)], 'readonly' : [('use_existing_address', '=', 1)]}</attribute>
</field>
<field name="city" position="attributes">
<attribute name="attrs">{'invisible' : [('use_existing_address', '=', 1)], 'readonly' : [('use_existing_address', '=', 1)]}</attribute>
</field>
<field name="zip" position="attributes">
<attribute name="attrs">{'invisible' : [('use_existing_address', '=', 1)], 'readonly' : [('use_existing_address', '=', 1)]}</attribute>
</field>
<field name="mobile" position="attributes">
<attribute name="attrs">{'invisible' : [('use_existing_address', '=', 1)], 'readonly' : [('use_existing_address', '=', 1)]}</attribute>
</field>
<field name="state_id" position="attributes">
<attribute name="attrs">{'invisible' : [('use_existing_address', '=', 1)], 'readonly' : [('use_existing_address', '=', 1)]}</attribute>
</field>
<field name="country_id" position="attributes">
<attribute name="attrs">{'invisible' : [('use_existing_address', '=', 1)], 'readonly' : [('use_existing_address', '=', 1)]}</attribute>
</field>
</field>
</record>
<record id="view_res_partner_address_filter" model="ir.ui.view">
<field name="name">res.partner.address.select</field>
<field name="model">res.partner.address</field>
<field name="type">search</field>
<field name="inherit_id" ref="base.view_res_partner_address_filter"/>
<field name="arch" type="xml">
<search string="Search Contact">
<field name="job_ids"/>
</search>
</field>
</record>
<!-- Views for partner job Tree view -->
<!--
<record model="ir.ui.view" id="view_partner_job_tree">
<field name="name">res.partner.job.tree</field>
<field name="model">res.partner.job</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Contact Functions">
<field name="name" position="replace">
<field name="contact_id"/>
<field name="function"/>
<field name="name"/>
<field name="address_id"/>
<field name="email"/>
<field name="phone"/>
<field name="fax"/>
<field name="state" />
</tree>
</field>
<separator string="Postal Address" position="after">
<field name="location_id" on_change="onchange_location_id(location_id)"/>
</separator>
<field name="title" position="replace"/>
</field>
</record>
-->
<!-- Views for partner job Form view -->
<!--
<record model="ir.ui.view" id="view_partner_job_form">
<field name="name">res.partner.job.form</field>
<field name="model">res.partner.job</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Contact Functions">
<field name="name" select="1" on_change="onchange_partner(name)"/>
<field name="address_id" select="1" attrs="{'required': [('name', '!=', False)]}" on_change="onchange_address(address_id)"/>
<field name="contact_id" select="1"/>
<field name="function" select="1"/>
<field name="email" widget="email"/>
<field name="phone"/>
<field name="fax"/>
<field name="date_start" groups="base.group_user"/>
<field name="date_stop" groups="base.group_user"/>
<field name="state" />
</form>
</field>
</record>
-->
<!-- Menuitem for res.partner.job -->
<!--
<record model="ir.actions.act_window" id="action_res_partner_job">
<field name="name">Contact's Jobs</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner.job</field>
<field name="view_type">form</field>
</record>
<act_window domain="[('name', '=', active_id)]"
id="act_res_partner_jobs" name="Partner Contacts"
res_model="res.partner.job"
src_model="res.partner"
/>
-->
<!-- Act window defining a shorcut on partner address to open all his jobs -->
<!--
<act_window
id="act_res_partner_jobs"
name="Open Jobs"
context="{'search_default_address_id': [active_id], 'default_address_id': active_id}"
res_model="res.partner.job"
src_model="res.partner.address"
/>
-->
</data>
</openerp>
+3 -3
View File
@@ -9,6 +9,7 @@
!record {model: res.partner.contact, id: res_partner_contact_williams0}:
country_id: base.be
first_name: Laura
last_name: Henrion
job_ids:
- email: lwilliams@mydomain.com
function: PA
@@ -26,9 +27,8 @@
street: 23, street ways
type: default
zip: '2324324'
job_ids:
- function: CEO
contact_id: res_partner_contact_williams0
function: CEO
contact_id: res_partner_contact_williams0
name: Lauras Company
ref: LC
-