From 709a97761aac55a3102c2b0e68722cc995442e99 Mon Sep 17 00:00:00 2001 From: "RGA(OpenERP)" <> Date: Mon, 19 Mar 2012 16:08:23 +0530 Subject: [PATCH 1/2] [IMP] Added chatter notification for account invoice bzr revid: rgaopenerp-20120319103823-rg7euc8iw260m21h --- addons/account/account_invoice.py | 56 +++++++++++++++++---- addons/account/account_invoice_view.xml | 2 + addons/account/account_invoice_workflow.xml | 2 +- 3 files changed, 49 insertions(+), 11 deletions(-) diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index 5e5ac5f482b..569abbd32ed 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -178,6 +178,7 @@ class account_invoice(osv.osv): return invoice_ids _name = "account.invoice" + _inherit = "mail.thread" _description = 'Invoice' _order = "id desc" @@ -357,12 +358,8 @@ class account_invoice(osv.osv): context = {} try: res = super(account_invoice, self).create(cr, uid, vals, context) - for inv_id, name in self.name_get(cr, uid, [res], context=context): - ctx = context.copy() - if vals.get('type', 'in_invoice') in ('out_invoice', 'out_refund'): - ctx = self.get_log_context(cr, uid, context=ctx) - message = _("Invoice '%s' is waiting for validation.") % name - self.log(cr, uid, inv_id, message, context=ctx) + if res: + self.create_send_note(cr, uid, [res], context=context) return res except Exception, e: if '"journal_id" viol' in e.args[0]: @@ -375,9 +372,7 @@ class account_invoice(osv.osv): if context is None: context = {} self.write(cr, uid, ids, {'state':'paid'}, context=context) - for inv_id, name in self.name_get(cr, uid, ids, context=context): - message = _("Invoice '%s' is paid.") % name - self.log(cr, uid, inv_id, message) + self.invoice_paid_send_note(cr, uid, ids, context=context) return True def unlink(self, cr, uid, ids, context=None): @@ -949,6 +944,11 @@ class account_invoice(osv.osv): move_obj.post(cr, uid, [move_id], context=ctx) self._log_event(cr, uid, ids) return True + + def invoice_validate(self, cr, uid, ids, context=None): + self.write(cr, uid, ids, {'state':'open'}, context=context) + self.invoice_validate_send_note(cr, uid, ids, context=context) + return True def line_get_convert(self, cr, uid, x, part, date, context=None): return { @@ -1039,6 +1039,7 @@ class account_invoice(osv.osv): # will be automatically deleted too account_move_obj.unlink(cr, uid, move_ids, context=context) self._log_event(cr, uid, ids, -1.0, 'Cancel Invoice') + self.invoice_cancel_send_note(cr, uid, ids, context=context) return True ################### @@ -1246,7 +1247,42 @@ class account_invoice(osv.osv): # Update the stored value (fields.function), so we write to trigger recompute self.pool.get('account.invoice').write(cr, uid, ids, {}, context=context) return True - + # ----------------------------- + # OpenChatter and notifications + # ----------------------------- + def _get_document_type(self, type): + type_dict = { + 'out_invoice': 'Customer invoice', + 'in_invoice': 'Supplier invoice', + 'out_refund': 'Customer Refund', + 'in_refund': 'Supplier Refund', + } + return type_dict[type] + + def create_send_note(self, cr, uid, ids, context=None): + for obj in self.browse(cr, uid, ids, context=context): + self.message_append_note(cr, uid, [obj.id], _('System notification'), + _("""%s created.""") % (self._get_document_type(obj.type)), + type='notification', context=context) + + def invoice_validate_send_note(self, cr, uid, ids, context=None): + for obj in self.browse(cr, uid, ids, context=context): + self.message_append_note(cr, uid, [obj.id], _('System notification'), + _("""%s validated.""") % (self._get_document_type(obj.type)), + type='notification', context=context) + + def invoice_paid_send_note(self, cr, uid, ids, context=None): + for obj in self.browse(cr, uid, ids, context=context): + self.message_append_note(cr, uid, [obj.id], _('System notification'), + _("""%s paid.""") % (self._get_document_type(obj.type)), + type='notification', context=context) + + def invoice_cancel_send_note(self, cr, uid, ids, context=None): + for obj in self.browse(cr, uid, ids, context=context): + self.message_append_note(cr, uid, [obj.id], _('System notification'), + _("""%s cancelled.""") % (self._get_document_type(obj.type)), + type='notification', context=context) + account_invoice() class account_invoice_line(osv.osv): diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml index 59977c252f9..b3144816795 100644 --- a/addons/account/account_invoice_view.xml +++ b/addons/account/account_invoice_view.xml @@ -245,6 +245,7 @@ + @@ -343,6 +344,7 @@ + diff --git a/addons/account/account_invoice_workflow.xml b/addons/account/account_invoice_workflow.xml index 2af1e192a9b..13db193af8d 100644 --- a/addons/account/account_invoice_workflow.xml +++ b/addons/account/account_invoice_workflow.xml @@ -27,7 +27,7 @@ action_date_assign() action_move_create() action_number() -write({'state':'open'}) +invoice_validate() function From 3a5ce2a3120f453d5fcb7c5cc6605e1ccd91b2dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 20 Mar 2012 15:45:48 +0100 Subject: [PATCH 2/2] [IMP] Minor tweak: protected a dictionary access with dict.get bzr revid: tde@openerp.com-20120320144548-coumjq28pn7ce4zg --- addons/account/account_invoice.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index 569abbd32ed..7c4bd88e3c5 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -1247,9 +1247,11 @@ class account_invoice(osv.osv): # Update the stored value (fields.function), so we write to trigger recompute self.pool.get('account.invoice').write(cr, uid, ids, {}, context=context) return True - # ----------------------------- - # OpenChatter and notifications - # ----------------------------- + + # ----------------------------------------- + # OpenChatter notifications and need_action + # ----------------------------------------- + def _get_document_type(self, type): type_dict = { 'out_invoice': 'Customer invoice', @@ -1257,7 +1259,7 @@ class account_invoice(osv.osv): 'out_refund': 'Customer Refund', 'in_refund': 'Supplier Refund', } - return type_dict[type] + return type_dict.get(type, 'Invoice') def create_send_note(self, cr, uid, ids, context=None): for obj in self.browse(cr, uid, ids, context=context):