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 . import shipment
from .res import User from .res import User
from . import stock_lot from . import stock_lot
from . import ir
from .unit_load import cases_digits
__all__ = [cases_digits]
def register(): def register():
@ -37,6 +41,7 @@ def register():
BatchDropUnitLoadData, BatchDropUnitLoadData,
BatchDropUnitLoadConfirm, BatchDropUnitLoadConfirm,
User, User,
ir.Configuration,
module='stock_unit_load', type_='model') module='stock_unit_load', type_='model')
Pool.register( Pool.register(
MoveUnitLoad, 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.rpc import RPC
from trytond.cache import Cache from trytond.cache import Cache
from trytond.i18n import gettext from trytond.i18n import gettext
from .ir import cases_decimal
cases_digits = (16, cases_decimal)
__all__ = ['UnitLoad', 'UnitLoadMove', 'MoveUnitLoad', __all__ = ['UnitLoad', 'UnitLoadMove', 'MoveUnitLoad',
'MoveUnitLoadStart', 'UnitLoadLabel', 'DropUnitLoadData', 'MoveUnitLoadStart', 'UnitLoadLabel', 'DropUnitLoadData',
@ -196,23 +199,20 @@ class UnitLoad(ModelSQL, ModelView):
'get_location_type') 'get_location_type')
dropped = fields.Boolean('Dropped', readonly=True, select=True) dropped = fields.Boolean('Dropped', readonly=True, select=True)
cases_quantity = fields.Float('Cases', required=True, cases_quantity = fields.Float('Cases', required=True,
digits=(16, Eval('cases_digits', 2)), digits=cases_digits,
states={'readonly': (Eval('state') != 'draft') | ( states={'readonly': (Eval('state') != 'draft') | (
Eval('production_state') == 'done')}, Eval('production_state') == 'done')},
depends=['cases_digits', 'production_state', 'state']) depends=['production_state', 'state'])
quantity_per_case = fields.Function( quantity_per_case = fields.Function(
fields.Float('Quantity per Case', digits=(16, Eval('uom_digits', 0)), fields.Float('Quantity per Case', digits=(16, Eval('uom_digits', 0)),
states={'readonly': (Eval('state') != 'draft') | ( states={'readonly': (Eval('state') != 'draft') | (
Eval('production_state') == 'done')}, Eval('production_state') == 'done')},
depends=['uom_digits', 'production_state', 'state']), depends=['uom_digits', 'production_state', 'state']),
'get_quantity_per_case', setter='set_quantity_per_case') '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( available_cases_quantity = fields.Function(
fields.Float('Available cases', fields.Float('Available cases',
digits=(16, Eval('cases_digits', 2)), digits=cases_digits,
domain=[('available_cases_quantity', '>=', 0)], domain=[('available_cases_quantity', '>=', 0)]),
depends=['cases_digits']),
'get_available_cases_quantity', 'get_available_cases_quantity',
searcher='search_available_cases_quantity') searcher='search_available_cases_quantity')
currency_digits = fields.Function(fields.Integer('Currency Digits'), currency_digits = fields.Function(fields.Integer('Currency Digits'),
@ -1055,17 +1055,6 @@ class UnitLoad(ModelSQL, ModelView):
'state': state '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', @fields.depends('quantity_per_case', 'cases_quantity',
methods=['on_change_quantity']) methods=['on_change_quantity'])
def on_change_quantity_per_case(self): def on_change_quantity_per_case(self):
@ -1093,7 +1082,7 @@ class UnitLoad(ModelSQL, ModelView):
if dropped_qty: if dropped_qty:
dropped_cases = round( dropped_cases = round(
(dropped_qty / record.internal_quantity (dropped_qty / record.internal_quantity
) * record.cases_quantity, record.cases_digits) ) * record.cases_quantity, cases_digits[1])
res[record.id] -= dropped_cases res[record.id] -= dropped_cases
else: else:
res[record.id] = 0.0 res[record.id] = 0.0
@ -1935,18 +1924,15 @@ class DropUnitLoadData(ModelView):
('type', '=', 'lost_found')], ('type', '=', 'lost_found')],
depends=['warehouse_production']) depends=['warehouse_production'])
cases_quantity = fields.Float('Cases', readonly=True, cases_quantity = fields.Float('Cases', readonly=True,
digits=(16, Eval('cases_digits', 2)), digits=cases_digits)
depends=['cases_digits'])
available_cases_quantity = fields.Float('Available cases', readonly=True, available_cases_quantity = fields.Float('Available cases', readonly=True,
digits=(16, Eval('cases_digits', 2)), digits=cases_digits)
depends=['cases_digits'])
drop_cases_quantity = fields.Float('Cases to drop', required=True, 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', '>', 0),
('drop_cases_quantity', '<=', Eval('available_cases_quantity')) ('drop_cases_quantity', '<=', Eval('available_cases_quantity'))
], ],
depends=['cases_digits', 'available_cases_quantity']) depends=['available_cases_quantity'])
cases_digits = fields.Integer('Cases Digits')
parallel = fields.Boolean('Parallel', parallel = fields.Boolean('Parallel',
states={ states={
'invisible': Not(Equal(Eval('propose_drop_end_date'), 'last_drop')) '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) unit_load = fields.Many2One('stock.unit_load', 'Unit load', readonly=True)
cases_quantity = fields.Float('Cases', readonly=True, cases_quantity = fields.Float('Cases', readonly=True,
digits=(16, Eval('cases_digits', 2)), digits=cases_digits)
depends=['cases_digits'])
available_cases_quantity = fields.Float('Available cases', readonly=True, available_cases_quantity = fields.Float('Available cases', readonly=True,
digits=(16, Eval('cases_digits', 2)), digits=cases_digits)
depends=['cases_digits'])
drop_cases_quantity = fields.Float('Dropped cases', required=True, 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', '>', 0),
('drop_cases_quantity', '<=', Eval('available_cases_quantity')) ('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', 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) ('drop_cases_quantity', '>', 0)
], states={ ], states={
'invisible': Bool(True) 'invisible': Bool(True)
}, })
depends=['cases_digits'])
cases_digits = fields.Integer('Cases Digits')
start_date = fields.DateTime('Start date') start_date = fields.DateTime('Start date')
end_date = fields.DateTime('End date', domain=[ end_date = fields.DateTime('End date', domain=[
If(Eval('end_date'), If(Eval('end_date'),
@ -2137,7 +2119,6 @@ class DropUnitLoad(Wizard):
'cases_quantity': unit_load.cases_quantity, 'cases_quantity': unit_load.cases_quantity,
'available_cases_quantity': unit_load.available_cases_quantity, 'available_cases_quantity': unit_load.available_cases_quantity,
'drop_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, 'propose_drop_end_date': conf.propose_drop_end_date,
} }
if (tran.context.get('active_model') == Unitload.__name__ if (tran.context.get('active_model') == Unitload.__name__
@ -2167,7 +2148,7 @@ class DropUnitLoad(Wizard):
drop_cases = round(( drop_cases = round((
(move.internal_quantity or move.quantity) / (move.internal_quantity or move.quantity) /
unit_load.internal_quantity) * unit_load.cases_quantity, unit_load.internal_quantity) * unit_load.cases_quantity,
unit_load.cases_digits) cases_digits[1])
available_cases = unit_load.available_cases_quantity + \ available_cases = unit_load.available_cases_quantity + \
drop_cases drop_cases
else: else: