- 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 state is "Open". - !assert {model: crm.lead, id: crm.crm_case_qrecorp0, string: Lead in open state}: - state == "open" - I create partner from lead. - !record {model: crm.lead2partner, id: crm_lead2partner_id1, context: '{"active_model": "crm.lead", "active_ids": [ref("crm_case_qrecorp0")]}'}: - !python {model: crm.lead2partner}: | context.update({'active_model': 'crm.lead', 'active_ids': [ref('crm_case_qrecorp0')], 'active_id': ref('crm_case_qrecorp0')}) self.make_partner(cr, uid ,[ref("crm_lead2partner_id1")], context=context) - I convert lead into opportunity for exiting customer. - !python {model: crm.lead}: | self.convert_opportunity(cr, uid ,[ref("crm_case_qrecorp0")], ref("base.res_partner_agrolait")) - I check details of converted opportunity. - !python {model: crm.lead}: | lead = self.browse(cr, uid, ref('crm_case_qrecorp0')) assert lead.type == 'opportunity', 'Lead is not converted to opportunity!' 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 begin communication and schedule a phone call with the customer. - !python {model: crm.opportunity2phonecall}: | import time context.update({'active_model': 'crm.lead', 'active_ids': [ref('crm_case_qrecorp0')]}) call_id = self.create(cr, uid, {'date': time.strftime('%Y-%m-%d %H:%M:%S'), '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.lead}: | self.message_append_note(cr, uid, [ref('crm_case_qrecorp0')], subject='Test note', body='ces détails envoyés par le client sur ​​le FAX pour la qualité') - I win this opportunity - !python {model: crm.lead}: | self.case_mark_won(cr, uid, [ref("crm_case_qrecorp0")]) - I check details of the opportunity after having won the opportunity. - !python {model: crm.lead}: | lead = self.browse(cr, uid, ref('crm_case_qrecorp0')) assert lead.stage_id.id == ref('crm.stage_lead6'), "Opportunity stage should be 'Won'." assert lead.state == 'done', "Opportunity is not in 'done' state!" assert lead.probability == 100.0, "Revenue probability should 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_employee0"), ref("crm_case_electonicgoodsdealer0")], 'active_id': ref("crm_case_qrecorp0")}) 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) - Now I check first lead converted on opportunity. - !python {model: crm.lead}: | opp = self.browse(cr, uid, ref('crm_case_employee0')) assert opp.name == "Need Info about Onsite Intervention", "Opportunity name not correct" assert opp.type == 'opportunity', 'Lead is not converted to opportunity!' assert opp.partner_id.name == "Agrolait", 'Partner missmatch!' assert opp.stage_id.id == ref("stage_lead1"), 'Stage of probability is incorrect!' - Then check for second lead converted on opportunity. - !python {model: crm.lead}: | opp = self.browse(cr, uid, ref('crm_case_electonicgoodsdealer0')) assert opp.name == "Interest in Your New Product", "Opportunity name not correct" assert opp.type == 'opportunity', 'Lead is not converted to opportunity!' assert opp.stage_id.id == ref("stage_lead1"), 'Stage of probability is incorrect!' - I loose the second opportunity - !python {model: crm.lead}: | self.case_mark_lost(cr, uid, [ref("crm_case_electonicgoodsdealer0")]) - I check details of the opportunity after the loose - !python {model: crm.lead}: | lead = self.browse(cr, uid, ref('crm_case_electonicgoodsdealer0')) assert lead.stage_id.id == ref('crm.stage_lead8'), "Opportunity stage should be 'Lost'." assert lead.state == 'cancel', "Lost opportunity is not in 'cancel' state!" assert lead.probability == 0.0, "Revenue probability should be 0.0!" - I confirm review needs meeting. - !python {model: crm.meeting}: | context.update({'active_model': 'crm.meeting'}) self.case_open(cr, uid, [ref('base_calendar.crm_case_reviewneeds0')]) - I invite a user for meeting. - !python {model: calendar.attendee}: | meeting_id = self.create(cr, uid, {'user_id': ref('base.user_root'), 'email': 'user@meeting.com' }) self.do_accept(cr, uid, [meeting_id])