4
# (c) 2008 Sednacom <http://www.sednacom.fr>
7
# - Brice V. < brice@sednacom.fr >
9
from osv import osv, fields
13
_ZARAFA_TINYERP_MAP = {
17
'company' : 'partner_id' ,
23
_MARK_START = 'contact start'
24
_MARK_END = 'contact end'
26
_ZARAFA_CONTACT_URL = 'http://%(zarafa_server)s/webaccess/' \
27
'contact.php?user=%(zarafa_user)s' \
28
'&pwd=%(zarafa_password)s'
30
class res_partner_address(osv.osv):
31
"""Address, with new data for zarafa"""
32
_name = 'res.partner.address'
33
_inherit = 'res.partner.address'
34
_description = __doc__
37
'zarafa_id' : fields.char('Z-Id', size=128),
40
def unlink(self, cr, uid, rpa_ids, context={}):
41
zids = ', '.join(["'%s'" % val["zarafa_id"] for val in \
42
self.read(cr, uid, rpa_ids, ["zarafa_id",]) \
43
if val["zarafa_id"] ])
44
res = super(res_partner_address, self).unlink(cr, uid, rpa_ids, context)
45
sql = "delete from zarafa_contact where zid in (%s)" % zids
51
class zarafa_contact(osv.osv):
52
"""Contacts, with features to import from Zarafa server"""
53
_name = 'zarafa.contact'
54
_description = __doc__
57
'name' : fields.char('Name', size=128, required=True) ,
58
'email' : fields.char('Email', size=128, required=True) ,
59
'phone' : fields.char('Phone', size=128) ,
60
'mobile' : fields.char('Mobile', size=128) ,
61
'fax' : fields.char('Fax', size=128) ,
62
'company' : fields.char('Company', size=128) ,
63
'zid' : fields.char('Z-Id', size=128, required=True) ,
64
'state' : fields.selection(
66
('update','Update'), ] ,
67
'State', readonly=True,) ,
70
def _import(self, cr, uid, context={}):
71
data = self._get_zarafa_contacts(cr, uid, context)
72
res = self._proc_data(cr, uid, data, context)
73
self._do_rpa(cr, uid, self.search(cr, uid, []))
76
def _get_zarafa_contacts(self, cr, uid, context={}):
78
o_ru = self.pool.get('res.users')
79
zud = o_ru.read(cr, uid, [uid,], ['zarafa_server', 'zarafa_user', 'zarafa_password'])[0]
81
zurl = _ZARAFA_CONTACT_URL % zud
82
ures = urllib2.urlopen(zurl)
86
def _proc_data(self, cr, uid, data, context={}):
87
sio = StringIO.StringIO(data)
92
cur_val = sio.next().strip()
95
if cur_val == 'contact start':
97
elif cur_val == 'contact end':
102
fn, fv = cur_val.split(':')
103
vals[fn.strip()] = fv.strip()
105
zids = self.search(cr, uid, [('zid','=',fv),])
107
vals['state'] = 'update:%s' % zids[0]
109
vals['state'] = 'new'
112
if val['state'] == 'new':
113
self.create(cr, uid, val)
116
val['state'],zid = state.split(':')
117
self.write(cr, uid, int(zid), val)
121
def _do_rpa(self, cr, uid, zcids, context={}):
122
data = self.read(cr, uid, zcids, ['id', 'state', ])
126
if row['state'] == 'new':
127
to_create.append(row['id'])
129
to_update.append(row['id'])
131
self._create_contact(cr, uid, to_create, context)
132
self._update_contact(cr, uid, to_update, context)
136
def _get_partner(self, cr, uid, name, context={}):
137
o_rp = self.pool.get('res.partner')
138
rp_ids = o_rp.search(cr, uid, [('name','=',name),])
142
rp_id = o_rp.create(cr, uid, {'name' : name})
145
def _create_contact(self, cr, uid, zcids, context={}):
146
o_rpa = self.pool.get('res.partner.address')
147
o_rp = self.pool.get('res.partner')
149
for data in self.browse(cr, uid, zcids, context):
150
part_id = self._get_partner(cr, uid, data.company or data.name, context)
153
'email' : data.email ,
154
'phone' : data.phone ,
155
'mobile' : data.mobile ,
157
'zarafa_id' : data.zid ,
158
'partner_id' : part_id ,
160
o_rpa.create(cr, uid, vals, context)
162
self.write(cr, uid, res, {'state' : 'update'})
165
def _update_contact(self, cr, uid, zcids, context={}):
166
o_rpa = self.pool.get('res.partner.address')
168
for data in self.browse(cr, uid, zcids, context):
170
rpa_id = o_rpa.search(cr, uid, [('zarafa_id','=',data.zid),])[0]
172
return self._create_contact(cr, uid, [data.id, ], context)
175
'email' : data.email ,
176
'phone' : data.phone ,
177
'mobile' : data.mobile ,
180
o_rpa.write(cr, uid, rpa_id, vals)
188
class res_users(osv.osv):
189
"""Users with Zarafa connection"""
191
_inherit = 'res.users'
194
'zarafa_server' : fields.char("Zarafa server", size=128) ,
195
'zarafa_user' : fields.char("Zarafa user", size=64) ,
196
'zarafa_password' : fields.char("Zarafa password", size=64, invisible=True) ,
197
'zarafa_email' : fields.char("Zarafa email", size=64) ,