Lots Management

This commit is contained in:
2026-05-09 17:23:54 +02:00
parent 65fe45bae2
commit 000cf54fbc
3 changed files with 25 additions and 36 deletions

View File

@@ -710,7 +710,7 @@ Owner technique: `a completer`
`sale_date`.
- Si le filtre `Side` vaut `All`, une ligne est conservee si son
`purchase_date` ou son `sale_date` entre dans les bornes.
- Le filtre `Book` du rapport cible une valeur de dimension analytique
- Le filtre `Dimension` du rapport cible une valeur de dimension analytique
rattachee au contrat achat ou vente via `analytic.dimension.assignment`.
- Le filtre `Strategy` cible les strategies MTM rattachees aux lignes achat
ou vente (`purchase.strategy` / `sale.strategy`).

View File

@@ -1223,7 +1223,7 @@ class LotQt(
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, book=None, strategy=None):
todate=None, dimension=None, strategy=None):
pool = Pool()
LotQt = pool.get('lot.qt')
lqt = LotQt.__table__()
@@ -1289,20 +1289,21 @@ class LotQt(
return sale_clause
return purchase_clause | sale_clause
def book_filter(purchase_id, sale_id):
if not book:
def dimension_filter(purchase_id, sale_id):
if not dimension:
return None
purchase_book = Exists(ada.select(
purchase_dimension = Exists(ada.select(
ada.id,
where=((ada.purchase == purchase_id) & (ada.value == book))))
sale_book = Exists(ada.select(
where=((ada.purchase == purchase_id)
& (ada.value == dimension))))
sale_dimension = Exists(ada.select(
ada.id,
where=((ada.sale == sale_id) & (ada.value == book))))
where=((ada.sale == sale_id) & (ada.value == dimension))))
if ps == 'P':
return purchase_book
return purchase_dimension
elif ps == 'S':
return sale_book
return purchase_book | sale_book
return sale_dimension
return purchase_dimension | sale_dimension
wh = ((lqt.lot_quantity > 0) & ((lp.lot_type == 'virtual') | (ls.lot_type == 'virtual')))
@@ -1330,9 +1331,9 @@ class LotQt(
date_clause = date_filter(pu.purchase_date, sa.sale_date)
if date_clause is not None:
wh &= date_clause
book_clause = book_filter(pu.id, sa.id)
if book_clause is not None:
wh &= book_clause
dimension_clause = dimension_filter(pu.id, sa.id)
if dimension_clause is not None:
wh &= dimension_clause
if strategy:
purchase_strategy = Exists(pstr.select(
pstr.id,
@@ -1468,9 +1469,9 @@ class LotQt(
date_clause = date_filter(pu.purchase_date, sa.sale_date)
if date_clause is not None:
wh2 &= date_clause
book_clause = book_filter(pu.id, sa.id)
if book_clause is not None:
wh2 &= book_clause
dimension_clause = dimension_filter(pu.id, sa.id)
if dimension_clause is not None:
wh2 &= dimension_clause
if strategy:
purchase_strategy = Exists(pstr.select(
pstr.id,
@@ -2017,7 +2018,7 @@ class LotReport(
shipping_status = context.get('shipping_status')
asof = context.get('asof')
todate = context.get('todate')
book = context.get('book')
dimension = context.get('dimension')
strategy = context.get('strategy')
finished = context.get('finished')
query = LotQT.getQuery(
@@ -2038,7 +2039,7 @@ class LotReport(
shipping_status=shipping_status,
asof=asof,
todate=todate,
book=book,
dimension=dimension,
strategy=strategy)
return query
@@ -2090,7 +2091,7 @@ class LotContext(ModelView):
client = fields.Many2One('party.party', "Client")
sale = fields.Many2One('sale.sale', "Sale")
shipment = fields.Many2One('stock.shipment.in', "Shipment")
book = fields.Many2One('analytic.dimension.value', "Book")
dimension = fields.Many2One('analytic.dimension.value', "Dimension")
strategy = fields.Many2One('mtm.strategy', "Strategy")
product = fields.Many2One('product.product',"Product")
location = fields.Many2One('stock.location',"Location")
@@ -2149,19 +2150,7 @@ class LotContext(ModelView):
def default_finished(cls):
return False
@classmethod
def default_asof(cls):
pool = Pool()
Date = pool.get('ir.date')
return Date.today().replace(day=1,month=1,year=1999)
@classmethod
def default_todate(cls):
pool = Pool()
Date = pool.get('ir.date')
return Date.today()
@classmethod
@classmethod
def default_type(cls):
return 'all'
@@ -2198,7 +2187,7 @@ class LotContext(ModelView):
fields_names = fields_names.copy() if fields_names is not None else []
for field_name in [
'purchase', 'sale', 'shipment', 'supplier', 'client',
'book', 'strategy', 'product', 'location', 'type',
'dimension', 'strategy', 'product', 'location', 'type',
'shipping_status', 'ps', 'state', 'wh', 'mode', 'group',
'origin', 'finished', 'asof', 'todate']:
if field_name not in fields_names:

View File

@@ -9,8 +9,8 @@
<field name="sale"/>
<label name="shipment"/>
<field name="shipment"/>
<label name="book"/>
<field name="book"/>
<label name="dimension"/>
<field name="dimension"/>
<label name="strategy"/>
<field name="strategy"/>
<label name="supplier"/>