jlawyerorg / j-lawyer-org

Main project containing all submodules for building an entire j-lawyer.org system. Submit issues (bugs, enhancement requests) here.
https://www.j-lawyer.org
GNU Affero General Public License v3.0
50 stars 23 forks source link

[FEATURE] Rechnungserstellung mit GiroCode #1412

Closed stm9x9 closed 7 months ago

stm9x9 commented 2 years ago

Um Überweisungen zu erleichtern, gibt es eine Sonderform des QR-Codes, der SEPA-Informationen enthält. Die kann man einfach mit der Banking-App scannen und alle Daten sind ohne Abtippfehler und Arbeit in der Überweisungsmaske.

siehe zb https://www.youtube.com/watch?v=VPx0pCauW64

Da Name und Kontoverbindung ja schon in jl hinterlegt sind, könnte man beim Erzeugen einer Rechnung auch so einen Code erzeugen lassen.

Dafür gibt es mehrere Moglichkeiten:

@j-dimension 2024-02-08 ------------------------------------

10,25h

zukünftig könnte es auch sinnvoll sein, die Kontoinformationen nicht aus dem Kanzleiprofil zu nehmen, sondern die Bankverbindung am Nutzer zu hinterlegen (Bürogemeinschaften).

Dickmaulruessler commented 2 years ago

Ja, wäre witzig, wenn man das mit libreOffice einfügen könnte. Ich habe jetzt entdeckt, dass meine Sparkassen App das sogar auch schon einlesen könnte.

(funfact zur Digitalisierungsgeschwindigkeit in Deutschland: Das YouTube Video ist schon 7 Jahre alt)

PBaumfalk commented 2 years ago

Man kann einen Girocode per LibreOffice automatisiert einfügen?

Das dürfte ja dann auch für andere QR-Codes gehen?

Mit freundlichen Grüßen / Kindly Regards

Patrick Baumfalk Rechtsanwalt / Lawyer

Mobil: +49 1525 53 04 194 E-Mail: @.***

Baumfalk - Rechtsanwaltskanzlei Hauptstr. 195 50169 Kerpen

Tel.: +49 2273 40 68 504 Fax: +49 2273 59 03 565

E-Mail: @.*** Web: www.kanzlei-baumfalk.de

Sent by Mobile

Am 27.10.2021 um 06:57 schrieb Dickmaulruessler @.***>:

 Ja, wäre witzig, wenn man das mit libreOffice einfügen könnte. Ich habe jetzt entdeckt, dass meine Sparkassen App das sogar auch schon einlesen könnte.

(funfact zur Digitalisierungsgeschwindigkeit in Deutschland: Das YouTube Video ist schon 7 Jahre alt)

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android.

stm9x9 commented 2 years ago

Man kann einen Girocode per LibreOffice automatisiert einfügen?

nein. Man kann in LO nur allgemein einen QR-Code erzeugen. Siehe der Link zu der LO-Hilfe.

Dickmaulruessler commented 2 years ago

https://s-publicservices.de/leistungen/girocode Auch mit Java API.

Ich halte das erst einmal nur für eine lustige Spielerei. Und soweit ich das verstehe würde das auf lange Sicht ohnehin kein jl-Feature, sondern allenfalls eines für libre Office sein, oder?

stm9x9 commented 2 years ago

Nicht unbedingt. Es könnte Teil der Gebührenrechner sein, der dann nicht nur die Gebührentabelle ausgibt, sondern auch diesen QR-Code. LO alleine hat ja keinen Zugriff auf Kontonummer etc.

stm9x9 commented 1 year ago

noch eine API: https://zahlen-mit-code.com/#api

Paßt ja zur aktuellen Rechnungs-Offensive! :-D

stm9x9 commented 1 year ago

noch was zum Dateninhalt: https://de.wikipedia.org/wiki/EPC-QR-Code#Dateninhalt

j-dimension commented 1 year ago
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Base64;

import javax.imageio.ImageIO;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

public class GirocodeGenerator {

    public static void main(String[] args) throws WriterException, IOException {
        // Define invoice data
        String iban = "DE89370400440532013000";
        String bic = "COBADEFFXXX";
        String name = "John Doe";
        String amount = "10.50";
        String purpose = "Invoice 12345";

        // Encode invoice data as a Girocode string
        String girocodeData = String.format("BCD\n001\n1\nSCT\n%s\n%s\n%s\nEUR%s\n\n\n%s\n\n\n\n", iban, bic, name, amount, purpose);
        byte[] girocodeBytes = girocodeData.getBytes("ISO-8859-1");
        String girocodeBase64 = Base64.getEncoder().encodeToString(girocodeBytes);

        // Generate QR code from Girocode string
        QRCodeWriter qrWriter = new QRCodeWriter();
        BitMatrix matrix = qrWriter.encode(girocodeBase64, BarcodeFormat.QR_CODE, 300, 300, getHints());

        // Write QR code to file
        File qrFile = new File("girocode.png");
        Path qrPath = qrFile.toPath();
        MatrixToImageWriter.writeToPath(matrix, "PNG", qrPath);

        // Read QR code file as base64 string
        byte[] qrBytes = Files.readAllBytes(qrPath);
        String qrBase64 = Base64.getEncoder().encodeToString(qrBytes);

        System.out.println("Girocode data: " + girocodeData);
        System.out.println("Girocode base64: " + girocodeBase64);
        System.out.println("QR code base64: " + qrBase64);
    }

    private static java.util.Map<EncodeHintType,Object> getHints() {
        java.util.Map<EncodeHintType,Object> hints = new java.util.EnumMap<EncodeHintType,Object>(EncodeHintType.class);
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
        hints.put(EncodeHintType.CHARACTER_SET, "ISO-8859-1");
        return hints;
    }
}
j-dimension commented 7 months ago

benötigt Startup-Parameter

--add-exports=java.base/sun.security.action=ALL-UNNAMED --add-exports=java.desktop/com.sun.imageio.plugins.jpeg=ALL-UNNAMED --add-exports=java.desktop/com.sun.imageio.spi=ALL-UNNAMED

j-dimension commented 7 months ago

grafik

j-dimension commented 7 months ago

https://github.com/jlawyerorg/j-lawyer-org/assets/3729754/c7583c6a-4d9d-48e1-a464-070f1d8a8d02

j-dimension commented 7 months ago

{{BEL_GIROCODE}}

socram70 commented 7 months ago

Auch wenn es für die Produktivversion vermutlich nicht mehr benötigt werden wird, wäre es vermutlich noch hilfreich darauf hinzuweisen, wo man die Parameter einfügen muss. Ich würde es in der /etc/init.d/j-lawyer-server ab Zeile 167 unterbringen, korrekt? Hier ab Zeile 166:

if [ "$JBOSS_MODE" = "standalone" ]; then start-stop-daemon --start --user "$JBOSS_USER" \ --chuid "$JBOSS_USER" --chdir "$JBOSS_HOME" --pidfile "$JBOSS_PIDFILE" \ --exec "$JBOSS_SCRIPT" -- -c $JBOSS_CONFIG $JBOSS_OPTS >> "$JBOSS_CONSOLE_LOG" 2>&1 &