trytonpsk-hotel/invoice.py

91 lines
3.2 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 datetime import date
from trytond.pool import PoolMeta, Pool
class Invoice(metaclass=PoolMeta):
__name__ = 'account.invoice'
def auto_reconcile(self):
reconcile_lines = []
Reconciliation = Pool().get('account.move.reconciliation')
account_reconcile_id = self.account.id
balance = []
for ml in self.payment_lines:
if not ml.reconciliation and ml.account.id == account_reconcile_id:
reconcile_lines.append(ml)
balance.append(ml.debit - ml.credit)
for ml in self.move.lines:
if ml.account.id == account_reconcile_id:
reconcile_lines.append(ml)
balance.append(ml.debit - ml.credit)
if sum(balance) != 0:
return
if reconcile_lines:
Reconciliation.create([{
'lines': [('add', reconcile_lines)],
'date': date.today(),
}])
@classmethod
def post(cls, invoices):
super(Invoice, cls).post(invoices)
for invoice in invoices:
invoice.set_booking_payments()
# FIXME: esta creando notas en ceros
# for invoice in invoices:
# if invoice.type == 'out':
# cls.set_advances_from_origin(invoice)
def set_booking_payments(self):
for line in self.lines:
if line.origin and line.origin.__name__ == 'hotel.booking':
booking = line.origin
for payline in booking.payments:
if not payline.invoice and payline.party == self.party:
payline.invoice = self.id
payline.save()
# advances_lines = []
# if self.state == 'paid':
# return
#
# for line in invoice.lines:
# if line.origin and line.origin.__name__ == 'hotel.booking':
# booking = line.origin
# for payline in booking.payments:
# if payline.move and payline.party == self.party:
# for mline in payline.move.lines:
# if mline.account == self.account:
# advances_lines.append(mline)
# if advances_lines:
# invoice.add_payments(set(advances_lines))
@classmethod
def set_advances_from_origin(cls, invoice):
advances_to_add = []
vouchers = []
for line in invoice.lines:
if line.origin and line.origin.__name__ == 'hotel.booking':
booking = line.origin
if booking.vouchers:
for voucher in booking.vouchers:
if invoice.party.id == voucher.party.id:
vouchers.append(voucher)
# FIXME must pass lines of move
if vouchers:
invoice.create_move_advance(set(vouchers))
class InvoiceLine(metaclass=PoolMeta):
__name__ = 'account.invoice.line'
@classmethod
def _get_origin(cls):
return super(InvoiceLine, cls)._get_origin() + [
'hotel.booking'
]