mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 17:31:45 +00:00
owner.remove_person to remove IfcInventory in ifc2x3
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user