{"id":18574707,"url":"https://github.com/maxritter/tafel-software","last_synced_at":"2025-05-16T00:11:37.613Z","repository":{"id":149101330,"uuid":"607612432","full_name":"maxritter/tafel-software","owner":"maxritter","description":"Tafel-Software für den Landkreis Fürstenfeldbruck","archived":false,"fork":false,"pushed_at":"2023-12-02T09:25:33.000Z","size":1496,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-12-26T15:11:43.021Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maxritter.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-28T10:26:53.000Z","updated_at":"2023-11-24T17:34:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"70db912d-0195-4612-887a-98a7daad9d20","html_url":"https://github.com/maxritter/tafel-software","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxritter%2Ftafel-software","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxritter%2Ftafel-software/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxritter%2Ftafel-software/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxritter%2Ftafel-software/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maxritter","download_url":"https://codeload.github.com/maxritter/tafel-software/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239311403,"owners_count":19618011,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T23:16:08.297Z","updated_at":"2025-02-17T14:45:22.689Z","avatar_url":"https://github.com/maxritter.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tafel-Software\nTafel-Software für den Landkreis Fürstenfeldbruck zur Verwaltung der Kunden und zum Scannen der Ausweise\n\n## Einführung\n\nDiese Anwendung ist als Web-Anwendung geschrieben. Die Oberfläche ist in **HTML5** und **JavaScript** geschrieben und läuft in einem Browser (Firefox, Chromium, Safari, Microsoft Edge). Der Internet Explorer wird nicht unterstützt. Der Web Server ist in **JavaScript** geschrieben und läuft unter **Node.js**. Er nutzt das **Express Framework**. Damit ist die Anwendung mehrbenutzerfähig und sie läuft auf unterschiedlichen Plattformen.\n\nZur Ausführung wird die neueste Version von Node.js benötigt, welche [hier](https://nodejs.org/de/download/) heruntergeladen werden kann. Im Anschluss müssen die Pakete installiert werden, dies geschieht über die Kommandozeile mit dem Befehl:\n\n```\nnpm i\n```\n\nAnschließend kann das Programm wie folgt gestartet werden, und ist anschließend im Browser unter `localhost:8080` verfügbar:\n\n```\nnpm run start\n```\n\nDer Start ist weiterhin über die Datei `start.bat` möglich. Hierbei wird das Programm gestartet und direkt der Browser geöffnet. Zum einfachen Start kann von dieser Datei eine Verknüpfung auf den Desktop angelegt werden.\n\nDas Programm liest die Daten zu den Kunden aus einer Datei im JSON Format. Nach dem Start wird der Dateiname angezeigt und über den Button \"Einlesen\" wird das Lesen gestartet. Nach dem Lesen wird durch den Button \"Scannen starten\" die Seite zum Einstellen der Prüfungen geöffnet. Diese wird automatisch geöffnet, wenn das automatische Lesen beim Start konfiguriert ist oder wenn die Datei bereits eingelesen wurde.\n\nEine vollständige Bedienungsanleitung findet sich unter `docs/Bedienungsanleitung.pdf`.\n\n## Die Konfigurationsdatei\n\nDie Konfigurationsdatei hat den Namen **config.json** und befindet sich unter `conf/config.json`. Sie kann mit jedem Editor bearbeitet werden. Empfehlenswert ist aber die Verwendung eines JSON-Editors wie z.B. https://jsoneditoronline.org/. Definiert werden können die folgenden Parameter:\n\n- **port**: Ist der HTTP Port auf dem der Server wartet. Default ist 80, bei anderen Werten ist der Wert in der URL anzugeben (z.B. http://localhost:8080/ statt nur http://localhost/)\n\n- **datei**: Definiert die zu lesende Kunden-Datei\n\n- **automatischlesen**: Die Kunden-Datei wird beim Start automatisch gelesen, wenn dieser Parameter auf **true** gesetzt wird.\n\n- **log**: Definiert die Datei, in der die Besuche protokolliert werden, und die Spalten die in das Protokoll aufgenommen werden.\n\n- **stop**: Wenn auf **show** gesetzt, dann ist der Stop der Anwendung von der Startseite möglich.\n\n- **dateiHeader**: Definiert die Spaltenüberschriften für die Ansicht \"Datei\". Wenn nicht angegeben, dann werden die Namen der Spalten verwendet.\n\n- **spalten**: Definiert die Feldnamen und ihre Position in der Kundendatei.\n\n- **sortieren**: Definiert Felder, die beim Speichern sortiert werden sollen. Anzugeben ist der Anfang der zu sortierenden Feldnamen (z.B. \"Kind \" damit die Spalten Kind 1 bis Kind 6 sortiert werden). Dabei werden leere Felder nach unten sortiert.\n\n- **check**: Definiert die Prüfungen, die beim Scannen durchgeführt werden sollen. Zu definieren sind die Namen der Spalten und die möglichen Werte.\n\n- **werte**: Definiert die Namen von Spalten und die möglichen Werte.\n\n- **neukunde**: Definiert die Werte, mit denen die Felder in der Erfassung vorbelegt werden sollen.\n\n- **id**: Definiert den Aufbau der ID, die bei der Neuerfassung eines Kunden vom System vorgeschlagen wird.\n\n  Der Default für den Aufbau der ID ist jjmmtt nn 0. Dabei ist jjmmtt das Tagesdatum, nn ist eine laufende Nummer von 01 bis 99 für den Tag und 0 ist die Unternummer. Diese kann z.B. manuell hochgezählt werden, wenn für den Kunden ein neuer Ausweis gedruckt werden muss.\n\n- **tafel**: Namen der Tafel für die Ausweise. Die Zeilen sind durch \\n zu trennen.\n\n- **kuerzel**: Definiert den Kurznamen der Tafel für die Jahresstatistik. Wenn dieser Werte nicht definiert ist, dann wird keine Jahresstatistik erstellt.\n\n- **logo**: Name der Bilddatei mit dem Logo der Tafel (ca. 1000x300 Bildpunkte).\n\n- **color**: Definiert für jede Farbe den Namen im HTML/CSS (z.B. \"blau\": \"blue\"). Diese Definition legt die beim Ausweisdruck verwendeten Farben fest.\n\n- **CSVSeparator**: Definiert den Trenner für CSV-Dateien. Üblich sind Komma (,) Semikolon (;) oder Tab (\\n).\n\n## Die Kunden-Datei\n\nDer Dateiname der aktiven Kunden-Datei wird in der Konfigurationsdatei unter `datei` spezifiziert, zum Beispiel `conf/tafelmaisach.json`. Die JSON Datei enthält die Kundendaten getrennt nach aktiven und inaktiven Kunden. Die folgenden Informationen sind immer vorzusehen:\n\n- **ID**: Eine eindeutige ID. Diese wird zum Scannen benötigt und ist der eindeutige Schlüssel in der Kunden-Datei.\n- **Name**: Der Name des Kunden (Nachname gefolgt von den Vornamen)\n- **Adresse**: Adresse (Straße, Hausnummer, Postleitzahl und Ort)\n- **Erwachsene**: Anzahl der versorgten Erwachsenen\n- **Kinder**: Anzahl der versorgten Kinden\n- **A/B/C**: Die zugeteilte Gruppe\n- **Farbe**: Die zugeteilte Farbe\n- **Gültig bis**: Datum, bis zu dem der Ausweis gültig ist\n- Letzter Besuch: Datum, an dem der Kunde die Tafel zuletzt besucht hat\n\nDie folgenden Informationen sind empfohlen technisch aber nicht erforderlich:\n\n- **Kind 1 ... 6**: Geburtsjahre und Geschlecht der Kinder\n- **Anmerkung**: Beliebige Anmerkungen zum Kunden\n\nWeitere Werte können beliebig über die Konfigurationsdatei konfiguriert werden.\n\n## Das Scannen von Ausweisen\n\nNach dem Starten des Programmes wird der Browser automatisch geöffnet und es wird die Seite zum Einstellen der Auswahlkriterien/Prüfungen angezeigt. Darunter werden die Kunden angezeigt, die der Auswahl entsprechen und deren Besuch erwartet wird. Durch klicken auf einen Namen werden die Details zum Kunden angezeigt.\n\nAus dem Dialog mit den Auswahlkriterien kann über den Button **Scannen** das Scannen der Kunden-Ausweise gestartet werden. Wenn die gescante **ID** vorhanden ist, dann werden beim Scannen die Details zum Kunden angezeigt. Unter den Details werden Warnungen angezeigt, z.B. dass der Ausweis des Kunden nicht mehr gültig ist. Auf der Detailseite wird dann der Besuch des Kunden vermerkt.\n\nWenn der Kunde noch nicht registriert ist, dann kann er über den Button **Neuer Kunde** sofort erfasst werden. Nach der Erfassung der Kundendaten wird die Detailseite zum Vermerk des Besuches geöffnet.\n\n## Suchen von Kunden\n\nDas Suchen erfolgt immer in der aktiven Kunden-Datei. Die inaktive Kunden-Datei enthält die gelöschten Kunden.\n\nAlternativ kann aus dem Dialog mit den Auswahlkriterien über den Button **Suchen** die Kundesuche gestartet werden. Ein Kunde kann über die **ID** oder über den Anfangsbuchstaben seines Namen in der Spalte **Name** gesucht werden.\n\nWeiterhin können die Kunden angezeigt werden, die die Tafel heute schon besucht haben. Neben den IDs werden Statistik-Informationen angezeigt. Wenn am aktuellen Tag noch keine Besucher registriert wurden, dann werden Statistik-Informationen zum letzten Öffnungstag angezeigt.\n\nÜber die Buttons **Inaktive Kunden** können die gelöschten Kunden bearbeitet werden und über **Neuer Kunde** kann ein Kunde neu angelegt werden.\n\n## Beenden des Programms\n\nAm Ende des Tages kann der WebServer über den Button **Programm beenden..** beendet werden. Alternativ kann das Fenster für den WebServer einfach gschlossen werden.\n\nBeim Beenden des WebServers wird die Statistikdatei geschrieben (siehe unten).\n\n## Anzeige von IDs und Namen in Listen\n\nWenn Namen angezeigt werden, dann wird beim Positionieren des Mauszeigers über den Namen die dazugehörige ID angezeigt.\n\nDie Einträge in den Listen sind farbig markiert:\n\n- **rot**: Die Berechtigung ist abgelaufen\n- **grün**: Der Kunde hat die Tafel heute bereits besucht\n- **blau**: Kunde ist berechtigt und hat die Tafel heute noch nicht besucht\n\n## Erfassen eines neuen Kunden\n\nDie Felder im ersten Block sind Pflichtfelder, sie sind in jedem Fall zu erfassen. Im leeren Eingabefeld wird vor der Eingabe das erwartete Format angezeigt. Das Format wird allerdings beim Speichern nicht geprüft.\n\nIn der Auswahlliste für die Gruppe und die Farbe kann über den Button \"Verteilung der Farben ein-/ausblenden\" ein Pop-Up geöffnet werden. Dieses Pop-Up zeigt die Anzahl der Kunden pro Gruppe und Farbe an.\n\n## Prüfungen beim Scannen\n\nGenerell wird der Inhalt der Spalte **Gültig bis** gegen das aktuelle Datum geprüft. Es wird eine Warnung angezeigt, wenn der Ausweis in den nächsten 3 Wochen abläuft oder aber bereits abgelaufen ist.\n\nDie Prüfungen können frei konfiguriert werden (siehe die Konfigurationsdatei **config.json**).\n\n## Anzeige der Details zu einem Kunden\n\nAngezeigt werden alle Informationen, die zum Kunden erfasst wurden. Weiterhin werden die Resultate der konfigurierten Prüfungen eingeblendet.\n\nÜber den Button **Besuch vermerken** wird das Datum des letzten Besuches auf den aktuellen Tag gesetzt und die Detailanzeige wird geschlossen.\n\nWeiterhin kann der Ausweis verlängert werden, die Kundendaten können geändert werden und der Ausweis kann gelöscht werden. Gelöschte Ausweise können über den Button **Inaktive Kunden** angezeigt werden. Sie können dort endgültig gelöscht werden oder geändert und damit reaktiviert werden.\n\nAlle Änderungen werden sofort in die Kunden-Datei geschrieben.\n\n## Ausweise Drucken\n\nZur Auswahl der zu druckenden Ausweise zeigt der Dialog die IDs oder Namen an. Durch Klick auf einen Namen oder eine ID wird jeweils ein Ausweise erstellt und angezeigt. Durch Klick auf den Button \"Alle drucken\" wird für alle ein Ausweis erstellt und angezeigt.\n\nPer Doppelklick auf den Ausweis kann der Ausweis wieder entfernt werden.\n\nDie Ausweise sind 88 mm breit und 58 mm hoch. Es passen somit 2 mal 4 Ausweise auf ein DIN A4 Blatt. In der Druckvorschau (sofern vorhanden) sind schmale Ränder und eine Skalierung von 100% einzustellen.\n\n## Die Statistikdatei\n\nDie Statistikdaten werden beim Beenden des Servers in eine Datei mit dem Namen\n\n```\njjjj-mm-dd-statistik.csv\n```\n\ngeschrieben. Dabei ist jjjj-mm-dd das Datum des letzten Öffnungstages. Sie enthalten eine Zeile mit folgenden Werten:\n\n- Datum im Format jjjj-mm-dd\n- Anzahl der berechtigten Kunden\n- Anzahl der berechtigten Erwachsenen\n- Anzahl der berechtigten Kinder\n- Anzahl der Besucher am Öffnungstag\n- Anzahl der versorgten Erwachsenen\n- Anzahl der versorgten Kinder\n\nDie Statistikdateien werden zur Erstellung der Jahresstatistik herangezogen.\n\n## Die Jahresstatistik\n\nBeim Beenden liest der Server alle vorhandenen Statistikdateien vom aktuellen Jahr und fasst die Werte in einer Excelliste zusammen. Die Datei hat den Namen\n\n```\njjjj-summen.xlsx\n```\n\nSie wird nur dann erstellt, wenn der Konfigurationsparameter **kuerzel** in der Konfigurationsdatei definiert wurde.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxritter%2Ftafel-software","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaxritter%2Ftafel-software","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxritter%2Ftafel-software/lists"}