53 lines
1.8 KiB
Python
53 lines
1.8 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.model import ModelView, Workflow
|
|
from trytond.pool import Pool, PoolMeta
|
|
|
|
|
|
class Sale(metaclass=PoolMeta):
|
|
__name__ = 'sale.sale'
|
|
|
|
def must_check_credit_limit(self):
|
|
return self.shipment_method == 'order'
|
|
|
|
@property
|
|
def credit_limit_amount(self):
|
|
"Amount to check against credit limit"
|
|
pool = Pool()
|
|
Currency = pool.get('currency.currency')
|
|
return Currency.compute(
|
|
self.currency, self.untaxed_amount, self.company.currency)
|
|
|
|
@classmethod
|
|
@ModelView.button
|
|
@Workflow.transition('confirmed')
|
|
def confirm(cls, sales):
|
|
for sale in sales:
|
|
if sale.must_check_credit_limit():
|
|
party = sale.invoice_party or sale.party
|
|
party.check_credit_limit(
|
|
sale.credit_limit_amount, sale.company, origin=sale)
|
|
super().confirm(sales)
|
|
|
|
|
|
class Line(metaclass=PoolMeta):
|
|
__name__ = 'sale.line'
|
|
|
|
@property
|
|
def credit_limit_quantity(self):
|
|
pool = Pool()
|
|
UoM = pool.get('product.uom')
|
|
if (self.type != 'line') or (self.quantity <= 0):
|
|
return None
|
|
quantity = self.quantity
|
|
if self.sale.invoice_method == 'shipment':
|
|
for move in self.moves_ignored:
|
|
quantity -= UoM.compute_qty(
|
|
move.unit, move.quantity, self.unit, round=False)
|
|
for invoice_line in self.invoice_lines:
|
|
if invoice_line.invoice in self.sale.invoices_ignored:
|
|
quantity -= UoM.compute_qty(
|
|
invoice_line.unit, invoice_line.quantity, self.unit,
|
|
round=False)
|
|
return quantity
|