diff --git a/addons/crm/__openerp__.py b/addons/crm/__openerp__.py index 74eb1a95b23..169b300d86a 100644 --- a/addons/crm/__openerp__.py +++ b/addons/crm/__openerp__.py @@ -126,6 +126,7 @@ Create dashboard for CRM that includes: 'test/test_crm_opportunity.yml', 'test/test_crm_phonecall.yml', 'test/test_crm_recurrent_meeting.yml', + 'test/test_crm_stage_changes.yml', ], 'installable': True, 'active': False, diff --git a/addons/crm/test/test_crm_stage_changes.yml b/addons/crm/test/test_crm_stage_changes.yml new file mode 100644 index 00000000000..85956ecdacb --- /dev/null +++ b/addons/crm/test/test_crm_stage_changes.yml @@ -0,0 +1,90 @@ +- + In order to test the changes on stage of a lead or an opportunity with OpenERP, + I create some leads and test the stage changes. +- + I want to change the probability to 0.0 when the opportunity is marked as lost. + So I set its Change probability automatically true. +- + !record {model: crm.case.stage, id: crm.stage_opportunity6}: + name: Lost + on_change: true + probability: 0.0 + section_ids: + - crm.section_sales_department + sequence: 0.0 + type: opportunity +- + I create a lead 'OpenERP Presentation'. +- + !record {model: crm.lead, id: crm_lead_openerppresentation0}: + categ_id: crm.categ_oppor4 + day_close: 0.0 + day_open: 0.0 + name: OpenERP Presentation + planned_revenue: 0.0 + probability: 0.0 + section_id: crm.section_sales_department +- + I open the lead. +- + !python {model: crm.lead}: | + self.case_open(cr, uid, [ref('crm_lead_openerppresentation0')]) +- + I find that this lead can be converted to opportunity. +- + !record {model: crm.lead2opportunity, id: crm_lead2opportunity0}: + name: OpenERP Presentation + probability: 60.0 + planned_revenue: 45000.0 +- + So I convert the lead to opportunity. +- + !python {model: crm.lead2opportunity}: | + self.action_apply(cr, uid, [ref('crm_lead2opportunity0')], context={'active_id': ref('crm_lead_openerppresentation0')}) +- + I check that lead is now converted to opportunity. +- + !python {model: crm.lead}: | + lead = self.browse(cr, uid, ref('crm_lead_openerppresentation0')) + assert lead.type == 'opportunity', 'Lead is not converted to opportunity!' +- + I mark this opportunity as lost. +- + !python {model: crm.lead}: | + self.case_mark_lost(cr, uid, [ref('crm_lead_openerppresentation0')]) +- + Now I check whether the probability is set according to stage change or not. +- + !python {model: crm.lead}: | + opportunity = self.browse(cr, uid, ref('crm_lead_openerppresentation0')) + assert opportunity.stage_id.id == ref('crm.stage_opportunity6'), 'Stage is not changed!' + assert opportunity.probability == 0.0, 'Probability is wrong!' +- + I create one more opportunity. +- + !record {model: crm.lead, id: crm_lead_partnerdemo0}: + categ_id: crm.categ_oppor3 + day_close: 0.0 + day_open: 0.0 + name: Partner Demo + planned_revenue: 50000.0 + probability: 70.0 + section_id: crm.section_sales_department + type: opportunity +- + I open this opportunity. +- + !python {model: crm.lead}: | + self.case_open(cr, uid, [ref('crm_lead_partnerdemo0')]) +- + I mark this opportunity as won. +- + !python {model: crm.lead}: | + self.case_close(cr, uid, [ref('crm_lead_partnerdemo0')]) +- + I check whether the stage is changed to 'Won' and probability is 100.0 or not. +- + !python {model: crm.lead}: | + opportunity = self.browse(cr, uid, ref('crm_lead_partnerdemo0')) + assert opportunity.stage_id.id == ref('crm.stage_opportunity5'), 'Stage is not changed!' + assert opportunity.probability == 100.0, 'Probability is wrong!' diff --git a/addons/project/project.py b/addons/project/project.py index a1f93e51980..43b6e4e8be8 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -127,7 +127,6 @@ class project(osv.osv): 'warn_manager': fields.boolean('Warn Manager', help="If you check this field, the project manager will receive a request each time a task is completed by his team.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}), 'members': fields.many2many('res.users', 'project_user_rel', 'project_id', 'uid', 'Project Members', help="Project's member. Not used in any computation, just for information purpose, but a user has to be member of a project to add a the to this project.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}), - 'parent_id': fields.many2one('project.project', 'Parent Project'), 'tasks': fields.one2many('project.task', 'project_id', "Project tasks"), 'planned_hours': fields.function(_progress_rate, multi="progress", method=True, string='Planned Time', help="Sum of planned hours of all tasks related to this project and its child projects.", store = {