~camptocamp/banking-addons/bank-statement-reconcile-7.0-add-cancel-line-lep

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# -*- coding: utf-8 -*-
###############################################################################
#                                                                             #
#   Author: Joel Grand-Guillaume                                              #
#   Copyright 2011-2012 Camptocamp SA                                         #
#                                                                             #
#   Author: Leonardo Pistone <leonardo.pistone@camptocamp.com>                #
#   Copyright 2013 Camptocamp SA                                              #
#                                                                             #
#   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 fields, orm
from tools.translate import _

from openerp.addons.account_statement_base_completion.statement import ErrorTooManyPartner


class account_statement_completion_rule(orm.Model):

    _name = "account.statement.completion.rule"
    _inherit = "account.statement.completion.rule"

    def _get_functions(self, cr, uid, context=None):
        res = super(account_statement_completion_rule, self)._get_functions(
            cr, uid, context=context)
        res.append(
            ('get_from_ref_and_so', 'From line reference (based on SO number)')
        )
        return res

    # Should be private but data are initialised with no update XML
    def get_from_ref_and_so(self, cr, uid, st_line, context=None):
        """
        Match the partner based on the SO number and the reference of the
        statement line. Then, call the generic get_values_for_line method to
        complete other values. If more than one partner matched, raise the
        ErrorTooManyPartner error.

        :param int/long st_line: read of the concerned
        account.bank.statement.line

        :return:
            A dict of value that can be passed directly to the write method of
            the statement line or {}
           {'partner_id': value,
            'account_id': value,

            ...}
        """
        st_obj = self.pool.get('account.bank.statement.line')
        res = {}
        if st_line:
            so_obj = self.pool.get('sale.order')
            so_id = so_obj.search(cr,
                                  uid,
                                  [('name', '=', st_line['ref'])],
                                  context=context)
            if so_id:
                if so_id and len(so_id) == 1:
                    so = so_obj.browse(cr, uid, so_id[0], context=context)
                    res['partner_id'] = so.partner_id.id
                elif so_id and len(so_id) > 1:
                    raise ErrorTooManyPartner(
                        _('Line named "%s" (Ref:%s) was matched by more '
                          'than one partner while looking on SO by ref.') %
                        (st_line['name'], st_line['ref']))
                st_vals = st_obj.get_values_for_line(
                    cr,
                    uid,
                    profile_id=st_line['profile_id'],
                    master_account_id=st_line['master_account_id'],
                    partner_id=res.get('partner_id', False),
                    line_type='customer',
                    amount=st_line['amount'] if st_line['amount'] else 0.0,
                    context=context)
                res.update(st_vals)
        return res

    _columns = {
        'function_to_call': fields.selection(_get_functions, 'Method'),
    }