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
|
from odoo import models, api, fields
from odoo.exceptions import AccessError, UserError, ValidationError
class AccountMoveLine(models.Model):
_inherit = "account.move.line"
cost_centre_id = fields.Many2one('cost.centre', string='Cost Centre')
is_required = fields.Boolean(string='Is Required', compute='_compute_is_required')
analytic_account_ids = fields.Many2many('account.analytic.account', string='Analytic Account')
line_no = fields.Integer('No', default=0)
def action_gl_reconcile(self):
lines = self
journal = self.env['account.journal'].search([
('suspense_account_id', '=', lines[0].account_id.id)
], limit=1)
if not journal:
raise UserError('Journal dengan suspense account ini tidak ditemukan!')
statement = self.env['account.bank.statement'].create({
'journal_id': journal.id,
'name': f'REKONSIL {journal.name} {lines[0].date.strftime("%d-%m-%Y")}',
'company_id': self.env.company.id,
'date': lines[0].date,
})
widget_vals = []
st_line_ids = []
for line in lines:
amount = line.debit - line.credit
st_line = self.env['account.bank.statement.line'].create({
'statement_id': statement.id,
'date': line.date or fields.Date.today(),
'payment_ref': line.name,
'partner_id': line.partner_id.id,
'amount': amount,
'ref': line.name,
})
st_line_ids.append(st_line.id)
widget_vals.append({
'partner_id': st_line.partner_id.id,
'counterpart_aml_dicts': [{
'counterpart_aml_id': line.id,
'debit': abs(amount) if amount < 0 else 0,
'credit': abs(amount) if amount > 0 else 0,
'name': line.name or '/',
}],
'payment_aml_ids': [],
'new_aml_dicts': [],
'to_check': False,
})
statement.button_post()
self.env['account.reconciliation.widget'].process_bank_statement_line(
st_line_ids,
widget_vals
)
# statement.button_validate_or_action()
return {
'effect': {
'fadeout': 'slow',
'message': 'Statement + Auto Reconcile sukses besar 😎🔥',
'type': 'rainbow_man',
}
}
@api.onchange('account_id')
def _onchange_account_id(self):
for account in self:
analytic_account = account.account_id.analytic_tag_ids
account.analytic_tag_ids = analytic_account
@api.onchange('account_id')
def _compute_is_required(self):
for account in self:
if account.account_id.code and account.account_id.code[0] in ['6', '7']:
account.is_required = True
else:
account.is_required = False
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
if 'move_id' in vals:
move = self.env['account.move'].browse(vals['move_id'])
if move.move_type == 'entry' and move.is_hr == True:
vals['name'] = move.ref
return super().create(vals_list)
|