Initial commit: aplicatie de cantarire si etichetare

Aplicatie Flask + SQLite pentru productie alimentara: cantarirea
componentelor unui produs finit si tiparirea etichetei prin QZ Tray.

- produse finite (retete) formate din componente cantarite
- designer vizual de etichete (mm/px, zona sigura, campuri variabile,
  cod QR cu continut din mai multe bucati)
- legare produs finit -> sablon de eticheta
- navigare pe doua taburi: Cantarire / Setari
- administrare: componente, produse finite, sabloane, campuri, istoric
- backup, resetare baza de date, checklist de pregatire, /healthz
- CLI de administrare si serviciu systemd pentru productie
- vendor/syncpulse-scale-bridge (GPL-3.0-or-later) pentru citirea cantarului
This commit is contained in:
2026-10-18 23:38:45 +03:00
commit bff6d70b17
107 changed files with 21428 additions and 0 deletions
+29
View File
@@ -0,0 +1,29 @@
[Unit]
Description=Cantarire si etichetare (Flask/waitress)
Documentation=file:///opt/cantarire-etichetare/README.md
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=cantarire
Group=cantarire
# Necesar pentru accesul la adaptorul USB-serial al cantarului (daca e cazul).
SupplementaryGroups=dialout
WorkingDirectory=/opt/cantarire-etichetare
Environment=PYTHONUNBUFFERED=1
EnvironmentFile=-/etc/cantarire.env
ExecStart=/opt/cantarire-etichetare/.venv/bin/python run.py --production --port 5000
Restart=on-failure
RestartSec=3
TimeoutStopSec=15
# Scriere doar in folderul de date si in /tmp.
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=true
ReadWritePaths=/var/lib/cantarire
[Install]
WantedBy=multi-user.target
+34
View File
@@ -0,0 +1,34 @@
@echo off
REM Pornire pe Windows (statia cu cantarul si imprimanta termica).
REM Ruleaza o singura data: python -m venv .venv
REM .venv\Scripts\pip install -r requirements.txt
setlocal
cd /d "%~dp0.."
if not exist ".venv\Scripts\python.exe" (
echo [!] Nu exista .venv. Ruleaza intai:
echo python -m venv .venv
echo .venv\Scripts\pip install -r requirements.txt
pause
exit /b 1
)
REM Cheia de sesiune: genereaz-o o data si pastreaz-o intre reporniri.
if "%CANTARIRE_SECRET_KEY%"=="" (
if exist "instance\secret.key" (
set /p CANTARIRE_SECRET_KEY=<instance\secret.key
) else (
for /f "delims=" %%k in ('.venv\Scripts\python.exe -c "import secrets;print(secrets.token_urlsafe(48))"') do set "CANTARIRE_SECRET_KEY=%%k"
if not exist "instance" mkdir "instance"
> instance\secret.key echo %CANTARIRE_SECRET_KEY%
)
)
echo.
echo Cantarire ^& etichetare - http://127.0.0.1:5000/
echo Inchide fereastra pentru a opri serverul.
echo.
.venv\Scripts\python.exe run.py --production --host 127.0.0.1 --port 5000
pause