Migrate to 6.4

This commit is contained in:
José Antonio Díaz Miralles 2022-10-24 13:56:59 +02:00
parent 323616ab9c
commit c1b4778dc1
10 changed files with 66 additions and 113 deletions

110
load.py
View File

@ -49,20 +49,19 @@ if not hasattr(ASTTransformer, 'visit_NameConstant'):
class CMRInstructionsMixin(object):
__slots__ = ()
edit_cmr_instructions = fields.Boolean('Edit CMR instructions',
states={'readonly': Eval('state') == 'cancelled'},
depends=['state'])
states={'readonly': Eval('state') == 'cancelled'})
cmr_instructions = fields.Function(
fields.Text('CMR instructions', translate=True,
states={
'readonly': (Eval('state') == 'cancelled') | Not(
Bool(Eval('edit_cmr_instructions')))
}, depends=['state', 'edit_cmr_instructions']),
}),
'on_change_with_cmr_instructions', setter='set_cmr_instructions')
cmr_instructions_store = fields.Text('CMR instructions', translate=True,
states={'readonly': Eval('state') == 'cancelled'},
depends=['state'])
states={'readonly': Eval('state') == 'cancelled'})
cmr_template = fields.Function(
fields.Many2One('carrier.load.cmr.template', 'CMR Template'),
'get_cmr_template')
@ -96,8 +95,7 @@ class Load(Workflow, ModelView, ModelSQL, DockMixin, CMRInstructionsMixin):
_rec_name = 'code'
code = fields.Char('Code', required=True, select=True,
states={'readonly': Eval('code_readonly', True)},
depends=['code_readonly'])
states={'readonly': Eval('code_readonly', True)})
code_readonly = fields.Function(fields.Boolean('Code Readonly'),
'get_code_readonly')
company = fields.Many2One('company.company', 'Company', required=True,
@ -107,45 +105,38 @@ class Load(Workflow, ModelView, ModelSQL, DockMixin, CMRInstructionsMixin):
| Eval('orders', [])
| Eval('purchase')
},
depends=['state', 'orders', 'purchase'], select=True)
select=True)
carrier = fields.Many2One('carrier', 'Carrier', select=True,
ondelete='RESTRICT',
states={
'readonly': Eval('state') != 'draft',
'required': Bool(Eval('purchasable'))
},
depends=['state', 'purchasable'])
})
carrier_info = fields.Text('Carrier information',
states={
'readonly': Eval('state') != 'draft',
'invisible': Bool(Eval('purchasable')) | Bool(Eval('carrier'))
},
depends=['state', 'purchasable', 'carrier'])
})
vehicle_number = fields.Char('Vehicle reg. number',
states={
'readonly': Eval('state') != 'draft',
'required': Eval('state').in_(['confirmed', 'done']) & Bool(
Eval('vehicle_required'))},
depends=['state', 'vehicle_required'])
Eval('vehicle_required'))})
vehicle_required = fields.Function(fields.Boolean('Vehicle required'),
'get_number_required')
trailer_number = fields.Char('Trailer reg. number',
states={
'readonly': Eval('state') != 'draft',
'required': Eval('state').in_(['confirmed', 'done']) & Bool(
Eval('trailer_required'))},
depends=['state'])
Eval('trailer_required'))})
trailer_required = fields.Function(fields.Boolean('Trailer required'),
'get_number_required')
date = fields.Date('Effective date', required=True,
states={'readonly': Eval('state') != 'draft'},
depends=['state'])
states={'readonly': Eval('state') != 'draft'})
warehouse = fields.Many2One('stock.location', 'Warehouse',
required=True,
domain=[('type', '=', 'warehouse')],
states={'readonly': Eval('state') != 'draft'},
depends=['state'])
states={'readonly': Eval('state') != 'draft'})
warehouse_output = fields.Function(
fields.Many2One('stock.location', 'Warehouse output'),
'on_change_with_warehouse_output')
@ -158,8 +149,7 @@ class Load(Workflow, ModelView, ModelSQL, DockMixin, CMRInstructionsMixin):
(Eval('state') != 'draft')
| (Not(Bool(Eval('carrier'))) & Not(Bool('carrier_info')))
| Not(Bool(Eval('warehouse')))
},
depends=['state', 'carrier', 'carrier_info', 'warehouse', 'company'])
})
state = fields.Selection([
('draft', 'Draft'),
('confirmed', 'Confirmed'),
@ -169,48 +159,39 @@ class Load(Workflow, ModelView, ModelSQL, DockMixin, CMRInstructionsMixin):
purchasable = fields.Boolean('Purchasable',
states={
'readonly': ((~Eval('state').in_(['draft', 'confirmed'])) | (
Bool(Eval('purchase'))))},
depends=['state', 'purchase'])
Bool(Eval('purchase'))))})
unit_price = fields.Numeric('Unit Price', digits=price_digits,
states={
'readonly': ((~Eval('state').in_(
['draft', 'confirmed', 'done'])) | (Bool(Eval('purchase')))),
'invisible': ~Eval('purchasable')},
depends=['state', 'purchase', 'purchasable'])
'invisible': ~Eval('purchasable')})
currency = fields.Many2One('currency.currency', 'Currency',
states={
'readonly': ((~Eval('state').in_(['draft', 'confirmed'])) | (
Bool(Eval('purchase')))),
'invisible': ~Eval('purchasable')},
depends=['state', 'purchase', 'purchasable'])
'invisible': ~Eval('purchasable')})
currency_digits = fields.Function(fields.Integer('Currency Digits'),
'on_change_with_currency_digits')
purchase = fields.Many2One('purchase.purchase', 'Purchase', readonly=True,
states={'invisible': ~Eval('purchasable')},
depends=['purchasable'])
states={'invisible': ~Eval('purchasable')})
purchase_state = fields.Function(
fields.Selection([(None, '')], 'Purchase state',
states={'invisible': ~Eval('purchasable')},
depends=['purchasable']),
states={'invisible': ~Eval('purchasable')}),
'get_purchase_state', searcher='search_purchase_state')
parties = fields.Function(
fields.Char('Parties'), 'get_parties', searcher='search_parties')
driver = fields.Char('Driver',
states={'readonly': Eval('state') != 'draft'},
depends=['state'])
states={'readonly': Eval('state') != 'draft'})
driver_identifier = fields.Char('Driver identifier',
states={
'required': Bool(Eval('driver')),
'readonly': Eval('state') != 'draft'},
depends=['driver', 'state'])
'readonly': Eval('state') != 'draft'})
driver_phone = fields.Char('Driver Phone',
states={
'readonly': Eval('state') != 'draft'},
depends=['state'])
'readonly': Eval('state') != 'draft'})
comments = fields.Text('Comments', translate=True,
states={
'readonly': Eval('state') != 'draft'},
depends=['state'])
'readonly': Eval('state') != 'draft'})
@classmethod
def __setup__(cls):
@ -674,11 +655,9 @@ class LoadOrder(Workflow, ModelView, ModelSQL, IncotermDocumentMixin,
load = fields.Many2One('carrier.load', 'Load', required=True, select=True,
ondelete='CASCADE',
states={'readonly': Eval('state') != 'draft'},
depends=['state'])
states={'readonly': Eval('state') != 'draft'})
code = fields.Char('Code', required=True, select=True,
states={'readonly': Eval('code_readonly', True)},
depends=['code_readonly'])
states={'readonly': Eval('code_readonly', True)})
code_readonly = fields.Function(fields.Boolean('Code Readonly'),
'get_code_readonly')
company = fields.Many2One('company.company', 'Company', required=True,
@ -689,42 +668,35 @@ class LoadOrder(Workflow, ModelView, ModelSQL, IncotermDocumentMixin,
| Eval('sale')
| Eval('lines', [])
},
depends=['state', 'shipment', 'sale', 'lines'], select=True)
select=True)
date = fields.Function(fields.Date('Effective date'),
'on_change_with_date')
start_date = fields.DateTime('Start date',
states={'readonly': ~Eval('state').in_(['draft', 'waiting'])},
depends=['state'])
states={'readonly': ~Eval('state').in_(['draft', 'waiting'])})
end_date = fields.DateTime('End date',
domain=[If(Eval('end_date') & Eval('start_date'),
('end_date', '>=', Eval('start_date')),
())],
states={'readonly': ~Eval('state').in_(['draft', 'waiting'])},
depends=['state', 'start_date', 'end_date'])
states={'readonly': ~Eval('state').in_(['draft', 'waiting'])})
arrival_date = fields.Date('Arrival date',
states={'readonly': Eval('state') != 'draft'},
depends=['state'])
states={'readonly': Eval('state') != 'draft'})
lines = fields.One2Many('carrier.load.order.line', 'order', 'Lines',
states={'readonly': Eval('state') != 'draft'},
depends=['state'])
states={'readonly': Eval('state') != 'draft'})
party = fields.Many2One('party.party', 'Party', select=True, states={
'readonly': (Eval('state') != 'draft') |
(Eval('lines', [0])),
'required': (Eval('state') == 'done') &
(Eval('type') != 'internal'),
'invisible': Eval('type') == 'internal'},
depends=['state', 'lines', 'type'])
'invisible': Eval('type') == 'internal'})
incoterms = fields.One2Many('carrier.load.order.incoterm', 'order',
'Incoterms',
states={'readonly': ~Eval('state').in_(['draft', 'waiting']),
'invisible': ~Eval('party')},
depends=['state', 'party'])
'invisible': ~Eval('party')})
sale_edit = fields.Boolean('Edit sale',
states={
'readonly': Eval('state').in_(['done', 'cancelled']) |
Bool(Eval('sale'))
},
depends=['state', 'sale'])
})
sale = fields.Many2One('sale.sale', 'Sale',
domain=[
If((Eval('state') != 'done') & Bool(Eval('sale_edit')),
@ -744,8 +716,7 @@ class LoadOrder(Workflow, ModelView, ModelSQL, IncotermDocumentMixin,
'readonly': (Eval('state') == 'done') |
(Eval('type') != 'out') | Bool(Eval('shipment')) |
Not(Bool(Eval('sale_edit')))
},
depends=['party', 'type', 'state', 'shipment', 'id', 'sale_edit'])
})
shipment = fields.Reference('Shipment', selection='get_shipments',
readonly=True, select=True)
state = fields.Selection([
@ -771,8 +742,7 @@ class LoadOrder(Workflow, ModelView, ModelSQL, IncotermDocumentMixin,
('in_return', 'In return')], 'Type', required=True, select=True,
states={'readonly': Bool(Eval('lines', [])) |
Bool(Eval('shipment', None)) |
(Eval('state') != 'draft')},
depends=['lines', 'shipment', 'state'])
(Eval('state') != 'draft')})
warehouse = fields.Function(fields.Many2One('stock.location', 'Warehouse'),
'get_warehouse')
to_location = fields.Many2One('stock.location', 'To location',
@ -780,8 +750,7 @@ class LoadOrder(Workflow, ModelView, ModelSQL, IncotermDocumentMixin,
states={'required': (Eval('type') == 'internal') &
~Eval('shipment', None),
'readonly': Eval('state') != 'draft',
'invisible': Eval('type') != 'internal'},
depends=['type', 'state'])
'invisible': Eval('type') != 'internal'})
@classmethod
def __setup__(cls):
@ -830,8 +799,6 @@ class LoadOrder(Workflow, ModelView, ModelSQL, IncotermDocumentMixin,
cls.incoterm_version.states['invisible'] |= (~Eval('party'))
else:
cls.incoterm_version.states['invisible'] = (~Eval('party'))
if 'party' not in cls.incoterm_version.depends:
cls.incoterm_version.depends.append('party')
@classmethod
def __register__(cls, module_name):
@ -1355,10 +1322,8 @@ class LoadOrderLine(ModelView, ModelSQL):
fields.Many2One('product.uom', 'UOM'),
'on_change_with_uom')
unit_digits = fields.Function(fields.Integer('Unit Digits'),
'on_change_with_unit_digits')
quantity = fields.Float('Quantity',
digits=(16, Eval('unit_digits', 2)),
depends=['unit_digits'])
'on_change_with_unit_digits')
quantity = fields.Float('Quantity', digits=(16, Eval('unit_digits', 2)))
moves = fields.One2Many('stock.move', 'origin', 'Moves', readonly=True)
inventory_moves = fields.Function(
fields.One2Many('stock.move', None, 'Inventory moves'),
@ -1532,6 +1497,7 @@ class LoadSheet(CompanyReport):
class NoteMixin(object):
__slots__ = ()
@classmethod
def get_context(cls, records, header, data):

View File

@ -9,8 +9,7 @@ class Party(metaclass=PoolMeta):
__name__ = 'party.party'
cmr_template = fields.Many2One('carrier.load.cmr.template', 'CMR Template',
states={'readonly': ~Eval('active')},
depends=['active'])
states={'readonly': ~Eval('active')})
@classmethod
def __register__(cls, module_name):

View File

@ -58,6 +58,7 @@ class SaleCreditLimit(metaclass=PoolMeta):
class CostMixin(object):
__slots__ = ()
@classmethod
def __setup__(cls):
@ -85,8 +86,7 @@ class CostSale(CostMixin, metaclass=PoolMeta):
document_carrier_amount = fields.Function(
fields.Numeric('Sale carrier amount',
digits=(16, Eval('currency_digits', 2)),
depends=['currency_digits']),
digits=(16, Eval('currency_digits', 2))),
'get_document_carrier_amount')
def _compute_document_values(self):
@ -141,8 +141,7 @@ class CostSaleLine(metaclass=PoolMeta):
document_carrier_amount = fields.Function(
fields.Numeric('Sale carrier amount',
digits=(16, Eval('currency_digits', 2)),
depends=['currency_digits']),
digits=(16, Eval('currency_digits', 2))),
'get_document_carrier_amount')
def get_document_carrier_amount(self, name=None):

View File

@ -168,6 +168,5 @@ setup(name=name,
carrier_load = trytond.modules.carrier_load
""",
test_suite='tests',
test_loader='trytond.test_loader:Loader',
tests_require=tests_require,
)

View File

@ -27,6 +27,7 @@ class Move(metaclass=PoolMeta):
class ShipmentLoadMixin(object):
__slots__ = ()
load_orders = fields.One2Many('carrier.load.order', 'shipment',
'Load orders', readonly=True)

View File

@ -1,3 +1,2 @@
# The COPYRIGHT file at the top level of this repository contains the full
# copyright notices and license terms.
from .test_load import suite

View File

@ -1,32 +0,0 @@
# The COPYRIGHT file at the top level of this repository contains the full
# copyright notices and license terms.
import doctest
import unittest
import trytond.tests.test_tryton
from trytond.tests.test_tryton import ModuleTestCase
from trytond.tests.test_tryton import doctest_teardown, doctest_checker
class CarrierLoadTestCase(ModuleTestCase):
"""Test carrier load module"""
module = 'carrier_load'
def setUp(self):
super(CarrierLoadTestCase, self).setUp()
def suite():
suite = trytond.tests.test_tryton.suite()
suite.addTests(unittest.TestLoader().loadTestsFromTestCase(
CarrierLoadTestCase))
suite.addTests(doctest.DocFileSuite(
'scenario_load.rst',
tearDown=doctest_teardown, encoding='utf-8',
checker=doctest_checker,
optionflags=doctest.REPORT_ONLY_FIRST_FAILURE))
suite.addTests(doctest.DocFileSuite(
'scenario_load_sale_cost_apply_invoice.rst',
tearDown=doctest_teardown, encoding='utf-8',
checker=doctest_checker,
optionflags=doctest.REPORT_ONLY_FIRST_FAILURE))
return suite

15
tests/test_module.py Normal file
View File

@ -0,0 +1,15 @@
# The COPYRIGHT file at the top level of this repository contains the full
# copyright notices and license terms.
from trytond.tests.test_tryton import ModuleTestCase
class CarrierLoadTestCase(ModuleTestCase):
"""Test carrier load module"""
module = 'carrier_load'
extras = ['sale_cost_apply_invoice']
def setUp(self):
super().setUp()
del ModuleTestCase

7
tests/test_scenario.py Normal file
View File

@ -0,0 +1,7 @@
# The COPYRIGHT file at the top level of this repository contains
# the full copyright notices and license terms.
from trytond.tests.test_tryton import load_doc_tests
def load_tests(*args, **kwargs):
return load_doc_tests(__name__, __file__, *args, **kwargs)

View File

@ -1,5 +1,5 @@
[tryton]
version=6.0.0
version=6.4.0
depends:
carrier_configuration
incoterm