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
|
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2011 MSF, TeMPO consulting
#
# 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 osv import fields, osv
from tools.translate import _
import logging
class account_period_closing_level(osv.osv):
_inherit = "account.period"
# To avoid issues with existing OpenERP code (account move line for example),
# the state are:
# - 'created' for Draft
# - 'draft' for Open
# - 'done' for HQ-Closed
def _get_state(self, cursor, user_id, context=None):
return (('created','Draft'), \
('draft', 'Open'), \
('field-closed', 'Field-Closed'), \
('mission-closed', 'Mission-Closed'), \
('done', 'HQ-Closed'))
def action_set_state(self, cr, uid, ids, context):
# check if unposted move lines are linked to this period
move_line_obj = self.pool.get('account.move.line')
move_lines = move_line_obj.search(cr, uid, [('period_id', 'in', ids)])
for move_line in move_line_obj.browse(cr, uid, move_lines):
if move_line.state != 'valid':
raise osv.except_osv(_('Error !'), _('You cannot close a period containing unbalanced move lines!'))
# otherwise, change the period's and journal period's states
if context['state']:
state = context['state']
if state == 'done':
journal_state = 'done'
else:
journal_state = 'draft'
for id in ids:
cr.execute('update account_journal_period set state=%s where period_id=%s', (journal_state, id))
cr.execute('update account_period set state=%s where id=%s', (state, id))
return True
_columns = {
'special': fields.boolean('Opening/Closing Period', size=12,
help="These periods can overlap.", readonly=True),
'state': fields.selection(_get_state, 'State', readonly=True,
help='HQ opens a monthly period. After validation, it will be closed by the different levels.'),
}
def create(self, cr, uid, vals, context={}):
if not context:
context = {}
if context.get('update_mode') in ['init', 'update'] and 'state' not in vals:
logging.getLogger('init').info('Loading default draft state for account.period')
vals['state'] = 'draft'
return super(account_period_closing_level, self).create(cr, uid, vals, context=context)
_defaults = {
'state': 'created'
}
account_period_closing_level()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|