Skip to content

Commit 3afde01

Browse files
ica-adhocrov-adhoc
authored andcommitted
[ADD] academic_account_interests: refactor
refactor por cambio en este PR ingadhoc/account-financial-tools#608 X-original-commit: 8629bd5
1 parent c80a3ce commit 3afde01

File tree

1 file changed

+65
-11
lines changed

1 file changed

+65
-11
lines changed

academic_account_interests/models/res_company_interest.py

+65-11
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,77 @@
88
class ResCompanyInterest(models.Model):
99
_inherit = 'res.company.interest'
1010

11-
def _prepare_interest_invoice(self, line, to_date, journal):
12-
line = list(line)
13-
student = line[0]
14-
partner = line[1]
15-
line.pop(0)
16-
res = super()._prepare_interest_invoice(line, to_date, journal)
11+
def _prepare_interest_invoice(self, partner, debt, to_date, journal):
12+
student = partner
13+
partner = debt['partner_id']
14+
res = super()._prepare_interest_invoice(partner, debt, to_date, journal)
1715
if res:
1816
res.update({
1917
'student_id': student.id,
2018
'partner_id': partner.id,
2119
})
2220
return res
2321

24-
def create_invoices(self, to_date, groupby=['student_id', 'partner_id']):
25-
return super().create_invoices(to_date, groupby=groupby)
22+
def _calculate_debts(self, from_date, to_date, groupby=['student_id', 'partner_id']):
23+
deuda = {}
2624

27-
def _get_move_line_domains(self, to_date):
28-
res = super()._get_move_line_domains(to_date)
29-
res += [('journal_id.type', '=', 'sale'), ('move_id.state', '=', 'posted')]
25+
interest_rate = {
26+
'daily': 1,
27+
'weekly': 7,
28+
'monthly': 30,
29+
'yearly': 360,
30+
}
31+
32+
# Deudas de períodos anteriores
33+
previous_grouped_lines = self.env['account.move.line']._read_group(
34+
domain=self._get_move_line_domains() + [('full_reconcile_id', '=', False), ('date_maturity', '<', from_date)],
35+
groupby=groupby,
36+
aggregates=['amount_residual:sum'],
37+
)
38+
for x in previous_grouped_lines:
39+
self._update_deuda(deuda, x[0], 'Deuda periodos anteriores', x[2] * self.rate)
40+
deuda[x[0]]['partner_id'] = x[1]
41+
42+
# Intereses por el último período
43+
last_period_lines = self.env['account.move.line'].search(
44+
self._get_move_line_domains() + [('amount_residual', '>', 0), ('date_maturity', '>=', from_date), ('date_maturity', '<', to_date)]
45+
)
46+
for student, amls in last_period_lines.grouped('student_id').items():
47+
interest = sum(
48+
move.amount_residual * ((to_date - move.invoice_date_due).days - 1) * (self.rate / interest_rate[self.rule_type])
49+
for move, lines in amls.grouped('move_id').items()
50+
)
51+
self._update_deuda(deuda, student, 'Deuda último periodo', interest)
52+
deuda[student]['partner_id'] = amls[0].partner_id
53+
54+
# Intereses por pagos tardíos
55+
if self.late_payment_interest:
56+
57+
partials = self.env['account.partial.reconcile'].search([
58+
# lo dejamos para NTH
59+
# debit_move_id. safe eval domain
60+
('debit_move_id.partner_id.active', '=', True),
61+
('debit_move_id.date_maturity', '>=', from_date),
62+
('debit_move_id.date_maturity', '<=', to_date),
63+
('debit_move_id.parent_state', '=', 'posted'),
64+
('debit_move_id.account_id', 'in', self.receivable_account_ids.ids),
65+
('credit_move_id.date', '>=', from_date),
66+
('credit_move_id.date', '<', to_date)]).grouped('debit_move_id')
67+
68+
for move_line, parts in partials.items():
69+
due_payments = parts.filtered(lambda x: x.credit_move_id.date > x.debit_move_id.date_maturity)
70+
interest = 0
71+
if due_payments:
72+
due_payments_amount = sum(due_payments.mapped('amount'))
73+
last_date_payment = parts.filtered(lambda x: x.credit_move_id.date > x.debit_move_id.date_maturity).sorted('max_date')[-1].max_date
74+
days = (last_date_payment - move_line.date_maturity).days
75+
interest += due_payments_amount * days * (self.rate / interest_rate[self.rule_type])
76+
self._update_deuda(deuda, move_line.student_id, 'Deuda pagos vencidos', interest)
77+
deuda[student]['partner_id'] = move_line.partner_id
78+
79+
return deuda
80+
81+
def _get_move_line_domains(self):
82+
res = super()._get_move_line_domains()
83+
res += [('journal_id.type', '=', 'sale')]
3084
return res

0 commit comments

Comments
 (0)