Skip to content

Commit 54bbb07

Browse files
committed
[16.0][FIX] stock_request: fix handling of expected_date
fixes #69 When creating a new stock request, use the expected date provided by the user. When duplicating a stock request, copy the expected date.
1 parent 858f345 commit 54bbb07

File tree

2 files changed

+121
-3
lines changed

2 files changed

+121
-3
lines changed

stock_request/models/stock_request.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -451,10 +451,10 @@ def create(self, vals_list):
451451
upd_vals = vals.copy()
452452
if upd_vals.get("name", "/") == "/":
453453
upd_vals["name"] = self.env["ir.sequence"].next_by_code("stock.request")
454-
if "order_id" in upd_vals:
454+
if upd_vals.get("order_id"):
455455
order = self.env["stock.request.order"].browse(upd_vals["order_id"])
456456
upd_vals["expected_date"] = order.expected_date
457-
else:
457+
elif not upd_vals.get("expected_date"):
458458
upd_vals["expected_date"] = self._get_expected_date()
459459
vals_list_upd.append(upd_vals)
460460
return super().create(vals_list_upd)

stock_request/tests/test_stock_request.py

Lines changed: 119 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Copyright 2017 ForgeFlow S.L.
22
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl-3.0).
33
from collections import Counter
4-
from datetime import datetime
4+
from datetime import datetime, timedelta
55

66
from odoo import exceptions, fields
77
from odoo.tests import new_test_user
@@ -814,6 +814,70 @@ def test_create_request_03(self):
814814
self.assertEqual(stock_request_2.qty_cancelled, 6)
815815
self.assertEqual(stock_request_2.state, "cancel")
816816

817+
def test_create_request_04(self):
818+
"""Use different expected date"""
819+
expected_date = datetime.now() + timedelta(days=30)
820+
expected_date = expected_date.replace(microsecond=0)
821+
vals = {
822+
"product_id": self.product.id,
823+
"product_uom_id": self.uom_dozen.id,
824+
"product_uom_qty": 1.0,
825+
"company_id": self.main_company.id,
826+
"warehouse_id": self.warehouse.id,
827+
"location_id": self.warehouse.lot_stock_id.id,
828+
"expected_date": fields.Datetime.to_string(expected_date),
829+
}
830+
stock_request = self.stock_request.with_user(self.stock_request_user).create(
831+
vals
832+
)
833+
self.assertEqual(stock_request.expected_date, expected_date)
834+
835+
def test_create_request_05(self):
836+
"""Default expected date"""
837+
now = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
838+
vals = {
839+
"product_id": self.product.id,
840+
"product_uom_id": self.uom_dozen.id,
841+
"product_uom_qty": 1.0,
842+
"company_id": self.main_company.id,
843+
"warehouse_id": self.warehouse.id,
844+
"location_id": self.warehouse.lot_stock_id.id,
845+
}
846+
stock_request = self.stock_request.with_user(self.stock_request_user).create(
847+
vals
848+
)
849+
expected_date = stock_request.expected_date.replace(
850+
hour=0, minute=0, second=0, microsecond=0
851+
)
852+
self.assertEqual(expected_date, now)
853+
854+
def test_create_request_06(self):
855+
"""Expected date from order"""
856+
expected_date = datetime.now() + timedelta(days=30)
857+
expected_date = expected_date.replace(microsecond=0)
858+
vals = {
859+
"company_id": self.main_company.id,
860+
"warehouse_id": self.warehouse.id,
861+
"location_id": self.warehouse.lot_stock_id.id,
862+
"expected_date": expected_date,
863+
}
864+
order = self.request_order.with_user(self.stock_request_user).create(vals)
865+
866+
vals = {
867+
"product_id": self.product.id,
868+
"product_uom_id": self.uom_dozen.id,
869+
"product_uom_qty": 1.0,
870+
"company_id": self.main_company.id,
871+
"warehouse_id": self.warehouse.id,
872+
"location_id": self.warehouse.lot_stock_id.id,
873+
"expected_date": False,
874+
"order_id": order.id,
875+
}
876+
stock_request = self.stock_request.with_user(self.stock_request_user).create(
877+
vals
878+
)
879+
self.assertEqual(stock_request.expected_date, expected_date)
880+
817881
def test_cancel_request(self):
818882
expected_date = fields.Datetime.now()
819883
vals = {
@@ -1121,6 +1185,26 @@ def test_onchange_wh_no_effect_from_order(self):
11211185
order.stock_request_ids.onchange_warehouse_id()
11221186
self.assertEqual(order.stock_request_ids[0].location_id, self.virtual_loc)
11231187

1188+
def test_duplicate(self):
1189+
expected_date = datetime.now() + timedelta(days=30)
1190+
expected_date = expected_date.replace(microsecond=0)
1191+
vals = {
1192+
"product_id": self.product.id,
1193+
"product_uom_id": self.uom_dozen.id,
1194+
"product_uom_qty": 1.0,
1195+
"company_id": self.main_company.id,
1196+
"warehouse_id": self.warehouse.id,
1197+
"location_id": self.warehouse.lot_stock_id.id,
1198+
"expected_date": fields.Datetime.to_string(expected_date),
1199+
}
1200+
1201+
stock_request = self.stock_request.with_user(self.stock_request_user).create(
1202+
vals
1203+
)
1204+
1205+
duplicate_request = stock_request.copy()
1206+
self.assertEqual(duplicate_request.expected_date, expected_date)
1207+
11241208
def test_cancellation(self):
11251209
group = self.env["procurement.group"].create({"name": "Procurement group"})
11261210
product2 = self._create_product("SH2", "Shoes2", False)
@@ -1224,6 +1308,40 @@ def test_cancellation(self):
12241308
self.assertEqual(sr3.state, "cancel")
12251309
self.assertEqual(sr3.qty_cancelled, 5)
12261310

1311+
def test_unlink(self):
1312+
vals = {
1313+
"product_id": self.product.id,
1314+
"product_uom_id": self.uom_dozen.id,
1315+
"product_uom_qty": 1.0,
1316+
"company_id": self.main_company.id,
1317+
"warehouse_id": self.warehouse.id,
1318+
"location_id": self.warehouse.lot_stock_id.id,
1319+
}
1320+
stock_request = self.stock_request.with_user(self.stock_request_user).create(
1321+
vals
1322+
)
1323+
try:
1324+
stock_request.unlink()
1325+
except Exception:
1326+
self.fail()
1327+
1328+
def test_unlink_raise(self):
1329+
vals = {
1330+
"product_id": self.product.id,
1331+
"product_uom_id": self.uom_dozen.id,
1332+
"product_uom_qty": 1.0,
1333+
"company_id": self.main_company.id,
1334+
"warehouse_id": self.warehouse.id,
1335+
"location_id": self.warehouse.lot_stock_id.id,
1336+
}
1337+
stock_request = self.stock_request.with_user(self.stock_request_user).create(
1338+
vals
1339+
)
1340+
self.product.route_ids = [(6, 0, self.route.ids)]
1341+
stock_request.sudo().action_confirm()
1342+
with self.assertRaises(exceptions.UserError):
1343+
stock_request.unlink()
1344+
12271345

12281346
class TestStockRequestOrderState(TestStockRequest):
12291347
@classmethod

0 commit comments

Comments
 (0)