DatabaseBuilder / ut_ils.py
Reza-galaxy21's picture
Rename utils.py to ut_ils.py
d75bc53 verified
import pandas as pd
import json
import os
DB_FILE = "material_db.json"
def parse_excel_file(file_path):
try:
df = pd.read_excel(file_path, header=2)
except Exception as e:
raise ValueError(f"❌ خطا در خواندن فایل اکسل: {str(e)}")
column_mapping = {
"کد": ["کد فهرست بها", "کد"],
"عنوان": ["عنوان", "شرح کالا", "نام کالا"],
"تعداد": ["تعداد", "تعداد مورد نیاز"],
"واحد": ["واحد", "واحد شمارش", "نوع واحد"]
}
resolved_columns = {}
for key, options in column_mapping.items():
found = next((col for col in options if col in df.columns), None)
if not found:
raise ValueError(f"❌ ستون «{key}» در فایل پیدا نشد.")
resolved_columns[key] = found
materials = []
for _, row in df.iterrows():
try:
quantity = float(row[resolved_columns["تعداد"]])
if pd.isna(quantity) or quantity <= 0:
continue
except:
continue
material = {
"code": str(row[resolved_columns["کد"]]).strip(),
"description": str(row[resolved_columns["عنوان"]]).strip(),
"quantity": quantity,
"unit": str(row[resolved_columns["واحد"]]).strip()
}
materials.append(material)
if not materials:
raise ValueError("⚠️ هیچ ماده معتبری از فایل استخراج نشد.")
return materials
def load_projects():
if not os.path.exists(DB_FILE):
return [] # فایل وجود نداره؟ یعنی دیتابیس خالیه
with open(DB_FILE, "r", encoding="utf-8") as f:
try:
return json.load(f)
except json.JSONDecodeError:
return [] # خراب بود؟ فایل رو صفر در نظر بگیر
def save_project(description, materials):
projects = load_projects()
for p in projects:
if p.get("description") == description:
raise ValueError("⚠️ پروژه‌ای با این توصیف قبلاً ثبت شده است.")
projects.append({
"description": description,
"materials": materials
})
try:
with open(DB_FILE, "w", encoding="utf-8") as f:
json.dump(projects, f, indent=2, ensure_ascii=False)
except Exception as e:
raise ValueError(f"❌ خطا در ذخیره فایل JSON: {str(e)}")