115 lines
4.5 KiB
Python
115 lines
4.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from datetime import datetime, timedelta
|
|
from odoo.addons.stock.tests.common import TestStockCommon
|
|
from odoo.tests.common import Form
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class TestStockLot(TestStockCommon):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
# Creates a tracked product using expiration dates.
|
|
cls.product_apple = cls.ProductObj.create({
|
|
'name': 'Apple',
|
|
'type': 'product',
|
|
'tracking': 'lot',
|
|
'use_expiration_date': True,
|
|
'expiration_time': 10,
|
|
'use_time': 5,
|
|
'removal_time': 8,
|
|
'alert_time': 4,
|
|
})
|
|
# Creates an apple lot.
|
|
lot_form = Form(cls.LotObj)
|
|
lot_form.name = 'good-apple-lot'
|
|
lot_form.product_id = cls.product_apple
|
|
lot_form.company_id = cls.env.company
|
|
cls.lot_good_apple = lot_form.save()
|
|
# Creates an expired apple lot.
|
|
lot_form = Form(cls.LotObj)
|
|
lot_form.name = 'expired-apple-lot-01'
|
|
lot_form.product_id = cls.product_apple
|
|
lot_form.company_id = cls.env.company
|
|
cls.lot_expired_apple = lot_form.save()
|
|
lot_form = Form(cls.lot_expired_apple) # Edits the lot to make it expired.
|
|
lot_form.expiration_date = datetime.today() - timedelta(days=10)
|
|
cls.lot_expired_apple = lot_form.save()
|
|
|
|
# Creates a producible product and its BOM.
|
|
cls.product_apple_pie = cls.ProductObj.create({
|
|
'name': 'Apple Pie',
|
|
'type': 'product',
|
|
})
|
|
cls.bom_apple_pie = cls.env['mrp.bom'].create({
|
|
'product_id': cls.product_apple_pie.id,
|
|
'product_tmpl_id': cls.product_apple_pie.product_tmpl_id.id,
|
|
'product_uom_id': cls.uom_unit.id,
|
|
'product_qty': 1.0,
|
|
'consumption': 'flexible',
|
|
'type': 'normal',
|
|
'bom_line_ids': [
|
|
(0, 0, {'product_id': cls.product_apple.id, 'product_qty': 3}),
|
|
]})
|
|
|
|
cls.location_stock = cls.env['stock.location'].browse(cls.stock_location)
|
|
|
|
# Creation of a routing
|
|
cls.workcenter = cls.env['mrp.workcenter'].create({
|
|
'name': 'Bakery',
|
|
'default_capacity': 2,
|
|
'time_start': 10,
|
|
'time_stop': 5,
|
|
'time_efficiency': 80,
|
|
})
|
|
|
|
def test_01_product_produce(self):
|
|
""" Checks user doesn't get a confirmation wizard when they produces with
|
|
no expired components. """
|
|
# Creates a Manufacturing Order...
|
|
mo_form = Form(self.env['mrp.production'])
|
|
mo_form.product_id = self.product_apple_pie
|
|
mo_form.bom_id = self.bom_apple_pie
|
|
mo_form.product_qty = 1
|
|
mo = mo_form.save()
|
|
mo.action_confirm()
|
|
# ... and tries to product with a non-expired lot as component.
|
|
mo_form = Form(mo)
|
|
mo_form.qty_producing = 1
|
|
mo = mo_form.save()
|
|
details_operation_form = Form(mo.move_raw_ids[0], view=self.env.ref('stock.view_stock_move_operations'))
|
|
with details_operation_form.move_line_ids.new() as ml:
|
|
ml.quantity = 3
|
|
ml.lot_id = self.lot_good_apple
|
|
details_operation_form.save()
|
|
res = mo.button_mark_done()
|
|
# Producing must not return a wizard in this case.
|
|
self.assertEqual(res, True)
|
|
|
|
def test_02_product_produce_using_expired(self):
|
|
""" Checks user gets a confirmation wizard when they produces with
|
|
expired components. """
|
|
# Creates a Manufacturing Order...
|
|
mo_form = Form(self.env['mrp.production'])
|
|
mo_form.product_id = self.product_apple_pie
|
|
mo_form.bom_id = self.bom_apple_pie
|
|
mo_form.product_qty = 1
|
|
mo = mo_form.save()
|
|
mo.action_confirm()
|
|
# ... and tries to product with an expired lot as component.
|
|
mo_form = Form(mo)
|
|
mo_form.qty_producing = 1
|
|
mo = mo_form.save()
|
|
details_operation_form = Form(mo.move_raw_ids[0], view=self.env.ref('stock.view_stock_move_operations'))
|
|
with details_operation_form.move_line_ids.new() as ml:
|
|
ml.quantity = 3
|
|
ml.lot_id = self.lot_expired_apple
|
|
details_operation_form.save()
|
|
res = mo.button_mark_done()
|
|
# Producing must return a confirmation wizard.
|
|
self.assertNotEqual(res, None)
|
|
self.assertEqual(res['res_model'], 'expiry.picking.confirmation')
|