Files
SekiPOS/app.py
SekiDesu0 a5babd8131 modified: Dockerfile
modified:   README.md
	modified:   app.py
	new file:   blueprints/__init__.py
	new file:   blueprints/__pycache__/.gitignore
	new file:   blueprints/auth.py
	new file:   blueprints/finance.py
	new file:   blueprints/inventory.py
	new file:   blueprints/pos.py
	new file:   blueprints/sales.py
	new file:   core/__pycache__/.gitignore
	new file:   core/db.py
	new file:   core/db/.gitignore
	new file:   core/events.py
	new file:   core/openfood.py
	new file:   core/utils.py
	modified:   static/style.css
	modified:   templates/checkout.html
	modified:   templates/dicom.html
	modified:   templates/login.html
	modified:   templates/macros/base.html
	modified:   templates/macros/modals.html
	modified:   templates/macros/navbar.html
2026-05-21 00:05:31 -04:00

79 lines
2.4 KiB
Python

import os
import sys
import time
import threading
from flask import Flask, redirect, url_for, send_file, jsonify
from flask_login import login_required, current_user
from werkzeug.security import generate_password_hash
import webview
from flask_socketio import SocketIO
from core.utils import get_bundled_path, get_persistent_path
from core.db import init_db as init_db_core, get_db_connection
from core.events import socketio
from blueprints.auth import auth_bp, init_login_manager
from blueprints.finance import finance_bp
from blueprints.inventory import inventory_bp
from blueprints.pos import pos_bp
from blueprints.sales import sales_bp
# --- PYINSTALLER WINDOWED MODE FIX ---
if getattr(sys, 'frozen', False) and sys.platform == "win32":
log_file = os.path.join(os.path.dirname(sys.executable), 'seki_crash.log')
sys.stdout = open(log_file, 'w', encoding='utf-8')
sys.stderr = sys.stdout
# --- FLASK INIT ---
app = Flask(
__name__,
template_folder=get_bundled_path('templates'),
static_folder=get_bundled_path('static')
)
app.config['SECRET_KEY'] = 'seki_super_secret_key_99'
# --- DIRECTORY SETUP ---
DB_DIR = get_persistent_path('db')
os.makedirs(DB_DIR, exist_ok=True)
DB_FILE = os.path.join(DB_DIR, "pos_database.db")
app.config['DB_FILE'] = DB_FILE
CACHE_DIR = get_persistent_path(os.path.join('static', 'cache'))
os.makedirs(CACHE_DIR, exist_ok=True)
app.config['CACHE_DIR'] = CACHE_DIR
# --- BLUEPRINT REGISTRATION ---
app.register_blueprint(auth_bp)
app.register_blueprint(finance_bp)
app.register_blueprint(inventory_bp)
app.register_blueprint(pos_bp)
app.register_blueprint(sales_bp)
init_login_manager(app)
socketio.init_app(app, cors_allowed_origins="*", async_mode='threading')
# --- DATABASE INITIALIZATION ---
init_db_core(DB_FILE)
# --- ROOT ROUTE ---
@app.route('/')
@login_required
def index():
return redirect(url_for('inventory.inventory'))
# --- RUN FUNCTION ---
def start_server():
socketio.run(app, host='127.0.0.1', port=5000, log_output=False, allow_unsafe_werkzeug=True)
def run_standalone():
t = threading.Thread(target=start_server)
t.daemon = True
t.start()
time.sleep(2)
webview.create_window('SekiPOS', 'http://127.0.0.1:5000', width=1366, height=768, resizable=True, fullscreen=False, min_size=(800, 600), maximized=True)
webview.start(private_mode=False)
if __name__ == '__main__':
#run_standalone() # Uncomment for desktop app
socketio.run(app, host='0.0.0.0', port=5000, debug=True)