Added cases_digits in config.

This commit refs #14371
This commit is contained in:
Sergio Morillo 2022-06-03 17:51:57 +02:00
parent f439b65972
commit d37939b9b1
3 changed files with 48 additions and 38 deletions

View File

@ -11,6 +11,10 @@ from . import stock
from . import shipment
from .res import User
from . import stock_lot
from . import ir
from .unit_load import cases_digits
__all__ = [cases_digits]
def register():
@ -37,6 +41,7 @@ def register():
BatchDropUnitLoadData,
BatchDropUnitLoadConfirm,
User,
ir.Configuration,
module='stock_unit_load', type_='model')
Pool.register(
MoveUnitLoad,

24
ir.py Normal file
View File

@ -0,0 +1,24 @@
# The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.config import config
from trytond.model import fields
from trytond.pool import PoolMeta
cases_decimal = config.getint('product', 'cases_digits', default=0)
class Configuration(metaclass=PoolMeta):
__name__ = 'ir.configuration'
product_cases_decimal = fields.Integer("Product Cases Decimal")
@classmethod
def default_product_cases_decimal(cls):
return cases_decimal
def check(self):
super().check()
if self.product_cases_decimal != cases_decimal:
raise ValueError(
"The cases_digits %s in [product] configuration section "
"is different from the value %s in 'ir.configuration'." % (
cases_decimal, self.product_cases_decimal))

View File

@ -23,6 +23,9 @@ from trytond.wizard import Wizard, StateTransition, StateView, Button
from trytond.rpc import RPC
from trytond.cache import Cache
from trytond.i18n import gettext
from .ir import cases_decimal
cases_digits = (16, cases_decimal)
__all__ = ['UnitLoad', 'UnitLoadMove', 'MoveUnitLoad',
'MoveUnitLoadStart', 'UnitLoadLabel', 'DropUnitLoadData',
@ -196,23 +199,20 @@ class UnitLoad(ModelSQL, ModelView):
'get_location_type')
dropped = fields.Boolean('Dropped', readonly=True, select=True)
cases_quantity = fields.Float('Cases', required=True,
digits=(16, Eval('cases_digits', 2)),
digits=cases_digits,
states={'readonly': (Eval('state') != 'draft') | (
Eval('production_state') == 'done')},
depends=['cases_digits', 'production_state', 'state'])
depends=['production_state', 'state'])
quantity_per_case = fields.Function(
fields.Float('Quantity per Case', digits=(16, Eval('uom_digits', 0)),
states={'readonly': (Eval('state') != 'draft') | (
Eval('production_state') == 'done')},
depends=['uom_digits', 'production_state', 'state']),
'get_quantity_per_case', setter='set_quantity_per_case')
cases_digits = fields.Function(fields.Integer('Cases Digits'),
'on_change_with_cases_digits')
available_cases_quantity = fields.Function(
fields.Float('Available cases',
digits=(16, Eval('cases_digits', 2)),
domain=[('available_cases_quantity', '>=', 0)],
depends=['cases_digits']),
digits=cases_digits,
domain=[('available_cases_quantity', '>=', 0)]),
'get_available_cases_quantity',
searcher='search_available_cases_quantity')
currency_digits = fields.Function(fields.Integer('Currency Digits'),
@ -1055,17 +1055,6 @@ class UnitLoad(ModelSQL, ModelView):
'state': state
})
@fields.depends('cases_quantity')
def on_change_with_cases_digits(self, name=None):
return self.default_cases_digits()
@classmethod
def default_cases_digits(cls):
pool = Pool()
Modeldata = pool.get('ir.model.data')
Uom = pool.get('product.uom')
return Uom(Modeldata.get_id('product', 'uom_unit')).digits
@fields.depends('quantity_per_case', 'cases_quantity',
methods=['on_change_quantity'])
def on_change_quantity_per_case(self):
@ -1093,7 +1082,7 @@ class UnitLoad(ModelSQL, ModelView):
if dropped_qty:
dropped_cases = round(
(dropped_qty / record.internal_quantity
) * record.cases_quantity, record.cases_digits)
) * record.cases_quantity, cases_digits[1])
res[record.id] -= dropped_cases
else:
res[record.id] = 0.0
@ -1935,18 +1924,15 @@ class DropUnitLoadData(ModelView):
('type', '=', 'lost_found')],
depends=['warehouse_production'])
cases_quantity = fields.Float('Cases', readonly=True,
digits=(16, Eval('cases_digits', 2)),
depends=['cases_digits'])
digits=cases_digits)
available_cases_quantity = fields.Float('Available cases', readonly=True,
digits=(16, Eval('cases_digits', 2)),
depends=['cases_digits'])
digits=cases_digits)
drop_cases_quantity = fields.Float('Cases to drop', required=True,
digits=(16, Eval('cases_digits', 2)), domain=[
digits=cases_digits, domain=[
('drop_cases_quantity', '>', 0),
('drop_cases_quantity', '<=', Eval('available_cases_quantity'))
],
depends=['cases_digits', 'available_cases_quantity'])
cases_digits = fields.Integer('Cases Digits')
depends=['available_cases_quantity'])
parallel = fields.Boolean('Parallel',
states={
'invisible': Not(Equal(Eval('propose_drop_end_date'), 'last_drop'))
@ -2019,25 +2005,21 @@ class DropUnitLoadEndDate(ModelView):
unit_load = fields.Many2One('stock.unit_load', 'Unit load', readonly=True)
cases_quantity = fields.Float('Cases', readonly=True,
digits=(16, Eval('cases_digits', 2)),
depends=['cases_digits'])
digits=cases_digits)
available_cases_quantity = fields.Float('Available cases', readonly=True,
digits=(16, Eval('cases_digits', 2)),
depends=['cases_digits'])
digits=cases_digits)
drop_cases_quantity = fields.Float('Dropped cases', required=True,
digits=(16, Eval('cases_digits', 2)), domain=[
digits=cases_digits, domain=[
('drop_cases_quantity', '>', 0),
('drop_cases_quantity', '<=', Eval('available_cases_quantity'))
],
depends=['cases_digits', 'available_cases_quantity'])
depends=['available_cases_quantity'])
initial_drop_cases_quantity = fields.Float('Initial Cases to drop',
digits=(16, Eval('cases_digits', 2)), domain=[
digits=cases_digits, domain=[
('drop_cases_quantity', '>', 0)
], states={
'invisible': Bool(True)
},
depends=['cases_digits'])
cases_digits = fields.Integer('Cases Digits')
})
start_date = fields.DateTime('Start date')
end_date = fields.DateTime('End date', domain=[
If(Eval('end_date'),
@ -2137,7 +2119,6 @@ class DropUnitLoad(Wizard):
'cases_quantity': unit_load.cases_quantity,
'available_cases_quantity': unit_load.available_cases_quantity,
'drop_cases_quantity': unit_load.available_cases_quantity,
'cases_digits': unit_load.cases_digits,
'propose_drop_end_date': conf.propose_drop_end_date,
}
if (tran.context.get('active_model') == Unitload.__name__
@ -2167,7 +2148,7 @@ class DropUnitLoad(Wizard):
drop_cases = round((
(move.internal_quantity or move.quantity) /
unit_load.internal_quantity) * unit_load.cases_quantity,
unit_load.cases_digits)
cases_digits[1])
available_cases = unit_load.available_cases_quantity + \
drop_cases
else: