Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Alexander Scharfenberg
Raumverwaltung_HMWK
Commits
487c937a
Commit
487c937a
authored
Oct 12, 2021
by
Alexander Scharfenberg
Browse files
code commenting finished
parent
b23c7212
Changes
14
Hide whitespace changes
Inline
Side-by-side
Raumverwaltung_HMWK/ChangeUserWindow.xaml.cs
View file @
487c937a
...
...
@@ -46,7 +46,8 @@ namespace Raumverwaltung_HMWK
}
/*
* Falls die Änderung nicht dazu führt, dass ein Nutzer doppelt vorhanden ist, wird die Änderung durchgeführt.
* mit dieser Funktion werden Nutzerdaten geändert und neu eingefügt. Hierbei fehlt bisher der Abgleich, ob bereits
* ein User mit den neuen Daten vorhanden ist (auf Name & Vorname bezogen)
*/
private
void
ChangeUser
(
object
sender
,
RoutedEventArgs
e
)
{
...
...
@@ -59,16 +60,7 @@ namespace Raumverwaltung_HMWK
{
case
MessageBoxResult
.
Yes
:
{
if
(
userExists
(
NameInput
.
Text
,
VorNameInput
.
Text
))
{
MessageBox
.
Show
(
"Benutzer existiert bereits mit diesem Vor- und Nachnamen"
,
"Fehler"
,
MessageBoxButton
.
OK
,
MessageBoxImage
.
Error
);
}
else
{
try
try
{
SqLiteDataAccess
.
ChangeUser
(
NameInput
.
Text
,
VorNameInput
.
Text
,
DepartmentInput
.
Text
,
ReferatInput
.
Text
,
OrgaInput
.
Text
,
NumberInput
.
Text
,
...
...
@@ -95,7 +87,7 @@ namespace Raumverwaltung_HMWK
MessageBoxButton
.
OK
,
MessageBoxImage
.
Error
);
}
}
break
;
}
...
...
@@ -118,22 +110,6 @@ namespace Raumverwaltung_HMWK
{
Close
();
}
/*
* Überprüfung, ob der Nutzer mit dem vergebenen Namen und Vornamen existiert
*/
private
bool
userExists
(
string
name
,
string
vorname
)
{
bool
found
=
false
;
for
(
int
i
=
0
;
i
<
users
.
Count
;
i
++)
{
if
(
users
[
i
].
Nachnname
.
Equals
(
name
)
&&
users
[
i
].
Vorname
.
Equals
(
vorname
))
{
found
=
true
;
}
}
return
found
;
}
}
}
\ No newline at end of file
Raumverwaltung_HMWK/DeleteFloorWindow.xaml.cs
View file @
487c937a
...
...
@@ -41,6 +41,13 @@ namespace Raumverwaltung_HMWK
Close
();
}
/**
* <summary>
* Das ausgewählte Stockwerk wird samt seinen Räumen, Raum-Nutzer-Beziehungen und Assets komplett gelöscht.
* Nach erfolgreichem Löschen werden in einer Schleife alle geöffneten Fenster geschlossen, das MainWindow wird
* als einziges Fenster direkt wieder geöffnet. Das Neuladen sorgt für einen kongruenten Datensatz in der Anwendung.
* </summary>
*/
private
void
DeleteFloor
(
object
sender
,
RoutedEventArgs
e
)
{
if
(
FloorSelection
.
SelectedItem
!=
null
)
...
...
Raumverwaltung_HMWK/DeleteLocationWindow.xaml.cs
View file @
487c937a
...
...
@@ -22,11 +22,21 @@ namespace Raumverwaltung_HMWK
public
DeleteLocationWindow
()
{
InitializeComponent
();
//bezieht alle Standorte von der Datenbank
buildings
=
SqLiteDataAccess
.
GetLocations
();
LocationSelection
.
ItemsSource
=
buildings
;
LocationSelection
.
SelectedIndex
=
0
;
}
/**
* <summary>
* löscht den ausgewählten Standort, samt den Stockwerken, Räumen, Raum-Nutzer-Beziehungen und Assets.
* Eine Sicherheitsfrage, die nochmal mit "Ja/Nein" beantwortet werden muss, wurde implementiert. Falls das Maß
* an Sicherheit nicht genügt, dürfen hier weitere Mechanismen eingebaut werden.
* Nach erfolgreichem Löschen werden in einer Schleife alle geöffneten Fenster geschlossen, das MainWindow wird
* als einziges Fenster direkt wieder geöffnet. Das Neuladen sorgt für einen kongruenten Datensatz in der Anwendung.
* </summary>
*/
private
void
DeleteLocation
(
object
sender
,
RoutedEventArgs
e
)
{
Building
selected
=
buildings
[
LocationSelection
.
SelectedIndex
];
...
...
Raumverwaltung_HMWK/DeleteRoomWindow.xaml.cs
View file @
487c937a
...
...
@@ -39,6 +39,14 @@ namespace Raumverwaltung_HMWK
Close
();
}
/**
* <summary>
* Die Funktion löscht den ausgewählten Raum in dem Stockwerk. Alle Raum-Nutzer-Beziehungen zu dem Raum sowie die Assets
* werden mitgelöscht. Weitere Sicherheitsmechanismen neben der "Ja/Nein"-Abfrage können eingebaut werden.
* Nach erfolgreichem Löschen werden in einer Schleife alle geöffneten Fenster geschlossen, das MainWindow wird
* als einziges Fenster direkt wieder geöffnet. Das Neuladen sorgt für einen kongruenten Datensatz in der Anwendung.
* </summary>
*/
private
void
DeleteRoom
(
object
sender
,
RoutedEventArgs
e
)
{
if
(
RoomSelection
.
SelectedItem
!=
null
)
...
...
Raumverwaltung_HMWK/DeleteUserWindow.xaml.cs
View file @
487c937a
...
...
@@ -27,6 +27,15 @@ namespace Raumverwaltung_HMWK
allUsers
.
SelectedIndex
=
0
;
}
/**
*<summary>
* Der ausgewählte Nutzer wird samt seinen Raum-Nutzer-Beziehungen gelöscht. Eine Sicherheitsabfrage wurde implementiert,
* sodass der Nutzer mit "Ja/Nein" die Löschung bestätigen/ablehnen kann.
* Nach erfolgreichem Löschen werden in einer Schleife alle geöffneten Fenster geschlossen, das MainWindow wird
* als einziges Fenster direkt wieder geöffnet. Das Neuladen sorgt für einen kongruenten Datensatz in der Anwendung.
* </summary>
*
*/
private
void
Click_Delete
(
object
sender
,
RoutedEventArgs
e
)
{
...
...
Raumverwaltung_HMWK/FloorWindow.xaml.cs
View file @
487c937a
...
...
@@ -70,7 +70,11 @@ namespace Raumverwaltung_HMWK
}
//Funktion zum Verschieben der Buttons
/**
* <summary>
* Funktion zum Verschieben der Buttons
* </summary>
*/
private
void
GUI_OnPreviewMouseMove
(
object
sender
,
MouseEventArgs
e
)
{
if
(
dragObject
==
null
)
...
...
@@ -82,13 +86,21 @@ namespace Raumverwaltung_HMWK
Canvas
.
SetLeft
(
dragObject
,
position
.
X
-
offset
.
X
);
}
//Funktion zum Verschieben der Buttons
/**
* <summary>
* Funktion zum Verschieben der Buttons
* </summary>
*/
private
void
GUI_OnPreviewMouseUp
(
object
sender
,
MouseButtonEventArgs
e
)
{
dragObject
=
null
;
GUI
.
ReleaseMouseCapture
();
}
//Funktion zum Verschieben der Buttons
/**
* <summary>
* Funktion zum Verschieben der Buttons
* </summary>
*/
private
void
Btn_PreviewMouseDown
(
object
sender
,
MouseButtonEventArgs
e
)
{
dragObject
=
sender
as
UIElement
;
...
...
@@ -119,14 +131,22 @@ namespace Raumverwaltung_HMWK
Canvas
.
SetTop
(
newBtn
,
room
.
Y
);
}
// öffnet das Raum-Fenster über den Raum-Button im FloorWindow
/**
* <summary>
* öffnet das Raum-Fenster über den Raum-Button im FloorWindow
* </summary>
*/
public
void
ClickRoomButton
(
object
sender
,
RoutedEventArgs
e
)
{
Button
btn
=
(
Button
)
sender
;
var
window
=
new
RoomWindow
(
int
.
Parse
(
btn
.
Name
.
Remove
(
0
,
1
)),
btn
);
window
.
Show
();
}
// vergibt allen Buttons im FloorWindow die Fähigkeit zur Verschiebung
/**
* <summary>
* vergibt allen Buttons im FloorWindow die Fähigkeit zur Verschiebung
* </summary>
*/
private
void
MoveButtons_OnClick
(
object
sender
,
RoutedEventArgs
e
)
{
foreach
(
var
c
in
GUI
.
Children
.
OfType
<
Button
>())
...
...
@@ -137,7 +157,11 @@ namespace Raumverwaltung_HMWK
MessageBox
.
Show
(
"Verschiebung aktiviert."
,
"Achtung"
,
MessageBoxButton
.
OK
,
MessageBoxImage
.
Information
);
}
// persistiert die Positionen aller Buttons im FloorWindow & entnimmt den Buttons die Fähigkeit zur Verschiebung
/**
* <summary>
* persistiert die Positionen aller Buttons im FloorWindow & entnimmt den Buttons die Fähigkeit zur Verschiebung
* </summary>
*/
private
void
SavePositions_OnClick
(
object
sender
,
RoutedEventArgs
e
)
{
foreach
(
var
c
in
GUI
.
Children
.
OfType
<
Button
>())
...
...
@@ -195,19 +219,32 @@ namespace Raumverwaltung_HMWK
}
}
}
// speichert die Notiz zu einem Stockwerk
/**
* <summary>
* speichert die Notiz zu einem Stockwerk
* </summary>
*/
private
void
SaveNote
(
object
sender
,
RoutedEventArgs
e
)
{
SqLiteDataAccess
.
SaveNote
(
CurrentFloor
.
Id
,
Notefield
.
Text
);
MessageBox
.
Show
(
"Notiz wurde verändert."
,
"Erfolgreich:"
,
MessageBoxButton
.
OK
,
MessageBoxImage
.
Information
);
}
// wird aufgerufen, wenn über den Reiter "Raum-Anlegen" ausgewählt wird. Öffnet ein neues RoomWindow.
/**
* <summary>
* wird aufgerufen, wenn über den Reiter "Raum-Anlegen" ausgewählt wird. Öffnet ein neues RoomWindow.
* </summary>
*/
private
void
AddRoom
(
object
sender
,
RoutedEventArgs
e
)
{
AddRoomWindow
window
=
new
AddRoomWindow
(
CurrentFloor
.
Id
);
window
.
Show
();
}
// wird aufgerufen, wenn über den Reiter "Raum-Löschen" ausgewählt wird. Öffnet ein neues DeleteRoomWindow.
/**
* <summary>
* wird aufgerufen, wenn über den Reiter "Raum-Löschen" ausgewählt wird. Öffnet ein neues DeleteRoomWindow.
* </summary>
*/
private
void
DeleteRoom
(
object
sender
,
RoutedEventArgs
e
)
{
DeleteRoomWindow
window
=
new
DeleteRoomWindow
(
CurrentFloor
.
Id
);
...
...
Raumverwaltung_HMWK/MainWindow.xaml.cs
View file @
487c937a
...
...
@@ -9,13 +9,32 @@ namespace Raumverwaltung_HMWK
/**
* <summary>
*
* Dies ist das Hauptfenster der Anwendung. Es besteht aus den Reitern "Standort, Stockwerk, Benutzer & Hilfe".
* Direkt im Anschluss befinden sich Filteroptionen, um ein beliebiges Stockwerk über den Button "Stockwerk öffnen" in einem
* neuem FloorWindow zu öffnen.
* Im unteren Teil des Fenster wird eine Übersicht über alle Räume auf dem ausgewählten Stockwerk geboten.
* </summary>
*/
public
partial
class
MainWindow
{
/**
* <param name="buildings">
* wird über die Funktion GetBuildings() befüllt, sodass nicht nur die Standorte geladen werden, sondern auch die gesamte
* Struktur: Jeder Standort hat eine Liste mit allen zugeordneten Stockwerken, wobei Diese wiederum eine Raumliste pflegen mit
* allen Räumen auf ihrer Ebene.
* </param>
*
*/
public
static
List
<
Building
>
buildings
;
/**
*<summary>
* Der Konstruktor des MainWindows: Hier wird die komplette Standortstruktur zu Beginn geladen (Standort->Stockwerke->Räume).
* Die Combo-Box der Standorte wird befüllt über die FillStandortList()-Funktion.
* </summary>
*
*/
public
MainWindow
()
{
buildings
=
GetBuildings
();
...
...
@@ -25,6 +44,11 @@ namespace Raumverwaltung_HMWK
}
/**
* <summary>
* Befüllt die Combo-Box zur Auswahl der Standorte
* </summary>
*/
private
void
FillStandortList
()
{
for
(
int
i
=
0
;
i
<
buildings
.
Count
;
i
++)
...
...
@@ -33,6 +57,12 @@ namespace Raumverwaltung_HMWK
}
}
/**
*
* <summary>
* je nach Standortwahl wird die Combo-Box der Stockwerke unterschiedlich befüllt.
* </summary>
*/
private
void
FillStockwerkList
(
string
name
)
{
for
(
int
i
=
0
;
i
<
buildings
.
Count
;
i
++)
...
...
@@ -48,13 +78,23 @@ namespace Raumverwaltung_HMWK
}
}
/**
* <summary>
* Einfache Get-Funktion, die die SqLiteDataAccess-Funktion GetBuildings() aufruft.
* </summary>
*/
public
static
List
<
Building
>
GetBuildings
()
{
return
SqLiteDataAccess
.
GetBuildings
();
}
/**
* <summary>
* Einfache Updatefunktion: Je nach Standortwahl wird die Stockwerk-Combo-Box ggf. geleert und mit den Stockwerken
* neu befüllt, die zum Standort gehören.
* </summary>
*/
private
void
Standortauswahl_OnSelectionChanged
(
object
sender
,
SelectionChangedEventArgs
e
)
{
ComboBox
cbx
=
(
ComboBox
)
sender
;
...
...
@@ -66,6 +106,12 @@ namespace Raumverwaltung_HMWK
}
}
/**
* <summary>
* Einfache Updatefunktion: Je nachdem, welches Stockwerk nun ausgewählt wurde, wird die Übersicht der Räume neu
* befüllt mit den zugehörigen Räumen.
* </summary>
*/
private
void
Stockwerkauswahl_OnSelectionChanged
(
object
sender
,
SelectionChangedEventArgs
e
)
{
...
...
@@ -78,6 +124,13 @@ namespace Raumverwaltung_HMWK
}
/**
* <summary>
* Die Funktion wird nach der Betätigung des Buttons "Standort öffnen" ausgeführt. Hierbei wird der Name des Stockwerks
* aus der Combo-Box mit allen Namen der Stockwerke in "buildings" verglichen. Wenn die Namen übereinstimmen,
* wird ein FloorWindow mit der übergebenen Stockwerk-ID geöffnet.
* </summary>
*/
private
void
OpenFloor_OnClick
(
object
sender
,
RoutedEventArgs
e
)
{
try
...
...
@@ -103,6 +156,15 @@ namespace Raumverwaltung_HMWK
}
}
/**
* <summary>
* befüllt die Übersicht im MainWindow, je nachdem welches Stockwerk übergeben wird. Dabei iteriert die Funktion
* über alle Standort-Elemente in buildings, um in einer zweiten Loop über alle Stockwerke iterieren zu können.
* Falls die Namen des ausgewählten Stockwerks und des Stockwerks in buildings (als Unterelement) übereinstimmen,
* werden alle Räume zu dem Stockwerk zu sogenannten "OverviewItems" umgeformt. OverViewItems werden statt den eigentlichen
* Räumen in der Übersicht dargestellt.
* </summary>
*/
public
void
FillOverview
(
string
stockwerk
)
{
...
...
@@ -128,48 +190,89 @@ namespace Raumverwaltung_HMWK
RoomList
.
ItemsSource
=
overViewItems
;
}
/**
* <summary>
* die Funktion wird immer dann aufgerufen, wenn sich das Verhältnis der belegten Arbeitsplätze zur Obergrenze der
* Arbeitsplätze verändert hat, da sich dann die Farbe der Räume sowohl im FloorWindow als auch in der Übersicht
* ändern muss.
* </summary>
*/
public
void
ReloadRoomList
(
int
floorId
)
{
RoomList
.
ItemsSource
=
null
;
FillOverview
(
SqLiteDataAccess
.
GetFloor
(
floorId
).
Name
);
}
/**
* <summary>
* Ein neues AddUserWindow wird geöffnet. Die Funktion wird aufgerufen, wenn "Benutzer-Anlegen" im Reiter ausgewählt wurde.
* </summary>
*/
private
void
AddUser
(
object
sender
,
RoutedEventArgs
e
)
{
var
window
=
new
AddUserWindow
();
window
.
Show
();
}
/**
* <summary>
* Ein neues DeleteUserWindow wird geöffnet. Die Funktion wird aufgerufen, wenn "Benutzer-Löschen" im Reiter ausgewählt wurde.
* </summary>
*/
private
void
DeleteUser
(
object
sender
,
RoutedEventArgs
e
)
{
var
window
=
new
DeleteUserWindow
();
window
.
Show
();
}
/**
* <summary>
* Ein neues AddLocationWindow wird geöffnet. Die Funkion wird aufgerufen, wenn "Standort-Anlegen" im Reiter ausgewählt wurde.
* </summary>
*/
private
void
AddLocation
(
object
sender
,
RoutedEventArgs
e
)
{
var
window
=
new
AddLocationWindow
();
window
.
Show
();
}
/**
* <summary>
* Ein neues DeleteLocationWindow wird geöffnet. Die Funktion wird aufgerufen, wenn "Standort-Löschen" im Reiter ausgewählt wurde.
* </summary>
*/
private
void
DeleteLocation
(
object
sender
,
RoutedEventArgs
e
)
{
var
window
=
new
DeleteLocationWindow
();
window
.
Show
();
}
/**
* <summary>
* Ein neues AddFloorWindow wird geöffnet. Die Funktion wird aufgerufen, wenn "Stockwerk-Anlegen" im Reiter ausgewählt wurde.
* </summary>
*/
private
void
AddFloor
(
object
sender
,
RoutedEventArgs
e
)
{
var
window
=
new
AddFloorWindow
();
window
.
Show
();
}
/**
* <summary>
* Ein neues DeleteFloorWindow wird geöffnet. Die Funktion wird aufgerufen, wenn "Stockwerk-Löschen" im Reiter ausgewählt wurde.
* </summary>
*/
private
void
DeleteFloor
(
object
sender
,
RoutedEventArgs
e
)
{
var
window
=
new
DeleteFloorWindow
();
window
.
Show
();
}
/**
* <summary>
* Ein neues SearchUserWindow wird geöffnet. Die Funktion wird aufgerufen, wenn "Benutzer-Suchen" im Reiter ausgewählt wurde.
* </summary>
*/
private
void
SearchUser
(
object
sender
,
RoutedEventArgs
e
)
{
var
window
=
new
SearchUserWindow
();
...
...
@@ -177,6 +280,11 @@ namespace Raumverwaltung_HMWK
}
/**
* <summary>
* Ein neues ChangeUserWindow wird geöffnet. Die Funktion wird aufgerufen, wenn "Benutzer-Suchen" im Reiter ausgewählt wurde.
* </summary>
*/
private
void
ChangeUser
(
object
sender
,
RoutedEventArgs
e
)
{
...
...
Raumverwaltung_HMWK/OverViewItem.cs
View file @
487c937a
using
System
;
using
System.Configuration
;
using
System.Windows.Controls
;
using
System.Windows.Media.Imaging
;
namespace
Raumverwaltung_HMWK
{
/**
* <summary>
* Die Klasse wird als Formatierungsmittel für die Räume in der Übersicht im MainWindow verwendet. Jedes OverviewItem
* bekommt die ID, eine farbliche Erkennung, Raumname & -größe sowie Obergrenze der Arbeitsplätze des Raumes übergeben, zusätzlich wird
* die aktuelle Anzahl an Nutzern im Raum ermittelt. Jedes OverViewItem stellt eine Zeile in der Übersicht da.
* </summary>
*/
public
class
OverViewItem
{
/**
* <param name="Id">
* Id des Raumes
* </param>
*/
public
int
Id
{
get
;
set
;
}
/**
* <param name="MyImage">
* farbliches Feld zu Beginn jedes Items: Rot, gelb, grün & blau
* </param>
*/
public
BitmapImage
MyImage
{
get
;
set
;
}
/**
* <param name="RoomName">
* übergebener Raumname
* </param>
*/
public
string
RoomName
{
get
;
set
;
}
/**
* <param name="RoomSize">
* übergebene Raumgröße
* </param>
*/
public
double
RoomSize
{
get
;
set
;
}
/**
* <param name="MaxWp">
* Obergrenze an Arbeitsplätzen (wird gesetzt vom User)
* </param>
*/
public
int
MaxWp
{
get
;
set
;
}
/**
* <param name="RealAmountUsers">
* wird im Konstruktor gesetzt: die aktuelle Anzahl an Nutzern im Raum
* </param>
*/
public
int
RealAmountUsers
{
get
;
set
;
}
/**
* <summary>
* Konstruktor des OverViewItems. Bekommt id, name und roomSize von den Räumen übergeben, MaxWp und RealAmountUsers
* wird aus der Datenbank ermittelt. Je nach Auslastung der Arbeitsplätze wird die Farbe des Bilds gesetzt.
* </summary>
*/
public
OverViewItem
(
int
id
,
string
name
,
double
roomSize
)
{
Id
=
id
;
...
...
Raumverwaltung_HMWK/Punkt.cs
View file @
487c937a
namespace
Raumverwaltung_HMWK
{
/**
* <summary>
* Die Klasse Punkt wird für die Ermittlung & Verschiebung der Buttons im FloorWindow ermittelt, genauer gesagt
* für das Casting der x- und y-Werte, um Diese in die Datenbank zu überführen.
* </summary>
*/
public
class
Punkt
{
public
double
X
=>
x
;
...
...
Raumverwaltung_HMWK/Room.cs
View file @
487c937a
namespace
Raumverwaltung_HMWK
{
/**
* <summary>
* Die Klasse Room stellt die Räume dar. Jeder Raum hat in der Anwendung als auch in der Datenbank eine Id, einen Namen,
* eine Raumgröße, einen x- und y-Wert für die Positionierung des Buttons (Repräsentant), eine Obergrenze für die Arbeitsplätze,
* sowie eine Stockwerk-Id als Fremdschlüssel hinterlegt.
* </summary>
*/
public
class
Room
{
private
int
id
;
private
string
name
;
private
double
size
;
/**
* <param name="x">
* x-Koordinate des Buttons, welcher den Raum als graphische Schaltfläche repräsentiert.
* </param>
*/
private
double
x
;
/**
* <param name="y">
* xyKoordinate des Buttons, welcher den Raum als graphische Schaltfläche repräsentiert.
* </param>
*/
private
double
y
;
/**
* <param name="maxWP">
* Obergrenze der Arbeitsplätze für den Raum. Kann auch überschritten werden, die Farbfestlegung bleibt dann bei rot.
* Kann frei vom Nutzer gesetzt werden, dient lediglich als Auslastungsorientierung.
* </param>
*/
private
int
maxWP
;
/**
* <param name="floorId">
* Fremdschlüssel von der Stockwerk-ID
* </param>
*/
private
int
floorId
;
//Standardkonstruktor: Notwendig für Datenbank
public
Room
()
{
}
public
Room
(
string
name
)
{
}
public
int
Id
{
get
{
return
id
;
}
...
...
@@ -58,7 +79,7 @@
set
{
floorId
=
value
;
}
}
// Formatierung: Ausgabe der Räume über den Namen
public
override
string
ToString
()
{
return
name
;
...
...
Raumverwaltung_HMWK/RoomWindow.xaml.cs
View file @
487c937a
...
...
@@ -8,12 +8,51 @@ using System.Windows.Media;
namespace
Raumverwaltung_HMWK
{
/**
* <summary>
* Das RoomWindow öffnet sich, sobald ein beliebiger Button, welcher einen Raum repräsentiert, ausgewählt wird.
* Ein RoomWindow kann nur von einem FloorWindow aus geöffnet werden. Jedes Raumfenster zeigt die ID, Raumgröße und
* Obergrenze an Arbeitsplätzen an. Außerdem werden zwei Listen zu dem Raum ausgegeben: Die Liste mit den Nutzern zu dem Raum
* sowie die Liste mit den dazugehörigen Assets.