[FIX]crm: lead/opp convert/opp wizard: Add salesperson and salesteam in wizard form
authordle@openerp.com <>
Wed, 17 Apr 2013 16:17:03 +0000 (18:17 +0200)
committerdle@openerp.com <>
Wed, 17 Apr 2013 16:17:03 +0000 (18:17 +0200)
bzr revid: dle@openerp.com-20130417161703-z3id6hb20c9pceho

addons/crm/crm_lead.py
addons/crm/wizard/crm_lead_to_opportunity.py
addons/crm/wizard/crm_lead_to_opportunity_view.xml
addons/crm/wizard/crm_merge_opportunities.py
addons/crm/wizard/crm_merge_opportunities_view.xml

index 2361f12..b8e8b58 100644 (file)
@@ -628,7 +628,7 @@ class crm_lead(base_stage, format_address, osv.osv):
                 attachment.write(values)
         return True
 
-    def merge_opportunity(self, cr, uid, ids, context=None):
+    def merge_opportunity(self, cr, uid, ids, user_id=False, section_id=False, context=None):
         """
         Different cases of merge:
         - merge leads together = 1 new lead
@@ -662,6 +662,11 @@ class crm_lead(base_stage, format_address, osv.osv):
         fields = list(CRM_LEAD_FIELDS_TO_MERGE)
         merged_data = self._merge_data(cr, uid, ids, highest, fields, context=context)
 
+        if user_id:
+            merged_data['user_id'] = user_id
+        if section_id:
+            merged_data['section_id'] = section_id
+
         # Merge messages and attachements into the first opportunity
         self._merge_opportunity_history(cr, uid, highest.id, tail_opportunities, context=context)
         self._merge_opportunity_attachments(cr, uid, highest.id, tail_opportunities, context=context)
index e67b7c0..ca99de8 100644 (file)
@@ -35,6 +35,8 @@ class crm_lead2opportunity_partner(osv.osv_memory):
                 ('merge', 'Merge with existing opportunities')
             ], 'Conversion Action', required=True),
         'opportunity_ids': fields.many2many('crm.lead', string='Opportunities'),
+        'user_id': fields.many2one('res.users', 'Salesperson', select=True),
+        'section_id': fields.many2one('crm.case.section', 'Sales Team', select=True),
     }
 
     def default_get(self, cr, uid, fields, context=None):
@@ -74,9 +76,27 @@ class crm_lead2opportunity_partner(osv.osv_memory):
                 res.update({'name' : len(tomerge) >= 2 and 'merge' or 'convert'})
             if 'opportunity_ids' in fields and len(tomerge) >= 2:
                 res.update({'opportunity_ids': list(tomerge)})
-
+            if lead.user_id:
+                res.update({'user_id': lead.user_id.id})
+            if lead.section_id:
+                res.update({'section_id': lead.section_id.id})
         return res
 
+    def on_change_user(self, cr, uid, ids, user_id, section_id, context=None):
+        """ When changing the user, also set a section_id or restrict section id
+            to the ones user_id is member of. """
+        if user_id:
+            if section_id:
+                user_in_section = self.pool.get('crm.case.section').search(cr, uid, [('id', '=', section_id), '|', ('user_id', '=', user_id), ('member_ids', '=', user_id)], context=context, count=True)
+            else:
+                user_in_section = False
+            if not user_in_section:
+                section_id = False
+                section_ids = self.pool.get('crm.case.section').search(cr, uid, ['|', ('user_id', '=', user_id), ('member_ids', '=', user_id)], context=context)
+                if section_ids:
+                    section_id = section_ids[0]
+        return {'value': {'section_id': section_id}}
+
     def view_init(self, cr, uid, fields, context=None):
         """
         Check some preconditions before the wizard executes.
@@ -118,15 +138,15 @@ class crm_lead2opportunity_partner(osv.osv_memory):
         w = self.browse(cr, uid, ids, context=context)[0]
         opp_ids = [o.id for o in w.opportunity_ids]
         if w.name == 'merge':
-            lead_id = self.pool.get('crm.lead').merge_opportunity(cr, uid, opp_ids, context=context)
+            lead_id = self.pool.get('crm.lead').merge_opportunity(cr, uid, opp_ids, w.user_id.id, w.section_id.id, context=context)
             lead_ids = [lead_id]
             lead = self.pool.get('crm.lead').read(cr, uid, lead_id, ['type'], context=context)
             if lead['type'] == "lead":
                 context.update({'active_ids': lead_ids})
-                self._convert_opportunity(cr, uid, ids, {'lead_ids': lead_ids}, context=context)
+                self._convert_opportunity(cr, uid, ids, {'lead_ids': lead_ids, 'user_ids': [w.user_id.id], 'section_id': w.section_id.id}, context=context)
         else:
             lead_ids = context.get('active_ids', [])
-            self._convert_opportunity(cr, uid, ids, {'lead_ids': lead_ids}, context=context)
+            self._convert_opportunity(cr, uid, ids, {'lead_ids': lead_ids, 'user_ids': [w.user_id.id], 'section_id': w.section_id.id}, context=context)
 
         return self.pool.get('crm.lead').redirect_opportunity_view(cr, uid, lead_ids[0], context=context)
 
index 4093df9..e06ff09 100644 (file)
                     <group name="name">
                         <field name="name" class="oe_inline"/>
                     </group>
+                    <group string="Assign opportunities to">
+                        <field name="user_id" class="oe_inline" on_change="on_change_user(user_id, section_id, context)"/>
+                        <field name="section_id" class="oe_inline"/>
+                    </group>
                     <group string="Opportunities">
                         <field name="opportunity_ids" attrs="{'invisible': [('name', '!=', 'merge')]}" nolabel="1">
                             <tree>
                             attrs="{'required': [('action', '=', 'exist')], 'invisible':[('action','!=','exist')]}"
                             class="oe_inline"/>
                     </group>
+                    <group string="Assign opportunities to" attrs="{'invisible': [('name', '=', '')]}">
+                        <field name="section_id" groups="base.group_multi_salesteams"/>
+                        <field name="user_ids" widget="many2many_tags"/>
+                    </group>
                     <group string="Select Opportunities" attrs="{'invisible': [('name', '!=', 'merge')]}">
                         <field name="opportunity_ids" colspan="4" nolabel="1" attrs="{'invisible': [('name', '=', 'convert')]}">
                             <tree>
                             </tree>
                         </field>
                     </group>
-
-                    <group string="Assign opportunities to" attrs="{'invisible': [('name', '=', '')]}">
-                        <field name="section_id" groups="base.group_multi_salesteams"/>
-                        <field name="user_ids" widget="many2many_tags"/>
-                    </group>
-
                     <footer>
                         <button name="mass_convert" string="Convert to Opportunities" type="object" class="oe_highlight"/>
                         or
index 8b78c03..43fbaa7 100644 (file)
@@ -34,6 +34,8 @@ class crm_merge_opportunity(osv.osv_memory):
     _description = 'Merge opportunities'
     _columns = {
         'opportunity_ids': fields.many2many('crm.lead', rel='merge_opportunity_rel', id1='merge_id', id2='opportunity_id', string='Leads/Opportunities'),
+        'user_id': fields.many2one('res.users', 'Salesperson', select=True),
+        'section_id': fields.many2one('crm.case.section', 'Sales Team', select=True),
     }
 
     def action_merge(self, cr, uid, ids, context=None):
@@ -47,7 +49,7 @@ class crm_merge_opportunity(osv.osv_memory):
         #TODO: why is this passed through the context ?
         context['lead_ids'] = [opportunity2merge_ids[0].id]
 
-        merge_id = lead_obj.merge_opportunity(cr, uid, [x.id for x in opportunity2merge_ids], context=context)
+        merge_id = lead_obj.merge_opportunity(cr, uid, [x.id for x in opportunity2merge_ids], wizard.user_id.id, wizard.section_id.id, context=context)
 
         # The newly created lead might be a lead or an opp: redirect toward the right view
         merge_result = lead_obj.browse(cr, uid, merge_id, context=context)
@@ -79,4 +81,19 @@ class crm_merge_opportunity(osv.osv_memory):
 
         return res
 
+    def on_change_user(self, cr, uid, ids, user_id, section_id, context=None):
+        """ When changing the user, also set a section_id or restrict section id
+            to the ones user_id is member of. """
+        if user_id:
+            if section_id:
+                user_in_section = self.pool.get('crm.case.section').search(cr, uid, [('id', '=', section_id), '|', ('user_id', '=', user_id), ('member_ids', '=', user_id)], context=context, count=True)
+            else:
+                user_in_section = False
+            if not user_in_section:
+                section_id = False
+                section_ids = self.pool.get('crm.case.section').search(cr, uid, ['|', ('user_id', '=', user_id), ('member_ids', '=', user_id)], context=context)
+                if section_ids:
+                    section_id = section_ids[0]
+        return {'value': {'section_id': section_id}}
+
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
index 919d83c..44f3085 100644 (file)
@@ -8,20 +8,25 @@
             <field name="model">crm.merge.opportunity</field>
             <field name="arch" type="xml">
                 <form string="Merge Leads/Opportunities" version="7.0">
-                    <separator string="Select Leads/Opportunities"/>
-                    <field name="opportunity_ids">
-                        <tree>
-                            <field name="create_date"/>
-                            <field name="name"/>
-                            <field name="type"/>
-                            <field name="contact_name"/>
-                            <field name="email_from"/>
-                            <field name="phone"/>
-                            <field name="stage_id"/>
-                            <field name="user_id"/>
-                            <field name="section_id" groups="base.group_multi_salesteams"/>
-                        </tree>
-                    </field>
+                    <group string="Assign opportunities to">
+                        <field name="user_id" class="oe_inline" on_change="on_change_user(user_id, context)"/>
+                        <field name="section_id" class="oe_inline"/>
+                    </group>
+                    <group string="Select Leads/Opportunities">
+                        <field name="opportunity_ids" nolabel="1">
+                            <tree>
+                                <field name="create_date"/>
+                                <field name="name"/>
+                                <field name="type"/>
+                                <field name="contact_name"/>
+                                <field name="email_from"/>
+                                <field name="phone"/>
+                                <field name="stage_id"/>
+                                <field name="user_id"/>
+                                <field name="section_id" groups="base.group_multi_salesteams"/>
+                            </tree>
+                        </field>
+                    </group>
                     <footer>
                         <button name="action_merge" type="object" string="Merge" class="oe_highlight"/>
                         or