diff --git a/chapters/anforderungserfassung.tex b/chapters/anforderungserfassung.tex index 1af50c7..b1e91b7 100644 --- a/chapters/anforderungserfassung.tex +++ b/chapters/anforderungserfassung.tex @@ -56,9 +56,11 @@ keine Suggestivfragen zu stellen \section{Online-Fragebögen für Stakeholder} Um Fragebögen für Stakeholder formulieren zu können, muss zunächst bekannt sein, wer die Stakeholder sind. \quotecite{Ein Stakeholder eines Systems ist eine Person oder Organisation, welche (direkt oder indirekt) -Einfluss auf die Anforderungen des betrachteten Systems hat.} \cite{bib:basiswissen-re}. +\break{}Einfluss auf die Anforderungen des betrachteten Systems hat.} +\break\cite{bib:basiswissen-re}. Daraus ergeben sich die Stakeholdergruppen: \enquote{Mitarbeiter \ac{WM}} und \enquote{teilnehmende Weingüter}. -Jede dieser Stakeholdergruppen sieht das System aus einer anderen Perspektive \cite{bib:kleine-re-fibel}. +Jede dieser Stakeholdergruppen sieht das System aus einer anderen Perspektive +\break\cite{bib:kleine-re-fibel}. Daher ist es wichtig, Einblicke und Bedürfnisse aller Stakeholdergruppen einzuholen und die individuellen Perspektiven und Bedürfnisse dieser beim Entwurf der Fragebögen zu berücksichtigen. Ebenso ist es wichtig, die wichtigsten Fragen am Anfang zu stellen, da Formulare nicht immer vollständig ausgefüllt werden @@ -82,11 +84,9 @@ die Probenteilnehmer übergeben. Aus dem Interview mit dem \ac{PO} ergibt sich ein Pflichtenheft. Das Pflichtenheft und das Protokoll zum Interview sind im Anhang unter je \fullref{chap:anhang-pflichtenheft} und \fullref{chap:anhang-interview-protokoll} zu finden. - Ergebnisse dieses Interviews sind zahlreiche Anforderungen und Ideen. Eine der wichtigsten Ideen stellt das projektbezogene, wöchentliche Statusmeeting dar: Jeden Donnerstag soll um 9:30 Uhr der aktuelle Stand des Projektes vorgestellt, diskutiert und Rücksprache gehalten werden. - Die wichtigsten Erkenntnisse des Interviews sind: \begin{description} \item[Endgerät für Scanning und Scanneranwendung]\hfill\\ diff --git a/chapters/einleitung.tex b/chapters/einleitung.tex index d117f1e..a10a78f 100644 --- a/chapters/einleitung.tex +++ b/chapters/einleitung.tex @@ -30,7 +30,7 @@ die anschließend in Form eines Aufklebers an der Flasche befestigt wird. Anschl \begin{nicepic} \includegraphics[width=1\textwidth]{images/geschäftsprozess-vorher.png} - \captionof{figure}{Geschäftsprozess Jahresauswahlprobe: vor der Digitalisierung} + \captionof{figure}{Geschäftsprozess Jahresauswahlprobe:\\vor der Digitalisierung} \caption*{Quelle: Eigene Darstellung} \label{fig:geschaeftsprozess-vorher} \end{nicepic} diff --git a/chapters/konzeption-entwicklung.tex b/chapters/konzeption-entwicklung.tex index 965173f..5d8b431 100644 --- a/chapters/konzeption-entwicklung.tex +++ b/chapters/konzeption-entwicklung.tex @@ -7,7 +7,7 @@ Es ist anzumerken, dass das aus \fullref{chap:anforderungserfassung} hervorgehen opportunistischer Gespräche mit dem \ac{PO} geringfügige Änderungen erfahren hat. \section{Setup einer TYPO3-Extension} -TYPO3-Extensions werden via Composer installiert \cite{bib:typo3-docs-managing-extensions}. +TYPO3-Extensions werden via Composer installiert \break\cite{bib:typo3-docs-managing-extensions}. Um eine TYPO3-Extension zu erstellen, muss also ein Composer-Paket erstellt werden. Um vermeidbare Komplexität zu verhindern, wird das Composer-Paket, welches die hier betrachtete TYPO3-Extension darstellt, lokal in den versionierten Ordner \enquote{packages} gelegt. @@ -23,8 +23,8 @@ Spezifisch ist der \enquote{vergleichbare Funktionsumfang}, dass es Datenmodelle Frontendlogik in Bezug auf die zuvor genannten Datenmodelle gibt. \section{Digitization} -Die Phase der Digitizion nach Verhoef et al. befasst sich mit der digitalen Abbildung von Objekten der realen Welt -in einer Art und Weise, sodass diese elektronisch weiterverarbeitet werden können\\\cite{bib:dougherty, bib:loebbecke}. +Die Phase der Digitizion nach Verhoef et al. befasst sich mit der digitalen Abbildung von Objekten aus der realen Welt +in einer Art und Weise, die ermöglicht, dass diese elektronisch weiterverarbeitet werden können\break\cite{bib:dougherty, bib:loebbecke}. Des Weiteren befasst sich diese Phase mit der Automatisierung und Befüllung dieser Daten, wie zum Beispiel Web-Formularen \cite{bib:verhoef}. Das bedeutet, dass in dieser Phase Datenobjekte definiert und implementiert werden. @@ -137,7 +137,9 @@ Accountregistrierungen werden über den Frontend-Nutzer-Login gelöst werden. Das ist explizit von \enquote{femanager} so angedacht: \quotecite{Note: Login and a I forgot my password function is part of the core and not part of femanager.} \cite{bib:typo3-docs-femanager}. -Im Folgenden wird der Registrierungsprozess im Detail beschrieben:\\ +Im Folgenden wird der Registrierungsprozess im Detail beschrieben: +\\ +\\ Grundlegend gibt es drei relevante Nutzerzustände vor der Registrierung: \begin{enumerate} \item Kein Mitglied @@ -158,7 +160,7 @@ Stammdatenformular konfrontiert. Dabei handelt es sich um Angaben zum teilnehmen Wird dieses Formular abgeschickt, ist die Teilnehmerregistrierung abgeschlossen. \subsubsection*{Mitglied, mit Konto} -Ist ein Nutzer ein \ac{WN}-Mitglied und hat bereits ein Mitgliedskonto, muss dieser auf der Registrierungsseite +Ist ein Nutzer ein \ac{WM}-Mitglied und hat bereits ein Mitgliedskonto, muss dieser auf der Registrierungsseite \enquote{Ich bin ein Mitglied} auswählen. An dieser Stelle navigiert der Browser zu einem Login-Formular. Hier kann sich das Mitglied anmelden. Tut es dies erfolgreich, erstellt der Controller einen neuen Teilnehmer-Eintrag für den Frontend-Nutzer und fügt den Frontend-Nutzer der Nutzergruppe \enquote{Teilnehmer} hinzu. @@ -184,14 +186,15 @@ realisiert. Anpassungen der versendeten Emails erfolgen durch Überschreiben der Email-Templates von Femanager. Weiterleitungen zu bestimmten Seiten, nachdem ein Nutzer spezielle Events ausgelöst hat, können über TypoScript konfiguriert werden \cite{bib:typo3-docs-femanager}. Logins werden über das TYPO3-Native Loginformular -gelöst. Im TYPO3-Loginformular können Weiterleitungen zu spezialisierten Seiten im Backend-UI festgelegt werden. -\cite{bib:typo3-docs-felogin}. +gelöst. Im TYPO3-Loginformular können Weiterleitungen zu spezialisierten Seiten im Backend-UI festgelegt werden +\break\cite{bib:typo3-docs-felogin}. Für alle funktionalen Belange wird ein TYPO3-Plugin registriert. Dieses Plugin verfügt über einen ActionController, der Nutzeranfragen an PHP-Funktionen (\enquote{Actions}) bindet. In diesen Actions werden Fehlerbehandlungen durchgeführt, Datenmodelle der Domäne erstellt und in der Datenbank persistiert, sowie Daten für die Anzeige im Frontend aufbereitet \cite{bib:typo3-docs-extbase}. -Neue Datenobjekte werden in Repositories registriert \cite{bib:typo3-docs-extdev-tut-tea-repositories}. Diese Repositories sind Aggregate des Controllers, +Neue Datenobjekte werden in Repository-Objekten registriert +\break\cite{bib:typo3-docs-extdev-tut-tea-repositories}. Diese Repositories sind Aggregate des Controllers, werden jedoch nach dem \enquote{Inversion of Control}-Prinzip via Dependency Injection instanziiert und der ActionController-Klasse über Methode übergeben \cite{bib:typo3-docs-di}. Als problematisch erweisen sich hierbei bidirektionale Verbindungen zwischen Datenmodellen, wenn die Foreign Keys @@ -256,7 +259,7 @@ Die Formfeldwerte können unverändert in der Datenbank persistiert werden. \paragraph*{SelectSingle} sind Formfelder, die dem Nutzer eine Auswahl aus $n$ Elementen aus anderen Datenbanktabellen geben. Der Nutzer muss sich für genau ein Element entscheiden. Beispiele für SelectSingle-Formfelder sind: Weinlage, Qualitätsstufe, Rebsorte und Geschmacksangabe. -SelectSingle-Formfelder werden durch Select-HTML-Tags abgebildet. Der TYPO3-Form-ViewHelper für +\break{}SelectSingle-Formfelder werden durch Select-HTML-Tags abgebildet. Der TYPO3-Form-ViewHelper für \enquote{Select} akzeptiert eine Liste an Auswahlmöglichkeiten und erstellt selbstständig Option-HTML-Tags für diese. Die Formfeldwerte von SelectSingle-Formfeldern sind die @@ -269,7 +272,8 @@ Somit sind diese nicht mehr sichtbar. \\ \\ Eine komplexe Ausnahme stellt das SelectSingle-Formfeld \enquote{Category} dar, da TYPO3-Kategorien -Baumstrukturen sind \cite{bib:typo3-docs-sys-category}. +als Baumstrukturen abgebildet werden +\break\cite{bib:typo3-docs-sys-category}. Um die Eltern-Kind-Beziehung der Baumstruktur erstichtlich zu machen, werden die Option-HTML-Tags einzeln rekursiv gerendert. Zunächst werden sämtliche Kategorien, deren \ac{PID} 0 ist, dargestellt. Diese Elemente sind direkte Kinder des unsichtbaren Wurzelelementes. Für jede dieser Kategorien $a$ wird nun ein Fluid-Partial aufgerufen, @@ -302,7 +306,7 @@ Somit ist die Zeitkomplexität $O(n^m)$. Normiert dargestellt beträgt die Zeitk \caption*{Quelle: Eigene Darstellung} \label{fig:timecomplexity-category} \end{nicepic} - +\clearpage Auf Optgroup-HTML-Tags wurde bewusst verzichtetet. Grund dafür ist, dass Optgroup-Elemente an sich nicht im Dropdown auswählbar sind. @@ -313,10 +317,11 @@ von Unterkategorien hindeutet \cite{bib:typo3-docs-sys-category}, womit eine Unt 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. -\paragraph*{SelectMultiple} sind Formfelder, die dem Nutzer eine Auswahl aus $n$ Elementen aus einer anderen -Datenbanktabelle geben. Der Nutzer kann sich für eine beliebige Anzahl dieser, eingeschlossen null, entscheiden. -Ein Beispiel für SelectMultiple-Formfelder ist: Weineigenschaften. -TYPO3-Fluid implementiert hierfür keinen ViewHelper \cite{bib:typo3-docs-fluid-form-viewhelpers}, +\paragraph*{SelectMultiple} sind Formfelder, die dem Nutzer eine Auswahl aus $n$ verschiedenen Elementen aus einer anderen +Datenbanktabelle geben. Der Nutzer kann sich für eine beliebige Auswahl dieser, eingeschlossen keine, entscheiden. +Ein Beispiel für SelectMultiple-Formfelder sind Weineigenschaften. +TYPO3-Fluid implementiert hierfür keinen ViewHelper +\break\cite{bib:typo3-docs-fluid-form-viewhelpers}, also wurde eine eigene Lösung entworfen: Der Nutzer soll aus einer Menge $A$ wählen. Für alle Elemente $a \in A$ wird ein Checkbox-Feld erstellt. Dieses Element trägt den Anzeigewert \enquote{} und den @@ -338,11 +343,11 @@ entfernt. Somit wird beispielsweise die Formfeld-ID \enquote{winekind-18} zu \en wodurch die tatsächlichen Objekte aus der Datenbank angefragt werden können. \subsection{PDF- und QR-Code-Generierung} -Das dynamische Erstellen und Ausgeben des Versandbeilageblattes als PDF ist ein essenzieller Bestandteil des +Das dynamische Erstellen und Ausgeben des Datenblattes als PDF ist ein essenzieller Bestandteil des Jahresauswahlprobenwerkzeuges, da dieses PDF die Schnittstelle zwischen ankommenden Weinen und dem System darstellt. -Daher ist der Gewinn, der durch dieses Werkzeug generiert wird, ohne dieses PDF stark eingeschränkt, da +Daher ist der Gewinn, der durch dieses Werkzeug generiert wird, ohne dieses Dokument stark eingeschränkt, da einkommende Weine händisch, von Mitarbeitern, zugeordnet werden müssten. -Wie im \fullref{chap:stand-der-forschung} erläutert, werden für die dynamische +Wie im \fullref{chap:stand-der-forschung} erläutert wird, werden für die dynamische Generierung dieses PDFs die Bibliotheken \enquote{chillerlan/php-qrcode} und \enquote{mpdf/mpdf} herangezogen und über Composer installiert. @@ -354,7 +359,7 @@ Es ist Aufgabe der QR-Code-App, die den Code einscannt, aus der Wein-\ac{UID} ei Um Resourcen zu sparen und somit den Gewinn zu erhöhen, wird der QR-Code zu einem Base64-kodiertem Bild gerendert. Das ist der Standardrückgabewert des QR-Code-Generators und erfordert somit keine nähere Konfiguration. Ebenfalls lässt sich ein Base64-kodiertes Bild als Quell-URL eines -IMG-HTML-Tags angeben, womit das Bild eingebettet ist. Hier wird der Gewinn erhöht, indem Arbeitszeit gespart wird, +IMG-HTML-Tags angeben, womit das Bild eingebettet ist. Das spart Arbeitszeit, die sonst in das anderweitige Einbetten eines Bildes in einem PDF mit \enquote{mpdf} fließen müsste. Die QR-Codegenerierung funktioniert konkret, indem ein neues QRCode-Objekt der QRCode-Klasse erstellt wird. Diese Klasse nimmt ein QROptions-Objekt im Konstruktor, das in diesem Falle einige Stilattribute mit sich trägt. diff --git a/chapters/stand-der-forschung.tex b/chapters/stand-der-forschung.tex index 82470c6..521cd8b 100644 --- a/chapters/stand-der-forschung.tex +++ b/chapters/stand-der-forschung.tex @@ -66,8 +66,8 @@ Nach Verhoef et al. lässt sich der hier sogenannte \enquote{Prozess der Digital Diese drei Phasen sind \textit{Digitization}, \textit{Digitalization} und \textit{Digital Transformation} \cite{bib:verhoef}. Die Phase \textit{Digitization} befasst sich mit der Umwandlung analoger Datenstrukturen und Modellen in digitale Datenmodelle, -sodass diese digital, in Form von Nullen und Einsen, gespeichert und elektronisch weiterverarbeitet werden können -\cite{bib:dougherty, bib:loebbecke}. +sodass diese digital, in Form von Nullen und Einsen, gespeichert und elektronisch\break weiterverarbeitet werden können +\cite{bib:dougherty}\break\cite{bib:loebbecke}. \textit{Digitalization} beschreibt den Prozess der Veränderung bestehender Geschäftsprozesse, um mit digitalen Werkzeugen und Datenmodellen zu arbeiten \cite{bib:fengli}. Die letzte Phase, die \textit{Digitale Transformation}, beschreibt eine firmenweite Veränderung, die beispielsweise diff --git a/chapters/stand-der-technik.tex b/chapters/stand-der-technik.tex index 3bad231..e3f8612 100644 --- a/chapters/stand-der-technik.tex +++ b/chapters/stand-der-technik.tex @@ -6,13 +6,15 @@ Bibliotheken zur Erzeugung von QR-Codes und Bibliotheken zur Erzeugung von PDF-D \section{Die bestehende Webseite} Als Mitentwickler des Projektes ist dem Autor bekannt, dass die bestehende Webseite ein TYPO3-Redaktionssystem ist. Das Frontend der Webseite wird mit Webpack und Sass übersetzt. -Webpack ist ein Modulbundler \cite{bib:smashmagazine-webpack} und Sass ein CSS-Präprozessor \cite{bib:w3schools-sass}. -TYPO3 ist ein Redaktionssystem und PHP-Rahmenwerk, das Daten- und Inhaltspflege in einem geschützten Bereich +Webpack ist ein Modulbundler \cite{bib:smashmagazine-webpack} und Sass ein CSS-Präprozessor. +\break\cite{bib:w3schools-sass}. +TYPO3 ist ein Redaktionssystem und PHP-Rahmen\-werk, das Daten- und Inhaltspflege in einem geschützten Bereich ermöglicht. Außerdem werden Frontend-, Backend-Nutzer und Berechtigungen gesteuert \cite{bib:typo3-docs-getting-started}. Über die Systemerweiterung \enquote{Extbase} wird eine mächtige Entwicklerschnittstelle bereitstellt, -um hochindividualisierte Funktionalitäten zu ermöglichen \cite{bib:typo3-docs-extbase-reference}. +um hochindividualisierte Funktionalitäten zu ermöglichen. +\\\cite{bib:typo3-docs-extbase-reference} \section{QR-Code-Bibliotheken} Um mit QR-Codes zu arbeiten, ist es unabdinglich, QR-Codes zu erstellen, da dieselben sonst nicht vorhanden sind. @@ -60,7 +62,8 @@ dem Java-Projekt \enquote{ZXing} und übersetzte diese zu PHP. Es gibt zu diesem Zeitpunkt keine unbeantworteten Issues oder Pull-Requests. \textit{Chillerlan/php-qrcode} basiert auf einer angepassten Version von \textit{kazuhikoarase/qrcode-generator}. Einzig auffällig sind die Commitnachrichten, die zuteils nur aus einem (1) Emoji bestehen. -\textit{Chillerlan/php-qrcode} wurde von 1212 Github-Nutzern mit einem Stern markiert. Die Bibliothek ist MIT-lizensiert +\textit{Chillerlan/php-qrcode} wurde von 1212 Github-Nutzern mit einem Stern markiert. +Die Bibliothek ist MIT-\break{}lizensiert \cite{bib:chillerlan-php-qrcode}. \subsubsection*{Kreativekorp/barcode} @@ -174,9 +177,9 @@ Rochko stellt eine ausführliche Dokumentation und Codebeispiele bereit. Hierfür wird die volle Punktzahl in \enquote{Gepflegtheit} vergeben. Der Funktionsumfang übersteigt weit die Anforderungen und gestattet so ausführlich gestaltete QR-Codes \cite{bib:chillerlan-php-qrcode-demo}, -die somit ebenso die hedonische Qualität fördern \cite{bib:koenig-vorlesung-ux}. +die somit die hedonische Qualität fördern \cite{bib:koenig-vorlesung-ux}. Bewertet wird das mit einer vollen Punktzahl in \enquote{Funktionalität}. -Chillerlan/php-qrcode lässt sich nahtlos in das existierende Projekt eingliedern, +\break Chillerlan/php-qrcode lässt sich nahtlos in das existierende Projekt eingliedern, da es als PHP-Bibliothek über Composer eingebunden werden kann und eine eigene API bereitstellt \cite{bib:chillerlan-php-qrcode}. Die von Rochko verwendete Lizenz gestattet eine unkomplizierte Verwendung. Chillerlan/php-qrcode funktioniert sowohl mit PHP $7.x$ als auch $8.x$. Die Bibliothek benötigt zwei weitere Abhängigkeiten. Eine dieser Abhängigkeiten ist ebenfalls von Rochko @@ -242,7 +245,7 @@ Dadurch werden drei Punkte einer vollkommenen Workflow-Eignung abgezogen, wodurc \subsection{Fazit} Nach Evaluation der verschiedenen QR-Code-Bibliotheken im Kontext der vorliegenden Problemstellung erweist sich aus Sicht des Autors -\textit{chillerlan/php-qrcode} mit 30 Gesamtpunkten als die am besten geeignetste Bibliothek. +\break\textit{chillerlan/php-qrcode} mit 30 Gesamtpunkten als die am besten geeignetste Bibliothek. Somit wird \textit{chillerlan/php-qrcode} als QR-Code Technologie in der Lösung dieser Problemstellung verwendet. \begin{table}[htbp] diff --git a/config.tex b/config.tex index 946cfd3..06d0109 100644 --- a/config.tex +++ b/config.tex @@ -10,7 +10,7 @@ \newcommand{\cfgDocClassification}{Abschlussarbeit} % Document version -\newcommand{\cfgDocVersion}{1.9} +\newcommand{\cfgDocVersion}{2.0} % Last modification date \newcommand{\cfgDateLastModification}{30. März 2023} diff --git a/main.pdf b/main.pdf index e0a988f..7e29c90 100644 Binary files a/main.pdf and b/main.pdf differ