From b03e5f9034430dde015ad3511f6e4acff4b61936 Mon Sep 17 00:00:00 2001 From: Stephane Wirtel Date: Fri, 22 Apr 2011 10:54:46 +0200 Subject: [PATCH] [IMP] Add a cron for the analytic accounts, this cron will send an email to the responsible of the pending accounts bzr revid: stephane@openerp.com-20110422085446-r744ot300i6qwksv --- addons/account_analytic_analysis/__init__.py | 1 + .../account_analytic_analysis/__openerp__.py | 1 + .../account_analytic_analysis.py | 20 ++++- .../account_analytic_analysis_cron.xml | 15 ++++ .../account_analytic_analysis_menu.xml | 58 ++++++++++++++ .../cron_account_analytic_account.py | 79 +++++++++++++++++++ 6 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 addons/account_analytic_analysis/account_analytic_analysis_cron.xml create mode 100644 addons/account_analytic_analysis/cron_account_analytic_account.py diff --git a/addons/account_analytic_analysis/__init__.py b/addons/account_analytic_analysis/__init__.py index a7bdb11ad67..429aa011f31 100644 --- a/addons/account_analytic_analysis/__init__.py +++ b/addons/account_analytic_analysis/__init__.py @@ -20,6 +20,7 @@ ############################################################################## import account_analytic_analysis +import cron_account_analytic_account # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_analytic_analysis/__openerp__.py b/addons/account_analytic_analysis/__openerp__.py index 588055b3741..f5dea6e77e0 100644 --- a/addons/account_analytic_analysis/__openerp__.py +++ b/addons/account_analytic_analysis/__openerp__.py @@ -41,6 +41,7 @@ user-wise as well as month wise. "security/ir.model.access.csv", "account_analytic_analysis_view.xml", "account_analytic_analysis_menu.xml", + "account_analytic_analysis_cron.xml", ], 'demo_xml' : [], 'installable': True, diff --git a/addons/account_analytic_analysis/account_analytic_analysis.py b/addons/account_analytic_analysis/account_analytic_analysis.py index 11f92614b73..03dea210396 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis.py +++ b/addons/account_analytic_analysis/account_analytic_analysis.py @@ -374,7 +374,25 @@ class account_analytic_account(osv.osv): res[id] = round(res.get(id, 0.0),2) return res - _columns ={ + def _is_overdue_quantity(self, cr, uid, ids, fieldnames, args, context=None): + result = dict.fromkeys(ids, 0) + + for record in self.browse(cr, uid, ids, context=context): + result[record.id] = int(record.quantity >= record.quantity_max) + + return result + + def _get_analytic_account(self, cr, uid, ids, context=None): + result = set() + for line in self.pool.get('account.analytic.line').browse(cr, uid, ids, context=context): + result.add(line.account_id.id) + return list(result) + + _columns = { + 'is_overdue_quantity' : fields.function(_is_overdue_quantity, method=True, type='boolean', string='Overdue Quantity', + store={ + 'account.analytic.line' : (_get_analytic_account, None, 20), + }), 'ca_invoiced': fields.function(_ca_invoiced_calc, method=True, type='float', string='Invoiced Amount', help="Total customer invoiced amount for this account.", digits_compute=dp.get_precision('Account')), diff --git a/addons/account_analytic_analysis/account_analytic_analysis_cron.xml b/addons/account_analytic_analysis/account_analytic_analysis_cron.xml new file mode 100644 index 00000000000..7134d59414b --- /dev/null +++ b/addons/account_analytic_analysis/account_analytic_analysis_cron.xml @@ -0,0 +1,15 @@ + + + + + Analytic Account Report for Sales + 1 + weeks + -1 + + + + + + + diff --git a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml index badd7e1816a..a564db17dfc 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml +++ b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml @@ -21,5 +21,63 @@ [('date','<=',time.strftime('%Y-%m-%d')),('state','=','open')] + + + account.analytic.account.search + account.analytic.account + search + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Overdue Accounts + account.analytic.account + form + tree,form,graph + {'search_default_has_partner' : 1, 'search_default_current' : 1} + + + + + diff --git a/addons/account_analytic_analysis/cron_account_analytic_account.py b/addons/account_analytic_analysis/cron_account_analytic_account.py new file mode 100644 index 00000000000..2bc8e0f98b1 --- /dev/null +++ b/addons/account_analytic_analysis/cron_account_analytic_account.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python +from osv import osv +from mako.template import Template +import time +try: + import cStringIO as StringIO +except ImportError: + import StringIO + +import tools + +MAKO_TEMPLATE = u"""Hello ${user.name}, + +Here is a list of contracts that have to be renewed for two +possible reasons: + - the end of contract date is passed + - the customer consumed more support hours than expected + +Can you contact the customer in order to sell a new or renew its contract. +the contract has been set with a pending state, can you update the status +of the analytic account following this rule: + - Set Done: if the customer does not want to renew + - Set Open: if the customer purchased an extra contract + +Here is the list of contracts to renew: +% for partner, accounts in partners.iteritems(): + * ${partner.name} + % for account in accounts: + - Name: ${account.name} + % if account.quantity_max != 0.0: + - Quantity: ${account.quantity}/${account.quantity_max} hours + % endif + - Dates: ${account.date_start} to ${account.date and account.date or '???'} + - Contacts: + % for address in account.partner_id.address: + . ${address.name}, ${address.phone}, ${address.email} + % endfor + + % endfor +% endfor + +You can use the report in the menu: Sales > Invoicing > Overdue Accounts + +Regards, + +-- +OpenERP +""" + +class analytic_account(osv.osv): + _inherit = 'account.analytic.account' + + def cron_account_analytic_account(self, cr, uid, context=None): + domain = [ + ('name', 'not ilike', 'maintenance'), + ('partner_id', '!=', False), + ('user_id', '!=', False), + ('user_id.user_email', '!=', False), + ('state', 'in', ('draft', 'open')), + '|', ('date', '<', time.strftime('%Y-%m-%d')), ('date', '=', False), + ] + + account_ids = self.search(cr, uid, domain, context=context, order='name asc') + accounts = self.browse(cr, uid, account_ids, context=context) + + users = dict() + for account in accounts: + users.setdefault(account.user_id, dict()).setdefault(account.partner_id, []).append(account) + + account.write({'state' : 'pending'}, context=context) + + for user, data in users.iteritems(): + subject = '[OPENERP] Reporting: Analytic Accounts' + body = Template(MAKO_TEMPLATE).render_unicode(user=user, partners=data) + tools.email_send('noreply@openerp.com', [user.user_email, ], subject, body) + + return True + +analytic_account()