parent
f439b65972
commit
d37939b9b1
|
@ -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,
|
||||||
|
|
|
@ -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))
|
57
unit_load.py
57
unit_load.py
|
@ -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:
|
||||||
|
|
Loading…
Reference in New Issue