~jgrandguillaume-c2c/openobject-addons/multi-company-cost-price

« back to all changes in this revision

Viewing changes to crm/wizard/crm_phonecall_wizard.py

  • Committer: Joël Grand-Guillaume
  • Date: 2010-04-08 09:00:10 UTC
  • mfrom: (2533.3.664)
  • Revision ID: joel.grandguillaume@camptocamp.com-20100408090010-c0pqjan341s18bxs
[MRG] Merge from last trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
import pooler
28
28
from tools.translate import _
29
29
 
30
 
class phonecall2opportunity(wizard.interface):
 
30
class partner_create(wizard.interface):
 
31
 
 
32
    case_form = """<?xml version="1.0"?>
 
33
    <form string="Create a Partner">
 
34
        <label string="Are you sure you want to create a partner based on this phonecall ?" colspan="4"/>
 
35
        <label string="You may have to verify that this partner does not exist already." colspan="4"/>
 
36
        <!--field name="close"/-->
 
37
    </form>"""
 
38
 
 
39
    case_fields = {
 
40
        'close': {'type':'boolean', 'string':'Close Phonecall'}
 
41
    }
31
42
 
32
43
    partner_form = """<?xml version="1.0"?>
33
 
    <form string="Convert To Partner">
34
 
        <label string="Are you sure you want to create a partner based on this phonecall ?" colspan="4"/>
 
44
    <form string="Create a Partner">
 
45
        <label string="Are you sure you want to create a partner based on this lead ?" colspan="4"/>
35
46
        <label string="You may have to verify that this partner does not exist already." colspan="4"/>
36
47
        <newline />
37
48
        <field name="action"/>
38
 
        <group attrs="{'invisible':[('action','=','create')]}">
39
 
            <field name="partner_id" attrs="{'required':[('action','=','exist')]}"/>
 
49
        <group attrs="{'invisible':[('action','!=','exist')]}">
 
50
            <field name="partner_id"/>
40
51
        </group>
41
52
    </form>"""
42
53
 
43
54
    partner_fields = {
44
55
        'action': {'type':'selection',
45
56
                'selection':[('exist','Link to an existing partner'),('create','Create a new partner')],
46
 
                'string':'Action', 'required':True, 'default': lambda *a:'create'},
 
57
                'string':'Action', 'required':True, 'default': lambda *a:'exist'},
47
58
        'partner_id' : {'type':'many2one', 'relation':'res.partner', 'string':'Partner'},
48
59
    }
49
60
 
 
61
    def _selectPartner(self, cr, uid, data, context):
 
62
        pool = pooler.get_pool(cr.dbname)
 
63
        case_obj = pool.get('crm.phonecall')
 
64
        for case in case_obj.browse(cr, uid, data['ids']):
 
65
            if case.partner_id:
 
66
                raise wizard.except_wizard(_('Warning !'),
 
67
                    _('A partner is already defined on this phonecall.'))                        
 
68
        return {}
 
69
 
 
70
    def _create_partner(self, cr, uid, data, context):
 
71
        pool = pooler.get_pool(cr.dbname)        
 
72
        case_obj = pool.get('crm.phonecall')
 
73
        partner_obj = pool.get('res.partner')
 
74
        contact_obj = pool.get('res.partner.address')
 
75
        partner_ids = []
 
76
        partner_id = False
 
77
        contact_id = False
 
78
        for case in case_obj.browse(cr, uid, data['ids']):
 
79
            if data['form']['action'] == 'create':
 
80
                partner_id = partner_obj.create(cr, uid, {
 
81
                    'name': case.partner_name or case.name,
 
82
                    'user_id': case.user_id.id,
 
83
                    'comment': case.description,
 
84
                })
 
85
                contact_id = contact_obj.create(cr, uid, {
 
86
                    'partner_id': partner_id,
 
87
                    'name': case.name,
 
88
                    'phone': case.phone,
 
89
                    'mobile': case.mobile,
 
90
                    'email': case.email_from
 
91
                })
 
92
 
 
93
            else:
 
94
                if data['form']['partner_id']:
 
95
                    partner = partner_obj.browse(cr,uid,data['form']['partner_id'])
 
96
                    partner_id = partner.id
 
97
                    contact_id = partner.address and partner.address[0].id
 
98
 
 
99
            partner_ids.append(partner_id)
 
100
            vals = {}
 
101
            if partner_id:
 
102
                vals.update({'partner_id': partner_id})
 
103
            if contact_id:
 
104
                vals.update({'partner_address_id': contact_id})
 
105
            case_obj.write(cr, uid, [case.id], vals)   
 
106
        return partner_ids
 
107
 
 
108
    def _make_partner(self, cr, uid, data, context): 
 
109
        pool = pooler.get_pool(cr.dbname)             
 
110
        partner_ids = self._create_partner(cr, uid, data, context)
 
111
        mod_obj = pool.get('ir.model.data') 
 
112
        result = mod_obj._get_id(cr, uid, 'base', 'view_res_partner_filter')
 
113
        res = mod_obj.read(cr, uid, result, ['res_id'])
 
114
        value = {
 
115
            'domain': "[]",
 
116
            'view_type': 'form',
 
117
            'view_mode': 'form,tree',
 
118
            'res_model': 'res.partner',
 
119
            'res_id': partner_ids and int(partner_ids[0]) or False,
 
120
            'view_id': False,
 
121
            'type': 'ir.actions.act_window',
 
122
            'search_view_id': res['res_id'] 
 
123
        }
 
124
        return value
 
125
 
 
126
    states = {
 
127
        'init': {
 
128
            'actions': [_selectPartner],
 
129
            'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
 
130
                'state' : [('end', 'Cancel', 'gtk-cancel'),('create_partner', 'Create Partner', 'gtk-go-forward')]}
 
131
        },
 
132
        'create_partner': {
 
133
            'actions': [],
 
134
            'result': {'type': 'form', 'arch': partner_form, 'fields': partner_fields,
 
135
                'state' : [('end', 'Cancel', 'gtk-cancel'),('create', 'Continue', 'gtk-go-forward')]}
 
136
        },
 
137
        'create': {
 
138
            'actions': [],
 
139
            'result': {'type': 'action', 'action': _make_partner, 'state': 'end'}
 
140
        }
 
141
    }
 
142
 
 
143
 
 
144
partner_create('crm.phonecall.partner_create')
 
145
 
 
146
class phonecall2opportunity(partner_create):
 
147
    
50
148
    case_form = """<?xml version="1.0"?>
51
149
    <form string="Convert To Opportunity">
52
150
        <field name="name"/>
67
165
        pool = pooler.get_pool(cr.dbname)
68
166
        case_obj = pool.get('crm.phonecall')
69
167
        for case in case_obj.browse(cr, uid, data['ids']):
70
 
            if case.state != 'open':
 
168
            if case.state in ['done', 'cancel']:
71
169
                raise wizard.except_wizard(_('Warning !'),
72
 
                    _('Phone Call state should be \'Open\' before converting to Opportunity.'))
 
170
                    _('Closed/Cancelled Phone Call Could not convert into Opportunity.'))
73
171
        return {}
74
172
 
75
173
    def _selectopportunity(self, cr, uid, data, context):
76
174
        pool = pooler.get_pool(cr.dbname)
77
175
        case_obj = pool.get('crm.phonecall')
78
 
        for case in case_obj.browse(cr, uid, data['ids']):
79
 
            if not case.partner_id:
80
 
                return 'create_partner'
81
 
        return {'name': case.name, 'probability': case.probability or 20.0,
82
 
                'planned_revenue':case.planned_revenue, 'partner_id':case.partner_id.id}
 
176
        case = case_obj.browse(cr, uid, data['id'])
 
177
        return {'name': case.name, 'partner_id':case.partner_id and case.partner_id.id or False}
83
178
 
84
179
    def _selectChoice(self, cr, uid, data, context):
85
180
        pool = pooler.get_pool(cr.dbname)
105
200
 
106
201
        phonecall_case_obj = pool.get('crm.phonecall')
107
202
        opportunity_case_obj = pool.get('crm.opportunity')
108
 
        for phonecall in phonecall_case_obj.browse(cr, uid, data['ids']):         
109
 
            #TODO : Take other info from phonecall                   
 
203
        for phonecall in phonecall_case_obj.browse(cr, uid, data['ids']):                     
110
204
            new_opportunity_id = opportunity_case_obj.create(cr, uid, {            
111
205
                'name': data['form']['name'],
112
206
                'planned_revenue': data['form']['planned_revenue'],
115
209
                'section_id': phonecall.section_id.id,
116
210
                'description': phonecall.description,         
117
211
                'phonecall_id': phonecall.id,
118
 
                'date': phonecall.date,
119
 
                'priority': phonecall.priority    
 
212
                'priority': phonecall.priority,
 
213
                'phone': phonecall.partner_phone,
120
214
            })
121
215
            new_opportunity = opportunity_case_obj.browse(cr, uid, new_opportunity_id)
122
216
            vals = {
140
234
        return value
141
235
 
142
236
    def _makePartner(self, cr, uid, data, context):
143
 
        pool = pooler.get_pool(cr.dbname)
144
 
        phonecall_case_obj = pool.get('crm.phonecall')
145
 
        partner_obj = pool.get('res.partner')
146
 
        contact_obj = pool.get('res.partner.address')
147
 
        if data['form']['action']=='create':
148
 
            for case in phonecall_case_obj.browse(cr, uid, data['ids']):
149
 
                partner_id = partner_obj.search(cr, uid, [('name', '=', case.partner_name or case.name)])
150
 
                if partner_id:
151
 
                    raise wizard.except_wizard(_('Warning !'),_('A partner is already existing with the same name.'))
152
 
                else:
153
 
                    partner_id = partner_obj.create(cr, uid, {
154
 
                        'name': case.partner_name or case.name,
155
 
                        'user_id': case.user_id.id,
156
 
                        'comment': case.description,
157
 
                    })
158
 
                contact_id = contact_obj.create(cr, uid, {
159
 
                    'partner_id': partner_id,
160
 
                    'name': case.partner_name2,
161
 
                    'phone': case.partner_phone,
162
 
                    'mobile': case.partner_mobile,
163
 
                    'email': case.email_from
164
 
                })
165
 
        else:
166
 
            partner = partner_obj.browse(cr,uid,data['form']['partner_id'])
167
 
            partner_id=partner.id
168
 
            contact_id=partner.address and partner.address[0].id 
169
 
        
170
 
        phonecall_case_obj.write(cr, uid, data['ids'], {
171
 
            'partner_id': partner_id,
172
 
            'partner_address_id': contact_id
173
 
        })
 
237
        partner_ids = self._create_partner(cr, uid, data, context)
174
238
        return {}
175
239
 
176
240
    states = {
180
244
        },
181
245
        'create_partner': {
182
246
            'actions': [],
183
 
            'result': {'type': 'form', 'arch': partner_form, 'fields': partner_fields,
184
 
                'state' : [('end', 'Cancel', 'gtk-cancel'),('create', 'Continue', 'gtk-go-forward')]}
 
247
            'result': {'type': 'form', 'arch': partner_create.partner_form, 'fields': partner_create.partner_fields,
 
248
                'state' : [('end', 'Cancel', 'gtk-cancel'),('opportunity', 'Skip', 'gtk-goto-last'),('create', 'Continue', 'gtk-go-forward')]}
185
249
        },
186
250
        'create': {
187
251
            'actions': [],
204
268
 
205
269
    def _makeMeeting(self, cr, uid, data, context):
206
270
        pool = pooler.get_pool(cr.dbname)
207
 
        phonecall_case_obj = pool.get('crm.phonecall')
208
 
        meeting_case_obj = pool.get('crm.meeting')        
209
 
        for phonecall in phonecall_case_obj.browse(cr, uid, data['ids']):
210
 
            new_meeting_id = meeting_case_obj.create(cr, uid, {
211
 
                'name': phonecall.name,
212
 
                'date': phonecall.date,
213
 
                'section_id' : phonecall.section_id and phonecall.section_id.id or False,
214
 
                'duration': phonecall.duration,
215
 
                'description':phonecall.description,
216
 
                'phonecall_id':phonecall.id
217
 
                })
218
 
            new_meeting = meeting_case_obj.browse(cr, uid, new_meeting_id)
219
 
            vals = {}
220
 
            phonecall_case_obj.write(cr, uid, [phonecall.id], vals)
221
 
            phonecall_case_obj.case_cancel(cr, uid, [phonecall.id])
222
 
            meeting_case_obj.case_open(cr, uid, [new_meeting_id])             
 
271
        phonecall_case_obj = pool.get('crm.phonecall')                   
223
272
        data_obj = pool.get('ir.model.data')
224
273
        result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_meetings_filter')
225
274
        id = data_obj.read(cr, uid, result, ['res_id'])
232
281
            id2 = data_obj.browse(cr, uid, id2, context=context).res_id
233
282
        if id3:
234
283
            id3 = data_obj.browse(cr, uid, id3, context=context).res_id
 
284
        phonecall = phonecall_case_obj.browse(cr, uid, data['id'], context=context)
 
285
        partner_id = phonecall.partner_id and phonecall.partner_id.id or False
 
286
        name = phonecall.name
 
287
        email = phonecall.email_from
 
288
        section_id = phonecall.section_id and phonecall.section_id.id or False      
235
289
        return {            
236
290
            'name': _('Meetings'),
237
 
            'domain' : "[('phonecall_id','in',%s)]"%(data['ids']),         
 
291
            'domain' : "[('user_id','=',%s)]"%(uid), 
 
292
            'context': {'default_partner_id': partner_id, 'default_section_id': section_id, 'default_email_from': email, 'default_state':'open', 'default_name':name},        
238
293
            'view_type': 'form',
239
294
            'view_mode': 'calendar,form,tree',
240
295
            'res_model': 'crm.meeting',
256
311
    }
257
312
phonecall2meeting('crm.phonecall.meeting_set')
258
313
 
259
 
class partner_create(wizard.interface):
260
 
 
261
 
    case_form = """<?xml version="1.0"?>
262
 
    <form string="Convert To Partner">
263
 
        <label string="Are you sure you want to create a partner based on this phonecall ?" colspan="4"/>
264
 
        <label string="You may have to verify that this partner does not exist already." colspan="4"/>
265
 
        <!--field name="close"/-->
266
 
    </form>"""
267
 
 
268
 
    case_fields = {
269
 
        'close': {'type':'boolean', 'string':'Close Phonecall'}
270
 
    }
271
 
 
272
 
    def _selectPartner(self, cr, uid, data, context):
273
 
        pool = pooler.get_pool(cr.dbname)
274
 
        case_obj = pool.get('crm.phonecall')
275
 
        for case in case_obj.browse(cr, uid, data['ids']):
276
 
            if case.partner_id:
277
 
                raise wizard.except_wizard(_('Warning !'),
278
 
                    _('A partner is already defined on this phonecall.'))
279
 
        return {}
280
 
 
281
 
    def _makeOrder(self, cr, uid, data, context):
282
 
        pool = pooler.get_pool(cr.dbname)
283
 
        mod_obj = pool.get('ir.model.data') 
284
 
        result = mod_obj._get_id(cr, uid, 'base', 'view_res_partner_filter')
285
 
        res = mod_obj.read(cr, uid, result, ['res_id'])
286
 
        case_obj = pool.get('crm.phonecall')
287
 
        partner_obj = pool.get('res.partner')
288
 
        contact_obj = pool.get('res.partner.address')
289
 
        for case in case_obj.browse(cr, uid, data['ids']):
290
 
            partner_id = partner_obj.search(cr, uid, [('name', '=', case.name)])
291
 
            if partner_id:
292
 
                raise wizard.except_wizard(_('Warning !'),_('A partner is already existing with the same name.'))
293
 
            else:
294
 
                partner_id = partner_obj.create(cr, uid, {
295
 
                    'name': case.name,
296
 
                    'user_id': case.user_id.id,
297
 
                    'comment': case.description,
298
 
                })
299
 
            contact_id = contact_obj.create(cr, uid, {
300
 
                'partner_id': partner_id,
301
 
                'name': case.name,
302
 
                'phone': case.partner_phone,
303
 
                'mobile': case.partner_mobile,
304
 
                'email': case.email_from
305
 
            })
306
 
 
307
 
 
308
 
        case_obj.write(cr, uid, data['ids'], {
309
 
            'partner_id': partner_id,
310
 
            'partner_address_id': contact_id
311
 
        })
312
 
        if data['form']['close']:
313
 
            case_obj.case_close(cr, uid, data['ids'])
314
 
 
315
 
        value = {
316
 
            'domain': "[]",
317
 
            'view_type': 'form',
318
 
            'view_mode': 'form,tree',
319
 
            'res_model': 'res.partner',
320
 
            'res_id': int(partner_id),
321
 
            'view_id': False,
322
 
            'type': 'ir.actions.act_window',
323
 
            'search_view_id': res['res_id'] 
324
 
        }
325
 
        return value
326
 
 
327
 
    states = {
328
 
        'init': {
329
 
            'actions': [_selectPartner],
330
 
            'result': {'type': 'form', 'arch': case_form, 'fields': case_fields,
331
 
                'state' : [('end', 'Cancel', 'gtk-cancel'),('confirm', 'Create Partner', 'gtk-go-forward')]}
332
 
        },
333
 
        'confirm': {
334
 
            'actions': [],
335
 
            'result': {'type': 'action', 'action': _makeOrder, 'state': 'end'}
336
 
        }
337
 
    }
338
 
 
339
 
partner_create('crm.phonecall.partner_create')
340
 
 
341
314
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: