first commit

This commit is contained in:
root
2026-03-14 09:42:12 +00:00
commit 0adbd20c2c
10991 changed files with 1646955 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

View File

@@ -0,0 +1,305 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from decimal import Decimal
from trytond.modules.company.tests import (
CompanyTestMixin, create_company, set_company)
from trytond.pool import Pool
from trytond.tests.test_tryton import (
ModuleTestCase, activate_module, with_transaction)
class StockShipmentMeasurementsTestCase(CompanyTestMixin, ModuleTestCase):
'Test Stock Shipment Measurements module'
module = 'stock_shipment_measurements'
extras = ['stock_package']
longMessage = True
@classmethod
def setUpClass(cls):
super().setUpClass()
activate_module('stock_package')
@with_transaction()
def test_move_internal_measurements(self):
"Test move internal measurements"
pool = Pool()
Uom = pool.get('product.uom')
Template = pool.get('product.template')
Product = pool.get('product.product')
Location = pool.get('stock.location')
Move = pool.get('stock.move')
kg, = Uom.search([('name', '=', 'Kilogram')])
g, = Uom.search([('name', '=', 'Gram')])
liter, = Uom.search([('name', '=', 'Liter')])
supplier, = Location.search([('code', '=', 'SUP')])
storage, = Location.search([('code', '=', 'STO')])
company = create_company()
currency = company.currency
template, = Template.create([{
'name': "Test internal measurements",
'type': 'goods',
'default_uom': kg,
}])
product, = Product.create([{
'template': template.id,
}])
# without any measurements
with set_company(company):
move, = Move.create([{
'product': product,
'unit': g,
'quantity': 200,
'from_location': supplier,
'to_location': storage,
'company': company,
'unit_price': Decimal(1),
'currency': currency,
}])
self.assertEqual(move.internal_weight, 0.2)
self.assertEqual(move.internal_volume, None)
Move.write([move], {'quantity': 100})
self.assertEqual(move.internal_weight, 0.1)
self.assertEqual(move.internal_volume, None)
template.weight = 1.1
template.weight_uom = kg
template.save()
# with weight measurements
with set_company(company):
move, = Move.create([{
'product': product,
'unit': g,
'quantity': 300,
'from_location': supplier,
'to_location': storage,
'company': company,
'unit_price': Decimal(1),
'currency': currency,
}])
self.assertEqual(move.internal_weight, 0.33)
self.assertEqual(move.internal_volume, None)
Move.write([move], {'quantity': 500})
self.assertEqual(move.internal_weight, 0.55)
self.assertEqual(move.internal_volume, None)
template.volume = 2
template.volume_uom = liter
template.save()
# with weight and volume measurements
with set_company(company):
move, = Move.create([{
'product': product,
'unit': g,
'quantity': 500,
'from_location': supplier,
'to_location': storage,
'company': company,
'unit_price': Decimal(1),
'currency': currency,
}])
self.assertEqual(move.internal_weight, 0.55)
self.assertEqual(move.internal_volume, 1)
Move.write([move], {'quantity': 600})
self.assertEqual(move.internal_weight, 0.66)
self.assertEqual(move.internal_volume, 1.2)
@with_transaction()
def test_shipment_out_measurements(self):
"Test shipment out measurements"
pool = Pool()
Uom = pool.get('product.uom')
Template = pool.get('product.template')
Product = pool.get('product.product')
Location = pool.get('stock.location')
Move = pool.get('stock.move')
Shipment = pool.get('stock.shipment.out')
Package = pool.get('stock.package')
PackageType = pool.get('stock.package.type')
Party = pool.get('party.party')
kg, = Uom.search([('name', '=', 'Kilogram')])
liter, = Uom.search([('name', '=', 'Liter')])
customer, = Location.search([('code', '=', 'CUS')])
party = Party(name='Customer')
party.addresses = [{}]
party.save()
company = create_company()
currency = company.currency
package_type = PackageType(name="Type")
package_type.save()
template, = Template.create([{
'name': "Test measurements",
'type': 'goods',
'default_uom': kg,
'volume': 0.2,
'volume_uom': liter,
}])
product, = Product.create([{
'template': template.id,
}])
with set_company(company):
shipment = Shipment()
shipment.customer = party
shipment.delivery_address, = party.addresses
shipment.warehouse = Shipment.default_warehouse()
shipment.on_change_warehouse()
shipment.save()
# without moves
self.assertEqual(shipment.weight, None)
self.assertEqual(shipment.volume, None)
shipment.moves = [Move(
product=product,
unit=kg,
quantity=10,
from_location=shipment.warehouse.output_location,
to_location=customer,
company=company,
unit_price=Decimal(1),
currency=currency,
)]
shipment.save()
# without inventory moves
self.assertEqual(shipment.weight, 10)
self.assertEqual(shipment.volume, 2)
Shipment.wait([shipment])
Shipment.pick([shipment])
# with inventory moves
self.assertEqual(shipment.weight, 10)
self.assertEqual(shipment.volume, 2)
for clause, result in [
([('weight', '=', 10)], [shipment]),
([('weight', '=', 5)], []),
([('weight', 'in', [10, 5])], [shipment]),
([('volume', '=', 2)], [shipment]),
([('volume', '=', 3)], []),
([('volume', 'in', [2, 3])], [shipment]),
]:
msg = 'clause: %s' % clause
self.assertEqual(Shipment.search(clause), result, msg=msg)
# Add packages
package_root = Package()
package_root.type = package_type
package_root.shipment = shipment
package_root.additional_weight = 1
package_root.packaging_volume = 3
package_root.packaging_volume_uom = liter
package_root.save()
package = Package()
package.type = package_type
package.shipment = shipment
package.moves = shipment.outgoing_moves
package.parent = package_root
package.save()
self.assertEqual(package_root.weight, None)
self.assertEqual(package_root.volume, None)
self.assertEqual(package.weight, 10)
self.assertEqual(package.volume, 2)
self.assertEqual(package_root.total_weight, 11)
self.assertEqual(package_root.total_volume, 3)
self.assertEqual(package.total_weight, 10)
self.assertEqual(package.total_volume, 2)
Shipment.pack([shipment])
Shipment.do([shipment])
self.assertEqual(shipment.internal_weight, 10)
self.assertEqual(shipment.internal_volume, 2)
self.assertEqual(shipment.weight, 10)
self.assertEqual(shipment.volume, 2)
for clause, result in [
([('weight', '=', 10)], [shipment]),
([('weight', '=', 5)], []),
([('weight', 'in', [10, 5])], [shipment]),
([('volume', '=', 2)], [shipment]),
([('volume', '=', 3)], []),
([('volume', 'in', [2, 3])], [shipment]),
]:
msg = 'clause: %s' % clause
self.assertEqual(Shipment.search(clause), result, msg=msg)
@with_transaction()
def test_shipment_internal_measurements(self):
"Test shipment internal measurements"
pool = Pool()
Uom = pool.get('product.uom')
Template = pool.get('product.template')
Product = pool.get('product.product')
Location = pool.get('stock.location')
Move = pool.get('stock.move')
Shipment = pool.get('stock.shipment.internal')
kg, = Uom.search([('name', '=', 'Kilogram')])
liter, = Uom.search([('name', '=', 'Liter')])
warehouse1, = Location.search([('type', '=', 'warehouse')])
warehouse2, = Location.copy([warehouse1])
company = create_company()
template, = Template.create([{
'name': "Test measurements",
'type': 'goods',
'default_uom': kg,
'volume': 0.2,
'volume_uom': liter,
}])
product, = Product.create([{
'template': template.id,
}])
with set_company(company):
shipment = Shipment()
shipment.from_location = warehouse1.storage_location
shipment.to_location = warehouse2.storage_location
shipment.save()
# without moves
self.assertEqual(shipment.weight, 0)
self.assertEqual(shipment.volume, 0)
shipment.moves = [Move(
product=product,
unit=kg,
quantity=10,
from_location=shipment.from_location,
to_location=shipment.to_location,
company=company,
)]
shipment.save()
# without transit
self.assertEqual(shipment.weight, 10)
self.assertEqual(shipment.volume, 2)
Shipment.wait([shipment])
self.assertEqual(len(shipment.moves), 2)
# with transit
self.assertEqual(shipment.weight, 10)
self.assertEqual(shipment.volume, 2)
del ModuleTestCase