From b125a794aec7d740e81a90c94cf31a3b230407fb Mon Sep 17 00:00:00 2001 From: cubells Date: Fri, 7 Jul 2017 11:12:50 +0200 Subject: [PATCH] [ADD] account_credit_control: backport from 10.0 --- account_credit_control/README.rst | 19 +- account_credit_control/__init__.py | 12 +- account_credit_control/__openerp__.py | 97 +-- account_credit_control/models/__init__.py | 10 +- .../models/account_account.py | 14 +- .../models/account_invoice.py | 11 +- .../models/credit_control_line.py | 229 ++++--- .../models/credit_control_policy.py | 106 ++-- .../models/credit_control_run.py | 46 +- account_credit_control/models/mail_mail.py | 10 +- account_credit_control/models/res_company.py | 22 +- account_credit_control/models/res_partner.py | 18 +- .../features/00_credit_control_param.feature | 61 -- .../01_credit_control_partners.feature | 105 ---- .../02_credit_control_invoices.feature | 588 ------------------ .../03_credit_control_run_jan.feature | 29 - .../04_credit_control_run_feb.feature | 33 - .../05_credit_control_run_mar.feature | 45 -- .../06_credit_control_run_apr.feature | 44 -- .../07_credit_control_run_may.feature | 59 -- .../08_credit_control_run_jun.feature | 38 -- .../09_credit_control_run_jul.feature | 35 -- .../10_credit_control_run_aug.feature | 30 - .../11_credit_control_manual_setting.feature | 42 -- .../features/steps/account_credit_control.py | 147 ----- .../steps/account_credit_control_changer.py | 79 --- .../features/steps/account_voucher.py | 96 --- account_credit_control/tests/__init__.py | 1 + .../tests/test_account_invoice.py | 9 +- .../tests/test_credit_control_policy.py | 4 +- .../tests/test_credit_control_run.py | 8 +- .../tests/test_res_partner.py | 4 +- .../views/account_invoice.xml | 1 + .../views/credit_control_line.xml | 3 +- .../views/credit_control_policy.xml | 3 +- .../views/credit_control_run.xml | 2 +- account_credit_control/views/res_company.xml | 2 + account_credit_control/views/res_partner.xml | 1 + .../{wizard => wizards}/__init__.py | 0 .../credit_control_communication.py | 3 +- .../credit_control_emailer.py | 4 +- .../credit_control_emailer_view.xml | 0 .../credit_control_marker.py | 4 +- .../credit_control_marker_view.xml | 5 +- .../credit_control_policy_changer.py | 11 +- .../credit_control_policy_changer_view.xml | 2 +- .../credit_control_printer.py | 4 +- .../credit_control_printer_view.xml | 3 +- 48 files changed, 360 insertions(+), 1739 deletions(-) delete mode 100644 account_credit_control/scenarios/features/00_credit_control_param.feature delete mode 100644 account_credit_control/scenarios/features/01_credit_control_partners.feature delete mode 100644 account_credit_control/scenarios/features/02_credit_control_invoices.feature delete mode 100644 account_credit_control/scenarios/features/03_credit_control_run_jan.feature delete mode 100644 account_credit_control/scenarios/features/04_credit_control_run_feb.feature delete mode 100644 account_credit_control/scenarios/features/05_credit_control_run_mar.feature delete mode 100644 account_credit_control/scenarios/features/06_credit_control_run_apr.feature delete mode 100644 account_credit_control/scenarios/features/07_credit_control_run_may.feature delete mode 100644 account_credit_control/scenarios/features/08_credit_control_run_jun.feature delete mode 100644 account_credit_control/scenarios/features/09_credit_control_run_jul.feature delete mode 100644 account_credit_control/scenarios/features/10_credit_control_run_aug.feature delete mode 100644 account_credit_control/scenarios/features/11_credit_control_manual_setting.feature delete mode 100644 account_credit_control/scenarios/features/steps/account_credit_control.py delete mode 100644 account_credit_control/scenarios/features/steps/account_credit_control_changer.py delete mode 100644 account_credit_control/scenarios/features/steps/account_voucher.py rename account_credit_control/{wizard => wizards}/__init__.py (100%) rename account_credit_control/{wizard => wizards}/credit_control_communication.py (99%) rename account_credit_control/{wizard => wizards}/credit_control_emailer.py (95%) rename account_credit_control/{wizard => wizards}/credit_control_emailer_view.xml (100%) rename account_credit_control/{wizard => wizards}/credit_control_marker.py (96%) rename account_credit_control/{wizard => wizards}/credit_control_marker_view.xml (95%) rename account_credit_control/{wizard => wizards}/credit_control_policy_changer.py (93%) rename account_credit_control/{wizard => wizards}/credit_control_policy_changer_view.xml (98%) rename account_credit_control/{wizard => wizards}/credit_control_printer.py (95%) rename account_credit_control/{wizard => wizards}/credit_control_printer_view.xml (95%) diff --git a/account_credit_control/README.rst b/account_credit_control/README.rst index 6b3b93c80..619a63d86 100644 --- a/account_credit_control/README.rst +++ b/account_credit_control/README.rst @@ -14,14 +14,18 @@ Just install it Configuration ============= -Configure the policies and policy levels in ``Accounting > Configuration > -Credit Control > Credit Control Policies``. -You can define as many policy levels as you need. +* Configure the policies and policy levels in **Accounting > Configuration > + Credit Control > Credit Control Policies**. You can define as many policy + levels as you need. -Configure a tolerance for the Credit control and a default policy -applied on all partners in each company, under the Accounting tab. +* You must add in every policy, to which account or accounts this policy is + applied. To do, you must go to "Accounts" tab in policy form. + +* Configure a tolerance for the Credit control and a default policy + applied on all partners in each company, under the Accounting tab. + +* You are able to specify a particular policy for one partner or one invoice. -You are able to specify a particular policy for one partner or one invoice. Usage ===== @@ -40,7 +44,7 @@ On each generated line, you have many choices: .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/92/10.0 + :target: https://runbot.odoo-community.org/runbot/92/9.0 Bug Tracker =========== @@ -65,6 +69,7 @@ Contributors * Guewen Baconnier (Camptocamp) * Sylvain Van Hoof (Okia SPRL) * Akim Juillerat (Camptocamp +* Vicent Cubells Maintainer ---------- diff --git a/account_credit_control/__init__.py b/account_credit_control/__init__.py index b233d1220..aa9bb32bb 100644 --- a/account_credit_control/__init__.py +++ b/account_credit_control/__init__.py @@ -1,14 +1,6 @@ -<<<<<<< 3bb811bb84ec5c265d8e9245eff93a4a5f98059f -<<<<<<< f4a71683cf11965d8ffc1f5016e254fe6aa2eaf5 # -*- coding: utf-8 -*- # Copyright 2017 Okia SPRL (https://okia.be) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -======= ->>>>>>> Fix errors, improve menus, views, readme -======= -# -*- coding: utf-8 -*- -# Copyright 2017 Okia SPRL (https://okia.be) -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). ->>>>>>> Add some unit tests on the module account_credit_control + from . import models -from . import wizard +from . import wizards diff --git a/account_credit_control/__openerp__.py b/account_credit_control/__openerp__.py index 7d30d3e2a..1bb40c2f7 100644 --- a/account_credit_control/__openerp__.py +++ b/account_credit_control/__openerp__.py @@ -1,67 +1,38 @@ # -*- coding: utf-8 -*- # Copyright 2012-2017 Camptocamp SA # Copyright 2017 Okia SPRL (https://okia.be) +# Copyright 2017 Tecnativa - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -{'name': 'Account Credit Control', - 'version': '8.0.0.3.0', - 'author': "Camptocamp,Odoo Community Association (OCA)", - 'maintainer': 'Camptocamp', - 'category': 'Finance', - 'complexity': "normal", - 'depends': ['base', - 'account', - 'email_template', - ], - 'website': 'http://www.camptocamp.com', -<<<<<<< c22b2dde9403c91dc4e4f0835f97c737e54bdb43:account_credit_control/__openerp__.py - 'data': ["report/report.xml", - "report/report_credit_control_summary.xml", - "data.xml", - "line_view.xml", - "account_view.xml", - "partner_view.xml", - "policy_view.xml", - "run_view.xml", - "company_view.xml", - "wizard/credit_control_emailer_view.xml", - "wizard/credit_control_marker_view.xml", - "wizard/credit_control_printer_view.xml", - "wizard/credit_control_policy_changer_view.xml", - "security/ir.model.access.csv"], - 'demo': ["credit_control_demo.xml"], - 'tests': [], - 'installable': False, -======= - 'data': [ - "security/res_groups.xml", - # Reports - "report/report.xml", - "report/report_credit_control_summary.xml", - - # Data - "data/data.xml", - - # Views - "views/account_invoice.xml", - "views/credit_control_line.xml", - "views/credit_control_policy.xml", - "views/credit_control_run.xml", - "views/res_company.xml", - "views/res_partner.xml", - - # Wizards - "wizard/credit_control_emailer_view.xml", - "wizard/credit_control_marker_view.xml", - "wizard/credit_control_printer_view.xml", - "wizard/credit_control_policy_changer_view.xml", - - # Security - "security/ir.model.access.csv", - ], - 'demo': [ - ], - 'installable': True, ->>>>>>> account_credit_control: remove demo file.:account_credit_control/__manifest__.py - 'license': 'AGPL-3', - 'application': True - } +{ + 'name': 'Account Credit Control', + 'version': '9.0.0.1.0', + 'author': "Camptocamp, " + "Tecnativa, " + "Odoo Community Association (OCA)", + 'license': 'AGPL-3', + 'category': 'Finance', + 'depends': [ + 'base', + 'account', + 'mail', + ], + 'website': 'http://www.camptocamp.com', + 'data': [ + "security/res_groups.xml", + "report/report.xml", + "report/report_credit_control_summary.xml", + "data/data.xml", + "views/account_invoice.xml", + "views/credit_control_line.xml", + "views/credit_control_policy.xml", + "views/credit_control_run.xml", + "views/res_company.xml", + "views/res_partner.xml", + "wizards/credit_control_emailer_view.xml", + "wizards/credit_control_marker_view.xml", + "wizards/credit_control_printer_view.xml", + "wizards/credit_control_policy_changer_view.xml", + "security/ir.model.access.csv", + ], + 'installable': True, +} diff --git a/account_credit_control/models/__init__.py b/account_credit_control/models/__init__.py index 4f36aa6a3..6d929418d 100644 --- a/account_credit_control/models/__init__.py +++ b/account_credit_control/models/__init__.py @@ -1,15 +1,7 @@ -<<<<<<< 3bb811bb84ec5c265d8e9245eff93a4a5f98059f -<<<<<<< f4a71683cf11965d8ffc1f5016e254fe6aa2eaf5 # -*- coding: utf-8 -*- # Copyright 2017 Okia SPRL (https://okia.be) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -======= ->>>>>>> Fix errors, improve menus, views, readme -======= -# -*- coding: utf-8 -*- -# Copyright 2017 Okia SPRL (https://okia.be) -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). ->>>>>>> Add some unit tests on the module account_credit_control + from . import account_account from . import account_invoice from . import credit_control_line diff --git a/account_credit_control/models/account_account.py b/account_credit_control/models/account_account.py index 2face2a5b..1b77be6dc 100644 --- a/account_credit_control/models/account_account.py +++ b/account_credit_control/models/account_account.py @@ -1,8 +1,10 @@ # -*- coding: utf-8 -*- # Copyright 2012-2017 Camptocamp SA # Copyright 2017 Okia SPRL (https://okia.be) +# Copyright 2017 Tecnativa - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models + +from openerp import fields, models class AccountAccount(models.Model): @@ -10,7 +12,9 @@ class AccountAccount(models.Model): _inherit = "account.account" - credit_control_line_ids = fields.One2many('credit.control.line', - 'account_id', - string='Credit Lines', - readonly=True) + credit_control_line_ids = fields.One2many( + comodel_name='credit.control.line', + inverse_name='account_id', + string='Credit Lines', + readonly=True, + ) diff --git a/account_credit_control/models/account_invoice.py b/account_credit_control/models/account_invoice.py index 5cc66de22..527ad093c 100644 --- a/account_credit_control/models/account_invoice.py +++ b/account_credit_control/models/account_invoice.py @@ -1,9 +1,11 @@ # -*- coding: utf-8 -*- # Copyright 2012-2017 Camptocamp SA # Copyright 2017 Okia SPRL (https://okia.be) +# Copyright 2017 Tecnativa - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import _, api, fields, models -from odoo.exceptions import UserError + +from openerp import _, api, fields, models +from openerp.exceptions import UserError class AccountInvoice(models.Model): @@ -11,7 +13,7 @@ class AccountInvoice(models.Model): _inherit = 'account.invoice' credit_policy_id = fields.Many2one( - 'credit.control.policy', + comodel_name='credit.control.policy', string='Credit Control Policy', help="The Credit Control Policy used for this " "invoice. If nothing is defined, it will " @@ -25,7 +27,8 @@ class AccountInvoice(models.Model): ) credit_control_line_ids = fields.One2many( - 'credit.control.line', 'invoice_id', + comodel_name='credit.control.line', + inverse_name='invoice_id', string='Credit Lines', readonly=True, copy=False, diff --git a/account_credit_control/models/credit_control_line.py b/account_credit_control/models/credit_control_line.py index d052b3669..b5d6bfb7f 100644 --- a/account_credit_control/models/credit_control_line.py +++ b/account_credit_control/models/credit_control_line.py @@ -1,11 +1,13 @@ # -*- coding: utf-8 -*- # Copyright 2012-2017 Camptocamp SA # Copyright 2017 Okia SPRL (https://okia.be) +# Copyright 2017 Tecnativa - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + import logging -from odoo import _, api, fields, models -from odoo.exceptions import UserError +from openerp import _, api, fields, models +from openerp.exceptions import UserError logger = logging.getLogger(__name__) @@ -23,107 +25,136 @@ class CreditControlLine(models.Model): _rec_name = "id" _order = "date DESC" - date = fields.Date(string='Controlling date', - required=True, - index=True) + date = fields.Date( + string='Controlling date', + required=True, + index=True, + ) # maturity date of related move line we do not use # a related field in order to # allow manual changes - date_due = fields.Date(string='Due date', - required=True, - readonly=True, - states={'draft': [('readonly', False)]}) - - date_entry = fields.Date(string='Entry date', - related='move_line_id.date', - store=True, - readonly=True) - - date_sent = fields.Date(string='Sent date', - readonly=True, - states={'draft': [('readonly', False)]}) - - state = fields.Selection([('draft', 'Draft'), - ('ignored', 'Ignored'), - ('to_be_sent', 'Ready To Send'), - ('sent', 'Done'), - ('error', 'Error'), - ('email_error', 'Emailing Error')], - 'State', - required=True, - readonly=True, - default='draft', - help="Draft lines need to be triaged.\n" - "Ignored lines are lines for which we do " - "not want to send something.\n" - "Draft and ignored lines will be " - "generated again on the next run.") - - channel = fields.Selection([('letter', 'Letter'), - ('email', 'Email')], - string='Channel', - required=True, - readonly=True, - states={'draft': [('readonly', False)]}) - - invoice_id = fields.Many2one('account.invoice', - string='Invoice', - readonly=True) - - partner_id = fields.Many2one('res.partner', - string='Partner', - required=True) - - amount_due = fields.Float(string='Due Amount Tax incl.', - required=True, readonly=True) - - balance_due = fields.Float(string='Due balance', required=True, - readonly=True) - - mail_message_id = fields.Many2one('mail.mail', string='Sent Email', - readonly=True) - - move_line_id = fields.Many2one('account.move.line', - string='Move line', - required=True, - readonly=True) - - account_id = fields.Many2one('account.account', - related='move_line_id.account_id', - store=True, - readonly=True) - - currency_id = fields.Many2one('res.currency', - related='move_line_id.currency_id', - store=True, - readonly=True) - - company_id = fields.Many2one('res.company', - related='move_line_id.company_id', - store=True, - readonly=True) - + date_due = fields.Date( + string='Due date', + required=True, + readonly=True, + states={'draft': [('readonly', False)]}, + ) + date_entry = fields.Date( + string='Entry date', + related='move_line_id.date', + store=True, + readonly=True, + ) + date_sent = fields.Date( + string='Sent date', + readonly=True, + states={'draft': [('readonly', False)]}, + ) + state = fields.Selection( + selection=[ + ('draft', 'Draft'), + ('ignored', 'Ignored'), + ('to_be_sent', 'Ready To Send'), + ('sent', 'Done'), + ('error', 'Error'), + ('email_error', 'Emailing Error'), + ], + string='State', + required=True, + readonly=True, + default='draft', + help="Draft lines need to be triaged.\n" + "Ignored lines are lines for which we do " + "not want to send something.\n" + "Draft and ignored lines will be " + "generated again on the next run.", + ) + channel = fields.Selection( + selection=[ + ('letter', 'Letter'), + ('email', 'Email'), + ], + string='Channel', + required=True, + readonly=True, + states={'draft': [('readonly', False)]}, + ) + invoice_id = fields.Many2one( + comodel_name='account.invoice', + string='Invoice', + readonly=True, + ) + partner_id = fields.Many2one( + comodel_name='res.partner', + string='Partner', + required=True, + ) + amount_due = fields.Float( + string='Due Amount Tax incl.', + required=True, + readonly=True, + ) + balance_due = fields.Float( + string='Due balance', + required=True, + readonly=True, + ) + mail_message_id = fields.Many2one( + comodel_name='mail.mail', + string='Sent Email', + readonly=True, + ) + move_line_id = fields.Many2one( + comodel_name='account.move.line', + string='Move line', + required=True, + readonly=True, + ) + account_id = fields.Many2one( + comodel_name='account.account', + related='move_line_id.account_id', + store=True, + readonly=True, + ) + currency_id = fields.Many2one( + comodel_name='res.currency', + related='move_line_id.currency_id', + store=True, + readonly=True, + ) + company_id = fields.Many2one( + comodel_name='res.company', + related='move_line_id.company_id', + store=True, + readonly=True, + ) # we can allow a manual change of policy in draft state - policy_level_id = fields.Many2one('credit.control.policy.level', - string='Overdue Level', - required=True, - readonly=True, - states={'draft': [('readonly', False)]}) - - policy_id = fields.Many2one('credit.control.policy', - related='policy_level_id.policy_id', - store=True, - readonly=True) - - level = fields.Integer('Level', - related='policy_level_id.level', - store=True, - readonly=True) - - manually_overridden = fields.Boolean(string='Manually overridden') - - run_id = fields.Many2one(comodel_name='credit.control.run', - string='Source') + policy_level_id = fields.Many2one( + comodel_name='credit.control.policy.level', + string='Overdue Level', + required=True, + readonly=True, + states={'draft': [('readonly', False)]}, + ) + policy_id = fields.Many2one( + comodel_name='credit.control.policy', + related='policy_level_id.policy_id', + store=True, + readonly=True, + ) + level = fields.Integer( + string='Level', + related='policy_level_id.level', + store=True, + readonly=True, + ) + manually_overridden = fields.Boolean( + string='Manually overridden', + ) + run_id = fields.Many2one( + comodel_name='credit.control.run', + string='Source', + ) @api.model def _prepare_from_move_line(self, move_line, level, controlling_date, diff --git a/account_credit_control/models/credit_control_policy.py b/account_credit_control/models/credit_control_policy.py index 252712672..99643c1da 100644 --- a/account_credit_control/models/credit_control_policy.py +++ b/account_credit_control/models/credit_control_policy.py @@ -1,9 +1,11 @@ # -*- coding: utf-8 -*- # Copyright 2012-2017 Camptocamp SA # Copyright 2017 Okia SPRL (https://okia.be) +# Copyright 2017 Tecnativa - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import _, api, fields, models -from odoo.exceptions import UserError, ValidationError + +from openerp import _, api, fields, models +from openerp.exceptions import UserError, ValidationError class CreditControlPolicy(models.Model): @@ -12,23 +14,32 @@ class CreditControlPolicy(models.Model): _name = "credit.control.policy" _description = """Define a reminder policy""" - name = fields.Char('Name', required=True) - level_ids = fields.One2many('credit.control.policy.level', - 'policy_id', - string='Policy Levels') - do_nothing = fields.Boolean('Do nothing', - help='For policies which should not ' - 'generate lines or are obsolete') - company_id = fields.Many2one('res.company', string='Company') + name = fields.Char( + required=True, + ) + level_ids = fields.One2many( + comodel_name='credit.control.policy.level', + inverse_name='policy_id', + string='Policy Levels', + ) + do_nothing = fields.Boolean( + help='For policies which should not generate lines or are obsolete', + ) + company_id = fields.Many2one( + comodel_name='res.company', + string='Company', + ) account_ids = fields.Many2many( - 'account.account', + comodel_name='account.account', string='Accounts', required=True, domain="[('internal_type', '=', 'receivable')]", help="This policy will be active only" " for the selected accounts", ) - active = fields.Boolean('Active', default=True) + active = fields.Boolean( + default=True, + ) @api.multi def _move_lines_domain(self, controlling_date): @@ -199,31 +210,54 @@ class CreditControlPolicyLevel(models.Model): _order = 'level' _description = """A credit control policy level""" - name = fields.Char(string='Name', required=True, translate=True) - policy_id = fields.Many2one('credit.control.policy', - string='Related Policy', - required=True) - level = fields.Integer(string='Level', required=True) - computation_mode = fields.Selection( - [('net_days', 'Due Date'), - ('end_of_month', 'Due Date, End Of Month'), - ('previous_date', 'Previous Reminder')], - string='Compute Mode', - required=True + name = fields.Char( + required=True, + translate=True, + ) + policy_id = fields.Many2one( + comodel_name='credit.control.policy', + string='Related Policy', + required=True, + ) + level = fields.Integer( + required=True, + ) + computation_mode = fields.Selection( + selection=[ + ('net_days', 'Due Date'), + ('end_of_month', 'Due Date, End Of Month'), + ('previous_date', 'Previous Reminder'), + ], + string='Compute Mode', + required=True, + ) + delay_days = fields.Integer( + string='Delay (in days)', + required=True, + ) + email_template_id = fields.Many2one( + comodel_name='mail.template', + string='Email Template', + required=True, + ) + channel = fields.Selection( + selection=[ + ('letter', 'Letter'), + ('email', 'Email'), + ], + string='Channel', + required=True, + ) + custom_text = fields.Text( + string='Custom Message', + required=True, + translate=True, + ) + custom_mail_text = fields.Html( + string='Custom Mail Message', + required=True, + translate=True, ) - delay_days = fields.Integer(string='Delay (in days)', required=True) - email_template_id = fields.Many2one('mail.template', - string='Email Template', - required=True) - channel = fields.Selection([('letter', 'Letter'), - ('email', 'Email')], - string='Channel', - required=True) - custom_text = fields.Text(string='Custom Message', - required=True, - translate=True) - custom_mail_text = fields.Html(string='Custom Mail Message', - required=True, translate=True) _sql_constraint = [('unique level', 'UNIQUE (policy_id, level)', diff --git a/account_credit_control/models/credit_control_run.py b/account_credit_control/models/credit_control_run.py index 4bd4ee2e1..8426580cf 100644 --- a/account_credit_control/models/credit_control_run.py +++ b/account_credit_control/models/credit_control_run.py @@ -1,11 +1,13 @@ # -*- coding: utf-8 -*- # Copyright 2012-2017 Camptocamp SA # Copyright 2017 Okia SPRL (https://okia.be) +# Copyright 2017 Tecnativa - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + import logging -from odoo import _, api, fields, models -from odoo.exceptions import UserError +from openerp import _, api, fields, models +from openerp.exceptions import UserError logger = logging.getLogger(__name__) @@ -17,16 +19,18 @@ class CreditControlRun(models.Model): _rec_name = 'date' _description = "Credit control line generator" - date = fields.Date(string='Controlling Date', required=True, - readonly=True, - states={'draft': [('readonly', False)]}) - @api.model def _get_policies(self): return self.env['credit.control.policy'].search([]) + date = fields.Date( + string='Controlling Date', + required=True, + readonly=True, + states={'draft': [('readonly', False)]}, + ) policy_ids = fields.Many2many( - 'credit.control.policy', + comodel_name='credit.control.policy', rel="credit_run_policy_rel", id1='run_id', id2='policy_id', string='Policies', @@ -34,21 +38,29 @@ class CreditControlRun(models.Model): states={'draft': [('readonly', False)]}, default=_get_policies, ) - report = fields.Html(string='Report', readonly=True, copy=False) - state = fields.Selection([('draft', 'Draft'), - ('done', 'Done')], - string='State', - required=True, - readonly=True, - default='draft') - + report = fields.Html( + string='Report', + readonly=True, + copy=False, + ) + state = fields.Selection( + selection=[ + ('draft', 'Draft'), + ('done', 'Done'), + ], + string='State', + required=True, + readonly=True, + default='draft', + ) line_ids = fields.One2many( comodel_name='credit.control.line', inverse_name='run_id', - string='Generated lines') + string='Generated lines', + ) manual_ids = fields.Many2many( - 'account.move.line', + comodel_name='account.move.line', rel="credit_runreject_rel", string='Lines to handle manually', help='If a credit control line has been generated' diff --git a/account_credit_control/models/mail_mail.py b/account_credit_control/models/mail_mail.py index 3b5f95acb..59eb7130d 100644 --- a/account_credit_control/models/mail_mail.py +++ b/account_credit_control/models/mail_mail.py @@ -1,13 +1,17 @@ # -*- coding: utf-8 -*- # Copyright 2012-2017 Camptocamp SA # Copyright 2017 Okia SPRL (https://okia.be) +# Copyright 2017 Tecnativa - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models + +from openerp import fields, models class Mail(models.Model): _inherit = 'mail.mail' # use HTML fields instead of text - body_html = fields.Html('Rich-text Contents', - help="Rich-text/HTML message") + body_html = fields.Html( + string='Rich-text Contents', + help="Rich-text/HTML message", + ) diff --git a/account_credit_control/models/res_company.py b/account_credit_control/models/res_company.py index 4ae6dc332..b5bbebd2a 100644 --- a/account_credit_control/models/res_company.py +++ b/account_credit_control/models/res_company.py @@ -1,21 +1,25 @@ # -*- coding: utf-8 -*- # Copyright 2012-2017 Camptocamp SA # Copyright 2017 Okia SPRL (https://okia.be) +# Copyright 2017 Tecnativa - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models + +from openerp import fields, models class ResCompany(models.Model): """ Add credit control parameters """ _inherit = 'res.company' - credit_control_tolerance = fields.Float(string='Credit Control Tolerance', - default=0.1) + credit_control_tolerance = fields.Float( + string='Credit Control Tolerance', + default=0.1, + ) # 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', - string='Credit Control Policy', - help="The Credit Control Policy used " - "on partners by default. " - "This setting can be overridden" - " on partners or invoices.") + credit_policy_id = fields.Many2one( + comodel_name='credit.control.policy', + string='Credit Control Policy', + help="The Credit Control Policy used on partners by default. " + "This setting can be overridden on partners or invoices.", + ) diff --git a/account_credit_control/models/res_partner.py b/account_credit_control/models/res_partner.py index b43e43d15..e12a3e143 100644 --- a/account_credit_control/models/res_partner.py +++ b/account_credit_control/models/res_partner.py @@ -1,9 +1,11 @@ # -*- coding: utf-8 -*- # Copyright 2012-2017 Camptocamp SA # Copyright 2017 Okia SPRL (https://okia.be) +# Copyright 2017 Tecnativa - Vicent Cubells # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import api, fields, models -from odoo.exceptions import UserError, ValidationError + +from openerp import api, fields, models +from openerp.exceptions import UserError, ValidationError class ResPartner(models.Model): @@ -14,7 +16,7 @@ class ResPartner(models.Model): _inherit = "res.partner" credit_policy_id = fields.Many2one( - 'credit.control.policy', + comodel_name='credit.control.policy', string='Credit Control Policy', domain="[('account_ids', 'in', property_account_receivable_id)]", help="The Credit Control Policy used for this " @@ -22,10 +24,12 @@ class ResPartner(models.Model): "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) + credit_control_line_ids = fields.One2many( + comodel_name='credit.control.line', + inverse_name='invoice_id', + string='Credit Control Lines', + readonly=True, + ) @api.constrains('credit_policy_id', 'property_account_receivable_id') def _check_credit_policy(self): diff --git a/account_credit_control/scenarios/features/00_credit_control_param.feature b/account_credit_control/scenarios/features/00_credit_control_param.feature deleted file mode 100644 index c02bb6384..000000000 --- a/account_credit_control/scenarios/features/00_credit_control_param.feature +++ /dev/null @@ -1,61 +0,0 @@ -############################################################################### -# -# OERPScenario, OpenERP Functional Tests -# Copyright 2009 Camptocamp SA -# -# -# The base scenario for the finance data must be executed before this -# one. The finance scenario is included in the oerpscenario base and -# the tag to run it is: @base_finance -# -# -############################################################################## -############################################################################## -# Branch # Module # Processes # System -@account_credit_control @account_credit_control_setup - -Feature: General parameters in order to test the credit control module - - - @account_credit_control_setup_install_modules - Scenario: MODULES INSTALLATION - - Given I do not want all demo data to be loaded on install - Given I install the required modules with dependencies: - | name | - | account_credit_control | - - Then my modules should have been installed and models reloaded - - - @deactivate_journal_control - Scenario: Journal setup to avoid unfixed voucher bug - Given I execute the SQL commands - """ - UPDATE account_journal SET allow_date = false; - """ - - @email_params_mailtrap - Scenario: E-MAIL PARAMS WITH EMAIL EATER (http://mailtrap.io) - Given I need a "ir.mail_server" with name: mailstrap_testings - And having: - | name | value | - | smtp_host | mailtrap.io | - | sequence | 1 | - | smtp_port | 2525 | - | smtp_user | camptocamp1 | - | smtp_pass | 20468fa2f2879cb9 | - - @account_credit_control_policy_2_times - Scenario: Configure the credit control policy in 2 times - Given I configure the following accounts on the credit control policy with oid: "account_credit_control.credit_control_2_time": - | account code | - | 4111 | - | 4112 | - - @account_credit_control_policy_3_times - Scenario: Configure the credit control policy in 3 times - Given I configure the following accounts on the credit control policy with oid: "account_credit_control.credit_control_3_time": - | account code | - | 4111 | - | 4112 | diff --git a/account_credit_control/scenarios/features/01_credit_control_partners.feature b/account_credit_control/scenarios/features/01_credit_control_partners.feature deleted file mode 100644 index 9edb192c7..000000000 --- a/account_credit_control/scenarios/features/01_credit_control_partners.feature +++ /dev/null @@ -1,105 +0,0 @@ -############################################################################### -# -# OERPScenario, OpenERP Functional Tests -# Copyright 2009 Camptocamp SA -# -############################################################################## -############################################################################## -# Branch # Module # Processes # System -@account_credit_control @account_credit_control_add_policy @account_credit_control_setup - -Feature: I add policy to partners already created - @account_credit_control_partner_1 - Scenario: Partner_1 - Given I need a "res.partner" with oid: scen.partner_1 - And having: - | name | value | - | name | partner_1 | - | credit_policy_id | by name: No follow | - - @account_credit_control_customer_1 - Scenario: Customer_1 - Given I need a "res.partner" with oid: scen.customer_1 - And having: - | name | value | - | name | customer_1 | - | credit_policy_id | by name: 2 time policy | - - @account_credit_control_customer_2 - Scenario: Customer_2 - Given I need a "res.partner" with oid: scen.customer_2 - And having: - | name | value | - | name | customer_2 | - | credit_policy_id | by name: 2 time policy | - - @account_credit_control_customer_3 - Scenario: Customer_3 - Given I need a "res.partner" with oid: scen.customer_3 - And having: - | name | value | - | name | customer_3 | - | credit_policy_id | by name: 2 time policy | - - @account_credit_control_customer_4 - Scenario: Customer_4 - Given I need a "res.partner" with oid: scen.customer_4 - And having: - | name | value | - | name | customer_4 | - # the credit policy must be 3 time policy (inherited from company) - - @account_credit_control_customer_5 - Scenario: Customer_5 - Given I need a "res.partner" with oid: scen.customer_5 - And having: - | name | value | - | name | customer_5_usd | - | credit_policy_id | by name: 3 time policy | - - @account_credit_control_customer_6 - Scenario: Customer_6 - Given I need a "res.partner" with oid: scen.customer_6 - And having: - | name | value | - | name | customer_6 | - | credit_policy_id | by name: 3 time policy | - - @account_credit_control_customer_partial_pay - Scenario: A customer who like to do partial payments - Given I need a "res.partner" with oid: scen.customer_partial_pay - And having: - | name | value | - | name | Scrooge McDuck | - | zip | 1000 | - | city | Duckburg | - | email | openerp@locahost.dummy | - | phone | | - | street | Duckstreet | - - - @account_credit_control_customer_multiple_payterm - Scenario: A customer who use payment terms in 2 times - Given I need a "res.partner" with oid: scen.customer_multiple_payterm - And having: - | name | value | - | name | Donald Duck | - | zip | 1100 | - | city | Duckburg | - | email | openerp@locahost.dummy | - | phone | | - | street | Duckstreet | - - @account_credit_control_customer_multiple_payterm2 - Scenario: A customer who use payment terms in 2 times - Given I need a "res.partner" with oid: scen.customer_multiple_payterm2 - And having: - | name | value | - | name | Gus Goose | - | type | default | - | name | Gus Goose | - | zip | 1100 | - | city | Duckburg | - | email | openerp@locahost.dummy | - | phone | | - | street | Duckstreet | diff --git a/account_credit_control/scenarios/features/02_credit_control_invoices.feature b/account_credit_control/scenarios/features/02_credit_control_invoices.feature deleted file mode 100644 index a153d39f7..000000000 --- a/account_credit_control/scenarios/features/02_credit_control_invoices.feature +++ /dev/null @@ -1,588 +0,0 @@ -############################################################################### -# -# OERPScenario, OpenERP Functional Tests -# Copyright 2012-2014 Camptocamp SA -# Author Nicolas Bessi -############################################################################## - - -@account_credit_control @account_credit_control_setup @account_credit_control_base_data @account_credit_control_invoices - -Feature: Invoices creation - -##################### Partner 1 ########################################################## - - @inv_1 - Scenario: Create invoice 1 - - Given I need a "account.invoice" with oid: scen._inv_1 - And having: - | name | value | - | name | SI_1 | - | date_invoice | 2013-01-15 | - | partner_id | by oid: scen.partner_1 | - | account_id | by name: Debtors | - | journal_id | by name: Sales | - | currency_id | by name: EUR | - | payment_term | by name: 30 Days End of Month | - | type | out_invoice | - - - Given I need a "account.invoice.line" with oid: scen._inv1_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 1000 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_1 | - Given I find a "account.invoice" with oid: scen._inv_1 - - Given I need a "account.invoice.line" with oid: scen._inv1_line2 - And having: - | name | value | - | name | invoice line 2 | - | quantity | 1 | - | price_unit | 1000 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_1 | - Given I find a "account.invoice" with oid: scen._inv_1 - And I open the credit invoice - - @inv_2 - Scenario: Create invoice 2 - Given I need a "account.invoice" with oid: scen._inv_2 - And having: - | name | value | - | name | SI_2 | - | date_invoice | 2013-02-15 | - | partner_id | by oid: scen.partner_1 | - | account_id | by name: Debtors | - | journal_id | by name: Sales | - | currency_id | by name: USD | - | payment_term | by name: 30 Days End of Month | - | type | out_invoice | - - - Given I need a "account.invoice.line" with oid: scen._inv2_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 1200 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_2 | - Given I find a "account.invoice" with oid: scen._inv_2 - And I open the credit invoice - - - @inv_3 - Scenario: Create invoice 3 - Given I need a "account.invoice" with oid: scen._inv_3 - And having: - | name | value | - | name | SI_3 | - | date_invoice | 2013-03-15 | - | partner_id | by oid: scen.partner_1 | - | account_id | by name: Debtors | - | journal_id | by name: Sales | - | currency_id | by name: USD | - | payment_term | by name: 30 Days End of Month | - | type | out_invoice | - - - Given I need a "account.invoice.line" with oid: scen._inv3_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 1500 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_3 | - Given I find a "account.invoice" with oid: scen._inv_3 - And I open the credit invoice - -##################### Customer 2 ########################################################## - - @inv_4 - Scenario: Create invoice 4 - - Given I need a "account.invoice" with oid: scen._inv_4 - And having: - | name | value | - | name | SI_4 | - | date_invoice | 2013-01-18 | - | partner_id | by oid: scen.customer_2 | - | account_id | by name: Debtors | - | journal_id | by name: Sales | - | currency_id | by name: EUR | - | payment_term | by name: 30 Days End of Month | - | type | out_invoice | - - - Given I need a "account.invoice.line" with oid: scen._inv4_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 1000 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_4 | - Given I find a "account.invoice" with oid: scen._inv_4 - And I open the credit invoice - - - - @inv_5 - Scenario: Create invoice 5 - Given I need a "account.invoice" with oid: scen._inv_5 - And having: - | name | value | - | name | SI_5 | - | date_invoice | 2013-02-15 | - | partner_id | by oid: scen.customer_2 | - | account_id | by name: Debtors | - | journal_id | by name: Sales | - | currency_id | by name: USD | - | payment_term | by name: 30 Days End of Month | - | type | out_invoice | - - - Given I need a "account.invoice.line" with oid: scen._inv5_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 1200 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_5 | - Given I find a "account.invoice" with oid: scen._inv_5 - And I open the credit invoice - - - @inv_6 - Scenario: Create invoice 6 - Given I need a "account.invoice" with oid: scen._inv_6 - And having: - | name | value | - | name | SI_6 | - | date_invoice | 2013-03-15 | - | partner_id | by oid: scen.customer_2 | - | account_id | by name: Debtors | - | journal_id | by name: Sales | - | currency_id | by name: USD | - | payment_term | by name: 30 Days End of Month | - | type | out_invoice | - - - Given I need a "account.invoice.line" with oid: scen._inv6_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 1500 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_6 | - Given I find a "account.invoice" with oid: scen._inv_6 - And I open the credit invoice - -##################### Customer 3 ########################################################## - - @inv_7 - Scenario: Create invoice 7 - - Given I need a "account.invoice" with oid: scen._inv_7 - And having: - | name | value | - | name | SI_7 | - | date_invoice | 2013-01-18 | - | partner_id | by oid: scen.customer_3 | - | account_id | by name: Debtors | - | journal_id | by name: Sales | - | currency_id | by name: EUR | - | payment_term | by name: 30 Net Days | - | type | out_invoice | - - - Given I need a "account.invoice.line" with oid: scen._inv7_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 1000 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_7 | - Given I find a "account.invoice" with oid: scen._inv_7 - And I open the credit invoice - - - - @inv_8 - Scenario: Create invoice 8 - Given I need a "account.invoice" with oid: scen._inv_8 - And having: - | name | value | - | name | SI_8 | - | date_invoice | 2013-02-15 | - | partner_id | by oid: scen.customer_3 | - | account_id | by name: Debtors | - | journal_id | by name: Sales | - | currency_id | by name: USD | - | payment_term | by name: 30 Net Days | - | type | out_invoice | - - - Given I need a "account.invoice.line" with oid: scen._inv8_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 1200 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_8 | - Given I find a "account.invoice" with oid: scen._inv_8 - And I open the credit invoice - - - @inv_9 - Scenario: Create invoice 9 - Given I need a "account.invoice" with oid: scen._inv_9 - And having: - | name | value | - | name | SI_9 | - | date_invoice | 2013-03-15 | - | partner_id | by oid: scen.customer_3 | - | account_id | by name: Debtors | - | journal_id | by name: Sales | - | currency_id | by name: USD | - | payment_term | by name: 30 Net Days | - | type | out_invoice | - - - Given I need a "account.invoice.line" with oid: scen._inv9_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 1500 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_9 | - Given I find a "account.invoice" with oid: scen._inv_9 - And I open the credit invoice - -##################### Customer 4 ########################################################## - - @inv_10 - Scenario: Create invoice 10 - - Given I need a "account.invoice" with oid: scen._inv_10 - And having: - | name | value | - | name | SI_10 | - | date_invoice | 2013-01-18 | - | partner_id | by oid: scen.customer_4 | - | account_id | by name: Debtors | - | journal_id | by name: Sales | - | currency_id | by name: EUR | - | payment_term | by name: 30% Advance End 30 Days | - | type | out_invoice | - - - Given I need a "account.invoice.line" with oid: scen._inv10_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 1000 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_10 | - Given I find a "account.invoice" with oid: scen._inv_10 - And I open the credit invoice - - - - @inv_11 - Scenario: Create invoice 11 - Given I need a "account.invoice" with oid: scen._inv_11 - And having: - | name | value | - | name | SI_11 | - | date_invoice | 2013-02-15 | - | partner_id | by oid: scen.customer_4 | - | account_id | by name: Debtors | - | journal_id | by name: Sales | - | currency_id | by name: USD | - | payment_term | by name: 30% Advance End 30 Days | - | type | out_invoice | - - - Given I need a "account.invoice.line" with oid: scen._inv11_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 1200 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_11 | - Given I find a "account.invoice" with oid: scen._inv_11 - And I open the credit invoice - - - @inv_12 - Scenario: Create invoice 12 - Given I need a "account.invoice" with oid: scen._inv_12 - And having: - | name | value | - | name | SI_12 | - | date_invoice | 2013-03-15 | - | partner_id | by oid: scen.customer_4 | - | account_id | by name: Debtors | - | journal_id | by name: Sales | - | currency_id | by name: USD | - | payment_term | by name: 30% Advance End 30 Days | - | type | out_invoice | - - - Given I need a "account.invoice.line" with oid: scen._inv12_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 1500 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_12 | - Given I find a "account.invoice" with oid: scen._inv_12 - And I open the credit invoice - -##################### Customer 5 ########################################################## - - @inv_13 - Scenario: Create invoice 13 - - Given I need a "account.invoice" with oid: scen._inv_13 - And having: - | name | value | - | name | SI_13 | - | date_invoice | 2013-01-18 | - | partner_id | by oid: scen.customer_5 | - | account_id | by name: Debtors USD | - | journal_id | by name: Sales | - | currency_id | by name: USD | - | payment_term | by name: 30 Net Days | - | type | out_invoice | - - - Given I need a "account.invoice.line" with oid: scen._inv13_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 1000 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_13 | - Given I find a "account.invoice" with oid: scen._inv_13 - And I open the credit invoice - - - - @inv_14 - Scenario: Create invoice 14 - Given I need a "account.invoice" with oid: scen._inv_14 - And having: - | name | value | - | name | SI_14 | - | date_invoice | 2013-02-15 | - | partner_id | by oid: scen.customer_5 | - | account_id | by name: Debtors USD | - | journal_id | by name: Sales | - | currency_id | by name: USD | - | payment_term | by name: 30 Net Days | - | type | out_invoice | - - - Given I need a "account.invoice.line" with oid: scen._inv14_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 1200 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_14 | - Given I find a "account.invoice" with oid: scen._inv_14 - And I open the credit invoice - - - @inv_15 - Scenario: Create invoice 15 - Given I need a "account.invoice" with oid: scen._inv_15 - And having: - | name | value | - | name | SI_15 | - | date_invoice | 2013-03-15 | - | partner_id | by oid: scen.customer_5 | - | account_id | by name: Debtors USD | - | journal_id | by name: Sales | - | currency_id | by name: USD | - | payment_term | by name: 30 Net Days | - | type | out_invoice | - - - Given I need a "account.invoice.line" with oid: scen._inv15_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 1500 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_15 | - Given I find a "account.invoice" with oid: scen._inv_15 - And I open the credit invoice - - @inv_16 - Scenario: Create invoice 16 - Given I need a "account.invoice" with oid: scen._inv_16 - And having: - | name | value | - | name | SI_16 | - | date_invoice | 2013-03-15 | - | partner_id | by oid: scen.customer_4 | - | account_id | by name: Debtors | - | journal_id | by name: Sales | - | currency_id | by name: EUR | - | payment_term | by name: 30 Net Days | - | type | out_invoice | - - And I need a "account.invoice.line" with oid: scen._inv16_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 1500 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_16 | - Then I find a "account.invoice" with oid: scen._inv_16 - And I open the credit invoice - - @inv_17 - Scenario: Create invoice 17 - Given I need a "account.invoice" with oid: scen._inv_17 - And having: - | name | value | - | name | SI_17 | - | date_invoice | 2013-03-15 | - | partner_id | by oid: scen.customer_partial_pay | - | account_id | by name: Debtors | - | journal_id | by name: Sales | - | currency_id | by name: EUR | - | payment_term | by name: 30 Net Days | - | type | out_invoice | - - And I need a "account.invoice.line" with oid: scen._inv17_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 1500 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_17 | - Then I find a "account.invoice" with oid: scen._inv_17 - And I open the credit invoice - - @inv_18 - Scenario: Create invoice 18 - Given I need a "account.invoice" with oid: scen._inv_18 - And having: - | name | value | - | name | SI_18 | - | date_invoice | 2013-03-15 | - | partner_id | by oid: scen.customer_multiple_payterm | - | account_id | by name: Debtors | - | journal_id | by name: Sales | - | currency_id | by name: EUR | - | payment_term | by name: 30% Advance End 30 Days | - | type | out_invoice | - - And I need a "account.invoice.line" with oid: scen._inv18_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 1500 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_18 | - Then I find a "account.invoice" with oid: scen._inv_18 - And I open the credit invoice - - @inv_19 - Scenario: Create invoice 19 - Given I need a "account.invoice" with oid: scen._inv_19 - And having: - | name | value | - | name | SI_19 | - | date_invoice | 2013-03-15 | - | partner_id | by oid: scen.customer_multiple_payterm2 | - | account_id | by name: Debtors | - | journal_id | by name: Sales | - | currency_id | by name: EUR | - | payment_term | by name: 30% Advance End 30 Days | - | type | out_invoice | - And I need a "account.invoice.line" with oid: scen._inv19_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 1500 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_19 | - Then I find a "account.invoice" with oid: scen._inv_19 - And I open the credit invoice - - @inv_20 - Scenario: Create invoice 20 - Given I need a "account.invoice" with oid: scen._inv_20 - And having: - | name | value | - | name | SI_20_test_tolerance | - | date_invoice | 2013-03-23 | - | partner_id | by oid: scen.customer_6 | - | account_id | by name: Debtors | - | journal_id | by name: Sales | - | currency_id | by name: EUR | - | payment_term | by name: 30 Net Days | - | type | out_invoice | - - And I need a "account.invoice.line" with oid: scen._inv20_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 0.09 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_20 | - Then I find a "account.invoice" with oid: scen._inv_20 - And I open the credit invoice - - @inv_20 - Scenario: Create invoice 21 (this receivable account must not be chased-> no credit line creation) - Given I need a "account.invoice" with oid: scen._inv_21 - And having: - | name | value | - | name | SI_21_test_receivable_account_excluded | - | date_invoice | 2013-03-25 | - | partner_id | by oid: scen.customer_6 | - | account_id | by name: Debtors GBP | - | journal_id | by name: Sales | - | currency_id | by name: EUR | - | payment_term | by name: 30 Net Days | - | type | out_invoice | - - And I need a "account.invoice.line" with oid: scen._inv21_line1 - And having: - | name | value | - | name | invoice line 1 | - | quantity | 1 | - | price_unit | 6666 | - | account_id | by name: Sales | - | invoice_id | by oid: scen._inv_21 | - Then I find a "account.invoice" with oid: scen._inv_21 - And I open the credit invoice diff --git a/account_credit_control/scenarios/features/03_credit_control_run_jan.feature b/account_credit_control/scenarios/features/03_credit_control_run_jan.feature deleted file mode 100644 index 9839f9bf1..000000000 --- a/account_credit_control/scenarios/features/03_credit_control_run_jan.feature +++ /dev/null @@ -1,29 +0,0 @@ -############################################################################### -# -# OERPScenario, OpenERP Functional Tests -# Copyright 2012-2014 Camptocamp SA -# Author Nicolas Bessi -############################################################################## - -# Features Generic tags (none for all) -############################################################################## - -@account_credit_control @account_credit_control_run @account_credit_control_run_jan - -Feature: Ensure that mail credit line generation first pass is correct - - Scenario: clean data - Given I clean all the credit lines - #Given I unreconcile and clean all move line - - @account_credit_control_run_month - Scenario: Create run - Given I need a "credit.control.run" with oid: credit_control.run1 - And having: - | name | value | - | date | 2013-01-31 | - When I launch the credit run - Then my credit run should be in state "done" - And the generated credit lines should have the following values: - | balance | date due | account | policy | date | partner | channel | level | move line | policy level | state | amount due | currency | - | 300 | 2013-01-18 | Debtors | 3 time policy | 2013-01-31 | customer_4 | email | 1 | SI_10 | 10 days net | draft | 300 | | diff --git a/account_credit_control/scenarios/features/04_credit_control_run_feb.feature b/account_credit_control/scenarios/features/04_credit_control_run_feb.feature deleted file mode 100644 index f9b1865ca..000000000 --- a/account_credit_control/scenarios/features/04_credit_control_run_feb.feature +++ /dev/null @@ -1,33 +0,0 @@ -############################################################################### -# -# OERPScenario, OpenERP Functional Tests -# Copyright 2012-2014 Camptocamp SA -# Author Nicolas Bessi -############################################################################## - -# Features Generic tags (none for all) -############################################################################## - -@account_credit_control @account_credit_control_run @account_credit_control_run_feb - -Feature: Ensure that mail credit line generation first pass is correct - - @account_credit_control_mark - Scenario: mark lines - Given there is "draft" credit lines - And I mark all draft email to state "to_be_sent" - Then the draft line should be in state "to_be_sent" - - @account_credit_control_run_month - Scenario: Create run - Given I need a "credit.control.run" with oid: credit_control.run2 - And having: - | name | value | - | date | 2013-02-28 | - When I launch the credit run - Then my credit run should be in state "done" - And the generated credit lines should have the following values: - | balance | date due | account | policy | date | partner | channel | level | move line | policy level | state | amount due | currency | - | 360 | 2013-02-15 | Debtors | 3 time policy | 2013-02-28 | customer_4 | email | 1 | SI_11 | 10 days net | draft | 360 | USD | - | 1000 | 2013-02-17 | Debtors USD | 3 time policy | 2013-02-28 | customer_5_usd | email | 1 | SI_13 | 10 days net | draft | 1000 | USD | - | 300 | 2013-01-18 | Debtors | 3 time policy | 2013-02-28 | customer_4 | email | 2 | SI_10 | 30 days end of month | draft | 300 | | diff --git a/account_credit_control/scenarios/features/05_credit_control_run_mar.feature b/account_credit_control/scenarios/features/05_credit_control_run_mar.feature deleted file mode 100644 index af5199b10..000000000 --- a/account_credit_control/scenarios/features/05_credit_control_run_mar.feature +++ /dev/null @@ -1,45 +0,0 @@ -############################################################################### -# -# OERPScenario, OpenERP Functional Tests -# Copyright 2012-2014 Camptocamp SA -# Author Nicolas Bessi -############################################################################## - -# Features Generic tags (none for all) -############################################################################## - -@account_credit_control @account_credit_control_run @account_credit_control_run_mar - -Feature: Ensure that email credit line generation first pass is correct - - @account_credit_control_mark - Scenario: mark lines - Given there is "draft" credit lines - And I mark all draft email to state "to_be_sent" - Then the draft line should be in state "to_be_sent" - - @pay_invoice_si_19_part1 - Scenario: I pay a part of the first part of the invoice SI 19, - Given I pay 300.0 on the invoice "SI_19" - Then My invoice "SI_19" is in state "open" reconciled with a residual amount of "1200.0" - - @account_credit_control_run_month_mar - Scenario: Create run - Given I need a "credit.control.run" with oid: credit_control.run3 - And having: - | name | value | - | date | 2013-03-31 | - When I launch the credit run - Then my credit run should be in state "done" - And the generated credit lines should have the following values: - | balance | date due | account | policy | date | partner | channel | level | move line | policy level | state | amount due | currency | - | 1000 | 2013-02-28 | Debtors | 2 time policy | 2013-03-31 | customer_2 | email | 1 | SI_4 | 30 days end of month | draft | 1000 | | - | 1000 | 2013-02-17 | Debtors | 2 time policy | 2013-03-31 | customer_3 | email | 1 | SI_7 | 30 days end of month | draft | 1000 | | - | 700 | 2013-02-28 | Debtors | 3 time policy | 2013-03-31 | customer_4 | email | 1 | SI_10 | 10 days net | draft | 700 | | - | 449.99 | 2013-03-15 | Debtors | 3 time policy | 2013-03-31 | customer_4 | email | 1 | SI_12 | 10 days net | draft | 449.99 | USD | - | 1200 | 2013-03-17 | Debtors USD | 3 time policy | 2013-03-31 | customer_5_usd | email | 1 | SI_14 | 10 days net | draft | 1200 | USD | - | 360 | 2013-02-15 | Debtors | 3 time policy | 2013-03-31 | customer_4 | email | 2 | SI_11 | 30 days end of month | draft | 360 | USD | - | 1000 | 2013-02-17 | Debtors USD | 3 time policy | 2013-03-31 | customer_5_usd | email | 2 | SI_13 | 30 days end of month | draft | 1000 | USD | - | 300 | 2013-01-18 | Debtors | 3 time policy | 2013-03-31 | customer_4 | letter | 3 | SI_10 | 10 days last reminder | draft | 300 | | - | 450 | 2013-03-15 | Debtors | 3 time policy | 2013-03-31 | Donald Duck | email | 1 | SI_18 | 10 days net | draft | 450 | | - | 150 | 2013-03-15 | Debtors | 3 time policy | 2013-03-31 | Gus Goose | email | 1 | SI_19 | 10 days net | draft | 450 | | diff --git a/account_credit_control/scenarios/features/06_credit_control_run_apr.feature b/account_credit_control/scenarios/features/06_credit_control_run_apr.feature deleted file mode 100644 index 635bfeee7..000000000 --- a/account_credit_control/scenarios/features/06_credit_control_run_apr.feature +++ /dev/null @@ -1,44 +0,0 @@ -############################################################################### -# -# OERPScenario, OpenERP Functional Tests -# Copyright 2012-2014 Camptocamp SA -# Author Nicolas Bessi -############################################################################## - -# Features Generic tags (none for all) -############################################################################## - -@account_credit_control @account_credit_control_run @account_credit_control_run_apr - -Feature: Ensure that email credit line generation first pass is correct - - @account_credit_control_mark - Scenario: mark lines - Given there is "draft" credit lines - And I mark all draft email to state "to_be_sent" - Then the draft line should be in state "to_be_sent" - - @account_credit_control_run_month - Scenario: Create run - Given I need a "credit.control.run" with oid: credit_control.run4 - And having: - | name | value | - | date | 2013-04-30 | - - When I launch the credit run - Then my credit run should be in state "done" - And the generated credit lines should have the following values: - | balance | date due | account | policy | date | partner | channel | level | move line | policy level | state | amount due | currency | - | 360 | 2013-02-15 | Debtors | 3 time policy | 2013-04-30 | customer_4 | letter | 3 | SI_11 | 10 days last reminder | draft | 360 | USD | - | 1200 | 2013-03-31 | Debtors | 2 time policy | 2013-04-30 | customer_2 | email | 1 | SI_5 | 30 days end of month | draft | 1200 | USD | - | 1200 | 2013-03-17 | Debtors | 2 time policy | 2013-04-30 | customer_3 | email | 1 | SI_8 | 30 days end of month | draft | 1200 | USD | - | 700 | 2013-02-28 | Debtors | 3 time policy | 2013-04-30 | customer_4 | email | 2 | SI_10 | 30 days end of month | draft | 700 | | - | 840 | 2013-03-31 | Debtors | 3 time policy | 2013-04-30 | customer_4 | email | 1 | SI_11 | 10 days net | draft | 840 | USD | - | 449.99 | 2013-03-15 | Debtors | 3 time policy | 2013-04-30 | customer_4 | email | 2 | SI_12 | 30 days end of month | draft | 449.99 | USD | - | 1500 | 2013-04-14 | Debtors USD | 3 time policy | 2013-04-30 | customer_5_usd | email | 1 | SI_15 | 10 days net | draft | 1500 | USD | - | 1200 | 2013-03-17 | Debtors USD | 3 time policy | 2013-04-30 | customer_5_usd | email | 2 | SI_14 | 30 days end of month | draft | 1200 | USD | - | 1500 | 2013-04-14 | Debtors USD | 3 time policy | 2013-04-30 | customer_5_usd | email | 1 | SI_15 | 10 days net | draft | 1500 | USD | - | 1500 | 2013-04-14 | Debtors | 3 time policy | 2013-04-30 | customer_4 | email | 1 | SI_16 | 10 days net | draft | 1500 | | - | 1500 | 2013-04-14 | Debtors | 3 time policy | 2013-04-30 | Scrooge McDuck | email | 1 | SI_17 | 10 days net | draft | 1500 | | - | 450 | 2013-03-15 | Debtors | 3 time policy | 2013-04-30 | Donald Duck | email | 2 | SI_18 | 30 days end of month | draft | 450 | | - | 150 | 2013-03-15 | Debtors | 3 time policy | 2013-04-30 | Gus Goose | email | 2 | SI_19 | 30 days end of month | draft | 450 | | diff --git a/account_credit_control/scenarios/features/07_credit_control_run_may.feature b/account_credit_control/scenarios/features/07_credit_control_run_may.feature deleted file mode 100644 index 2b73fa660..000000000 --- a/account_credit_control/scenarios/features/07_credit_control_run_may.feature +++ /dev/null @@ -1,59 +0,0 @@ -############################################################################### -# -# OERPScenario, OpenERP Functional Tests -# Copyright 2012-2014 Camptocamp SA -# Author Nicolas Bessi -############################################################################## - -# Features Generic tags (none for all) -############################################################################## - -@account_credit_control @account_credit_control_run @account_credit_control_run_may - -Feature: Ensure that email credit line generation first pass is correct - - @account_credit_control_mark - Scenario: mark lines - Given there is "draft" credit lines - And I mark all draft email to state "to_be_sent" - Then the draft line should be in state "to_be_sent" - - @pay_invoice_si_16 - Scenario: I pay entirely the invoice SI 16, so it should no longer appear in the credit control lines - Given I pay the full amount on the invoice "SI_16" - Then My invoice "SI_16" is in state "paid" reconciled with a residual amount of "0.0" - - @pay_invoice_si_17 - Scenario: I pay entirely the invoice SI 17, so it should no longer appear in the credit control lines - Given I pay 1000.0 on the invoice "SI_17" - Then My invoice "SI_17" is in state "open" reconciled with a residual amount of "500.0" - - @pay_invoice_si_18_part1 - Scenario: I pay the first part of the invoice SI 18, so it should no longer appear in the credit control lines however, the second move lines should still appears - Given I pay 450.0 on the invoice "SI_18" - Then My invoice "SI_18" is in state "open" reconciled with a residual amount of "1050.0" - - @account_credit_control_run_month - Scenario: Create run - Given I need a "credit.control.run" with oid: credit_control.run5 - And having: - | name | value | - | date | 2013-05-31 | - When I launch the credit run - Then my credit run should be in state "done" - And the generated credit lines should have the following values: - | balance | date due | account | policy | date | partner | channel | level | move line | policy level | state | amount due | currency | - | 1500 | 2013-04-30 | Debtors | 2 time policy | 2013-05-31 | customer_2 | email | 1 | SI_6 | 30 days end of month | draft | 1500 | USD | - | 1000 | 2013-02-28 | Debtors | 2 time policy | 2013-05-31 | customer_2 | letter | 2 | SI_4 | 60 days last reminder | draft | 1000 | | - | 1000 | 2013-02-17 | Debtors | 2 time policy | 2013-05-31 | customer_3 | letter | 2 | SI_7 | 60 days last reminder | draft | 1000 | | - | 1500 | 2013-04-14 | Debtors | 2 time policy | 2013-05-31 | customer_3 | email | 1 | SI_9 | 30 days end of month | draft | 1500 | | - | 840 | 2013-03-31 | Debtors | 3 time policy | 2013-05-31 | customer_4 | email | 2 | SI_11 | 30 days end of month | draft | 840 | USD | - | 1500 | 2013-04-14 | Debtors USD | 3 time policy | 2013-05-31 | customer_5_usd | email | 2 | SI_15 | 30 days end of month | draft | 1500 | USD | - | 700 | 2013-02-28 | Debtors | 3 time policy | 2013-05-31 | customer_4 | letter | 3 | SI_10 | 10 days last reminder | draft | 700 | | - | 449.99 | 2013-03-15 | Debtors | 3 time policy | 2013-05-31 | customer_4 | letter | 3 | SI_12 | 10 days last reminder | draft | 449.99 | USD | - | 1050.01 | 2013-04-30 | Debtors | 3 time policy | 2013-05-31 | customer_4 | email | 1 | SI_12 | 10 days net | draft | 1050.01 | USD | - | 1200 | 2013-03-17 | Debtors USD | 3 time policy | 2013-05-31 | customer_5_usd | letter | 3 | SI_14 | 10 days last reminder | draft | 1200 | USD | - | 500 | 2013-04-14 | Debtors | 3 time policy | 2013-05-31 | Scrooge McDuck | email | 2 | SI_17 | 30 days end of month | draft | 1500 | | - | 1050 | 2013-04-30 | Debtors | 3 time policy | 2013-05-31 | Donald Duck | email | 1 | SI_18 | 10 days net | draft | 1050 | | - | 150 | 2013-03-15 | Debtors | 3 time policy | 2013-05-31 | Gus Goose | letter | 3 | SI_19 | 10 days last reminder | draft | 450 | | - | 1050 | 2013-04-30 | Debtors | 3 time policy | 2013-05-31 | Gus Goose | email | 1 | SI_19 | 10 days net | draft | 1050 | | diff --git a/account_credit_control/scenarios/features/08_credit_control_run_jun.feature b/account_credit_control/scenarios/features/08_credit_control_run_jun.feature deleted file mode 100644 index 75c7df7f5..000000000 --- a/account_credit_control/scenarios/features/08_credit_control_run_jun.feature +++ /dev/null @@ -1,38 +0,0 @@ -############################################################################### -# -# OERPScenario, OpenERP Functional Tests -# Copyright 2012-2014 Camptocamp SA -# Author Nicolas Bessi -############################################################################## - -# Features Generic tags (none for all) -############################################################################## - -@account_credit_control @account_credit_control_run @account_credit_control_run_jun - -Feature: Ensure that email credit line generation first pass is correct - - @account_credit_control_mark - Scenario: mark lines - Given there is "draft" credit lines - And I mark all draft email to state "to_be_sent" - Then the draft line should be in state "to_be_sent" - - @account_credit_control_run_month - Scenario: Create run - Given I need a "credit.control.run" with oid: credit_control.run6 - And having: - | name | value | - | date | 2013-06-30 | - When I launch the credit run - Then my credit run should be in state "done" - And the generated credit lines should have the following values: - | balance | date due | account | policy | date | partner | channel | level | move line | policy level | state | amount due | currency | - | 1200 | 2013-03-31 | Debtors | 2 time policy | 2013-06-30 | customer_2 | letter | 2 | SI_5 | 60 days last reminder | draft | 1200 | USD | - | 1200 | 2013-03-17 | Debtors | 2 time policy | 2013-06-30 | customer_3 | letter | 2 | SI_8 | 60 days last reminder | draft | 1200 | USD | - | 1050.01 | 2013-04-30 | Debtors | 3 time policy | 2013-06-30 | customer_4 | email | 2 | SI_12 | 30 days end of month | draft | 1050.01 | USD | - | 840 | 2013-03-31 | Debtors | 3 time policy | 2013-06-30 | customer_4 | letter | 3 | SI_11 | 10 days last reminder | draft | 840 | USD | - | 1500 | 2013-04-14 | Debtors USD | 3 time policy | 2013-06-30 | customer_5_usd | letter | 3 | SI_15 | 10 days last reminder | draft | 1500 | USD | - | 500 | 2013-04-14 | Debtors | 3 time policy | 2013-06-30 | Scrooge McDuck | letter | 3 | SI_17 | 10 days last reminder | draft | 1500 | | - | 1050 | 2013-04-30 | Debtors | 3 time policy | 2013-06-30 | Donald Duck | email | 2 | SI_18 | 30 days end of month | draft | 1050 | | - | 1050 | 2013-04-30 | Debtors | 3 time policy | 2013-06-30 | Gus Goose | email | 2 | SI_19 | 30 days end of month | draft | 1050 | | diff --git a/account_credit_control/scenarios/features/09_credit_control_run_jul.feature b/account_credit_control/scenarios/features/09_credit_control_run_jul.feature deleted file mode 100644 index df0aa4c55..000000000 --- a/account_credit_control/scenarios/features/09_credit_control_run_jul.feature +++ /dev/null @@ -1,35 +0,0 @@ -############################################################################### -# -# OERPScenario, OpenERP Functional Tests -# Copyright 2012-2014 Camptocamp SA -# Author Nicolas Bessi -############################################################################## - -# Features Generic tags (none for all) -############################################################################## - -@account_credit_control @account_credit_control_run @account_credit_control_run_jul - -Feature: Ensure that email credit line generation first pass is correct - - @account_credit_control_mark - Scenario: mark lines - Given there is "draft" credit lines - And I mark all draft email to state "to_be_sent" - Then the draft line should be in state "to_be_sent" - - @account_credit_control_run_month - Scenario: Create run - Given I need a "credit.control.run" with oid: credit_control.run7 - And having: - | name | value | - | date | 2013-07-31 | - When I launch the credit run - Then my credit run should be in state "done" - And the generated credit lines should have the following values: - | balance | date due | account | policy | date | partner | channel | level | move line | policy level | state | amount due | currency | - | 1500 | 2013-04-30 | Debtors | 2 time policy | 2013-07-31 | customer_2 | letter | 2 | SI_6 | 60 days last reminder | draft | 1500 | USD | - | 1500 | 2013-04-14 | Debtors | 2 time policy | 2013-07-31 | customer_3 | letter | 2 | SI_9 | 60 days last reminder | draft | 1500 | USD | - | 1050.01 | 2013-04-30 | Debtors | 3 time policy | 2013-07-31 | customer_4 | letter | 3 | SI_12 | 10 days last reminder | draft | 1050.01 | USD | - | 1050 | 2013-04-30 | Debtors | 3 time policy | 2013-07-31 | Donald Duck | letter | 3 | SI_18 | 10 days last reminder | draft | 1050 | | - | 1050 | 2013-04-30 | Debtors | 3 time policy | 2013-07-31 | Gus Goose | letter | 3 | SI_19 | 10 days last reminder | draft | 1050 | | diff --git a/account_credit_control/scenarios/features/10_credit_control_run_aug.feature b/account_credit_control/scenarios/features/10_credit_control_run_aug.feature deleted file mode 100644 index 5351b4b9c..000000000 --- a/account_credit_control/scenarios/features/10_credit_control_run_aug.feature +++ /dev/null @@ -1,30 +0,0 @@ -############################################################################### -# -# OERPScenario, OpenERP Functional Tests -# Copyright 2012-2014 Camptocamp SA -# Author Nicolas Bessi -############################################################################## - -# Features Generic tags (none for all) -############################################################################## - -@account_credit_control @account_credit_control_run @account_credit_control_run_aug - -Feature: Ensure that ignore feature works as expected - - @account_credit_control_mark_as_ignore - Scenario: mark last line as ignore - Given I ignore the "Gus Goose" credit line at level "3" for move line "SI_19" with amount "1050.0" - - @account_credit_control_run_month_aug - Scenario: Create run - Given I need a "credit.control.run" with oid: credit_control.runignored - And having: - | name | value | - | date | 2013-08-30 | - When I launch the credit run - Then my credit run should be in state "done" - - @check_ignored_line - Scenario: Check ignored lines - Given I have for "Gus Goose" "2" credit lines at level "3" for move line "SI_19" with amount "1050.0" respectively in state "draft" and "ignored" diff --git a/account_credit_control/scenarios/features/11_credit_control_manual_setting.feature b/account_credit_control/scenarios/features/11_credit_control_manual_setting.feature deleted file mode 100644 index 6c30d67b1..000000000 --- a/account_credit_control/scenarios/features/11_credit_control_manual_setting.feature +++ /dev/null @@ -1,42 +0,0 @@ -############################################################################### -# -# OERPScenario, OpenERP Functional Tests -# Copyright 2012-2014 Camptocamp SA -# Author Nicolas Bessi -############################################################################## - -# Features Generic tags (none for all) -############################################################################## - -@account_credit_control @account_credit_control_run @account_credit_control_run_change_level - -Feature: Ensure that manually changing an invoice level feature works as expected - - @account_credit_control_change_level - Scenario: Change level - Given I change level for invoice "SAJ/2014/0004" to "10 days net" of policy "3 time policy" - Then wizard selected move lines should be: - | name | - | SI_4 | - When I confirm the level change - And I should have "3" credit control lines overridden - And one new credit control line of level "10 days net" related to invoice "SAJ/2014/0004" - Then I force date of generated credit line to "2013-09-15" - - @account_credit_control_run_month_sept - Scenario: Create run - Given there is "draft" credit lines - And I mark all draft email to state "to_be_sent" - Then the draft line should be in state "to_be_sent" - Given I need a "credit.control.run" with oid: credit_control.manual_change - And having: - | name | value | - | date | 2013-09-30 | - When I launch the credit run - Then my credit run should be in state "done" - - @account_credit_control_manual_next_step - Scenario: Check manually managed line on run - Given the invoice "SAJ/2014/0004" with manual changes - And the invoice has "1" line of level "1" for policy "3 time policy" - And the invoice has "1" line of level "2" for policy "3 time policy" diff --git a/account_credit_control/scenarios/features/steps/account_credit_control.py b/account_credit_control/scenarios/features/steps/account_credit_control.py deleted file mode 100644 index 2a292d0a5..000000000 --- a/account_credit_control/scenarios/features/steps/account_credit_control.py +++ /dev/null @@ -1,147 +0,0 @@ -# -*- coding: utf-8 -*- -# flake8: noqa -import time -from behave import given, when -from support import model, assert_equal - -@given(u'I configure the following accounts on the credit control policy with oid: "{policy_oid}"') -def impl(ctx, policy_oid): - policy = model('credit.control.policy').get(policy_oid) - assert policy, 'No policy % found' % policy_oid - acc_obj = model('account.account') - accounts = [] - for row in ctx.table: - acc = acc_obj.get(['code = %s' % row['account code']]) - assert acc, "Account with code %s not found" % row['account code'] - accounts.append(acc) - policy.write({'account_ids': [x.id for x in accounts]}) - - -@when(u'I launch the credit run') -def impl(ctx): - assert ctx.found_item - # Must be a cleaner way to do it - assert 'credit.control.run' == ctx.found_item._model._name - ctx.found_item.generate_credit_lines() - -@given(u'I clean all the credit lines') -def impl(ctx): - model('credit.control.line').browse([]).unlink() - -@then(u'my credit run should be in state "done"') -def impl(ctx): - assert ctx.found_item - # Must be a cleaner way to do it - assert model("credit.control.run").get(ctx.found_item.id).state == 'done' - -@then(u'the generated credit lines should have the following values') -def impl(ctx): - def _row_to_dict(row): - return dict((name, row[name]) for name in row.headings if row[name]) - rows = map(_row_to_dict, ctx.table) - - def _parse_date(value): - return time.strftime(value) if '%' in value else value - - for row in rows: - account = model('account.account').get(['name = %s' % row['account']]) - assert account, "no account named %s found" % row['account'] - - policy = model('credit.control.policy').get(['name = %s' % row['policy']]) - assert policy, "No policy %s found" % row['policy'] - - partner = model('res.partner').get(['name = %s' % row['partner']]) - assert partner, "No partner %s found" % row['partner'] - - maturity_date = _parse_date(row['date due']) - move_line = model('account.move.line').get(['name = %s' % row['move line'], - 'date_maturity = %s' % maturity_date]) - assert move_line, "No move line %s found" % row['move line'] - - level = model('credit.control.policy.level').get(['name = %s' % row['policy level'], - 'policy_id = %s' % policy.id]) - assert level, "No level % found" % row['policy level'] - - domain = [['account_id', '=', account.id], - ['policy_id', '=', policy.id], - ['partner_id', '=', partner.id], - ['policy_level_id', '=', level.id], - ['amount_due', '=', row.get('amount due', 0.0)], - ['state', '=', row['state']], - ['level', '=', row.get('level', 0.0)], - ['channel', '=', row['channel']], - ['balance_due', '=', row.get('balance', 0.0)], - ['date_due', '=', _parse_date(row['date due'])], - ['date', '=', _parse_date(row['date'])], - ['move_line_id', '=', move_line.id], - ] - if row.get('currency'): - curreny = model('res.currency').get(['name = %s' % row['currency']]) - assert curreny, "No currency %s found" % row['currency'] - domain.append(('currency_id', '=', curreny.id)) - - lines = model('credit.control.line').search(domain) - assert lines, "no line found for %s" % repr(row) - assert len(lines) == 1, "Too many lines found for %s" % repr(row) - date_lines = model('credit.control.line').search([('date', '=', ctx.found_item.date)]) - assert len(date_lines) == len(ctx.table.rows), "Too many lines generated" - - -def open_invoice(ctx): - assert ctx.found_item - ctx.found_item._send('invoice_open') - # _send refresh object - assert ctx.found_item.state == 'open' - -@then(u'I open the credit invoice') -def impl(ctx): - open_invoice(ctx) - -@given(u'I open the credit invoice') -def impl(ctx): - open_invoice(ctx) - -@given(u'there is "{state}" credit lines') -def impl(ctx, state): - assert model('credit.control.line').search(['state = %s' % state]) - -@given(u'I mark all draft email to state "{state}"') -def impl(ctx, state): - wiz = model('credit.control.marker').create({'name': state}) - lines = model('credit.control.line').search([('state', '=', 'draft')]) - assert lines - ctx.lines = lines - wiz.write({'line_ids': lines}) - wiz.mark_lines() - -@then(u'the draft line should be in state "{state}"') -def impl(ctx, state): - assert ctx.lines - lines = model('credit.control.line').search([('state', '!=', state), - ('id', 'in', ctx.lines)]) - assert not lines - -@given(u'I ignore the "{partner}" credit line at level "{level:d}" for move line "{move_line_name}" with amount "{amount:f}"') -def impl(ctx, partner, level, move_line_name, amount): - print ctx, partner, level, move_line_name, amount - to_ignore = model('credit.control.line').search([('partner_id.name', '=', partner), - ('level', '=', level), - ('amount_due', '=', amount), - ('move_line_id.name', '=', move_line_name)]) - assert to_ignore - wiz = model('credit.control.marker').create({'name': 'ignored'}) - ctx.lines = to_ignore - wiz.write({'line_ids': to_ignore}) - wiz.mark_lines() - assert model('credit.control.line').get(to_ignore[0]).state == 'ignored' - -@given(u'I have for "{partner}" "{number:d}" credit lines at level "{level:d}" for move line "{move_line_name}" with amount "{amount:f}" respectively in state "draft" and "ignored"') -def impl(ctx, partner, number, level, move_line_name, amount): - to_check = model('credit.control.line').search([('partner_id.name', '=', partner), - ('level', '=', level), - ('amount_due', '=', amount), - ('move_line_id.name', '=', move_line_name), - ('state', 'in', ('draft', 'ignored'))]) - assert_equal(len(to_check), int(number), msg="More than %s found" % number) - lines = model('credit.control.line').browse(to_check) - assert set(['ignored', 'draft']) == set(lines.state) diff --git a/account_credit_control/scenarios/features/steps/account_credit_control_changer.py b/account_credit_control/scenarios/features/steps/account_credit_control_changer.py deleted file mode 100644 index 6f46d11fc..000000000 --- a/account_credit_control/scenarios/features/steps/account_credit_control_changer.py +++ /dev/null @@ -1,79 +0,0 @@ -# -*- coding: utf-8 -*- -from support import model, assert_equal, assert_in, assert_true - -# flake8: noqa -@given(u'I change level for invoice "{invoice_name}" to "{level_name}" of policy "{policy_name}"') -def impl(ctx, invoice_name, level_name, policy_name): - invoice = model('account.invoice').get([('number', '=', invoice_name)]) - assert_true(invoice, msg='No invoices found') - level = model('credit.control.policy.level').get([('name', '=', level_name)]) - assert_true(level, 'level not found') - policy = model('credit.control.policy').get([('name', '=', policy_name)]) - assert_true(policy, 'Policy not found') - assert_equal(policy.id, level.policy_id.id) - context = {'active_ids': [invoice.id]} - data = {'new_policy_id': policy.id, - 'new_policy_level_id': level.id} - wizard = model('credit.control.policy.changer').create(data, context=context) - ctx.wizard = wizard - -@then(u'wizard selected move lines should be') -def impl(ctx): - assert_true(ctx.wizard) - names = [x.name for x in ctx.wizard.move_line_ids] - for line in ctx.table: - assert_in(line['name'], names) - -@when(u'I confirm the level change') -def impl(ctx): - assert_true(ctx.wizard) - ctx.wizard.set_new_policy() - -@when(u'I should have "{line_number:d}" credit control lines overridden') -def impl(ctx, line_number): - assert_true(ctx.wizard) - move_ids = [x.id for x in ctx.wizard.move_line_ids] - overridden = model('credit.control.line').search([('move_line_id', 'in', move_ids), - ('manually_overridden', '=', True)]) -# assert len(overridden) == line_number - -@when(u'one new credit control line of level "{level_name}" related to invoice "{invoice_name}"') -def impl(ctx, level_name, invoice_name): - invoice = model('account.invoice').get([('number', '=', invoice_name)]) - assert_true(invoice, msg='No invoices found') - level = model('credit.control.policy.level').get([('name', '=', level_name)]) - assert_true(level, 'level not found') - assert_true(ctx.wizard) - move_ids = [x.id for x in ctx.wizard.move_line_ids] - created_id = model('credit.control.line').search([('move_line_id', 'in', move_ids), - ('manually_overridden', '=', False)]) - - assert len(created_id) == 1 - created = model('credit.control.line').get(created_id[0]) - ctx.created = created - assert_equal(created.policy_level_id.id, level.id) - assert_equal(created.invoice_id.id, invoice.id) - assert_equal(created.invoice_id.credit_policy_id.id, level.policy_id.id) - -@then(u'I force date of generated credit line to "{date}"') -def impl(ctx, date): - assert_true(ctx.created) - ctx.created.write({'date': date}) - -@given(u'the invoice "{invoice_name}" with manual changes') -def impl(ctx, invoice_name): - invoice = model('account.invoice').get([('number', '=', invoice_name)]) - assert_true(invoice, msg='No invoices found') - man_lines = (x for x in invoice.credit_control_line_ids if x.manually_overridden) - assert_true(next(man_lines, None), 'No manual change on the invoice') - ctx.invoice = invoice - -@given(u'the invoice has "{line_number:d}" line of level "{level:d}" for policy "{policy_name}"') -def impl(ctx, line_number, level, policy_name): - assert_true(ctx.invoice) - policy = model('credit.control.policy').get([('name', '=', policy_name)]) - assert_true(policy) - lines = model('credit.control.line').search([('invoice_id', '=', ctx.invoice.id), - ('level', '=', level), - ('policy_id', '=', policy.id)]) - assert_equal(len(lines), line_number) diff --git a/account_credit_control/scenarios/features/steps/account_voucher.py b/account_credit_control/scenarios/features/steps/account_voucher.py deleted file mode 100644 index 6d314316f..000000000 --- a/account_credit_control/scenarios/features/steps/account_voucher.py +++ /dev/null @@ -1,96 +0,0 @@ -# -*- coding: utf-8 -*- -# flake8: noqa -from support import model, assert_equal, assert_almost_equal -import datetime - - -@step('I pay the full amount on the invoice "{inv_name}"') -def impl(ctx, inv_name): - Invoice = model('account.invoice') - invoice = Invoice.get([('name', '=', inv_name)]) - assert invoice - ctx.execute_steps(""" - When I pay %f on the invoice "%s" - """ % (invoice.residual, inv_name)) - - -@step('I pay {amount:f} on the invoice "{inv_name}"') -def impl(ctx, amount, inv_name): - Partner = model('res.partner') - Invoice = model('account.invoice') - Voucher = model('account.voucher') - VoucherLine = model('account.voucher.line') - Journal = model('account.journal') - invoice = Invoice.get([('name', '=', inv_name)]) - assert invoice - journal = Journal.get('scen.eur_journal') - values = { - 'partner_id': invoice.partner_id.commercial_partner_id.id, - 'reference': invoice.name, - 'amount': amount, - 'date': invoice.date_invoice, - 'currency_id': invoice.currency_id.id, - 'company_id': invoice.company_id.id, - 'journal_id': journal.id, - } - - if invoice.type in ('out_invoice','out_refund'): - values['type'] = 'receipt' - else: - values['type'] = 'payment' - - onchange = Voucher.onchange_partner_id([], values['partner_id'], - values['journal_id'], - values['amount'], - values['currency_id'], - values['type'], - values['date']) - values.update(onchange['value']) - - onchange = Voucher.onchange_date([], values['date'], - values['currency_id'], - False, - values['amount'], - values['company_id']) - values.update(onchange['value']) - - onchange = Voucher.onchange_amount([], values['amount'], - False, - values['partner_id'], - values['journal_id'], - values['currency_id'], - values['type'], - values['date'], - False, - values['company_id']) - values.update(onchange['value']) - values['line_cr_ids'] = False - - voucher = Voucher.create(values) - - vals = voucher.recompute_voucher_lines(voucher.partner_id.id, - voucher.journal_id.id, - voucher.amount, - voucher.currency_id.id, - voucher.type, - voucher.date) - for line in vals['value']['line_cr_ids']: - line['voucher_id'] = voucher.id - VoucherLine.create(line) - - for line in vals['value']['line_dr_ids']: - line['voucher_id'] = voucher.id - VoucherLine.create(line) - - voucher.button_proforma_voucher() - # Workaround to force recomputation of the residual. - # Must be removed once this bug is fixed: - # https://github.com/odoo/odoo/issues/3395 - invoice.write({'currency_id': invoice.currency_id.id}) - - -@step('My invoice "{inv_name}" is in state "{state}" reconciled with a residual amount of "{amount:f}"') -def impl(ctx, inv_name, state, amount): - invoice = model('account.invoice').get([('name', '=', inv_name)]) - assert_almost_equal(invoice.residual, amount) - assert_equal(invoice.state, state) diff --git a/account_credit_control/tests/__init__.py b/account_credit_control/tests/__init__.py index c13729caa..8563d5c70 100644 --- a/account_credit_control/tests/__init__.py +++ b/account_credit_control/tests/__init__.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- # Copyright 2017 Okia SPRL (https://okia.be) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from . import test_credit_control_policy from . import test_res_partner from . import test_account_invoice diff --git a/account_credit_control/tests/test_account_invoice.py b/account_credit_control/tests/test_account_invoice.py index 9f920b4c0..ce2065388 100644 --- a/account_credit_control/tests/test_account_invoice.py +++ b/account_credit_control/tests/test_account_invoice.py @@ -1,12 +1,13 @@ # -*- coding: utf-8 -*- # Copyright 2017 Okia SPRL (https://okia.be) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from datetime import datetime from dateutil import relativedelta -from odoo import fields -from odoo.tests.common import TransactionCase -from odoo.exceptions import UserError +from openerp import fields +from openerp.tests.common import TransactionCase +from openerp.exceptions import UserError class TestAccountInvoice(TransactionCase): @@ -82,7 +83,7 @@ class TestAccountInvoice(TransactionCase): }) # Validate the invoice - invoice.action_invoice_open() + invoice.signal_workflow('invoice_open') control_run = self.env['credit.control.run'].create({ 'date': fields.Date.today(), diff --git a/account_credit_control/tests/test_credit_control_policy.py b/account_credit_control/tests/test_credit_control_policy.py index c80566c06..0e94a472e 100644 --- a/account_credit_control/tests/test_credit_control_policy.py +++ b/account_credit_control/tests/test_credit_control_policy.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- # Copyright 2017 Okia SPRL (https://okia.be) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo.exceptions import ValidationError, UserError -from odoo.tests.common import TransactionCase +from openerp.exceptions import ValidationError, UserError +from openerp.tests.common import TransactionCase class TestCreditControlPolicy(TransactionCase): diff --git a/account_credit_control/tests/test_credit_control_run.py b/account_credit_control/tests/test_credit_control_run.py index ac7c83196..a53b83981 100644 --- a/account_credit_control/tests/test_credit_control_run.py +++ b/account_credit_control/tests/test_credit_control_run.py @@ -5,9 +5,9 @@ import re from datetime import datetime from dateutil import relativedelta -from odoo import fields -from odoo.tests.common import TransactionCase -from odoo.exceptions import UserError +from openerp import fields +from openerp.tests.common import TransactionCase +from openerp.exceptions import UserError class TestCreditControlRun(TransactionCase): @@ -80,7 +80,7 @@ class TestCreditControlRun(TransactionCase): }) # Validate the invoice - self.invoice.action_invoice_open() + self.invoice.signal_workflow('invoice_open') def test_check_run_date(self): """ diff --git a/account_credit_control/tests/test_res_partner.py b/account_credit_control/tests/test_res_partner.py index 62399c6e4..0f3514f9b 100644 --- a/account_credit_control/tests/test_res_partner.py +++ b/account_credit_control/tests/test_res_partner.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- # Copyright 2017 Okia SPRL (https://okia.be) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo.tests.common import TransactionCase -from odoo.exceptions import ValidationError +from openerp.tests.common import TransactionCase +from openerp.exceptions import ValidationError class TestCreditControlPolicyLevel(TransactionCase): diff --git a/account_credit_control/views/account_invoice.xml b/account_credit_control/views/account_invoice.xml index 2b9dcbbf3..5fede04d6 100644 --- a/account_credit_control/views/account_invoice.xml +++ b/account_credit_control/views/account_invoice.xml @@ -1,5 +1,6 @@ + + credit.control.line.form credit.control.line @@ -148,7 +149,6 @@ Credit Control Lines ir.actions.act_window credit.control.line - form tree,form @@ -167,5 +167,4 @@ id="credit_control_line_action_menu" /> - diff --git a/account_credit_control/views/credit_control_policy.xml b/account_credit_control/views/credit_control_policy.xml index b3651fc90..141793afa 100644 --- a/account_credit_control/views/credit_control_policy.xml +++ b/account_credit_control/views/credit_control_policy.xml @@ -1,5 +1,6 @@ + credit.control.policy.form credit.control.policy @@ -78,7 +79,6 @@ Credit Control Policies ir.actions.act_window credit.control.policy - form tree,form @@ -130,4 +130,5 @@ + diff --git a/account_credit_control/views/credit_control_run.xml b/account_credit_control/views/credit_control_run.xml index c01a4d799..bd72132dd 100644 --- a/account_credit_control/views/credit_control_run.xml +++ b/account_credit_control/views/credit_control_run.xml @@ -1,5 +1,6 @@ + credit.control.run.tree credit.control.run @@ -56,7 +57,6 @@ Credit Control Run ir.actions.act_window credit.control.run - form tree,form diff --git a/account_credit_control/views/res_company.xml b/account_credit_control/views/res_company.xml index 22b71f9cb..8b5fd08e9 100644 --- a/account_credit_control/views/res_company.xml +++ b/account_credit_control/views/res_company.xml @@ -1,5 +1,6 @@ + credit.control.company.form res.company @@ -11,4 +12,5 @@ + diff --git a/account_credit_control/views/res_partner.xml b/account_credit_control/views/res_partner.xml index cdb4888ae..ddfe35f30 100644 --- a/account_credit_control/views/res_partner.xml +++ b/account_credit_control/views/res_partner.xml @@ -1,5 +1,6 @@ + partner.credit_control.form.view res.partner diff --git a/account_credit_control/wizard/__init__.py b/account_credit_control/wizards/__init__.py similarity index 100% rename from account_credit_control/wizard/__init__.py rename to account_credit_control/wizards/__init__.py diff --git a/account_credit_control/wizard/credit_control_communication.py b/account_credit_control/wizards/credit_control_communication.py similarity index 99% rename from account_credit_control/wizard/credit_control_communication.py rename to account_credit_control/wizards/credit_control_communication.py index d23718555..d39fedb90 100644 --- a/account_credit_control/wizard/credit_control_communication.py +++ b/account_credit_control/wizards/credit_control_communication.py @@ -3,7 +3,7 @@ # Copyright 2017 Okia SPRL (https://okia.be) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import logging -from odoo import api, fields, models +from openerp import api, fields, models logger = logging.getLogger(__name__) @@ -170,7 +170,6 @@ class CreditCommunication(models.TransientModel): for comm in self: template = comm.current_policy_level.email_template_id email_values = template.generate_email(comm.id) - email_values['type'] = 'email' # model is Transient record (self) removed periodically so no point # of storing res_id email_values.pop('model', None) diff --git a/account_credit_control/wizard/credit_control_emailer.py b/account_credit_control/wizards/credit_control_emailer.py similarity index 95% rename from account_credit_control/wizard/credit_control_emailer.py rename to account_credit_control/wizards/credit_control_emailer.py index 9c7230954..e8f0db9cf 100644 --- a/account_credit_control/wizard/credit_control_emailer.py +++ b/account_credit_control/wizards/credit_control_emailer.py @@ -3,8 +3,8 @@ # Copyright 2017 Okia SPRL (https://okia.be) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import _, api, fields, models -from odoo.exceptions import UserError +from openerp import _, api, fields, models +from openerp.exceptions import UserError class CreditControlEmailer(models.TransientModel): diff --git a/account_credit_control/wizard/credit_control_emailer_view.xml b/account_credit_control/wizards/credit_control_emailer_view.xml similarity index 100% rename from account_credit_control/wizard/credit_control_emailer_view.xml rename to account_credit_control/wizards/credit_control_emailer_view.xml diff --git a/account_credit_control/wizard/credit_control_marker.py b/account_credit_control/wizards/credit_control_marker.py similarity index 96% rename from account_credit_control/wizard/credit_control_marker.py rename to account_credit_control/wizards/credit_control_marker.py index edb63e09d..7fc338e85 100644 --- a/account_credit_control/wizard/credit_control_marker.py +++ b/account_credit_control/wizards/credit_control_marker.py @@ -2,8 +2,8 @@ # Copyright 2012-2017 Camptocamp SA # Copyright 2017 Okia SPRL (https://okia.be) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import _, api, fields, models -from odoo.exceptions import UserError +from openerp import _, api, fields, models +from openerp.exceptions import UserError class CreditControlMarker(models.TransientModel): diff --git a/account_credit_control/wizard/credit_control_marker_view.xml b/account_credit_control/wizards/credit_control_marker_view.xml similarity index 95% rename from account_credit_control/wizard/credit_control_marker_view.xml rename to account_credit_control/wizards/credit_control_marker_view.xml index e21f22c11..d0e9b9422 100644 --- a/account_credit_control/wizard/credit_control_marker_view.xml +++ b/account_credit_control/wizards/credit_control_marker_view.xml @@ -8,14 +8,13 @@ - +