Files
tryton/purchase.py
T
Cédric Krier f51de10679 Fix typo to use id of party in write
(transplanted from 89427c1f51158e2dbbe32af542c1a2b9dffe3a86)
2013-01-15 11:55:08 +01:00

132 lines
5.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 __future__ import with_statement
from trytond.model import ModelView, ModelSQL, fields
from trytond.transaction import Transaction
class Purchase(ModelSQL, ModelView):
_name = 'purchase.purchase'
invoice_lines = fields.Many2Many('purchase.purchase-account.invoice.line',
'purchase', 'line', 'Invoice Lines', readonly=True)
invoice_lines_ignored = fields.Many2Many(
'purchase.purchase-ignored-account.invoice.line',
'purchase', 'invoice', 'Invoice Lines Ignored', readonly=True)
def init(self, module_name):
cursor = Transaction().cursor
# Migration from 1.2: packing renamed into shipment
cursor.execute("UPDATE ir_model_data "\
"SET fs_id = REPLACE(fs_id, 'packing', 'shipment') "\
"WHERE fs_id like '%%packing%%' "\
"AND module = %s", (module_name,))
super(Purchase, self).init(module_name)
def create_invoice(self, purchase_id):
invoice_obj = self.pool.get('account.invoice')
invoice_line_obj = self.pool.get('account.invoice.line')
res = super(Purchase, self).create_invoice(purchase_id)
if res:
invoice = invoice_obj.browse(res)
line_ids = [x.id for x in invoice.lines]
with Transaction().set_user(0, set_context=True):
invoice_line_obj.write(line_ids, {
'invoice': False,
'invoice_type': invoice.type,
'party': invoice.party.id,
'currency': invoice.currency.id,
'company': invoice.company.id,
})
self.write(purchase_id, {
'invoices': [('unlink', res)],
'invoice_lines': [('add', line_ids)],
})
with Transaction().set_user(0, set_context=True):
invoice_obj.workflow_trigger_validate(res, 'cancel')
invoice_obj.delete(res)
res = None
return res
def get_invoice_paid(self, purchases):
res = super(Purchase, self).get_invoice_paid(purchases)
for purchase in purchases:
val = True
ignored_ids = [x.id for x in purchase.invoice_lines_ignored]
for invoice_line in purchase.invoice_lines:
if not invoice_line.invoice:
val = False
break
if invoice_line.invoice.state != 'paid' \
and invoice_line.id not in ignored_ids:
val = False
break
res[purchase.id] = val
return res
def get_invoice_exception(self, purchases):
res = super(Purchase, self).get_invoice_exception(purchases)
for purchase in purchases:
val = False
ignored_ids = [x.id for x in purchase.invoice_lines_ignored]
for invoice_line in purchase.invoice_lines:
if invoice_line.invoice \
and invoice_line.invoice.state == 'cancel' \
and invoice_line.id not in ignored_ids:
val = True
break
res[purchase.id] = val
return res
def copy(self, ids, default=None):
if default is None:
default = {}
default = default.copy()
default['invoice_lines'] = False
default['invoice_lines_ignored'] = False
return super(Purchase, self).copy(ids, default=default)
def ignore_invoice_exception(self, purchase_id):
super(Purchase, self).ignore_invoice_exception(purchase_id)
purchase = self.browse(purchase_id)
invoice_line_ids = []
for invoice_line in purchase.invoice_lines:
if invoice_line.invoice \
and invoice_line.invoice.state == 'cancel':
invoice_line_ids.append(invoice_line.id)
if invoice_line_ids:
self.write(purchase_id, {
'invoice_lines_ignored': [('add', x) for x in invoice_line_ids],
})
Purchase()
class PurchaseInvoiceLine(ModelSQL):
'Purchase - Invoice Line'
_name = 'purchase.purchase-account.invoice.line'
_table = 'purchase_invoice_line_rel'
_description = __doc__
purchase = fields.Many2One('purchase.purchase', 'Purchase',
ondelete='CASCADE', select=1, required=True)
line = fields.Many2One('account.invoice.line', 'Invoice Line',
ondelete='RESTRICT', select=1, required=True)
PurchaseInvoiceLine()
class PurchaseIgnoredInvoiceLine(ModelSQL):
'Purchase - Ignored Invoice Line'
_name = 'purchase.purchase-ignored-account.invoice.line'
_table = 'purchase_invoice_line_ignored_rel'
_description = __doc__
purchase = fields.Many2One('purchase.purchase', 'Purchase',
ondelete='CASCADE', select=1, required=True)
invoice = fields.Many2One('account.invoice.line', 'Invoice Line',
ondelete='RESTRICT', select=1, required=True)
PurchaseIgnoredInvoiceLine()