6.1 KiB
Executable file
6.1 KiB
Executable file
رفع مشکل ایجاد مشتریهای تکراری "مشتری ناشناس" در فاکتور سریع
🔍 مشکل شناسایی شده
مشکلات اصلی:
-
عدم تولید کد برای مشتری ناشناس: در تابع
get_or_create_anonymous_customer، مشتری جدید مستقیماً باPerson(...)ایجاد میشد بدون اینکه کد تولید شود. این باعث میشد:- کد مشتری
Noneباشد - کد با تنظیمات کسبوکار مطابقت نداشته باشد
- چند مشتری با نام یکسان و کد
Noneایجاد شوند
- کد مشتری
-
عدم استفاده از
create_person: به جای استفاده از تابعcreate_personکه کد را به درستی تولید میکند و از تنظیمات کسبوکار استفاده میکند، مستقیماً Person ایجاد میشد. -
جستجوی ناکافی: جستجو فقط بر اساس
alias_nameانجام میشد و اولویت با مشتریهایی که کد دارند در نظر گرفته نمیشد.
✅ راهحل پیادهسازی شده
1. استفاده از create_person برای تولید صحیح کد
قبل:
customer = Person(
business_id=int(business_id),
alias_name=name_fa,
person_types=json.dumps([PersonType.CUSTOMER.value]),
)
db.add(customer)
db.flush()
db.commit()
بعد:
person_data = PersonCreateRequest(
alias_name=name_fa,
person_types=[PersonType.CUSTOMER],
code=None, # None = تولید خودکار کد
)
result = create_person(db, int(business_id), person_data)
customer_id = result.get("id")
2. بهبود جستجوی مشتری ناشناس
قبل:
customer = db.query(Person).filter(
and_(
Person.business_id == int(business_id),
Person.alias_name == name_fa,
Person.person_types.like(f'%{PersonType.CUSTOMER.value}%'),
)
).first()
بعد:
# اولویت با مشتریهایی که کد دارند
customer = db.query(Person).filter(
and_(
Person.business_id == int(business_id),
Person.alias_name == name_fa,
Person.person_types.like(f'%{PersonType.CUSTOMER.value}%'),
Person.code.isnot(None), # اولویت با مشتریهایی که کد دارند
)
).first()
# اگر مشتری با کد پیدا نشد، مشتری بدون کد را جستجو کن
if not customer:
customer = db.query(Person).filter(
and_(
Person.business_id == int(business_id),
Person.alias_name == name_fa,
Person.person_types.like(f'%{PersonType.CUSTOMER.value}%'),
)
).first()
3. Import های جدید
from adapters.api.v1.schema_models.person import PersonCreateRequest
from app.services.person_service import create_person
📋 تغییرات فایل
/var/www/ark/hesabixAPI/app/services/quick_sales_service.py
-
افزودن Import ها (خط 11-13):
PersonCreateRequestبرای ساخت درخواست ایجاد مشتریcreate_personبرای استفاده از تابع استاندارد ایجاد مشتری
-
بهبود جستجو (خط 187-206):
- اولویت با مشتریهایی که کد دارند
- اگر پیدا نشد، مشتری بدون کد را جستجو میکند
-
استفاده از
create_person(خط 211-236):- استفاده از
PersonCreateRequestبرای ساخت درخواست - استفاده از
create_personبرای ایجاد مشتری با کد صحیح - مدیریت خطاها در صورت عدم موفقیت
- استفاده از
🎯 مزایای راهحل
- ✅ تولید صحیح کد: کد مشتری به صورت خودکار و مطابق با تنظیمات کسبوکار تولید میشود
- ✅ جلوگیری از تکراری: استفاده از
create_personکه بررسی تکراری بودن کد را انجام میدهد - ✅ سازگاری با سیستم: کد مشتری با سایر مشتریها در سیستم سازگار است
- ✅ اولویتبندی صحیح: اولویت با مشتریهایی که کد دارند
- ✅ مدیریت خطا: خطاهای مناسب در صورت عدم موفقیت
🔄 رفتار جدید
- اول: بررسی مشتری پیشفرض از تنظیمات
- دوم: جستجوی مشتری با نام "مشتری ناشناس" که کد دارد
- سوم: جستجوی مشتری با نام "مشتری ناشناس" بدون کد (برای سازگاری با مشتریهای قدیمی)
- چهارم: ایجاد مشتری جدید با استفاده از
create_personکه کد را به درستی تولید میکند
⚠️ نکات مهم
- مشتریهای قدیمی که با کد
Noneایجاد شدهاند همچنان کار میکنند - مشتریهای جدید همیشه کد دارند
- کد مشتری مطابق با تنظیمات کسبوکار تولید میشود (max_code + 1)
- از این به بعد، مشتریهای تکراری ایجاد نمیشوند
✅ تست
برای تست این تغییرات:
- تنظیمات فروش سریع را بررسی کنید
- یک فاکتور سریع بدون انتخاب مشتری ایجاد کنید
- بررسی کنید که مشتری ناشناس با کد صحیح ایجاد شده است
- بررسی کنید که مشتریهای تکراری ایجاد نمیشوند
📝 خلاصه
مشکل ایجاد مشتریهای تکراری "مشتری ناشناس" با کد None برطرف شد. حالا:
- ✅ کد مشتری به درستی تولید میشود
- ✅ از تابع استاندارد
create_personاستفاده میشود - ✅ جستجو بهبود یافته و اولویت با مشتریهایی که کد دارند
- ✅ مشتریهای تکراری ایجاد نمیشوند