~openerp-commiter/openobject-addons/trunk-extra-addons

« back to all changes in this revision

Viewing changes to cci_partner/cci_partner.py

merging new development from indian accounting

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- encoding: utf-8 -*-
 
2
##############################################################################
 
3
#
 
4
# Copyright (c) 2007 TINY SPRL. (http://tiny.be) All Rights Reserved.
 
5
#
 
6
# WARNING: This program as such is intended to be used by professional
 
7
# programmers who take the whole responsability of assessing all potential
 
8
# consequences resulting from its eventual inadequacies and bugs
 
9
# End users who are looking for a ready-to-use solution with commercial
 
10
# garantees and support are strongly adviced to contract a Free Software
 
11
# Service Company
 
12
#
 
13
# This program is Free Software; you can redistribute it and/or
 
14
# modify it under the terms of the GNU General Public License
 
15
# as published by the Free Software Foundation; either version 2
 
16
# of the License, or (at your option) any later version.
 
17
#
 
18
# This program is distributed in the hope that it will be useful,
 
19
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
20
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
21
# GNU General Public License for more details.
 
22
#
 
23
# You should have received a copy of the GNU General Public License
 
24
# along with this program; if not, write to the Free Software
 
25
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
26
#
 
27
##############################################################################
 
28
 
 
29
import netsvc
 
30
import time
 
31
from osv import fields, osv
 
32
 
 
33
class res_company(osv.osv):
 
34
    _inherit = 'res.company'
 
35
    _description = 'res.company'
 
36
    
 
37
    _columns = {
 
38
        'federation_key' : fields.char('ID for the Federation',size=50,help="ID key for the sending of data to the belgian CCI's Federation"),
 
39
    }
 
40
 
 
41
res_company()
 
42
 
 
43
class res_partner_state(osv.osv):
 
44
    _name = "res.partner.state"
 
45
    _description = 'res.partner.state'
 
46
    _columns = {
 
47
        'name': fields.char('Partner Status',size=50,required=True),
 
48
    }
 
49
res_partner_state()
 
50
 
 
51
class res_partner_state2(osv.osv):
 
52
    _name = "res.partner.state2"
 
53
    _description = 'res.partner.state2'
 
54
    _columns = {
 
55
        'name': fields.char('Customer Status',size=50,required=True),
 
56
    }
 
57
res_partner_state2()
 
58
 
 
59
class res_partner_article_review(osv.osv):
 
60
    _name = "res.partner.article.review"
 
61
    _description = 'res.partner.article.review'
 
62
    _columns = {
 
63
        'name': fields.char('Name',size=50, required=True),
 
64
        'date':fields.date('Date', required=True),
 
65
        'article_ids':fields.one2many('res.partner.article','review_id','Articles'),
 
66
    }
 
67
 
 
68
    _defaults = {
 
69
        'date': lambda *args: time.strftime('%Y-%m-%d')
 
70
    }
 
71
 
 
72
res_partner_article_review()
 
73
 
 
74
 
 
75
class res_partner_article(osv.osv):
 
76
    _name = "res.partner.article"
 
77
    _description = 'res.partner.article'
 
78
    _rec_name = 'article_id'
 
79
    _columns = {
 
80
        'article_id': fields.char('Article',size=256),
 
81
        'page':fields.integer('Page',size=16),
 
82
        'article_length':fields.float('Length'),
 
83
        'picture':fields.boolean('Picture'),
 
84
        'data':fields.boolean('Data'),
 
85
        'graph':fields.boolean('Graph'),
 
86
        'summary':fields.text('Summary'),
 
87
        'source_id':fields.char('Source',size=256),
 
88
        'date':fields.date('Date', required=True),
 
89
        'title':fields.char('Title',size=250, required=True),
 
90
        'subtitle':fields.text('Subtitle'),
 
91
        'press_review':fields.boolean('In the next press review',help='Must be inserted on the next press review'),
 
92
        'canal_id':fields.char('Reference',size=200,help='A text with or without a link incorporated'),
 
93
        'review_id':fields.many2one('res.partner.article.review','Review'),
 
94
        'partner_ids':fields.many2many('res.partner','res_partner_article_rel','article_id','partner_id','Partners'),
 
95
        'contact_ids':fields.many2many('res.partner.contact','res_partner_contact_article_rel', 'article_id','contact_id','Contacts'),
 
96
    }
 
97
    _defaults = {
 
98
                 'press_review' : lambda *a: False,
 
99
                 'article_id': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'res.partner.article'),
 
100
                 }
 
101
res_partner_article()
 
102
 
 
103
class res_partner_article_keywords(osv.osv):
 
104
    _name = "res.partner.article.keywords"
 
105
    _description = 'res.partner.article.keywords'
 
106
    _columns = {
 
107
        'name': fields.char('Name',size=80,required=True),
 
108
        'article_ids':fields.many2many('res.partner.article','partner_article_keword_rel','keyword_id','article_id','Articles'),
 
109
    }
 
110
res_partner_article_keywords()
 
111
 
 
112
 
 
113
class res_partner_article(osv.osv):
 
114
    _inherit = "res.partner.article"
 
115
    _columns = {
 
116
        'keywords_ids':fields.many2many('res.partner.article.keywords','article_keyword_rel','article_id','keyword_id','Keywords'),
 
117
    }
 
118
res_partner_article()
 
119
 
 
120
class res_partner(osv.osv):
 
121
    _inherit = "res.partner"
 
122
    _description = "res.partner"
 
123
 
 
124
    def create(self, cr, uid, vals, *args, **kwargs):
 
125
        new_id = super(osv.osv,self).create(cr, uid, vals, *args, **kwargs)
 
126
        #complete the user_id (salesman) automatically according to the zip code of the main address. Use res.partner.zip to select salesman according to zip code
 
127
        if vals.has_key('address') and vals['address']:
 
128
            for add in vals['address']:
 
129
                if add[2]['zip_id'] and add[2]['type']=='default':
 
130
                    data=self.pool.get('res.partner.zip').browse(cr, uid, add[2]['zip_id'])
 
131
                    saleman_id = data.user_id.id
 
132
                    self.write(cr,uid,[new_id],{'user_id':saleman_id})
 
133
        return new_id
 
134
 
 
135
#    def write(self, cr, uid, ids,vals, *args, **kwargs):
 
136
#        print "vals: ", vals
 
137
#        print "IDS: ", ids
 
138
#        print "args: ", args
 
139
#        print "kwargs: ", kwargs
 
140
 
 
141
#        list=[]
 
142
#        for partner in self.browse(cr, uid, ids):
 
143
#            if not partner.user_id:
 
144
#        #if not self.pool.get('res.partner').browse(cr, uid, ids)[0].user_id.id:
 
145
#                if 'address' in vals:
 
146
#                    for add in vals['address']:
 
147
#                        if add[2] and (add[2]['zip_id'] and add[2]['type']=='default'):
 
148
#                            data=self.pool.get('res.partner.zip').browse(cr, uid, add[2]['zip_id'])
 
149
#                            saleman_id = data.user_id.id
 
150
#                            self.write(cr,uid,[partner.id],{'user_id':saleman_id})
 
151
#                        else:
 
152
#                           # data_partner=self.browse(cr, uid,ids)
 
153
#                           # for d in data_partner:
 
154
#                            for i in partner.address:
 
155
#                                list.append(i.type)
 
156
#                                if i.type=='default' and (not i.zip_id):
 
157
#                                    self.write(cr,uid,[partner.id],{'user_id':False})
 
158
#                            if (not partner.address) or (not 'default' in list):
 
159
 #                               self.write(cr,uid,[partner.id],{'user_id':False})
 
160
#        return super(res_partner,self).write(cr, uid, ids,vals, *args, **kwargs)
 
161
 
 
162
 
 
163
    def check_address(self, cr, uid, ids):
 
164
        #constraints to ensure that there is only one default address by partner.
 
165
        data_address=self.browse(cr, uid, ids)
 
166
        list=[]
 
167
        for add in data_address[0].address:
 
168
            if add.type in list and add.type=='default':
 
169
                return False
 
170
            list.append(add.type)
 
171
        return True
 
172
 
 
173
    def _check_activity(self,cr,uid,ids):
 
174
        data_partner=self.browse(cr, uid, ids)
 
175
        for data in data_partner:
 
176
            list_activities = []
 
177
            for activity in data.activity_code_ids:
 
178
                list_activities.append((activity.importance, activity.activity_id.list_id))
 
179
            main_list = []
 
180
            for (importance, list_id) in list_activities:
 
181
                if importance == "main":
 
182
                    if list_id in main_list:
 
183
                        return False
 
184
                    main_list.append(list_id)
 
185
        return True
 
186
 
 
187
    def _get_customer_state(self, cr, uid, ctx):
 
188
        ids = self.pool.get('res.partner.state').search(cr, uid, [('name','like', 'Imputable')])
 
189
        if ids:
 
190
            return ids[0]
 
191
        return False
 
192
 
 
193
    def _get_partner_state(self, cr, uid, ctx):
 
194
        ids = self.pool.get('res.partner.state2').search(cr, uid, [('name','like', 'En Activité')])
 
195
        if ids:
 
196
            return ids[0]
 
197
        return False
 
198
 
 
199
    _columns = {
 
200
        'employee_nbr': fields.integer('Nbr of Employee (Area)',help="Nbr of Employee in the area of the CCI"),
 
201
        'employee_nbr_total':fields.integer('Nbr of Employee (Tot)',help="Nbr of Employee all around the world"),
 
202
        'invoice_paper':fields.selection([('transfert belgian','Transfer belgian'),('transfert iban','Transfer iban'),('none','No printed transfert')], 'Bank Transfer Type', size=32),
 
203
        'invoice_public':fields.boolean('Invoice Public'),
 
204
        'invoice_special':fields.boolean('Invoice Special'),
 
205
        'state_id':fields.many2one('res.partner.state','Partner State',help='status of activity of the partner'),
 
206
        'state_id2':fields.many2one('res.partner.state2','Customer State',help='status of the partner as a customer'),
 
207
        'activity_description':fields.text('Activity Description',translate=True),
 
208
        'activity_code_ids':fields.one2many('res.partner.activity.relation','partner_id','Activity Codes'),
 
209
        'export_procent':fields.integer('Export(%)'),
 
210
        'export_year':fields.date('Export date',help='year of the export_procent value'),
 
211
        'import_procent':fields.integer('Import (%)'),
 
212
        'import_year':fields.date('Import Date',help='year of the import_procent value'),
 
213
        'invoice_nbr':fields.integer('Nbr of invoice to print',help='number of additive invoices to be printed for this customer'),
 
214
        'name_official':fields.char('Official Name',size=80),
 
215
        'name_old':fields.char('Former Name',size=80),
 
216
        'wall_exclusion':fields.boolean('Not in Walloon DB',help='exclusion of this partner from the walloon database'),
 
217
        #'mag_send':fields.selection([('never','Never'),('always','Always'),('managed_by_poste','Managed_by_Poste'),('prospect','Prospect')], 'Send mag.'),
 
218
        'date_founded':fields.date('Founding Date',help='Date of foundation of this company'),
 
219
        'training_authorization':fields.char('Checks Auth.',size=12,help='Formation and Language Checks Authorization number'),
 
220
        'alert_advertising':fields.boolean('Adv.Alert',help='Partners description to be shown when inserting new advertising sale'),
 
221
        'alert_events':fields.boolean('Event Alert',help='Partners description to be shown when inserting new subscription to a meeting'),
 
222
        'alert_legalisations':fields.boolean('Legal. Alert',help='Partners description to be shown when inserting new legalisation'),
 
223
        'alert_membership':fields.boolean('Membership Alert',help='Partners description to be shown when inserting new ship sale'),
 
224
        'alert_others':fields.boolean('Other alert',help='Partners description to be shown when inserting new sale not treated by _advertising, _events, _legalisations, _Membership'),
 
225
        'alert_explanation':fields.text('Warning'),
 
226
        'dir_name':fields.char('Name in Member Dir.',size=250,help='Name under wich the partner will be inserted in the members directory'),
 
227
        'dir_name2':fields.char('1st Shortcut name ',size=250,help='First shortcut in the members directory, pointing to the dir_name field'),
 
228
        'dir_name3':fields.char('2nd Shortcut name ',size=250,help='Second shortcut'),
 
229
        'dir_date_last':fields.date('Partner Data Date',help='Date of latest update of the partner data by itself (via paper or Internet)'),
 
230
        'dir_date_accept':fields.date("Good to shoot Date",help='Date of last acceptation of Bon a Tirer'),
 
231
        'dir_presence':fields.boolean('Dir. Presence',help='Present in the directory of the members'),
 
232
        'dir_date_publication':fields.date('Publication Date'),
 
233
        'dir_exclude':fields.boolean('Dir. exclude',help='Exclusion from the Members directory'),
 
234
 
 
235
        'magazine_subscription':fields.selection( [('never','Never'),('prospect','Prospect'),('personal','Personnal'), ('postal','Postal')], "Magazine subscription"),
 
236
        'magazine_subscription_source':fields.char('Mag. Subscription Source',size=30),
 
237
        'country_relation':fields.one2many('res.partner.country.relation','partner_id','Country Relation'),
 
238
        'address': fields.one2many('res.partner.address', 'partner_id', 'Addresses'),# overridden just to change the name with "Addresses" instead of "Contacts"
 
239
        'relation_ids' : fields.one2many('res.partner.relation','current_partner_id','Partner Relation'),
 
240
        'canal_id': fields.many2one('res.partner.canal', 'Favourite Channel'),
 
241
 
 
242
        'article_ids' : fields.many2many('res.partner.article','res_partner_article_rel','partner_id','article_id','Articles')
 
243
        #Never,Always,Managed_by_Poste,Prospect
 
244
 
 
245
        #virement belge,virement iban
 
246
        }
 
247
    _defaults = {
 
248
        'wall_exclusion' : lambda *a: False,
 
249
        'dir_presence' : lambda *a: True,
 
250
        'dir_exclude':lambda *a: False,
 
251
        'magazine_subscription': lambda *a: 'prospect',
 
252
        'state_id': _get_partner_state,
 
253
        'state_id2': _get_customer_state,
 
254
        }
 
255
    _constraints = [(check_address, 'Only One default address is allowed!', ['address']),(_check_activity, 'Partner Should have only one Main Activity!', ['activity_code_ids'])]
 
256
 
 
257
    _sql_constraints = [
 
258
        ('vat_uniq', 'unique (vat)', 'The VAT of the partner must be unique !')
 
259
    ]
 
260
 
 
261
res_partner()
 
262
 
 
263
class res_partner_zip_group_type(osv.osv):
 
264
     _name = "res.partner.zip.group.type"
 
265
     _description = 'res.partner.zip.group.type'
 
266
     _columns = {
 
267
         'name':fields.char('Name',size=50,required=True),
 
268
                }
 
269
res_partner_zip_group_type()
 
270
 
 
271
class res_partner_zip_group(osv.osv):
 
272
     _name = "res.partner.zip.group"
 
273
     _description = 'res.partner.zip.group'
 
274
     _columns = {
 
275
         'type_id':fields.many2one('res.partner.zip.group.type','Type'),
 
276
         'name':fields.char('Name',size=50,required=True),
 
277
                }
 
278
res_partner_zip_group()
 
279
 
 
280
class res_partner_zip(osv.osv):
 
281
    _name = "res.partner.zip"
 
282
    _description = 'res.partner.zip'
 
283
    def check_group_type(self, cr, uid, ids):
 
284
        data=self.browse(cr, uid, ids)
 
285
        for id in ids:
 
286
            sql = '''
 
287
            select group_id from partner_zip_group_rel1 where zip_id=%d
 
288
            ''' % (id)
 
289
            cr.execute(sql)
 
290
            groups = cr.fetchall()
 
291
        list_group=[]
 
292
        for group in groups:
 
293
            list_group.append(group[0])
 
294
        data_zip = self.pool.get('res.partner.zip.group').browse(cr, uid,list_group)
 
295
        list_zip=[]
 
296
        for data in data_zip:
 
297
            if data.type_id.id in list_zip:
 
298
                return False
 
299
            list_zip.append(data.type_id.id)
 
300
        return True
 
301
 
 
302
    def name_get(self, cr, user, ids, context={}):
 
303
        #will return zip code and city......
 
304
        if not len(ids):
 
305
            return []
 
306
        res = []
 
307
        for r in self.read(cr, user, ids, ['name','city']):
 
308
            zip_city = str(r['name'] or '')
 
309
            if r['name'] and r['city']:
 
310
                zip_city += ' '
 
311
            zip_city += str(r['city'] or '')
 
312
            res.append((r['id'], zip_city))
 
313
        return res
 
314
 
 
315
    _constraints = [(check_group_type, 'Error: Only one group of the same group type is allowed!', ['groups_id'])]
 
316
    _columns = {
 
317
        'name':fields.char('Zip Code',size=10,required=True, select=1),
 
318
        'city':fields.char('City',size=60,translate=True),
 
319
        'partner_id':fields.many2one('res.partner','Master Cci'),
 
320
        'post_center_id':fields.char('Post Center',size=40),
 
321
        'post_center_special':fields.boolean('Post Center Special'),
 
322
        'user_id':fields.many2one('res.users','Salesman Responsible'),
 
323
        'groups_id': fields.many2many('res.partner.zip.group', 'partner_zip_group_rel1', 'zip_id', 'group_id', 'Areas'),
 
324
        'distance':fields.integer('Distance',help='Distance (km) between zip location and the cci.')
 
325
                }
 
326
res_partner_zip()
 
327
 
 
328
 
 
329
class res_partner_job(osv.osv):
 
330
 
 
331
    def unlink(self, cr, uid, ids, context={}):
 
332
        #Unlink related contact if: no other job AND not self_sufficient
 
333
        job_ids=self.pool.get('res.partner.job').browse(cr, uid, ids)
 
334
        for job_id in job_ids:
 
335
            id_contact = job_id.contact_id.id
 
336
            super(res_partner_job,self).unlink(cr, uid, job_id.id,context=context)
 
337
            if id_contact:
 
338
                data_contact=self.pool.get('res.partner.contact').browse(cr, uid,[id_contact])
 
339
                for data in data_contact:
 
340
                    if (not data.self_sufficent) and (not data.job_ids):
 
341
                        self.pool.get('res.partner.contact').unlink(cr, uid,[data.id], context)
 
342
        return True
 
343
 
 
344
    def create(self, cr, uid, vals, *args, **kwargs):
 
345
        if vals.has_key('function_code_label') and vals['function_code_label']:
 
346
            temp = ''
 
347
            for letter in vals['function_code_label']:
 
348
                res = self.pool.get('res.partner.function').search(cr, uid, [('code','=', letter)])
 
349
                if res:
 
350
                    temp += self.pool.get('res.partner.function').browse(cr, uid,res)[0].code
 
351
            vals['function_code_label'] = temp
 
352
        vals['function_id'] = self.pool.get('res.partner.function').search(cr, uid, [])[0]
 
353
        return super(res_partner_job,self).create(cr, uid, vals, *args, **kwargs)
 
354
 
 
355
    def write(self, cr, uid, ids,vals, *args, **kwargs):
 
356
        if vals.has_key('function_code_label') and vals['function_code_label']:
 
357
            temp = ''
 
358
            for letter in vals['function_code_label']:
 
359
                res = self.pool.get('res.partner.function').search(cr, uid, [('code','=', letter)])
 
360
                if res:
 
361
                    temp += self.pool.get('res.partner.function').browse(cr, uid,res)[0].code
 
362
            vals['function_code_label'] = temp
 
363
        vals['function_id'] = self.pool.get('res.partner.function').search(cr, uid, [])[0]
 
364
        return super(res_partner_job,self).write(cr, uid, ids,vals, *args, **kwargs)
 
365
 
 
366
    _inherit = 'res.partner.job'
 
367
    _columns = {
 
368
        'function_label':fields.char('Function Label',size=128, required=True),
 
369
        'function_code_label':fields.char('Codes',size=128,),
 
370
        'date_start':fields.date('Date start'),
 
371
        'date_end':fields.date('Date end'),
 
372
        'canal_id':fields.many2one('res.partner.canal','Canal',help='favorite chanel for communication'),
 
373
        'active':fields.boolean('Active'),
 
374
        'who_presence':fields.boolean('In Whos Who'),
 
375
        'dir_presence':fields.boolean('In Directory'),
 
376
        'department': fields.char('Department',size=20),
 
377
    }
 
378
 
 
379
    _defaults = {
 
380
        'who_presence' : lambda *a: True,
 
381
        'dir_presence' : lambda *a: True,
 
382
        'active' : lambda *a: True,
 
383
    }
 
384
 
 
385
res_partner_job()
 
386
 
 
387
class res_partner_address(osv.osv):
 
388
    _inherit = "res.partner.address"
 
389
    _description = 'res.partner.address'
 
390
 
 
391
    def create(self, cr, uid, vals, *args, **kwargs):
 
392
        if vals.has_key('zip_id') and vals['zip_id']:
 
393
            vals['zip'] = self.pool.get('res.partner.zip').browse(cr, uid,vals['zip_id']).name
 
394
            vals['city'] = self.pool.get('res.partner.zip').browse(cr, uid,vals['zip_id']).city
 
395
        return super(res_partner_address,self).create(cr, uid, vals, *args, **kwargs)
 
396
 
 
397
    def write(self, cr, uid, ids,vals, *args, **kwargs):
 
398
        if vals.has_key('zip_id') and vals['zip_id']:
 
399
            vals['zip'] = self.pool.get('res.partner.zip').browse(cr, uid,vals['zip_id']).name
 
400
            vals['city'] = self.pool.get('res.partner.zip').browse(cr, uid,vals['zip_id']).city
 
401
        return super(res_partner_address,self).write(cr, uid, ids,vals, *args, **kwargs)
 
402
 
 
403
#que faire du name?
 
404
 
 
405
#    def _get_name(self, cr, uid, ids, name, arg, context={}):
 
406
 #       res={}
 
407
  #      for add in self.browse(cr, uid, ids, context):
 
408
   #           if add.contact_id:
 
409
    #              res[add.id] = (add.department or '') + ' ' + add.contact_id.name
 
410
     #         else:
 
411
      #            res[add.id] = add.department
 
412
       # return res
 
413
 
 
414
    _columns = {
 
415
        #'name': fields.function(_get_name, method=True, string='Contact Name',type='char',size=64),#override parent field
 
416
        'state': fields.selection([('correct','Correct'),('to check','To check')],'Code'),
 
417
        'zip_id':fields.many2one('res.partner.zip','Zip'),
 
418
 
 
419
        'sequence_partner':fields.integer('Sequence (Partner)',help='order of importance of this address in the list of addresses of the linked partner'),
 
420
 
 
421
 
 
422
    }
 
423
    _defaults = {
 
424
                 'state' : lambda *a: 'correct',
 
425
    }
 
426
 
 
427
    def onchange_user_id(self, cr, uid, ids,zip_id):
 
428
    #Changing the zip code can change the salesman
 
429
        if not ids or not zip_id:
 
430
            return {}
 
431
        id = self.browse(cr, uid, ids)[0]
 
432
        if not id.partner_id.user_id:
 
433
            data_add=self.pool.get('res.partner.address').browse(cr, uid,ids)
 
434
            if zip_id:
 
435
                for data in data_add:
 
436
                    if data.type=='default':
 
437
                        data_zip=self.pool.get('res.partner.zip').browse(cr, uid,[zip_id])
 
438
                        for data1 in data_zip:
 
439
                             if data1.user_id:
 
440
                                 self.pool.get('res.partner').write(cr, uid,[data.partner_id.id],{'user_id':data1.user_id.id})
 
441
        return {}
 
442
 
 
443
#    def onchange_contact_id(self, cr, uid, ids, contact_id):
 
444
#        #return name
 
445
#        if not contact_id:
 
446
#            return {'value':{'name' : False}}
 
447
#        contact_data=self.pool.get('res.partner.contact').browse(cr, uid, contact_id)
 
448
#        return {'value':{'name' : contact_data.name}}
 
449
 
 
450
 
 
451
res_partner_address()
 
452
 
 
453
class res_partner_activity_list(osv.osv):#new object added!
 
454
    _name = "res.partner.activity.list"
 
455
    _description = 'res.partner.activity.list'
 
456
    _columns = {
 
457
        'name': fields.char('Code list',size=256,required=True),
 
458
        'abbreviation':fields.char('Abbreviation',size=16),
 
459
    }
 
460
res_partner_activity_list()
 
461
 
 
462
class res_partner_activity(osv.osv):#modfiy res.activity.code to res.partner.activity
 
463
    _name = "res.partner.activity"
 
464
    _description = 'res.partner.activity'
 
465
    _rec_name = 'code'
 
466
    def name_get(self, cr, uid, ids, context={}):
 
467
        #return somethong like”list_id.abbreviation or list_id.name – code”
 
468
        res = []
 
469
        for act in self.browse(cr, uid, ids, context):
 
470
            res.append( (act.id, (act.code or '')+' - '+(act.label or '')))
 
471
#        data_activity = self.read(cr, uid, ids, ['list_id','code'], context)
 
472
#        res = []
 
473
#        list_obj = self.pool.get('res.partner.activity.list')
 
474
#        for read in data_activity:
 
475
#            if read['list_id']:
 
476
#                data=list_obj.read(cr, uid, read['list_id'][0],['abbreviation','name'], context)
 
477
#                if data['abbreviation']:
 
478
#                    res.append((read['id'], data['abbreviation']))
 
479
#                else:
 
480
#                    str=data['name']+'-'+read['code']
 
481
#                    res.append((read['id'],str))
 
482
        return res
 
483
    _columns = {
 
484
        'code': fields.char('Code',size=6,required=True),
 
485
        'label':fields.char('Label',size=250,transtale=True,required=True),
 
486
        'description':fields.text('Description'),
 
487
        'code_relations':fields.many2many('res.partner.activity','res_activity_code_rel','code_id1','code_id2','Related codes'),
 
488
        #'partner_id':fields.many2one('res.partner','Partner'),
 
489
        'list_id':fields.many2one('res.partner.activity.list','List',required=True)
 
490
    }
 
491
res_partner_activity()
 
492
 
 
493
class res_partner_activity_relation(osv.osv):
 
494
    _name = "res.partner.activity.relation"
 
495
    _description = 'res.partner.activity.relation'
 
496
    _columns = {
 
497
        'importance': fields.selection([('main','Main'),('primary','Primary'),('secondary','Secondary')],'Importance',required=True),
 
498
        'activity_id':fields.many2one('res.partner.activity','Activity', ondelete="cascade"),
 
499
        'partner_id':fields.many2one('res.partner','Partner', ondelete="cascade"),
 
500
    }
 
501
    _defaults = {
 
502
        'importance': lambda *args: 'main'
 
503
    }
 
504
res_partner_activity_relation()
 
505
 
 
506
class res_partner_function(osv.osv):
 
507
    _inherit = 'res.partner.function'
 
508
    _description = 'Function of the contact inherit'
 
509
 
 
510
    def name_get(self, cr, uid, ids, context={}):
 
511
        if not len(ids):
 
512
            return []
 
513
        reads = self.read(cr, uid, ids, ['code','name'], context)
 
514
        res = []
 
515
        str1=''
 
516
        for record in reads:
 
517
            if record['name'] or record['code']:
 
518
                str1=record['name']+'('+(record['code'] or '')+')'
 
519
            res.append((record['id'], str1))
 
520
        return res
 
521
res_partner_function()
 
522
 
 
523
class res_partner_relation_type(osv.osv):
 
524
    _name = "res.partner.relation.type"
 
525
    _description ='res.partner.relation.type'
 
526
    _columns = {
 
527
        'name': fields.char('Contact',size=50, required=True),
 
528
    }
 
529
res_partner_relation_type()
 
530
 
 
531
class res_partner_relation(osv.osv):
 
532
    _name = "res.partner.relation"
 
533
    _description = 'res.partner.relation'
 
534
    _rec_name = 'partner_id'
 
535
    _columns = {
 
536
        'partner_id': fields.many2one('res.partner','Partner', required=True),
 
537
        'current_partner_id':fields.many2one('res.partner','Partner', required=True),
 
538
        'description':fields.text('Description'),
 
539
        'percent':fields.float('Ownership'),
 
540
        'type_id':fields.many2one('res.partner.relation.type','Type', required=True),
 
541
    }
 
542
res_partner_relation()
 
543
 
 
544
class res_partner_country_relation(osv.osv):
 
545
    _name = "res.partner.country.relation"
 
546
    _description = 'res.partner.country.relation'
 
547
    _columns = {
 
548
        'frequency': fields.selection([('frequent','Frequent'),('occasional','Occasionnel'),('prospect','Prospection')],'Frequency'),
 
549
        'partner_id':fields.many2one('res.partner','Partner'),
 
550
        'country_id':fields.many2one('cci_country.cci_country','Country'),
 
551
        'type':fields.selection([('export','Export'),('import','Import'),('saloon','Salon'),('representation','Representation'),('expert','Expert')],'Types'),
 
552
    }
 
553
res_partner_country_relation()
 
554
 
 
555
class res_partner_contact(osv.osv):
 
556
    _inherit='res.partner.contact'
 
557
    _columns = {
 
558
        'article_ids':fields.many2many('res.partner.article','res_partner_contact_article_rel','contact_id','article_id','Articles'),
 
559
    }
 
560
res_partner_contact()
 
561
 
 
562
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
 
563