[IMP+FIX] crm: clean test case, correct issues, added demo data of section for Sales...
authorHarry (OpenERP) <hmo@tinyerp.com>
Tue, 25 Oct 2011 07:39:57 +0000 (13:09 +0530)
committerHarry (OpenERP) <hmo@tinyerp.com>
Tue, 25 Oct 2011 07:39:57 +0000 (13:09 +0530)
bzr revid: hmo@tinyerp.com-20111025073957-e6m4fr70g6e29k0s

12 files changed:
addons/crm/__openerp__.py
addons/crm/crm.py
addons/crm/crm_demo.xml
addons/crm/crm_lead_demo.xml
addons/crm/test/process/cancel_lead.yml
addons/crm/test/process/communication_with_customer.yml
addons/crm/test/process/lead2opportunity2win.yml
addons/crm/test/process/merge_opportunity.yml
addons/crm/test/ui/lead_form.yml [deleted file]
addons/crm/test/ui/onchange_events.yml [new file with mode: 0644]
addons/crm/wizard/crm_lead_to_opportunity.py
addons/crm/wizard/crm_lead_to_partner.py

index 8e195bb..dd22590 100644 (file)
@@ -123,7 +123,7 @@ Creates a dashboard for CRM that includes:
             'test/process/lead2opportunity2win.yml',
             'test/process/merge_opportunity.yml',
             'test/process/cancel_lead.yml',
-            'test/ui/lead_form.yml',
+            'test/ui/onchange_events.yml',
              ],
     'installable': True,
     'active': False,
index ac0874a..d192dde 100644 (file)
@@ -467,10 +467,12 @@ class crm_case(crm_base):
         self._action(cr, uid, cases, state)
         return True
 
+    #DEAD Code
     def remind_partner(self, cr, uid, ids, context=None, attach=False):
         return self.remind_user(cr, uid, ids, context, attach,
                 destination=False)
 
+    #DEAD Code
     def remind_user(self, cr, uid, ids, context=None, attach=False, destination=True):
         mail_message = self.pool.get('mail.message')
         for case in self.browse(cr, uid, ids, context=context):
index 16ae0e7..08d0990 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <openerp>
-    <data noupdate="1">
+    <data>
         <record id="base.user_demo" model="res.users">
             <field name="groups_id" eval="[(4,ref('base.group_sale_salesman'))]"/> 
         </record>
         <field name="res_id" ref="crm.menu_crm_case_categ_meet"/>
     </record>
 
+    <record model="crm.case.section" id="section_sales_marketing_department">
+            <field name="name">Sales Marketing Department</field>
+            <field name="code">Sales Marketing</field>
+            <field name="parent_id" ref="crm.section_sales_department"></field>
+    </record>
+
     </data>
 </openerp>
index 390932c..9073abb 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <openerp>
-    <data noupdate="1">
+    <data>
         <!-- Demo Leads -->
         <record id="crm_case_itisatelesalescampaign0" model="crm.lead">
             <field name="type_id" ref="crm.type_lead1"/>
@@ -9,7 +9,7 @@
             <field name="user_id" ref="base.user_root"/>
             <field eval="'The Oil Company'" name="partner_name"/>
             <field eval="'draft'" name="state"/>
-            <field name="section_id" ref="crm.section_sales_department"/>
+            <field name="section_id" ref="crm.section_sales_marketing_department"/>
            <field eval="'Luc Latour'" name="contact_name"/>
             <field name="title" ref="base.res_partner_title_sir"/>
            <field eval="'Training Manager'" name="function"/>
@@ -92,7 +92,7 @@
            <field eval="'Bruxelles'" name="city"/>
            <field name="country_id" ref="base.be"/>
             <field eval="'draft'" name="state"/>
-            <field name="section_id" ref="crm.section_sales_department"/>
+            <field name="section_id" ref="crm.section_sales_marketing_department"/>
             <field eval="'(333) 715-1450'" name="mobile"/>
             <field eval="1" name="active"/>
             <field name="categ_id" ref="crm.categ_oppor1"/>
index 0cc1320..6b08136 100644 (file)
 -
   !assert {model: crm.lead, id: crm.crm_case_itisatelesalescampaign0, string: Lead is in pending state}:
      - state == "pending"
+-
+  I Escalate the Lead to Parent Team.
+-
+  !python {model: crm.lead}: |
+    self.case_escalate(cr, uid, [ref("crm_case_itisatelesalescampaign0")])
+
+-
+  I mark as lost the Lead.
+-
+  !python {model: crm.lead}: |
+    self.case_mark_won(cr, uid, [ref("crm_case_itisatelesalescampaign0")])
+
+
 
index 444c7a7..56a0e8a 100644 (file)
@@ -1,5 +1,5 @@
 -
-  Customer would like to purchase our product. so He send request by email to our mail server.
+  Customer interested in our product. so He send request by email to get more details.
 -
   Mail script will be fetched him request from mail server. so I process that mail after read EML file 
 -
index ed33a25..c5f2afd 100644 (file)
@@ -1,10 +1,12 @@
 -
+  In order to test convert customer lead into opportunity, 
+-
   I open customer lead.
 -
    !python {model: crm.lead}: |
      self.case_open(cr, uid, [ref("crm_case_qrecorp0")])
 - 
-  I check lead is in open stage.
+  I check lead is in open.
 -
   !assert {model: crm.lead, id: crm.crm_case_qrecorp0, string: Lead in open state}:
      - state == "open"
@@ -23,7 +25,7 @@
     assert lead.partner_id.id == ref("base.res_partner_agrolait"), 'Partner missmatch!'
     assert lead.stage_id.id == ref("stage_lead1"), 'Stage of opportunity is incorrect!'
 -
-  Now I start Communication by phonecall with customer.
+  Now I start Communication and schedule phonecall with customer.
 -
   !python {model: crm.opportunity2phonecall}: |
     import time
                 'name': "Bonjour M. Jean, Comment ĂȘtes-vous? J'ai obtenu votre demande. peut-on parler au sujet de ce pour quelques minutes?"}, context=context)
     self.action_schedule(cr, uid, [call_id], context=context)
 -
+  I check that phonecall is scheduled for that opportunity.
+-
+  !python {model: crm.phonecall}: |
+    ids = self.search(cr, uid, [('opportunity_id', '=', ref('crm_case_qrecorp0'))])
+    assert len(ids), 'phonecall is not scheduled'
+
+-
+  Now I schedule Meeting with Customer.
+-
+  !python {model: crm.lead}: |
+    self.action_makeMeeting(cr, uid, [ref('crm_case_qrecorp0')])
+
+-
   After communicated  with customer, I put some notes with Contract details.
 -
   !python {model: crm.add.note}: |
     assert lead.state == 'done', 'Opportunity is not in done state!'
     assert lead.stage_id.name == 'Won', ' Stage of Opportunity is not win!'
     assert lead.probability == 100.0, 'probability revenue should not  be 100.0!'
+
+-
+  I convert mass lead into opportunity customer.
+-
+  !python {model: crm.lead2opportunity.partner.mass}: |
+    context.update({'active_model': 'crm.lead', 'active_ids': [ref('crm_case_itdeveloper0')]})
+    id = self.create(cr, uid, {'user_ids': [ref('base.user_root')], 'section_id': ref('crm.section_sales_department')}, context=context)
+    self.mass_convert(cr, uid, [id], context=context)   
+
index 6d16ca1..2c3ad01 100644 (file)
     res_id = self.create(cr, uid, {'name': "vos chances sont fusionnĂ©s en un seul"}, context=context)
     self.action_schedule(cr, uid, [res_id], context=context)
 
+- 
+  I schedule Meeting on this phonecall.
+-
+   !python {model: crm.phonecall}: |
+     self.action_make_meeting(cr, uid, [ref("crm.crm_case_phone06")])
+
+-
+  I setting Phone call to Held (Done).
+-
+  !python {model: crm.phonecall}: |
+    self.case_close(cr, uid, [ref("crm.crm_case_phone06")])
+-
+  I check that the hone call is in 'Held' state.
+-
+  !assert {model: crm.phonecall, id: crm.crm_case_phone06, string: Phone call Helded}:
+    - state == "done"
+
diff --git a/addons/crm/test/ui/lead_form.yml b/addons/crm/test/ui/lead_form.yml
deleted file mode 100644 (file)
index 7ec8610..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
--
-  I check onchange event of partner address on lead form.
--
-  !python {model: crm.lead}: |
-    action = self.onchange_partner_address_id(cr, uid, ref("crm_case_qrecorp0"), ref("base.res_partner_address_notsotinysarl0"), email=False)
-    assert action['value']['country_id'] == 20, "Country name not True"
-    assert action['value']['phone'] == '(+32).81.81.37.00', "phone number is wrong"
-
diff --git a/addons/crm/test/ui/onchange_events.yml b/addons/crm/test/ui/onchange_events.yml
new file mode 100644 (file)
index 0000000..4f067ab
--- /dev/null
@@ -0,0 +1,51 @@
+-
+  I call onchange event to change partner address for lead.
+-
+  !python {model: crm.lead}: |
+    action = self.onchange_partner_address_id(cr, uid, ref("crm_case_qrecorp0"), ref("base.res_partner_address_notsotinysarl0"), email=False)
+    assert action['value']['country_id'] == 20, "Country name not True"
+    assert action['value']['phone'] == '(+32).81.81.37.00', "phone number is wrong"
+-
+  I call onchange event to change email "Opt-out" option for Lead.
+-
+  !python {model: crm.lead}: |
+    self.on_change_optout(cr, uid, ref("crm_case_qrecorp0"), True)
+
+-
+  I call onchange event to convert the Opt-out to Opt-in to show email receive preference for lead.
+-
+  !python {model: crm.lead}: |
+    self.on_change_optin(cr, uid, ref("crm_case_qrecorp0"), True)
+
+-
+  I setting next stage "New" for the lead.
+-
+   !python {model: crm.lead}: |
+     self.stage_next(cr, uid, [ref("crm_case_qrecorp0")], context={'stage_type': 'lead'})
+-
+  I call onchange event to assigning won stage for Lead.
+-
+  !python {model: crm.lead}: |
+    stage_id = self.stage_find_won(cr, uid, ref('crm.section_sales_department'))
+    self.onchange_stage_id(cr, uid, [ref("crm_case_qrecorp0")], stage_id, context)
+-
+  I make duplicate the Lead.
+-
+   !python {model: crm.lead}: |
+     self.copy(cr, uid, ref("crm_case_qrecorp0"))
+
+-
+  I Unlink the Lead.
+-
+  !python {model: crm.lead}: |
+     self.unlink(cr, uid, [ref("crm_case_qrecorp0")])
+
+-
+  I call onchange event to change Contact Detail for Phonecall.
+-
+  !python {model: crm.phonecall}: |
+    self.onchange_partner_address_id(cr, uid,[ref("crm.crm_case_phone06")], ref("base.res_partner_address_8invoice"))
+
+    
+
+
index 9b03f78..9a82866 100644 (file)
@@ -102,15 +102,14 @@ class crm_lead2opportunity_partner(osv.osv_memory):
                 raise osv.except_osv(_("Warning !"), _("Closed/Cancelled Leads can not be converted into Opportunity"))
         return False
 
-    def _convert_opportunity(self, cr, uid, ids, context=None):
+    def _convert_opportunity(self, cr, uid, ids, vals, context=None):
         if context is None:
             context = {}
         lead = self.pool.get('crm.lead')
-        partner_ids = self._create_partner(cr, uid, ids, context=context)
-        partner_id = partner_ids and partner_ids[0] or False
-        lead_ids = context.get('active_ids', [])
-        user_ids = context.get('user_ids', False)
-        team_id = context.get('section_id', False)
+        partner_id = self._create_partner(cr, uid, ids, context=context)
+        lead_ids = vals.get('lead_ids', [])
+        user_ids = vals.get('user_ids', False)
+        team_id = vals.get('section_id', False)
         return lead.convert_opportunity(cr, uid, lead_ids, partner_id, user_ids, team_id, context=context) 
 
     def _merge_opportunity(self, cr, uid, ids, opportunity_ids, action='merge', context=None):
@@ -129,18 +128,15 @@ class crm_lead2opportunity_partner(osv.osv_memory):
     def action_apply(self, cr, uid, ids, context=None):
         """
         This converts lead to opportunity and opens Opportunity view
-        @param ids: ids of the leads to convert to opportunities
-
-        @return : View dictionary opening the Opportunity form view
         """
         if not context:
             context = {}
         
         lead = self.pool.get('crm.lead')
+        lead_ids = context.get('active_ids', [])
         data = self.browse(cr, uid, ids, context=context)[0]
-        self._convert_opportunity(cr, uid, ids, context=context)
+        self._convert_opportunity(cr, uid, ids, {'lead_ids': lead_ids}, context=context)
         self._merge_opportunity(cr, uid, ids, data.opportunity_ids, data.action, context=context)
-
         return lead.redirect_opportunity_view(cr, uid, lead_ids[0], context=context)
 
 crm_lead2opportunity_partner()
@@ -156,24 +152,19 @@ class crm_lead2opportunity_mass_convert(osv.osv_memory):
             'section_id': fields.many2one('crm.case.section', 'Sales Team'),
 
     }
-
-    def mass_convert(self, cr, uid, ids, context=None):
-        lead = self.pool.get('crm.lead')
-        if not context:
-            context = {}
-
-        active_ids = context.get('active_ids')
+    def _convert_opportunity(self, cr, uid, ids, vals, context=None):
         data = self.browse(cr, uid, ids, context=context)[0]
-
         salesteam_id = data.section_id and data.section_id.id or False
         salesman = []
         if data.user_ids:
             salesman = [x.id for x in data.user_ids]
-        
+        vals.update({'user_ids': salesman, 'section_id': salesteam_id})
+        return super(crm_lead2opportunity_mass_convert, self)._convert_opportunity(cr, uid, ids, vals, context=context)
+
+    def mass_convert(self, cr, uid, ids, context=None):
         value = self.default_get(cr, uid, ['partner_id', 'opportunity_ids'], context=context)
         value['opportunity_ids'] = [(6, 0, value['opportunity_ids'])]
         self.write(cr, uid, ids, value, context=context)
-        context.update({'user_ids': salesman, 'section_id': salesteam_id})
         return self.action_apply(cr, uid, ids, context=context)
 crm_lead2opportunity_mass_convert()
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
index 5363264..c424d51 100644 (file)
@@ -105,17 +105,17 @@ class crm_lead2partner(osv.osv_memory):
             context = {}
         lead = self.pool.get('crm.lead')
         lead_ids = context and context.get('active_ids') or []
-        for data in self.browse(cr, uid, ids, context=context):
-            partner_id = data.partner_id and data.partner_id.id or False
-            partner_ids += lead.convert_partner(cr, uid, lead_ids, data.action, partner_id, context=context)
-        return partner_ids
+        data = self.browse(cr, uid, ids, context=context)[0]
+        partner_id = data.partner_id and data.partner_id.id or False
+        partner_ids = lead.convert_partner(cr, uid, lead_ids, data.action, partner_id, context=context)
+        return partner_ids[lead_ids[0]]
 
     def make_partner(self, cr, uid, ids, context=None):
         """
         This function Makes partner based on action.
         """
-        partner_ids = self._create_partner(cr, uid, ids, context=context)
-        return self.pool.get('res.partner').redirect_partner_form(cr, uid, partner_ids[0], context=context)
+        partner_id = self._create_partner(cr, uid, ids, context=context)
+        return self.pool.get('res.partner').redirect_partner_form(cr, uid, partner_id, context=context)
 
 crm_lead2partner()