diff --git a/product/ERP5/Document/Inventory.py b/product/ERP5/Document/Inventory.py index c7015459af75889e1b6d64d31c14da4a2ec8a2c0..b2840d5c3c0024ce129ab59ba8408cfc4ace914f 100644 --- a/product/ERP5/Document/Inventory.py +++ b/product/ERP5/Document/Inventory.py @@ -333,9 +333,10 @@ class Inventory(Delivery): immediate_reindex_archive=immediate_reindex_archive) if stock_object_list: - # Delete existing records first. + # Delete existing stock records and old inventory_cache first. self.portal_catalog.catalogObjectList( - stock_object_list[:], method_id_list=('z0_uncatalog_stock', ), + stock_object_list[:], method_id_list=('z0_uncatalog_stock', + 'SQLCatalog_trimInventoryCacheOnCatalog', ), sql_catalog_id = sql_catalog_id, disable_cache=1, check_uid=0, disable_archive=disable_archive, immediate_reindex_archive=immediate_reindex_archive) diff --git a/product/ERP5/tests/testInventory.py b/product/ERP5/tests/testInventory.py index 33a15a5b7d5ec6b1fac8983dc33addfafed690d8..d54fac7146c861e9ba5c170a74ba13aa721b7674 100644 --- a/product/ERP5/tests/testInventory.py +++ b/product/ERP5/tests/testInventory.py @@ -2685,6 +2685,52 @@ class TestInventory(TestOrderMixin, ERP5TypeTestCase): group_by_sub_variation=1, group_by_resource=1) + def stepCheckGetInveotoryGoesToCache( + self, sequence=None, sequence_list=None, **kw): + """ + Get inventory then store the inventory_cache record + thanks to the at_date parameter + """ + resource_value = sequence.get('resource') + second_resource_value = sequence.get('second_resource') + node_value = sequence.get('node') + section_value = sequence.get('section') + at_date = DateTime('2013/06/11 00:00:00 GMT+9') + self._testGetInventory( + expected=15, + section_uid=section_value.getUid(), + node_uid=node_value.getUid(), + resource_uid=resource_value.getUid(), + at_date=at_date) + self._testGetInventory( + expected=20, + section_uid=section_value.getUid(), + node_uid=node_value.getUid(), + resource_uid=second_resource_value.getUid(), + at_date=at_date) + + def stepCheckInventoryCacheIsClearedAfterAddingInventory( + self, sequence=None, sequence_list=None, **kw): + """ + Check that older invetory_cache is cleared. + """ + resource_value = sequence.get('resource') + second_resource_value = sequence.get('second_resource') + node_value = sequence.get('node') + section_value = sequence.get('section') + at_date = DateTime('2013/06/11 02:00:00 GMT+9') + self._testGetInventory( + expected=30, + section_uid=section_value.getUid(), + node_uid=node_value.getUid(), + resource_uid=resource_value.getUid(), + at_date=at_date) + self._testGetInventory( + expected=50, + section_uid=section_value.getUid(), + node_uid=node_value.getUid(), + resource_uid=second_resource_value.getUid(), + at_date=at_date) def test_01_getInventory(self, quiet=0, run=run_all_test): """ @@ -3521,6 +3567,52 @@ class TestInventory(TestOrderMixin, ERP5TypeTestCase): sequence_list.addSequenceString(sequence_string) sequence_list.play(self) + def test_18_InventoryDocumentAndInventoryCache( + self, quiet=0, run=run_all_test): + """ + Check that inventory caches that are older than inventory stock movements + are cleared. + + The case is: + 1) full inventory: 2013/05/01,section=A, node=B, resource=X, quantity=15 + resource=Y, quantity=20 + [test] + 2) getInventory(section=A, node=B, resource=X, at_date=2013/06/11 00:00) + => should return 15 + getInventory(section=A, node=B, resource=Y, at_date=2013/06/11 00:00) + => should return 20 + + 3) full inventory: 2013/05/02,section=A, node=B, resource=X, quantity=30 + resource=Y, quantity=50 + + [test] + 4) getInventory(section=A, node=B, resource=X, at_date=2013/06/11 02:00) + => should return 30 + 4) getInventory(section=A, node=B, resource=Y, at_date=2013/06/11 02:00) + => should return 50 + """ + if not run: return + + self.two_resource_full_inventory1_start_date = '2013/05/01 00:00:00 GMT+9' + self.two_resource_full_inventory1_inventory_1 = 15 + self.two_resource_full_inventory1_inventory_2 = 20 + self.two_resource_full_inventory2_start_date = '2013/05/02 00:00:00 GMT+9' + self.two_resource_full_inventory2_inventory_1 = 30 + self.two_resource_full_inventory2_inventory_2 = 50 + sequence_list = SequenceList() + sequence_string = 'CreateOrganisationsForModule \ + CreateNotVariatedResource \ + CreateNotVariatedSecondResource \ + CreateTwoResourceFullInventoryAtTheDate1 \ + Tic \ + CheckGetInveotoryGoesToCache \ + CreateTwoResourceFullInventoryAtTheDate2 \ + Tic \ + CheckInventoryCacheIsClearedAfterAddingInventory \ + ' + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self) + def test_suite(): suite = unittest.TestSuite()