[MERGE] merge with main branch
[odoo/odoo.git] / addons / account / report / account_print_overdue.py
1 # -*- coding: utf-8 -*-
2 ##############################################################################
3 #
4 #    OpenERP, Open Source Management Solution
5 #    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
6 #
7 #    This program is free software: you can redistribute it and/or modify
8 #    it under the terms of the GNU Affero General Public License as
9 #    published by the Free Software Foundation, either version 3 of the
10 #    License, or (at your option) any later version.
11 #
12 #    This program is distributed in the hope that it will be useful,
13 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
14 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 #    GNU Affero General Public License for more details.
16 #
17 #    You should have received a copy of the GNU Affero General Public License
18 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
19 #
20 ##############################################################################
21
22 import time
23
24 from report import report_sxw
25 import pooler
26
27 class Overdue(report_sxw.rml_parse):
28     def __init__(self, cr, uid, name, context):
29         super(Overdue, self).__init__(cr, uid, name, context=context)
30         self.localcontext.update( {
31             'time': time,
32             'adr_get': self._adr_get,
33             'getLines': self._lines_get,
34             'tel_get': self._tel_get,
35             'message': self._message,
36         })
37         self.context = context
38     def _adr_get(self, partner, type):
39         res = []
40         res_partner = pooler.get_pool(self.cr.dbname).get('res.partner')
41         addresses = res_partner.address_get(self.cr, self.uid, [partner.id], [type])
42         adr_id = addresses and addresses[type] or False
43         result = {
44                   'name': False,
45                   'street': False,
46                   'street2': False,
47                   'city': False,
48                   'zip': False,
49                   'state_id':False,
50                   'country_id': False,
51                  }
52         if adr_id:
53             result = res_partner.read(self.cr, self.uid, [adr_id], context=self.context.copy())
54             result[0]['country_id'] = result[0]['country_id'] and result[0]['country_id'][1] or False
55             result[0]['state_id'] = result[0]['state_id'] and result[0]['state_id'][1] or False
56             return result
57
58         res.append(result)
59         return res
60
61     def _tel_get(self,partner):
62         if not partner:
63             return False
64         res_partner = pooler.get_pool(self.cr.dbname).get('res.partner')
65         addresses = res_partner.address_get(self.cr, self.uid, [partner.id], ['invoice'])
66         adr_id = addresses and addresses['invoice'] or False
67         if adr_id:
68             adr=res_partner_address.read(self.cr, self.uid, [adr_id])[0]
69             return adr['phone']
70         else:
71             return partner.phone or False
72         return False
73
74     def _lines_get(self, partner):
75         moveline_obj = pooler.get_pool(self.cr.dbname).get('account.move.line')
76         movelines = moveline_obj.search(self.cr, self.uid,
77                 [('partner_id', '=', partner.id),
78                     ('account_id.type', 'in', ['receivable', 'payable']),
79                     ('state', '<>', 'draft'), ('reconcile_id', '=', False)])
80         movelines = moveline_obj.browse(self.cr, self.uid, movelines)
81         return movelines
82
83     def _message(self, obj, company):
84         company_pool = pooler.get_pool(self.cr.dbname).get('res.company')
85         message = company_pool.browse(self.cr, self.uid, company.id, {'lang':obj.lang}).overdue_msg
86         return message.split('\n')
87
88 report_sxw.report_sxw('report.account.overdue', 'res.partner',
89         'addons/account/report/account_print_overdue.rml', parser=Overdue)
90
91
92 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
93