~unifield-team/unifield-wm/us-826

« back to all changes in this revision

Viewing changes to account_override/account_move_line.py

  • Committer: Matthieu Dietrich
  • Date: 2012-07-10 14:12:40 UTC
  • mfrom: (913 unifield-wm)
  • mto: This revision was merged to the branch mainline in revision 935.
  • Revision ID: mdietrich@chloups211-20120710141240-celi3o016fqz7mj1
UF-881: [MERGE] merged with trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
from osv import fields
26
26
import re
27
27
import decimal_precision as dp
 
28
from time import strftime
 
29
import logging
 
30
from tools.translate import _
28
31
 
29
32
class account_move_line(osv.osv):
30
33
    _inherit = 'account.move.line'
63
66
        """
64
67
        return super(account_move_line, self)._get_move_lines(cr, uid, ids, context=context)
65
68
 
 
69
    def _get_reference(self, cr, uid, ids, field_names, args, context=None):
 
70
        """
 
71
        Give reference field content from account_move_line first. Then search move_id.reference field, otherwise display ''.
 
72
        """
 
73
        res = {}
 
74
        for line in self.browse(cr, uid, ids):
 
75
            res[line.id] = ''
 
76
            if line.reference:
 
77
                res[line.id] = line.reference
 
78
                continue
 
79
            elif line.move_id and line.move_id.ref:
 
80
                res[line.id] = line.move_id.ref
 
81
                continue
 
82
        return res
 
83
 
 
84
    def _set_fake_reference(self, cr, uid, id, name=None, value=None, fnct_inv_arg=None, context=None):
 
85
        """
 
86
        Just used to not break default OpenERP behaviour
 
87
        """
 
88
        if name and value:
 
89
            sql = "UPDATE %s SET %s = %s WHERE id = %s" % (self._table, 'ref', value, id)
 
90
            cr.execute(sql)
 
91
        return True
 
92
 
 
93
    def _search_reference(self, cr, uid, obj, name, args, context):
 
94
        """
 
95
        Account MCDB (Selector) seems to be the only one that search on this field.
 
96
        It use 'ilike' operator
 
97
        """
 
98
        if not context:
 
99
            context = {}
 
100
        if not args:
 
101
            return []
 
102
        if args[0][2]:
 
103
            return [('move_id.reference', '=', args[0][2])]
 
104
        return []
 
105
 
66
106
    _columns = {
67
107
        'source_date': fields.date('Source date', help="Date used for FX rate re-evaluation"),
68
108
        'move_state': fields.related('move_id', 'state', string="Move state", type="selection", selection=[('draft', 'Draft'), ('posted', 'Posted')], 
75
115
        'debit': fields.float('Func. Debit', digits_compute=dp.get_precision('Account')),
76
116
        'credit': fields.float('Func. Credit', digits_compute=dp.get_precision('Account')),
77
117
        'currency_id': fields.many2one('res.currency', 'Book. Currency', help="The optional other currency if it is a multi-currency entry."),
78
 
        'document_date': fields.date('Document Date', size=255, readonly=True),
 
118
        'document_date': fields.date('Document Date', size=255, readonly=True, required=True),
79
119
        'date': fields.related('move_id','date', string='Posting date', type='date', required=True, select=True,
80
120
                store = {
81
121
                    'account.move': (_get_move_lines, ['date'], 20)
82
122
                }),
83
123
        'is_write_off': fields.boolean('Is a write-off line?', readonly=True, 
84
124
            help="This inform that no correction is possible for a line that come from a write-off!"),
 
125
        'reference': fields.char(string='Reference', size=64),
 
126
        'ref': fields.function(_get_reference, fnct_inv=_set_fake_reference, fnct_search=_search_reference, string='Reference', method=True, type='char', size=64, store=True),
85
127
    }
86
128
 
87
129
    _defaults = {
89
131
        'is_write_off': lambda *a: False,
90
132
    }
91
133
 
 
134
    _order = 'move_id DESC'
 
135
 
92
136
    def _accounting_balance(self, cr, uid, ids, context=None):
93
137
        """
94
138
        Get the accounting balance of given lines
104
148
            FROM account_move_line
105
149
            WHERE id in %s
106
150
        """
107
 
        cr.execute(sql, [tuple(ids)])
 
151
        cr.execute(sql, (tuple(ids),))
108
152
        res = cr.fetchall()
109
153
        if isinstance(ids, list):
110
154
            res = res[0]
111
155
        return res
112
156
 
 
157
    def _check_document_date(self, cr, uid, ids):
 
158
        """
 
159
        Check that document's date is done BEFORE posting date
 
160
        """
 
161
        for aml in self.browse(cr, uid, ids):
 
162
            if aml.document_date and aml.date and aml.date < aml.document_date:
 
163
                raise osv.except_osv(_('Error'), _('Posting date should be later than Document Date.'))
 
164
        return True
 
165
 
 
166
    def create(self, cr, uid, vals, context=None, check=True):
 
167
        """
 
168
        Filled in 'document_date' if we come from tests
 
169
        """
 
170
        if not context:
 
171
            context = {}
 
172
        if not vals.get('document_date') and vals.get('date'):
 
173
            vals.update({'document_date': vals.get('date')})
 
174
        if vals.get('document_date', False) and vals.get('date', False) and vals.get('date') < vals.get('document_date'):
 
175
            raise osv.except_osv(_('Error'), _('Posting date should be later than Document Date.'))
 
176
        return super(account_move_line, self).create(cr, uid, vals, context=context, check=check)
 
177
 
 
178
    def write(self, cr, uid, ids, vals, context=None, check=True, update_check=True):
 
179
        """
 
180
        Check document_date and date validity
 
181
        """
 
182
        if not context:
 
183
            context = {}
 
184
        res = super(account_move_line, self).write(cr, uid, ids, vals, context=context, check=check, update_check=update_check)
 
185
        self._check_document_date(cr, uid, ids)
 
186
        return res
 
187
 
113
188
account_move_line()
114
189
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: