def do_button_print(self, cr, uid, ids, context=None):
assert(len(ids) == 1)
+ company_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id
+ #search if the partner has accounting entries to print. If not, it may not be present in the
+ #psql view the report is based on, so we need to stop the user here.
+ if not self.pool.get('account.move.line').search(cr, uid, [
+ ('partner_id', '=', ids[0]),
+ ('account_id.type', '=', 'receivable'),
+ ('reconcile_id', '=', False),
+ ('state', '!=', 'draft'),
+ ('company_id', '=', company_id),
+ ], context=context):
+ raise osv.except_osv(_('Error!'),_("The partner does not have any accounting entries to print in the overdue report for the current company."))
self.message_post(cr, uid, [ids[0]], body=_('Printed overdue payments report'), context=context)
- data['partner_ids'] = [ids[0] * 10000 + company_id]
- datas = {
- 'ids': [],
- 'model': 'account_followup.followup',
- 'form': data
+ #build the id of this partner in the psql view. Could be replaced by a search with [('company_id', '=', company_id),('partner_id', '=', ids[0])]
+ wizard_partner_ids = [ids[0] * 10000 + company_id]
+ followup_ids = self.pool.get('account_followup.followup').search(cr, uid, [('company_id', '=', company_id)], context=context)
+ if not followup_ids:
+ raise osv.except_osv(_('Error!'),_("There is no followup plan defined for the current company."))
+ data = {
+ 'date': fields.date.today(),
+ 'followup_id': followup_ids[0],
}
- return {
- 'type': 'ir.actions.report.xml',
- 'report_name': 'account_followup.followup.print',
- 'datas': datas,
- }
+ #call the print overdue report on this partner
+ return self.do_partner_print(cr, uid, wizard_partner_ids, data, context=context)
def _get_amounts_and_date(self, cr, uid, ids, name, arg, context=None):
'''
def _get_text(self, stat_line, followup_id, context=None):
if context is None:
context = {}
+ context.update({'lang': stat_line.partner_id.lang})
fp_obj = pooler.get_pool(self.cr.dbname).get('account_followup.followup')
- fp_line = fp_obj.browse(self.cr, self.uid, followup_id).followup_line
+ fp_line = fp_obj.browse(self.cr, self.uid, followup_id, context=context).followup_line
+ if not fp_line:
+ raise osv.except_osv(_('Error!'),_("The followup plan defined for the current company does not have any followup action."))
+ #the default text will be the first fp_line in the sequence with a description.
+ default_text = ''
li_delay = []
for line in fp_line:
+ if not default_text and line.description:
+ default_text = line.description
li_delay.append(line.delay)
li_delay.sort(reverse=True)
- text = ""
a = {}
- partner_line_ids = pooler.get_pool(self.cr.dbname).get('account.move.line').search(self.cr, self.uid, [('partner_id','=',stat_line.partner_id.id),('reconcile_id','=',False),('company_id','=',stat_line.company_id.id),('blocked','=',False)])
- partner_delay = []
- context.update({'lang': stat_line.partner_id.lang})
- for i in pooler.get_pool(self.cr.dbname).get('account.move.line').browse(self.cr, self.uid, partner_line_ids, context):
- for delay in li_delay:
- if i.followup_line_id and str(i.followup_line_id.delay)==str(delay):
- text = i.followup_line_id.description
- a[delay] = text
- partner_delay.append(delay)
- text = partner_delay and a[max(partner_delay)] or ''
+ #look into the lines of the partner that already have a followup level, and take the description of the higher level for which it is available
+ partner_line_ids = pooler.get_pool(self.cr.dbname).get('account.move.line').search(self.cr, self.uid, [('partner_id','=',stat_line.partner_id.id),('reconcile_id','=',False),('company_id','=',stat_line.company_id.id),('blocked','=',False),('state','!=','draft'),('debit','!=',False),('account_id.type','=','receivable'),('followup_line_id','!=',False)])
+ partner_max_delay = 0
+ partner_max_text = ''
+ for i in pooler.get_pool(self.cr.dbname).get('account.move.line').browse(self.cr, self.uid, partner_line_ids, context=context):
+ if i.followup_line_id.delay > partner_max_delay and i.followup_line_id.description:
+ partner_max_delay = i.followup_line_id.delay
+ partner_max_text = i.followup_line_id.description
+ text = partner_max_delay and partner_max_text or default_text
if text:
text = text % {
'partner_name': stat_line.partner_id.name,