Add wine_history_material/duration fields

This commit is contained in:
Raimon Esteve 2022-05-25 07:37:16 +02:00
parent d05e465c0f
commit c77a84c056
4 changed files with 63 additions and 11 deletions

View File

@ -29,16 +29,7 @@ class WineAgingHistory(ModelSQL, ModelView):
],
],
depends=['date_start'])
duration = fields.Function(fields.Integer("Duration"),
'get_duration')
@classmethod
def get_duration(cls, records, name):
res = dict((x.id, None) for x in records)
for record in records:
if record.date_end:
res[record.id] = (record.date_end - record.date_start).days
return res
duration = fields.Integer("Duration")
@classmethod
def delete(cls, records):

View File

@ -2,6 +2,8 @@
# this repository contains the full copyright notices and license terms.
from decimal import Decimal
from datetime import datetime
from sql.operators import (Less, Greater, LessEqual,
GreaterEqual, Equal, NotEqual)
from trytond.model import ModelSQL, ModelView, fields
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Eval
@ -120,6 +122,10 @@ class Product(WineMixin, metaclass=PoolMeta):
context={
'product': Eval('id'),
}, depends=['id'])
wine_history_material = fields.Function(fields.Text("History Material"),
'get_wine_history', searcher='search_wine_history')
wine_history_duration = fields.Function(fields.Text("History Duration"),
'get_wine_history', searcher='search_wine_history')
@classmethod
def deactivate_no_stock_variants_cron(cls):
@ -171,6 +177,50 @@ class Product(WineMixin, metaclass=PoolMeta):
/ 100).quantize(
Decimal(str(10 ** -self.__class__.alcohol_volume.digits[1])))
def get_wine_history(self, name):
# not implemented
pass
@classmethod
def search_wine_history(cls, name, clause):
pool = Pool()
WineAgingHistory = pool.get('wine.wine_aging.history')
Material = pool.get('stock.location.material')
wineaginghistory = WineAgingHistory.__table__()
material = Material.__table__()
Operator = fields.SQL_OPERATORS[clause[1]]
value = clause[2]
join1 = wineaginghistory.join(material,
condition=wineaginghistory.material == material.id)
query = join1.select(wineaginghistory.product)
if name == 'wine_history_material':
query.where = (Operator(material.name, clause[2]))
elif name == 'wine_history_duration':
operator = clause[1]
try:
value = int(value)
except ValueError:
value = None
if value:
if operator == '=':
query.where = Equal(wineaginghistory.duration, value)
elif operator == '!=':
query.where = NotEqual(wineaginghistory.duration, value)
elif operator == '>':
query.where = Greater(wineaginghistory.duration, value)
elif operator == '>=':
query.where = GreaterEqual(wineaginghistory.duration, value)
elif operator == '<':
query.where = Less(wineaginghistory.duration, value)
elif operator == '<=':
query.where = LessEqual(wineaginghistory.duration, value)
return [('id', 'in', query)]
class Cron(metaclass=PoolMeta):
__name__ = 'ir.cron'

View File

@ -464,7 +464,15 @@ class Production(metaclass=PoolMeta):
('product', '=', input.product),
('date_end', '=', None),
])
WineAgingHistory.write(histories, {'date_end': effective_date})
if histories:
to_write = []
for history in histories:
to_write.extend(([history], {
'date_end': effective_date,
'duration': (effective_date - history.date_start).days,
}))
WineAgingHistory.write(*to_write)
new_histories = []
for output in outputs:
new_histories += WineAgingHistory.create([{

View File

@ -124,5 +124,8 @@
<field name="wine_tasting_phase_comment" tree_invisible="1"/>
<field name="wine_tasting_phase_confirm" tree_invisible="1"/>
<field name="wine_tasting_phase_success" tree_invisible="1"/>
<field name="wine_history_material" tree_invisible="1"/>
<field name="wine_history_duration" tree_invisible="1"/>
</xpath>
</data>