Files
tryton/invoice.py
T

71 lines
2.3 KiB
Python
Raw Normal View History

2014-12-19 12:24:22 +01:00
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
2018-06-26 19:11:46 +02:00
2014-12-19 12:24:22 +01:00
from collections import defaultdict
from trytond.pool import PoolMeta, Pool
2015-01-03 11:32:45 +01:00
from trytond.model import ModelView, Workflow
2014-12-19 12:24:22 +01:00
2018-06-26 19:11:46 +02:00
class Invoice(metaclass=PoolMeta):
2014-12-19 12:24:22 +01:00
__name__ = 'account.invoice'
2015-01-03 11:32:45 +01:00
@classmethod
@ModelView.button
@Workflow.transition('posted')
def post(cls, invoices):
super(Invoice, cls).post(invoices)
cls.post_commission_waiting_moves(invoices)
2014-12-19 12:24:22 +01:00
@classmethod
def create_commissions(cls, invoices):
pool = Pool()
Commission = pool.get('commission')
commissions = super(Invoice, cls).create_commissions(invoices)
Commission.create_waiting_move(commissions)
return commissions
2015-01-03 11:32:45 +01:00
@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)
2014-12-19 12:24:22 +01:00
2018-06-26 19:11:46 +02:00
class InvoiceLine(metaclass=PoolMeta):
2014-12-19 12:24:22 +01:00
__name__ = 'account.invoice.line'
def get_move_lines(self):
pool = Pool()
MoveLine = pool.get('account.move.line')
lines = super(InvoiceLine, self).get_move_lines()
2014-12-19 12:24:22 +01:00
if self.from_commissions:
2018-10-31 18:17:35 +01:00
amounts = defaultdict(int)
2014-12-19 12:24:22 +01:00
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)
2018-06-26 19:11:46 +02:00
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)
2014-12-19 12:24:22 +01:00
return lines