26.03.26
This commit is contained in:
@@ -6,19 +6,34 @@ from trytond.pool import PoolMeta
|
||||
class Invoice(metaclass=PoolMeta):
|
||||
__name__ = 'account.invoice'
|
||||
|
||||
def _get_report_purchase(self):
|
||||
purchases = list(self.purchases or [])
|
||||
return purchases[0] if purchases else None
|
||||
|
||||
def _get_report_sale(self):
|
||||
# Bridge invoice templates to the originating sale so FODT files can
|
||||
# reuse stable sale.report_* properties instead of complex expressions.
|
||||
sales = list(self.sales or [])
|
||||
return sales[0] if sales else None
|
||||
|
||||
def _get_report_trade(self):
|
||||
return self._get_report_sale() or self._get_report_purchase()
|
||||
|
||||
def _get_report_purchase_line(self):
|
||||
purchase = self._get_report_purchase()
|
||||
if purchase and purchase.lines:
|
||||
return purchase.lines[0]
|
||||
|
||||
def _get_report_sale_line(self):
|
||||
sale = self._get_report_sale()
|
||||
if sale and sale.lines:
|
||||
return sale.lines[0]
|
||||
|
||||
def _get_report_trade_line(self):
|
||||
return self._get_report_sale_line() or self._get_report_purchase_line()
|
||||
|
||||
def _get_report_lot(self):
|
||||
line = self._get_report_sale_line()
|
||||
line = self._get_report_trade_line()
|
||||
if line and line.lots:
|
||||
for lot in line.lots:
|
||||
if lot.lot_type == 'physic':
|
||||
@@ -37,81 +52,81 @@ class Invoice(metaclass=PoolMeta):
|
||||
|
||||
@property
|
||||
def report_address(self):
|
||||
sale = self._get_report_sale()
|
||||
if sale and sale.report_address:
|
||||
return sale.report_address
|
||||
trade = self._get_report_trade()
|
||||
if trade and trade.report_address:
|
||||
return trade.report_address
|
||||
if self.invoice_address and self.invoice_address.full_address:
|
||||
return self.invoice_address.full_address
|
||||
return ''
|
||||
|
||||
@property
|
||||
def report_contract_number(self):
|
||||
sale = self._get_report_sale()
|
||||
if sale and sale.full_number:
|
||||
return sale.full_number
|
||||
trade = self._get_report_trade()
|
||||
if trade and trade.full_number:
|
||||
return trade.full_number
|
||||
return self.origins or ''
|
||||
|
||||
@property
|
||||
def report_shipment(self):
|
||||
sale = self._get_report_sale()
|
||||
if sale and sale.report_shipment:
|
||||
return sale.report_shipment
|
||||
trade = self._get_report_trade()
|
||||
if trade and trade.report_shipment:
|
||||
return trade.report_shipment
|
||||
return self.description or ''
|
||||
|
||||
@property
|
||||
def report_trader_initial(self):
|
||||
sale = self._get_report_sale()
|
||||
if sale and sale.trader:
|
||||
return self.trader.initial
|
||||
trade = self._get_report_trade()
|
||||
if trade and getattr(trade, 'trader', None):
|
||||
return trade.trader.initial or ''
|
||||
return ''
|
||||
|
||||
|
||||
@property
|
||||
def report_operator_initial(self):
|
||||
sale = self._get_report_sale()
|
||||
if sale and sale.operator:
|
||||
return self.operator.initial
|
||||
trade = self._get_report_trade()
|
||||
if trade and getattr(trade, 'operator', None):
|
||||
return trade.operator.initial or ''
|
||||
return ''
|
||||
|
||||
@property
|
||||
def report_product_description(self):
|
||||
line = self._get_report_sale_line()
|
||||
line = self._get_report_trade_line()
|
||||
if line and line.product:
|
||||
return line.product.description or ''
|
||||
return ''
|
||||
|
||||
@property
|
||||
def report_crop_name(self):
|
||||
sale = self._get_report_sale()
|
||||
if sale and sale.crop:
|
||||
return sale.crop.name or ''
|
||||
trade = self._get_report_trade()
|
||||
if trade and getattr(trade, 'crop', None):
|
||||
return trade.crop.name or ''
|
||||
return ''
|
||||
|
||||
@property
|
||||
def report_attributes_name(self):
|
||||
line = self._get_report_sale_line()
|
||||
line = self._get_report_trade_line()
|
||||
if line:
|
||||
return line.attributes_name or ''
|
||||
return getattr(line, 'attributes_name', '') or ''
|
||||
return ''
|
||||
|
||||
@property
|
||||
def report_price(self):
|
||||
sale = self._get_report_sale()
|
||||
if sale and sale.report_price:
|
||||
return sale.report_price
|
||||
trade = self._get_report_trade()
|
||||
if trade and trade.report_price:
|
||||
return trade.report_price
|
||||
return ''
|
||||
|
||||
@property
|
||||
def report_payment_date(self):
|
||||
sale = self._get_report_sale()
|
||||
if sale and sale.report_payment_date:
|
||||
return sale.report_payment_date
|
||||
trade = self._get_report_trade()
|
||||
if trade and trade.report_payment_date:
|
||||
return trade.report_payment_date
|
||||
return ''
|
||||
|
||||
@property
|
||||
def report_payment_description(self):
|
||||
sale = self._get_report_sale()
|
||||
if sale and sale.payment_term:
|
||||
return sale.payment_term.description or ''
|
||||
trade = self._get_report_trade()
|
||||
if trade and trade.payment_term:
|
||||
return trade.payment_term.description or ''
|
||||
if self.payment_term:
|
||||
return self.payment_term.description or ''
|
||||
return ''
|
||||
@@ -121,6 +136,12 @@ class Invoice(metaclass=PoolMeta):
|
||||
sale = self._get_report_sale()
|
||||
if sale and sale.report_nb_bale:
|
||||
return sale.report_nb_bale
|
||||
line = self._get_report_trade_line()
|
||||
if line and line.lots:
|
||||
nb_bale = sum(
|
||||
lot.lot_qt for lot in line.lots if lot.lot_type == 'physic'
|
||||
)
|
||||
return 'NB BALES: ' + str(int(nb_bale))
|
||||
return ''
|
||||
|
||||
@property
|
||||
@@ -128,13 +149,25 @@ class Invoice(metaclass=PoolMeta):
|
||||
sale = self._get_report_sale()
|
||||
if sale and sale.report_gross != '':
|
||||
return sale.report_gross
|
||||
line = self._get_report_trade_line()
|
||||
if line and line.lots:
|
||||
return sum(
|
||||
lot.get_current_gross_quantity_converted()
|
||||
for lot in line.lots if lot.lot_type == 'physic'
|
||||
)
|
||||
return ''
|
||||
|
||||
@property
|
||||
def report_net(self):
|
||||
sale = self._get_report_sale()
|
||||
if sale and sale.report_net != '':
|
||||
return sale.report_net
|
||||
trade = self._get_report_trade()
|
||||
if trade and getattr(trade, 'report_net', '') != '':
|
||||
return trade.report_net
|
||||
line = self._get_report_trade_line()
|
||||
if line and line.lots:
|
||||
return sum(
|
||||
lot.get_current_quantity_converted()
|
||||
for lot in line.lots if lot.lot_type == 'physic'
|
||||
)
|
||||
if self.lines:
|
||||
return self.lines[0].quantity
|
||||
return ''
|
||||
@@ -168,11 +201,14 @@ class Invoice(metaclass=PoolMeta):
|
||||
|
||||
@property
|
||||
def report_incoterm(self):
|
||||
sale = self._get_report_sale()
|
||||
if not sale:
|
||||
trade = self._get_report_trade()
|
||||
if not trade:
|
||||
return ''
|
||||
incoterm = sale.incoterm.code if sale.incoterm else ''
|
||||
location = sale.incoterm_location.party_name if sale.incoterm_location else ''
|
||||
incoterm = trade.incoterm.code if getattr(trade, 'incoterm', None) else ''
|
||||
location = (
|
||||
trade.incoterm_location.party_name
|
||||
if getattr(trade, 'incoterm_location', None) else ''
|
||||
)
|
||||
if incoterm and location:
|
||||
return f"{incoterm} {location}"
|
||||
return incoterm or location
|
||||
@@ -180,15 +216,25 @@ class Invoice(metaclass=PoolMeta):
|
||||
@property
|
||||
def report_proforma_invoice_number(self):
|
||||
lot = self._get_report_lot()
|
||||
if lot and lot.sale_invoice_line_prov and lot.sale_invoice_line_prov.invoice:
|
||||
return lot.sale_invoice_line_prov.invoice.number or ''
|
||||
if lot:
|
||||
line = (
|
||||
getattr(lot, 'sale_invoice_line_prov', None)
|
||||
or getattr(lot, 'invoice_line_prov', None)
|
||||
)
|
||||
if line and line.invoice:
|
||||
return line.invoice.number or ''
|
||||
return ''
|
||||
|
||||
@property
|
||||
def report_proforma_invoice_date(self):
|
||||
lot = self._get_report_lot()
|
||||
if lot and lot.sale_invoice_line_prov and lot.sale_invoice_line_prov.invoice:
|
||||
return lot.sale_invoice_line_prov.invoice.invoice_date
|
||||
if lot:
|
||||
line = (
|
||||
getattr(lot, 'sale_invoice_line_prov', None)
|
||||
or getattr(lot, 'invoice_line_prov', None)
|
||||
)
|
||||
if line and line.invoice:
|
||||
return line.invoice.invoice_date
|
||||
|
||||
@property
|
||||
def report_controller_name(self):
|
||||
|
||||
Reference in New Issue
Block a user