From e257f6be18374737ddb82cde1077a950a6402aba Mon Sep 17 00:00:00 2001 From: Scheianu Ionut Date: Thu, 9 Oct 2025 01:10:05 +0300 Subject: [PATCH] updated to scan module --- py_app/app/__pycache__/routes.cpython-312.pyc | Bin 108559 -> 108908 bytes py_app/app/routes.py | 15 ++++-- py_app/app/static/css/scan.css | 50 ++++++++++++++++++ py_app/app/static/css/warehouse.css | 26 --------- py_app/app/templates/dashboard.html | 2 +- py_app/app/templates/main_page_scan.html | 25 +++++++++ py_app/app/templates/scan.html | 3 ++ 7 files changed, 89 insertions(+), 32 deletions(-) create mode 100644 py_app/app/static/css/scan.css create mode 100644 py_app/app/templates/main_page_scan.html diff --git a/py_app/app/__pycache__/routes.cpython-312.pyc b/py_app/app/__pycache__/routes.cpython-312.pyc index e80d9ebc3f8366e1748775921e2973f83958f47d..2dad955122b7895e88348ffee8f95821a14cd002 100644 GIT binary patch delta 12279 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

6QQq+}0uphjA74rk2Z4&3zo#uN{ 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 BedYiF diff --git a/py_app/app/routes.py b/py_app/app/routes.py index fff415c..7cecbde 100755 --- a/py_app/app/routes.py +++ b/py_app/app/routes.py @@ -7,7 +7,6 @@ from .models import User from . import db from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvas -from flask import Blueprint, render_template, request, redirect, url_for, flash import csv from .warehouse import add_location from app.settings import ( @@ -27,6 +26,12 @@ from .print_module import get_unprinted_orders_data bp = Blueprint('main', __name__) warehouse_bp = Blueprint('warehouse', __name__) +@bp.route('/main_scan') +def main_scan(): + if 'role' not in session or session['role'] not in ['superadmin', 'admin', 'administrator', 'scan']: + flash('Access denied: Scan users only.') + return redirect(url_for('main.dashboard')) + return render_template('main_page_scan.html') @bp.route('/', methods=['GET', 'POST']) def login(): @@ -1143,8 +1148,6 @@ For support, contact your system administrator. except Exception as e: print(f"Error creating extension package: {e}") - import traceback - traceback.print_exc() return jsonify({ 'success': False, 'error': str(e) @@ -1365,7 +1368,6 @@ Installation Time: ~5 minutes Maintenance Required: Zero (auto-starts with Windows) Ready to use immediately after installation!""" - zipf.writestr('INSTALLATION_README.txt', installation_readme) files_added += 1 @@ -1425,7 +1427,7 @@ def create_zero_dependency_service_package(): if not os.path.exists(service_dir): return jsonify({ 'success': False, - 'error': f'Windows service directory not found: {service_dir}' + 'error': f'Windows service directory not found: {service_dir}' }), 500 # Create static directory if it doesn't exist @@ -1715,6 +1717,9 @@ This package contains EVERYTHING needed to run the Quality Print Service: Quality Web App → Chrome Extension → Windows Service → Printer ``` +**Printing Methods (automatic fallback):** +1. Adobe Reader (silent printing) + **Printing Methods (automatic fallback):** 1. Adobe Reader (silent printing) 2. SumatraPDF (if Adobe unavailable) diff --git a/py_app/app/static/css/scan.css b/py_app/app/static/css/scan.css new file mode 100644 index 0000000..f98b3be --- /dev/null +++ b/py_app/app/static/css/scan.css @@ -0,0 +1,50 @@ +/* Scan Module Specific Styles */ + +.scan-form-card { + width: 380px; + max-width: 380px; + margin: 0 auto 20px auto; + max-height: 660px; + overflow-y: auto; + padding: 18px 18px 12px 18px; +} + +.scan-form-card form { + display: flex; + flex-direction: column; + gap: 4px; +} + +.scan-form-card label { + font-weight: 500; + margin-bottom: 1px; + font-size: 13px; +} + +.scan-form-card input[type="text"] { + padding: 5px 10px; + font-size: 13px; + margin-bottom: 2px; +} + +.scan-table-card { + overflow-x: auto; +} + +.scan-table { + width: 100%; + border-collapse: collapse; + margin-top: 20px; + font-size: 11px; +} + +.scan-table th, .scan-table td { + border: 1px solid #ddd; + padding: 8px; + text-align: center; +} + +.scan-table th { + background-color: #f4f4f4; + font-weight: bold; +} diff --git a/py_app/app/static/css/warehouse.css b/py_app/app/static/css/warehouse.css index 6ec10d3..12d0350 100644 --- a/py_app/app/static/css/warehouse.css +++ b/py_app/app/static/css/warehouse.css @@ -367,32 +367,6 @@ html, body { box-shadow: 0 2px 4px rgba(0,0,0,0.1); } -.scan-form-card { - max-width: 600px; - margin: 0 auto 20px auto; -} - -.scan-table-card { - overflow-x: auto; -} - -.scan-table { - width: 100%; - border-collapse: collapse; - margin-top: 20px; - font-size: 11px; -} - -.scan-table th, .scan-table td { - border: 1px solid #ddd; - padding: 8px; - text-align: center; -} - -.scan-table th { - background-color: #f4f4f4; - font-weight: bold; -} /* Location row selection styles */ .location-row { diff --git a/py_app/app/templates/dashboard.html b/py_app/app/templates/dashboard.html index c118aff..64b7ffa 100755 --- a/py_app/app/templates/dashboard.html +++ b/py_app/app/templates/dashboard.html @@ -9,7 +9,7 @@

Access Scanning Module

Final scanning module for production orders

- Launch Scanning Module + Launch Scanning Module
diff --git a/py_app/app/templates/main_page_scan.html b/py_app/app/templates/main_page_scan.html new file mode 100644 index 0000000..6f08716 --- /dev/null +++ b/py_app/app/templates/main_page_scan.html @@ -0,0 +1,25 @@ +{% extends "base.html" %} + +{% block title %}Main Scanning Module{% endblock %} + +{% block content %} +
+

Main Scanning Module

+

This is the main page for accessing scanning features.

+ +
+ +
+

Finish goods scanning

+

Access the scanning module for production orders.

+ Finish goods scanning +
+ +
+

View Scan History

+

Review previous scan records and results.

+ Coming Soon +
+
+
+{% endblock %} diff --git a/py_app/app/templates/scan.html b/py_app/app/templates/scan.html index 080043c..c18ea7f 100755 --- a/py_app/app/templates/scan.html +++ b/py_app/app/templates/scan.html @@ -1,5 +1,8 @@ {% extends "base.html" %} {% block title %}Scan Module{% endblock %} +{% block head %} + +{% endblock %} {% block content %}