diff --git a/py_app/app/templates/create_locations.html b/py_app/app/templates/create_locations.html
new file mode 100644
index 0000000..469ac09
--- /dev/null
+++ b/py_app/app/templates/create_locations.html
@@ -0,0 +1,54 @@
+{% extends "base.html" %}
+{% block title %}Create Warehouse Locations{% endblock %}
+{% block content %}
+
+
+
+
+
+
Warehouse Locations
+
+
+
+ | ID |
+ Location Code |
+ Size |
+ Description |
+
+
+
+ {% for loc in locations %}
+
+ | {{ loc[0] }} |
+ {{ loc[1] }} |
+ {{ loc[2] }} |
+ {{ loc[3] }} |
+
+ {% endfor %}
+
+
+
+
+
+
+{% endblock %}
diff --git a/py_app/app/templates/import_locations_csv.html b/py_app/app/templates/import_locations_csv.html
new file mode 100644
index 0000000..5cc3a16
--- /dev/null
+++ b/py_app/app/templates/import_locations_csv.html
@@ -0,0 +1,71 @@
+{% extends "base.html" %}
+{% block title %}Import Warehouse Locations from CSV{% endblock %}
+{% block content %}
+
+
+
+
Import Locations from CSV
+
+
+
+
+
Preview Table
+
+
+
+ | Location Code |
+ Size |
+ Description |
+
+
+
+ {% if locations %}
+ {% for loc in locations %}
+
+ | {{ loc[0] }} |
+ {{ loc[1] }} |
+ {{ loc[2] }} |
+
+ {% endfor %}
+ {% else %}
+ | No CSV file uploaded yet. |
+ {% endif %}
+
+
+
+ {% if report %}
+
+
Import Report
+
{{ report }}
+
+ {% endif %}
+
+
+
+{% endblock %}
diff --git a/py_app/app/warehouse.py b/py_app/app/warehouse.py
new file mode 100644
index 0000000..ad70b1f
--- /dev/null
+++ b/py_app/app/warehouse.py
@@ -0,0 +1,112 @@
+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)