• DevPilot's avatar
    feat(accounting): شاشة متابعة خطابات الضمان — سجل تجديدات كامل + تنبيه 45 يوم · 46b84589
    DevPilot authored
    التجديد كان بيكتب فوق تاريخ الانتهاء القديم ويسيب renewal_date واحد، يعني
    تاريخ الخطاب بيضيع: مش عارف اتجدّد كام مرة ولا التواريخ السابقة كانت إيه.
    
    المطلوب اتنفّذ بالكامل:
    - جدول letter_of_guarantee_renewals: كل تجديد صف مستقل فيه رقم التجديد
      وتاريخه وتاريخ الانتهاء السابق والجديد وعمولة التجديد ومين سجّله.
    - الخطاب نفسه ما بيتغيّرش: نفس الرقم ونفس المورد ونفس المشروع. اللي
      بيتحدّث هو تاريخ الانتهاء الحالي وعدّاد التجديدات بس.
    - أعمدة جديدة: supplier_id (المورد/الشركة)، purpose (الغرض)،
      project_name (المشروع)، renewal_count، original_expiry_date.
    - الحالة بقت محسوبة من تاريخ الانتهاء الحالي مش متخزّنة: ساري / قريب
      الانتهاء / منتهي / مُجدد — فـ«قريب الانتهاء» بتتحدّث لوحدها، ولو الخطاب
      اتجدّد التنبيه بيتقاس على التاريخ الجديد تلقائياً.
    - تنبيه قبل الانتهاء بـ45 يوم: بانر في شاشة الخطابات (وكمان بانر أحمر
      للخطابات اللي فات ميعادها ولسه مفتوحة)، وقاعدة في محرك التنبيهات
      (guarantee_expiry) عشان تطلع في الإشعارات كمان.
    - updateStatus بقى يرفض حالة 'renewed' ويوجّه لزر التجديد، عشان محدش
      يغيّر تاريخ الانتهاء من غير ما يتسجّل في السجل.
    
    وباجّات كانت في نفس الشاشة:
    - فلاتر الحالة والنوع كانت بقيم مش موجودة في الـ ENUM أصلاً
      (claimed/cancelled/bid_bond/performance_bond/retention) — يعني الفلترة
      ما كانتش بترجّع حاجة أبداً. اتظبطت على القيم الحقيقية.
    - عمود البنك كان بيقرا issuing_bank والكويري بترجّع bank_name، فكان
      بيطلع «—» دايماً.
    - زر «خطاب ضمان جديد» كان بيتحكم بصلاحية accounting.instruments.manage
      بينما الـ route محتاج accounting.guarantee.manage.
    
    الـ migration اتطبّقت على قاعدة البيانات الحية واتسجّلت (batch 130).
    46b84589
Name
Last commit
Last update
.claude Loading commit data...
.impeccable Loading commit data...
Another ERP that we may want to cheat from Loading commit data...
HR requests Loading commit data...
Proposal Loading commit data...
Server Connection Data Loading commit data...
app Loading commit data...
config Loading commit data...
cron Loading commit data...
database Loading commit data...
docker Loading commit data...
docs Loading commit data...
public Loading commit data...
support_tickets_downloads/support_screenshots Loading commit data...
tests Loading commit data...
tools Loading commit data...
.dockerignore Loading commit data...
.editorconfig Loading commit data...
.env Loading commit data...
.env.example Loading commit data...
.gitignore Loading commit data...
.php-cs-fixer.php Loading commit data...
BalanceSheet.html Loading commit data...
CLAUDE.md Loading commit data...
Dockerfile Loading commit data...
Makefile Loading commit data...
SYSTEM_MAP.md Loading commit data...
Sports Module System Design DETAILED.md Loading commit data...
UPGRADE_PLAN.md Loading commit data...
captain-definition Loading commit data...
cli.php Loading commit data...
composer.json Loading commit data...
composer.lock Loading commit data...
interesting_features.md Loading commit data...
phpstan.neon Loading commit data...
phpunit.xml Loading commit data...
sports activity stuff .txt Loading commit data...
sports-activity-alignment-plan.md Loading commit data...
sports-activity-smart-filtering-plan.md Loading commit data...
trial_balance_2026-01-01_to_2026-05-10.csv Loading commit data...