Watch
1
0
Fork
You've already forked Seyyed_arc
0
forked from hesabix/arc
Seyyed_arc/hesabixAPI/scripts/fix_zohal_account_code.py

147 lines
5.5 KiB
Python
Executable file

#!/usr/bin/env python3
"""
اسکریپت مستقیم برای اصلاح کد حساب هزینه سرویس‌های استعلامات
این اسکریپت تغییرات را مستقیماً در دیتابیس اعمال می‌کند
"""
import sys
from pathlib import Path
# اضافه کردن مسیر پروژه به sys.path
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root))
from sqlalchemy.orm import Session
from adapters.db.session import SessionLocal
from adapters.db.models.account import Account
from sqlalchemy import and_, text
from datetime import datetime
def fix_zohal_account_code(db: Session) -> bool:
"""اصلاح کد حساب هزینه سرویس‌های استعلامات"""
try:
# 1. برگرداندن حساب 70903 به نام اصلی "جرائم دیرکرد بانکی" (اگر تغییر کرده باشد)
account_70903 = db.query(Account).filter(
and_(
Account.code == "70903",
Account.business_id.is_(None)
)
).first()
if account_70903 and account_70903.name != "جرائم دیرکرد بانکی":
print(f"🔄 برگرداندن حساب 70903 از '{account_70903.name}' به 'جرائم دیرکرد بانکی'")
account_70903.name = "جرائم دیرکرد بانکی"
account_70903.updated_at = datetime.utcnow()
db.flush()
print("✅ حساب 70903 اصلاح شد")
elif account_70903:
print("✅ حساب 70903 قبلاً با نام صحیح ('جرائم دیرکرد بانکی') تنظیم شده است")
else:
print("⚠️ حساب 70903 یافت نشد")
# 2. ایجاد یا به‌روزرسانی حساب 70509
account_705 = db.query(Account).filter(
and_(
Account.code == "705",
Account.business_id.is_(None)
)
).first()
if not account_705:
print("❌ حساب 705 (هزینه‌های عمومی) یافت نشد!")
return False
account_70509 = db.query(Account).filter(
and_(
Account.code == "70509",
Account.business_id.is_(None)
)
).first()
if not account_70509:
# ایجاد حساب 70509
print("📝 ایجاد حساب 70509 (هزینه سرویس‌های استعلامات)...")
account_70509 = Account(
name="هزینه سرویس‌های استعلامات",
code="70509",
account_type="accounting_document",
business_id=None,
parent_id=account_705.id,
created_at=datetime.utcnow(),
updated_at=datetime.utcnow()
)
db.add(account_70509)
db.flush()
print(f"✅ حساب 70509 ایجاد شد (ID: {account_70509.id})")
else:
# به‌روزرسانی حساب در صورت نیاز
updated = False
if account_70509.name != "هزینه سرویس‌های استعلامات":
print(f"🔄 به‌روزرسانی نام حساب 70509 از '{account_70509.name}' به 'هزینه سرویس‌های استعلامات'")
account_70509.name = "هزینه سرویس‌های استعلامات"
updated = True
if account_70509.account_type != "accounting_document":
print(f"🔄 به‌روزرسانی نوع حساب 70509 به 'accounting_document'")
account_70509.account_type = "accounting_document"
updated = True
if account_70509.parent_id != account_705.id:
print(f"🔄 به‌روزرسانی حساب والد 70509")
account_70509.parent_id = account_705.id
updated = True
if updated:
account_70509.updated_at = datetime.utcnow()
db.flush()
print(f"✅ حساب 70509 به‌روزرسانی شد (ID: {account_70509.id})")
else:
print(f"✅ حساب 70509 قبلاً به درستی تنظیم شده است (ID: {account_70509.id})")
db.commit()
return True
except Exception as e:
print(f"❌ خطا در اجرای تغییرات: {e}")
import traceback
traceback.print_exc()
db.rollback()
return False
def main():
"""تابع اصلی"""
print("=" * 80)
print("🔧 اصلاح کد حساب هزینه سرویس‌های استعلامات")
print("=" * 80)
print()
db: Session = SessionLocal()
try:
success = fix_zohal_account_code(db)
if success:
print()
print("=" * 80)
print("✅ تمام تغییرات با موفقیت اعمال شدند.")
print("=" * 80)
return 0
else:
print()
print("=" * 80)
print("❌ خطا در اعمال تغییرات.")
print("=" * 80)
return 1
except Exception as e:
print(f"\n❌ خطای غیرمنتظره: {e}")
import traceback
traceback.print_exc()
return 1
finally:
db.close()
if __name__ == "__main__":
sys.exit(main())