import mariadb from flask import current_app, request, render_template import csv def get_db_connection(): settings_file = current_app.instance_path + '/external_server.conf' settings = {} with open(settings_file, 'r') as f: for line in f: key, value = line.strip().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 ensure_warehouse_locations_table(): try: conn = get_db_connection() cursor = conn.cursor() cursor.execute("SHOW TABLES LIKE 'warehouse_locations'") result = cursor.fetchone() if not result: cursor.execute(''' CREATE TABLE IF NOT EXISTS warehouse_locations ( id BIGINT AUTO_INCREMENT PRIMARY KEY, location_code VARCHAR(12) NOT NULL, size INT, description VARCHAR(250) ) ''') conn.commit() conn.close() except Exception as e: print(f"Error ensuring warehouse_locations table: {e}") # Add warehouse-specific functions below def add_location(location_code, size, description): conn = get_db_connection() cursor = conn.cursor() try: cursor.execute( "INSERT INTO warehouse_locations (location_code, size, description) VALUES (?, ?, ?)", (location_code, size if size else None, description) ) conn.commit() conn.close() return "Location added successfully." except mariadb.IntegrityError: conn.close() return "Failed: Location code already exists." def get_locations(): conn = get_db_connection() cursor = conn.cursor() cursor.execute("SELECT id, location_code, size, description FROM warehouse_locations ORDER BY id DESC") locations = cursor.fetchall() conn.close() return locations def recreate_warehouse_locations_table(): conn = get_db_connection() cursor = conn.cursor() cursor.execute("DROP TABLE IF EXISTS warehouse_locations") cursor.execute(""" CREATE TABLE warehouse_locations ( id INT AUTO_INCREMENT PRIMARY KEY, location_code VARCHAR(12) UNIQUE NOT NULL, size INT, description VARCHAR(250) ) """) conn.commit() conn.close() def create_locations_handler(): message = None if request.method == "POST": location_code = request.form.get("location_code") size = request.form.get("size") description = request.form.get("description") message = add_location(location_code, size, description) locations = get_locations() return render_template("create_locations.html", locations=locations, message=message) def import_locations_csv_handler(): report = None locations = [] errors = [] if request.method == 'POST': file = request.files.get('csv_file') if file and file.filename.endswith('.csv'): content = file.read().decode('utf-8').splitlines() reader = csv.DictReader(content) locations = [(row.get('location_code'), row.get('size'), row.get('description')) for row in reader] if request.form.get('create_locations'): added = 0 failed = 0 errors = [] for loc in locations: location_code, size, description = loc result = add_location(location_code, size, description) if result and 'success' in result.lower(): added += 1 else: failed += 1 errors.append(location_code) report = f"{added} locations were added to warehouse_locations table. {failed} locations failed: {', '.join(errors)}" return render_template('import_locations_csv.html', report=report, locations=locations)