From 45c1bed43bd26ee94b4a625c29a20713666eb442 Mon Sep 17 00:00:00 2001
From: Michael Hoennig <michael@hoennig.de>
Date: Thu, 04 Aug 2022 11:06:07 +0200
Subject: [PATCH] add TODO document + progress calculation

---
 TODO.md                      |   87 +++++++++++++++++++++++++++++
 .gitignore                   |    1 
 tools/todo-progress-line.csv |    6 ++
 tools/todo-progress.gnuplot  |   23 +++++++
 tools/todo-progress          |   33 +++++++++++
 5 files changed, 150 insertions(+), 0 deletions(-)

diff --git a/.gitignore b/.gitignore
index 74c375c..f501b28 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@
 /build/www/**
 /src/test/javascript/coverage/
 /worktrees/
+TODO-progress.png
 
 ######################
 # Node
diff --git a/TODO.md b/TODO.md
new file mode 100644
index 0000000..f959725
--- /dev/null
+++ b/TODO.md
@@ -0,0 +1,87 @@
+
+## TODO
+
+This document is just for tracking the initial development project and thus only in German.
+
+### Kommunikative Aufwände
+
+| ID  | Beschreibung                                                |  Budget | Aufwand | Leistung |
+|:----|:------------------------------------------------------------|--------:|--------:|---------:|
+| PRE | Vorbesprechungen bis inkl. KickOff-Meeting                  |       8 |       4 |        4 |
+| PRJ | Zweiwöchige Projektbesprechungen                            |      12 |       2 |        2 |
+| RET | Vierwöchige Retrospektiven (optional)                       |       6 |         |          |
+| TRA | Einarbeitung von Mitarbeitern des Auftraggebers (Training)  |      12 |         |          |
+| E2E | Unterstützung beim Aufbau der E2E-System-Integrations-Tests |      40 |         |          |
+| MIG | Unterstützung bei der Datenmigration                        |      16 |         |          |
+| INS | Unterstützung ei der Inbetriebnahme / Einführung            |      16 |         |          |
+| APP | Abnahme (Approval)                                          |       4 |         |          |
+| SUP | Unterstützung nach der Abnahme (Support)                    |      12 |         |          |
+|     |                                                             |         |         |          |
+
+
+### Allgemeine Leistungen
+
+| ID  | Beschreibung                                               |   Budget | Aufwand | Leistung |
+|:----|:-----------------------------------------------------------|---------:|--------:|---------:|
+| DEV | Aufbau der Entwicklungsumgebung (bis inkl. Unit-Tests)     |       16 |      12 |       16 |
+| ATN | Entwurf des Authorisierungs-Systems                        |       40 |      68 |       36 |
+| ATZ | Auswahl und Implementierung des Authentifizierungs-Systems |       20 |         |          |
+| ITS | Aufbau einer Umgebung für Integrationstests (*1)           |        4 |       4 |        4 |
+| ATS | Aufbau einer Umgebung für Akzeptanztests (*1)              |       16 |       3 |          |
+| PIP | Aufbau einer Build- und Testpipeline                       |       20 |         |          |
+| ARC | Aufbau einer Architekturkontrolle                          |        8 |       2 |        2 |
+|     |                                                            |          |         |          |
+
+(*1: ITS+ATS sind aufgesplittet aus TST mit 20 geplanten Stunden entstanden)
+
+### Leistungen bezogen auf fachliche Objekte
+
+| ID  | fachliches Objekt      | Persona        | Ops          | Budget | Aufwand | Leistung |
+|:----|:-----------------------|:---------------|:-------------|-------:|--------:|---------:|
+| ROL | Rollen                 | Hostmaster     | Scrulojtx    |     26 |      10 |        5 |
+| USR | LDAP-User              | Hostmaster     | Scrufojtex   |     29 |      10 |        5 |
+| USR | LDAP-User              | LDAP-User      | rufojex      |     20 |      10 |          |
+| GRP | Gruppen                | Hostmaster     | scrulojtx    |     26 |         |          |
+| CBD | Customer Base          | Sachbearbeiter | ScruLojia    |     20 |      10 |        4 |
+| CBD | Customer Base          | Kunde          | sr           |      5 |       1 |          |
+| MSV | Managed Virtual Server | Hostmaster     | crudfoj      |     20 |         |          |
+| MSV | Managed Virtual Server | Owner          | rulojt       |     15 |         |          |
+| MWS | Managed Webspace       | Hostmaster     | scrudfojte   |     26 |       2 |          |
+| MWS | Managed Webspace       | Owner          | srulojte     |     18 |       1 |          |
+| MWS | Managed Websppace      | Admin          | srulojte     |      6 |       1 |          |
+| ACC | Unix-Account           | Owner          | scrudfojte   |     26 |       2 |          |
+| ACC | Unix-Account           | Admin          | sruloje      |     15 |       1 |          |
+| DOM | Domain                 | Owner          | (scrudfojte) |      9 |       1 |          |
+| DOM | Domain                 | Admin          | (srle)       |      3 |       1 |          |
+| EMA | E-Mail-Address         | Owner          | (scrudfojte) |      9 |       1 |          |
+| MAL | E-Mail-Alias           | Owner          | -            |      0 |       1 |          |
+| DBP | Database Postgres      | Owner          | (scrudlojte) |      9 |         |          |
+| DBP | Database Postgres      | Admin          | (srle)       |      3 |         |          |
+| DUP | Database-User Postgres | Admin          | (scrudlojte) |      9 |         |          |
+| DUP | Database-User Postgres | Admin          | -            |      0 |         |          |
+| DBM | Database MariaDB       | Owner          | -            |      0 |         |          |
+| DBM | Database MariaDB       | Admin          | -            |      0 |         |          |
+| DUM | Database-User MariaDB  | Admin          | -            |      0 |         |          |
+| DUM | Database-User MariaDB  | Admin          | -            |      9 |         |          |
+|     |                        |                |              |        |         |          |
+
+**Ops Agenda**: **S**: Schema, **V**: View, **C**: Create, **R**: Read, **U**: Update, **D**: Delete, **L**: List, **F**: Filter, **O**: Optimistic Locking, **J**: Journal (Audit), **H**: Historization, **U**: Undo, **I**: Inactivate, **T**: Tombstone, **A**: Archive, **E**: Event, **X**: Extraordinary
+
+
+### Wöchentlicher Status
+
+<!-- file not committed to git, please run `tools/todo-progress` to generate -->
+![hsadmin-ng Projektfortschritt](TODO-progress.png)
+
+In der folgenden Tabelle sind Aufwand und Leistung akkumulierte Werte.
+
+<!-- generated todo-progress begin: -->
+| Datum      | Budget | Aufwand | Leistung | Verbleibend |
+|------------|-------:|--------:|---------:|------------:|
+| 2022-07-17 |    553 |      44 |        0 |         553 |
+| 2022-07-24 |    553 |       8 |        0 |         553 |
+| 2022-07-31 |    553 |     143 |       40 |         513 |
+| 2022-08-04 |    553 |     147 |       78 |         475 |
+<!-- generated todo-progress end. -->
+
+
diff --git a/tools/todo-progress b/tools/todo-progress
new file mode 100755
index 0000000..43d57ca
--- /dev/null
+++ b/tools/todo-progress
@@ -0,0 +1,33 @@
+#!/bin/bash
+# check if required programs are installed
+declare -a required=(gnuplot sponge)
+for cmd in "${required[@]}"; do
+    command -v $cmd >/dev/null 2>&1 || { echo >&2 "Required '$cmd' not installed => aborting."; exit 1; }
+done
+
+# calculate current values
+let budget=`grep '^| ... |' <TODO.md | rev | cut -d'|' -f4 | rev | grep -o '[[:digit:]]*' | total`
+let effort=`grep '^| ... |' <TODO.md | rev | cut -d'|' -f3 | rev | grep -o '[[:digit:]]*' | total`
+let output=`grep '^| ... |' <TODO.md | rev | cut -d'|' -f2 | rev | grep -o '[[:digit:]]*' | total`
+let remainder=$(expr $budget - $output)
+
+# generating progress report
+echo '<!-- generated todo-progress begin: -->' >.todo-progress.md
+sed -e '1,/todo-progress begin:/d' -e '/todo-progress end./,$d' TODO.md >>.todo-progress.md
+if [ "$1" = "--recalculate" ]; then
+    echo "| $(date --iso-8601) | $(printf "%6d" $budget) | $(printf "%7d" $effort) | $(printf "%8d" $output) | $(printf "%11d" $remainder) |" >>.todo-progress.md
+fi
+echo '<!-- generated todo-progress end. -->' >>.todo-progress.md
+
+# replace the generated todo-progress part
+if [ "$1" = "--recalculate" ]; then
+    uniq <.todo-progress.md | sponge .todo-progress.md
+    sed -i -e '/todo-progress begin:/,/todo-progress end./!b' -e '/todo-progress end./!d;r .todo-progress.md' -e 'd' TODO.md
+fi
+
+# re-generate progress chart
+sed -e's/^|//' <.todo-progress.md | tr '|' ';' | grep ';' | grep -v -- '---' >.todo-progress.csv
+gnuplot tools/todo-progress.gnuplot
+rm .todo-progress.md .todo-progress.csv
+
+echo "HINT: To recalculate the current values and add a new line, use '$0 --recalculate'."
diff --git a/tools/todo-progress-line.csv b/tools/todo-progress-line.csv
new file mode 100644
index 0000000..f254b25
--- /dev/null
+++ b/tools/todo-progress-line.csv
@@ -0,0 +1,6 @@
+ Datum      ; Soll-Leistung
+ 2022-07-11 ;             0
+ 2022-07-31 ;           102
+ 2022-08-31 ;           253
+ 2022-09-30 ;           399
+ 2022-10-31 ;           550
diff --git a/tools/todo-progress.gnuplot b/tools/todo-progress.gnuplot
new file mode 100644
index 0000000..30701ef
--- /dev/null
+++ b/tools/todo-progress.gnuplot
@@ -0,0 +1,23 @@
+set xdata time                              # x-axis values are time (date) values
+set timefmt "%Y-%m-%d"                      # date value format
+set datafile separator ";"				    # CSV column separator is semicolon
+set key autotitle columnhead			    # first data line contains column titles
+set format x "%y-%m-%d"                     # display date format
+
+set xrange ["2022-07-11":"2022-10-31"]      # x-axis value-range
+set yrange [0:600]                          # y-axis value-range
+
+set key inside                              # graph legend style
+set xtics rotate by -45                     # rotate dates on x-axis 45deg for cleaner display
+set title 'hsadmin-ng Projektfortschritt'   # graph title
+
+set terminal png                            # output format
+set term png size 920, 640				    # output canvas size
+set output 'TODO-progress.png'              # output file name
+
+plot '.todo-progress.csv' 	using 1:2 with linespoints linetype rgb "black" linewidth 2, \
+	 '' 					using 1:3 with linespoints linetype rgb "red" 	linewidth 2, \
+     '' 					using 1:4 with linespoints linetype rgb "green" linewidth 2, \
+     '' 					using 1:5 with linespoints linetype rgb "blue" 	linewidth 2, \
+     'tools/todo-progress-line.csv' using 1:2 with linespoints linetype rgb "gray" linewidth 1 \
+

--
Gitblit v1.9.3