2022-03-16 14:16:18 +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.
|
2022-07-08 22:09:07 +02:00
|
|
|
from datetime import date
|
|
|
|
from trytond.pool import PoolMeta, Pool
|
2022-03-16 14:16:18 +01:00
|
|
|
|
|
|
|
class Invoice(metaclass=PoolMeta):
|
|
|
|
__name__ = 'account.invoice'
|
|
|
|
|
2022-07-08 22:09:07 +02:00
|
|
|
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(),
|
|
|
|
}])
|
|
|
|
|
2022-03-16 14:16:18 +01:00
|
|
|
@classmethod
|
|
|
|
def post(cls, invoices):
|
|
|
|
super(Invoice, cls).post(invoices)
|
2022-07-08 22:09:07 +02:00
|
|
|
for invoice in invoices:
|
|
|
|
invoice.set_booking_payments()
|
2022-05-22 08:52:05 +02:00
|
|
|
# FIXME: esta creando notas en ceros
|
|
|
|
# for invoice in invoices:
|
|
|
|
# if invoice.type == 'out':
|
|
|
|
# cls.set_advances_from_origin(invoice)
|
2022-03-16 14:16:18 +01:00
|
|
|
|
2022-07-08 22:09:07 +02:00
|
|
|
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))
|
|
|
|
|
2022-03-19 06:21:49 +01:00
|
|
|
@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
|
2022-07-08 22:09:07 +02:00
|
|
|
if booking.vouchers:
|
|
|
|
for voucher in booking.vouchers:
|
|
|
|
if invoice.party.id == voucher.party.id:
|
|
|
|
vouchers.append(voucher)
|
|
|
|
# FIXME must pass lines of move
|
2022-03-19 06:21:49 +01:00
|
|
|
if vouchers:
|
|
|
|
invoice.create_move_advance(set(vouchers))
|
2022-03-16 14:16:18 +01:00
|
|
|
|
|
|
|
|
|
|
|
class InvoiceLine(metaclass=PoolMeta):
|
|
|
|
__name__ = 'account.invoice.line'
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def _get_origin(cls):
|
|
|
|
return super(InvoiceLine, cls)._get_origin() + [
|
|
|
|
'hotel.booking'
|
|
|
|
]
|