forked from NaN-tic/trytond-account_move_renumber
-
Notifications
You must be signed in to change notification settings - Fork 1
/
account.py
112 lines (94 loc) · 3.96 KB
/
account.py
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# The COPYRIGHT file at the top level of this repository contains the full
# copyright notices and license terms.
from trytond.model import ModelView, fields
from trytond.wizard import Wizard, StateView, StateAction, Button
from trytond.pool import Pool, PoolMeta
from trytond.pyson import PYSONEncoder, Eval
from trytond.exceptions import UserWarning
from trytond.i18n import gettext
class Move(metaclass=PoolMeta):
__name__ = 'account.move'
@classmethod
def __setup__(cls):
super().__setup__()
if 'post_number' not in cls._check_modify_exclude:
cls._check_modify_exclude.append('post_number')
class RenumberMovesStart(ModelView):
'Renumber Account Moves Start'
__name__ = 'account.move.renumber.start'
fiscalyear = fields.Many2One('account.fiscalyear', 'Fiscal Year',
required=True)
first_number = fields.Integer('First Number', required=True,
domain=[('first_number', '>', 0)])
first_move = fields.Many2One('account.move', 'First Move', required=True,
domain=[('period.fiscalyear', '=', Eval('fiscalyear', None))])
@staticmethod
def default_first_number():
return 2
class RenumberMoves(Wizard):
'Renumber Account Moves'
__name__ = 'account.move.renumber'
start = StateView('account.move.renumber.start',
'account_move_renumber.move_renumber_start_view_form', [
Button('Cancel', 'end', 'tryton-cancel'),
Button('Renumber', 'renumber', 'tryton-ok', default=True),
])
renumber = StateAction('account.act_move_form')
def do_renumber(self, action):
pool = Pool()
Move = pool.get('account.move')
Sequence = pool.get('ir.sequence')
Warning = pool.get('res.user.warning')
draft_moves = Move.search([
('period.fiscalyear', '=', self.start.fiscalyear.id),
('state', '=', 'draft'),
])
if draft_moves:
key = 'move_renumber_draft_moves%s' % self.start.fiscalyear.id
if Warning.check(key):
raise UserWarning(key,
gettext('account_move_renumber.draft_moves_in_fiscalyear',
fiscalyear=self.start.fiscalyear.rec_name))
sequences = set([self.start.fiscalyear.post_move_sequence])
for period in self.start.fiscalyear.periods:
if period.post_move_sequence:
sequences.add(period.post_move_sequence)
Sequence.write(list(sequences), {
'number_next': self.start.first_number,
})
moves_to_renumber = Move.search([
('period.fiscalyear', '=', self.start.fiscalyear.id),
('post_number', '!=', None),
],
order=[
('date', 'ASC'),
('id', 'ASC'),
])
move_vals = []
for move in moves_to_renumber:
if move == self.start.first_move:
number_next_old = (
move.period.post_move_sequence_used.number_next)
Sequence.write(list(sequences), {
'number_next': 1,
})
move_vals.extend(([move], {
'post_number': Sequence.get_id(
move.period.post_move_sequence_used.id),
}))
Sequence.write(list(sequences), {
'number_next': number_next_old,
})
continue
move_vals.extend(([move], {
'post_number': (
move.period.post_move_sequence_used.get()),
}))
Move.write(*move_vals)
action['pyson_domain'] = PYSONEncoder().encode([
('period.fiscalyear', '=', self.start.fiscalyear.id),
('post_number', '!=', None),
])
return action, {}
def transition_renumber(self):
return 'end'