[IMP] base_contact, new architecture
bzr revid: fp@tinyerp.com-20111218114239-c0zh1b0xdrggglrl
This commit is contained in:
@@ -21,5 +21,3 @@
|
||||
|
||||
import base_contact
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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=""""Benoit"""" name="first_name"/>
|
||||
<field eval=""""Mortier"""" 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=""""Laurent"""" name="first_name"/>
|
||||
<field eval=""""Jacot"""" 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=""""Thomas"""" name="first_name"/>
|
||||
<field eval=""""Passot"""" 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=""""Etienne"""" name="first_name"/>
|
||||
<field eval=""""Lacarte"""" 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=""""Tang"""" 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=""""Wong"""" 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=""""Jean-Guy"""" name="first_name"/>
|
||||
<field eval=""""Lavente"""" 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=""""Sylvie"""" name="first_name"/>
|
||||
<field eval=""""Lelitre"""" 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=""""Arthur"""" name="first_name"/>
|
||||
<field eval=""""Grosbonnet"""" 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=""""Karine"""" name="first_name"/>
|
||||
<field eval=""""Lesbrouffe"""" 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=""""Zen"""" 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=""""http://fptiny.blogspot.com/"""" name="website"/>
|
||||
<field eval=""""Fabien"""" name="first_name"/>
|
||||
<field eval=""""Pinckaers"""" 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=""""Marc"""" name="first_name"/>
|
||||
<field eval=""""Debois"""" 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=""""Phuong"""" name="first_name"/>
|
||||
<field eval=""""Luu"""" 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=""""Najlaa"""" name="first_name"/>
|
||||
<field eval=""""Khayat"""" 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=""""Quentin"""" name="first_name"/>
|
||||
<field eval=""""Paolino"""" 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=""""Fabian"""" name="first_name"/>
|
||||
<field eval=""""W."""" 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=""""Yvan"""" name="first_name"/>
|
||||
<field eval=""""van de Werve"""" 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=""""Henry"""" name="first_name"/>
|
||||
<field eval=""""Lambotte"""" 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=""""Olivier"""" name="first_name"/>
|
||||
<field eval=""""Laurent"""" 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=""""Christophe"""" name="first_name"/>
|
||||
<field eval=""""Dupont"""" 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=""""Stéphane"""" name="first_name"/>
|
||||
<field eval=""""Andre"""" 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=""""Philippe"""" name="first_name"/>
|
||||
<field eval=""""Antoine"""" 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=""""contact@tecsas.fr"""" 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=""""info@mycompany.com"""" 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=""""re@mycompany.com"""" 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=""""st@mycompany.com"""" 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=""""ch@mycompany.com"""" 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=""""ol@mycompany.com"""" 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=""""fl@mycompany.com"""" 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=""""av@mycompany.com"""" 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=""""fb@mycompany.com"""" 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=""""qd@mycompany.com"""" 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=""""ne@mycompany.com"""" 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=""""ph@mycompany.com"""" 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=""""fp@mycompany.com"""" 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=""""cd@mycompany.com"""" 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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
-
|
||||
|
||||
Reference in New Issue
Block a user