diff --git a/.env b/.env deleted file mode 100644 index e8c72ef..0000000 --- a/.env +++ /dev/null @@ -1,8 +0,0 @@ -ODOO_VERSION=17.0 -CONTAINER_NAME_EXTENSION=17_dev -ODOO_PORT=9013 -DB_HOST=hobbyhimmel_odoo_17_dev_db -DB_PORT=5432 -DB_USER=odoo -DB_PASSWORD=odoo -DB_NAME=hobbyhimmel diff --git a/.gitea/ISSUE_TEMPLATE/odoo-test-feedback.yml b/.gitea/ISSUE_TEMPLATE/odoo-test-feedback.yml deleted file mode 100644 index 7466c59..0000000 --- a/.gitea/ISSUE_TEMPLATE/odoo-test-feedback.yml +++ /dev/null @@ -1,69 +0,0 @@ -name: POS Test Feedback -about: Rückmeldung zu einem Test des POS-Systems geben -title: "[Feedback] " -labels: [feedback, test] -assignees: [] -body: - - type: markdown - attributes: - value: | - ## 🧪 POS-Test: Feedbackformular - - Bitte gib uns Rückmeldung zu den einzelnen Funktionen. Beschreibe ggf. Probleme oder Auffälligkeiten. - - - type: textarea - id: sonstiges - attributes: - label: Sonstiges Feedback oder Fehler - description: Alles andere, was dir beim Test aufgefallen ist (z. B. Layout, Ladezeiten, Fehlermeldungen). - - - type: textarea - id: nutzerauswahl - attributes: - label: Nutzer auswählen - description: Funktioniert die Auswahl des Nutzers im POS wie erwartet? - placeholder: z.B. Nutzer nicht auffindbar, Anzeige langsam etc. - - - type: textarea - id: haftung - attributes: - label: Haftungsausschluss prüfen - description: Wird der Haftungsausschluss korrekt angezeigt bzw. berücksichtigt? - - - type: textarea - id: maschinenfreigabe - attributes: - label: Maschinenfreigabe prüfen - description: Wird korrekt angezeigt, ob der Nutzer eine Einweisung für eine Maschine hat? - - - type: textarea - id: abrechnung - attributes: - label: Abrechnung (Bargeld / SumUp) - description: Funktioniert die Abrechnung für den Nutzer? - - - type: textarea - id: coupon - attributes: - label: Coupons (erstellen / einlösen) - description: Funktionieren Erstellen und Einlösen von Coupons korrekt? - - - type: textarea - id: nutzerdaten - attributes: - label: Nutzerdaten aktualisieren / Haftungsausschluss abwählen - description: Lassen sich Nutzerdaten wie RFID oder der Haftungsausschluss korrekt ändern? - - - type: textarea - id: einweisung - attributes: - label: Einweisung verkaufen / prüfen - description: Lässt sich eine Einweisung verkaufen und wird sie korrekt zugewiesen? - - - type: textarea - id: backend - attributes: - label: Backend-Funktionen - description: Können Maschinen und Einweisungen im Backend wie erwartet verwaltet werden? - - diff --git a/.gitea/workflows/odoo-restore-open_workshop_install.yaml b/.gitea/workflows/odoo-restore-open_workshop_install.yaml deleted file mode 100644 index a0f5591..0000000 --- a/.gitea/workflows/odoo-restore-open_workshop_install.yaml +++ /dev/null @@ -1,154 +0,0 @@ -name: odoo-restore-open_workshop-install -on: - schedule: - - cron: "43 5 * * *" # Dieser Job wird täglich um 05:43 Uhr UTC ausgeführt. - push: - branches: - - 13.0_dev - -env: - URL_RESTORE: http://hobbybackend2.fritz.box:9013 - -jobs: - run-odoo-backup-in-docker: - runs-on: ["hobbybackend2", "ubuntu-latest"] # Gibt an, dass der Job entweder auf 'hobbybackend2' und 'ubuntu-latest' läuft. - - steps: - - name: Checkout the repository - # Dieser Schritt holt den Code des Repositories in die Action-Umgebung. - # Dies ist notwendig, um auf Dateien im Repository wie Skripte oder Konfigurationen zugreifen zu können. - uses: actions/checkout@v3 - - - name: Load environment variables from .env - run: | - set -a - source .env - set +a - # Schreibe die Variablen in $GITHUB_ENV für die Verwendung in der YAML - while IFS= read -r line; do - if [[ ! -z "$line" && "$line" != \#* ]]; then - echo "$line" >> $GITHUB_ENV - fi - done < .env - - - name: Set up Docker container - # Dieser Schritt startet einen Docker-Container basierend auf dem "ubuntu:latest" Image. - # Er läuft im Hintergrund (`-d`), und wir verwenden `tail -f /dev/null`, um den Container laufend zu halten. - # Danach werden benötigte Pakete wie `gnupg`, `openssh-client`, `curl` und `sshpass` installiert. - run: | - docker run -d --name ${{ github.workflow }} ubuntu:latest tail -f /dev/null - docker exec ${{ github.workflow }} apt-get update - docker exec ${{ github.workflow }} apt-get install -y gnupg2 openssh-client curl sshpass nano - - - name: Copy SSH keys to the container - # In diesem Schritt werden SSH-Schlüssel aus den GitHub Secrets in temporäre Dateien geschrieben. - # Diese Dateien werden dann in den Docker-Container kopiert, um SSH-Zugriff innerhalb des Containers zu ermöglichen. - # Schließlich werden die Berechtigungen des privaten Schlüssels (id_rsa) auf 600 gesetzt. - run: | - docker exec ${{ github.workflow }} mkdir -p /root/.ssh - echo "${{ secrets.OPENSSH_PRIVATE_KEY }}" > ssh_private_key - echo "${{ secrets.OPENSSH_PUBLIC_KEY }}" > ssh_public_key - docker cp ssh_private_key ${{ github.workflow }}:/root/.ssh/id_rsa - docker cp ssh_public_key ${{ github.workflow }}:/root/.ssh/id_rsa.pub - docker exec ${{ github.workflow }} chmod 600 /root/.ssh/id_rsa - - - name: Copy PGP keys to the container - # Hier werden die GPG-Schlüssel (PGP-Schlüssel) in den Container kopiert, um Backups verschlüsseln zu können. - # Die GPG-Schlüssel werden ebenfalls aus den GitHub Secrets entnommen und temporär in Dateien gespeichert, - # die anschließend importiert werden. - run: | - echo "${{ secrets.PGP_PRIVATE_KEY }}" > pgp_private_key.asc - echo "${{ secrets.PGP_PUBLIC_KEY }}" > pgp_public_key.asc - docker cp pgp_private_key.asc ${{ github.workflow }}:/root/pgp_private_key.asc - docker cp pgp_public_key.asc ${{ github.workflow }}:/root/pgp_public_key.asc - docker exec ${{ github.workflow }} gpg --batch --import /root/pgp_private_key.asc - docker exec ${{ github.workflow }} gpg --import /root/pgp_public_key.asc - rm pgp_private_key.asc pgp_public_key.asc - - - name: Add Host to Known Hosts - # In diesem Schritt wird der SSH-Host-Schlüssel des Remote-Servers (ALL_INKL_HOST) zum "known_hosts"-File - # des Containers hinzugefügt, um SSH-Verbindungen zum Remote-Server zu ermöglichen, ohne dass Warnungen angezeigt werden. - # Der Host-Schlüssel wird mit `ssh-keyscan` gesammelt und in `known_hosts` eingetragen. - run: | - echo "This is the host: ${{ secrets.ALL_INKL_HOST }}" - docker exec ${{ github.workflow }} bash -c "mkdir -p /root/.ssh && touch /root/.ssh/known_hosts && chmod 600 /root/.ssh/known_hosts" - docker exec ${{ github.workflow }} bash -c "ssh-keyscan -H '${{ secrets.ALL_INKL_HOST }}' >> /root/.ssh/known_hosts" - docker exec ${{ github.workflow }} bash -c "cat /root/.ssh/known_hosts" - - - name: Run the restore script in Docker container - # In diesem Schritt wird das Skript `odoo-restore.sh` in den Container kopiert und dort ausgeführt. - # Die für das Skript notwendigen Umgebungsvariablen werden mitgegeben. - # Das Skript entpackt das Backup-Archiv. - # Das Skript löscht die bisherige Datenbank und fügt die neue Datenbank wieder ein. - # Anschließend wird das Odoo filestore wiederhergestellt. - run: | - docker cp ./scripts/odoo-restore.sh ${{ github.workflow }}:/root/odoo-restore.sh - docker exec ${{ github.workflow }} chmod +x /root/odoo-restore.sh - docker exec -e ADMIN_PASSWORD=${{ secrets.ODOO_ADMIN_PASSWORD }} \ - -e sftp_host=${{ secrets.SFTP_HOST }} \ - -e sftp_user=${{ secrets.SFTP_USER }} \ - -e sftp_password=${{ secrets.SFTP_PASSWD }} \ - -e gpg_password=${{ secrets.GPG_PASSPHRASE }} \ - ${{ github.workflow }} /bin/bash -c "bash /root/odoo-restore.sh '${{ env.URL_RESTORE }}'" - - - name: Stop and remove Docker container - # Nachdem das Restore abgeschlossen ist, wird der Docker-Container gestoppt und entfernt, - # um keine Ressourcen auf dem Host unnötig zu verbrauchen. - run: | - docker stop ${{ github.workflow }} - docker rm ${{ github.workflow }} - - - name: Clone or update custom_addons open_workshop repository - run: | - echo "Container Name Extension: ${{ env.CONTAINER_NAME_EXTENSION }}" - docker exec hobbyhimmel_odoo_${{ env.CONTAINER_NAME_EXTENSION }} /bin/bash -c " - git config --global pull.ff only && \ - if [ ! -d /home/odoo/custom_addons/open_workshop ]; then - git clone https://gitea:${{ secrets.BUILD_ACTION }}@gitea.lan.hobbyhimmel.de/hobbyhimmel/open_workshop.git /home/odoo/custom_addons/open_workshop; - else - cd /home/odoo/custom_addons/open_workshop && \ - git remote set-url origin https://gitea:${{ secrets.BUILD_ACTION }}@gitea.lan.hobbyhimmel.de/hobbyhimmel/open_workshop.git && \ - git fetch && git checkout ${{ env.ODOO_VERSION }}_dev && git pull; - fi" - - - name: Uninstall vvow_pos - run: | - docker exec -e ODOO_URL=${{ env.URL_RESTORE }} \ - -e ODOO_DB=${{ env.DB_NAME }} \ - -e ODOO_USERNAME=${{ secrets.ODOO_HOBBYHIMMEL_ADMIN }} \ - -e ODOO_PASSWORD=${{ secrets.ODOO_HOBBYHIMMEL_ADMIN_PASSWORD }} \ - hobbyhimmel_odoo_${{ env.CONTAINER_NAME_EXTENSION }} \ - /bin/bash -c " - cd /home/odoo/custom_addons/open_workshop/scripts && \ - python3 uninstall_rpc.py vvow_pos" - - - name: Fix Database hobbyhimmel with fix_missing_pos_partner.py - # In diesem Schritt wird das Skript `fix_missing_pos_partner.py` ausgeführt, um sicherzustellen, dass alle Partner in der Datenbank korrekt sind. - run: | - docker exec hobbyhimmel_odoo_${{ env.CONTAINER_NAME_EXTENSION }} /bin/bash -c " - cd /home/odoo/custom_addons/open_workshop/scripts && \ - /opt/odoo/odoo/odoo-bin shell -d ${{ env.DB_NAME }} < fix_missing_pos_partner.py" - - - name: Install open_workshop - # Install open_workshop and run necessary migrations - run: | - docker exec hobbyhimmel_odoo_${{ env.CONTAINER_NAME_EXTENSION }} /bin/bash -c " - /opt/odoo/odoo/odoo-bin -d ${{ env.DB_NAME }} -i open_workshop --stop-after-init" - docker restart hobbyhimmel_odoo_${{ env.CONTAINER_NAME_EXTENSION }} - - - name: Import Machine to Product and Training relation - run: | - docker exec hobbyhimmel_odoo_${{ env.CONTAINER_NAME_EXTENSION }} /bin/bash -c " - cd /home/odoo/custom_addons/open_workshop/scripts && \ - /opt/odoo/odoo/odoo-bin shell -d ${{ env.DB_NAME }} < import_machine_products.py" - - - name: Uninstall vvow_einweisungen - run: | - docker exec -e ODOO_URL=${{ env.URL_RESTORE }} \ - -e ODOO_DB=${{ env.DB_NAME }} \ - -e ODOO_USERNAME=${{ secrets.ODOO_HOBBYHIMMEL_ADMIN }} \ - -e ODOO_PASSWORD=${{ secrets.ODOO_HOBBYHIMMEL_ADMIN_PASSWORD }} \ - hobbyhimmel_odoo_${{ env.CONTAINER_NAME_EXTENSION }} \ - /bin/bash -c " - cd /home/odoo/custom_addons/open_workshop/scripts && \ - python3 uninstall_rpc.py vvow_einweisungen" diff --git a/README.md b/README.md index 87195e0..d5a82c0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Open Workshop (open_workshop ows) -Dieses Odoo v13.0 Modul erweitert das POS- und Kontakt-Modul um Funktionen für offene Werkstätten (FabLabs, Makerspaces etc.) und dient der Verwaltung von Maschinen, Naschinen Einweisungen Produkten, Maschinen Nutzungsprodukten und Zugangsberechtigungen zu den Maschinen. +Dieses Odoo v17.0 Modul erweitert das POS- und Kontakt-Modul um Funktionen für offene Werkstätten (FabLabs, Makerspaces etc.) und dient der Verwaltung von Maschinen, Naschinen Einweisungen Produkten, Maschinen Nutzungsprodukten und Zugangsberechtigungen zu den Maschinen. ## Funktionen @@ -28,40 +28,10 @@ Dieses Odoo v13.0 Modul erweitert das POS- und Kontakt-Modul um Funktionen für ## Installation 1. Dieses Modul in den Custom-Addons-Ordner kopieren -2. Vor der Installation von open_worshop muss vvow_pos deinstalliert werden. Die Funktionalität von vvow_pos wird durch open_workshop ersetzt und erweitert. -3. ggf. muss die alte Datenbank manuell migiriert werden, es gibt ca 9 gelöscht res.partner auf die Verweise aus POS bestehen. Diese res.parnter müssen wieder hergestellt werden. Dazu gibt es ein Skript unter - ```folder - scripts/fix_missing_pos_partner.py - ``` - ```bash - opt/odoo/odoo/odoo-bin shell -d hobbyhimmel < scrpts/fix_missing_pos_partner.py - ``` -4. Odoo starten mit: - ```bash - odoo-bin -d deine_datenbank -u open_workshop - ``` -5. Alternativ im Backend unter Apps installieren - -## Automatische Migrationen - -Beim ersten Laden des Moduls werden folgende Migrationen durchgeführt: -- Bestehende `res.partner` erhalten automatisch `ows.user`-Eintrag (inkl. Übernahme alter Felder wie vvow_birthday, vvow_security, vvow_security_id, vvow_rfid. -- Alte Felder mit Maschinenfreigaben (`vvow_holz_*`, `vvow_metall_*`, `vvow_fablab_*`) werden in `ows.machine.access` übertragen - - inkl. Übernahme des Änderungsdatum aus `mail.message` wann der Nutzer die Einweisung erhalten hat (ist noch fehlerhaft) +2. Im Odoo Backend unter Apps installieren ## Entwicklerhinweise -### post_init_hook -Die Datei `post_init_hook.py` ruft automatisch nach der Installation folgende Methoden auf: -```python -res.partner.migrate_existing_partners() -res.partner.migrate_machine_access_from_old_fields() -``` - -### Datenimport -- Maschinenbereiche, Maschinen werden über `.xml`-Dateien in `data/` geladen -- Die Zuordnung von Maschine zu Einweisungsprodukten und Nutzungsprodukten muss derzeit noch manuell erstellt werden. Ein skript dafür folgt. - ## ToDos - Bearbeitung der Maschinenfreigaben im Backend - Automatische Erstellung von `mail.message` bei manueller Freigabe diff --git a/todo.md b/todo.md index 360c86c..a3f3009 100644 --- a/todo.md +++ b/todo.md @@ -1,4 +1,3 @@ [ ] Help System -[ ] Möglichkeit, Einweisungen manuell zu setzen? -[ ] Möglichkeit, Einweisungen von Personen im Backend zurückzusetzen (geht im Moment nur über die Datenbank direkt) -[ ] \ No newline at end of file +[x] Möglichkeit, Einweisungen manuell zu setzen? +[x] Möglichkeit, Einweisungen von Personen im Backend zurückzusetzen -> Über Kontak -> bearbeiten -> Tab Offene Werkstatt, In der Liste der Einweisungen die Einweisung über das Mülleimer Symbol den Eintrag löschen