Files
tryton/invoice.py
T

58 lines
2.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 trytond.transaction import Transaction
from trytond.pool import Pool, PoolMeta
__all__ = ['InvoiceLine']
__metaclass__ = PoolMeta
class InvoiceLine:
__name__ = 'account.invoice.line'
@classmethod
def __setup__(cls):
super(InvoiceLine, cls).__setup__()
cls._error_messages.update({
'delete_purchase_invoice_line': 'You can not delete ' \
'invoice lines that comes from a purchase!',
})
@classmethod
def write(cls, lines, vals):
Purchase = Pool().get('purchase.purchase')
if 'invoice' in vals:
with Transaction().set_user(0, set_context=True):
purchases = Purchase.search([
('invoice_lines', 'in', [l.id for l in lines]),
])
if vals['invoice']:
Purchase.write(purchases, {
'invoices': [('add', [vals['invoice']])],
})
else:
for purchase in purchases:
invoice_ids = list(set([x.invoice.id for x
in purchase.invoice_lines
if x.invoice and x.id in lines])
- set([x.invoice.id for x
in purchase.invoice_lines
if x.invoice and x.id not in lines]))
Purchase.write([purchase], {
'invoices': [('unlink', invoice_ids)],
})
return super(InvoiceLine, cls).write(lines, vals)
@classmethod
def delete(cls, lines):
cursor = Transaction().cursor
if lines:
cursor.execute('SELECT id FROM purchase_invoice_line_rel ' \
'WHERE line IN (' + ','.join(['%s' for x in lines]) + ')',
[l.id for l in lines])
if cursor.rowcount:
cls.raise_user_error('delete_purchase_invoice_line')
super(InvoiceLine, cls).delete(lines)