|
1 | 1 | # Copyright 2017 ForgeFlow S.L. |
2 | 2 | # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl-3.0). |
3 | 3 | from collections import Counter |
4 | | -from datetime import datetime |
| 4 | +from datetime import datetime, timedelta |
5 | 5 |
|
6 | 6 | from odoo import exceptions, fields |
7 | 7 | from odoo.tests import new_test_user |
@@ -814,6 +814,70 @@ def test_create_request_03(self): |
814 | 814 | self.assertEqual(stock_request_2.qty_cancelled, 6) |
815 | 815 | self.assertEqual(stock_request_2.state, "cancel") |
816 | 816 |
|
| 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 | + |
817 | 881 | def test_cancel_request(self): |
818 | 882 | expected_date = fields.Datetime.now() |
819 | 883 | vals = { |
@@ -1121,6 +1185,26 @@ def test_onchange_wh_no_effect_from_order(self): |
1121 | 1185 | order.stock_request_ids.onchange_warehouse_id() |
1122 | 1186 | self.assertEqual(order.stock_request_ids[0].location_id, self.virtual_loc) |
1123 | 1187 |
|
| 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 | + |
1124 | 1208 | def test_cancellation(self): |
1125 | 1209 | group = self.env["procurement.group"].create({"name": "Procurement group"}) |
1126 | 1210 | product2 = self._create_product("SH2", "Shoes2", False) |
@@ -1224,6 +1308,40 @@ def test_cancellation(self): |
1224 | 1308 | self.assertEqual(sr3.state, "cancel") |
1225 | 1309 | self.assertEqual(sr3.qty_cancelled, 5) |
1226 | 1310 |
|
| 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 | + |
1227 | 1345 |
|
1228 | 1346 | class TestStockRequestOrderState(TestStockRequest): |
1229 | 1347 | @classmethod |
|
0 commit comments