كيف أرسل تنبيه لمنشئ الفاتورة لو عدّى عليها 10 أيام والمتبقي على العميل أكبر من صفر؟

Viewed 29

عندي فواتير مبيعات، ومحتاج أبعت تنبيه لأول منشئ للفاتورة (firstAuthor) لما يعدّي عليها 10 أيام من تاريخ الاستحقاق والفاتورة لسه عليها متبقي أكبر من صفر (يعني لسه ما اتحصّلت). إيه الطريقة المعتمدة في النظام لعمل ده باستخدام تعريف تنبيه (Notification Definition) ومهمة مجدولة (Task Schedule) تشتغل كل يوم على الفواتير اللي تنطبق عليها الشروط دي؟

السؤال شبيه بسؤال التنبيه على ملحوظة الاجتماع قبل ساعتين من الموعد، بنفس الفكرة بس على فواتير المبيعات وبشرط مختلف.

1 Answers

الحل المعتمد هو إنشاء تعريف تنبيه يدوي (Notification Definition بخاصية useManually) للفواتير، وبعدها عمل مهمة مجدولة (Task Schedule) من نوع Action تشغّل التنبيه يومياً على الفواتير المستحقة.

1) تعريف التنبيه (Notification Definition)

  • اعمل تعريف تنبيه جديد مرتبط بكيان SalesInvoice.
  • علّم على خيار يدوي (useManually = true) — كده التنبيه مش هيتبعت لما المستخدم يحفظ أو يعدّل الفاتورة، وبس هيتبعت لما المهمة المجدولة تشغّله على السجلات الراجعة من الاستعلام.
  • اضبط القالب (Template) ليحتوي على لينك الفاتورة والملاحظات.
  • اضبط المستهدفين (Targets) على firstAuthor.

2) المهمة المجدولة (Task Schedule)

select entityType, id
from SalesInvoice
where commitedBefore = 1
  and remaining > 0
  and valueDate <= dateadd(day, -10, cast(getdate() as date))
  • في parameter7 حط كود تعريف التنبيه (invoicecollect-notify).
  • اضبط الـ Schedule على الساعة 8:30 صباحاً يومياً (أو أي توقيت يناسبك).

JSON جاهز للاستيراد المباشر

{
    "NotificationDefinition": [
        {
            "code": "invoicecollect-notify",
            "notificationEntity": "SalesInvoice",
            "priority": 1,
            "useManually": true,
            "templates": {
                "notificationTemplate": "لديك فاتورة مبيعات مستحقة {link($this)}\n{remarks}"
            },
            "targets": [
                {
                    "field": "firstAuthor"
                }
            ]
        }
    ],
    "TaskSchedule": [
        {
            "code": "invoicecollect-notify-task",
            "scheduleType": "Action",
            "relatedTo": "SalesInvoice",
            "scheduleInfo": {
                "timeMinute": "30",
                "timeHour": "8"
            },
            "hourInfo": {
                "runOnHour0830": true
            },
            "sendAsNotification": true,
            "className": "com.namasoft.infor.domainbase.util.actions.EARunManualNotificationFromQuery",
            "parameter1": "select entityType, id from SalesInvoice where commitedBefore = 1 and remaining > 0 and valueDate <= dateadd(day, -10, cast(getdate() as date))",
            "parameter7": "invoicecollect-notify"
        }
    ]
}

ملاحظات

  • لو محتاج التنبيه يروح لأكتر من شخص (مثلاً البائع كمان)، ضيف Target تاني في targets على الحقل المناسب.
  • لو الفواتير عندها تاريخ استحقاق مختلف عن valueDate (زي dueDate)، عدّل الاستعلام يستخدم العمود الصح.
  • ممكن تجرّب التنبيه أول مرة يدوياً من شاشة الفاتورة قبل ما تربطه بالمهمة المجدولة، عشان تتأكد إن القالب والمستهدفين شغالين صح.