Skip to main content
#P1581

POST /v2/account/bill2

Route Info

Method Endpoint Controller
POST /v2/account/bill2 AccountingController@accountBill2

شرح عملکرد دقیق (Deep Logic Analysis)

این متد صورت‌حساب، برخلاف نسخه ساده قبلی، دارای منطق "تفسیر و تجمیع" است که وابستگی شدیدی به توابع استاتیک کمکی دارد:

  • باگ حیاتی (Bug Alert): همچنان تاکید می‌کنم خط اول تابع حاوی dd($request->all()) است که باید حذف شود.
  • 1. استانداردسازی زمان (Time Normalization):
    ورودی‌های تاریخ توسط تابع checkDatetime استاندارد می‌شوند تا فرمت‌های مختلف (با جداکننده یا بدون آن) به یک فرمت واحد Y-m-d تبدیل شوند. این کار برای کوئری‌های دقیق روی Redis و دیتابیس حیاتی است.
  • 2. کشینگ توضیحات (Redis Description Caching):
    داخل حلقه پردازش تراکنش‌ها، سیستم ابتدا Redis را چک می‌کند (Redis::get('accountingpays' . $item->id)).
    اگر توضیحات سند قبلاً ساخته نشده باشد، تابع سنگین convertPayDetailsDbToTable صدا زده می‌شود و خروجی آن (شامل لینک‌های HTML و متن فرمت شده) در Redis ذخیره می‌شود تا در درخواست‌های بعدی سرعت بالا برود.
  • 3. تجمیع هوشمند کارتخوان‌ها (POS Aggregation Logic):
    این مهمترین تفاوت است. اگر نوع پرداخت pos (کارتخوان) باشد:
    • تراکنش‌ها به لیست اصلی Bills اضافه نمی‌شوند.
    • در عوض، در آرایه $PosTotal بر اساس تاریخ روز جمع زده می‌شوند.
    • در انتهای پردازش، یک آیتم واحد برای هر روز ساخته می‌شود که عنوان "سند مجموع کارتخوان‌های..." دارد و ریز تراکنش‌ها داخل فیلد subset قرار می‌گیرند (به نمونه خروجی دقت کنید).
  • 4. محاسبه مانده از قبل (Financial Pasts):
    توسط تابع getFinancialPasts، مانده حساب از ابتدای تاریخ بازه انتخابی محاسبه می‌شود. این تابع هوشمندانه بررسی می‌کند که آیا "سند دستی افتتاحیه" وجود دارد یا باید تمام تراکنش‌های سال‌های قبل را جمع بزند.
  • 5. کارمزدها (Wage Handling):
    اگر تراکنش شامل کارمزد بانکی باشد (wage > 0)، یک ردیف جداگانه در صورت‌حساب با عنوان "کارمزد نقل و انتقال بانکی" و تایپ wage درج می‌شود.

ساختار خروجی (Refined Response)

با توجه به فایل جدید، ساختار خروجی شامل فیلد subset برای تراکنش‌های تجمیعی است:

{
    "Bills": [
        {
            // نمونه تراکنش معمولی
            "serial_id": 15102,
            "system_serial": 204,
            "datetime": "1403/02/15 10:00:00",
            "credit": 0,
            "debit": 2500000,
            "details": {
                "title": {
                    "html": "سند پرداخت پایا...",
                    "text": "سند پرداخت پایا..."
                },
                "type": {
                    "subject": "pay",
                    "title": "سندمالی"
                }
            }
        },
        {
            // نمونه تراکنش تجمیعی (POS) - کشف شده در فایل جدید
            "serial_id": "1403021601", // ID ترکیبی از تاریخ
            "system_serial": "1403021601",
            "datetime": "1403/02/16 00:00:00",
            "credit": 50000000, // جمع کل کارتخوان‌های آن روز
            "debit": 0,
            "details": {
                "title": {
                    "html": "سند مجموع کارتخوان های 1403/02/16",
                    "text": "سند مجموع کارتخوان های 1403/02/16"
                },
                "type": {
                    "subject": "pos",
                    "title": "سند کارتخوان"
                }
            },
            "subset": [ // <--- بخش جدید اضافه شده
                {
                    "id": 5001,
                    "amount": 20000000,
                    "description": "تراکنش اول..."
                },
                {
                    "id": 5002,
                    "amount": 30000000,
                    "description": "تراکنش دوم..."
                }
            ]
        }
    ],
    "Total": {
        "credit": 50000000,
        "debit": 2500000,
        "balance": 47500000,
        "diagnosis": "Creditor"
    }
}

وابستگی‌های سیستمی (System Dependencies)

عملکرد صحیح این روت به وجود و صحت توابع زیر در فایل‌های Helper وابسته است:

نام تابع نقش کلیدی
StaticController::getAccountingTitles تشخیص سطح حساب (کل/معین/تفضیلی) برای تصمیم‌گیری در مورد نوع کوئری.
StaticController::convertPayDetailsDbToTable تولید HTML لینک‌دار برای رفرنس‌ها و تشخیص وضعیت چک‌ها.
StaticController::int2DateTime تبدیل اعداد دیتابیسی (مثل 14030215) به رشته نمایشی (1403/02/15).