diff --git a/modules/purchase_trade/lot.py b/modules/purchase_trade/lot.py
index ee03d5a..fc68879 100755
--- a/modules/purchase_trade/lot.py
+++ b/modules/purchase_trade/lot.py
@@ -2294,12 +2294,13 @@ class LotQt(
# OpenPosition = Pool().get('open.position')
# OpenPosition.create_from_purchase_line(pl)
- @classmethod
+ @classmethod
def getQuery(cls, purchase=None, sale=None, shipment=None, type=None,
state=None, qttype=None, supplier=None, client=None, ps=None,
lot_status=None, group=None, product=None, location=None,
origin=None, finished=False, shipping_status=None, asof=None,
- todate=None, dimension=None, strategy=None):
+ todate=None, dimension=None, strategy=None, vessel=None,
+ reference=None):
pool = Pool()
LotQt = pool.get('lot.qt')
lqt = LotQt.__table__()
@@ -2385,6 +2386,22 @@ class LotQt(
elif ps == 'S':
return sale_dimension
return purchase_dimension | sale_dimension
+
+ def reference_filter():
+ if not reference:
+ return None
+ pattern = '%%%s%%' % reference
+ purchase_reference = (
+ pu.reference.ilike(pattern)
+ | pu.our_reference.ilike(pattern))
+ sale_reference = (
+ sa.reference.ilike(pattern)
+ | sa.our_reference.ilike(pattern))
+ if ps == 'P':
+ return purchase_reference
+ elif ps == 'S':
+ return sale_reference
+ return purchase_reference | sale_reference
wh = ((lqt.lot_quantity > 0) & ((lp.lot_type == 'virtual') | (ls.lot_type == 'virtual')))
@@ -2403,10 +2420,12 @@ class LotQt(
wh &= (sa.id == sale)
if state != 'all':
wh &= (lqt.lot_av == state)
- if shipment:
- wh &= (lqt.lot_shipment_in == shipment)
- if product:
- wh &= (lqt.lot_product == product)
+ if shipment:
+ wh &= (lqt.lot_shipment_in == shipment)
+ if vessel:
+ wh &= (si.vessel == vessel)
+ if product:
+ wh &= (lqt.lot_product == product)
if location:
wh &= (Case((lqt.lot_shipment_in > 0, si.to_location),else_=Case((lqt.lot_shipment_internal > 0, sin.to_location),else_=pu.to_location)) == location)
date_clause = date_filter(pu.purchase_date, sa.sale_date)
@@ -2415,6 +2434,9 @@ class LotQt(
dimension_clause = dimension_filter(pu.id, sa.id)
if dimension_clause is not None:
wh &= dimension_clause
+ reference_clause = reference_filter()
+ if reference_clause is not None:
+ wh &= reference_clause
if strategy:
purchase_strategy = Exists(pstr.select(
pstr.id,
@@ -2569,10 +2591,12 @@ class LotQt(
wh2 &= (sa.id == sale)
if state != 'all':
wh2 &= (lp.lot_av == state)
- if shipment:
- wh2 &= (lp.lot_shipment_in == shipment)
- if product:
- wh2 &= (lp.lot_product == product)
+ if shipment:
+ wh2 &= (lp.lot_shipment_in == shipment)
+ if vessel:
+ wh2 &= (si.vessel == vessel)
+ if product:
+ wh2 &= (lp.lot_product == product)
if location:
wh2 &= (Case((lp.lot_shipment_in > 0, si.to_location), else_=Case((lp.lot_shipment_internal > 0, sin.to_location), else_=pu.to_location)) == location)
date_clause = date_filter(pu.purchase_date, sa.sale_date)
@@ -2581,6 +2605,9 @@ class LotQt(
dimension_clause = dimension_filter(pu.id, sa.id)
if dimension_clause is not None:
wh2 &= dimension_clause
+ reference_clause = reference_filter()
+ if reference_clause is not None:
+ wh2 &= reference_clause
if strategy:
purchase_strategy = Exists(pstr.select(
pstr.id,
@@ -3215,8 +3242,10 @@ class LotReport(
LotQT = Pool().get('lot.qt')
purchase = context.get('purchase')
sale = context.get('sale')
- shipment = context.get('shipment')
- product = context.get('product')
+ shipment = context.get('shipment')
+ vessel = context.get('vessel')
+ reference = context.get('reference')
+ product = context.get('product')
location = context.get('location')
type = context.get('type')
state = context.get('state')
@@ -3259,7 +3288,9 @@ class LotReport(
asof=asof,
todate=todate,
dimension=dimension,
- strategy=strategy)
+ strategy=strategy,
+ vessel=vessel,
+ reference=reference)
return query
@classmethod
@@ -3308,8 +3339,10 @@ class LotContext(ModelView):
purchase = fields.Many2One('purchase.purchase', "Purchase")
supplier = fields.Many2One('party.party', "Supplier")
client = fields.Many2One('party.party', "Client")
+ reference = fields.Char("Reference")
sale = fields.Many2One('sale.sale', "Sale")
shipment = fields.Many2One('stock.shipment.in', "Shipment")
+ vessel = fields.Many2One('trade.vessel', "Vessel")
dimension = fields.Many2One('analytic.dimension.value', "Dimension")
strategy = fields.Many2One('mtm.strategy', "Strategy")
product = fields.Many2One('product.product',"Product")
@@ -3407,7 +3440,8 @@ class LotContext(ModelView):
fields_names = fields_names.copy() if fields_names is not None else []
for field_name in [
'purchase', 'sale', 'shipment', 'supplier', 'client',
- 'dimension', 'strategy', 'product', 'location', 'type',
+ 'reference', 'vessel', 'dimension', 'strategy', 'product',
+ 'location', 'type',
'shipping_status', 'ps', 'state', 'wh', 'mode', 'group',
'origin', 'finished', 'asof', 'todate']:
if field_name not in fields_names:
diff --git a/modules/purchase_trade/view/lot_report_context_form.xml b/modules/purchase_trade/view/lot_report_context_form.xml
index 90ca9a3..6d76d5d 100755
--- a/modules/purchase_trade/view/lot_report_context_form.xml
+++ b/modules/purchase_trade/view/lot_report_context_form.xml
@@ -40,6 +40,9 @@
+
+
+
+
+
+
+
+
+