diff --git a/account_constraints/__init__.py b/account_constraints/__init__.py new file mode 100644 index 000000000..7e8f7ca8c --- /dev/null +++ b/account_constraints/__init__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Author Joel Grand-Guillaume. Copyright 2012 Camptocamp SA +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +############################################################################## + +import account_constraints \ No newline at end of file diff --git a/account_constraints/__openerp__.py b/account_constraints/__openerp__.py new file mode 100644 index 000000000..39f912acf --- /dev/null +++ b/account_constraints/__openerp__.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Author Joel Grand-Guillaume. Copyright 2012 Camptocamp SA +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +############################################################################## +{ + 'name' : 'Account Contraints', + 'version' : '1', + 'depends' : [ + 'account', + ], + 'author' : 'Camptocamp', + 'category': 'Generic Modules/Accounting', + 'description': """ + Add contraints in the accounting module of OpenERP to avoid bad usage by users that lead + to corrupted datas. This is based on our experiences and legal state of the art in other + software. + + Summary of constraints are: + + * Add a constraint on account move: you cannot pickup a date that is not in the fiscal year of the concerned period + + * For manual entries when multicurrency: + a - Validation on the use of the 'Currency' and 'Currency Amount' fields as it is possible to enter one without the other + b - Validation to prevent a Credit amount with a positive 'Currency Amount', or a Debit with a negative 'Currency Amount' + + * Add a check on entries that user cannot provide a secondary currency if the same than the company one. + + """, + 'website': 'http://www.camptocamp.com', + 'init_xml': [], + 'update_xml': [], + 'demo_xml': [], + 'installable': True, + 'active': False, +} diff --git a/account_constraints/account_constraints.py b/account_constraints/account_constraints.py new file mode 100644 index 000000000..6ba995a31 --- /dev/null +++ b/account_constraints/account_constraints.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Author Joel Grand-Guillaume. Copyright 2012 Camptocamp SA +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +############################################################################## + +import time +from openerp.osv import fields, osv +from openerp.tools.translate import _ + +class AccountMove(osv.osv): + _inherit = "account.move" + + def _check_fiscal_year(self, cursor, user, ids): + for move in self.browse(cursor, user, ids): + date_start = move.period_id.fiscalyear_id.date_start + date_stop = move.period_id.fiscalyear_id.date_stop + if move.date < date_start or move.date > date_stop: + return False + return True + + _constraints = [ + (_check_fiscal_year, + 'You cannot create entries with date not in the fiscal year of the chosen period', + ['line_id','']), + ] + + +class AccountMoveLine(osv.osv): + _inherit='account.move.line' + + def _check_currency_and_amount(self, cr, uid, ids, context=None): + for l in self.browse(cr, uid, ids, context=context): + if (l.currency_id and not l.amount_currency) or (not l.currency_id and l.amount_currency): + return False + return True + + def _check_currency_amount(self, cr, uid, ids, context=None): + for l in self.browse(cr, uid, ids, context=context): + if l.amount_currency: + if (l.amount_currency > 0.0 and l.credit > 0.0) or (l.amount_currency < 0.0 and l.debit > 0.0): + return False + return True + + def _check_currency_company(self, cr, uid, ids, context=None): + for l in self.browse(cr, uid, ids, context=context): + if l.currency_id.id == l.company_id.currency_id.id: + return False + return True + + _constraints = [ + ( + _check_currency_and_amount, + "You cannot create journal items with a secondary currency without recording \ + both 'currency' and 'amount currency' field.", + ['currency_id','amount_currency'] + ), + ( + _check_currency_amount, + 'The amount expressed in the secondary currency must be positif when journal item\ + are debit and negatif when journal item are credit.', + ['amount_currency'] + ), + ( + _check_currency_company, + "You can't provide a secondary currency if the same than the company one." , + ['currency_id'] + ), + ] + +