"""توابع و ابزارهای مشترک لایهٔ ویوها.""" import datetime import logging from django.utils import timezone from persiantools.jdatetime import JalaliDate from persiantools import digits logger = logging.getLogger(__name__) class InventoryException(Exception): """خطای اختصاصی برای کنترل موجودی انبار""" pass def _safe_int(value, default=0): """تابع امن برای تبدیل مقادیر دریافتی از جاوااسکریپت به عدد""" if value is None: return default try: clean_val = str(value).strip() return int(clean_val) if clean_val else default except (ValueError, TypeError): return default def _parse_jalali_date(date_str): """تبدیل امن تاریخ ارسالی از pDatepicker به میلادی""" if not date_str or not str(date_str).strip(): return None try: clean_date = digits.fa_to_en(digits.ar_to_fa(str(date_str).strip())) y, m, d = map(int, clean_date.split("/")) return JalaliDate(y, m, d).to_gregorian() except Exception as e: logger.warning(f"Error parsing Jalali date '{date_str}': {e}") return None def _parse_timestamp(ts_value): """تبدیل یونیکس تایم‌استمپ‌های ارسالی از جاوااسکریپت""" if not ts_value: return None try: # تبدیل میلی‌ثانیه جاوااسکریپت به ثانیه پایتون return datetime.datetime.fromtimestamp(int(ts_value) / 1000.0, tz=timezone.get_current_timezone()) except (ValueError, TypeError): return None