Show sale info for cost invoice lines.

This commit refs #14056
This commit is contained in:
Sergio Morillo 2020-07-09 00:55:58 +02:00
parent dba684588d
commit 4665a46f9a
4 changed files with 90 additions and 4 deletions

View File

@ -12,3 +12,7 @@ def register():
sale_cost.SaleCost,
invoice.InvoiceLine,
module='sale_cost_apply_invoice', type_='model')
Pool.register(
invoice.InvoiceLineSaleInfo,
module='sale_cost_apply_invoice', type_='model',
depends=['account_invoice_line_sale_info'])

View File

@ -1,8 +1,10 @@
# The COPYRIGHT file at the top level of this repository contains the full
# copyright notices and license terms.
from trytond.pool import PoolMeta
from trytond.pool import PoolMeta, Pool
from sql import Null
from sql.operators import Concat
__all__ = ['InvoiceLine']
__all__ = ['InvoiceLine', 'InvoiceLineSaleInfo']
class InvoiceLine(metaclass=PoolMeta):
@ -11,3 +13,81 @@ class InvoiceLine(metaclass=PoolMeta):
@classmethod
def _get_origin(cls):
return super(InvoiceLine, cls)._get_origin() + ['sale.cost']
class InvoiceLineSaleInfo(metaclass=PoolMeta):
__name__ = 'account.invoice.line'
def get_shipment_out_numbers(self, name=None):
if self.invoice_type == 'out' and self.origin and \
self.origin.__name__ == 'sale.cost':
shipments = set([shipment.rec_name
for shipment in self.origin.document.shipments])
return ','.join(sorted(shipments))
return super().get_shipment_out_numbers(name)
@classmethod
def search_shipment_out_numbers(cls, name, clause):
domain = super().search_shipment_out_numbers(name, clause)
return ['OR',
domain,
[('origin.document.shipments.number',) +
tuple(clause[1:3]) + ('sale.cost',) + tuple(clause[3:])]
]
@classmethod
def _get_order_shipment_out_numbers_query_items(cls, table):
pool = Pool()
StockMove = pool.get('stock.move')
SaleLine = pool.get('sale.line')
SaleCost = pool.get('sale.cost')
ShipmentOut = pool.get('stock.shipment.out')
sale_line = SaleLine.__table__()
stock_move = StockMove.__table__()
sale_cost = SaleCost.__table__()
shipment_out = ShipmentOut.__table__()
fromitem, conditionals = \
super()._get_order_shipment_out_numbers_query_items(table)
fromitem = fromitem.join(sale_cost, 'LEFT', condition=(
Concat('sale.cost,', sale_cost.id) == table.origin)
).join(sale_line, 'LEFT', condition=(
sale_line.sale == sale_cost.document)
).join(stock_move, 'LEFT', condition=(
Concat('sale.line,', sale_line.id) == stock_move.origin)
).join(shipment_out, 'LEFT', condition=(
Concat('stock.shipment.out,', shipment_out.id
) == stock_move.shipment))
conditionals.append((shipment_out.number != Null, shipment_out.number))
return fromitem, conditionals
@classmethod
def _get_order_sale_date_query_items(cls, table):
pool = Pool()
Sale = pool.get('sale.sale')
SaleCost = pool.get('sale.cost')
sale = Sale.__table__()
sale_cost = SaleCost.__table__()
fromitem, conditionals = super()._get_order_sale_date_query_items(
table)
fromitem = fromitem.join(sale_cost, 'LEFT', condition=(
Concat('sale.cost,', sale_cost.id) == table.origin)
).join(sale, 'LEFT', condition=(sale_cost.document == sale.id))
conditionals.append((sale.sale_date != Null, sale.sale_date))
return fromitem, conditionals
def get_sale_data(self, name=None):
if self.invoice_type == 'out' and self.origin and \
self.origin.__name__ == 'sale.cost':
return getattr(self.origin.document, name)
return super().get_sale_data(name)
@classmethod
def search_sale_data(cls, name, clause):
domain = super().search_sale_data(name, clause)
return ['OR',
domain,
('origin.document.%s' % clause[0],) +
tuple(clause[1:3]) + ('sale.cost',) + tuple(clause[3:])]

View File

@ -224,5 +224,4 @@ Delete applied costs::
>>> sale.save()
>>> lines = InvoiceLine.find([('origin', '=', 'sale.cost,%s' % invoice_out_cost.id)])
>>> len(lines)
0
0

View File

@ -6,5 +6,8 @@ depends:
sale_cost
document_cost_apply_invoice
extras_depend:
account_invoice_line_sale_info
xml:
sale_cost.xml