diff --git a/addons/crm/crm.py b/addons/crm/crm.py index fdcd7a1a52a..4f2d2a120d8 100644 --- a/addons/crm/crm.py +++ b/addons/crm/crm.py @@ -273,6 +273,9 @@ class crm_base(object): def _case_pending_notification(self, case, context=None): return True + def _case_reset_notification(self, case, context=None): + return True + def _case_escalate_notification(self, case, context=None): return True @@ -336,6 +339,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_notification(cases, context=context) self._action(cr, uid, cases, 'draft') return True @@ -485,6 +489,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': state, 'active': True}) + self._case_reset_notification(cases, context=context); self._action(cr, uid, cases, state) return True diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index 50aa8dfff06..ed9cce87a8e 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -334,6 +334,13 @@ class crm_lead(crm_case, osv.osv): message = _("The lead is escalated.") case.message_append_note('' ,message) + def _case_reset_notification(self, case, context=None): + if case[0].type == 'lead': + message = _("The lead is renewed.") + elif case[0].type == 'opportunity': + message = _("The opportunity is renewed.") + case[0].message_append_note('' ,message, need_action_user_id=case[0].user_id.id) + def _case_phonecall_notification(self, cr, uid, ids, case, phonecall, action, context=None): for obj in phonecall.browse(cr, uid, ids, context=context): if action == "schedule" : diff --git a/addons/crm/crm_meeting.py b/addons/crm/crm_meeting.py index 5ba93d526af..10635d66a6c 100644 --- a/addons/crm/crm_meeting.py +++ b/addons/crm/crm_meeting.py @@ -42,7 +42,7 @@ class crm_meeting(crm_base, osv.osv): _name = 'crm.meeting' _description = "Meeting" _order = "id desc" - _inherit = "calendar.event" + _inherit = ["calendar.event","mail.thread"] _columns = { # From crm.case 'name': fields.char('Summary', size=124, required=True, states={'done': [('readonly', True)]}), @@ -87,15 +87,37 @@ class crm_meeting(crm_base, osv.osv): def _case_opportunity_meeting_notification(self, cr, uid, ids, context=None): lead_obj = self.pool.get('crm.lead') - + phonecall_obj = self.pool.get('crm.phonecall') for obj in self.browse(cr, uid, ids, context=context): if(obj.opportunity_id.id): newid = obj.opportunity_id.id - message = _("scheduled for meeting %s.") % (obj.date) + message = _("scheduled meeting on %s for opportunity.") % (obj.date) for lead in lead_obj.browse(cr, uid, [newid], context=context): lead.message_append_note('', message) + obj.message_append_note('', message, need_action_user_id=lead.user_id.id) + elif(obj.phonecall_id.id): + newid = obj.phonecall_id.id + message = _("scheduled meeting on %s for phonecall.") % (obj.date) + for phonecall in phonecall_obj.browse(cr, uid, [newid], context=context): + phonecall.message_append_note('', message) + obj.message_append_note('', message, need_action_user_id=phonecall.user_id.id) - def case_open(self, cr, uid, ids, *args): + def _case_close_notification(self, meeting, context=None): + meeting[0].message_mark_done(context) + message = _("The meeting is done.") + meeting[0].message_append_note('' ,message) + + def _case_reset_notification(self, meeting, context=None): + message = _("The meeting is unconfirmed.") + meeting[0].message_append_note('' ,message) + + def _case_open_notification(self, meeting, context=None): + if meeting.state != 'draft': + return False + message = _("The meeting has been confirmed.") + meeting.message_append_note('' ,message, need_action_user_id=meeting.user_id.id) + + def case_open(self, cr, uid, ids, context=None): """Confirms meeting @param self: The object pointer @param cr: the current row, from the database cursor, @@ -103,11 +125,9 @@ class crm_meeting(crm_base, osv.osv): @param ids: List of Meeting Ids @param *args: Tuple Value for additional Params """ - res = super(crm_meeting, self).case_open(cr, uid, ids, args) + res = super(crm_meeting, self).case_open(cr, uid, ids, context) for (id, name) in self.name_get(cr, uid, ids): - message = _("The meeting '%s' has been confirmed.") % name id=base_calendar.base_calendar_id2real_id(id) - self.log(cr, uid, id, message) return res crm_meeting() diff --git a/addons/crm/crm_meeting_view.xml b/addons/crm/crm_meeting_view.xml index 527f5814be4..cd0b6240d41 100644 --- a/addons/crm/crm_meeting_view.xml +++ b/addons/crm/crm_meeting_view.xml @@ -216,6 +216,7 @@ + diff --git a/addons/crm/crm_phonecall.py b/addons/crm/crm_phonecall.py index 4063157aed9..d7d52120652 100644 --- a/addons/crm/crm_phonecall.py +++ b/addons/crm/crm_phonecall.py @@ -80,6 +80,7 @@ class crm_phonecall(crm_base, osv.osv): def create(self, cr, uid, vals, context=None): obj_id = super(crm_phonecall, self).create(cr, uid, vals, context=context) + self.open_notification(cr, uid, [obj_id], context) return obj_id def _get_default_state(self, cr, uid, context=None): @@ -94,6 +95,29 @@ class crm_phonecall(crm_base, osv.osv): 'user_id': lambda self,cr,uid,ctx: uid, 'active': 1, } + def _case_cancel_notification(self, phonecall, context=None): + phonecall[0].message_mark_done(context) + message = _("The Phonecall is cancelled.") + phonecall[0].message_append_note( _('System notification'), + message, type='notification', context=context) + + def _case_pending_notification(self, phonecall, context=None): + message = _("The Phonecall is pending.") + phonecall[0].message_append_note('' ,message) + + def done_notification(self, cr, uid, ids, context=None): + for phonecall in self.browse(cr, uid, ids): + phonecall.message_mark_done(context) + message = _("The Phonecall is done.") + self.message_append_note(cr, uid, [phonecall.id], _('System notification'), + message, type='notification', context=context) + + def open_notification(self, cr, uid, ids, context=None): + for phonecall in self.browse(cr, uid, ids): + self.message_subscribe(cr, uid, ids, [phonecall.user_id.id], context=context) + message = _("The Phonecall is open.") + self.message_append_note(cr, uid, [phonecall.id], _('System notification'),message, + type='notification', need_action_user_id=phonecall.user_id.id, context=context) # From crm.case def onchange_partner_address_id(self, cr, uid, ids, add, email=False): @@ -105,7 +129,7 @@ class crm_phonecall(crm_base, osv.osv): res['value']['partner_mobile'] = address.mobile return res - def case_close(self, cr, uid, ids, *args): + def case_close(self, cr, uid, ids, context=None): """Overrides close for crm_case for setting close date """ res = True @@ -115,23 +139,26 @@ class crm_phonecall(crm_base, osv.osv): if phone.duration <=0: duration = datetime.now() - datetime.strptime(phone.date, '%Y-%m-%d %H:%M:%S') data.update({'duration': duration.seconds/float(60)}) - res = super(crm_phonecall, self).case_close(cr, uid, [phone_id], args) + res = super(crm_phonecall, self).case_close(cr, uid, [phone_id], context) self.write(cr, uid, [phone_id], data) + self.done_notification(cr, uid, [phone_id], context); return res - def case_reset(self, cr, uid, ids, *args): + def case_reset(self, cr, uid, ids, context=None): """Resets case as Todo """ - res = super(crm_phonecall, self).case_reset(cr, uid, ids, args) + res = super(crm_phonecall, self).case_reset(cr, uid, ids, context) self.write(cr, uid, ids, {'duration': 0.0, 'state':'open'}) + self.open_notification(cr, uid, ids, context) return res - def case_open(self, cr, uid, ids, *args): + def case_open(self, cr, uid, ids, context=None): """Overrides cancel for crm_case for setting Open Date """ - res = super(crm_phonecall, self).case_open(cr, uid, ids, *args) + res = super(crm_phonecall, self).case_open(cr, uid, ids, context) self.write(cr, uid, ids, {'date_open': time.strftime('%Y-%m-%d %H:%M:%S')}) + self.open_notification(cr, uid, ids, context) return res def schedule_another_phonecall(self, cr, uid, ids, schedule_time, call_summary, \ diff --git a/addons/crm/crm_phonecall_view.xml b/addons/crm/crm_phonecall_view.xml index 34ef2612623..6bebccdaf6f 100644 --- a/addons/crm/crm_phonecall_view.xml +++ b/addons/crm/crm_phonecall_view.xml @@ -123,6 +123,7 @@ states="cancel" type="object" icon="gtk-convert" /> +