fix counter nazar, improve check, call button

This commit is contained in:
javad committed 2026-07-31 19:00:19 +03:30
1 parent 36364447c7
commit 04ddc701a3
6 files changed
+578 -223

No files matched your search

+79 -28
View File
@@ -2273,43 +2273,94 @@ def passCheck(request, articl_id):
@login_required(login_url='/panel/p_login/')
@permission_required('admin_panel.ViewStore', raise_exception=True)
def addSarresid(request, cs_id):
if request.method != 'POST':
return HttpResponseBadRequest("متد ارسالی نامعتبر است.")
try:
customerObj = Customer.objects.get(id=cs_id)
customerObj = get_object_or_404(Customer, id=cs_id)
sarrresidUNIX = request.POST.get('n_sarresidDateTime', None)
sarresidPrice = request.POST.get('n_sarresidPrice', None)
sarresidType = request.POST.get('n_sarresidType', None)
# دریافت فیلدهای اصلی
sarrresidUNIX = request.POST.get('n_sarresidDateTime')
sarresidPrice = request.POST.get('n_sarresidPrice')
sarresidType = request.POST.get('n_sarresidType')
sarResidDateTime01 = datetime.datetime.fromtimestamp(int(sarrresidUNIX)/1000.0)
# دریافت و پاک‌سازی فیلدهای چک (جلوگیری از باگ فاصله‌های خالی)
check_row_number = request.POST.get('check_row_number', '').strip()
check_sayyad_id = request.POST.get('check_sayyad_id', '').strip()
check_owner_name = request.POST.get('check_owner_name', '').strip()
check_owner_phone = request.POST.get('check_owner_phone', '').strip()
articleHesabDariObj = Article()
articleHesabDariObj.debit = int(sarresidPrice)
articleHesabDariObj.credit = 0
articleHesabDariObj.desc = "بدهی بابت ثبت "
# --- لایه اول: اعتبارسنجی فیلدهای پایه ---
if not sarrresidUNIX or not sarresidPrice or not sarresidType:
messages.error(request, "لطفا فیلدهای اصلی (مبلغ، نوع و تاریخ) را پر کنید.")
return redirect(request.META.get('HTTP_REFERER', '/'))
# --- لایه دوم: اعتبارسنجی دقیق و امنیتی فیلدهای چک ---
if sarresidType == "check":
articleHesabDariObj.desc += " چک به صورت دستی "
elif sarresidType == "nesiye":
articleHesabDariObj.desc += " نسیه به صورت دستی "
articleHesabDariObj.customer = customerObj
articleHesabDariObj.save()
if not check_row_number or not check_sayyad_id or not check_owner_name:
messages.error(request, "برای ثبت چک، وارد کردن شماره ردیف، شناسه صیادی و نام مالک اجباری است.")
return redirect(request.META.get('HTTP_REFERER', '/'))
# بررسی ۱۶ رقمی و عددی بودن شناسه صیادی
if not check_sayyad_id.isdigit() or len(check_sayyad_id) != 16:
messages.error(request, "شناسه صیادی باید دقیقاً ۱۶ رقم عدد باشد.")
return redirect(request.META.get('HTTP_REFERER', '/'))
# بررسی عددی بودن شماره تلفن (در صورت وارد شدن)
if check_owner_phone and not check_owner_phone.isdigit():
messages.error(request, "شماره تلفن مالک چک باید فقط شامل اعداد باشد.")
return redirect(request.META.get('HTTP_REFERER', '/'))
sarresidINC = Sarresid()
sarresidINC.customer = customerObj
sarresidINC.price = int(sarresidPrice)
sarresidINC.payStatus = "false"
#check ya nesiye
sarresidINC.type = sarresidType
sarresidINC.user = request.user
sarresidINC.sarresidDT = sarResidDateTime01
sarresidINC.save()
# تبدیل نوع داده‌ها با مدیریت خطا (جلوگیری از کرش سرور 500)
try:
sarResidDateTime01 = datetime.datetime.fromtimestamp(int(sarrresidUNIX) / 1000.0)
price_int = int(sarresidPrice.replace(',', ''))
except ValueError:
messages.error(request, "مقادیر تاریخ یا مبلغ نامعتبر است.")
return redirect(request.META.get('HTTP_REFERER', '/'))
return redirect(request.META.get('HTTP_REFERER'))
# --- لایه سوم: ذخیره‌سازی اتمیک (تضمین جامعیت داده‌ها) ---
with transaction.atomic():
# ۱. ثبت سند حسابداری
articleHesabDariObj = Article()
articleHesabDariObj.debit = price_int
articleHesabDariObj.credit = 0
articleHesabDariObj.customer = customerObj
articleHesabDariObj.user = request.user
if sarresidType == "check":
articleHesabDariObj.desc = f"بدهی بابت ثبت چک دستی (صیادی: {check_sayyad_id})"
elif sarresidType == "nesiye":
articleHesabDariObj.desc = "بدهی بابت ثبت نسیه دستی"
articleHesabDariObj.save()
except:
return HttpResponse("خطا در ثبت ")
# ۲. ثبت سررسید / چک
sarresidINC = Sarresid()
sarresidINC.customer = customerObj
sarresidINC.price = price_int
sarresidINC.payStatus = "false"
sarresidINC.type = sarresidType
sarresidINC.user = request.user
sarresidINC.sarresidDT = sarResidDateTime01
if sarresidType == "check":
sarresidINC.check_row_number = check_row_number
sarresidINC.check_sayyad_id = check_sayyad_id
sarresidINC.check_owner_name = check_owner_name
sarresidINC.check_owner_phone = check_owner_phone
sarresidINC.desc = f"صیادی: {check_sayyad_id} | مالک: {check_owner_name} | تلفن: {check_owner_phone or 'ندارد'}"
sarresidINC.save()
messages.success(request, "اطلاعات با موفقیت ثبت شد.")
return redirect(request.META.get('HTTP_REFERER', '/'))
except Exception as e:
logger.error(f"Error in addSarresid: {str(e)}", exc_info=True)
messages.error(request, "خطای سیستمی رخ داد. لطفا مجددا تلاش کنید.")
return redirect(request.META.get('HTTP_REFERER', '/'))
#return HttpResponse(customerObj.id)
@login_required(login_url='/panel/p_login/')
@permission_required('admin_panel.ViewStore', raise_exception=True)
def pardakhtNesiye(request, cs_id):