[MERGE] Merge with lp:openobject-addons
[odoo/odoo.git] / addons / crm / wizard / crm_phonecall_to_opportunity.py
index b18e022..98e3c97 100644 (file)
@@ -40,6 +40,24 @@ class crm_phonecall2opportunity(osv.osv_memory):
 
         return {'type':'ir.actions.act_window_close'}
 
+    def view_init(self, cr, uid, fields, context=None):
+        """
+        This function checks for precondition before wizard executes
+        @param self: The object pointer
+        @param cr: the current row, from the database cursor,
+        @param uid: the current user’s ID for security checks,
+        @param fields: List of fields for default value
+        @param context: A standard dictionary for contextual values
+
+        """
+        phonecall_obj = self.pool.get('crm.phonecall')
+        record_id = context and context.get('active_id', False) or False
+        case = phonecall_obj.browse(cr, uid, record_id, context=context)
+        if case.state in ['done', 'cancel']:
+                raise osv.except_osv(_("Warning"), _("Closed/Cancelled Phone \
+Call Could not convert into Opportunity"))
+
+
     def action_apply(self, cr, uid, ids, context=None):
         """
         This converts Phonecall to Opportunity and opens Phonecall view
@@ -53,63 +71,66 @@ class crm_phonecall2opportunity(osv.osv_memory):
         """
         record_id = context and context.get('active_id', False) or False
         if record_id:
-            opp_obj = self.pool.get('crm.opportunity')
+            opp_obj = self.pool.get('crm.lead')
             phonecall_obj = self.pool.get('crm.phonecall')
             case = phonecall_obj.browse(cr, uid, record_id, context=context)
+            data_obj = self.pool.get('ir.model.data')
+            result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_opportunities_filter')
+            res = data_obj.read(cr, uid, result, ['res_id'])
+            id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_form_view_oppor')
+            id3 = data_obj._get_id(cr, uid, 'crm', 'crm_case_tree_view_oppor')
+            if id2:
+                id2 = data_obj.browse(cr, uid, id2, context=context).res_id
+            if id3:
+                id3 = data_obj.browse(cr, uid, id3, context=context).res_id
 
-            if case.state in ['done', 'cancel']:
-                raise osv.except_osv(_("Warning"), _("Closed/Cancelled Phone \
-Call Could not convert into Opportunity"))
-            else:
-                data_obj = self.pool.get('ir.model.data')
-                result = data_obj._get_id(cr, uid, 'crm', 'view_crm_case_opportunities_filter')
-                res = data_obj.read(cr, uid, result, ['res_id'])
-                id2 = data_obj._get_id(cr, uid, 'crm', 'crm_case_form_view_oppor')
-                id3 = data_obj._get_id(cr, uid, 'crm', 'crm_case_tree_view_oppor')
-                if id2:
-                    id2 = data_obj.browse(cr, uid, id2, context=context).res_id
-                if id3:
-                    id3 = data_obj.browse(cr, uid, id3, context=context).res_id
-
-                for this in self.browse(cr, uid, ids, context=context):
-                    new_opportunity_id = opp_obj.create(cr, uid, {
-                                    'name': this.name, 
-                                    'planned_revenue': this.planned_revenue, 
-                                    'probability': this.probability, 
-                                    'partner_id': this.partner_id and this.partner_id.id or False, 
-                                    'section_id': case.section_id and case.section_id.id or False, 
-                                    'description': case.description or False, 
-                                    'phonecall_id': case.id, 
-                                    'priority': case.priority, 
-                                    'phone': case.partner_phone or False, 
-                                })
-                    new_opportunity = opp_obj.browse(cr, uid, new_opportunity_id)
-                    vals = {
-                                'partner_id': this.partner_id.id, 
-                                'opportunity_id' : new_opportunity_id, 
-                                }
-                    phonecall_obj.write(cr, uid, [case.id], vals)
-                    phonecall_obj.case_close(cr, uid, [case.id])
-                    opp_obj.case_open(cr, uid, [new_opportunity_id])
-
-            value = {
-                'name': _('Opportunity'), 
-                'view_type': 'form', 
-                'view_mode': 'form,tree', 
-                'res_model': 'crm.opportunity', 
-                'res_id': int(new_opportunity_id), 
-                'view_id': False, 
-                'views': [(id2, 'form'), (id3, 'tree'), (False, 'calendar'), (False, 'graph')], 
-                'type': 'ir.actions.act_window', 
-                'search_view_id': res['res_id']
-            }
-            return value
+            for this in self.browse(cr, uid, ids, context=context):
+                address = None
+                if this.partner_id:
+                    address_id = self.pool.get('res.partner').address_get(cr, uid, [this.partner_id.id])
+                    if address_id['default']:
+                        address = self.pool.get('res.partner.address').browse(cr, uid, address_id['default'], context=context)
+                new_opportunity_id = opp_obj.create(cr, uid, {
+                                'name': this.name,
+                                'planned_revenue': this.planned_revenue,
+                                'probability': this.probability,
+                                'partner_id': this.partner_id and this.partner_id.id or False,
+                                'partner_address_id': address and address.id, 
+                                'phone': address and address.phone,
+                                'mobile': address and address.mobile,
+                                'section_id': case.section_id and case.section_id.id or False,
+                                'description': case.description or False,
+                                'phonecall_id': case.id,
+                                'priority': case.priority,
+                                'type': 'opportunity', 
+                                'phone': case.partner_phone or False,
+                            })
+                vals = {
+                            'partner_id': this.partner_id.id,
+                            'opportunity_id' : new_opportunity_id,
+                            }
+                phonecall_obj.write(cr, uid, [case.id], vals)
+                phonecall_obj.case_close(cr, uid, [case.id])
+                opp_obj.case_open(cr, uid, [new_opportunity_id])
+
+        value = {
+            'name': _('Opportunity'),
+            'view_type': 'form',
+            'view_mode': 'form,tree',
+            'res_model': 'crm.lead',
+            'res_id': int(new_opportunity_id),
+            'view_id': False,
+            'views': [(id2, 'form'), (id3, 'tree'), (False, 'calendar'), (False, 'graph')],
+            'type': 'ir.actions.act_window',
+            'search_view_id': res['res_id']
+        }
+        return value
 
     _columns = {
-        'name' : fields.char('Opportunity Summary', size=64, required=True, select=1), 
-        'probability': fields.float('Success Probability'), 
-        'planned_revenue': fields.float('Expected Revenue'), 
-        'partner_id': fields.many2one('res.partner', 'Partner'), 
+        'name' : fields.char('Opportunity Summary', size=64, required=True, select=1),
+        'probability': fields.float('Success Probability'),
+        'planned_revenue': fields.float('Expected Revenue'),
+        'partner_id': fields.many2one('res.partner', 'Partner'),
     }
 
     def default_get(self, cr, uid, fields, context=None):
@@ -124,12 +145,14 @@ Call Could not convert into Opportunity"))
         @return : default values of fields.
         """
         record_id = context and context.get('active_id', False) or False
+        res = super(crm_phonecall2opportunity, self).default_get(cr, uid, fields, context=context)
+
         if record_id:
             phonecall = self.pool.get('crm.phonecall').browse(cr, uid, record_id, context=context)
-            res = {
-                    'name': phonecall.name, 
-                    'partner_id': phonecall.partner_id and phonecall.partner_id.id or False
-                   }
+            if 'name' in fields:
+                res.update({'name': phonecall.name})
+            if 'partner_id' in fields:
+                res.update({'partner_id': phonecall.partner_id and phonecall.partner_id.id or False})
         return res
 
 crm_phonecall2opportunity()