انتقل إلى المحتوى الرئيسي

فواتير العملاء

المعاملات يتم تجميعها معًا لتشكيل فاتورة، تُرسل إلى العميل للدفع.

تحتوي الفواتير على تاريخ بدء وتاريخ انتهاء، وهو الفترة التي تغطيها الفاتورة، وتاريخ استحقاق، وهو التاريخ الذي تكون فيه الفاتورة مستحقة للدفع.

إنشاء فاتورة برو forma

يمكن للنظام إنشاء الفواتير تلقائيًا، على سبيل المثال، عندما يتم فوتره خدمة، يتم إنشاء فاتورة للتكلفة التجزئة، أو يمكن إنشاؤها يدويًا، على سبيل المثال، إذا طلب العميل نسخة من فاتورة، أو إذا تم فوتره العميل لرسوم لمرة واحدة.

تكون فواتير العملاء مُعدة بالكامل باستخدام Mailjet ويمكن تخصيصها لتشمل شعار الشركة، والعنوان، وتفاصيل الدفع، ويمكن إرسالها إلى العميل عبر البريد الإلكتروني، أو تنزيلها كملف PDF.

سجل النشاط

تخصيص قوالب الفواتير

يستخدم OmniCRM قوالب HTML مع Jinja2 لتوليد الفواتير. يمكنك تخصيص تصميم الفاتورة، والعلامة التجارية، والألوان، والتخطيط بالكامل.

موقع قالب الفاتورة

يتم تخزين قوالب الفواتير في OmniCRM-API/invoice_templates/

القوالب الافتراضية:

  • norfone_invoice_template.html - قالب فاتورة عينة
  • cifi_invoice_template.html - مثال على قالب بديل

التكوين:

يتم تحديد قالب الفاتورة النشط في OmniCRM-API/crm_config.yaml:

invoice:
template_filename: 'norfone_invoice_template.html'

المتغيرات المتاحة في القالب

تتمتع قوالب الفواتير بالوصول إلى المتغيرات التالية من Jinja2:

معلومات الفاتورة:

  • {{ invoice_number }} - معرف الفاتورة الفريد (مثل INV-2025-001234)
  • {{ date }} - تاريخ إصدار الفاتورة (تنسيق ISO: 2025-01-10T12:00:00)
  • {{ due_date }} - تاريخ استحقاق الدفع (مثل 2025-02-10)
  • {{ start_date }} - تاريخ بدء فترة الفوترة
  • {{ end_date }} - تاريخ انتهاء فترة الفوترة
  • {{ total_amount }} - إجمالي مبلغ الفاتورة قبل الضريبة (رقمي)
  • {{ total_tax }} - إجمالي مبلغ الضريبة المحسوب من جميع المعاملات (رقمي)

معلومات العميل:

  • {{ client.name }} - الاسم الكامل للعميل أو اسم الشركة
  • {{ client.address.address_line_1 }} - عنوان السطر 1
  • {{ client.address.address_line_2 }} - عنوان السطر 2
  • {{ client.address.city }} - المدينة
  • {{ client.address.state }} - الولاية/المقاطعة
  • {{ client.address.zip_code }} - الرمز البريدي
  • {{ client.address.country }} - الدولة

عناصر خط المعاملات:

تكرار عبر المعاملات باستخدام:

{% for sub_transaction in transactions %}
<tr>
<td>{{ sub_transaction.transaction_id }}</td>
<td>{{ sub_transaction.created.split("T")[0] }}</td>
<td>{{ sub_transaction.title }}</td>
<td>{{ sub_transaction.description }}</td>
<td>${{ "%.2f"|format(sub_transaction.retail_cost) }}</td>
</tr>
{% endfor %}

حقول المعاملة:

  • sub_transaction.transaction_id - معرف المعاملة
  • sub_transaction.created - تاريخ/وقت المعاملة
  • sub_transaction.title - عنوان المعاملة
  • sub_transaction.description - الوصف التفصيلي
  • sub_transaction.retail_cost - مبلغ عنصر الخط
  • sub_transaction.tax_percentage - نسبة الضريبة المطبقة (مثل 10 لنسبة 10%)
  • sub_transaction.tax_amount - مبلغ الضريبة المحسوب بالدولار

عرض الضريبة في القوالب:

<td>
{% if sub_transaction.tax_amount and sub_transaction.tax_amount > 0 %}
${{ "%.2f"|format(sub_transaction.tax_amount) }} ({{ sub_transaction.tax_percentage }}%)
{% else %}
-
{% endif %}
</td>

إنشاء قالب فاتورة مخصص

الخطوة 1: نسخ القالب الحالي

cd OmniCRM-API/invoice_templates/
cp norfone_invoice_template.html your_company_invoice_template.html

الخطوة 2: تخصيص HTML/CSS

قم بتحرير your_company_invoice_template.html لتتناسب مع علامتك التجارية:

مجالات التخصيص الرئيسية:

  1. شعار الشركة والعلامة التجارية

    <!-- استبدل بعنوان شعارك -->
    <img src="https://yourcompany.com/logo.png" alt="Your Company" width="200">

    <!-- تحديث اسم الشركة -->
    <h1>Your Company Name</h1>
  2. نظام الألوان

    <style>
    /* اللون الأساسي للعلامة التجارية */
    .navbar {
    background: linear-gradient(to bottom right, #your-color-1, #your-color-2);
    }

    /* رؤوس الجداول */
    .table thead th {
    background-color: #your-brand-color !important;
    color: white !important;
    }

    /* الأزرار والروابط */
    .btn-primary {
    background-color: #your-brand-color;
    }
    </style>
  3. معلومات الشركة في التذييل

    <footer>
    <p>Your Company Name</p>
    <p>123 Business Street, City, Country</p>
    <p>Phone: +1-555-123-4567 | Email: billing@yourcompany.com</p>
    <p>ABN/Tax ID: 12345678900</p>
    </footer>
  4. تعليمات الدفع

    <div class="payment-info">
    <h3>طرق الدفع</h3>
    <p><strong>عبر الإنترنت:</strong> الدفع على https://yourcompany.com/pay</p>
    <p><strong>تحويل بنكي:</strong></p>
    <ul>
    <li>اسم الحساب: Your Company Ltd</li>
    <li>BSB: 123-456</li>
    <li>رقم الحساب: 987654321</li>
    <li>المرجع: {{ invoice_number }}</li>
    </ul>
    </div>
  5. الشروط والأحكام

    <div class="terms">
    <h4>شروط الدفع</h4>
    <p>الدفع مستحق خلال 30 يومًا من تاريخ الفاتورة.</p>
    <p>رسوم التأخير: 2% شهريًا على الأرصدة المتأخرة.</p>
    <p>للاستفسارات المتعلقة بالفوترة: billing@yourcompany.com</p>
    </div>

الخطوة 3: تحديث التكوين

قم بتحرير OmniCRM-API/crm_config.yaml:

invoice:
template_filename: 'your_company_invoice_template.html'

الخطوة 4: إعادة تشغيل API

cd OmniCRM-API
sudo systemctl restart omnicrm-api

الخطوة 5: اختبار إنشاء الفاتورة

  1. انتقل إلى عميل لديه معاملات
  2. قم بإنشاء فاتورة اختبار
  3. قم بتنزيل PDF للتحقق من التنسيق
  4. أرسل الفاتورة إلى نفسك لاختبار تسليم البريد الإلكتروني

التخصيص المتقدم

المحتوى الشرطي:

استخدم الشروط في Jinja2 لإظهار/إخفاء المحتوى:

{% if total_amount > 1000 %}
<div class="high-value-notice">
<p><strong>ملاحظة:</strong> رصيد كبير - خطة دفع متاحة عند الطلب.</p>
</div>
{% endif %}

{% if client.address.country == "Australia" %}
<p>شامل GST: ${{ "%.2f"|format(total_amount * 0.10) }}</p>
{% endif %}

دعم متعدد اللغات:

إنشاء قوالب خاصة باللغة:

invoice_template_en.html
invoice_template_es.html
invoice_template_fr.html

تكوين بناءً على تفضيل لغة العميل.

حسابات مخصصة:

<!-- عرض المجموع الفرعي وتفاصيل الضريبة -->
<tr>
<td colspan="4" class="text-right"><strong>المجموع الفرعي:</strong></td>
<td>${{ "%.2f"|format(total_amount) }}</td>
</tr>
<tr>
<td colspan="4" class="text-right"><strong>الضريبة:</strong></td>
<td>${{ "%.2f"|format(total_tax) }}</td>
</tr>
<tr>
<td colspan="4" class="text-right"><strong>الإجمالي:</strong></td>
<td>${{ "%.2f"|format(total_amount + total_tax) }}</td>
</tr>

ملاحظة: يتم حساب متغير total_tax تلقائيًا عن طريق جمع tax_amount من جميع المعاملات في الفاتورة. يتم حساب ضريبة كل معاملة بناءً على حقل tax_percentage الخاص بها، والذي يكون افتراضيًا لنسبة الضريبة الخاصة بالمنتج أو 0% إذا لم يتم تحديده.

رمز QR للدفع:

توليد رمز QR للدفع عبر الهاتف المحمول:

<div class="qr-payment">
<img src="https://api.qrserver.com/v1/create-qr-code/?size=150x150&data={{ payment_url }}"
alt="امسح للدفع">
<p>امسح باستخدام هاتفك للدفع على الفور</p>
</div>

أفضل الممارسات لتنسيق PDF

يستخدم OmniCRM WeasyPrint لتحويل HTML إلى PDF. اتبع هذه الإرشادات:

CSS المدعوم:

  • معظم خصائص CSS 2.1
  • CSS3 محدود (flexbox، بعض التحولات)
  • خطوط الويب عبر @font-face

غير المدعوم:

  • JavaScript
  • CSS Grid (استخدم الجداول بدلاً من ذلك)
  • الرسوم المتحركة المعقدة
  • بعض خصائص CSS الحديثة

حجم الصفحة والهوامش:

@page {
size: A4;
margin: 1cm;
}

body {
font-family: Arial, sans-serif;
font-size: 10pt;
}

تنسيق الطباعة المحدد:

@media print {
.no-print {
display: none;
}

.page-break {
page-break-after: always;
}
}

تخطيط الجدول:

.table {
table-layout: fixed;
width: 100%;
}

.table th, .table td {
word-wrap: break-word;
padding: 4px;
}

تضمين الخط:

للحصول على خطوط مخصصة، استخدم خطوط آمنة على الويب أو قم بالتضمين:

@font-face {
font-family: 'YourFont';
src: url('https://yourcompany.com/fonts/yourfont.woff2') format('woff2');
}

body {
font-family: 'YourFont', Arial, sans-serif;
}

اختبار قوالب الفواتير

قائمة التحقق للاختبار:

  1. الفحص البصري:
    • يظهر الشعار بشكل صحيح
    • تتطابق الألوان مع إرشادات العلامة التجارية
    • النص مقروء (ليس صغيرًا جدًا)
    • تتماشى الجداول بشكل صحيح
    • جميع الأقسام موجودة
  2. دقة البيانات:
    • تفاصيل العميل صحيحة
    • مجموعات المعاملات صحيحة
    • تم تنسيق التواريخ بشكل صحيح
    • يتم استبدال جميع المتغيرات بشكل صحيح
  3. جودة PDF:
    • حجم الملف معقول (<5MB)
    • الصور حادة وواضحة
    • لا يوجد نص مقطوع أو فائض
    • تنفصل الصفحات في الأماكن المناسبة
  4. الفواتير متعددة الصفحات:
    • تتكرر الرؤوس في كل صفحة
    • تظهر أرقام الصفحات
    • قوائم المعاملات الطويلة تتوزع بشكل صحيح
  5. تسليم البريد الإلكتروني:
    • يتم إرفاق PDF بالبريد الإلكتروني
    • حجم الملف تحت حد Mailjet (15MB)
    • يظهر في Gmail وOutlook وApple Mail

أمر الاختبار (التوليد اليدوي):

يمكنك اختبار إنشاء الفاتورة عبر API:

curl -X GET "http://localhost:5000/crm/invoice/{invoice_id}/pdf" \
-H "Authorization: Bearer YOUR_TOKEN" \
--output test_invoice.pdf

مشاكل القالب الشائعة

المتغيرات لا تستبدل:

  • السبب: خطأ مطبعي في اسم المتغير أو بيانات مفقودة
  • الإصلاح: تحقق من التهجئة بدقة (حساسة لحالة الأحرف)، تحقق من وجود البيانات في قاعدة البيانات

تخطيط PDF معطل:

  • السبب: خاصية CSS غير مدعومة
  • الإصلاح: استخدم خصائص CSS 2.1، اختبر باستخدام CSS متوافق مع WeasyPrint

الصور لا تظهر:

  • السبب: عناوين URL نسبية أو موارد خارجية محجوبة
  • الإصلاح: استخدم عناوين URL HTTPS المطلقة، تأكد من أن الصور متاحة للجمهور

الجداول تتجاوز الصفحة:

  • السبب: عرض الأعمدة الثابتة عريض جدًا
  • الإصلاح: استخدم عرض النسب المئوية، table-layout: fixed

��لخطوط لا تظهر:

  • السبب: الخط غير مضمن أو غير متاح
  • الإصلاح: استخدم خطوط آمنة على الويب (Arial، Times New Roman، إلخ) أو قم بتضمين الخطوط المخصصة بشكل صحيح

فشل توليد PDF:

  • السبب: أخطاء في بناء HTML أو تعطل WeasyPrint
  • الإصلاح: تحقق من HTML، تحقق من سجلات WeasyPrint، تبسيط التخطيطات المعقدة

تخزين PDF للفواتير

لتحسين الأداء وتقليل توليد PDF المتكرر، يتضمن OmniCRM نظام تخزين PDF للفواتير. عندما يتم إنشاء PDF فاتورة لأول مرة، يتم تخزينه في قاعدة البيانات للطلبات اللاحقة.

كيف يعمل تخزين PDF:

  1. الطلب الأول - عندما يتم طلب PDF فاتورة (تنزيل أو بريد إلكتروني)، يقوم النظام:
    • بإنشاء PDF من قالب الفاتورة
    • ترميز PDF كـ Base64
    • حساب تجزئة SHA256 لمحتوى PDF
    • تخزينه في جدول Invoice_PDF_Cache مع:
      • مرجع معرف الفاتورة
      • بيانات PDF (مشفرة بـ Base64)
      • اسم الملف
      • تجزئة المحتوى (للتحقق من النزاهة)
      • الطابع الزمني لإنشاء
  2. الطلبات اللاحقة - عندما يتم طلب نفس الفاتورة مرة أخرى:
    • يتحقق النظام من PDF المخزن حسب invoice_id
    • إذا كان التخزين موجودًا وصالحًا، يتم إرجاع PDF المخزن على الفور
    • يتم تحديث الطابع الزمني last_accessed لتتبع استخدام التخزين
  3. إبطال التخزين - يتم إبطال PDFs المخزنة عندما:
    • يتم تعديل الفاتورة (إضافة/إزالة معاملات، تغيير التفاصيل)
    • يتم تحديث قالب الفاتورة
    • يتم تشغيل مسح التخزين يدويًا

الفوائد:

  • الأداء - تسليم PDF فوري للطلبات المتكررة (لا تأخير في إعادة التوليد)
  • التناسق - نفس PDF لجميع التنزيلات لفاتورة (ما لم يتم تعديل الفاتورة)
  • تحميل الخادم - يقلل من استخدام وحدة المعالجة المركزية من توليد PDF
  • تجربة المستخدم - يظهر مؤشر التحميل أثناء التوليد الأولي، الطلبات اللاحقة تكون فورية

إدارة التخزين:

يتم إدارة تخزين PDF للفواتير تلقائيًا بواسطة النظام. يمكن تطهير الإدخالات القديمة أو غير المستخدمة بشكل دوري بناءً على:

  • العمر (مثل، إزالة إدخالات التخزين الأقدم من 90 يومًا)
  • أنماط الوصول (إزالة الإدخالات التي لم يتم الوصول إليها في 30 يومًا)
  • حدود التخزين (تنفيذ حدود حجم التخزين إذا لزم الأمر)

سلوك API:

عند تنزيل فاتورة عبر API أو واجهة المستخدم:

  • الطلب الأول: يظهر مؤشر التحميل أثناء توليد PDF، ثم يتم التخزين
  • الطلبات اللاحقة: تنزيل فوري من التخزين
  • نجاح/فشل التخزين يكون شفافًا للمستخدم

مهم: عند تحديث قالب الفاتورة، قم بمسح التخزين لضمان استخدام الفواتير الجديدة التصميم المحدث:

-- مسح جميع PDFs المخزنة للفواتير (تشغيل في MySQL)
DELETE FROM Invoice_PDF_Cache;

أو تحديث crm_config.yaml لإبطال التخزين ��لقائيًا عند تغيير القالب.

الوصول إلى الفواتير

يمكن عرض الفواتير على مستوى النظام أو لكل عميل:

عرض لكل عميل:

  1. انتقل إلى العملاء → [اختر العميل]
  2. انقر على علامة التبويب الفوترة
  3. عرض قائمة الفواتير في البطاقة الثالثة

عرض على مستوى النظام:

  1. انتقل إلى الفوترة → الفواتير (من القائمة الرئيسية)
  2. عرض جميع الفواتير عبر جميع العملاء

أدوات إحصائيات الفواتير

في أعلى صفحة الفواتير، تعرض أربع بطاقات إحصائية ملخصات مالية.

إحصائيات الفواتير والقائمة{.align-center width="800px"}

أوصاف الأدوات:

  • إجمالي الفواتير - مجموع جميع تكاليف الفواتير (على مر الزمن) وعدد الفواتير المرسلة
  • الفواتير غير المدفوعة - مجموع الفواتير التي لم يتم دفعها بعد وعدد الفواتير غير المدفوعة
  • الفواتير هذا الشهر - مجموع الف��اتير التي تم إنشاؤها في هذا الشهر الميلادي مع العدد
  • الفواتير الشهر الماضي - مجموع الفواتير التي تم إنشاؤها في الشهر الميلادي الماضي مع العدد

تنسيق القيم:

  • القيم التي تزيد عن 1,000: عرضها كلاحقة "k" (مثل $1.5k)
  • القيم التي تزيد عن 1,000,000: عرضها كلاحقة "M" (مثل $2.3M)
  • القيم التي تزيد عن 1,000,000,000: عرضها كلاحقة "B" (مثل $1.1B)

مؤشرات الاتجاه:

  • تعرض الأدوات لـ "هذا الشهر" و "الشهر الماضي" نسبة التغيير
  • سهم أخضر لأعلى: زيادة من الفترة السابقة
  • سهم أحمر لأسفل: انخفاض من الفترة السابقة
  • سهم رمادي لليمين: لا تغيير

قائمة الفواتير

تعرض جدول الفواتير جميع الفواتير مع الأعمدة التالية:

قائمة الفواتير العالمية

أوصاف الأعمدة:

  • ID - معرف الفاتورة الفريد
  • العنوان - عنوان/وصف الفاتورة
  • الفترة - فترة الفوترة (تاريخ البدء - تاريخ الانتهاء) أو "N/A" للفواتير لمرة واحدة
  • تاريخ الاستحقاق - تاريخ استحقاق الدفع
  • تاريخ الإنشاء - تاريخ إنشاء الفاتورة
  • المبلغ - إجمالي مبلغ الفاتورة (تكلفة التجزئة)
  • الحالة - مدفوعة، غير مدفوعة، أو مستردة
  • الإجراءات - الإجراءات المتاحة (تختلف حسب الحالة)

أيقونات الإجراءات:

  • ⬇ (تنزيل) - تنزيل PDF الفاتورة
  • 🗑️ (حذف) - إبطال الفاتورة (فقط إذا لم يتم دفعها)
  • 💰 (دفع) - دفع الفاتورة عبر الإنترنت (فقط إذا كانت غير مدفوعة)
  • ✉️ (البريد الإلكتروني) - إرسال بريد إلكتروني بالفاتورة إلى العميل
  • 💸 (استرداد) - استرداد دفع Stripe (فقط للفواتير المدفوعة عبر Stripe)

إنشاء فاتورة

انقر على "+ إنشاء فاتورة برو forma" لإنشاء فاتورة جديدة.

نافذة إنشاء الفاتورة مع معاينة المعاملة{.align-center width="800px"}

أوصاف الحقول:

  • البحث عن العملاء - اختر العميل (يظهر فقط في العرض على مستوى النظام، مُعبأ مسبقًا في عرض العميل)
  • العنوان - عنوان/اسم الفاتورة (اختياري، افتراضي إلى "فاتورة لـ [الفترة]")
  • تاريخ البدء - بداية فترة الفوترة (افتراضي إلى 14 يومًا مضت)
  • تاريخ الانتهاء - نهاية فترة الفوترة (افتراضي إلى اليوم)
  • تاريخ الاستحقاق - الموعد النهائي للدفع (افتراضي إلى اليوم)
  • معاينة المعاملة - تعرض جميع المعاملات غير المفوترة في نطاق التاريخ مع إمكانية تضمين/استبعاد معاملات محددة

اختيار المعاملات:

  • ✓ (علامة زرقاء) - انقر لاستبعاد معاملة من الفاتورة
  • × (علامة حمراء) - انقر لتضمين معاملة تم استبعادها سابقًا
  • تحديد الكل - تضمين جميع المعاملات المعروضة
  • مسح الكل - استبعاد جميع المعاملات
  • تظهر المعاملات المستبعدة بلون رمادي مع نص مخطط
  • يتم تحديث المجموعات في الوقت الحقيقي أثناء تحديد/إلغاء تحديد المعاملات

ماذا يحدث:

  1. يجد النظام جميع المعاملات غير المفوترة للعميل ضمن نطاق التاريخ
  2. يعرض معاينة المعاملة مع إمكانية تضمين/استبعاد المعاملات الفردية
  3. يظهر حساب في الوقت الحقيقي للمجموع الفرعي، والضريبة، والإجمالي بناءً على المعاملات المحددة
  4. يتم إضافة المعاملات المحددة (المضمنة) فقط إلى الفاتورة
  5. يتم إنشاء PDF الفاتورة وتخزينه
  6. يتم وضع علامة على المعاملات المحددة كمعاملات مفوترة (invoice_id تم ملؤه)
  7. تبقى المعاملات المستبعدة غير مفوترة ومتاحة للفواتير المستقبلية
  8. تظهر الفاتورة في القائمة بحالة "غير مدفوعة"

حالات الاستخدام النموذجية:

الفوترة الشهرية: تعيين تاريخ البدء إلى الأول من الشهر، وتاريخ الانتهاء إلى آخر يوم من الشهر، تظهر المعاين�� جميع المعاملات غير المفوترة من تلك الفترة. اختر الكل أو استبعد يدويًا معاملات معينة.

فاتورة خاصة بالخدمة: استخدم نفس نطاق التاريخ، ثم استبعد يدويًا المعاملات غير المرغوب فيها (مثل، استبعاد المعاملات غير المحمولة لإنشاء فاتورة خاصة بالهاتف المحمول فقط).

فاتورة لمرة واحدة: تعيين كل من تاريخ البدء والانتهاء إلى نفس اليوم، تظهر المعاينة فقط المعاملات من ذلك التاريخ. استبعد أي رسوم غير ذات صلة بهذه الفاتورة المحددة.

عرض تفاصيل الفاتورة

انقر على أي صف فاتورة في الجدول لعرض تفاصيل الفاتورة الكاملة بما في ذلك جميع المعاملات، والمجموعات، والإجراءات المتاحة.

عرض تفاصيل الفاتورة{.align-center width="800px"}

نافذة تفاصيل الفاتورة:

  • معلومات الفاتورة - تعرض معرف الفاتورة، والعنوان، والتواريخ، وحالة الدفع، وحالة الإبطال
  • قائمة المعاملات - تعرض جميع المعاملات المضمنة في الفاتورة مع:
    • تاريخ المعاملة
    • العنوان والوصف
    • تكلفة التجزئة
    • مبلغ الضريبة ونسبتها (مُنسقة كـ $10.00 (10%))
    • تظهر المعاملات المعفاة من الضريبة "-" في عمود الضريبة
  • ملخص المجموعات - حساب في الوقت الحقيقي يظهر:
    • عدد المعاملات
    • المجموع الفرعي (مجموع جميع تكاليف التجزئة)
    • الضريبة (مجموع جميع مبالغ الضرائب)
    • إجمالي الفاتورة (المجموع الفرعي + الضريبة)
  • أزرار الإجراءات - نفس الإجراءات المتاحة كما في الجدول:
    • تنزيل PDF - تنزيل PDF الفاتورة (متاح دائمًا)
    • إرسال بريد إلكتروني - إرسال الفاتورة إلى العميل (الفواتير غير الملغاة)
    • دفع الفاتورة - معالجة الدفع (فقط للفواتير غير المدفوعة وغير الملغاة)
    • استرداد - استرداد دفع Stripe (فقط للفواتير المدفوعة عبر Stripe)
    • حذف - إبطال الفاتورة (فقط للفواتير غير المدفوعة وغير الملغاة)

تنزيل PDFs للفواتير

انقر على أيقونة التنزيل (⬇) في الجدول أو زر "تنزيل PDF" في نافذة تفاصيل الفاتورة لتنزيل فاتورة كملف PDF.

عملية التنزيل:

  1. انقر على أيقونة التنزيل بجوار الفاتورة
  2. يظهر مؤشر التحميل أثناء التوليد (في المرة الأولى فقط)
  3. يطلب المتصفح حفظ الملف: Invoice_01234.pdf
  4. يفتح PDF أو يتم حفظه في مجلد التنزيلات

سلوك التخزين PDF:

  • التنزيل الأول - يتم إنشاء PDF من القالب، وتخزينه في قاعدة البيانات (قد يستغرق 2-3 ثوانٍ)
  • التنزيلات اللاحقة - تنزيل فوري من التخزين
  • إبطال التخزين - يتم مسح التخزين إذا تم تعديل الفاتورة أو تحديث القالب

استكشاف مشكلات التنزيل:

  • المؤشر لا يتوقف أبدًا - تحقق من وحدة التحكم في المتصفح، قد تكون API معطلة
  • PDF فارغ أو تالف - تحقق من قالب الفاتورة بحثًا عن أخطاء بناء
  • فشل التنزيل - تحقق من إعدادات حظر النوافذ المنبثقة، جرب متصفحًا مختلفًا

دفع الفواتير

انقر على أيقونة الدفع (💰) لدفع فاتورة عبر الإنترنت.

نافذة دفع الفاتورة{.align-center width="800px"}

عملية الدفع:

  1. انقر على أيقونة الدفع على الفاتورة غير المدفوعة
  2. تفتح نافذة الدفع التي تعرض تفاصيل الفاتورة
  3. اختر طريقة الدفع:
    • معاملة Stripe - خصم بطاقة الائتمان المحفوظة (متاحة لجميع المستخدمين)
    • نقدًا - دفع نقدي يدوي (فقط للموظفين)
    • استرداد - تطبيق استرداد كدفع (فقط للموظفين)
    • معاملة POS - جهاز نقاط البيع (فقط للموظفين)
    • تحويل بنكي - تحويل بنكي يدوي (فقط للموظفين)
  4. إذا تم اختيار Stripe:
    • اختر بطاقة من طرق الدفع المحفوظة
    • يتم تحديد البطاقة الافتراضية مسبق��ا
    • انقر لاختيار بطاقة مختلفة
  5. إذا تم اختيار طريقة أخرى:
    • أدخل رقم المرجع (اختياري)
  6. انقر على "دفع الفاتورة" لمعالجة
  7. يعالج النظام الدفع:
    • Stripe - يخصم البطاقة عبر API Stripe
    • طرق أخرى - ينشئ معاملة سلبية لمبلغ الدفع
  8. تتغير حالة الفاتورة إلى "مدفوعة"
  9. يتم عرض إشعار النجاح

الرعاية الذاتية مقابل دفع الموظفين:

:doc:`بوابة الرعاية الذاتية <self_care_portal>` (العملاء):

  • متاحة فقط طريقة الدفع عبر Stripe
  • يجب أن يكون لديك طريقة دفع محفوظة
  • يظهر تحذير إذا لم توجد طرق دفع
  • يتم توفير رابط لإضافة طريقة دفع

بوابة الموظفين (المسؤولون):

  • جميع طرق الدفع متاحة
  • يمكنهم وضع علامة على الفاتورة كمدفوعة يدويًا (نقدًا، POS، تحويل بنكي)
  • يمكنهم إدخال أرقام مرجعية للتتبع

تحذير طريقة الدفع:

إذا لم يكن لدى العميل طرق دفع محفوظة، يتم عرض تحذير يطلب منهم إضافة طريقة دفع قبل أن يتمكنوا من دفع الفواتير.

تحذير عدم وجود طريقة دفع{.align-center width="800px"}

إرسال الفواتير عبر البريد الإلكتروني

انقر على أيقونة البريد الإلكتروني (✉️) لإرسال الفاتورة إلى العميل.

ماذا يحدث:

  1. انقر على أيقونة البريد الإلكتروني بجوار الفاتورة
  2. يسترجع النظام PDF الفاتورة من التخزين (أو ينشئه إذا لم يكن مخزنًا)
  3. يرسل البريد الإلكتروني عبر Mailjet باستخدام قالب api_crmCommunicationCustomerInvoice
  4. يتضمن البريد الإلكتروني:
    • PDF الفاتورة كمرفق
    • اسم العميل
    • رقم الفاتورة وتاريخ الاستحقاق
    • إجمالي المبلغ المستحق
    • رابط لدفع الفاتورة عبر الإنترنت
    • رابط لعرض/تنزيل الفاتورة
  5. إشعار النجاح: "تم إرسال بريد الفاتورة بنجاح"

المستلمون عبر البريد ال��لكتروني:

يتم إرسال البريد الإلكتروني إلى جميع جهات اتصال العميل من نوع "الفوترة" أو جهة الاتصال الرئيسية إذا لم توجد جهة اتصال فوترة.

متغيرات قالب البريد الإلكتروني:

  • {{ var:customer_name }} - الاسم الكامل للعميل
  • {{ var:invoice_number }} - معرف الفاتورة
  • {{ var:invoice_date }} - تاريخ إصدار الفاتورة
  • {{ var:due_date }} - تاريخ استحقاق الدفع
  • {{ var:total_amount }} - إجمالي المبلغ المستحق
  • {{ var:invoice_url }} - رابط لعرض/تنزيل PDF
  • {{ var:pay_url }} - رابط لدفع الفاتورة عبر الإنترنت

استكشاف مشكلات البريد الإلكتروني:

  • لم يتم إرسال البريد الإلكتروني - تحقق من بيانات اعتماد API Mailjet في crm_config.yaml
  • العميل لا يتلقى - تحقق من عناوين البريد الإلكتروني لجهات اتصال العميل
  • PDF لا يتم إرفاقه - تحقق من نجاح توليد PDF (جرب تنزيله أولاً)

إبطال الفواتير

انقر على أيقونة الحذف (🗑️) لإبطال فاتورة.

المتطلبات:

  • يجب أن تكون الفاتورة غير مدفوعة
  • لا يمكن إبطال الفواتير المدفوعة (يجب استردادها بدلاً من ذلك)

كيفية الإبطال:

  1. ابحث عن الفاتورة غير المدفوعة في القائمة
  2. انقر على أيقونة الحذف (🗑️)
  3. أكد في النافذة:

نافذة تأكيد إبطال الفاتورة{.align-center width="600px"}

ماذا يحدث:

  • يتم وضع علامة على الفاتورة كـ void = true
  • يتم فصل جميع المعاملات عن الفاتورة (invoice_id تم تعيينه إلى null)
  • تصبح المعاملات "غير مفوترة" مرة أخرى
  • يمكن تضمين المعاملات في فاتورة جديدة
  • تظهر الفاتورة في القائمة مع بادئة "ملغاة:" في العنوان
  • يتم تعطيل إجراءات الفاتورة (لا تنزيل، دفع، أو بريد إلكتروني)
  • يمكن عرضها عن طريق تصفية الفواتير "الملغاة"

ملاحظات مهمة:

  • الإبطال ليس هو نفسه الاسترداد
  • الإبطال = "يجب ألا تكو�� هذه الفاتورة موجودة أبدًا" (خطأ في الفوترة، مكرر)
  • الاسترداد = "عكس فاتورة مدفوعة صحيحة" (إعادة الأموال للعميل)

استرداد الفواتير

انقر على أيقونة الاسترداد (💸) لاسترداد فاتورة مدفوعة.

المتطلبات:

  • يجب أن تكون الفاتورة مدفوعة
  • يجب أن تكون الفاتورة مدفوعة عبر Stripe
  • يجب أن تحتوي الفاتورة على payment_reference صالح (معرف نية الدفع من Stripe)
  • متاحة فقط لمستخدمي الموظفين (ليس للرعاية الذاتية)

كيفية الاسترداد:

  1. ابحث عن فاتورة Stripe المدفوعة
  2. انقر على أيقونة الاسترداد (💸)
  3. تفتح نافذة تأكيد الاسترداد:

نافذة تأكيد استرداد الفاتورة{.align-center width="800px"}

  1. انقر على "تأكيد الاسترداد"
  2. يعالج النظام استرداد Stripe:
    • يستدعي API Stripe لاسترداد الدفع
    • ينشئ معاملة استرداد في Stripe
    • يحدث الفاتورة مع refund_reference
  3. تتغير حالة الفاتورة إلى "مستردة"
  4. يتم عرض إشعار النجاح

ماذا يحدث بعد الاسترداد:

  • تبقى الفاتورة في النظام (غير ملغاة)
  • تظهر الحالة "مستردة"
  • تبقى المعاملات مرتبطة بالفاتورة
  • يتلقى العميل استردادًا إلى طريقة الدفع الأصلية (3-7 أيام عمل)
  • يظهر لوحة معلومات Stripe مع معاملة الاسترداد

قيود الاسترداد:

  • لا يمكن استرداد الفواتير المدفوعة نقدًا، أو عبر POS، أو عبر التحويل البنكي (يتطلب عكس يدوي)
  • لا يمكن استرداد جزئي (فقط المبلغ الكامل للفواتير)
  • لا يمكن الاسترداد مرتين

البحث وتصنيف الفواتير

البحث

استخدم شريط البحث للعثور على الفواتير. يتم البحث عبر:

  • معرف الفاتورة
  • عنوان الفاتورة
  • اسم العميل (عرض على مستوى النظام فقط)

الفلاتر

تطبيق الفلاتر لتضييق قائمة الفواتير:

الفلاتر المتاحة:

  • حالة الإبطال - الكل، ملغاة، غير ملغاة
  • حالة الدفع - الكل، مدفوعة، غير مدفوعة بعد

إجراءات الفلترة:

  • تطبيق الفلاتر - تطبيق الفلاتر المحددة على القائمة
  • إعادة تعيين الفلاتر - مسح جميع الفلاتر وعرض جميع الفواتير

الفرز

انقر على أي رأس عمود للفرز:

  • ID - فرز حسب معرف الفاتورة (الأحدث/الأقدم)
  • العنوان - فرز أبجديًا
  • تاريخ الاستحقاق - فرز حسب تاريخ الاستحقاق
  • تاريخ الإنشاء - فرز حسب تاريخ الإنشاء
  • المبلغ - فرز حسب تكلفة التجزئة (الأعلى/الأدنى)
  • الحالة - فرز حسب حالة الدفع (المدفوعة أولاً أو غير المدفوعة أولاً)

انقر مرة أخرى لعكس اتجاه الفرز (تصاعدي ↔ تنازلي).

الصفحات

انتقل عبر قوائم الفواتير الكبيرة مع عناصر التحكم في الصفحات التي تعرض الصفحة الحالية، وإجمالي الصفحات، ومحدد العناصر لكل صفحة (10، 25، 50، أو 100 عنصر).

سير العمل الشائع للفواتير

سير العمل 1: الفوترة الشهرية مع معاينة المعاملة

  1. يصل نهاية الشهر (مثل، 31 يناير)
  2. انتقل إلى الفوترة → الفواتير
  3. انقر على "+ إنشاء فاتورة برو forma"
  4. اختر العميل (أو قم بذلك لكل عميل إذا كنت تفوتر العديد من العملاء)
  5. تعيين التواريخ:
    • تاريخ البدء: 2025-01-01
    • تاريخ الانتهاء: 2025-01-31
    • تاريخ ال��ستحقاق: 2025-02-15 (15 يومًا من الآن)
    • العنوان: "خدمات يناير 2025" (اختياري)
  6. يظهر قسم معاينة المعاملة جميع المعاملات غير المفوترة من يناير
  7. مراجعة المعاينة:
    • يتم تضمين جميع المعاملات بشكل افتراضي
    • تحقق من المجموعات: المجموع الفرعي، الضريبة، وإجمالي الفاتورة
    • تحقق من صحة جميع الرسوم
  8. انقر على "إنشاء فاتورة" (يظهر زر عدد المعاملات، مثل "إنشاء فاتورة (15)")
  9. تم إنشاء الفاتورة مع جميع المعاملات المحددة
  10. انقر على صف الفاتورة لعرض التفاصيل والتحقق
  11. انقر على زر "إرسال بريد إلكتروني" في نافذة التفاصيل أو أيقونة البريد الإلكتروني في الجدول
  12. يتلقى العميل بريد الفاتورة مع PDF ورابط الدفع

سير العمل 2: الفوترة الانتقائية للمعاملات

  1. لدى العميل خدمات متعددة (الهاتف المحمول + الإنترنت) ورسوم متنوعة
  2. يريد فواتير منفصلة لكل ��دمة
  3. إنشاء الفاتورة الأولى (خدمات الهاتف المحمول):
    • انقر على "+ إنشاء فاتورة برو forma"
    • العنوان: "خدمات الهاتف المحمول - يناير 2025"
    • تاريخ البدء/الانتهاء: من 1 إلى 31 يناير
    • تاريخ الاستحقاق: 15 فبراير
    • في معاينة المعاملة، استبعد جميع المعاملات غير المحمولة:
      • انقر على زر X بجوار معاملات الإنترنت
      • انقر على زر X بجوار الرسوم المتنوعة
      • تبقى فقط معاملات خدمات الهاتف المحمول محددة
    • تحقق من أن المجموعات تعكس فقط خدمات الهاتف المحمول
    • انقر على "إنشاء فاتورة" (يظهر عدد معاملات الهاتف المحمول)
  4. إنشاء الفاتورة الثانية (خدمات الإنترنت):
    • انقر على "+ إنشاء فاتورة برو forma" مرة أخرى
    • العنوان: "خدمات الإنترنت - يناير 2025"
    • تاريخ البدء/الانتهاء: من 1 إلى 31 يناير (نفس الفترة)
    • في معاينة المعاملة:
      • تم فوتره المعاملات المحمولة بالفعل (لا تظهر)
      • استبعاد الرسوم المتنوعة باستخدام زر X
      • تبقى فقط معاملات خدمات الإنترنت
    • انقر على "إنشاء فاتورة"
  5. إنشاء الفاتورة الثالثة (الرسوم الإضافية):
    • انقر على "+ إنشاء فاتورة برو forma" مرة أخرى
    • العنوان: "الرسوم الإضافية - يناير 2025"
    • تظهر فقط الرسوم المتنوعة غير المفوترة في المعاينة
    • انقر على "تحديد الكل" لتضمين الجميع
    • انقر على "إنشاء فاتورة"
  6. أرسل جميع الفواتير الثلاثة إلى العميل

سير العمل 3: استبعاد المعاملات المتنازع عليها أو المعلقة

  1. يصل نهاية فترة الفوترة
  2. انتقل إلى علامة تبويب الفوترة للعميل
  3. انقر على "+ إنشاء فاتورة برو forma"
  4. تعيين تواريخ فترة الفوترة
  5. تظهر معاينة المعاملة 20 معاملة
  6. يتنازع العميل على رسوم واحدة وأخرى معلقة
    • في معاينة المعاملة:
    • ابحث عن المعاملة المتنازع عليها (مثل "رسوم تجاوز البيانات")
    • انقر على زر X لاستبعادها
    • ابحث عن المعاملة المعلقة (مثل "رسوم التركيب")
    • انقر على زر X لاستبعادها
    • يتم تحديث عدد المعاملات: "18 معاملة محددة"
    • يتم إعادة حساب المجموعات تلقائيًا
  7. مراجعة المجموعات المحدثة (تستبعد المبالغ المتنازع عليها)
  8. انقر على "إنشاء فاتورة (18)"
  9. تم إنشاء الفاتورة مع المعاملات المعتمدة فقط
  10. تبقى المعاملات المتنازع عليها/المعلقة غير مفوترة للدورة القادمة للفوترة

سير العمل 4: مراجعة سريعة للفواتير وتعديلها

  1. يقوم الموظف بإنشاء فاتورة شهرية
  2. تظهر معاينة المعاملة إجماليًا مرتفعًا غير متوقع
  3. مراجعة كل معاملة في المعاينة:
    • لاحظ رسوم مكررة لنفس الخدمة
    • انقر على X لاستبعاد المكررة
    • لاحظ معاملة اختبار لا ينبغي فوترتها
    • انقر على X لاستبعاد معاملة الاختبار
  4. يتم تحديث المجموعات في الوقت الحقيقي
  5. تحقق من أن المجموع الجديد يتطابق مع المبلغ المتوقع
  6. انقر على "إنشاء فاتورة" مع المعاملات المصححة
  7. عد إلى الوراء وألغي/احذف المعاملات المستبعدة إذا لزم الأمر
  8. أرسل الفاتورة إلى العميل بثقة

سير العمل 5: فاتورة تركيب لمرة واحدة

  1. أكمل الفني الميداني التركيب
  2. يضيف الموظف معاملة التركيب يدويًا
  3. انتقل إلى علامة تبويب الفوترة للعميل
  4. انقر على "+ إنشاء فاتورة برو forma"
  5. تعيين التواريخ:
    • تاريخ البدء: اليوم
    • تاريخ الانتهاء: اليوم
    • تاريخ الاستحقاق: اليوم + 7 أيام
    • العنوان: "خدمات التركيب"
  6. تظهر معاينة المعاملة فقط معاملات اليوم
  7. تحقق من ظهور رسوم التركيب
  8. استبعد أي رسوم متكررة باستخدام زر X (إذ�� كانت موجودة)
  9. انقر على "إنشاء فاتورة"
  10. أرسل إلى العميل على الفور
  11. يدفع العميل عبر الإنترنت عبر Stripe

سير العمل 6: مراجعة الفاتورة قبل الاتصال بالعميل

  1. يتصل العميل بسؤال عن الفوترة
  2. يتنقل الموظف إلى قائمة فواتير العميل
  3. انقر على صف الفاتورة لفتح نافذة تفاصيل الفاتورة
  4. مراجعة معلومات الفاتورة:
    • معرف الفاتورة، التواريخ، الحالة
    • جميع المعاملات المضمنة مع الأوصاف
    • تفصيل الضريبة لكل معاملة
    • المجموع الفرعي، الضريبة، والمبالغ الإجمالية
  5. أجب عن أسئلة العميل بتفاصيل دقيقة
  6. إذا طلب العميل PDF، انقر على زر "تنزيل PDF" في النافذة
  7. إذا طلب العميل إعادة إرسال البريد الإلكتروني، انقر على زر "إرسال بريد إلكتروني"
  8. أغلق النافذة عند الانتهاء

سير العمل 7: تصحيح خطأ في الفوترة

  1. يبلغ العميل عن رسوم غير صحيحة
  2. ينقر الموظف على صف الفاتورة لعرض التفاصيل
  3. مراجعة قائمة المعاملات في نافذة تفاصيل الفاتورة
  4. تحديد المعاملة غير الصحيحة
  5. الفاتورة غير مدفوعة، لذا يمكن إبطالها
  6. انقر على زر "حذف" في تذييل النافذة
  7. أكد الإبطال
  8. تصبح المعاملات غير مفوترة مرة أخرى
  9. يقوم الموظف بتعديل أو إزالة المعاملة غير الصحيحة من قائمة المعاملات
  10. إنشاء فاتورة جديدة مع المعاملات المصححة:
    • استخدم معاينة المعاملة لاستبعاد المعاملة المصححة إذا لزم الأمر
    • تضمين فقط الرسوم الصحيحة
  11. أرسل الفاتورة المصححة إلى العميل

سير العمل 8: معالجة مدفوعات متعددة

  1. يأتي العميل نقدًا لدفع فواتير متعددة
  2. انتقل إلى علامة تبويب الفوترة للعميل
  3. عرض الفواتير غير المدفوعة
  4. انقر على صف الفاتورة الأولى لعرض التفاصيل
  5. تحقق من المبلغ والمعاملات
  6. انقر على زر "دفع الفاتورة" في تذييل النافذة
  7. اختر طريقة الدفع "نقدًا"
  8. أدخل المرجع: "نقد مدفوع 2025-01-15"
  9. انقر على "دفع الفاتورة"
  10. تغلق النافذة، وتُعَلَّم الفاتورة كـ "مدفوعة"
  11. كرر ذلك لبقية الفواتير
  12. الآن جميع الفواتير مُعَلَّمَة كـ "مدفوعة"

سير العمل 9: التعامل مع طلب الاسترداد

  1. يطلب العميل استردادًا لمبلغ زائد
  2. يتحقق الموظف من أن الفاتورة قد تم دفعها عبر Stripe
  3. انتقل إلى الفاتورة في القائمة
  4. انقر على صف الفاتورة لعرض التفاصيل
  5. تحقق من معلومات الدفع والمبلغ
  6. انقر على زر "استرداد" في تذييل النافذة (يظهر فقط لفواتير Stripe)
  7. أكد الاسترداد
  8. يعالج النظام استرداد Stripe
  9. تتغير حالة الفاتورة إلى "مستردة"
  10. يتلقى العميل الاسترداد في غضون 3-7 أيام عمل
  11. يتابع الموظف مع العميل لتأكيد الاستلام

استكشاف الأخطاء

لا يمكن إنشاء الفات��رة - لا توجد معاملات

  • السبب: لا توجد معاملات غير مفوترة في نطاق التاريخ المحدد
  • الإصلاح: تحقق من قائمة المعاملات، تحقق من وجود المعاملات وأنها ليست مفوترة بالفعل. ضبط نطاق التاريخ أو إزالة الفلتر.

فشل توليد PDF الفاتورة

  • السبب: خطأ في بناء القالب، تعطل WeasyPrint، أو بيانات العميل مفقودة
  • الإصلاح: تحقق من HTML قالب الفاتورة بحثًا عن الأخطاء، تحقق من ملء حقول عنوان العميل، راجع سجلات API.

فشل الدفع مع خطأ Stripe

  • السبب: تم رفض البطاقة، أو عدم كفاية الأموال، أو بطاقة منتهية، أو مشكلة في API Stripe
  • الإصلاح: جرب طريقة دفع مختلفة، تحقق من صلاحية البطاقة، تحقق من لوحة معلومات Stripe لسبب الرفض.

لا يمكن إبطال الفاتورة

  • السبب: تم دفع الفاتورة بالفعل
  • الإصلاح: لا يمكن إبطال الفواتير المدفوعة. إذا كان الاسترداد مطلوبًا، استخدم وظيفة الاسترداد لفواتير Stripe أو أنشئ معاملة ائتمانية يدويًا.

البريد الإلكتروني للفواتير لا يُرسل

  • السبب: بيانات اعتماد API Mailjet غير صحيحة، أو ليس لدى العميل جهة اتصال فوترة، أو القالب البريد الإلكتروني مفقود
  • الإصلاح: تحقق من تكوين Mailjet في crm_config.yaml، تحقق من جهات اتصال العميل، تحقق من وجود قالب البريد الإلكتروني للفواتير.

زر الاسترداد لا يظهر

  • السبب: تم دفع الفاتورة نقدًا/عبر POS/عبر التحويل البنكي (ليس عبر Stripe)، أو لم يتم دفع الفاتورة
  • الإصلاح: يظهر زر الاسترداد فقط لمدفوعات Stripe. بالنسبة لطرق الدفع الأخرى، أنشئ معاملة ائتمانية يدوية.

يظهر تصميم القالب القديم عند تنزيل PDF

  • السبب: تم تخزين PDF قبل تحديث القالب
  • الإصلاح: امسح التخزين PDF للفواتير: DELETE FROM Invoice_PDF_Cache WHERE invoice_id = X;

لا يمكن للعميل دفع الفاتورة (لا توجد طرق دفع)

  • السبب: لا توجد طرق دفع محفوظة في بوابة الرعاية الذاتية
  • الإصلاح: يجب على العميل إضافة بطاقة ائتمان في صفحة طرق الدفع قبل دفع الفواتير.

تم إنشاء فواتير متعددة لنفس الفترة

  • السبب: قام الموظف بإنشاء الفاتورة مرتين، أو تتداخل نطاقات التاريخ
  • الإصلاح: إبطال الفاتورة المكررة. ضبط نطاقات التاريخ لتجنب التداخل. استخدم معاينة المعاملة لضمان مجموعات معاملات فريدة.

لا تظهر معاملات في معاينة المعاملة

  • السبب: جميع المعاملات في نطاق التاريخ تم فوترتها بالفعل أو لا توجد معاملات
  • الإصلاح: تحقق من صحة نطاق التاريخ. تحقق من قائمة المعاملات لتأكيد وجود المعاملات. قم بتصفية الفواتير لرؤية أي فاتورة تحتوي على المعاملات.

لا يمكن استبعاد المعاملة من إنشاء الفاتورة

  • السبب: تم فوترتها بالفعل أو مشكلة في المتصفح
  • الإصلاح: تحقق من أن المعاملة تظهر في المعاينة مع علامة. قم بتحديث الصفحة وحاول مرة أخرى. امسح ذاكرة التخزين المؤقت للمتصفح إذا استمرت المشكلة.

إجمالي الفاتورة لا يتطابق مع المبلغ المتوقع

  • السبب: تم تضمين معاملات غير متوقعة، أو لم يتم حساب الضريبة، أو تم احتساب المعاملات المستبعدة
  • الإصلاح: راجع معاينة المعاملة بعناية. تحقق من تكلفة التجزئة لكل معاملة والضريبة. تحقق من أن المعاملات المستبعدة تظهر بلون رمادي. تحقق من شارة عدد المعاملات على زر إنشاء الفاتورة.

زر إنشاء الفاتورة معطل

  • السبب: لا توجد معاملات محددة أو نطاق تاريخ غير صالح
  • الإصلاح: تأكد من تضمين معاملة واحدة على الأقل (غير مستبعدة). تحقق من أن تاريخ البدء قبل تاريخ الانتهاء. تحقق من تعيين تاريخ الاستحقاق.

نافذة تفاصيل الفاتورة لا تفتح

  • السبب: خطأ في JavaScript أو الصفحة لم يتم تحميلها بالكامل
  • الإصلاح: قم بتحديث الصفحة. تحقق من وحدة التحكم في المتصفح بحثًا عن الأخطاء. جرب متصفحًا مختلفًا. تحقق من الاتصال بالإنترنت.

ضريبة المعاملة لا تظهر في تفاصيل الفاتورة

  • السبب: المعاملة لديها ضريبة 0% أو tax_amount فارغ
  • الإصلاح: تحقق من أن المعاملة تحتوي على tax_percentage محددة. تحقق من أنه تم حساب tax_amount عند إنشاء المعاملة. قم بتحديث المعاملة إذا لزم الأمر.

أزرار الإجراءات مفقودة في نافذة تفاصيل الفاتورة

  • السبب: تم إبطال الفاتورة أو يفتقر المستخدم إلى الأذونات
  • الإصلاح: تظهر الفواتير الملغاة فقط زر تنزيل PDF. تحقق من حالة الفاتورة. تحقق من دور المستخدم والأذونات.

الوثائق ذات الصلة

  • integrations_mailjet - تسليم الفواتير عبر البريد الإلكتروني والقوالب
  • administration_configuration - تكوين قالب الفاتورة
  • payments_transaction - إنشاء المعاملات التي تظهر في الفواتير
  • payments_process - معالجة مدفوعات الفواتير
  • basics_payment - طرق الدفع وتكامل Stripe