diff --git a/addons/crm/crm.py b/addons/crm/crm.py index fdcd7a1a52a..7f0fb344492 100644 --- a/addons/crm/crm.py +++ b/addons/crm/crm.py @@ -258,25 +258,19 @@ class crm_base(object): data.update(self.onchange_partner_address_id(cr, uid, ids, addr['contact'])['value']) return {'value': data} - def _case_opportunity_meeting_notification(self, cr, uid, ids, context=None): + def case_open_send_note(self, cr, uid, ids, context=None): return True - def _case_open_notification(self, case, context=None): + def case_close_send_note(self, cr, uid, ids, context=None): return True - def _case_close_notification(self, case, context=None): + def case_cancel_send_note(self, cr, uid, ids, context=None): return True - def _case_cancel_notification(self, case, context=None): + def case_pending_send_note(self, cr, uid, ids, context=None): return True - def _case_pending_notification(self, case, context=None): - return True - - def _case_escalate_notification(self, case, context=None): - return True - - def _case_phonecall_notification(self, case, action, context=None): + def case_reset_send_note(self, cr, uid, ids, context=None): return True def case_open(self, cr, uid, ids, context=None): @@ -289,7 +283,7 @@ class crm_base(object): if not case.user_id: data['user_id'] = uid self.write(cr, uid, [case.id], data) - self._case_open_notification(case, context=context) + self.case_open_send_note(cr, uid, [case.id], context=context) self._action(cr, uid, cases, 'open') return True @@ -302,7 +296,7 @@ class crm_base(object): cases[0].state # to fill the browse record cache self.write(cr, uid, ids, {'state': 'done', 'date_closed': time.strftime('%Y-%m-%d %H:%M:%S'), }) # We use the cache of cases to keep the old case state - self._case_close_notification(cases, context=context) + self.case_close_send_note(cr, uid, ids, context=context) self._action(cr, uid, cases, 'done') return True @@ -314,7 +308,7 @@ class crm_base(object): cases[0].state # to fill the browse record cache self.write(cr, uid, ids, {'state': 'cancel', 'active': True}) # We use the cache of cases to keep the old case state - self._case_cancel_notification(cases, context=context) + self.case_cancel_send_note(cr, uid, ids, context=context) self._action(cr, uid, cases, 'cancel') return True @@ -325,7 +319,7 @@ class crm_base(object): cases = self.browse(cr, uid, ids) cases[0].state # to fill the browse record cache self.write(cr, uid, ids, {'state': 'pending', 'active': True}) - self._case_pending_notification(cases, context=context) + self.case_pending_send_note(cr, uid, ids, context=context) self._action(cr, uid, cases, 'pending') return True @@ -336,6 +330,7 @@ class crm_base(object): cases = self.browse(cr, uid, ids) cases[0].state # to fill the browse record cache self.write(cr, uid, ids, {'state': 'draft', 'active': True}) + self.case_reset_send_note(cr, uid, ids, context=context) self._action(cr, uid, cases, 'draft') return True @@ -414,6 +409,9 @@ class crm_case(crm_base): default.update({ 'date_open': False }) return super(crm_case, self).copy(cr, uid, id, default, context=context) + def case_escalate_send_note(self, cr, uid, ids, context=None): + return True + def case_open(self, cr, uid, ids, context=None): """Opens Case""" cases = self.browse(cr, uid, ids) @@ -422,7 +420,7 @@ class crm_case(crm_base): if not case.user_id: data['user_id'] = uid self.write(cr, uid, [case.id], data) - self._case_open_notification(case, context=context) + self.case_open_send_note(cr, uid, [case.id], context=context) self._action(cr, uid, cases, 'open') return True @@ -436,7 +434,7 @@ class crm_case(crm_base): # # We use the cache of cases to keep the old case state # - self._case_close_notification(cases, context=context) + self.case_close_send_note(cr, uid, ids, context=context) self._action(cr, uid, cases, 'done') return True @@ -454,7 +452,7 @@ class crm_case(crm_base): raise osv.except_osv(_('Error !'), _('You can not escalate, you are already at the top level regarding your sales-team category.')) self.write(cr, uid, [case.id], data) cases = self.browse(cr, uid, ids) - self._case_escalate_notification(cases, context=context) + self.case_escalate_send_note(cr, uid, ids, context=context) self._action(cr, uid, cases, 'escalate') return True @@ -464,7 +462,7 @@ class crm_case(crm_base): cases[0].state # to fill the browse record cache self.write(cr, uid, ids, {'state': 'cancel', 'active': True}) - self._case_cancel_notification(cases, context=context) + self.case_cancel_send_note(cr, uid, ids, context=context) self._action(cr, uid, cases, 'cancel') return True @@ -473,7 +471,7 @@ class crm_case(crm_base): cases = self.browse(cr, uid, ids) cases[0].state # to fill the browse record cache self.write(cr, uid, ids, {'state': 'pending', 'active': True}) - self._case_pending_notification(cases, context=context) + self.case_pending_send_note(cr, uid, ids, context=context) self._action(cr, uid, cases, 'pending') return True diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index 18f746880ca..a8ec106e6de 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -226,7 +226,7 @@ class crm_lead(crm_case, osv.osv): def create(self, cr, uid, vals, context=None): obj_id = super(crm_lead, self).create(cr, uid, vals, context) - self._case_create_notification(cr, uid, [obj_id], context=context) + self.case_create_send_note(cr, uid, [obj_id], context=context) return obj_id @@ -271,78 +271,82 @@ class crm_lead(crm_case, osv.osv): def stage_find_won(self, cr, uid, section_id): return self.stage_find_percent(cr, uid, 100.0, section_id) - def _case_create_notification(self, cr, uid, ids, context=None): + def get_needaction_user_id(self, cr, uid, ids, name, arg, context=None): + result = {} for obj in self.browse(cr, uid, ids, context=context): - self.message_subscribe(cr, uid, ids, [obj.user_id.id], context=context) - if obj.type=="opportunity" and obj.state=="draft": - message = _("Opportunity is created.") - elif obj.type=="lead" : - message = _("Lead is created.") - else: - message = _("The case has been created.") - self.message_append_note(cr, uid, ids, _('System notification'), - message, type='notification', need_action_user_id=obj.user_id.id, context=context) + result[obj.id] = False + if (obj.state == 'draft' and obj.user_id): + result[obj.id] = obj.user_id.id + return result + + def case_reset_send_note(self, cr, uid, ids, context=None): + for lead in self.browse(cr, uid, ids, context=context): + message = _("%s has been renewed.") % ('Opportunity' if lead.type == 'opportunity' else 'Lead') + lead.message_append_note('' ,message) return True - def _case_open_notification(self, lead, context=None): - if lead.state != 'draft' and lead.state != 'pending': - return False - if lead.type == 'lead': - message = _("The lead has been opened.") - elif lead.type == 'opportunity': - message = _("The opportunity has been opened.") - else: - message = _("The case has been opened.") - lead.message_append_note('' ,message, need_action_user_id=lead.user_id.id) + def case_create_send_note(self, cr, uid, ids, context=None): + for lead in self.browse(cr, uid, ids, context=context): + self.message_subscribe(cr, uid, ids, [lead.user_id.id], context=context) + message = _("%s has been created.") % ('Opportunity' if lead.type == 'opportunity' and lead.state == 'draft' else 'Lead') + self.message_append_note(cr, uid, ids, _('System notification'), + message, type='notification', context=context) + return True - def _case_close_notification(self, lead, context=None): - lead[0].message_mark_done(context) - if lead[0].type == 'lead': - message = _("The lead has been closed.") - elif lead[0].type == 'opportunity': - message = _("The opportunity has been closed.") - else: - message = _("The case has been closed.") - lead[0].message_append_note('' ,message) + def case_open_send_note(self, cr, uid, ids, context=None): + for lead in self.browse(cr, uid, ids, context=context): + if lead.state == 'draft' and lead.state == 'pending': + return False + message = _("%s has been opened.") % ('Opportunity' if lead.type == 'opportunity' else 'Lead') + lead.message_append_note('' ,message) + return True - def _case_mark_lost_notification(self, lead, context=None): - lead.message_mark_done(context) - message = _("The opportunity has been marked as lost.") - lead.message_append_note('' ,message) + def case_close_send_note(self, cr, uid, ids, context=None): + for lead in self.browse(cr, uid, ids, context=context): + message = _("%s has been closed.") % ('Opportunity' if lead.type == 'opportunity' else 'Lead') + lead.message_append_note('' ,message) + return True - def _case_mark_won_notification(self, lead, context=None): - lead.message_mark_done(context) - message = _("The opportunity has been won.") - lead.message_append_note('' ,message) + def case_mark_lost_send_note(self, cr, uid, ids, context=None): + for opportunity in self.browse(cr, uid, ids, context=context): + message = _("Opportunity has been marked as lost.") + opportunity.message_append_note('' ,message) + return True - def _case_cancel_notification(self, lead, context=None): - lead[0].message_mark_done(context) - if lead[0].type == 'lead': - message = _("The lead has been cancelled.") - elif lead[0].type == 'opportunity': - message = _("The opportunity has been cancelled.") - lead[0].message_append_note('' ,message) + def case_mark_won_send_note(self, cr, uid, ids, context=None): + for opportunity in self.browse(cr, uid, ids, context=context): + message = _("Opportunity has been won.") + opportunity.message_append_note('' ,message) + return True - def _case_pending_notification(self, case, context=None): - if case[0].type == 'lead': - message = _("The lead is pending.") - elif case[0].type == 'opportunity': - message = _("The opportunity is pending.") - case[0].message_append_note('' ,message) + def case_cancel_send_note(self, cr, uid, ids, context=None): + for lead in self.browse(cr, uid, ids, context=context): + message = _("%s has been cancelled.") % ('Opportunity' if lead.type == 'opportunity' else 'Lead') + lead.message_append_note('' ,message) + return True - def _case_escalate_notification(self, case, context=None): - message = _("The lead is escalated.") - case.message_append_note('' ,message) + def case_pending_send_note(self, cr, uid, ids, context=None): + for lead in self.browse(cr, uid, ids, context=context): + message = _("%s is pending.") % ('Opportunity' if lead.type == 'opportunity' else 'Lead') + lead.message_append_note('' ,message) + return True - def _case_phonecall_notification(self, cr, uid, ids, case, phonecall, action, context=None): + def case_escalate_send_note(self, cr, uid, ids, context=None): + for lead in self.browse(cr, uid, ids, context=context): + message = _("Lead has been escalated.") + lead.message_append_note('' ,message) + return True + + def case_phonecall_send_note(self, cr, uid, ids, case, phonecall, action, context=None): for obj in phonecall.browse(cr, uid, ids, context=context): - if action == "schedule" : - message = _("%s a call for the %s.") % (action, obj.date) - else : - message = _("%s a call.") % (action) + message = _("%s a call for the %s.") % (action, obj.date) case.message_append_note('', message) - if action == "schedule" : - phonecall.message_append_note(cr, uid, ids, '', message, need_action_user_id=obj.user_id.id) + + def case_partner_send_note(self, cr, uid, ids, context=None): + for lead in self.browse(cr, uid, ids, context=context): + message = _("Partner has been created") + lead.message_append_note('' ,message) + return True def case_open(self, cr, uid, ids, context=None): res = super(crm_lead, self).case_open(cr, uid, ids, context) @@ -372,6 +376,7 @@ class crm_lead(crm_case, osv.osv): """ res = super(crm_lead, self).case_reset(cr, uid, ids, context) self.write(cr, uid, ids, {'stage_id': False, 'probability': 0.0}) + self.case_reset_send_note(cr, uid, ids, context=context) return res def case_mark_lost(self, cr, uid, ids, context=None): @@ -394,7 +399,7 @@ class crm_lead(crm_case, osv.osv): stage_id = self.stage_find_won(cr, uid, lead.section_id.id or False) if stage_id: self.stage_set(cr, uid, [lead.id], stage_id) - self._case_mark_won_notification(lead, context=context) + self.case_mark_won_send_note(cr, uid, [lead.id], context=context) return res def set_priority(self, cr, uid, ids, priority): @@ -500,7 +505,7 @@ class crm_lead(crm_case, osv.osv): subject = subject[0] + ", ".join(subject[1:]) details = "\n\n".join(details) - return opportunity.message_append_note(subject, body=details, need_action_user_id=opportunity.user_id.id) + return opportunity.message_append_note(subject, body=details) def _merge_opportunity_history(self, cr, uid, opportunity_id, opportunities, context=None): message = self.pool.get('mail.message') @@ -609,9 +614,9 @@ class crm_lead(crm_case, osv.osv): 'partner_address_id': contact_id, } - def _convert_opportunity_notification(self, cr, uid, lead, context=None): - success_message = _("Lead is converted to an opportunity.") - lead.message_append_note(success_message ,success_message, need_action_user_id=lead.user_id.id) + def convert_opportunity_send_note(self, cr, uid, lead, context=None): + message = _("Lead has been converted to an opportunity.") + lead.message_append_note('' ,message) return True def convert_opportunity(self, cr, uid, ids, partner_id, user_ids=False, section_id=False, context=None): @@ -629,7 +634,7 @@ class crm_lead(crm_case, osv.osv): vals = self._convert_opportunity_data(cr, uid, lead, customer, section_id, context=context) self.write(cr, uid, [lead.id], vals, context=context) - self._convert_opportunity_notification(cr, uid, lead, context=context) + self.convert_opportunity_send_note(cr, uid, lead, context=context) #TOCHECK: why need to change partner details in all messages of lead ? if lead.partner_id: msg_ids = [ x.id for x in lead.message_ids] @@ -656,7 +661,7 @@ class crm_lead(crm_case, osv.osv): res_partner.write(cr, uid, partner_id, {'section_id': lead.section_id.id or False}) contact_id = res_partner.address_get(cr, uid, [partner_id])['default'] res = lead.write({'partner_id' : partner_id, 'partner_address_id': contact_id}, context=context) - + self.case_partner_send_note(cr, uid, [lead.id], context) return res def _lead_create_partner_address(self, cr, uid, lead, partner_id, context=None): @@ -757,13 +762,12 @@ class crm_lead(crm_case, osv.osv): 'partner_mobile' : lead.partner_address_id and lead.partner_address_id.mobile or False, 'priority': lead.priority, } - new_id = phonecall.create(cr, uid, vals, context=context) phonecall.case_open(cr, uid, [new_id]) if action == 'log': phonecall.case_close(cr, uid, [new_id]) phonecall_dict[lead.id] = new_id - self._case_phonecall_notification(cr, uid, [new_id], lead, phonecall, action, context=context) + self.case_phonecall_send_note(cr, uid, [new_id], lead, phonecall, action, context=context) return phonecall_dict @@ -905,16 +909,9 @@ class crm_lead(crm_case, osv.osv): # change probability of lead(s) if required by stage if not vals.get('probability') and stage.on_change: vals['probability'] = stage.probability - text = _("Changed Stage to: %s") % stage.name - for case in self.browse(cr, uid, ids, context=context): - if case.type == 'lead' or context.get('stage_type') == 'lead': - message = _("The stage of lead has been changed to %s.") % (stage.name) - case.message_append_note(text, message) - elif case.type == 'opportunity': - message = _("The stage of opportunity has been changed to %s.") % (stage.name) - case.message_append_note(text, message) - + message = _("Stage changed to %s.") % (stage.name) + case.message_append_note('', message) return super(crm_lead,self).write(cr, uid, ids, vals, context) crm_lead() diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml index 185f9f55ef8..98e1ee2f6b5 100644 --- a/addons/crm/crm_lead_view.xml +++ b/addons/crm/crm_lead_view.xml @@ -77,9 +77,10 @@ icon="gtk-go-forward" context="{'stage_type': 'lead'}" /> +