fix counter nazar, improve check, call button
This commit is contained in:
1 parent
36364447c7
commit
04ddc701a3
6 files changed
+578
-223
No files matched your search
+79
-28
@@ -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):
|
||||
|
||||
Reference in new issue
Block a user