[IMP]: clean yaml for crm,hr_recruitment and project task
bzr revid: aja@tinyerp.com-20130625050409-letmh3v98ca6nqob
This commit is contained in:
@@ -107,10 +107,10 @@ Dashboard for CRM will include:
|
||||
],
|
||||
'test': [
|
||||
'test/crm_lead_message.yml',
|
||||
# 'test/lead2opportunity2win.yml', # TODO: Need To Clean
|
||||
# 'test/lead2opportunity_assign_salesmen.yml', # TODO : Need To Clean
|
||||
# 'test/crm_lead_merge.yml', # TODO : Need To Clean
|
||||
# 'test/crm_lead_cancel.yml',# TODO: Need To Clean
|
||||
'test/lead2opportunity2win.yml',
|
||||
'test/lead2opportunity_assign_salesmen.yml',
|
||||
'test/crm_lead_merge.yml',
|
||||
# 'test/crm_lead_cancel.yml', # TODO : Need To Clean
|
||||
'test/segmentation.yml',
|
||||
'test/phonecalls.yml',
|
||||
'test/crm_lead_onchange.yml',
|
||||
|
||||
@@ -313,7 +313,7 @@ Andrew</field>
|
||||
<field name="title_action">Meeting for pricing information.</field>
|
||||
<field name="section_id" ref="section_sales_department"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="stage_id" ref="crm.stage_lead3"/>
|
||||
<field name="stage_id" ref="crm.stage_lead1"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_case_14" model="crm.lead">
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
|
||||
-
|
||||
During a mixed merge (involving leads and opps), data should be handled a certain way following their type (m2o, m2m, text, ...) Start by creating two leads and an opp.
|
||||
-
|
||||
!record {model: crm.lead, id: test_crm_opp_01}:
|
||||
type: 'opportunity'
|
||||
name: 'Test opportunity 1'
|
||||
partner_id: base.res_partner_5
|
||||
stage_id: stage_lead1
|
||||
description: This is the description of the test opp 1.
|
||||
-
|
||||
!record {model: crm.lead, id: test_crm_lead_01}:
|
||||
type: 'lead'
|
||||
@@ -15,16 +22,9 @@
|
||||
partner_id: base.res_partner_3
|
||||
stage_id: stage_lead1
|
||||
description: This is the description of the test lead 2.
|
||||
-
|
||||
!record {model: crm.lead, id: test_crm_opp_01}:
|
||||
type: 'opportunity'
|
||||
name: 'Test opportunity 1'
|
||||
partner_id: base.res_partner_5
|
||||
stage_id: stage_lead1
|
||||
description: This is the description of the test opp 1.
|
||||
-
|
||||
!python {model: crm.lead}: |
|
||||
lead_ids = [ref('test_crm_lead_01'), ref('test_crm_lead_02'), ref('test_crm_opp_01')]
|
||||
lead_ids = [ref('test_crm_opp_01'),ref('test_crm_lead_01'), ref('test_crm_lead_02')]
|
||||
context.update({'active_model': 'crm.lead', 'active_ids': lead_ids, 'active_id': lead_ids[0]})
|
||||
-
|
||||
I create a merge wizard and merge the leads and opp together in the first item of the list.
|
||||
@@ -122,4 +122,4 @@
|
||||
assert merge_result.partner_id.id == ref("base.res_partner_5"), 'Partner mismatch'
|
||||
assert merge_result.type == 'opportunity', 'Type mismatch: when opps get merged together, the result should be a new opp (instead of %s)' % merge_result.type
|
||||
tailing_opp = self.search(cr, uid, [('id', '=', ref('test_crm_opp_03'))])
|
||||
assert not tailing_opp, 'This tailing opp (id %s) should not exist anymore' % ref('test_crm_opp_03')
|
||||
assert not tailing_opp, 'This tailing opp (id %s) should not exist anymore' % ref('test_crm_opp_03')
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
-
|
||||
In order to test the conversion of a lead into a opportunity,
|
||||
-
|
||||
I open a lead.
|
||||
I set lead to open stage.
|
||||
-
|
||||
!python {model: crm.lead}: |
|
||||
self.case_open(cr, uid, [ref("crm_case_4")])
|
||||
self.write(cr, uid, [ref("crm_case_3")],{'stage_id':ref("stage_lead1")})
|
||||
-
|
||||
I check if the lead state is "Open".
|
||||
I check if the lead stage is "Open".
|
||||
-
|
||||
!assert {model: crm.lead, id: crm.crm_case_4, string: Lead state is Open}:
|
||||
- state == "open"
|
||||
!assert {model: crm.lead, id: crm.crm_case_3, string: Lead stage is Open}:
|
||||
- stage_id.sequence == 1
|
||||
-
|
||||
I convert lead into opportunity for exiting customer.
|
||||
-
|
||||
!python {model: crm.lead}: |
|
||||
self.convert_opportunity(cr, uid ,[ref("crm_case_4")], ref("base.res_partner_2"))
|
||||
self.convert_opportunity(cr, uid ,[ref("crm_case_3")], ref("base.res_partner_2"))
|
||||
-
|
||||
I check details of converted opportunity.
|
||||
-
|
||||
!python {model: crm.lead}: |
|
||||
lead = self.browse(cr, uid, ref('crm_case_4'))
|
||||
lead = self.browse(cr, uid, ref('crm_case_3'))
|
||||
assert lead.type == 'opportunity', 'Lead is not converted to opportunity!'
|
||||
assert lead.partner_id.id == ref("base.res_partner_2"), 'Partner mismatch!'
|
||||
assert lead.stage_id.id == ref("stage_lead1"), 'Stage of opportunity is incorrect!'
|
||||
@@ -28,7 +28,7 @@
|
||||
-
|
||||
!python {model: crm.opportunity2phonecall}: |
|
||||
import time
|
||||
context.update({'active_model': 'crm.lead', 'active_ids': [ref('crm_case_4')]})
|
||||
context.update({'active_model': 'crm.lead', 'active_ids': [ref('crm_case_3')]})
|
||||
call_id = self.create(cr, uid, {'date': time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'name': "Bonjour M. Jean, Comment allez-vous? J'ai bien reçu votre demande, pourrions-nous en parler quelques minutes?"}, context=context)
|
||||
self.action_schedule(cr, uid, [call_id], context=context)
|
||||
@@ -36,46 +36,46 @@
|
||||
I check that phonecall is scheduled for that opportunity.
|
||||
-
|
||||
!python {model: crm.phonecall}: |
|
||||
ids = self.search(cr, uid, [('opportunity_id', '=', ref('crm_case_4'))])
|
||||
ids = self.search(cr, uid, [('opportunity_id', '=', ref('crm_case_3'))])
|
||||
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_4')])
|
||||
self.action_makeMeeting(cr, uid, [ref('crm_case_3')])
|
||||
-
|
||||
After communicated with customer, I put some notes with contract details.
|
||||
-
|
||||
!python {model: crm.lead}: |
|
||||
self.message_post(cr, uid, [ref('crm_case_4')], subject='Test note', body='Détails envoyés par le client sur le FAX pour la qualité')
|
||||
self.message_post(cr, uid, [ref('crm_case_3')], subject='Test note', body='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_4")])
|
||||
self.case_mark_won(cr, uid, [ref("crm_case_3")])
|
||||
-
|
||||
I check details of the opportunity after having won the opportunity.
|
||||
-
|
||||
!python {model: crm.lead}: |
|
||||
lead = self.browse(cr, uid, ref('crm_case_4'))
|
||||
lead = self.browse(cr, uid, ref('crm_case_3'))
|
||||
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.stage_id.probability == 100.0, "Opportunity is not 'done'"
|
||||
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_11"), ref("crm_case_2")], 'active_id': ref("crm_case_11")})
|
||||
context.update({'active_model': 'crm.lead', 'active_ids': [ref("crm_case_13"), ref("crm_case_2")], 'active_id': ref("crm_case_13")})
|
||||
id = self.create(cr, uid, {'user_ids': [(6, 0, [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_11'))
|
||||
assert opp.name == "Need estimated cost for new project", "Opportunity name not correct"
|
||||
opp = self.browse(cr, uid, ref('crm_case_13'))
|
||||
assert opp.name == "Plan to buy 60 keyboards and mouses", "Opportunity name not correct"
|
||||
assert opp.type == 'opportunity', 'Lead is not converted to opportunity!'
|
||||
expected_partner = "Thomas Passot"
|
||||
expected_partner = "Will McEncroe"
|
||||
assert opp.partner_id.name == expected_partner, 'Partner mismatch! %s vs %s' % (opp.partner_id.name, expected_partner)
|
||||
assert opp.stage_id.id == ref("stage_lead1"), 'Stage of probability is incorrect!'
|
||||
-
|
||||
@@ -96,8 +96,8 @@
|
||||
-
|
||||
!python {model: crm.lead}: |
|
||||
lead = self.browse(cr, uid, ref('crm_case_2'))
|
||||
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.stage_id.id == ref('crm.stage_lead7'), "Opportunity stage should be 'Lost'."
|
||||
assert lead.stage_id.sequence != 1 and lead.stage_id.probability == 0.0, "Lost opportunity is not in 'cancel' state!"
|
||||
assert lead.probability == 0.0, "Revenue probability should be 0.0!"
|
||||
-
|
||||
I confirm review needs meeting.
|
||||
|
||||
@@ -73,4 +73,4 @@
|
||||
for opp in opps:
|
||||
assert opp.type == 'opportunity', 'Type mismatch: this should be an opp, not a lead'
|
||||
assert opp.user_id.id == salesmen_ids[i], 'Salesman mismatch: expected salesman %r, got %r' % (salesmen_ids[i], opp.user_id.id)
|
||||
i = i+1 if (i < len(salesmen_ids) - 1) else 0
|
||||
i = i+1 if (i < len(salesmen_ids) - 1) else 0
|
||||
|
||||
@@ -46,7 +46,6 @@ 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)
|
||||
|
||||
# The newly created lead might be a lead or an opp: redirect toward the right view
|
||||
|
||||
@@ -61,7 +61,7 @@ You can define the different phases of interviews and easily rate the applicant
|
||||
],
|
||||
'demo': ['hr_recruitment_demo.xml'],
|
||||
'test': [
|
||||
# 'test/recruitment_process.yml' # TODO : Need To Clean
|
||||
'test/recruitment_process.yml'
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
|
||||
@@ -17,33 +17,8 @@
|
||||
resume_ids = self.pool.get('ir.attachment').search(cr, uid, [('datas_fname','=','resume.pdf'),('res_model','=',self._name),('res_id','=',applicant.id)])
|
||||
assert applicant.name == "Application for the post of Jr.application Programmer.", "Applicant name does not match."
|
||||
assert applicant.stage_id.id == ref('hr_recruitment.stage_job1'), "Stage should be 'Initial qualification' and is '%s'." % (applicant.stage_id.name)
|
||||
assert applicant.state == "draft", "Applicant state should be 'draft'."
|
||||
assert applicant.stage_id.sequence == 1, "Applicant stage sequence should be 1"
|
||||
assert len(resume_ids), "Resume is not attached."
|
||||
-
|
||||
I refuse the applicant (hr_case_programmer)
|
||||
-
|
||||
!python {model: hr.applicant}: |
|
||||
self.case_cancel(cr, uid, [ref("hr_case_programmer")])
|
||||
-
|
||||
I check the details of the refused applicant.
|
||||
-
|
||||
!python {model: hr.applicant}: |
|
||||
applicant = self.browse(cr, uid, ref("hr_case_programmer"), context=context)
|
||||
assert applicant.stage_id.id == ref('hr_recruitment.stage_job6'), "Stage should be 'Refused' and is %s." % (applicant.stage_id.name)
|
||||
assert applicant.state == 'cancel', "Applicant is not in 'cancel' state."
|
||||
-
|
||||
I reset and re-open the previously refused applicant.
|
||||
-
|
||||
!python {model: hr.applicant}: |
|
||||
self.case_reset(cr, uid, [ref("hr_case_programmer")])
|
||||
self.case_open(cr, uid, [ref("hr_case_programmer")])
|
||||
-
|
||||
I check the details of the re-opened applicant.
|
||||
-
|
||||
!python {model: hr.applicant}: |
|
||||
applicant = self.browse(cr, uid, ref("hr_case_programmer"), context=context)
|
||||
assert applicant.stage_id.id == ref('hr_recruitment.stage_job2'), "Stage should be 'First interview' and is '%s'." % (applicant.stage_id.name)
|
||||
assert applicant.state == "open", "Applicant state should be 'open'."
|
||||
-
|
||||
I assign the Job position to the applicant
|
||||
-
|
||||
@@ -95,25 +70,12 @@
|
||||
-
|
||||
!python {model: hr.applicant}: |
|
||||
self.case_close_with_emp(cr, uid, [ref('hr_case_programmer')])
|
||||
-
|
||||
I check that applicant is "Hired".
|
||||
-
|
||||
!assert {model: hr.applicant, id: hr_case_programmer, string: Applicant state is done}:
|
||||
- state == 'done'
|
||||
-
|
||||
I do not give employment to the hired the applicant.
|
||||
-
|
||||
!python {model: hired.employee}: |
|
||||
context.update({'active_model': 'hr.applicant', 'active_ids': [ref("hr_recruitment.hr_case_programmer")], 'active_id': ref("hr_recruitment.hr_case_programmer")})
|
||||
emp_id = self.create(cr, uid, {}, context=context)
|
||||
self.case_close(cr, uid, [emp_id], context=context)
|
||||
-
|
||||
Now I give employment to hired applicant .
|
||||
-
|
||||
!python {model: hr.applicant}: |
|
||||
hired_emp_obj = self.pool.get('hired.employee')
|
||||
self.case_reset(cr, uid, [ref("hr_case_programmer")])
|
||||
self.case_open(cr, uid, [ref("hr_case_programmer")])
|
||||
self.write(cr, uid, [ref("hr_case_programmer")],{'stage_id':ref("stage_job1")})
|
||||
context.update({'active_model': 'hr.applicant', 'active_ids': [ref("hr_recruitment.hr_case_programmer")], 'active_id': ref("hr_recruitment.hr_case_programmer")})
|
||||
emp_hr_id = hired_emp_obj.create(cr, uid, {}, context=context)
|
||||
hired_emp_obj.case_close_with_emp(cr, uid, [emp_hr_id], context=context)
|
||||
|
||||
@@ -391,7 +391,6 @@ class project(osv.osv):
|
||||
'date':new_date_end,
|
||||
'parent_id':parent_id}, context=context)
|
||||
result.append(new_id)
|
||||
|
||||
child_ids = self.search(cr, uid, [('parent_id','=', proj.analytic_account_id.id)], context=context)
|
||||
parent_id = self.read(cr, uid, new_id, ['analytic_account_id'])['analytic_account_id'][0]
|
||||
if child_ids:
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
-
|
||||
I put task in pending due to specification is not clear.
|
||||
I open task.
|
||||
!python {model : project.task}: |
|
||||
self.write(cr, uid, [ref("project_task_1")], {'stage_id':ref(project_tt_analysis)}
|
||||
-
|
||||
!python {model: project.task}: |
|
||||
self.do_pending(cr, uid, [ref("project_task_1")])
|
||||
context.update({"active_id": ref("project_task_1")})
|
||||
-
|
||||
I check state of task after put in pending.
|
||||
-
|
||||
!assert {model: project.task, id: project_task_1, severity: error, string: task should be in pending state}:
|
||||
- state == "pending"
|
||||
I chek task is open.
|
||||
!assert {model: project.task , id: project_task_1, string: Task is Open}:
|
||||
- stage_id.sequence == 1
|
||||
-
|
||||
!record {model: project.task.delegate, id: delegate_id}:
|
||||
user_id: base.user_demo
|
||||
@@ -25,52 +22,3 @@
|
||||
!python {model: project.task}: |
|
||||
task = self.browse(cr, uid, ref("project_task_1"), context=context)
|
||||
assert task.planned_hours == 2.0, "Planning hours is not correct after delegated."
|
||||
assert task.state == "pending", "Task should be in Pending after delegated."
|
||||
-
|
||||
I re-open the task.
|
||||
-
|
||||
!python {model: project.task}: |
|
||||
self.do_reopen(cr, uid, [ref("project_task_1")])
|
||||
-
|
||||
I check reopened task details.
|
||||
-
|
||||
!assert {model: project.task, id: project_task_1, severity: error, string: task should be open.}:
|
||||
- state == "open"
|
||||
-
|
||||
I change the stage of task to next stage.
|
||||
-
|
||||
!python {model: project.task}: |
|
||||
self.stage_next(cr, uid, [ref("project_task_1")])
|
||||
-
|
||||
!record {model: project.task.reevaluate, id: reevaluate_id}:
|
||||
remaining_hours : 120
|
||||
-
|
||||
I reevaluate task with remaining hours.
|
||||
-
|
||||
!python {model: project.task.reevaluate}: |
|
||||
self.compute_hours(cr, uid, [ref("reevaluate_id")], {"active_id": ref("project_task_1")})
|
||||
-
|
||||
I check remaining hours after reevaluated task.
|
||||
-
|
||||
!assert {model: project.task, id: project_task_1, severity: error, string: task should be reevaluated}:
|
||||
- remaining_hours == 120.0
|
||||
-
|
||||
I close the task.
|
||||
-
|
||||
!python {model: project.task}: |
|
||||
self.action_close(cr, uid, [ref("project_task_1")])
|
||||
-
|
||||
I check state after closed.
|
||||
-
|
||||
!assert {model: project.task, id: project_task_1, severity: error, string: task is in open state}:
|
||||
- state == "done"
|
||||
-
|
||||
I change the stage of task to previous stage.
|
||||
-
|
||||
!python {model: project.task}: |
|
||||
self.stage_previous(cr, uid, [ref("project_task_1")])
|
||||
-
|
||||
I cancel Task.
|
||||
-
|
||||
!python {model: project.task}: |
|
||||
self.do_cancel(cr, uid, [ref("project_task_2")])
|
||||
|
||||
Reference in New Issue
Block a user