11 Commits

8 changed files with 72 additions and 25 deletions

View File

@@ -1,8 +1,22 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -e
if [ "$VIRTUAL_ENV" == "" ] if [ "$VIRTUAL_ENV" == "" ]
then then
source venv/bin/activate if [ ! -d "./venv/bin" ]; then
echo "venv not found, trying to create one"
python3 -m venv venv
fi
source venv/bin/activate
fi fi
if [[ ! $(pip3 freeze | grep pyinstaller) ]];
then
echo "pyinstaller not found"
pip3 install -r requirements.txt
fi
version=$(cat version.txt) version=$(cat version.txt)
echo "current version set to: $version" echo "current version set to: $version"
new_version="" new_version=""
@@ -15,6 +29,7 @@ sed -i "s/VERSION = '[0-9]\.[0-9].[0-9]\w'/VERSION = '$(cat version.txt)'/g" src
sed -i "s/Version: [0-9]\.[0-9].[0-9]\w/Version: $(cat version.txt)/g" deb-package/brovski-adressetiketten/DEBIAN/control sed -i "s/Version: [0-9]\.[0-9].[0-9]\w/Version: $(cat version.txt)/g" deb-package/brovski-adressetiketten/DEBIAN/control
pyinstaller --clean --onefile src/brovski-adress-etiketten-verwaltung.py pyinstaller --clean --onefile src/brovski-adress-etiketten-verwaltung.py
mkdir -p deb-package/brovski-adressetiketten/usr/local/bin
cp dist/brovski-adress-etiketten-verwaltung deb-package/brovski-adressetiketten/usr/local/bin/brovski-adressetiketten cp dist/brovski-adress-etiketten-verwaltung deb-package/brovski-adressetiketten/usr/local/bin/brovski-adressetiketten
dpkg-deb --build deb-package/brovski-adressetiketten dpkg-deb --build deb-package/brovski-adressetiketten
mv deb-package/brovski-adressetiketten.deb ./ mv deb-package/brovski-adressetiketten.deb ./

View File

@@ -1,5 +1,5 @@
Package: brovski-adressetiketten Package: brovski-adressetiketten
Version: 0.1.1b Version: 0.2.2b
Maintainer: Ovski Maintainer: Ovski
Architecture: all Architecture: all
Description: manage csv files for glables address labels Description: manage csv files for glables address labels

5
requirements.txt Normal file
View File

@@ -0,0 +1,5 @@
altgraph==0.17.4
packaging==25.0
pyinstaller==6.16.0
pyinstaller-hooks-contrib==2025.9
setuptools==80.9.0

View File

@@ -1,3 +1,4 @@
import _csv
import csv import csv
import os import os
import sys import sys
@@ -8,18 +9,19 @@ from tkinter import ttk
from config import Config from config import Config
from model import Model from model import Model
from src.connector import JSONConnector from connector import JSONConnector
from windows import SettingsWindow, EditRecord, show_error from windows import SettingsWindow, EditRecord, show_error
class Application: class Application:
def __init__(self): def __init__(self):
os.chdir(os.getcwd())
# tkinter settings # tkinter settings
x_offset = 700 x_offset = 700
y_offset = 200 y_offset = 200
width = 1050 width = 1050
height = 700 height = 700
VERSION = '0.1.1b' VERSION = '0.2.2b'
title = f"Brovski Adress-Etiketten Verwaltung {VERSION}" title = f"Brovski Adress-Etiketten Verwaltung {VERSION}"
self.root = tk.Tk(className="BrovskiAdressEtiketten") self.root = tk.Tk(className="BrovskiAdressEtiketten")
@@ -253,26 +255,29 @@ class Application:
if address["aktiv"] != "x": if address["aktiv"] != "x":
continue continue
for index in range(int(address["anzahl"])): for index in range(int(address["anzahl"])):
line = [] self.write_sender_to_csv(address, writer)
if address["firma"] != "": self.write_receiver_to_csv(address, writer)
line.append(address["firma"])
line.append(address["name"])
line.append(address["strasse"])
line.append(address["plzort"])
writer.writerow(line)
# todo: add "absender" to config parameters
line = []
line.append("Absender:")
line.append("Matthias Braun")
line.append("Wolfacherweg 1")
line.append("5724 Dürrenäsch")
writer.writerow(line)
except FileNotFoundError: except FileNotFoundError:
show_error(message_title="Unexpected error", show_error(message_title="Unexpected error",
message=f"Could not write file {self.csv_file}", message=f"Could not write file {self.csv_file}",
parent=self.root parent=self.root
) )
def write_receiver_to_csv(self, address: dict, csv_writer: _csv.writer):
receiver_line = []
if address["firma"] != "":
receiver_line.append(address["firma"])
receiver_line.append(address["name"])
receiver_line.append(address["strasse"])
receiver_line.append(address["plzort"])
csv_writer.writerow(receiver_line)
def write_sender_to_csv(self, address: dict, csv_writer: _csv.writer):
sender_line = []
for idx in range(4):
sender_line.append(self.config.get("absender", f"{idx}"))
csv_writer.writerow(sender_line)
def populate_table(self, reload=True): def populate_table(self, reload=True):
if reload: if reload:
self.address_list = self.model.get_all() self.address_list = self.model.get_all()

View File

@@ -2,7 +2,6 @@ import json
import os import os
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
import config
from config import Config from config import Config

View File

@@ -1,4 +1,4 @@
from src.connector import Connector from connector import Connector
class Model: class Model:

View File

@@ -93,18 +93,23 @@ class EditRecord(Window):
class SettingsWindow(Window): class SettingsWindow(Window):
def __init__(self, parent, root: tk.Tk, config: Config): def __init__(self, parent, root: tk.Tk, config: Config):
super().__init__(parent, root) super().__init__(parent, root)
self.geometry(f"500x330+{self.root.winfo_x() + 20}+{self.root.winfo_y() + 20}") width = 500
height = 630
self.geometry(f"{width}x{height}+{self.root.winfo_x() + 20}+{self.root.winfo_y() + 20}")
self.config = config self.config = config
self.json_file = tk.StringVar() self.json_file = tk.StringVar()
self.csv_file = tk.StringVar() self.csv_file = tk.StringVar()
self.absender_line = [tk.StringVar() for idx in range(4)]
title = font.Font(family='Ubuntu Mono', size=20, weight=font.BOLD) title = font.Font(family='Ubuntu Mono', size=20, weight=font.BOLD)
tk.Label(self, text="Einstellungen", font=title).pack(pady=20) tk.Label(self, text="Einstellungen", font=title).pack(pady=20)
path_frame = tk.Frame(self)
path_frame.pack(pady=(10, 40))
tk.Label(path_frame, text="Datenpfad JSON Datei").grid(row=0, column=0) tk.Label(self, text="Datenpfad JSON Datei").pack()
path_frame = tk.Frame(self)
path_frame.pack(pady=(10, 10))
tk.Entry(path_frame, textvariable=self.json_file, width=50).grid(row=1, column=0) tk.Entry(path_frame, textvariable=self.json_file, width=50).grid(row=1, column=0)
tk.Button(path_frame, text="Pfad", command=lambda: self.set_json_path(self.json_file.get())).grid(row=1, tk.Button(path_frame, text="Pfad", command=lambda: self.set_json_path(self.json_file.get())).grid(row=1,
column=1) column=1)
@@ -113,6 +118,13 @@ class SettingsWindow(Window):
tk.Entry(path_frame, textvariable=self.csv_file, width=50).grid(row=3, column=0) tk.Entry(path_frame, textvariable=self.csv_file, width=50).grid(row=3, column=0)
tk.Button(path_frame, text="Pfad", command=lambda: self.set_csv_path(self.csv_file.get())).grid(row=3, column=1) tk.Button(path_frame, text="Pfad", command=lambda: self.set_csv_path(self.csv_file.get())).grid(row=3, column=1)
absender_frame = tk.Frame(self)
absender_frame.pack(pady=(10, 40))
tk.Label(absender_frame, text="Absender").pack(side=tk.TOP)
for idx in range(4):
tk.Entry(absender_frame, textvariable=self.absender_line[idx], width=50).pack(side=tk.TOP)
bottom_frame = tk.Frame(self) bottom_frame = tk.Frame(self)
bottom_frame.pack() bottom_frame.pack()
tk.Button(bottom_frame, text="Ok", command=self.ok).pack(side=tk.LEFT) tk.Button(bottom_frame, text="Ok", command=self.ok).pack(side=tk.LEFT)
@@ -149,6 +161,15 @@ class SettingsWindow(Window):
except NoOptionError: except NoOptionError:
self.config.set("csv", "path", "") self.config.set("csv", "path", "")
for idx in range(4):
try:
self.absender_line[idx].set(self.config.get(f"absender", f"{idx}"))
except NoSectionError:
self.config.add_section(f"line")
self.config.set("line", f"{idx}", "")
except NoOptionError:
self.config.set("line", f"{idx}", "")
def ok(self): def ok(self):
if self.json_file.get() == "" or self.csv_file.get() == "": if self.json_file.get() == "" or self.csv_file.get() == "":
show_error(message_title="Fehlerhafte Konfiguration", show_error(message_title="Fehlerhafte Konfiguration",
@@ -157,6 +178,8 @@ class SettingsWindow(Window):
return return
self.config.set("json", "path", self.json_file.get()) self.config.set("json", "path", self.json_file.get())
self.config.set("csv", "path", self.csv_file.get()) self.config.set("csv", "path", self.csv_file.get())
for i in range(4):
self.config.set("absender", f"{i}", f"{self.absender_line[i].get()}")
self.close_window() self.close_window()
def cancel(self): def cancel(self):

View File

@@ -1 +1 @@
0.1.1b 0.2.2b