:toc: macro
= Pflichtenheft

[options="header"]
[cols="1, 1, 1, 1, 4"]
|===
|Version | Status      | Bearbeitungsdatum   | Autoren(en) |  Vermerk
|0.1     | In Arbeit   | 10.10.2021          | Autor       | Initiale Version
|===

== Inhaltsverzeichnis
toc::[]

== Zusammenfassung

Ziel des Projekts „Cateringservice“ ist es, eine web-basierte Java-Applikation für den Catering-Service „Mampf“ zu entwickeln. Dabei kann ein registrierter Kunde einen Auftrag gestalten, welcher dann von der Software geplant wird. Diese Automatisierung beinhaltet:

- Kundenverwaltung
- Hilfe bei der Personalverwaltung
- Personalzuteilung
- Termin- und Eventplanung inkl. Zubehör, Lebensmittelbedarf
- Vereinfachung der Kostenabrechnung und Arbeitszeitaufstellung

Zudem soll die Software diverse nicht-funktionale Kriterien, wie folgt, erfüllen:

- einfache Bedienbarkeit
- Absturzsicherheit
- einfache Erweiterbarkeit
- nachvollziehbare Strukturierung
- hohe Codequalität

Die Software gilt als fertig entwickelt und auslieferungsbereit, wenn die folgend in diesem Dokument aufgelisteten Akzeptanztest bestanden sind, auf welche sich mit dem Kunden geeinigt wurde.

== Aufgabenstellung

Da unser Auftraggeber Herr Wurst im Laufer der Zeit den großen Cateringservice Mampf aufgebaut hat,
benötigt er nun eine Software, die ihm und seinen Mitarbeitern den Tag einfacher machen soll.
Mit der Software soll er alle Abrechnungs-, Bestell- und Verwaltungsaufgaben einheitlich bearbeiten können.
Bisher nutze Herr Wurst dafür diverse
Programme und ärgerte sich immer wieder über deren Inkompatibilität zueinander und den Mehraufwand durch
getrennte Datenhaltung. Als Basis für die Softwareentwicklung gab er uns folgende Beschreibung seines kleinen
Unternehmens:

Das Unternehmen gliedert sich in vier Geschäftsfelder. Das Eventcatering übernimmt die Verpflegung bei großen Veranstaltungen,
egal ob in Form eines Buffetts oder als Galadinner. Auf Wunsch gestaltet Mampf auch das komplette Event, d.h. neben
den Speisen und Getränken wird auch Dekoration, Ausrüstung (also Geschirr, Tischtücher usw.) und Personal zur
Verfügung gestellt, wobei der Kunde dann natürlich zusätzlich zum eigentlichen Preis für Lebensmittel und Arbeitszeit
auch Leihgebühren und Personalkosten bezahlen muss. Der Partyservice beliefert private Feierlichkeiten mit kalten
Platten – von Hochzeiten und Beerdigungen über Gartenfeste bis zu Omas 75sten Geburtstag. Hierbei gibt es Festpreise
je nach Angebot und Personenanzahl (z.B. Schinkenplatte für 5 Personen zu 20,- EUR, Käseplatte für 3 Personen zu
12,50 EUR usw.) und Sonderaktionen (z.B. Sushi-Abend für 10 Personen). Eine Besonderheit von Mampf ist Mobile
Breakfast – ein mobiler Frühstücksservice für kleinere Firmen ohne eigene Kantine. Zu festgelegten Zeiten können die
Mitarbeiter sozusagen am Arbeitsplatz eine Auswahl an Frühstücksangeboten (belegte Brötchen, Müsli, Kaffee und Tee
usw.) kaufen. Die Firmen buchen das Angebot monatsweise. Problematisch ist allerdings die Planung dieses Angebotes
– hier wird derzeit noch nach einer kostensparenden Lösung (z.B. in Form einer Vorbestellung) gesucht. Immer beliebter
wird bei den Kunden auch das vierte Angebot von Mampf: Rent-a-Cook. Dabei wird Küchen- und Servicepersonal an
Privathaushalte verliehen, um z.B. den Chef des Gastgebers mit kulinarischen Köstlichkeiten zu beeindrucken. Um die
Lebensmittel müssen sich die Kunden dabei selbst kümmern.

Die wichtigsten Funktionen die die Software beinhalten soll sind, die Kundenverwaltung zu
unterstützen, die Personalverwaltung und -zuteilung übernehmen, die Termine planen, das Zubehör (Dekoration,
Ausrüstung) verwalten, den Lebensmittelbedarf bestimmen (Anzahl Gerichte/Platten/belegte Brötchen, Menge an
Getränken in Liter), die Rechnungsstellung an die Kunden vereinfachen und sämtliche Abrechnungen erleichtern. Die
Lebensmittelbeschaffung muss jedoch nicht betrachtet werden.
Am Ende soll die Software voll funktionstüchtig sein und alle bereits genannten Funktionen beinhalten. Ziel soll es sein,
durch ein zentralisierte Datenhaltung die Abläufe, insbesondere die Planung im Unternehemen effizienter zu gestalten.
Die Software soll einfach erweiterbar sein um neue Geschäftsfelder erschließen zu können.

== Produktnutzung

Die Software soll zu Verwaltungszwecken genutzt werden, welches als Website umgesetzt werden soll.

Das System soll über einen Server laufen um jeder Zeit erreichabr zu sein? (Oder loakl?)
Wenn ja, dann Browser X.

Die Software richtet sich an den CEO des Unternehmens, sowie seine Mitarbeiter und soll deshalb von jeder Altersgruppen einfach zu bedienen sein. Außerdem sollte die Software alle wichtigen Funktionen eines Verwaltungs- und Planungsprogrammes enthalten und somit eine gewissen Übersichtlichkeit bieten, die die Bearbeitung ohne viel Mehraufwand zulässig macht.



== Interessensgruppen (Stakeholders)

Eine Liste aller realen und juristischen Personen(-gruppen),
die Einfluss auf die Anforderungen im Projekt haben.

Die Prioritäten bringen die Interessensgruppen in eine Rangfolge,
wobei eine niedrigere Zahl eine höhere Priorität darstellt.

[options="header", cols="2, ^1, 4, 4"]
|===
|Name
|Priorität
|Beschreibung
|Ziele

|{company_name}
|1
|Der Kunde des Projektes.
a|
- Vereinfachung des Betriebsablaufes
- Steigerung der Effizienz
- Möglichkeit der Expansion

|Mitarbeitende von {company_name}
|2
|Personen, die die Software verwenden
a|
- Einfache Bedienung
- Zuverlässige Funktion

|Kunden von {company_name}
|3
|Personen(-gruppen), deren Auftrage in der Software verwaltet werden
a|
- Guter Service
|===


== Systemgrenze und Top-Level-Architektur

=== Kontextdiagramm

image::models/analysis/systemContextDiagram.svg[]

=== Top-Level-Architektur

image::models/analysis/topLevelArchitecture.svg[]

== Anwendungsfälle

=== Akteure

[cols="1h,3"]
|===
|Nutzer
|Ist jede Person, die mit dem System interagiert - unabhängig, ob Sie eine Zugriffsberechtigung hat oder nicht.

|Registrieter Nutzer
|Ist jede Person, die eine Zugriffsberechtigung auf das System hat. Die Berechtigungen für diese Person sind begrenzt.

|Boss / Admin
|Ein registrieter Nutzer mit uneingeschränkten Berechtigungen.
|===

=== Anwendungsfalldiagramm / Use-Case Diagram

image::models/analysis/useCaseDiagram.svg[]

=== Anwendungsfallbeschreibung

===== Kundenverwaltung
[cols="1h,2"]
|===
|ID
|[UC0101]

|Name
|Kundendaten bearbeiten

|Beschreibung
|Der Nutzer verfügt über die Berechtigung die Daten eines Kunden (z.B. Rechnungsadresse) zu bearbeiten.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

[cols="1h,2"]
|===
|ID
|[UC0102]

|Name
|Kundendaten einsehen

|Beschreibung
|Der Nutzer verfügt über die Berechtigung die Daten eines Kunden einzusehen.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

[cols="1h,2"]
|===
|ID
|[UC0103]

|Name
|Kunden entfernen

|Beschreibung
|Der Nutzer verfügt über die Berechtigung einen Kunden aus dem System zu entfernen.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

[cols="1h,2"]
|===
|ID
|[UC0104]

|Name
|Kunden hinzufügen

|Beschreibung
|Der Nutzer verfügt über die Berechtigung einen neuen Kunden dem System hinzuzufügen.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

===== Personalverwaltung
[cols="1h,2"]
|===
|ID
|[UC0201]

|Name
|Personal hinzufügen

|Beschreibung
|Der Nutzer verfügt über die Berechtigung einen Angestelten dem System hinzuzufügen.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

[cols="1h,2"]
|===
|ID
|[UC0202]

|Name
|Personaldaten bearbeiten

|Beschreibung
|Der Nutzer verfügt über die Berechtigung die personbezogenen Daten eines Angestelten zu ändern (z.B. die Adresse).

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===
[cols="1h,2"]
|===
|ID
|[UC0203]

|Name
|Personaldaten einsehen

|Beschreibung
|Der Nutzer verfügt über die Berechtigung die personbezogenen Daten eines Angestelten einzusehen.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

[cols="1h,2"]
|===
|ID
|[UC0204]

|Name
|Personal entfernen

|Beschreibung
|Der Nutzer verfügt über die Berechtigung einen Angestelten aus dem System zu entfernen.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

[cols="1h,2"]
|===
|ID
|[UC0205]

|Name
|Personal einem Auftrag zuordnen

|Beschreibung
|Der Nutzer verfügt über die Berechtigung einen Angestelten für einen Auftrag einzuteilen.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

===== Rechnungswesen
[cols="1h,2"]
|===
|ID
|[UC0301]

|Name
|Rechnung hinzufügen

|Beschreibung
|Der Nutzer verfügt über die Berechtigung eine Rechnung dem System hinzuzufügen.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

[cols="1h,2"]
|===
|ID
|[UC0302]

|Name
|Rechnungen bearbeiten

|Beschreibung
|Der Nutzer verfügt über die Berechtigung eine bereits vorhandene Rechnung zu bearbeiten.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

[cols="1h,2"]
|===
|ID
|[UC0303]

|Name
|Rechnung bezahlen

|Beschreibung
|Der Nutzer verfügt über die Berechtigung eine Rechnung als bezahlt einzustufen.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

[cols="1h,2"]
|===
|ID
|[UC0304]

|Name
|Rechnung einsehen

|Beschreibung
|Der Nutzer verfügt über die Berechtigung den Inhalt einer Rechnung einzusehen.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

===== Auftragverwaltung
[cols="1h,2"]
|===
|ID
|[U0401]

|Name
|Auftragsdaten bearbeiten

|Beschreibung
|Der Nutzer verfügt über die Berechtigung den Inhalt eines vorhandenen Auftrags zubearbeiten.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

[cols="1h,2"]
|===
|ID
|[UC0402]

|Name
|Auftragsdaten einsehen

|Beschreibung
|Der Nutzer verfügt über die Berechtigung den Inhalt eines vorhandenen Auftrags einzusehen.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

[cols="1h,2"]
|===
|ID
|[UC0403]

|Name
|Auftrag entfernen

|Beschreibung
|Der Nutzer verfügt über die Berechtigung einen vorhandenen Auftrag aus dem System zu entfernen.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

[cols="1h,2"]
|===
|ID
|[UC0404]

|Name
|Auftrag hinzufügen

|Beschreibung
|Der Nutzer verfügt über die Berechtigung einen Auftrag dem System hinzuzufügen.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

===== Inventarverwaltung
[cols="1h,2"]
|===
|ID
|[UC0501]

|Name
|Inventar einsehen

|Beschreibung
|Der Nutzer verfügt über die Berechtigung das Inventar einzusehen.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

[cols="1h,2"]
|===
|ID
|[UC0502]

|Name
|Inventar bearbeiten

|Beschreibung
|Der Nutzer verfügt über die Berechtigung den Inhalt des Inventars zu bearbeiten.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

===== Administration
[cols="1h,2"]
|===
|ID
|[UC0601]

|Name
|Registrieten Nutzer hinzufügen

|Beschreibung
|Der Admin verfügt über die Berechtigung einen registrieten Nutzer anzulegen.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

[cols="1h,2"]
|===
|ID
|[UC0602]

|Name
|Registrieten Nutzer entfernen

|Beschreibung
|Der Admin verfügt über die Berechtigung einen registrieten Nutzer aus dem System zu entfernen.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

====== Oberfläche
[cols="1h,2"]
|===
|ID
|[UC0701]

|Name
|Login

|Beschreibung
|Der Nutzer verfügt über die Berechtigung die Login-Page aufzurufen.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===
[cols="1h,2"]

|===
|ID
|[UC0702]

|Name
|Logout

|Beschreibung
|Der Nutzer verfügt über die Berechtigung sich abzumelden.

|Akteure
|Registrieter Nutzer

|Trigger
|

|Bedingungen
|

|Essizielle Schritte
|

|Erweiterungen
|

|Funkionale Vorraussetzungen
|
|===

== Funktionale Anforderungen

Diese Tabelle gibt einen Überblick über die funktionalen Anforderungen des Systems.

Die Tabelle beinhaltet:

- den unique identifier der Anforderung (ID), der für Referenzierungen im Projekt genutzt wird
- die aktuelle Version der Anforderung, da sich die Anforderung im Verlauf des Projekts ändern kann
- Kurznamen der Anforderung
- Beschreibung der Anforderung

[options="header", cols="2h, 1, 3, 12"]
|===
|ID
|Version
|Kurzname
|Beschreibung


|[[F00010]]<<F00010>>
|v0.1
|Geschäftsfeld
a|
Ist Zuordnung einer der Ausprägungen:

* Eventcatering
* Partyservice
* Mobile Breakfast
* Rent-a-Cook

zu einer Menge der Leistungen:

* Personal/Personen <<F00011>>
* Zubehör/Leihmaterial <<F00012>>
* Lebensmittel/Verbrauchsartikel <<F00013>>


|[[F00011]]<<F00011>>
|v0.1
|Personal/Personen
a|
Ist/sind genau einer der Gruppen:

* Küchenpersonal
* Servicepersonal

zugeordnet.

Muss einen Zeitplan besitzen.

Muss einem Preis pro Tag besitzen.

Kann durch einen Auftrag <<F00300>> für einen oder mehrere Tage verplant werden.


|[[F00012]]<<F00012>>
|v0.1
|Zubehör/Leihmaterial
a|
Muss einen Zeitplan besitzen.

Muss einem Preis pro Tag besitzen.

Kann durch einen Auftrag <<F00011>> für einen oder mehrere Tage verplant werden.


|[[F00013]]<<F00013>>
|v0.1
|Lebensmittel/Verbauchsartikel
a|
Muss einem Preis pro Einheit besitzen.



|[[F00200]]<<F00200>>
|v0.1
|Kunde
a|
Ein Kunde muss die Eigenschaften:

* Nachname, Vorname
* Telefonnummer
* Email Adresse
* Rechnungsanschrift (Ortsname ,Postleitzahl, Straße, Straßennamen)

besitzen.

Muss registriert werden (<<F00201>>).


|[[F00201]]<<F00201>>
|v0.1
|Kundenregistrierung
a|
Das System muss:

* dem Nutzer ermöglichen einen Kunden zu registrieren
* angegebenen Daten eines unregistrierten Kunden auf Vollständigkeit prüfen
* Einzigartigkeit der Kombination aus Nachname, Vorname und Rechnungsanschrift garantieren
* den Nutzer über jede Beschränkungsverletzungen der Information in Kenntnis setzen



|[[F00300]]<<F00300>>
|v0.1
|Auftrag
a|
Muss

* einer Sammlung von Leistungen eines Geschäftsfelds über einem Zeitraum von einem oder mehreren Tagen einem Kunden zuordnen
* Kostenaufstellung anbieten <<F00302>>
* Lebensmittel-/Verbrauchsartikelbedarfbestimmung anbieten <<F00303>>


|[[F00301]]<<F00301>>
|v0.1
|Auftragserstellung
a|
Das System muss:

* dem Nutzer ermöglichen einen Auftrag zu erstellen
* jeden Auftrag vor der persistenten Speicherung validieren
* der Nutzer über jede Beschränkungsverletzungen der Information in Kenntnis setzen
* einen Eintrag für den gewählten Zeitraum für alle Leistungen mit einem Zeitplan erstellen

|[[F00302]]<<F00302>>
|v0.1
|Kostenaufstellung
a|
Muss vollautomatisch die im Bezug auf die erbrachten Leistungen aufgeschlüsselten Kosten über den Zeitraum des Auftrags enthalten und in Form einer Tabelle darstellen.

|[[F00303]]<<F00303>>
|v0.1
|Lebensmittel-/Verbrauchsartikelbedarf bestimmen
a|
Muss vollautomatisch die Menge an Lebensmitteln/Verbrauchsartikeln auf Basis der Informationen eines Auftrags bestimmen.

|===

== Nicht-Funktionale Anforderungen

=== Qualitätsziele


[options="header"]
[cols="4,1"]
|===
| Qualitätsziel | Priorität (hoch - mittel - gering)
| einfache Bedienbarkeit (für Nicht-Informatiker) | hoch
| Absturzsicherheit | hoch
| einfache Erweiterbarkeit | mittel
| nachvollziehbare Strukturierung | mittel
| hohe Codequalität | mittel
|===

=== Konkrete Nicht-Funktionale Anforderungen

Beschreiben Sie Nicht-Funktionale Anforderungen, welche dazu dienen, die zuvor definierten Qualitätsziele zu erreichen.
Achten Sie darauf, dass deren Erfüllung (mindestens theoretisch) messbar sein muss.

==== Einfache Bedienbarkeit
- Interaktion vollständig über Knöpfe und Textfelder
- fehlerhafte Nutzereingaben werden dem Nutzer direkt mitgeteilt
- intuitives Design z. B. des Menüs

==== Absturzsicherheit
- fehlerhafte Eingaben der Nutzer dürfen nicht zu Abstürzen führen

==== Einfache Erweiterbarkeit
- Software muss so entworfen sein, dass einfach neue Produkte oder Dienstleistungen ergänzt werden können

==== Nachvollziehbare Strukturierung
- das Design der Software muss sich an bekannten und geeigneten Entwurfsmustern orientieren

==== Hohe Codequalität
- verständliche Dokumentation von Objekten und dessen Methoden

== GUI Prototyp

=== Überblick: Dialoglandkarte
Erstellen Sie ein Übersichtsdiagramm, das das Zusammenspiel Ihrer Masken zur Laufzeit darstellt. Also mit welchen Aktionen zwischen den Masken navigiert wird.
//Die nachfolgende Abbildung zeigt eine an die Pinnwand gezeichnete Dialoglandkarte. Ihre Karte sollte zusätzlich die Buttons/Funktionen darstellen, mit deren Hilfe Sie zwischen den Masken navigieren.

=== Dialogbeschreibung
Für jeden Dialog:

1. Kurze textuelle Dialogbeschreibung eingefügt: Was soll der jeweilige Dialog? Was kann man damit tun? Überblick?
2. Maskenentwürfe (Screenshot, Mockup)
3. Maskenelemente (Ein/Ausgabefelder, Aktionen wie Buttons, Listen, …)
4. Evtl. Maskendetails, spezielle Widgets

=== Umsetzung
Die folgenden Bilder sollen zeigen, wie die Software aussehen soll.

[small]_(Bilder folgen später, vorerst nur Beschreibung)_

Software soll enthalten:

- Login-Seite als Startseite
- Navigationsbereich (Optionen erst sichtbar nach Login)
* Terminverwaltung - in Kalenderform, editierbare Einträge
* Kundenverwaltung - tabellarisch, Löschfunktion, Umbenennungsfunktion
* Mitarbeiterverwaltung - tabellarisch, Löschfunktion, Umbenennungsfunktion, Rollenverwaltung
* Lager - Produktname, Produktbild, Menge, Preis
- Eventplanungsseite - evtl. Drop-down-Menüs für Eventtypauswahl und eventspezifische Eingabefelder
- Kann: Produktseite - Produktname, Produktbeschreibung, Preis, Bilder


[small]_Notiz: Überschüssige Zeit könnte in Design investiert werden._

=== Überblick: Dialoglandkarte
Erstellen Sie ein Übersichtsdiagramm, das das Zusammenspiel Ihrer Masken zur Laufzeit darstellt. Also mit welchen Aktionen zwischen den Masken navigiert wird.
//Die nachfolgende Abbildung zeigt eine an die Pinnwand gezeichnete Dialoglandkarte. Ihre Karte sollte zusätzlich die Buttons/Funktionen darstellen, mit deren Hilfe Sie zwischen den Masken navigieren.

=== Dialogbeschreibung
Für jeden Dialog:

1. Kurze textuelle Dialogbeschreibung eingefügt: Was soll der jeweilige Dialog? Was kann man damit tun? Überblick?
2. Maskenentwürfe (Screenshot, Mockup)
3. Maskenelemente (Ein/Ausgabefelder, Aktionen wie Buttons, Listen, …)
4. Evtl. Maskendetails, spezielle Widgets

== Datenmodell

=== Überblick: Klassendiagramm

image::models/analysis/domain.svg[]

=== Klassen und Enumerationen
Dieser Abschnitt stellt eine Vereinigung von Glossar und der Beschreibung von Klassen/Enumerationen dar. Jede Klasse und Enumeration wird in Form eines Glossars textuell beschrieben. Zusätzlich werden eventuellen Konsistenz- und Formatierungsregeln aufgeführt.

// See http://asciidoctor.org/docs/user-manual/#tables
[options="header"]
|===
|Klasse/Enumeration |Beschreibung |
|…                  |…            |
|===

== Akzeptanztestfälle

[cols="1h, 4"]
[[AT0101]]
|===
|ID            |<<AT0101>>
|Use Case      |<<UC0101>>
|{Pre}        a|A registered user is logged into the system and is viewing customer data.
|{Event}      a|The user selects a customer and updates the billing address.
|{Result}     a|The customer data is updated successfully and a confirmation message is displayed.
|===

[cols="1h, 4"]
[[AT0102]]
|===
|ID            |<<AT0102>>
|Use Case      |<<UC0102>>
|{Pre}        a|A registered user is logged into the system.
|{Event}      a|The user navigates to view customer data.
|{Result}     a|The customer data is displayed to the user.
|===

[cols="1h, 4"]
[[AT0103]]
|===
|ID            |<<AT0103>>
|Use Case      |<<UC0103>>
|{Pre}        a|A registered user is logged into the system and is viewing customer data.
|{Event}      a|The user selects a customer and chooses the option to remove the customer.
|{Result}     a|The customer is removed from the system and a confirmation message is displayed.
|===

[cols="1h, 4"]
[[AT0104]]
|===
|ID            |<<AT0104>>
|Use Case      |<<UC0104>>
|{Pre}        a|A registered user is logged into the system.
|{Event}      a|The user chooses to add a new customer and provides the required customer details.
|{Result}     a|The new customer is added successfully and a confirmation message is displayed.
|===

[cols="1h, 4"]
[[AT0201]]
|===
|ID            |<<AT0201>>
|Use Case      |<<UC0201>>
|{Pre}        a|A registered user is logged into the system.
|{Event}      a|The user chooses to add a new employee and provides the required personal details.
|{Result}     a|The new employee is added successfully and a confirmation message is displayed.
|===

[cols="1h, 4"]
[[AT0202]]
|===
|ID            |<<AT0202>>
|Use Case      |<<UC0202>>
|{Pre}        a|A registered user is logged into the system and is viewing employee data.
|{Event}      a|The user selects an employee and updates their address.
|{Result}     a|The employee data is updated successfully and a confirmation message is displayed.
|===

[cols="1h, 4"]
[[AT0203]]
|===
|ID            |<<AT0203>>
|Use Case      |<<UC0203>>
|{Pre}        a|A registered user is logged into the system.
|{Event}      a|The user navigates to view employee data.
|{Result}     a|The employee data is displayed to the user.
|===

[cols="1h, 4"]
[[AT0204]]
|===
|ID            |<<AT0204>>
|Use Case      |<<UC0204>>
|{Pre}        a|A registered user is logged into the system and is viewing employee data.
|{Event}      a|The user selects an employee and chooses the option to remove the employee.
|{Result}     a|The employee is removed from the system and a confirmation message is displayed.
|===

[cols="1h, 4"]
[[AT0205]]
|===
|ID            |<<AT0205>>
|Use Case      |<<UC0205>>
|{Pre}        a|A registered user is logged into the system and is viewing assignment options.
|{Event}      a|The user selects an employee and assigns them to a specific task.
|{Result}     a|The employee is successfully assigned to the task, and a confirmation message is displayed.
|===

[cols="1h, 4"]
[[AT0301]]
|===
|ID            |<<AT0301>>
|Use Case      |<<UC0301>>
|{Pre}        a|A registered user is logged into the system.
|{Event}      a|The user chooses to add a new invoice and provides the required details.
|{Result}     a|The new invoice is added successfully and a confirmation message is displayed.
|===

[cols="1h, 4"]
[[AT0302]]
|===
|ID            |<<AT0302>>
|Use Case      |<<UC0302>>
|{Pre}        a|A registered user is logged into the system and is viewing invoice data.
|{Event}      a|The user selects an invoice and updates its details.
|{Result}     a|The invoice data is updated successfully and a confirmation message is displayed.
|===

[cols="1h, 4"]
[[AT0303]]
|===
|ID            |<<AT0303>>
|Use Case      |<<UC0303>>
|{Pre}        a|A registered user is logged into the system and views unpaid invoices.
|{Event}      a|The user selects an invoice and marks it as paid.
|{Result}     a|The invoice status changes to 'Paid', and a confirmation message is displayed.
|===

[cols="1h, 4"]
[[AT0304]]
|===
|ID            |<<AT0304>>
|Use Case      |<<UC0304>>
|{Pre}        a|A registered user is logged into the system.
|{Event}      a|The user navigates to view the contents of an invoice.
|{Result}     a|The contents of the invoice are displayed to the user.
|===

[cols="1h, 4"]
[[AT0401]]
|===
|ID            |<<AT0401>>
|Use Case      |<<U0401>>
|{Pre}        a|A registered user is logged into the system and is viewing order data.
|{Event}      a|The user selects an order and updates its details.
|{Result}     a|The order data is updated successfully and a confirmation message is displayed.
|===

[cols="1h, 4"]
[[AT0402]]
|===
|ID            |<<AT0402>>
|Use Case      |<<UC0402>>
|{Pre}        a|A registered user is logged into the system.
|{Event}      a|The user navigates to view order data.
|{Result}     a|The order data is displayed to the user.
|===

[cols="1h, 4"]
[[AT0403]]
|===
|ID            |<<AT0403>>
|Use Case      |<<UC0403>>
|{Pre}        a|A registered user is logged into the system and is viewing order data.
|{Event}      a|The user selects an order and chooses the option to remove it.
|{Result}     a|The order is removed from the system and a confirmation message is displayed.
|===

[cols="1h, 4"]
[[AT0404]]
|===
|ID            |<<AT0404>>
|Use Case      |<<UC0404>>
|{Pre}        a|A registered user is logged into the system.
|{Event}      a|The user chooses to add a new order and provides the necessary details.
|{Result}     a|The new order is added successfully, and a confirmation message is displayed.
|===

[cols="1h, 4"]
[[AT0501]]
|===
|ID            |<<AT0501>>
|Use Case      |<<UC0501>>
|{Pre}        a|A registered user is logged into the system.
|{Event}      a|The user navigates to the inventory section to view items.
|{Result}     a|The contents of the inventory are displayed to the user.
|===

[cols="1h, 4"]
[[AT0502]]
|===
|ID            |<<AT0502>>
|Use Case      |<<UC0502>>
|{Pre}        a|A registered user is logged into the system and is viewing inventory items.
|{Event}      a|The user selects an item and updates its details.
|{Result}     a|The inventory item data is updated successfully, and a confirmation message is displayed.
|===

[cols="1h, 4"]
[[AT0601]]
|===
|ID            |<<AT0601>>
|Use Case      |<<UC0601>>
|{Pre}        a|An admin user is logged into the system.
|{Event}      a|The admin chooses to add a new registered user and provides the necessary credentials.
|{Result}     a|The new registered user is added successfully, and a confirmation message is displayed.
|===

[cols="1h, 4"]
[[AT0602]]
|===
|ID            |<<AT0602>>
|Use Case      |<<UC0602>>
|{Pre}        a|An admin user is logged into the system and is viewing a list of registered users.
|{Event}      a|The admin selects a user and chooses to remove them from the system.
|{Result}     a|The selected registered user is removed, and a confirmation message is displayed.
|===

[cols="1h, 4"]
[[AT0701]]
|===
|ID            |<<AT0701>>
|Use Case      |<<UC0701>>
|{Pre}        a|A user is accessing the system's website.
|{Event}      a|The user chooses to access the Login-Page.
|{Result}     a|The login page is presented to the user.
|===

[cols="1h, 4"]
[[AT0702]]
|===
|ID            |<<AT0702>>
|Use Case      |<<UC0702>>
|{Pre}        a|A registered user is logged into the system.
|{Event}      a|The user selects the "Logout" option.
|{Result}     a|The user is successfully logged out, and a confirmation message or the login page is displayed.
|===

== Glossar

[options="header"]
[cols="1h,4"]
|===
| Begriff | Beschreibung
| Nutzer | Abstraktion über Administrator und Kunde
| Kunde | als Kunde angemeldeter Nutzer (ein Kunde von Mampf)
| unregistrierter Nutzer | Nutzer vor der Registrierung
| Administrator | als Administrator angemeldeter Nutzer (i. d. R. Hannes Wurst)
| Cateringservice/System | zu entwickelnde Software für Herrn Wurst
| Zubehör/Leihmaterial | Gegenstände, welche über einen festen Zeitraum vermietet werden können
| Lebensmittel/Verbrauchsmaterial | Gegenstände, welche einem Event zugeordnet werden und anschließend verbraucht sind
| Auftrag | eine Sammlung von Leistungen eines Geschäftsfeldes über einen konkreten Zeitraum inklusive Personal, Leih- und Verbrauchsmaterial (z. B. Buchung von Rent-a-Cook)
| Personal | Beschäftige von Mampf (ohne Zugriff auf das System), Küchen- und Servicepersonal
| Inventar | Sammlung von Leih- und Verbrauchsmaterial (inkl. Stückzahl)
| Kostenabrechnung | informelle Kostenaufstellung mit Endsumme für einen konkreten Auftrag
| Geschäftsfelder | Rent-a-Cook, Eventcatering, Partyservice, Mobile Breakfast
| UVP | Preis eines Produkts für den Kunden
| Einkaufspreis | Preis eines Produkts vor Steuern
| monatlich/Geschäftsmonat | Zeitraum vom 1. bis letzten Tag des Monats
|===

== Offene Punkte
Offene Punkte werden entweder direkt in der Spezifikation notiert. Wenn das Pflichtenheft zum finalen Review vorgelegt wird, sollte es keine offenen Punkte mehr geben.
