68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
# this repository contains the full copyright notices and license terms.
|
|
|
|
from collections import defaultdict
|
|
|
|
from trytond.pool import Pool, PoolMeta
|
|
|
|
|
|
class Invoice(metaclass=PoolMeta):
|
|
__name__ = 'account.invoice'
|
|
|
|
@classmethod
|
|
def _post(cls, invoices):
|
|
super()._post(invoices)
|
|
cls.post_commission_waiting_moves(invoices)
|
|
|
|
@classmethod
|
|
def create_commissions(cls, invoices):
|
|
pool = Pool()
|
|
Commission = pool.get('commission')
|
|
|
|
commissions = super().create_commissions(invoices)
|
|
|
|
Commission.create_waiting_move(commissions)
|
|
return commissions
|
|
|
|
@classmethod
|
|
def post_commission_waiting_moves(cls, invoices):
|
|
pool = Pool()
|
|
Move = pool.get('account.move')
|
|
|
|
moves = []
|
|
for invoice in invoices:
|
|
for line in invoice.lines:
|
|
for commission in line.from_commissions:
|
|
if (commission.waiting_move
|
|
and commission.waiting_move.state != 'posted'):
|
|
moves.append(commission.waiting_move)
|
|
if moves:
|
|
Move.post(moves)
|
|
|
|
|
|
class InvoiceLine(metaclass=PoolMeta):
|
|
__name__ = 'account.invoice.line'
|
|
|
|
def get_move_lines(self):
|
|
pool = Pool()
|
|
MoveLine = pool.get('account.move.line')
|
|
|
|
lines = super().get_move_lines()
|
|
if self.from_commissions:
|
|
amounts = defaultdict(int)
|
|
for commission in self.from_commissions:
|
|
if not commission.waiting_move:
|
|
continue
|
|
for line in commission.waiting_move.lines:
|
|
amounts[(line.account, line.party)] += (
|
|
line.debit - line.credit)
|
|
for (account, party), amount in amounts.items():
|
|
line = MoveLine()
|
|
line.debit = -amount if amount < 0 else 0
|
|
line.credit = amount if amount > 0 else 0
|
|
line.account = account
|
|
line.party = party
|
|
line.amount_second_currency = None
|
|
lines.append(line)
|
|
return lines
|