Skip to content

Sprint 1: Fix accounts tree empty state, post-save refresh flow, and parent dropdown staleness#3

Draft
Copilot wants to merge 2 commits intomainfrom
copilot/fix-account-directory-screen
Draft

Sprint 1: Fix accounts tree empty state, post-save refresh flow, and parent dropdown staleness#3
Copilot wants to merge 2 commits intomainfrom
copilot/fix-account-directory-screen

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 21, 2026

openAccountsInline() relied on ERP_DATA.accounts injected by PHP, which is only populated by AccountController — not DashboardController or others. Opening دليل الحسابات from any other route always showed "لا توجد حسابات" regardless of DB state. Post-save, a window.location.reload() in a main.php-defined saveNewAccount() was silently overriding the erp.js version, resetting context and leaving the parent dropdown stale.

Core fixes

  • openAccountsInline() → async, always fetches /accounts/list: Decouples the tree from PHP-injected bootstrap data. ERP_DATA.accounts is updated in-place, so openNewAccountForm() picks up new accounts for the parent <select> without any extra work.

  • saveNewAccount() in main.php: Replaced window.location.reload() with the correct no-reload flow — close form → close accounts window → await openAccountsInline()alertSuccess(...). Success dialog now appears after the tree is fully rebuilt.

  • saveAccountEdit() in erp.js: Same pattern applied for consistency.

  • openAccounts() in erp.js: Made async so callers can await it when needed.

  • Refresh toolbar button: Changed from location.reload() to closeWindow('accounts'); openAccounts().

CSS

Fixed #new-account-form select padding (2px 30px 2px 8px2px 4px 2px 24px) — in RTL the dropdown arrow sits on the left, so the large right padding was eating into the visible text area, causing truncation of option labels like "مدين" / "أصول".

Flow after this change

saveNewAccount()
  ├─ POST /accounts/store
  ├─ closeWindow('new-account')
  ├─ closeWindow('accounts')
  ├─ await openAccountsInline()   // fetches fresh list, rebuilds tree
  └─ alertSuccess(...)            // shown after tree is ready

New account appears in the parent <select> on next openNewAccountForm() call because ERP_DATA.accounts was already updated by the preceding openAccountsInline().

Original prompt

نفّذ Sprint 1 كاملًا لمشروع المحاسب الشامل في المستودع moded12/acc3 مع الحفاظ على RTL والمصطلحات العربية وعدم كسر الواجهة الحالية. المطلوب في هذه المرحلة:

  1. إصلاح شاشة دليل الحسابات داخل الواجهة الحالية المبنية Inline في views/layouts/main.php.
  2. إصلاح شجرة الحسابات بحيث تظهر الحسابات الموجودة فعليًا من ERP_DATA.accounts بشكل صحيح، مع معالجة parent_id عندما يكون null أو قيمة فارغة أو رقم/نص.
  3. تحسين نموذج "إنشاء حساب جديد" من حيث العرض والاستخدام، مع الحفاظ على المصطلحات العربية الحالية في البرنامج:
  • الحساب الأب
  • رمز الحساب
  • اسم الحساب
  • الاسم بالإنجليزية
  • نوع الحساب
  • الطبيعة
  • هل حساب نهائي؟
  • رصيد افتتاحي
  • يسمح بالترحيل المباشر
  1. إصلاح مشكلة أن الحساب الأب لا يظهر في المنسدلة بعد إضافة حساب جديد، وذلك عبر تحديث بيانات الحسابات من السيرفر بعد الحفظ وتحديث ERP_DATA.accounts ثم إعادة بناء شاشة دليل الحسابات.
  2. تثبيت رسالة النجاح بعد حفظ الحساب بحيث لا تختفي بسرعة، مع ترتيب تدفق الواجهة بعد الحفظ.
  3. إظهار تفاصيل الحساب عند التحديد داخل شاشة دليل الحسابات.
  4. دعم فتح تعديل الحساب عند النقر المزدوج على الحساب من الشجرة.
  5. الحفاظ على المسارات الحالية وعدم كسر الواجهة أو شاشات القيود والسنوات ومراكز التكلفة.

السياق الحالي المهم:

  • الواجهة تعمل بنمط MDI Windows.
  • الجافاسكربت الرئيسي في public/assets/js/erp.js.
  • الشاشات Inline داخل views/layouts/main.php.
  • CSS الرئيسي في public/assets/css/erp.css.
  • الحسابات تُجلب وتُحفظ فعليًا، وظهرت في /accounts/list وفي قاعدة البيانات، لكن الشجرة في دليل الحسابات لا تعرضها بشكل صحيح.
  • كانت هناك مشكلة في renderTree بسبب التعامل مع parent_id والجذر.
  • كانت هناك مشكلة في نموذج الحساب الجديد والقوائم المنسدلة، وتم تحسينها جزئيًا لكن ما زالت تحتاج تثبيت نهائي.
  • المطلوب إبقاء المصطلحات العربية في الواجهة، وعدم تعريب قيم قاعدة البيانات الداخلية مثل asset/debit في الطلبات الخلفية إلا على مستوى العرض.

الملفات المرجح تعديلها:

  • views/layouts/main.php
  • public/assets/js/erp.js
  • public/assets/css/erp.css
  • ويمكن تعديل AccountController / AccountService إذا لزم تثبيت سلوك الواجهة أو API بدون كسر النظام.

نتيجة العمل المطلوبة:

  • فتح PR يحتوي إصلاحات Sprint 1 كاملة.
  • يجب أن تصبح تجربة الاختبار التالية ممكنة:
    أ) فتح دليل الحسابات فتظهر الشجرة بدل رسالة "لا توجد حسابات" عندما توجد بيانات فعلية.
    ب) الضغط على حساب يعرض تفاصيله.
    ج) النقر المزدوج يفتح تعديل الحساب.
    د) إنشاء حساب رئيسي من نموذج حساب جديد ينجح وتظهر رسالة نجاح مستقرة.
    هـ) فتح نموذج حساب جديد مرة أخرى يظهر الحساب الجديد في قائمة الحساب الأب.
    و) يمكن لاحقًا إنشاء حساب فرعي تحت الحساب الرئيسي.

اختبارات يفضّل تغطيتها يدويًا داخل PR description:

  • مثال حساب رئيسي:
    الحساب الأب: بدون أب
    رمز الحساب: 1100
    اسم الحساب: الصندوق
    الاسم بالإنجليزية: Cash
    نوع الحساب: asset
    الطبيعة: debit
    هل حساب نهائي؟ لا أو نعم حسب منطق الشاشة، لكن يجب أن يكون السلوك متسقًا محاسبيًا
  • مثال حساب فرعي:
    الحساب الأب: الصندوق [1100]
    رمز الحساب: 1101
    اسم الحساب: الصندوق الرئيسي
    الاسم بالإنجليزية: Main Cash
    نوع الحساب: asset
    الطبيعة: debit
    هل حساب نهائي؟ نعم

أنشئ Pull Request جاهزًا بهذه التعديلات، مع الحفاظ على الاستقرار والاعتماد على البنية الحالية للمشروع.

The following is the prior conversation context from the user's chat exploration (may be truncated):

User: بدي طريقة ومثال اضافة حسابًا رئيسيًا اعطيني الخطوات ثم خطوات الفرعي + المشكلة ما زالت تظهر debit تظهر مزاحة/مقطوعة

Assistant: ممتاز، الآن الصورة أوضح جدًا.
سنمشي في مسارين معًا:

  1. أعطيك الطريقة الصحيحة لإضافة حساب رئيسي ثم حساب فرعي مع أمثلة
  2. أصلح لك مشكلة النص المقطوع داخل القوائم مثل debit و asset

أولًا: كيف تضيف حسابًا رئيسيًا

الحساب الرئيسي = حساب تجميعي، ليس بالضرورة يتم الترحيل عليه مباشرة.

مثال محاسبي ممتاز:

حساب رئيسي: الصندوق

  • رمز الحساب: 1100
  • اسم الحساب: الصندوق
  • الاسم بالإنجليزية: Cash
  • نوع الحساب: asset
  • الطبيعة: debit

الخطوات:

1) افتح:

دليل الحساباتحساب جديد

2) عبئ الحقول هكذا:

  • الحساب الأب: -- بدون أب --
  • رمز الحساب: 1100
  • اسم الحساب: الصندوق
  • الاسم بالإنجليزية: Cash
  • نوع الحساب: asset
  • الطبيعة: debit

3) هل حساب نهائي؟

إذا أردته رئيسيًا:

أزل علامة الصح
يعني يصبح:

  • هل حساب نهائي؟ = لا

4) يسمح بالترحيل المباشر؟

إذا هو حساب رئيسي، الأفضل:

  • لا تسمح بالترحيل المباشر
    وغالبًا النظام عندك يربطها مع checkbox الحساب النهائي

5) الرصيد الافتتاحي

ضع:

  • 0.000

6) جانب الرصيد

  • debit

7) اضغط حفظ


ثانيًا: كيف تضيف حسابًا فرعيًا

الفرعي = الحساب الذي غالبًا يتم الترحيل عليه.

مثال:

حساب فرعي تحت الصندوق:

  • 1101 الصندوق الرئيسي
  • 1102 صندوق الفرع
  • 1103 صندوق المصروفات

الخطوات:

1) افتح:

دليل الحساباتحساب جديد

2) عبئ الحقول:

  • الحساب الأب: اختر الصندوق [1100]
  • رمز الحساب: 1101
  • اسم الحساب: الصندوق الرئيسي
  • الاسم بالإنجليزية: Main Cash
  • نوع الحساب: asset
  • الطبيعة: debit

3) هل حساب نهائي؟

هنا:

  • ضع علامة الصح ✅
    لأنه حساب فرعي نهائي

4) الرصيد الافتتاحي

مثلاً:

  • 5000.000

5) جانب الرصيد

  • debit

6) اضغط حفظ


مثال جاهز تطبقه الآن

##...

This pull request was created from Copilot chat.

…and select CSS

Agent-Logs-Url: https://github.com/moded12/acc3/sessions/8f2da13f-3183-4f93-bc71-76927eddc255

Co-authored-by: moded12 <162719285+moded12@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix account directory screen and account tree display Sprint 1: Fix accounts tree empty state, post-save refresh flow, and parent dropdown staleness Apr 21, 2026
Copilot AI requested a review from moded12 April 21, 2026 14:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants