mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-28 15:53:00 +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
|
All roles and addresses assigned to the person will also be
|
||||||
removed.
|
removed.
|
||||||
|
In IFC2X3 will also remove related inventories if `person` was
|
||||||
|
the only responsile person for them.
|
||||||
|
|
||||||
:param person: The IfcPerson to remove
|
:param person: The IfcPerson to remove
|
||||||
:type person: ifcopenshell.entity_instance
|
:type person: ifcopenshell.entity_instance
|
||||||
@@ -52,7 +54,9 @@ def remove_person(file, person=None) -> None:
|
|||||||
inverse.Creators = None
|
inverse.Creators = None
|
||||||
elif inverse.is_a("IfcInventory"):
|
elif inverse.is_a("IfcInventory"):
|
||||||
if inverse.ResponsiblePersons == (settings["person"],):
|
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"):
|
elif inverse.is_a("IfcDocumentInformation"):
|
||||||
if inverse.Editors == (settings["person"],):
|
if inverse.Editors == (settings["person"],):
|
||||||
inverse.Editors = None
|
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):
|
def test_ensuring_inventory_should_not_be_left_in_an_invalid_set_cardinality(self):
|
||||||
person = self.file.createIfcPerson()
|
person = self.file.createIfcPerson()
|
||||||
inventory = self.file.createIfcInventory(ResponsiblePersons=[person])
|
inventory = self.file.createIfcInventory(ResponsiblePersons=[person])
|
||||||
|
inventory_id = inventory.id()
|
||||||
ifcopenshell.api.run("owner.remove_person", self.file, person=person)
|
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):
|
def test_deleting_person_and_organisations(self):
|
||||||
person = self.file.createIfcPerson()
|
person = self.file.createIfcPerson()
|
||||||
|
|||||||
Reference in New Issue
Block a user