owner.remove_person to remove IfcInventory in ifc2x3

This commit is contained in:
Andrej730
2024-05-13 14:55:48 +05:00
parent 54b4cef25e
commit 2f554db54b
2 changed files with 11 additions and 2 deletions
@@ -24,6 +24,8 @@ def remove_person(file, person=None) -> None:
All roles and addresses assigned to the person will also be
removed.
In IFC2X3 will also remove related inventories if `person` was
the only responsile person for them.
:param person: The IfcPerson to remove
:type person: ifcopenshell.entity_instance
@@ -52,7 +54,9 @@ def remove_person(file, person=None) -> None:
inverse.Creators = None
elif inverse.is_a("IfcInventory"):
if inverse.ResponsiblePersons == (settings["person"],):
inverse.ResponsiblePersons = None
# in IFC2X3 ResponsiblePersons is not optional and without it IfcInventory is not valid
if file.schema == "IFC2X3":
ifcopenshell.api.run("root.remove_product", file, product=inverse)
elif inverse.is_a("IfcDocumentInformation"):
if inverse.Editors == (settings["person"],):
inverse.Editors = None
@@ -61,8 +61,13 @@ class TestRemovePerson(test.bootstrap.IFC4):
def test_ensuring_inventory_should_not_be_left_in_an_invalid_set_cardinality(self):
person = self.file.createIfcPerson()
inventory = self.file.createIfcInventory(ResponsiblePersons=[person])
inventory_id = inventory.id()
ifcopenshell.api.run("owner.remove_person", self.file, person=person)
assert inventory.ResponsiblePersons is None
if self.file.schema != "IFC2X3":
assert inventory.ResponsiblePersons is None
else:
with pytest.raises(RuntimeError):
self.file.by_id(inventory_id)
def test_deleting_person_and_organisations(self):
person = self.file.createIfcPerson()