<commit_before># -*- encoding: utf-8 -*-
##############################################################################
#
#    Account analytic required module for OpenERP
#    Copyright (C) 2011 Akretion (http://www.akretion.com)
#    @author <NAME> <<EMAIL>>
#    Developped during the Akretion-Camptocamp code sprint of June 2011
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU Affero 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 Affero General Public License for more details.
#
#    You should have received a copy of the GNU Affero General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################

from openerp.osv import orm, fields
from openerp.tools.translate import _


class account_account_type(orm.Model):
    _inherit = "account.account.type"

    def _get_policies(self, cr, uid, context=None):
        """This is the method to be inherited for adding policies"""
        return [('optional', 'Optional'),
                ('always', 'Always'),
                ('never', 'Never')
               ]

    def __get_policies(self, cr, uid, context=None):
        """ Call method which can be inherited """
        return self._get_policies(cr, uid, context=context)

    _columns = {
        'analytic_policy': fields.selection(
            __get_policies,
            'Policy for analytic account',
            help="Set the policy for analytic accounts : if you select "
            "'Optional', the accountant is free to put an analytic account "
            "on an account move line with this type of account ; if you "
            "select 'Always', the accountant will get an error message if "
            "there is no analytic account ; if you select 'Never', the "
            "accountant will get an error message if an analytic account "
            "is present."),
    }

    _defaults = {
        'analytic_policy': 'optional',
        }


class account_move_line(orm.Model):
    _inherit = "account.move.line"

    def _check_analytic_required_msg(self, cr, uid, ids, context=None):
        for move_line in self.browse(cr, uid, ids, context):
            if move_line.debit == 0 and move_line.credit == 0:
                continue
            analytic_policy = \
                move_line.account_id.user_type.analytic_policy
            if analytic_policy == 'always' and \
                    not move_line.analytic_account_id:
                return _("Analytic policy is set to 'Always' with account "
                        "%s '%s' but the analytic account is missing in "
                        "the account move line with label '%s'.") % (
                        move_line.account_id.code,
                        move_line.account_id.name,
                        move_line.name)
            elif analytic_policy == 'never' and \
                    move_line.analytic_account_id:
                return _("Analytic policy is set to 'Never' with account %s "
                        "'%s' but the account move line with label '%s' "
                        "has an analytic account %s '%s'.") % (
                        move_line.account_id.code,
                        move_line.account_id.name,
                        move_line.name,
                        move_line.analytic_account_id.code,
                        move_line.analytic_account_id.name)

    def _check_analytic_required(self, cr, uid, ids, context=None):
        return not self._check_analytic_required_msg(cr, uid, ids,
                                                     context=context)

    _constraints = [
        (_check_analytic_required,
         _check_analytic_required_msg,
         ['analytic_account_id']),
    ]<commit_msg>[IMP] life would be boring without flake8<commit_after># -*- encoding: utf-8 -*-
##############################################################################
#
#    Account analytic required module for OpenERP
#    Copyright (C) 2011 Akretion (http://www.akretion.com)
#    @author <NAME> <<EMAIL>>
#    Developped during the Akretion-Camptocamp code sprint of June 2011
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU Affero 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 Affero General Public License for more details.
#
#    You should have received a copy of the GNU Affero General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################

from openerp.osv import orm, fields
from openerp.tools.translate import _


class account_account_type(orm.Model):
    _inherit = "account.account.type"

    def _get_policies(self, cr, uid, context=None):
        """This is the method to be inherited for adding policies"""
        return [('optional', 'Optional'),
                ('always', 'Always'),
                ('never', 'Never')]

    def __get_policies(self, cr, uid, context=None):
        """ Call method which can be inherited """
        return self._get_policies(cr, uid, context=context)

    _columns = {
        'analytic_policy': fields.selection(
            __get_policies,
            'Policy for analytic account',
            help="Set the policy for analytic accounts : if you select "
            "'Optional', the accountant is free to put an analytic account "
            "on an account move line with this type of account ; if you "
            "select 'Always', the accountant will get an error message if "
            "there is no analytic account ; if you select 'Never', the "
            "accountant will get an error message if an analytic account "
            "is present."),
    }

    _defaults = {
        'analytic_policy': 'optional',
        }


class account_move_line(orm.Model):
    _inherit = "account.move.line"

    def _check_analytic_required_msg(self, cr, uid, ids, context=None):
        for move_line in self.browse(cr, uid, ids, context):
            if move_line.debit == 0 and move_line.credit == 0:
                continue
            analytic_policy = \
                move_line.account_id.user_type.analytic_policy
            if analytic_policy == 'always' and \
                    not move_line.analytic_account_id:
                return _("Analytic policy is set to 'Always' with account "
                         "%s '%s' but the analytic account is missing in "
                         "the account move line with label '%s'.") % \
                        (move_line.account_id.code,
                         move_line.account_id.name,
                         move_line.name)
            elif analytic_policy == 'never' and \
                    move_line.analytic_account_id:
                return _("Analytic policy is set to 'Never' with account %s "
                         "'%s' but the account move line with label '%s' "
                         "has an analytic account %s '%s'.") % \
                        (move_line.account_id.code,
                         move_line.account_id.name,
                         move_line.name,
                         move_line.analytic_account_id.code,
                         move_line.analytic_account_id.name)

    def _check_analytic_required(self, cr, uid, ids, context=None):
        return not self._check_analytic_required_msg(cr, uid, ids,
                                                     context=context)

    _constraints = [(_check_analytic_required,
                     _check_analytic_required_msg,
                     ['analytic_account_id'])]
{'fraction_non_alphanumeric': 0.11828990032424642, 'fraction_numerical': 0.0030022817341179295, 'mean_word_length': 2.1109450877848337, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 6, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '956727', 'n_tokens_mistral': 2234, 'n_tokens_neox': 2052, 'n_words': 730}