- Added compact table styling to print_lost_labels page (smaller fonts, reduced padding) - Fixed production data import missing fields (production_order_line, line_number) - Added better error handling and logging for Excel file imports - Skip empty rows in production data import - Log all columns and columns with data for debugging
237 lines
9.1 KiB
Python
Executable File
237 lines
9.1 KiB
Python
Executable File
import mariadb
|
|
from flask import current_app
|
|
|
|
def get_db_connection():
|
|
"""Get database connection using external server configuration"""
|
|
settings_file = current_app.instance_path + '/external_server.conf'
|
|
settings = {}
|
|
with open(settings_file, 'r') as f:
|
|
for line in f:
|
|
line = line.strip()
|
|
# Skip empty lines and comments
|
|
if not line or line.startswith('#'):
|
|
continue
|
|
if '=' in line:
|
|
key, value = line.split('=', 1)
|
|
settings[key] = value
|
|
return mariadb.connect(
|
|
user=settings['username'],
|
|
password=settings['password'],
|
|
host=settings['server_domain'],
|
|
port=int(settings['port']),
|
|
database=settings['database_name']
|
|
)
|
|
|
|
def get_unprinted_orders_data(limit=100):
|
|
"""
|
|
Retrieve unprinted orders from the database for display
|
|
Returns list of order dictionaries where printed_labels != 1
|
|
"""
|
|
try:
|
|
import sys
|
|
sys.stderr.write(f"DEBUG print_module: get_unprinted_orders_data called with limit={limit}\n")
|
|
sys.stderr.flush()
|
|
|
|
conn = get_db_connection()
|
|
cursor = conn.cursor()
|
|
|
|
# Check if printed_labels column exists
|
|
cursor.execute("SHOW COLUMNS FROM order_for_labels LIKE 'printed_labels'")
|
|
column_exists = cursor.fetchone()
|
|
|
|
sys.stderr.write(f"DEBUG print_module: printed_labels column exists={bool(column_exists)}\n")
|
|
sys.stderr.flush()
|
|
|
|
if column_exists:
|
|
# Use printed_labels column
|
|
sys.stderr.write(f"DEBUG print_module: Executing query with printed_labels != 1\n")
|
|
sys.stderr.flush()
|
|
|
|
cursor.execute("""
|
|
SELECT id, comanda_productie, cod_articol, descr_com_prod, cantitate,
|
|
com_achiz_client, nr_linie_com_client, customer_name,
|
|
customer_article_number, open_for_order, line_number,
|
|
created_at, updated_at, printed_labels, data_livrare, dimensiune
|
|
FROM order_for_labels
|
|
WHERE printed_labels != 1
|
|
ORDER BY created_at DESC
|
|
LIMIT %s
|
|
""", (limit,))
|
|
else:
|
|
sys.stderr.write(f"DEBUG print_module: Executing fallback query (no printed_labels column)\n")
|
|
sys.stderr.flush()
|
|
|
|
# Fallback: get all orders if no printed_labels column
|
|
cursor.execute("""
|
|
SELECT id, comanda_productie, cod_articol, descr_com_prod, cantitate,
|
|
com_achiz_client, nr_linie_com_client, customer_name,
|
|
customer_article_number, open_for_order, line_number,
|
|
created_at, updated_at
|
|
FROM order_for_labels
|
|
ORDER BY created_at DESC
|
|
LIMIT %s
|
|
""", (limit,))
|
|
|
|
orders = []
|
|
rows = cursor.fetchall()
|
|
sys.stderr.write(f"DEBUG print_module: Query returned {len(rows)} rows\n")
|
|
sys.stderr.flush()
|
|
|
|
# Also write to file for debugging
|
|
try:
|
|
with open('/app/print_module_debug.log', 'w') as f:
|
|
f.write(f"Query returned {len(rows)} rows\n")
|
|
f.write(f"Column exists: {column_exists}\n")
|
|
if rows:
|
|
f.write(f"First row: {rows[0]}\n")
|
|
except:
|
|
pass
|
|
|
|
for row in rows:
|
|
if column_exists:
|
|
orders.append({
|
|
'id': row[0],
|
|
'comanda_productie': row[1],
|
|
'cod_articol': row[2],
|
|
'descr_com_prod': row[3],
|
|
'cantitate': row[4],
|
|
'com_achiz_client': row[5],
|
|
'nr_linie_com_client': row[6],
|
|
'customer_name': row[7],
|
|
'customer_article_number': row[8],
|
|
'open_for_order': row[9],
|
|
'line_number': row[10],
|
|
'created_at': row[11],
|
|
'updated_at': row[12],
|
|
'printed_labels': row[13],
|
|
'data_livrare': row[14] or '-',
|
|
'dimensiune': row[15] or '-'
|
|
})
|
|
else:
|
|
orders.append({
|
|
'id': row[0],
|
|
'comanda_productie': row[1],
|
|
'cod_articol': row[2],
|
|
'descr_com_prod': row[3],
|
|
'cantitate': row[4],
|
|
'com_achiz_client': row[5],
|
|
'nr_linie_com_client': row[6],
|
|
'customer_name': row[7],
|
|
'customer_article_number': row[8],
|
|
'open_for_order': row[9],
|
|
'line_number': row[10],
|
|
'created_at': row[11],
|
|
'updated_at': row[12],
|
|
# Add default values for missing columns
|
|
'data_livrare': '-',
|
|
'dimensiune': '-',
|
|
'printed_labels': 0
|
|
})
|
|
|
|
conn.close()
|
|
return orders
|
|
|
|
except Exception as e:
|
|
import sys
|
|
import traceback
|
|
error_trace = traceback.format_exc()
|
|
|
|
sys.stderr.write(f"ERROR in get_unprinted_orders_data: {e}\n{error_trace}\n")
|
|
sys.stderr.flush()
|
|
|
|
# Write to file
|
|
try:
|
|
with open('/app/print_module_error.log', 'w') as f:
|
|
f.write(f"ERROR: {e}\n")
|
|
f.write(f"Traceback:\n{error_trace}\n")
|
|
except:
|
|
pass
|
|
|
|
print(f"Error retrieving unprinted orders: {e}")
|
|
return []
|
|
|
|
def get_printed_orders_data(limit=100):
|
|
"""
|
|
Retrieve printed orders from the database for display
|
|
Returns list of order dictionaries where printed_labels = 1
|
|
"""
|
|
try:
|
|
conn = get_db_connection()
|
|
cursor = conn.cursor()
|
|
|
|
# Check if printed_labels column exists
|
|
cursor.execute("SHOW COLUMNS FROM order_for_labels LIKE 'printed_labels'")
|
|
column_exists = cursor.fetchone()
|
|
|
|
if column_exists:
|
|
# Get orders where printed_labels = 1
|
|
cursor.execute("""
|
|
SELECT id, comanda_productie, cod_articol, descr_com_prod, cantitate,
|
|
com_achiz_client, nr_linie_com_client, customer_name,
|
|
customer_article_number, open_for_order, line_number,
|
|
created_at, updated_at, printed_labels, data_livrare, dimensiune
|
|
FROM order_for_labels
|
|
WHERE printed_labels = 1
|
|
ORDER BY updated_at DESC
|
|
LIMIT %s
|
|
""", (limit,))
|
|
else:
|
|
# Fallback: get all orders if no printed_labels column
|
|
cursor.execute("""
|
|
SELECT id, comanda_productie, cod_articol, descr_com_prod, cantitate,
|
|
com_achiz_client, nr_linie_com_client, customer_name,
|
|
customer_article_number, open_for_order, line_number,
|
|
created_at, updated_at
|
|
FROM order_for_labels
|
|
ORDER BY created_at DESC
|
|
LIMIT %s
|
|
""", (limit,))
|
|
|
|
orders = []
|
|
for row in cursor.fetchall():
|
|
if column_exists:
|
|
orders.append({
|
|
'id': row[0],
|
|
'comanda_productie': row[1],
|
|
'cod_articol': row[2],
|
|
'descr_com_prod': row[3],
|
|
'cantitate': row[4],
|
|
'com_achiz_client': row[5],
|
|
'nr_linie_com_client': row[6],
|
|
'customer_name': row[7],
|
|
'customer_article_number': row[8],
|
|
'open_for_order': row[9],
|
|
'line_number': row[10],
|
|
'created_at': row[11],
|
|
'updated_at': row[12],
|
|
'printed_labels': row[13],
|
|
'data_livrare': row[14] or '-',
|
|
'dimensiune': row[15] or '-'
|
|
})
|
|
else:
|
|
orders.append({
|
|
'id': row[0],
|
|
'comanda_productie': row[1],
|
|
'cod_articol': row[2],
|
|
'descr_com_prod': row[3],
|
|
'cantitate': row[4],
|
|
'com_achiz_client': row[5],
|
|
'nr_linie_com_client': row[6],
|
|
'customer_name': row[7],
|
|
'customer_article_number': row[8],
|
|
'open_for_order': row[9],
|
|
'line_number': row[10],
|
|
'created_at': row[11],
|
|
'updated_at': row[12],
|
|
# Add default values for missing columns
|
|
'data_livrare': '-',
|
|
'dimensiune': '-',
|
|
'printed_labels': 0
|
|
})
|
|
|
|
conn.close()
|
|
return orders
|
|
|
|
except Exception as e:
|
|
print(f"Error retrieving printed orders: {e}")
|
|
return [] |