From bb1f454ddb4f5720007153a0f40820cc000cfdf9 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 15 Mar 2013 15:50:58 +0100 Subject: [PATCH] [MIG] account_credit_control: Migration to 7.0 --- account_credit_control/__init__.py | 4 +- account_credit_control/__openerp__.py | 16 ++-- account_credit_control/account.py | 48 +++++----- account_credit_control/account_view.xml | 2 +- account_credit_control/company.py | 26 +++-- account_credit_control/line.py | 14 ++- account_credit_control/line_view.xml | 2 +- account_credit_control/partner.py | 17 ++-- account_credit_control/policy.py | 95 +++++++++---------- account_credit_control/policy_view.xml | 14 +-- account_credit_control/run.py | 61 ++++++------ account_credit_control/run_view.xml | 4 +- .../wizard/credit_control_emailer_view.xml | 2 +- .../wizard/credit_control_marker_view.xml | 2 +- .../wizard/credit_control_printer_view.xml | 2 +- 15 files changed, 145 insertions(+), 164 deletions(-) diff --git a/account_credit_control/__init__.py b/account_credit_control/__init__.py index fcbbd9b69..5f37efe65 100644 --- a/account_credit_control/__init__.py +++ b/account_credit_control/__init__.py @@ -24,5 +24,5 @@ from . import account from . import partner from . import policy from . import company -import wizard -import report +from . import wizard +from . import report diff --git a/account_credit_control/__openerp__.py b/account_credit_control/__openerp__.py index b37ce24d9..cb475751a 100644 --- a/account_credit_control/__openerp__.py +++ b/account_credit_control/__openerp__.py @@ -18,13 +18,14 @@ # along with this program. If not, see . # ############################################################################## -{'name' : 'Account Credit Control', - 'version' : '0.1', - 'author' : 'Camptocamp', +{'name': 'Account Credit Control', + 'version': '0.1', + 'author': 'Camptocamp', 'maintainer': 'Camptocamp', 'category': 'Finance', 'complexity': "normal", - 'depends' : ['base', 'account', 'email_template', 'report_webkit'], + 'depends': ['base', 'account', + 'email_template', 'report_webkit'], 'description': """ Credit Control ============== @@ -57,8 +58,7 @@ On each generated line, you have many choices: * Change the state (so you can ignore or reopen lines) """, 'website': 'http://www.camptocamp.com', - 'init_xml': ["data.xml", - ], + 'init_xml': ["data.xml"], 'update_xml': ["line_view.xml", "account_view.xml", "partner_view.xml", @@ -69,12 +69,10 @@ On each generated line, you have many choices: "wizard/credit_control_marker_view.xml", "wizard/credit_control_printer_view.xml", "report/report.xml", - "security/ir.model.access.csv", - ], + "security/ir.model.access.csv",], 'demo_xml': ["credit_control_demo.xml"], 'tests': [], 'installable': True, 'license': 'AGPL-3', 'application': True } - diff --git a/account_credit_control/account.py b/account_credit_control/account.py index a515bb9b0..5fc7a8418 100644 --- a/account_credit_control/account.py +++ b/account_credit_control/account.py @@ -18,42 +18,39 @@ # along with this program. If not, see . # ############################################################################## - -from openerp.osv.orm import Model, fields +from openerp.osv import orm, fields -class AccountAccount(Model): +class AccountAccount(orm.Model): """Add a link to a credit control policy on account.account""" _inherit = "account.account" - _columns = { - 'credit_control_line_ids': fields.one2many('credit.control.line', - 'account_id', - string='Credit Lines', - readonly=True) - } + _columns = {'credit_control_line_ids': fields.one2many('credit.control.line', + 'account_id', + string='Credit Lines', + readonly=True) + } -class AccountInvoice(Model): +class AccountInvoice(orm.Model): """Add a link to a credit control policy on account.account""" _inherit = "account.invoice" - _columns = { - 'credit_policy_id': fields.many2one('credit.control.policy', - 'Credit Control Policy', - help=("The Credit Control Policy " - "used for this invoice. " - "If nothing is defined, " - "it will use the account " - "setting or the partner " - "setting.")), + _columns = {'credit_policy_id': fields.many2one('credit.control.policy', + 'Credit Control Policy', + help=("The Credit Control Policy " + "used for this invoice. " + "If nothing is defined, " + "it will use the account " + "setting or the partner " + "setting.")), - 'credit_control_line_ids': fields.one2many('credit.control.line', - 'invoice_id', - string='Credit Lines', - readonly=True) - } + 'credit_control_line_ids': fields.one2many('credit.control.line', + 'invoice_id', + string='Credit Lines', + readonly=True) + } def action_move_create(self, cr, uid, ids, context=None): """ Write the id of the invoice in the generated moves. """ @@ -65,9 +62,8 @@ class AccountInvoice(Model): return res -class AccountMoveLine(Model): +class AccountMoveLine(orm.Model): _inherit = "account.move.line" _columns = {'invoice_id': fields.many2one('account.invoice', 'Invoice')} - diff --git a/account_credit_control/account_view.xml b/account_credit_control/account_view.xml index cb44a7c67..f43ce633a 100644 --- a/account_credit_control/account_view.xml +++ b/account_credit_control/account_view.xml @@ -17,7 +17,7 @@ + groups="account_credit_control.group_account_credit_control_manager,account_credit_control.group_account_credit_control_user,account_credit_control.group_account_credit_control_info"> diff --git a/account_credit_control/company.py b/account_credit_control/company.py index 7a31b7d84..eb8187a4c 100644 --- a/account_credit_control/company.py +++ b/account_credit_control/company.py @@ -18,23 +18,21 @@ # along with this program. If not, see . # ############################################################################## -from openerp.osv.orm import Model, fields +from openerp.osv import orm, fields -class ResCompany(Model): - +class ResCompany(orm.Model): + """Add credit control parameters""" _inherit = 'res.company' - _columns = { - 'credit_control_tolerance': fields.float('Credit Control Tolerance'), - # This is not a property on the partner because we cannot search - # on fields.property (subclass fields.function). - 'credit_policy_id': fields.many2one( - 'credit.control.policy', - 'Credit Control Policy', - help=("The Credit Control Policy used on partners by default. This " - "setting can be overriden on partners or invoices.")), - } + _columns = {'credit_control_tolerance': fields.float('Credit Control Tolerance'), + # This is not a property on the partner because we cannot search + # on fields.property (subclass fields.function). + 'credit_policy_id': fields.many2one('credit.control.policy', + 'Credit Control Policy', + help=("The Credit Control Policy used on partners" + " by default. This setting can be overriden" + " on partners or invoices.")), + } _defaults = {"credit_control_tolerance": 0.1} - diff --git a/account_credit_control/line.py b/account_credit_control/line.py index 208818127..7afb553b1 100644 --- a/account_credit_control/line.py +++ b/account_credit_control/line.py @@ -19,16 +19,15 @@ # ############################################################################## import logging -import pooler -from openerp.osv.orm import Model, fields +from openerp.osv import orm, fields from openerp.osv import osv from openerp.tools.translate import _ logger = logging.getLogger('credit.line.control') -class CreditControlLine(Model): +class CreditControlLine(orm.Model): """A credit control line describes an amount due by a customer for a due date. A line is created once the due date of the payment is exceeded. @@ -67,10 +66,10 @@ class CreditControlLine(Model): "generated again on the next run.")), 'channel': fields.selection([('letter', 'Letter'), - ('email', 'Email')], - 'Channel', required=True, - readonly=True, - states={'draft': [('readonly', False)]}), + ('email', 'Email')], + 'Channel', required=True, + readonly=True, + states={'draft': [('readonly', False)]}), 'invoice_id': fields.many2one('account.invoice', 'Invoice', readonly=True), 'partner_id': fields.many2one('res.partner', "Partner", required=True), @@ -193,4 +192,3 @@ class CreditControlLine(Model): 'is not in draft state.')) return super(CreditControlLine, self).unlink(cr, uid, ids, context=context) - diff --git a/account_credit_control/line_view.xml b/account_credit_control/line_view.xml index a66f64c4d..f48708d2f 100644 --- a/account_credit_control/line_view.xml +++ b/account_credit_control/line_view.xml @@ -28,7 +28,7 @@ Credit Control Lines - credit.control.lines + credit.control.line search diff --git a/account_credit_control/partner.py b/account_credit_control/partner.py index 5cc33c32f..8d66428b6 100644 --- a/account_credit_control/partner.py +++ b/account_credit_control/partner.py @@ -18,10 +18,10 @@ # along with this program. If not, see . # ############################################################################## -from openerp.osv.orm import Model, fields +from openerp.osv import orm, fields -class ResPartner(Model): +class ResPartner(orm.Model): """Add a settings on the credit control policy to use on the partners, and links to the credit control lines.""" @@ -30,15 +30,14 @@ class ResPartner(Model): _columns = { 'credit_policy_id': fields.many2one('credit.control.policy', 'Credit Control Policy', - help=("The Credit Control Policy" - "used for this partner. This " - "setting can be forced on the " - "invoice. If nothing is defined, " - "it will use the company " - "setting.")), + help=("The Credit Control Policy" + "used for this partner. This " + "setting can be forced on the " + "invoice. If nothing is defined, " + "it will use the company " + "setting.")), 'credit_control_line_ids': fields.one2many('credit.control.line', 'invoice_id', string='Credit Control Lines', readonly=True) } - diff --git a/account_credit_control/policy.py b/account_credit_control/policy.py index 6f97176db..875d8a1b5 100644 --- a/account_credit_control/policy.py +++ b/account_credit_control/policy.py @@ -30,21 +30,21 @@ class CreditControlPolicy(Model): _columns = {'name': fields.char('Name', required=True, size=128), 'level_ids': fields.one2many('credit.control.policy.level', - 'policy_id', - 'Policy Levels'), + 'policy_id', + 'Policy Levels'), 'do_nothing': fields.boolean('Do nothing', - help=('For policies which should not ' - 'generate lines or are obsolete')), + help=('For policies which should not ' + 'generate lines or are obsolete')), 'company_id': fields.many2one('res.company', 'Company'), - 'account_ids': fields.many2many( - 'account.account', - string='Accounts', - required=True, - domain="[('reconcile', '=', True)]", - help='This policy will be active only for the selected accounts'), + 'account_ids': fields.many2many('account.account', + string='Accounts', + required=True, + domain="[('reconcile', '=', True)]", + help="This policy will be active only" + " for the selected accounts"), } def _move_lines_domain(self, cr, uid, policy, controlling_date, context=None): @@ -71,13 +71,12 @@ class CreditControlPolicy(Model): if user.company_id.credit_policy_id.id != policy.id: return set() - return set(move_l_obj.search( - cr, uid, - self._move_lines_domain(cr, uid, policy, controlling_date, context=context), - context=context)) + domain_line = self._move_lines_domain(cr, uid, policy, + controlling_date, context=context) + return set(move_l_obj.search(cr, uid, domain_line, context=context)) def _move_lines_subset(self, cr, uid, policy, controlling_date, - model, move_relation_field, context=None): + model, move_relation_field, context=None): """ Get the move lines related to one model for a policy. Do not use direct SQL in order to respect security rules. @@ -139,9 +138,8 @@ class CreditControlPolicy(Model): :return: set of ids to add in the process, set of ids to remove from the process """ - return self._move_lines_subset( - cr, uid, policy, controlling_date, - 'res.partner', 'partner_id', context=context) + return self._move_lines_subset(cr, uid, policy, controlling_date, + 'res.partner', 'partner_id', context=context) def _get_invoice_related_lines(self, cr, uid, policy, controlling_date, context=None): """ Get the move lines for a policy related to an invoice. @@ -154,9 +152,8 @@ class CreditControlPolicy(Model): :return: set of ids to add in the process, set of ids to remove from the process """ - return self._move_lines_subset( - cr, uid, policy, controlling_date, - 'account.invoice', 'invoice', context=context) + return self._move_lines_subset(cr, uid, policy, controlling_date, + 'account.invoice', 'invoice', context=context) def _get_move_lines_to_process(self, cr, uid, policy_id, controlling_date, context=None): """Build a list of move lines ids to include in a run for a policy at a given date. @@ -173,13 +170,14 @@ class CreditControlPolicy(Model): policy = self.browse(cr, uid, policy_id, context=context) # there is a priority between the lines, depicted by the calls below # warning, side effect method called on lines - lines = self._due_move_lines( - cr, uid, policy, controlling_date, context=context) - add_ids, remove_ids = self._get_partner_related_lines( - cr, uid, policy, controlling_date, context=context) + lines = self._due_move_lines(cr, uid, policy, controlling_date, context=context) + add_ids, remove_ids = self._get_partner_related_lines(cr, uid, policy, + controlling_date, + context=context) lines = lines.union(add_ids).difference(remove_ids) - add_ids, remove_ids = self._get_invoice_related_lines( - cr, uid, policy, controlling_date, context=context) + add_ids, remove_ids = self._get_invoice_related_lines(cr, uid, policy, + controlling_date, + context=context) lines = lines.union(add_ids).difference(remove_ids) return lines @@ -195,8 +193,8 @@ class CreditControlPolicy(Model): if isinstance(policy_id, list): policy_id = policy_id[0] cr.execute("SELECT move_line_id FROM credit_control_line" - " WHERE policy_id != %s and move_line_id in %s", - (policy_id, tuple(lines))) + " WHERE policy_id != %s and move_line_id in %s", + (policy_id, tuple(lines))) res = cr.fetchall() if res: different_lines.update([x[0] for x in res]) @@ -224,10 +222,10 @@ class CreditControlPolicyLevel(Model): 'delay_days': fields.integer('Delay (in days)', required='True'), 'email_template_id': fields.many2one('email.template', 'Email Template', - required=True), + required=True), 'channel': fields.selection([('letter', 'Letter'), - ('email', 'Email')], - 'Channel', required=True), + ('email', 'Email')], + 'Channel', required=True), 'custom_text': fields.text('Custom Message', required=True, translate=True), } @@ -314,9 +312,11 @@ class CreditControlPolicyLevel(Model): # lines from a previous level with a draft or ignored state # have to be generated again for the previous level " AND state not in ('draft', 'ignored'))") - sql += " AND" + self._get_sql_date_boundary_for_computation_mode( - cr, uid, level, controlling_date, context) - data_dict = {'controlling_date': controlling_date, 'line_ids': tuple(lines), + sql += " AND" + sql += self._get_sql_date_boundary_for_computation_mode(cr, uid, level, + controlling_date, context) + data_dict = {'controlling_date': controlling_date, + 'line_ids': tuple(lines), 'delay': level.delay_days} cr.execute(sql, data_dict) @@ -343,14 +343,15 @@ class CreditControlPolicyLevel(Model): # have to be generated again for the previous level " AND cr_line.state not in ('draft', 'ignored')\n" " AND mv_line.id in %(line_ids)s\n") - sql += " AND " + self._get_sql_date_boundary_for_computation_mode( - cr, uid, level, controlling_date, context) - previous_level_id = self._previous_level( - cr, uid, level, context=context) - previous_level = self.browse( - cr, uid, previous_level_id, context=context) - data_dict = {'controlling_date': controlling_date, 'line_ids': tuple(lines), - 'delay': level.delay_days, 'previous_level': previous_level.level} + sql += " AND " + sql += self._get_sql_date_boundary_for_computation_mode(cr, uid, level, + controlling_date, context) + previous_level_id = self._previous_level(cr, uid, level, context=context) + previous_level = self.browse(cr, uid, previous_level_id, context=context) + data_dict = {'controlling_date': controlling_date, + 'line_ids': tuple(lines), + 'delay': level.delay_days, + 'previous_level': previous_level.level} # print cr.mogrify(sql, data_dict) cr.execute(sql, data_dict) @@ -371,9 +372,7 @@ class CreditControlPolicyLevel(Model): method = self._get_first_level_move_line_ids else: method = self._get_other_level_move_line_ids - - matching_lines.update( - method(cr, uid, level, controlling_date, lines, context=context)) - + matching_lines.update(method(cr, uid, level, + controlling_date, lines, + context=context)) return matching_lines - diff --git a/account_credit_control/policy_view.xml b/account_credit_control/policy_view.xml index 99daac65e..5e12f4516 100644 --- a/account_credit_control/policy_view.xml +++ b/account_credit_control/policy_view.xml @@ -6,14 +6,14 @@ credit.control.policy form -
+ - + - + @@ -21,7 +21,7 @@ - + @@ -51,7 +51,7 @@ credit.control.policy tree - + @@ -84,7 +84,7 @@ credit.control.policy.level form - + @@ -107,7 +107,7 @@ credit.control.policy.level tree - + diff --git a/account_credit_control/run.py b/account_credit_control/run.py index db5120bfe..03c833b43 100644 --- a/account_credit_control/run.py +++ b/account_credit_control/run.py @@ -20,14 +20,14 @@ ############################################################################## import logging -from openerp.osv.orm import Model, fields +from openerp.osv import orm, fields from openerp.tools.translate import _ from openerp.osv.osv import except_osv logger = logging.getLogger('credit.control.run') -class CreditControlRun(Model): +class CreditControlRun(orm.Model): """Credit Control run generate all credit control lines and reject""" _name = "credit.control.run" @@ -36,39 +36,34 @@ class CreditControlRun(Model): _columns = { 'date': fields.date('Controlling Date', required=True), 'policy_ids': fields.many2many('credit.control.policy', - rel="credit_run_policy_rel", - id1='run_id', id2='policy_id', - string='Policies', - readonly=True, - states={'draft': [('readonly', False)]}), + rel="credit_run_policy_rel", + id1='run_id', id2='policy_id', + string='Policies', + readonly=True, + states={'draft': [('readonly', False)]}), 'report': fields.text('Report', readonly=True), 'state': fields.selection([('draft', 'Draft'), - ('done', 'Done'), - ], - string='State', - required=True, - readonly=True), + ('done', 'Done')], + string='State', + required=True, + readonly=True), - 'manual_ids': fields.many2many( - 'account.move.line', - rel="credit_runreject_rel", - string='Lines to handle manually', - help=('If a credit control line has been generated on a policy ' - 'and the policy has been changed meantime, ' - 'it has to be handled manually'), - readonly=True), + 'manual_ids': fields.many2many('account.move.line', + rel="credit_runreject_rel", + string='Lines to handle manually', + help=('If a credit control line has been generated on a policy' + ' and the policy has been changed meantime,' + ' it has to be handled manually'), + readonly=True), } def _get_policies(self, cr, uid, context=None): - return self.pool.get('credit.control.policy').\ - search(cr, uid, [], context=context) + return self.pool['credit.control.policy'].search(cr, uid, [], context=context) - _defaults = { - 'state': 'draft', - 'policy_ids': _get_policies, - } + _defaults = {'state': 'draft', + 'policy_ids': _get_policies} def _check_run_date(self, cr, uid, ids, controlling_date, context=None): """Ensure that there is no credit line in the future using controlling_date""" @@ -86,7 +81,7 @@ class CreditControlRun(Model): """ Generate credit control lines. """ cr_line_obj = self.pool.get('credit.control.line') assert not (isinstance(run_id, list) and len(run_id) > 1), \ - "run_id: only one id expected" + "run_id: only one id expected" if isinstance(run_id, list): run_id = run_id[0] @@ -140,14 +135,12 @@ class CreditControlRun(Model): """ try: cr.execute('SELECT id FROM credit_control_run' - ' LIMIT 1 FOR UPDATE NOWAIT' ) - except Exception, exc: + ' LIMIT 1 FOR UPDATE NOWAIT') + except Exception as exc: # in case of exception openerp will do a rollback for us and free the lock - raise except_osv( - _('Error'), - _('A credit control run is already running' - ' in background, please try later.'), str(exc)) + raise except_osv(_('Error'), + _('A credit control run is already running' + ' in background, please try later.'), repr(exc)) self._generate_credit_lines(cr, uid, run_id, context) return True - diff --git a/account_credit_control/run_view.xml b/account_credit_control/run_view.xml index b3a7be8ae..2ca3e6827 100644 --- a/account_credit_control/run_view.xml +++ b/account_credit_control/run_view.xml @@ -6,7 +6,7 @@ credit.control.run tree - + @@ -18,7 +18,7 @@ credit.control.run form - + diff --git a/account_credit_control/wizard/credit_control_emailer_view.xml b/account_credit_control/wizard/credit_control_emailer_view.xml index ba28fd139..ac0e5eb8c 100644 --- a/account_credit_control/wizard/credit_control_emailer_view.xml +++ b/account_credit_control/wizard/credit_control_emailer_view.xml @@ -6,7 +6,7 @@ credit.control.emailer form - + diff --git a/account_credit_control/wizard/credit_control_marker_view.xml b/account_credit_control/wizard/credit_control_marker_view.xml index b8de161ae..567a26037 100644 --- a/account_credit_control/wizard/credit_control_marker_view.xml +++ b/account_credit_control/wizard/credit_control_marker_view.xml @@ -6,7 +6,7 @@ credit.control.marker form - + diff --git a/account_credit_control/wizard/credit_control_printer_view.xml b/account_credit_control/wizard/credit_control_printer_view.xml index f46128fe3..dd07c1b13 100644 --- a/account_credit_control/wizard/credit_control_printer_view.xml +++ b/account_credit_control/wizard/credit_control_printer_view.xml @@ -6,7 +6,7 @@ credit.control.printer form - +