From d98b0905223608383d22c41e67b044921a8ade0c Mon Sep 17 00:00:00 2001 From: "harald.mueller" Date: Sat, 22 Jul 2023 22:59:12 +0200 Subject: [PATCH] muh --- m122/README.md | 6 +- .../README.md | 23 ++++---- .../B_emailadressen-erzeugen/README.md | 22 ++++---- .../C_systemleistung-abfragen/README.md | 52 +++++++++++------- .../hostinformation.jpg | Bin 39862 -> 0 bytes .../D_api-abfragen/README.md | 13 +++-- .../E_api-abfragen-mit-applikation/README.md | 12 ++-- .../F_qr-rechnungen-erzeugen/README.md | 37 +++++++------ .../x-ressourcen/rechnung23003.data | 5 -- .../x-ressourcen/rechnung23004.data | 5 -- .../x-ressourcen/rechnung24016.data | 7 +++ .../x-ressourcen/rechnung24017.data | 6 ++ .../x-ressourcen/rechnung24018.data | 5 ++ .../x-ressourcen/rechnung24019.data | 5 ++ .../G_ebill_handwerkerrechnungen/README.md | 41 ++++++++------ 15 files changed, 138 insertions(+), 101 deletions(-) delete mode 100644 m122/moegliche-LB2-AufgabenProjekte/C_systemleistung-abfragen/hostinformation.jpg delete mode 100644 m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung23003.data delete mode 100644 m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung23004.data create mode 100644 m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung24016.data create mode 100644 m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung24017.data create mode 100644 m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung24018.data create mode 100644 m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung24019.data diff --git a/m122/README.md b/m122/README.md index 16ac08d..0784554 100644 --- a/m122/README.md +++ b/m122/README.md @@ -11,10 +11,10 @@ | Projekt | Punkte | Zusatz-
Bonus| Alleine-
Bonus | Aufgabenstellung | |---- |---- |---- |---- |---- | - | **A**.) | 6 | | 1 | [Dateien und Verzeichnisse anlegen](moegliche-LB2-AufgabenProjekte/A_verzeichnisse-und-dateien-anlegen) - | **B**.) | 10 | 5 | 1 | [Emailadressen und Brief erstellen](moegliche-LB2-AufgabenProjekte/B_emailadressen-erzeugen) + | **A**.) | 6 | | | [Dateien und Verzeichnisse anlegen](moegliche-LB2-AufgabenProjekte/A_verzeichnisse-und-dateien-anlegen) + | **B**.) | 7 | 3 | 1 | [Emailadressen und Brief erstellen](moegliche-LB2-AufgabenProjekte/B_emailadressen-erzeugen) | **C**.) | 6 | 4 | 1 | [Systemleistung abfragen](moegliche-LB2-AufgabenProjekte/C_systemleistung-abfragen) - | **D**.) | 4 | 4 | 1 | [API abfragen](moegliche-LB2-AufgabenProjekte/D_api-abfragen) + | **D**.) | 5 | 5 | 1 | [API abfragen mit Datendarstellung](moegliche-LB2-AufgabenProjekte/D_api-abfragen) | **E**.) | 4 | 4 | 1 | [API abfragen mit Applikation](moegliche-LB2-AufgabenProjekte/E_api-abfragen-mit-applikation) | **F**.) | 8 | | 1 | [QR-Rechnungen erzeugen lassen](moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen) | **G**.) | 32 | | 2 | [eBill von Handwerkerrechnungen](moegliche-LB2-AufgabenProjekte/G_ebill_handwerkerrechnungen) diff --git a/m122/moegliche-LB2-AufgabenProjekte/A_verzeichnisse-und-dateien-anlegen/README.md b/m122/moegliche-LB2-AufgabenProjekte/A_verzeichnisse-und-dateien-anlegen/README.md index 345fb50..5d2b57b 100644 --- a/m122/moegliche-LB2-AufgabenProjekte/A_verzeichnisse-und-dateien-anlegen/README.md +++ b/m122/moegliche-LB2-AufgabenProjekte/A_verzeichnisse-und-dateien-anlegen/README.md @@ -185,14 +185,17 @@ Das fertige Skript: [./loesung-in-powershell/prepareFiles.ps1](./loesung-in-powe ## Bewertung -| Stufe | Beschreibung | Punkte | -|-------|--------------|--------| -| 1 | "Skript erstelleVorlagen.sh:" Erstellung Namensdateien (mind. 2) | 1 | -| 2 | "Skript erstelleVorlagen.sh:" Erstellung der Dateien im Template-Verzeichnis | 1 | -| - | | | -| 3 | "Skript verteileDateien.sh:" Klassenverzeichnis wird angelegt | 1 | -| 4 | "Skript verteileDateien.sh:" Lernendenverzeichnisse werden angelegt | 1 | -| 5 | "Skript verteileDateien.sh:" Lernendenverzeichnisse haben die Dateien drin | 1 | -| 6 | "Skript verteileDateien.sh:" Mehrere Klassen- und Lernenden-Verzeichnisse | 1 | -| Total | | **6**| +| Stufe | Punkte |Beschreibung | +|-------|--------|------------ | +| 1 | 1 | "Skript erstelleVorlagen.sh:" Erstellung Namensdateien (mind. 2) | +| 2 | 1 | "Skript erstelleVorlagen.sh:" Erstellung der Dateien im Template-Verzeichnis | +| - | - | | +| 3 | 1 | "Skript verteileDateien.sh:" Klassenverzeichnis wird angelegt | +| 4 | 1 | "Skript verteileDateien.sh:" Lernendenverzeichnisse werden angelegt | +| 5 | 1 | "Skript verteileDateien.sh:" Lernendenverzeichnisse haben die Dateien drin | +| 6 | 1 | "Skript verteileDateien.sh:" Mehrere Klassen- und Lernenden-Verzeichnisse | +| | **6** | **Total** | +| | | | +| |** 1/2 ** | Halbierung der Punkte, wenn der gleiche Code schon mal (bei einem Kollegen) gesehen wurde | +| | | | diff --git a/m122/moegliche-LB2-AufgabenProjekte/B_emailadressen-erzeugen/README.md b/m122/moegliche-LB2-AufgabenProjekte/B_emailadressen-erzeugen/README.md index 60730e3..4b16805 100644 --- a/m122/moegliche-LB2-AufgabenProjekte/B_emailadressen-erzeugen/README.md +++ b/m122/moegliche-LB2-AufgabenProjekte/B_emailadressen-erzeugen/README.md @@ -229,14 +229,14 @@ korrekt verarbeitet werden soll. ## Bewertung -| Stufe | Beschreibung | Punkte | -|-------|--------------|--------| -| 1 | Datei mit Mailadr./Passw. liegt vor | 3 | -| 2 | Alle Briefe korrekt erstellt | 2 | -| 3 | Archiv-Datei erstellt | 1 | -| 4 | Korrektes Mail kommt an! (samt Att.)| 4 | -| **Total** | -------------------- |**10**| -| 5 | Bonus: FTP-Transfer für den Download | 2 | -| 6 | Bonus: Vollautomatische Verarbeitung (crontab) | 1 | -| 7 | Bonus: Dublettenkontrolle inkl. durchgef. Test | 2 | - +| Punkte | Beschreibung | +|--------|--------------| +| 3 | Datei mit Mailadr./Passw. liegt vor, Mails haben korrekte Form, nur Kleinbuchstaben und nur einfache Buchstaben | +| 1 | Alle Briefe korrekt erstellt | +| 1 | Archiv-Datei ist erstellt (tar, gz, zip) | +| 2 | Korrektes Mail inkl. Attachment kommt an | +|**7**| **Total** | | +| 3 | Bonus: Dublettenkontrolle inkl. durchgeführtem Test | +||| +| **1/2** | Halbierung der Punkte, wenn der gleiche Code schon mal (bei einem Kollegen) gesehen wurde | +||| diff --git a/m122/moegliche-LB2-AufgabenProjekte/C_systemleistung-abfragen/README.md b/m122/moegliche-LB2-AufgabenProjekte/C_systemleistung-abfragen/README.md index d754d30..f0ccbb4 100644 --- a/m122/moegliche-LB2-AufgabenProjekte/C_systemleistung-abfragen/README.md +++ b/m122/moegliche-LB2-AufgabenProjekte/C_systemleistung-abfragen/README.md @@ -23,27 +23,28 @@ Formattieren Sie alles in eine gut leserliche **Tabellen-Form**. Folgendes ist auszugeben: - 1. Der Hostname des Systems -- 2. Die Betriebssystemversion -- 3. Der Modellname der CPU -- 4. Die Anzahl der CPU-Cores -- 5. Der gesamte und der genutze Arbeitsspeicher -- 6. Die Grösse des verfügbaren Speichers -- 7. Die Grösse des freien Speichers -- 8. Die Gesamtgrösse des Dateisystems -- 9. Die Grösse des belegten Speichers auf dem Dateisystem -- 10. Die Grösse des freien Speichers auf dem Dateisystem -- 11. Die aktuelle Systemlaufzeit -- 12. Die aktuelle Systemzeit +- 2. Aktuelle IP-Adresse +- 3. Die Betriebssystemversion +- 4. Der Modellname der CPU +- 5. Die Anzahl der CPU-Cores +- 6. Der gesamte und der genutze Arbeitsspeicher +- 7. Die Grösse des verfügbaren Speichers +- 8. Die Grösse des freien Speichers +- 9. Die Gesamtgrösse des Dateisystems +- 10. Die Grösse des belegten Speichers auf dem Dateisystem +- 11. Die Grösse des freien Speichers auf dem Dateisystem +- 12. Die aktuelle Systemlaufzeit +- 13. Die aktuelle Systemzeit +- 14. Trenner für die nächste Ausgabe - -**2.) Dateiausgabe wahlweise** +**2.) Dateiausgabe wahlweise** (mit einem "switch" `-f`) Gefordert ist die Ausgabe **wahlweise** direkt auf das
Terminal, bzw. die Console, wie auch in eine Datei. -- Wenn man **keine Option** angibt: Nur die Terminal-Ausgabe. +- Wenn man **keine Option** angibt: Nur die Terminal-Ausgabe ohne Datei. - Wenn man den **"Switch"** (die Option) `-f` angibt, soll zusätzlich die -
Datei **[YYYY-MM]-sys-[hostname].info** erzeugt werden. +
Datei **[YYYY-MM]-sys-[hostname].log** erzeugt werden.
(Immer in die gleiche Datei schreiben. Das nennt man ein **"Log"**) Tipp: Benutzen Sie für den Timestamp `date '+%Y-%m-%d_%H%M'` bzw. `date '+%Y-%m'` @@ -55,7 +56,16 @@ und für den Hostnamen `hostname` oder `uname -n` und den Befehl `df ` für Disk Binden Sie Ihr Skript in die `crontab` ein und wählen Sie einen geeigneten Ausführungs-Takt. +Tipp: Prüfen Sie, ob Ihr **cron** eingeschaltenist mit folgendem Befehl: + service cron status + +Falls cron nicht läuft, können Sie es damit einschalten: + + sudo service cron start + + + ### Resultat Ihr Resultat könnte so in dieser Art aussehen (schöner ist besser): @@ -79,14 +89,16 @@ Tipp: Benutzen Sie den `printf`-Befehl | Punkte | Beschreibung | |-------|--------------| | 3 | Alle oben genannten Sytem-Infos | -| 1 | Ausgabe in Datei mit "Switch" und richtigem Dateiname | +| 1 | Ausgabe in die Datei mit "Switch" und richtigem Dateiname | | 1 | Regelmässige Ausführung (Abgabe von 3 Log-Einträgen, die das System im Takt erstellt hat) | -| 1 | Bonuspunkt für "gute/schöne" Tabellen-Darstellung | +| 1 | "Gute/schöne" Tabellen-Darstellung | | **6** | **Total** | | | | | | Erweiterungsmöglichkeiten | | 2 | Verschicken einer E-Mail wenn ein "Schwellwert" überschritten wird | -| 2 | Darstellung auf einer Webseite (HTML -> als index.html in Ihr Verzeichnis, siehe Zugangsdaten ) für das Monitoring mit den Werten und zusätzlich einer Ampel-Darstellung grün/gelb/rot | -| | | +| 2 | Darstellung auf einer Webseite (HTML -> als index.html in Ihr Verzeichnis, siehe Zugangsdaten ) für das Monitoring mit den Werten und zusätzlich einer Ampel-Darstellung grün/gelb/rot [**FTP-Zugangsdaten**](../../tools-technics/ftp-zugangsdaten.md)| +||| +| **1/2** | Halbierung der Punkte, wenn der gleiche Code schon mal (bei einem Kollegen) gesehen wurde | +||| + -[**FTP-Zugangsdaten**](../../tools-technics/ftp-zugangsdaten.md) diff --git a/m122/moegliche-LB2-AufgabenProjekte/C_systemleistung-abfragen/hostinformation.jpg b/m122/moegliche-LB2-AufgabenProjekte/C_systemleistung-abfragen/hostinformation.jpg deleted file mode 100644 index eeeae019f476813bdafa3eb2f00eedc62c762971..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39862 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 diff --git a/m122/moegliche-LB2-AufgabenProjekte/E_api-abfragen-mit-applikation/README.md b/m122/moegliche-LB2-AufgabenProjekte/E_api-abfragen-mit-applikation/README.md index 86ec2c5..24c3767 100644 --- a/m122/moegliche-LB2-AufgabenProjekte/E_api-abfragen-mit-applikation/README.md +++ b/m122/moegliche-LB2-AufgabenProjekte/E_api-abfragen-mit-applikation/README.md @@ -20,12 +20,12 @@ Benutzen Sie dafür die aktuellen Kurse über eine API. Zusatz: Wenn ich nach einiger Zeit den gleichen Betrag wieder -eingebe, sollten Sie darstellen können, was der Bertrag +eingebe, sollten Sie darstellen können, was der Betrag vorher war und was er jetzt ist. (Sie müssen die abgefragten Werte speichern um sie dann vergleichen zu können. Weiter sollten Sie die Zeit wissen, wann das letzte Mal abgefragt wurde und die Differenz -möchte ich auch angezeigt bekommen. +möchte ich auch angezeigt bekommen.) Hier einige mögliche APIs zum anbinden: @@ -42,12 +42,12 @@ https://polygon.io/pricing | 1 | Eine Ablaufskizze (activity diagram) wird der Lehrperson vorgelegt | | 1 | Download der aktuellen Kurse | | 1 | Abfragesystem, Benutzerführung | -| 1 | Gute und schöne Darstellung der (einfachen) Resultaten | +| 1 | Gute und die "schöne" (tabellarische) Darstellung der Daten | | **4** | **Total** | -| 1 | Bonuspunkt für Speicherung der "alten" Daten | -| 1 | Bonuspunkt für den Vergleich der "neuen" mit den "alten" Daten | -| 1 | Bonuspunkt für die "schöne" (tabellarische) Darstellung der Vergleiche | +| 1 | Bonuspunkt für Speicherung der "alten" Daten und Vergleich mit den "neuen" Daten | +| 1 | Bonuspunkt für der Vergleiche | | 1 | Bonuspunkt für Farben in der Darstellung (rot für runter, grün für hoch) | | | | +| ** 1/2 ** | Halbierung der Punkte, wenn der gleiche Code schon mal (bei einem Kollegen) gesehen wurde |
diff --git a/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/README.md b/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/README.md index d9cb517..a08923b 100644 --- a/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/README.md +++ b/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/README.md @@ -43,11 +43,19 @@ Systeme erzeugen Rohdaten, die Sie umformen und eine solche Sie eine eigendefinierte Rohdatei in einem "csv"-ähnlichen Format (csv = comma separated values). +## Das müssen Sie machen: + +- Sie müssen also aus den gegebenen Daten, eine Tabelle machen, die Sie hier hochladen können. +[https://qr-rechnung.net/#/table](https://qr-rechnung.net/#/table) +Wenn alles gut ist, lassen sich die QR-Rechnnungen dort auf der WebSeite erzeugen. + + + **Input** Sie bekommen dafür eine Serie von solchen Dateien: -
[x-ressourcen/rechnung23003.data](x-ressourcen/rechnung23003.data) -
[x-ressourcen/rechnung23004.data](x-ressourcen/rechnung23004.data) +
[x-ressourcen/rechnung24018.data](x-ressourcen/rechnung24018.data) +
[x-ressourcen/rechnung24019.data](x-ressourcen/rechnung24019.data) **Output** @@ -81,25 +89,18 @@ eine Serie von QR-Rechnungen erstellen. Bewertet wird dann der Download der QR-Rechnungen (wenns funktioniert). Je perfekter die heruntergeladenen QR-Rechnungen aussehen, desto besser die Note. -- Stufe 4 - -FTP-Zugang - - HOST: "ftp.haraldmueller.ch - USER: "schoolerinvoices - PASS: "Berufsschule8005! - PATH: "/out/[KlasseUndIhrNachname]" - ## Bewertung -| Stufe | Beschreibung | Punkte | -|-------|--------------|--------| -| 1 | Input-Daten können gelesen und interpretiert werden | 2 | -| 2 | Output-Liste kann erzeugt werden (Daten umformen) | 2 | -| 3 | Output-Liste kann QR-Rechnungen auf Web-Site erzeugen und Resultate "stimmen" | 2 | -| 4 | (Mehrere) Input-Dateien werden vom FTP-Drive abgeholt und verarbeitet | 2 | -| Total | | **8**| +|Punkte | Beschreibung | +|-------|-------------- | +| 2 | Input-Daten können gelesen und interpretiert werden | +| 2 | Output-Liste kann erzeugt werden (Daten umformen) | +| 2 | Output-Liste kann QR-Rechnungen auf Web-Site erzeugen und Resultate "stimmen"| +| **6** | | +||| +| **1/2** | Halbierung der Punkte, wenn der gleiche Code schon mal (bei einem Kollegen) gesehen wurde | +||| diff --git a/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung23003.data b/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung23003.data deleted file mode 100644 index 36f5590..0000000 --- a/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung23003.data +++ /dev/null @@ -1,5 +0,0 @@ -Rechnung_23003;Auftrag_A003;Zürich;21.03.2023;10:22:54;ZahlungszielInTagen_30 -Herkunft;41010000001234567;K821;Adam Adler;Bahnhofstrasse 1;8000 Zuerich;CHE-111.222.333 MWST;harald.mueller@tbz.ch -Endkunde;41301000000012497;Autoleasing AG;Gewerbestrasse 100;5000 Aarau -RechnPos;1;Einrichten E-Mailclients;6;25.00;150.00;MWST_0.00% -RechnPos;2;Konfig & Schulung Scanningcenter;1;1200.00;1200.00;MWST_0.00% diff --git a/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung23004.data b/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung23004.data deleted file mode 100644 index 61d1904..0000000 --- a/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung23004.data +++ /dev/null @@ -1,5 +0,0 @@ -Rechnung_23004;Auftrag_A004;Zürich;21.03.2023;10:21:32;ZahlungszielInTagen_30 -Herkunft;41010000001234567;K821;Berta Berisha;Bahnhofstrasse 23;8000 Zuerich;CHE-111.222.333 MWST;harald.mueller@tbz.ch -Endkunde;41301000000012497;Carlo Caprez;Carrosseriestrasse 2;7000 St. Gallen -RechnPos;1;Ganzkörpermassage;1;100.00;100.00;MWST_0.00% -RechnPos;2;Massageöl Ultra;1;20.00;20.00;MWST_0.00% diff --git a/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung24016.data b/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung24016.data new file mode 100644 index 0000000..24d02bd --- /dev/null +++ b/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung24016.data @@ -0,0 +1,7 @@ +Rechnung_90449;Auftrag_A448;Zürich;14.05.2024;14:22:54;ZahlungszielInTagen_15 +Herkunft;41010000001234567;CH3089144756318541463;K234;Harald Müller;Rainstrasse 27;8610 Uster;CHE-111.222.333 MWST;harald.mueller@bluewin.ch +Endkunde;41301000000012497;CH1689144136449235957;Herrgott im Himmel;Wolke 7;6666 Himmelsdorf +RechnPos;1;Ticket fürs Himmelreich (D);5;5.00;25.00;MWST_0.00% +RechnPos;2;Ticket To Heaven (E);8;5.00;40.00;MWST_0.00% +RechnPos;3;Billet pour le paradis (F);3;5.00;15.00;MWST_0.00% +RechnPos;4;Boleto al cielo (S);4;5.00;20.00;MWST_0.00% \ No newline at end of file diff --git a/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung24017.data b/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung24017.data new file mode 100644 index 0000000..2e8b8ea --- /dev/null +++ b/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung24017.data @@ -0,0 +1,6 @@ +Rechnung_24017;Auftrag_A448;Zürich;14.05.2024;14:22:54;ZahlungszielInTagen_10 +Herkunft;41010000001234567;CH3089144756318541463;K234;Harald Müller;Rainstrasse 27;8610 Uster;CHE-111.222.333 MWST;harald.mueller@bluewin.ch +Endkunde;41301000000012497;CH1789144544456741313;Herrgott im Himmel;Wolke 7;6666 Himmelsdorf +RechnPos;1;Lizenzverkauf fürs Himmelreich;5;55.00;275.00;MWST_0.00% +RechnPos;2;Lizenzen um Absolution zu erteilen;25;85.00;2125.00;MWST_0.00% +RechnPos;3;Versicherung gegen Weltuntergang;1;500.00;500.00;MWST_0.00% diff --git a/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung24018.data b/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung24018.data new file mode 100644 index 0000000..ad0cb44 --- /dev/null +++ b/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung24018.data @@ -0,0 +1,5 @@ +Rechnung_24018;Auftrag_A003;Zürich;21.03.2024;10:22:54;ZahlungszielInTagen_30 +Herkunft;41010000001234567;CH7189144353227895511;K821;Adam Adler;Bahnhofstrasse 1;8000 Zuerich;CHE-111.222.333 MWST;harald.mueller@tbz.ch +Endkunde;41301000000012497;CH1889144876152963546;Autoleasing AG;Aareweg 100;5000 Aarau +RechnPos;1;Einrichten E-Mailclients;6;25.00;150.00;MWST_0.00% +RechnPos;2;Konfig & Schulung Scanningcenter;1;1200.00;1200.00;MWST_0.00% diff --git a/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung24019.data b/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung24019.data new file mode 100644 index 0000000..6db7a06 --- /dev/null +++ b/m122/moegliche-LB2-AufgabenProjekte/F_qr-rechnungen-erzeugen/x-ressourcen/rechnung24019.data @@ -0,0 +1,5 @@ +Rechnung_24019;Auftrag_A004;Zürich;21.03.2024;10:21:32;ZahlungszielInTagen_30 +Herkunft;41010000001234567;CH3089144756318541463;K821;Berta Berisha;Bahnhofstrasse 23;8000 Zuerich;CHE-111.222.333 MWST;harald.mueller@tbz.ch +Endkunde;41301000000012497;CH1989144212313785138;Carlo Caprez;Carrosseriestrasse 2;7000 St. Gallen +RechnPos;1;Ganzkörpermassage;1;100.00;100.00;MWST_0.00% +RechnPos;2;Massageöl Ultra;1;20.00;20.00;MWST_0.00% diff --git a/m122/moegliche-LB2-AufgabenProjekte/G_ebill_handwerkerrechnungen/README.md b/m122/moegliche-LB2-AufgabenProjekte/G_ebill_handwerkerrechnungen/README.md index 8d9d21c..51154d5 100644 --- a/m122/moegliche-LB2-AufgabenProjekte/G_ebill_handwerkerrechnungen/README.md +++ b/m122/moegliche-LB2-AufgabenProjekte/G_ebill_handwerkerrechnungen/README.md @@ -1,6 +1,6 @@ # M122 - Aufgabe -2023-02 MUH +2023-07 MUH ## ebill von Handwerkerrechnungen @@ -58,11 +58,11 @@ Sie bekommen vom Biller-Sytem **mehrere** solche Dateien -Dateiname: rechnung23003.data +Dateiname: rechnung24018.data - Rechnung_23003;Auftrag_A003;Uster;03.07.2024;10:22:54;ZahlungszielInTagen_30 - Herkunft;41010000001234567;K821;Adam Adler;Bahnhofstrasse 1;8000 Zuerich;CHE-111.222.333 MWST;harald.mueller@tbz.ch - Endkunde;41301000000012497;Autoleasing AG;Gewerbestrasse 100;5000 Aarau + Rechnung_24018;Auftrag_A003;Zürich;21.03.2024;10:22:54;ZahlungszielInTagen_30 + Herkunft;41010000001234567;CH7189144353227895511;K821;Adam Adler;Bahnhofstrasse 1;8000 Zuerich;CHE-111.222.333 MWST;harald.mueller@tbz.ch + Endkunde;41301000000012497;CH1889144876152963546;Autoleasing AG;Aareweg 100;5000 Aarau RechnPos;1;Einrichten E-Mailclients;6;25.00;150.00;MWST_0.00% RechnPos;2;Konfig & Schulung Scanningcenter;1;1200.00;1200.00;MWST_0.00% @@ -76,14 +76,14 @@ die Verarbeitung für 'diese aktuelle' Rechnung abbrechen. Sie müssen aus **jeder Rechnungsdatei** (.data) **zwei Dateien** erstellen (ein TXT-File und ein XML-File) und diese müssen einen bestimmten Namen haben: -
**[Kundennummer]_[Rechnungsnummer]_invoice.xml** (also konkret ‘K821_23003_invoice.xml’) -
**[Kundennummer]_[Rechnungsnummer]_invoice.txt** (also konkret ‘K821_23003_invoice.txt’) +
**[Kundennummer]_[Rechnungsnummer]_invoice.xml** (also konkret ‘K821_24018_invoice.xml’) +
**[Kundennummer]_[Rechnungsnummer]_invoice.txt** (also konkret ‘K821_24018_invoice.txt’) Die Dateinamen werden aus den **Inhalten** der .data-Datei gebildet (generiert): -
(aus **Kundennummer** "K821" und aus der **Rechnungsnummer** "23003") +
(aus **Kundennummer** "K821" und aus der **Rechnungsnummer** "24018") -
Dateiname Zwischenresultat a.): K821_23003_invoice.txt -
Dateiname Zwischenresultat b.): K821_23003_invoice.xml +
Dateiname Zwischenresultat a.): K821_24018_invoice.txt +
Dateiname Zwischenresultat b.): K821_24018_invoice.xml ### Zwischenresultat a.) Rechnung in menschenlesbaren Klartext @@ -94,7 +94,7 @@ haben Endkunden die Möglichkeit, die Rechnung zurückzuweisen und somit nicht zu bezahlen. -**Inhalt von K821_23003_invoice.txt:** +**Inhalt von K821_24018_invoice.txt:** ------------------------------------------------- @@ -109,14 +109,14 @@ und somit nicht zu bezahlen. - Uster, den 21.07.2023 Autoleasing AG - Gewerbestrasse 100 + Uster, den 21.03.2024 Autoleasing AG + Aareweg 100 5000 Aarau Kundennummer: K821 Auftragsnummer: A003 - Rechnung Nr 23003 + Rechnung Nr 24018 ----------------------- 1 Einrichten E-Mailclients 5 25.00 CHF 125.00 2 Konfig & Schulung Scanningcenter 1 1200.00 CHF 1200.00 @@ -132,7 +132,7 @@ und somit nicht zu bezahlen. - Zahlungsziel ohne Abzug 30 Tage (20.08.2023) + Zahlungsziel ohne Abzug 30 Tage (20.04.2024) Empfangsschein Zahlteil @@ -142,7 +142,7 @@ und somit nicht zu bezahlen. 8000 Zuerich | | 8000 Zuerich | | | | - 00 00000 00000 00000 00000 | | 00 00000 00000 00000 00000 + CH71 8914 4353 2278 9551 1 | | CH18 8914 4876 1529 6354 6 | | Autoleasing AG | | Autoleasing AG Gewerbestrasse 100 | | Gewerbestrasse 100 @@ -188,7 +188,7 @@ dass es keine MWSt gibt. ### Zwischenresultat b.) Rechnung im (maschinenlesbaren) XML-Format -**Inhalt von K821_23003_invoice.xml:** +**Inhalt von K821_24018_invoice.xml:** ------------------------------------------------- @@ -398,7 +398,9 @@ im "Servermanager" die Einstellungen.
zweiten Teil der Arbeit machen (das Zippen und das Mailen) und
dem User (Biller) zurückschicken der bestätigten Zahlung
-
[![zahnrad.png](x-ressourcen/zahnrad.png)https://coinditorei.com/zahlungssystem](https://coinditorei.com/zahlungssystem) +
[https://coinditorei.com/zahlungssystem](https://coinditorei.com/zahlungssystem) +
![zahnrad.png](x-ressourcen/zahnrad.png) +
[https://coinditorei.com/zahlungssystem](https://coinditorei.com/zahlungssystem)


@@ -502,6 +504,9 @@ Dokumentation verlangt werden.) | 1 | | Automatisierung | | | [1] | Scheduler eingerichtet und funktioniert (Linux "crontab" oder Win "Aufgabenplaner") | |**32P** | | **Total** | +|||| +| **1/2**| | Halbierung der Punkte, wenn der gleiche Code schon mal (bei einem Kollegen) gesehen wurde | +||||