Skip to content

Commit 9d44892

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 9d44892

File tree

2 files changed

+119
-3
lines changed

2 files changed

+119
-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: 117 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
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
5+
# from multiprocessing.reduction import duplicate
56

67
from odoo import exceptions, fields
78
from odoo.tests import new_test_user
@@ -814,6 +815,68 @@ def test_create_request_03(self):
814815
self.assertEqual(stock_request_2.qty_cancelled, 6)
815816
self.assertEqual(stock_request_2.state, "cancel")
816817

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

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

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

12281344
class TestStockRequestOrderState(TestStockRequest):
12291345
@classmethod

0 commit comments

Comments
 (0)