generated from leonetienne/LaTeX-Paper-template
singleview jap wine
This commit is contained in:
parent
d18f0f197c
commit
85276999a3
@ -286,14 +286,15 @@ Damit sieht das Drop-Down-Menü aus wie eine Baumstruktur.
|
|||||||
Diese Herangehensweise erzeugt schlüssigen und lesbaren Programmcode und lässt sich unkompliziert umsetzen.
|
Diese Herangehensweise erzeugt schlüssigen und lesbaren Programmcode und lässt sich unkompliziert umsetzen.
|
||||||
Das senkt Entwicklungskosten und erhöht den Profit des Endkunden, da hierdurch weniger Zeit aufgewandt wird.
|
Das senkt Entwicklungskosten und erhöht den Profit des Endkunden, da hierdurch weniger Zeit aufgewandt wird.
|
||||||
Rekursiv aufgerufene For-Schleifen, die sich selbst erneut für alle Elemente aufrufen,
|
Rekursiv aufgerufene For-Schleifen, die sich selbst erneut für alle Elemente aufrufen,
|
||||||
können jedoch zu einem Performanzproblem führen \cite{bib:schwarzer-vorlesung-alg}.
|
können zu einem Performanzproblem führen \cite{bib:schwarzer-vorlesung-alg}.
|
||||||
Daher wird im Folgenden die Zeitkomplexität dieser Rekursionsfunktion betrachtet.
|
Daher wird im Folgenden die Zeitkomplexität dieser Rekursionsfunktion betrachtet.
|
||||||
Grundlegend, kann für diese Funktion kein Master-Theorem angewandt werden,
|
Grundlegend, kann für diese Funktion kein Master-Theorem angewandt werden,
|
||||||
da es sich hierbei nicht um einen Divide-and-Conquer-Algorithmus handelt \cite{bib:schwarzer-vorlesung-alg}.
|
da es sich hierbei nicht um einen Divide-and-Conquer-Algorithmus handelt.
|
||||||
Das ist so, da das in der Rekursion weitergereichte Problem nicht kleiner wird,
|
Das ist so, da das in der Rekursion weitergereichte Problem nicht kleiner wird,
|
||||||
sondern gleich groß bleibt.
|
sondern gleich groß bleibt.
|
||||||
Das verletzt die Bedingung $b>1$ des Master-Theorem, dargestellt als $T(n) = a*T(\frac{n}{b})+f(n)$.
|
Das verletzt die Bedingung $b>1$ des Master-Theorem, definiert als $T(n) = a*T(\frac{n}{b})+f(n)$
|
||||||
Betrachten wir den Algortihmus, besteht er aus $m, m \in \mathbb{N}$ verschachtelten For-Schleifen
|
\cite{bib:schwarzer-vorlesung-alg}.
|
||||||
|
Der Algortihmus besteht aus $m, m \in \mathbb{N}$ verschachtelten For-Schleifen
|
||||||
gleicher Länge.
|
gleicher Länge.
|
||||||
Somit ist die Zeitkomplexität $O(n^m)$. Normiert dargestellt beträgt die Zeitkomplexität $O(n^2)$. Das lässt sich experimentell bestätigen.
|
Somit ist die Zeitkomplexität $O(n^m)$. Normiert dargestellt beträgt die Zeitkomplexität $O(n^2)$. Das lässt sich experimentell bestätigen.
|
||||||
|
|
||||||
@ -306,12 +307,12 @@ Somit ist die Zeitkomplexität $O(n^m)$. Normiert dargestellt beträgt die Zeitk
|
|||||||
|
|
||||||
|
|
||||||
Auf Optgroup-HTML-Tags wurde bewusst verzichtetet.
|
Auf Optgroup-HTML-Tags wurde bewusst verzichtetet.
|
||||||
Grund dafür ist, dass Optgroup-Titel an sich nicht als Option auswählbar sind.
|
Grund dafür ist, dass Optgroup-Elemente an sich nicht im Dropdown auswählbar sind.
|
||||||
Das stellt ein Problem dar, da beispielsweise die Kategorie \enquote{Riesling},
|
Das stellt ein Problem dar, da beispielsweise die Kategorie \enquote{Riesling},
|
||||||
die die Unterkategorien \enquote{Trockener Riesling} und \enquote{Halbtrockener Riesling} beinhalten könnte,
|
die die Unterkategorien \enquote{Trockener Riesling} und \enquote{Halbtrockener Riesling} beinhalten könnte,
|
||||||
auch direkt auswählbar sein sollte. Zudem besitzen Kategorie-Elemente kein Attribut das auf die Präsenz
|
auch direkt auswählbar sein sollte. Zudem besitzen Kategorie-Elemente kein Attribut das auf die Präsenz
|
||||||
von Unterkategorien hindeutet \cite{bib:typo3-docs-sys-category}, womit eine Unterscheidung zwischen
|
von Unterkategorien hindeutet \cite{bib:typo3-docs-sys-category}, womit eine Unterscheidung zwischen
|
||||||
Baumblättern und -Zweigen nicht ohne weiteres möglich ist. Diese Entscheidung wäre jedoch
|
Baumblättern und -Zweigen nicht ohne weiteres möglich wäre. Diese Entscheidung wäre jedoch
|
||||||
benötigt, um zwischen einem Optgroup-Tag und einem Option-Tag abzuwägen.
|
benötigt, um zwischen einem Optgroup-Tag und einem Option-Tag abzuwägen.
|
||||||
|
|
||||||
\paragraph*{SelectMultiple} sind Formfelder, die dem Nutzer eine Auswahl aus $n$ Elementen aus einer anderen
|
\paragraph*{SelectMultiple} sind Formfelder, die dem Nutzer eine Auswahl aus $n$ Elementen aus einer anderen
|
||||||
@ -368,7 +369,7 @@ das an \enquote{mpdf} gereicht wird. Um die Gestaltung und die Präsentation von
|
|||||||
kontinuierlich mit dem restlichen Projekt zu halten und um eine gute Wartbarkeit zu gewährleisten,
|
kontinuierlich mit dem restlichen Projekt zu halten und um eine gute Wartbarkeit zu gewährleisten,
|
||||||
wird diese HTML-Zeichenfolge mit TYPO3-Fluid getemplated. Das heißt, dass eine HTML-Templatedatei bereitgestellt wird,
|
wird diese HTML-Zeichenfolge mit TYPO3-Fluid getemplated. Das heißt, dass eine HTML-Templatedatei bereitgestellt wird,
|
||||||
diese mit TYPO3-Fluid befüllt wird und in PHP gerendert wird, um eine HTML-Zeichenkette als Ergebnis zu erhalten.
|
diese mit TYPO3-Fluid befüllt wird und in PHP gerendert wird, um eine HTML-Zeichenkette als Ergebnis zu erhalten.
|
||||||
Hierfür wird ein TYPO3-StandaloneView instanziiert, mit einem Pfad zur Template-Datei ausgestattet, Variablen angegeben,
|
Hierfür wird ein TYPO3-StandaloneView des instanziiert, mit einem Pfad zur Template-Datei ausgestattet, Variablen angegeben,
|
||||||
die in Fluid verfügbar sein sollen und anschließend über die \enquote{render}-Methode zu einem String gerendert
|
die in Fluid verfügbar sein sollen und anschließend über die \enquote{render}-Methode zu einem String gerendert
|
||||||
\cite{bib:typo3-ref-standalone-view}.
|
\cite{bib:typo3-ref-standalone-view}.
|
||||||
Anschließend wird ein \enquote{mpdf}-Objekt erstellt und mit einer rudimentären Konfiguration in Form eines Arrays im Konstruktor
|
Anschließend wird ein \enquote{mpdf}-Objekt erstellt und mit einer rudimentären Konfiguration in Form eines Arrays im Konstruktor
|
||||||
@ -379,3 +380,45 @@ Um dieses PDF-Dokument über die Verbindung an den Nutzer zu übertragen, wird e
|
|||||||
Über dieses Response-Objekt werden einige Header gesetzt und direkt übertragen. Dieser Header sind Content-Type und Content-Length.
|
Über dieses Response-Objekt werden einige Header gesetzt und direkt übertragen. Dieser Header sind Content-Type und Content-Length.
|
||||||
Abschließend werden als Response-Body die Bytes des generierten PDFs abgeschickt. Damit ist die Verbindung beendet und das
|
Abschließend werden als Response-Body die Bytes des generierten PDFs abgeschickt. Damit ist die Verbindung beendet und das
|
||||||
PDF zum Nutzer übertragen.
|
PDF zum Nutzer übertragen.
|
||||||
|
|
||||||
|
\subsection{Schnittstelle QR-Code-Scanner}
|
||||||
|
Es ist angedacht, dass Mitarbeiter über die App \enquote{QRBot} den QR-Code auf dem Einlieferungsschein einscannen.
|
||||||
|
Diese App ermöglicht es Nutzern für jeden eingescannten Code eine URL zu öffnen und den Wert des QR-Codes anstelle eines Platzhalters
|
||||||
|
in der URL einzufügen.
|
||||||
|
Hierfür bietet das Jahresauswahlprobenwerkzeug eine Schnittstelle bzw. eine Seite an, die eine Wein-\ac{UID} als
|
||||||
|
URL-kodierten GET-Parameter annimmt und diesen Wein als \enquote{eingegangen} markiert.
|
||||||
|
Um sicherzustellen, dass Weine nicht unautorisiert markiert werden, müssen sich Mitarbeiter mit einem Nutzerkonto
|
||||||
|
authentifizieren. Dieses Nutzerkonto muss Teil einer Mitarbeiter-Nutzergruppe sein.
|
||||||
|
Das Nutzerkonto wird von Redakteuren oder Administratoren im TYPO3-Backend erstellt und benötigt keiner Registrierung.
|
||||||
|
Nach einer Anmeldung bleibt diese Sitzung aktiv und verfällt erst nach längerer Inaktivität.
|
||||||
|
Wird ein Wein als \enquote{eingegangen} markiert, wird der betroffene Teilnehmer per Email informiert.
|
||||||
|
Hierzu wird die FluidEmail-Klasse des TYPO3-Cores herangezogen.
|
||||||
|
Sollte ein Wein bereits als \enquote{eingegangen} markiert sein, wird keine Email verschickt und dem Mitarbeiter wird kommuniziert,
|
||||||
|
dass keine Änderungen vorgenommen wurden.
|
||||||
|
Abschließend werden im Frontend allgemeine Daten über den Wein angezeigt, damit Mitarbeiter sich sicher sein können,
|
||||||
|
den richtigen Wein eingescanned zu haben.
|
||||||
|
|
||||||
|
\subsection{Jahresauswahlproben- und Wein-Detailansichten}
|
||||||
|
Weine und Jahresauswahlproben sollen unter bestimmten Gegebenheiten einsichtig sein.
|
||||||
|
Hierzu gibt es eine Auflistung aller Jahresauswahlproben. Diese sind anklickbar, um eine Detailansicht der ausgewählten
|
||||||
|
Jahresauswahlprobe zu öffnen. Hier wird neben Metadaten der Jahresauswahlprobe eine Liste aller zur Einsicht berechtiger Weine
|
||||||
|
angezeigt. Diese Weine sind anklickbar, um auf eine Detailansicht der Weine zu gelangen.
|
||||||
|
Die Detailansichten für Jahresauswahlproben und Weine benötigen spezieller Autorisierung.
|
||||||
|
Diese sind: Jahresauswahlproben sind nur einsichtig, wenn sich das aktuelle Datum innerhalb des
|
||||||
|
Sichtbarkeitszeitraumes der Jahresauswahlprobe befindet.
|
||||||
|
Detailansichten für Weine sind immer für den zugehörigen Teilnehmer einsichtig.
|
||||||
|
Nach Abschluss einer Jahresauswahlprobe sind alle ihr angehörigen Weine öffentlich einsichtig.
|
||||||
|
Das hat den Hintergrund, dass Jahresauswahlproben Blindverkostungen sind
|
||||||
|
und niemand die Möglichkeit haben sollte, im Voraus Informationen über die teilnehmenden Weine in Erfahrung zu bringen.
|
||||||
|
Die Ergebnisse der Jahresauswahlproben sind öffentlich, also sind es die Weine nach Abschluss einer \ac{JAP} auch.
|
||||||
|
Mitarbeiter von Weinland Mosel, wenn mit einem solchen Account angemeldet, haben immer Einsicht in Wein-Detailansichten.
|
||||||
|
Die Wein-Detailseite verfügt außerdem über einen \enquote{Versandetikett drucken}-Button, der auf das Versand-PDF verlinkt.
|
||||||
|
Dieser Button ist nur für den zugehörigen Teilnehmer und Mitarbeiter verfügbar.
|
||||||
|
Diese Daten, Fakten und Restriktionen werden serverseitig kontrolliert, um Manipulationen des Nutzers auszuschließen.
|
||||||
|
Um das zu realisieren werden Daten mit Fluid-Templates konditionell dargestellt und über Fluid-ViewHelper Links
|
||||||
|
zu anderen Ansichten generiert. Diese ViewHelper übergeben Parameter. Die hierfür relevanten Parameter der verschiedenen
|
||||||
|
Ansichten sind beispielsweise Wein-\acp{UID} und \ac{JAP}-\acp{UID}. Um Informationen über den angemeldeten Nutzer,
|
||||||
|
wie beispielsweise seiner Teilnehmernummer oder seiner Nutzergruppenzugehörigkeit, zu erlangen, wird sich
|
||||||
|
der Extbase-nativej Domain-Model-FrontendUser-Klasse bedient \cite{bib:typo3-ref-extbase-model-feuser}.
|
||||||
|
|
||||||
|
\subsection{CSV-Export}
|
||||||
|
@ -462,3 +462,11 @@
|
|||||||
year = {2023},
|
year = {2023},
|
||||||
note = {Zugriff: März 2023}
|
note = {Zugriff: März 2023}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@misc{bib:typo3-ref-extbase-model-feuser,
|
||||||
|
author = {{TYPO3 Contributors}},
|
||||||
|
howpublished = "\url{https://api.typo3.org/10.4/class_t_y_p_o3_1_1_c_m_s_1_1_extbase_1_1_domain_1_1_model_1_1_frontend_user.html}",
|
||||||
|
title = {{TYPO3\\CMS\\Extbase\\Domain\\Model\\FrontendUser Class Reference}},
|
||||||
|
year = {2023},
|
||||||
|
note = {Zugriff: März 2023}
|
||||||
|
}
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 298 KiB After Width: | Height: | Size: 312 KiB |
@ -156,6 +156,8 @@ class Jahresauswahlprobe #IMPLEMENTED_COLOR {
|
|||||||
-dateAllowRegistration_end: Date
|
-dateAllowRegistration_end: Date
|
||||||
-dateAllowShow_start: Date
|
-dateAllowShow_start: Date
|
||||||
-dateAllowShow_end: Date
|
-dateAllowShow_end: Date
|
||||||
|
-date_start: Date
|
||||||
|
-date_end: Date
|
||||||
+getAllowedCategories(): List<Category>
|
+getAllowedCategories(): List<Category>
|
||||||
+setAllowedCategories(allowedCategories: List<Category>): void
|
+setAllowedCategories(allowedCategories: List<Category>): void
|
||||||
+getName(): String
|
+getName(): String
|
||||||
@ -170,6 +172,10 @@ class Jahresauswahlprobe #IMPLEMENTED_COLOR {
|
|||||||
+setDateAllowShowStart(dateAllowShowStart: Date): void
|
+setDateAllowShowStart(dateAllowShowStart: Date): void
|
||||||
+getDateAllowShowEnd(): Date
|
+getDateAllowShowEnd(): Date
|
||||||
+setDateAllowShowEnd(dateAllowShowEnd: Date): void
|
+setDateAllowShowEnd(dateAllowShowEnd: Date): void
|
||||||
|
+getDateStart(): Date
|
||||||
|
+setDateStart(dateStart: Date): void
|
||||||
|
+getDateEnd(): Date
|
||||||
|
+setDateEnd(dateEnd: Date): void
|
||||||
+getUid(): Int
|
+getUid(): Int
|
||||||
+setUid(uid: Int): void
|
+setUid(uid: Int): void
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user