تفاصيل المشروع

نبذة عن تطبيق غلة — للمطور

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

التطبيق مبني بـ Flutter، حاليًا في مرحلة نموذج جاهز تقريبًا (نسخة معاينة تعمل، البيانات مستضافة على Supabase)، والهدف إكمال العمل عليه ثم رفعه على App Store وGoogle Play.

وهذا ما اريد

مميزات

١- عند وجود طلب صيانه تفتح رسالة للمؤجر هل تريد سباك اذا ضغط على نعم يتم ارسال رسالة للادمن والسباك الذي وضع رقمه الادمن بالمشكلة لارسال السباك فورا ( طبعاً ارقام السباكين والكهربائيين يقدر الادمن تغييرها حسب الاتفاقيات مع السباكين سباك جديد وسباك قديم )

٢- رسائل وخطابات للمستاجر قبل موعد الدفعه ب ١٥ يوم ويوم الدفعه وبعد حلولها ب ٥ ايام ثم بعد اخر رسالة ب ٥ ايام يتم ارسال رسالة تحذيريه للرفع لمحكمة التنفيذ للاخلاء

٣- وضع خانة التواصل مع المكتب للعقود تحت خانة استشارة قانونية عقارية ( تواصل مع المكتب لابرام العقود )

٤- تكون خانة الاستشارة القانونية والمكتب في صفحة المزيد بشكل مرتب اكثر

٥- امكانية تحميل جدول الدفعات لكل مستاجر pdf

٦ التقارير تكون في الصفحة الرئيسية مكان عقارات لانها مكررة مرتين التقارير تكون مكان العقارات الي فوق المستاجرين

المشكلات التي يجب حلها

1. مبلغ إجمالي المتأخرات لا يظهر — يعرض “ا,…” بدل رقم فعلي. المكان: الصفحة الرئيسية، بطاقة تنبيه المتأخرات. الحل: فحص دالة تنسيق الأرقام المرتبطة بهذا الحقل تحديدًا، والتأكد أن القيمة تُجلب من قاعدة البيانات وتُمرَّر كاملة قبل العرض. الحالة: لم يتم.

2. مبالغ مالية تظهر مقطوعة وغير مكتملة في بطاقات الدفعات، مثال: “٧,٥٠..” بدل الرقم الكامل. المكان: صفحة الدفعات وصفحة الصيانة. الحل: فحص إن كانت المشكلة قص نصي بسبب ضيق الصندوق، أو خطأ في دالة التنسيق نفسها، مع التأكد من ظهور الرقم كاملاً في كل الحالات حتى الأرقام الكبيرة. الحالة: لم يتم.

🟠 Critical — يجب إصلاحها فورًا

3. ظهور كلمة إنجليزية “vacant” داخل واجهة عربية بالكامل. المكان: شارات حالة الوحدة في صفحة الوحدات. الحل: ترجمة كل شارات الحالة مثل vacant وrented وmaintenance إلى عربي في طبقة العرض، أو تخزينها مترجمة من الأساس. الحالة: لم يتم.

🟡 Important — مهم لكن يمكن إطلاق النسخة الأولى بدونه

4. العقود القريبة من الانتهاء غير ظاهرة في الصفحة الرئيسية. المكان: الصفحة الرئيسية. الحل: إضافة عداد أو تنبيه للعقود التي تنتهي خلال فترة قريبة، مثلاً خلال 30 إلى 60 يومًا. الحالة: لم يتم.

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

قائمة المشاكل البرمجية

🔴 يجب إصلاحه قبل الإطلاق

1) تجديد العقد غير Atomic — خطر فقدان بيانات

الملف: hooks/useContracts.ts → useRenewContract

المشكلة: تحديث العقد القديم لـ expired ثم إدراج عقد جديد كخطوتين منفصلتين. لو فشلت الخطوة الثانية، يضيع العقد بلا بديل.

الحل: تحويلها لـ Postgres Function واحدة (RPC) داخل Transaction واحدة.

2) تخزين الـ Session مرتين (Supabase + Zustand/AsyncStorage)

الملف: store/authStore.ts

المشكلة: التوكنات تُخزَّن مرتين، وAsyncStorage غير مشفّر افتراضيًا.

الحل: الاعتماد على supabase.auth.getSession() فقط، أو استخدام expo-secure-store عند الحاجة.

3) تعارض في عتبة "قرب انتهاء العقد" بين قاعدة البيانات والتطبيق

الملفات: lib/statuses.ts مقابل migration_commercial_legal.sql

المشكلة: قاعدة البيانات تستخدم 90/60 يوم حسب النوع، بينما التطبيق يستخدم 30 يوم ثابت لكل العقود.

الحل: حذف منطق الـ 30 يوم من التطبيق والاعتماد فقط على دالة قاعدة البيانات.

4) annual_rent وsecurity_deposit بلا أي تحقق رقمي

الملفات: app/(tabs)/contracts/add.tsx (سطر 21) + FULL_SCHEMA.sql (سطر 101، 107)

المشكلة: لا تحقق أن القيمة رقم صالح أو أكبر من صفر، لا في الواجهة ولا في قاعدة البيانات.

الحل: إضافة .refine() في Zod (رقم > 0) + CHECK (annual_rent > 0) وCHECK (security_deposit >= 0) في قاعدة البيانات.

5) دفعات بمبالغ سالبة تلقائيًا إذا كان التأمين أكبر من الإيجار

الملف: FULL_SCHEMA.sql سطر 277 (trigger generate_payments_for_contract)

المشكلة: نتيجة مباشرة لمشكلة #4.

الحل: إضافة تحقق داخل دالة التريغر نفسها بالإضافة لمنعها من الواجهة.

🟠 يُفضَّل إصلاحه

6) تحديثات على كامل جدول المدفوعات/العقود عند كل فتح لشاشة المدفوعات

الملف: lib/statuses.ts (يُستدعى من usePayments)

الحل: نقلها لمهمة مجدولة (Cron / Edge Function) بدل تنفيذها من كل قراءة.

7) حذف الوحدات بدون فلتر user_id صريح

الملف: hooks/useProperties.ts (~سطر 353)

الحل: إضافة .eq('user_id', userId) صراحة في كل عملية حذف/تعديل، كقاعدة ثابتة بكل الملفات.

8) قسمة annual_rent على عدد الدفعات بدون معالجة الباقي

الملف: generate_payments_for_contract() في migration_commercial_legal.sql

الحل: إضافة الفرق المتبقي لآخر دفعة تلقائيًا.


صاحب المشروع
تركي ا.
  • طالب خدمة
تاريخ التسجيل
معدل التوظيف
المشاريع المفتوحة 1
مشاريع قيد التنفيذ 0
التواصلات الجارية 7

تقدم للمشروع

العروض المقدمة

السلام عليكم، أقدر أستلم معك تطوير تطبيق غلة على الكود الحالي بـ Flutter وSupabase، وأكمل المميزات المطلوبة مع معالجة المشاكل الموجودة في التطبيق وقاعدة البيانا...

قبولك لهذا العرض يعتبر اتفاقاً بينك وبين المستقل وسيبقى موقع مستقل وسيطاً بينكما حتى تسليم المشروع. تأكد من اختيارك للعرض المناسب باتّباع النصائح التالية:

  • راجع صفحة حساب المستقل الذي اخترته واطّلع على أعماله السابقة
  • احرص دائمًا على إبقاء التواصل مع المستقل داخل الموقع وذلك لضمان حقوقك
  • لا تتردد من التواصل معنا ان احتجت لأي مساعدة، نحن نحب مساعدتك!

قيمة العرض

$0

رسوم بدء المشروع

$0

المجموع الكلي

$0

المستقل غير متاح حالياً لاستلام مشاريع جديدة. يمكنك إرسال رسالة له لتحديث إعدادات حسابه وتفعيل خيار "متاح للتوظيف"، ثم إعادة المحاولة بعد ذلك، أو اختيار عرض مستقل آخر.