Compare commits

..

No commits in common. 'master' and 'mirza_development' have entirely different histories.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="9.688" viewBox="0 0 13 9.688">
<g id="Group" transform="translate(6 17.688) rotate(180)">
<path id="Vector" d="M13,4.844a.781.781,0,0,1-.781.781H2.674L5.414,8.352a.781.781,0,0,1-1.1,1.108L.23,5.4h0a.782.782,0,0,1,0-1.106h0L4.312.227a.781.781,0,0,1,1.1,1.108L2.674,4.062h9.545A.781.781,0,0,1,13,4.844Z" transform="translate(-7 8)"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 411 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

@ -76,16 +76,16 @@
"userRoleOrTitle": "عنوان المستخدم", "userRoleOrTitle": "عنوان المستخدم",
"codeSentToEmail": "تم ارسال الرمز للايميل", "codeSentToEmail": "تم ارسال الرمز للايميل",
"number": "موبايل", "number": "موبايل",
"english": "عربي", "english": "English",
"title": "مرحبًا", "title": "Hello",
"msg": "Hello {} in the {} world ", "msg": "Hello {} in the {} world ",
"msg_named": "{} are written in the {lang} language", "msg_named": "{} are written in the {lang} language",
"clickMe": "انقر فوق لي", "clickMe": "Click me",
"profile": { "profile": {
"reset_password": { "reset_password": {
"label": "إعادة تعيين كلمة المرور", "label": "Reset Password",
"username": "اسم المستخدم", "username": "Username",
"password": "كلمة المرور" "password": "password"
} }
}, },
"clicked": { "clicked": {
@ -112,7 +112,7 @@
"female": "Hello girl :) {}" "female": "Hello girl :) {}"
} }
}, },
"reset_locale": "إعادة ضبط اللغة", "reset_locale": "Reset Language",
"welcomeDes": "أنت مكان واحد لكل ما تحتاجه سيارتك", "welcomeDes": "أنت مكان واحد لكل ما تحتاجه سيارتك",
"log_in": "تسجيل الدخول", "log_in": "تسجيل الدخول",
"send": "إرسال", "send": "إرسال",
@ -182,637 +182,8 @@
"selectServiceCategory": "حدد فئة الخدمة", "selectServiceCategory": "حدد فئة الخدمة",
"selectService": "حدد الخدمة", "selectService": "حدد الخدمة",
"selectBranch": "حدد الفرع", "selectBranch": "حدد الفرع",
"createBranch": "إنشاء فرع", "createBranch": "Create Branch",
"updateBranch": "تحديث فرع", "updateBranch": "Update Branch",
"branches": "الفروع", "branches": "Branches",
"requests": "الطلبات", "requests": "Requests"
"noBranchFound": "لم يتم العثور على فرع",
"onlyProviderApp": "نأسف هذا التطبيق فقط لمقدمي الخدمات",
"pickAddress": "اختر العنوان",
"pickLocation": "اختر الموقع",
"chooseCity": "اختر المدينه",
"selectAttachment": "اختيار مرفق",
"somethingWrong": "هناك خطأ ما",
"documentsUploaded": "تم ارفاق الملف بنجاح",
"update": "تحديث",
"profileCompleted": "الملف الشخصي مكتمل",
"selectLocationMap": "اختر الموقع",
"licensesAndCertifications": "الرخص و الشهادات",
"completeProfile1": "اكمل الملف الشخصي 1/3",
"completeProfile2": "اكمل الملف الشخصي 2/3",
"completeProfile3": "اكمل الملف الشخصي 3/3",
"provider": "مزود",
"noRequeststoShow": "لا توجد طلبات للعرض",
"myBranches": "فروعي",
"mergeAppointments": "دمج المواعيد",
"addService": "أضف الخدمة",
"selectServicestoAdd": "حدد الخدمات التي تريد إضافتها",
"noServiceFound": "لم يتم العثور على الخدمة",
"selectItems": "اختيار العناصر",
"noItemSelectedYet": "لم يتم تحديد أي عنصر بعد",
"totalAdditionalAmount": "إجمالي المبلغ الإضافي",
"sar": "ريال سعودي",
"cancel": "يلغي",
"add": "يضيف",
"itemsAddedSuccessfully": "تمت إضافة العناصر بنجاح",
"pleaseSelectItems": "يرجى اختيار العناصر",
"totalAmount": "المبلغ الإجمالي",
"searchItems": "البحث عن العناصر",
"addSelectedItems": "إضافة العناصر المحددة",
"collectMoneyBefore": "هل ترغب في جمع المال قبل تقديم الخدمات؟",
"yes": "نعم",
"no": "لا",
"reason": "السبب",
"typeHere": "اكتب هنا...",
"pleaseSelectReason": "يرجى تحديد السبب",
"noAppointmentFound": "لم يتم العثور على مواعيد",
"slotsOverview": "نظرة عامة على الفتحات",
"empty": "فارغ",
"occupied": "محجوز",
"totalSlots": "إجمالي الفتحات",
"selectAppointments": "اختيار المواعيد",
"appointmentMergeSuccessfully": "دمج المواعيد تم بنجاح",
"updateAppointment": "تحديث الموعد",
"addNewService": "إضافة خدمة جديدة",
"waitingPaymentfromtheCustomer": "في انتظار الدفع من العميل",
"appointmentisCompleted": "تم اكتمال الموعد",
"workStart": "بدء العمل",
"payNow": "ادفع الآن",
"arrived": "وصل",
"payLater": "ادفع لاحقًا",
"complete": "اكتمل",
"makeAnOffer": "قدم عرضًا",
"provideOffer": "تقديم العرض",
"enterAmount": "أدخل المبلغ",
"submit": "إرسال",
"viewChat": "عرض الدردشة",
"requestDetail": "تفاصيل الطلب",
"sendOffer": "إرسال عرض",
"offer": "عرض",
"sendPriceOffer": "إرسال عرض السعر",
"comment": "تعليق",
"sendOTP": "إرسال رمز OTP",
"noUserAddedYet": "لم يتم إضافة مستخدم بعد",
"assignDealerUser": "تعيين مستخدم تاجر",
"createNewUser": "إنشاء مستخدم جديد",
"dealerUser": "مستخدم تاجر",
"setorEditBranchSchedule": "تعيين أو تحرير جدول الفروع",
"addServices": "إضافة خدمات",
"noServiceAddedYet": "لم تتم إضافة خدمات بعد",
"selectDays": "اختيار الأيام",
"addSelectedDays": "إضافة الأيام المحددة",
"select_Services": "اختيار الخدمات",
"searchService": "البحث عن الخدمة",
"addSelectedServices": "إضافة الخدمات المحددة",
"nameofSchedule": "اسم الجدول الزمني",
"startingDate": "تاريخ البدء",
"endDate": "تاريخ الانتهاء",
"offDays": "أيام الراحة",
"shiftStartTime": "وقت بدء الوردية",
"shiftEndTime": "وقت انتهاء الوردية",
"slotsTime": "وقت الفتحات",
"appointmentPerSlot": "موعد لكل فتحة",
"create": "إنشاء",
"pleaseEnterValidScheduleName": "يرجى إدخال اسم جدول صالح",
"pleaseSelectServices": "يرجى اختيار الخدمات",
"pleaseSelectStartDate": "يرجى تحديد تاريخ البدء",
"pleaseSelectEndDate": "يرجى تحديد تاريخ الانتهاء",
"pleaseSelectOffDays": "يرجى تحديد أيام الراحة",
"pleaseSelectStartTime": "يرجى تحديد وقت بدء الوردية",
"pleaseSelectEndTime": "يرجى تحديد وقت انتهاء الوردية",
"pleaseSelectSlotTime": "يرجى تحديد وقت الفتحة",
"pleaseSelectAppointmentPerSlot": "يرجى تحديد موعد لكل فتحة",
"exploreAds": "استكشاف الإعلانات",
"myAds": "إعلاناتي",
"noAppointmentstoShow": "لا توجد مواعيد لعرضها",
"myRecommendedAds": "الإعلانات الموصى بها لي",
"model": "الموديل",
"chooseImageSource": "اختر مصدر الصورة",
"camera": "الكاميرا",
"gallery": "المعرض",
"imageIsDeleted": "تم حذف الصورة",
"myRequests": "طلباتي",
"branchDetail": "تفاصيل الفرع",
"time": "الوقت",
"openMapLocation": "فتح موقع الخريطة",
"providerProfile": "ملف المزود",
"servicesOffer": "الخدمات المقدمة",
"noServicesAvailable": "لا تتوفر خدمات",
"bookAppointment": "حجز موعد",
"allowingHomeService": "السماح بخدمة منزلية",
"homeServiceRange": "نطاق الخدمة المنزلية",
"chargesPerKM": "الرسوم لكل كيلومتر",
"providerDetails": "تفاصيل المزود",
"someDescriptionExperienceandtheirReputation": "بعض الوصف عن المزود وسنوات خبرتهم وسمعتهم",
"availableforAppointment": "متاح للموعد",
"allowingWorkshopService": "السماح بخدمة ورشة العمل",
"serviceAmount": "مبلغ الخدمة",
"youNeedStoragePermissionFiles": "تحتاج إلى منح إذن التخزين لاختيار الملفات.",
"settingDeniedPermanently": "تم رفض هذا الإذن بشكل دائم، يرجى الذهاب إلى الإعدادات والسماح.",
"openAppSetting": "افتح إعدادات التطبيق",
"adDuration": "مدة الإعلان",
"startDate": "تاريخ البدء",
"contactDetails": "تفاصيل الاتصال",
"showyournumbertoBuyers": "هل تريد إظهار رقمك للمشترين؟",
"isNumberRegisteredWhatsApp": "هل هذا الرقم مسجل على واتساب؟",
"selectSpecialServices": "اختر الخدمات الخاصة",
"vehicleDetails": "تفاصيل المركبة",
"vehicleModel": "طراز المركبة",
"vehicleColor": "لون المركبة",
"vehicleCategory": "فئة المركبة",
"vehicleTransmission": "نقل المركبة",
"vehicleCountry": "بلد المركبة",
"vehicleAmount": "مبلغ المركبة",
"vehicleTitle": "عنوان المركبة",
"financeAvailable": "التمويل متاح",
"vehiclePictures": "صور المركبة",
"vehiclePart": "جزء المركبة",
"damagePartPictures": "صور الأجزاء المتضررة",
"vehicleDamagePart": "جزء المركبة المتضرر",
"duration": "المدة",
"specialServices": "الخدمات الخاصة",
"specialService": "خدمة خاصة",
"adContactDetails": "تفاصيل الاتصال بالإعلان",
"onWhatsAp": "على واتساب",
"reserveAdPriceInfo": "معلومات سعر الإعلان المحجوز",
"addDamagePart": "إضافة جزء متضرر",
"vehicleType": "نوع المركبة",
"vehicleYear": "سنة المركبة",
"vehicleCondition": "حالة المركبة",
"vehicleMileage": "عدد الأميال للمركبة",
"sellerType": "نوع البائع",
"vehicleCity": "مدينة المركبة",
"vehicleVIN": "رقم تعريف المركبة (VIN)",
"warrantyAvailable": "الضمان متاح",
"years": "سنوات",
"vehicleDetail": "تفاصيل المركبة",
"vehicleBrand": "ماركة المركبة",
"vehicleModelYear": "سنة طراز المركبة",
"vehicleSellerType": "نوع بائع المركبة",
"demandAmount": "المبلغ المطلوب",
"warrantyAvailableYears": "الضمان متاح (عدد السنوات)",
"vehicleDescription": "وصف المركبة",
"attachImage": "إرفاق صورة",
"useFingerPrintFaceID": "يرجى استخدام بصمة الإصبع أو معرف الوجه",
"setupTouchID": "يرجى إعداد معرف اللمس",
"reenableTouchID": "يرجى إعادة تمكين معرف اللمس",
"scanFaceIDAuthenticate": "امسح بصمة الإصبع أو معرف الوجه للتحقق",
"adDeletedSuccessfully": "تم حذف الإعلان بنجاح!",
"yourReservationCancelled": "تم إلغاء حجزك.",
"adDeactivatedSuccessfully": "تم إلغاء تفعيل الإعلان بنجاح!",
"vehicle": {
"selectVehicleType": "يرجى اختيار نوع السيارة",
"selectVehicleModel": "يرجى اختيار طراز السيارة",
"selectVehicleModelYear": "يرجى اختيار سنة طراز السيارة",
"selectVehicleColor": "يرجى اختيار لون السيارة",
"vehicleCondition": "يرجى اختيار حالة السيارة",
"vehicleCategory": "يرجى اختيار فئة السيارة",
"vehicleMileage": "يرجى اختيار عدد أميال السيارة",
"vehicleTransmission": "يرجى اختيار نوع ناقل الحركة",
"vehicleSellerType": "يرجى اختيار نوع بائع السيارة",
"selectAny": "يرجى اختيار أي خيار",
"vehicleCity": "يرجى اختيار مدينة السيارة",
"vehiclePart": "يرجى اختيار جزء السيارة",
"selectValidVehicleType": "يرجى اختيار نوع سيارة صالح"
},
"selectAppointmentTimeService": "يجب عليك اختيار وقت الموعد للخدمة.",
"error": "خطأ",
"appointmentBookedSuccessfully": "تم حجز موعدك بنجاح",
"appointmentStatusUpdated": "تم تحديث حالة الموعد",
"paymentStatusUpdated": "تم تحديث حالة الدفع",
"selectOneSubService": "يرجى اختيار خدمة فرعية واحدة على الأقل",
"chargesBreakdown": "تفاصيل الرسوم",
"services": "الخدمات",
"homeLocation": "الموقع المنزلي",
"selectAppointmentTime": "يجب عليك اختيار وقت الموعد لكل موعد في الجدول",
"noAppointmentAvailable": "لا توجد مواعيد متاحة للعناصر المحددة",
"changedMind": "لقد غيرت رأيي",
"veryHighPrice": "السعر مرتفع جداً",
"alreadySold": "تم البيع بالفعل",
"otherVar": "أخرى",
"paymentSuccessful": "تم الدفع بنجاح",
"paymentFailed": "فشل الدفع!",
"requestSuccessfullyCreated": "تم إنشاء الطلب بنجاح",
"selectValidRequestType": "يرجى اختيار نوع طلب صالح",
"selectValidBrand": "يرجى اختيار علامة تجارية صالحة",
"selectValidModel": "يرجى اختيار طراز صالح",
"selectValidYear": "يرجى اختيار سنة صالحة",
"selectValidCountry": "يرجى اختيار بلد صالح",
"selectValidCity": "يرجى اختيار مدينة صالحة",
"addValidPrice": "يرجى إضافة سعر صالح",
"addValidDescription": "يرجى إضافة وصف صالح",
"passwordTooShort": "كلمة المرور الخاصة بك قصيرة جدًا",
"passwordAcceptableStrong": "كلمة المرور الخاصة بك مقبولة ولكنها ليست قوية",
"passwordIsStrong": "كلمة المرور الخاصة بك قوية",
"passwordVeryStrong": "كلمة المرور الخاصة بك قوية جدًا",
"selectDuration": "اختر المدة",
"daysVar": "الأيام",
"adCharges": "رسوم الإعلان",
"select": "اختر",
"deleteAdConfirmation": "هل تريد حذف الإعلان؟",
"deleteAdConfirmationMessage": "سيتم حذف إعلانك نهائيًا ولا يمكنك التراجع عن هذا الإجراء",
"mileage": "المسافة المقطوعة",
"transmission": "ناقل الحركة",
"demand": "الطلب",
"adDurationExpired": "انتهت مدة عرض الإعلان الخاص بك",
"bankDetails": "تفاصيل البنك",
"bankName": "اسم البنك",
"iban": "الرقم الدولي للحساب المصرفي (IBAN)",
"rejectionComments": "تعليقات الرفض",
"editAd": "تعديل الإعلان",
"reserveAd": "حجز الإعلان",
"reservationAmount": "مبلغ الحجز",
"belowAmountPayLater": "المبلغ الذي ستدفعه لاحقًا",
"carPrice": "سعر السيارة",
"vatExcluded": "القيمة المضافة غير مشمولة",
"carInsuranceService": "خدمة التأمين على السيارة",
"toBeDecided": "لم يتم اتخاذ القرار بعد",
"registrationCarPlates": "تسجيل ولوحات السيارة",
"homeDeliveryService": "خدمة التوصيل إلى المنزل",
"specialServicechargesInsuranceDeliveryLocation": "سيتم إضافة رسوم خدمة خاصة بناءً على التأمين المطلوب وموقع التسليم",
"estimated": "مقدر",
"servicesReservingAd": "بعض الخدمات إلزامية أثناء حجز الإعلان",
"completeReservation": "إتمام الحجز",
"contact": "اتصال",
"setDateandTime": "تحديد التاريخ والوقت",
"selectOffice": "اختيار المكتب",
"availableSlots": "المواعيد المتاحة",
"bookAndPay": "الحجز والدفع",
"reservationAmounts": "مبالغ الحجز",
"tax": "الضريبة",
"adsFilter": "تصفية الإعلانات",
"searchByCity": "البحث حسب المدينة",
"selectCity": "اختر المدينة",
"searchByBrandName": "البحث حسب اسم العلامة التجارية",
"selectVehicleBrand": "اختر علامة تجارية للسيارة",
"searchByVehicleYear": "البحث حسب سنة السيارة",
"selectYear": "اختر السنة",
"searchByAdOwner": "البحث حسب مالك الإعلان",
"selectOwner": "اختر المالك",
"search": "بحث",
"clearFilters": "مسح التصفية",
"book": "حجز",
"markAsSold": "وضع علامة تم البيع",
"deactivateAd": "إلغاء تفعيل الإعلان",
"doWantDeactivateAd": "هل تريد إلغاء تفعيل هذا الإعلان؟",
"stoptheBuyers": "سنتوقف عن عرض هذا الإعلان للمشترين",
"cancelReservation": "إلغاء الحجز",
"reasonForCancellation": "سبب الإلغاء",
"doWantCancelReservation": "هل تريد إلغاء الحجز؟",
"yourAdVisibletoBuy": "سيتم إلغاء حجز إعلانك وسيكون هذا الإعلان مرئيًا للجميع مرة أخرى للشراء",
"completeDeal": "إتمام الصفقة",
"uploadBankReceipt": "تحميل إيصال البنك",
"notesForAdmin": "ملاحظات للإدارة",
"extendAd": "تمديد الإعلان",
"updateAdDetails": "هل تريد تحديث تفاصيل الإعلان",
"durationExtendingAd": "يمكنك تغيير مدة الإعلان والتفاصيل قبل تمديد الإعلان",
"waitingAdminsResponse": "في انتظار رد الإدارة",
"cancelledByOwner": "ألغيت من قبل المالك",
"cancelledByAdmin": "ألغيت من قبل الإدارة",
"reservationTimeOver": "انتهى وقت الحجز",
"paymentVerified": "تم التحقق من الدفع",
"rejectedFormAdmin": "تم الرفض من قبل الإدارة",
"waitingAdminPost": "في انتظار الإدارة للنشر",
"waitingAdminsApproval": "في انتظار موافقة الإدارة",
"sold": "تم البيع",
"noAdsShow": "لا توجد إعلانات لعرضها",
"damagePartList": "قائمة الأجزاء المتضررة",
"searchPart": "البحث عن جزء",
"addSpecialService": "إضافة خدمة خاصة",
"vehicleVar": "السيارة",
"detailsVar": "التفاصيل",
"damageVar": "الضرر",
"partsVar": "الأجزاء",
"additional": "إضافي",
"review": "مراجعة",
"adVar": "الإعلان",
"updateAd": "تحديث الإعلان",
"createAd": "إنشاء إعلان",
"next": "التالي",
"submitAd": "إرسال الإعلان",
"selectAdType": "اختر نوع الإعلان",
"validUntilSubscriptionExpiration": "صالح حتى انتهاء الاشتراك",
"youLeftAdsGivenSubscription": "لقد تركت مع إعلانات محدودة الواردة في الاشتراك.",
"updateSubscription": "تحديث الاشتراك",
"workInProgress": "العمل جارٍ",
"visitCompleted": "تمت الزيارة",
"youWantCancelAppointment": "هل تريد إلغاء هذا الموعد؟",
"appointmentCancelledCannotUndoAction": "سيتم إلغاء موعدك ولا يمكنك التراجع عن هذا الإجراء",
"appointment": "الموعد",
"rescheduleAppointment": "إعادة جدولة الموعد",
"payforAppointment": "دفع ثمن الموعد",
"appointmentsFilter": "تصفية المواعيد",
"searchByProvider": "البحث حسب المزود",
"selectProvider": "اختر المزود",
"searchByBranch": "البحث حسب الفرع",
"searchByCategory": "البحث حسب الفئة",
"selectCategory": "اختر الفئة",
"searchByService": "البحث حسب الخدمة",
"selectServices": "اختر الخدمات",
"modifyPackage": "تعديل الحزمة",
"schedule": "الجدول",
"serviceLocation": "موقع الخدمة:",
"workshop": "ورشة العمل",
"itemsSelected": "العناصر المحددة",
"workshopFullAccessServices": "بعض الخدمات غير متوفرة في الموقع المنزلي. قم بتغيير الموقع إلى ورشة العمل للوصول الكامل إلى الخدمات",
"changeLocationService": "تغيير الموقع أو الخدمة:",
"someDescriptionSubServices": "بعض الوصف عن الخدمات الفرعية",
"selectServicesYouWant": "اختر الخدمات التي تريدها",
"selectServiceType": "اختر نوع الخدمة",
"selectDateAndTime": "اختر التاريخ والوقت",
"reviewAppointment": "مراجعة الموعد",
"carEngineCheck": "فحص محرك السيارة",
"dateAndTime": "التاريخ والوقت",
"timeLocation": "الوقت والموقع",
"serviceCharges": "رسوم الخدمة",
"locationCharges": "رسوم الموقع",
"payableNow": "المبلغ المستحق الآن",
"remainingAmount": "المبلغ المتبقي",
"branchesFilter": "تصفية الفروع",
"searchByDistance": "البحث حسب المسافة",
"searchByMinimumRatings": "البحث حسب التقييمات الأدنى",
"chat": "الدردشة",
"noRequestsShow": "لا توجد طلبات لعرضها.",
"typeMessageHere": "اكتب رسالتك هنا..",
"reject": "رفض",
"newOfferRequired": "مطلوب عرض جديد",
"offerHasBeenAccepted": "تم قبول العرض",
"offerHasBeenRejected": "تم رفض العرض",
"offerHasBeenCancelled": "تم إلغاء العرض",
"paymentMethod": "طريقة الدفع",
"selectPaymentMethod": "اختر طريقة الدفع",
"password": "كلمة المرور",
"customerName": "اسم العميل",
"createRequest": "إنشاء طلب",
"requestType": "نوع الطلب",
"brand": "العلامة التجارية",
"year": "السنة",
"price": "السعر",
"shippingDelivery": "الشحن/التسليم",
"offers": "العروض",
"noOffersShow": "لا توجد عروض لعرضها",
"allDocumentMandatoryDealershipProvider": "جميع المستندات إلزامية لمقدم خدمات الوكالة",
"documentsUploadedSuccessfully": "تم تحميل المستندات بنجاح",
"help": "المساعدة",
"faqs": "الأسئلة الشائعة",
"contactUs": "اتصل بنا",
"termPrivacy": "الشروط والخصوصية",
"inviteFriends": "دعوة الأصدقاء",
"more": "المزيد",
"language": "اللغة",
"mySubscription": "اشتراكاتي",
"subscriptions": "الاشتراكات",
"defineLicenses": "تحديد التراخيص",
"logOut": "تسجيل الخروج",
"customer": "العميل",
"amountVAR": "كمية",
"accept": "قبول",
"nowVar": "الآن",
"whendoyouWanttoUpgrade": "متى تريد الترقية",
"yourSubscriptionUpgradeAffectingFrom": "سيتم ترقية اشتراكك الآن. ساري المفعول من",
"upgradeAfterCurrentExpiry": "الترقية بعد انتهاء الاشتراك الحالي",
"yourSubscriptionUpgradeCurrentSubscriptionAffectingFrom": "سيتم ترقية اشتراكك بعد انتهاء اشتراكك الحالي. ساري المفعول من",
"upgradeVar": "ترقية",
"whendoyouWanttoRenew": "متى تريد التجديد",
"renewVar": "تجديد",
"requestAlreadyInProgress": "هذا الطلب قيد التقدم بالفعل.",
"acceptOfferConfirmation": "هل تريد قبول هذا العرض؟",
"acceptOfferConfirmationMessage": "سيتم قبول هذا العرض وستدفع المبلغ المطلوب للمشتري في وقت معين وإلا سيتم إلغاء هذا العرض.",
"noUpcomingAppointments": "لا مواعيد قادم..",
"addNewAppointment": "إضافة موعد جديد",
"myNearbyBranches": "فروعي القريبة",
"myRecentBranches": "فروعي الأخيرة",
"favoriteList": "قائمة المفضلة",
"noReviewsBranch": "هذا الفرع لا يوجد لديه تعليقات.",
"readLess": "اقرأ أقل",
"readMoreReviews": "اقرأ المزيد من التقييمات",
"noProvidersInFav": "ليس لديك أي مقدمي خدمات في المفضلة.",
"providerHasNoBranches": "هذا المزود ليس لديه فروع حتى الآن.",
"totalBranches": "إجمالي الفروع",
"memberSince": "عضو منذ",
"reserved": "محجوز",
"delete": "يمسح",
"deleteBranchConfirmation": "هل تريد حذف الفرع؟",
"deleteBranchConfirmationMessage": "سيتم حذف فرعك بشكل دائم ولن تتمكن من التراجع عن هذا الإجراء",
"reviewAndPayment": "المراجعة والدفع",
"awaitingPaymentFromCustomer": "في انتظار الدفع من العميل",
"awaitingResponseFromProvider": "في انتظار الرد من المزود",
"offerNoLongerAvailable": "العرض لم يعد متاحاً",
"doYouWantToCompleteThisDeal": "هل تريد إكمال هذه الصفقة؟",
"customerCompletingDealMeansThat": "إكمال هذه الصفقة يعني أن الطلب الذي قمت بنشره قد تم استلامه بنجاح ولا يمكن التراجع عن هذا الإجراء.",
"providerCompletingDealMeansThat": "إكمال هذه الصفقة يعني أنك قد قدمت الخدمة للعميل بنجاح وفقاً لطلبه ولا يمكن التراجع عن هذا الإجراء.",
"offerSummary": "ملخص العرض",
"personalInformation": "المعلومات الشخصية",
"name": "الاسم",
"phone": "الهاتف",
"serviceInformation": "معلومات الخدمة",
"locationInformation": "معلومات الموقع",
"additionalAddressDetails": "تفاصيل العنوان الإضافية",
"serviceName": "اسم الخدمة",
"serviceCategory": "فئة الخدمة",
"offerPrice": "سعر العرض",
"totalPrice": "السعر الإجمالي",
"providerName": "اسم المزود",
"createdOn": "تم الإنشاء في",
"manufacturedBy": "صُنع بواسطة",
"manufacturedOn": "تاريخ الصنع",
"shipping": "الشحن",
"delivery": "التسليم",
"selectDeliveryType": "اختر نوع التسليم",
"shippingManagementInstruction": "يرجى الذهاب إلى الإعدادات > شاشة إدارة الشحن لإدارة عناصر الشحن/التسليم بشكل أكبر.",
"withdrawOffer": "سحب العرض",
"manufacturer": "الصانع",
"priceRange": "نطاق السعر",
"cancelOffer": "إلغاء العرض",
"pleaseSpecify": "يرجى التحديد",
"customerNotResponding": "العميل غير متجاوب",
"cancelRequestPrompt": "هل تريد إلغاء هذا الطلب؟",
"requestPermanentlyCancelled": "سيتم إلغاء طلبك بشكل نهائي. لا يمكنك التراجع عن هذا الإجراء.",
"awaitingResponseFromCustomer": "في انتظار الرد من العميل",
"acknowledgePaymentToMowater": "أقر بأنه عند إكمال هذه الصفقة، سأدفع 2٪ من إجمالي هذه الصفقة لشركة مواتر مقابل خدماتهم.",
"requestsFilter": "تصفية الطلبات",
"searchByCondition": "البحث حسب الحالة",
"selectCondition": "حدد الحالة",
"searchByRequestType": "البحث حسب نوع الطلب",
"searchByCustomerName": "البحث حسب اسم العميل",
"searchByProviderName": "البحث حسب اسم المزود",
"searchByRequestStatus": "البحث حسب حالة الطلب",
"selectRequestType": "اختر نوع الطلب",
"selectRequestStatus": "اختر حالة الطلب",
"searchByRequestedDate": "البحث حسب تاريخ الطلب",
"selectDate": "اختر التاريخ",
"searchByVehicleModel": "البحث حسب طراز المركبة",
"customerCarePrompt": "هل لديك أي استفسار؟ نحن هنا لخدمتك. انقر هنا للتحدث مع خدمة العملاء لدينا الآن.",
"callNow": "اتصل الآن",
"condition": "الحالة",
"servicesNotAvailableHomeLocation": "بعض الخدمات غير متوفرة في الموقع المنزلي.",
"additionalChargesNotice": "هذه الرسوم إضافية على رسوم الخدمة الفعلية. قد تختلف الرسوم للعناصر الثقيلة.",
"selectServiceLocation": "اختر موقع الخدمة",
"apptOn": "التعيين في",
"merged": "مُدمج",
"date": "التاريخ",
"selectAll": "اختر الكل",
"unselectAll": "إلغاء اختيار الكل",
"copySelectedServices": "نسخ الخدمات المحددة",
"pictures": "الصور",
"noChatMessage": "لا توجد رسائل بعد. أرسل رسالة لبدء المحادثة!",
"shippingManagement": "إدارة الشحن",
"appointmentCancelled": "تم إلغاء الموعد",
"appointmentsPerSlot": "المواعيد لكل فترة زمنية",
"createSchedule": "إنشاء الجدول الزمني",
"addItems": "إضافة عناصر",
"itemName": "اسم العنصر",
"itemDescription": "وصف العنصر",
"itemPrice": "سعر العنصر",
"bookAppointmentForServices": "سيسمح هذا الخيار للعميل بحجز موعد لهذه الخدمات.",
"showServiceAvailability": "سيظهر هذا الخيار للعميل ما إذا كان بإمكانه الحصول على هذه الخدمة في الورشة أم لا.",
"bookAppointmentAtLocation": "سيسمح هذا الخيار للعميل بحجز موعد في الموقع الذي يرغب فيه.",
"appointmentBookingOption": "سيسمح هذا الخيار للعميل بحجز موعد لهذه الخدمات.",
"workshopAvailabilityOption": "سيظهر هذا الخيار للعميل إذا كان يمكنه الحصول على هذه الخدمة في الورشة أم لا.",
"appointmentLocationOption": "سيسمح هذا الخيار للعميل بحجز موعد في الموقع الذي يختاره.",
"deleteScheduleConfirmation": "هل أنت متأكد أنك تريد حذف هذا الجدول؟",
"deleteScheduleAdConfirmationMessage": "سيتم إزالة جميع فترات المواعيد ولن يتمكن العملاء من حجز مواعيد لهذا الجدول.",
"branchSchedules": "جداول الفرع",
"noSchedulesFound": "لم تقم بإضافة أي جدول لهذا الفرع.",
"inviteFriendsBySMS": "دعوة الأصدقاء عبر الرسائل القصيرة",
"inviteFriendsByWhatsApp": "دعوة الأصدقاء عبر واتساب",
"inviteFriendsByEmail": "دعوة الأصدقاء عبر البريد الإلكتروني",
"noFAQsToShow": "لا توجد أسئلة شائعة في الوقت الحالي. يرجى الاتصال بنا إذا كان لديك أي استفسار.",
"appInfo": "معلومات التطبيق",
"users": "المستخدمين",
"adsRemaining": "الإعلانات المتبقية",
"attachPDF": "إرفاق PDF",
"noItemsToShow": "لا توجد عناصر لعرضها.",
"serviceItem": "عنصر الخدمة",
"createdBy": "تم الإنشاء بواسطة",
"createGroupServices": "إنشاء خدمات المجموعة",
"logoutConfirmation": "هل أنت متأكد أنك تريد تسجيل الخروج؟",
"logoutConfirmationMessage": "سيتم تسجيل خروجك من التطبيق وسيتعين عليك إضافة اسم المستخدم وكلمة المرور مرة أخرى لتسجيل الدخول.",
"addToFavoritesOn": "تمت الإضافة إلى المفضلة في:",
"subscriptionDate": "تاريخ الاشتراك",
"expiresOn": "تنتهي صلاحيته",
"expired": "منتهي الصلاحية",
"upgradeBranches": "قم بترقية اشتراكك لإضافة المزيد من الفروع.",
"upgradeAds": "قم بترقية اشتراكك لإضافة المزيد من الإعلانات.",
"upgradeSubUsers": "قم بترقية اشتراكك لإضافة المزيد من المستخدمين الفرعيين.",
"explore": "استكشاف",
"manageRequests": "إدارة الطلبات",
"serviceNotAvailableAtHomeLocation": "الخدمة المختارة غير متوفرة في الموقع المحدد.",
"wantToRescheduleAppointment": "أرغب في إعادة جدولة الموعد.",
"noNeedForService": "لا أحتاج هذه الخدمة بعد الآن.",
"testTheService": "اختبر الخدمة.",
"companyLocation": "موقع الشركة",
"customerLocation": "موقع العميل",
"deliveryAvailable": "التوصيل متاح",
"viewed": "تم المشاهدة",
"updateUserDetails": "تحديث تفاصيل المستخدم",
"enterNewFirstName": "أدخل الاسم الأول",
"enterNewLastName": "أدخل الاسم الأخير",
"userDetailsUpdated": "يتم تحديث تفاصيل المستخدم",
"itemNoLongerAvailable": "لم يعد هذا العنصر متاحًا.",
"reactivateAd": "إعادة تنشيط الإعلان",
"dealOutsideApp": "تمت الصفقة خارج التطبيق مع عميل آخر.",
"noAgreementCustomer": "لا يوجد اتفاق من جانب العميل.",
"dealNotCompleted": "لم تكتمل الصفقة",
"changedDesireToSell": "غيرت رغبتي في بيع المركبة.",
"vehicleDealOutsideApp": "تمت صفقة المركبة خارج التطبيق.",
"markAdAsSoldDesc": "سيتم وضع علامة 'تم البيع' على هذا الإعلان، ولن يتمكن المستخدمون الآخرون من التواصل معك.",
"ownerInformation": "معلومات المالك",
"acceptedRequests": "الطلبات المقبولة",
"specialRequestChat": "دردشة الطلب الخاص",
"companyName": "اسم الشركة",
"noAvailableItems": "لا توجد عناصر متاحة.",
"serviceDeliveryType": "نوع تقديم الخدمة",
"noImagesToShow": "لا توجد صور للعرض",
"updateGroupServices": "تحديث خدمات المجموعة",
"addCommentsHere": "أضف التعليقات هنا",
"waitForBranchVerification": "يرجى الانتظار حتى يتم التحقق من الفرع.",
"reportComplaint": "تقديم شكوى",
"descriptionCannotBeEmpty": "وصف لا يمكن أن يكون فارغًا.",
"adMarkedAsSold": "تم وسم الإعلان كـ 'مباع' بنجاح!",
"chargesAndServiceRangeGreaterThanZero": "يجب أن تكون الرسوم ونطاق الخدمة أكبر من الصفر.",
"cannotSelectAllDaysAsOff": "لا يمكنك اختيار جميع الأيام كأيام عطلة.",
"endDateAfterStartDate": "يجب أن تكون تاريخ النهاية بعد تاريخ البدء.",
"pleaseEnterStartDateFirst": "من فضلك أدخل تاريخ البدء أولاً.",
"endTimeAfterStartTime": "يجب أن يكون وقت الانتهاء بعد وقت البدء.",
"pickedLocationNotice": "سيتم استخدام هذا الموقع لجميع الخدمات المنزلية في هذه الموعد",
"serviceNotProvided": "لسوء الحظ، هذه الخدمة غير متوفرة في الفرع الذي اخترته في هذا الموقع المحدد",
"pleaseSelectService": "يرجى اختيار خدمة واحدة على الأقل",
"operationalIssue": "مشكلة تشغيلية",
"materialIssue": "مشكلة في المواد",
"selectReasonBeforeCancel": "يرجى اختيار سبب قبل إلغاء هذا الموعد. لا يمكن التراجع عن هذا الإجراء.",
"blockedByAdmin": "تم حظرها من قبل المسؤول",
"active": "نشط",
"paymentType": "نوع الدفع",
"searchByCreatedDate": "البحث حسب تاريخ الإنشاء",
"cityNameMandatory": "المدينة إلزامية",
"genderMandatory": "الجنس إلزامي",
"updateCity": "تحديث المدينة",
"userGender": "جنس",
"userMale": "ذكر",
"userFemale": "أنثى",
"maxFileSelection": "يمكنك تحديد الحد الأقصى لملفات 7",
"maxFileSize": "يجب أن يكون حجم كل ملف أقل من 2 ميغابايت",
"onlyJPGandPNG": "يُسمح فقط بملفات JPG وPNG",
"expiryDate": "تاريخ انتهاء الصلاحية",
"dealCompleted": "تم إتمام الصفقة",
"theDealNotCompleted": "لم تكتمل الصفقة",
"cancelRequest": "أريد إلغاء الطلب.",
"highPrice": "سعر مرتفع",
"offerNotMatched": "العرض لم يتطابق مع الطلب.",
"offerRejected": "تم رفض العرض.",
"offerAccepted": "تم قبول العرض.",
"you": "أنتم",
"youCannotDeactivateThisServiceRightNow": "لا يمكنك تعطيل هذه الخدمة الآن لأن لديك مواعيد معلقة لهذه الخدمة. تفاصيل آخر موعد هي:",
"done": "تم",
"notice": "إشعار",
"serviceDeactivated": "تم تعطيل الخدمة",
"totalNumberOfServices": "عدد الخدمات:",
"noAvailableOfficesInCity": "لا توجد مكاتب متاحة في مدينتك لخدمتك.",
"searchByItem": "البحث حسب العنصر",
"selectBranchToCopyServices": "حدد الفرع لنسخ العناصر الخاصة بهم إلى هذا الفرع. يمكنك تعديل الاختيار في أي وقت.",
"tapToSeeItems": "اضغط لرؤية العناصر",
"tapToSelect": "اضغط للاختيار",
"noteCopyItemsExplanation": "ملاحظة: ستتمكن من نسخ العناصر من خدمة إلى أخرى في الفئة المحددة. يجب عليك إنشاء الخدمات أولاً ويجب أن تكون معتمدة. ثم ستتمكن من الحصول على الخدمات المتاحة التي يمكنك نسخ جميع العناصر منها أو تحديد العناصر التي تريد نسخها.",
"requestCreatedOn": "تم إنشاء الطلب في",
"online": "عبر الإنترنت",
"deliveryStatus": "حالة توصيلك / الشحن هي:",
"markAsCompleted": "ضع علامة كمكتمل",
"searchByServiceDelivery": "البحث حسب خدمة التوصيل",
"searchByMobileNumber": "البحث بواسطة رقم الجوال",
"enterMobileNumber": "أدخل رقم الجوال",
"enterCustomerName": "أدخل اسم العميل",
"tapToView": "انقر لعرض",
"noServicesAvailableToCopy": "لا توجد خدمات متاحة في هذا الفرع لنسخها.",
"copySelectedItems": "نسخ العناصر المحددة",
"noOfInvites": "عدد الدعوات",
"noSpecialServicesAvailable": "لا توجد خدمات خاصة متاحة للمنطقة المحددة.",
"customService": "الخدمة المخصصة",
"selectServiceDetails": "اختر تفاصيل الخدمة",
"addServiceDetails": "أضف تفاصيل الخدمة",
"companyNameMandatory": "اسم الشركة إلزامي",
"connectionProblem": "مشكلة في الاتصال",
"pleaseCheckConnection": "يرجى التحقق من اتصالك بالإنترنت والمحاولة مرة أخرى",
"ok": "نعم",
"continueAsGuest": "الاستمرار كضيف",
"loginToViewAppointments": "الرجاء تسجيل الدخول لعرض المواعيد",
"itemType": "غرض",
"upgradeSubscription": "قم بترقية اشتراكك",
"searchByAdID": "البحث برقم الإعلان",
"enterAdID": "أدخل رقم الإعلان",
"searchByDemandPrice": "البحث حسب سعر الطلب",
"enterStartPrice": "أدخل سعر البداية",
"enterEndPrice": "أدخل سعر النهاية",
"searchByVehicleType": "البحث حسب نوع المركبة",
"selectVehicleType": "اختر نوع المركبة",
"specialRequestsChats": "دردشات الطلبات الخاصة",
"selectDeliveryOption": "اختر خيار التوصيل",
"deliveryOptions": "خيارات التوصيل",
"selfPickup": "الالتقاط الذاتي",
"updateYourLocationInfo": "قم بتحديث معلومات موقعك",
"initiateSelfPickup": "بدء الاستلام الذاتي",
"selfPickupStatus": "حالة الالتقاط الذاتي",
"myDraftAds": "مسودتي للإعلانات",
"scheduleDeletedSuccessfully": "تم حذف الجدول بنجاح",
"addValidAddress": "رجى إضافة عنوان صالح"
} }

@ -40,7 +40,7 @@
"forgetPass": "Forget Password ?", "forgetPass": "Forget Password ?",
"phoneNumberVerified": "Phone Number Verified", "phoneNumberVerified": "Phone Number Verified",
"verifyNewPassword": "Verify New Password", "verifyNewPassword": "Verify New Password",
"EnterPass": "Enter Password", "EnterPass": "Enter Password ?",
"alreadySigned": " Already Signed Up and Logged In", "alreadySigned": " Already Signed Up and Logged In",
"emailChangedSuccessfully": "Email is Changed Successfully", "emailChangedSuccessfully": "Email is Changed Successfully",
"passwordIsUpdated": "Password is Updated", "passwordIsUpdated": "Password is Updated",
@ -76,7 +76,7 @@
"userRoleOrTitle": "User role or title", "userRoleOrTitle": "User role or title",
"codeSentToEmail": "Code is sent to email", "codeSentToEmail": "Code is sent to email",
"number": "Number", "number": "Number",
"english": "English", "english": "عربي",
"title": "Hello", "title": "Hello",
"msg": "Hello {} in the {} world ", "msg": "Hello {} in the {} world ",
"msg_named": "{} are written in the {lang} language", "msg_named": "{} are written in the {lang} language",
@ -186,631 +186,5 @@
"createBranch": "Create Branch", "createBranch": "Create Branch",
"updateBranch": "Update Branch", "updateBranch": "Update Branch",
"branches": "Branches", "branches": "Branches",
"requests": "Requests", "requests": "Requests"
"noBranchFound": "No Branch Found",
"pickAddress": "Pick Address",
"pickLocation": "Pick Location",
"chooseCity": "Select City",
"selectAttachment": "Select Attachment",
"somethingWrong": "Something went wrong",
"documentsUploaded": "Documents uploaded successfully",
"update": "Update",
"profileCompleted": "Profile is Completed",
"selectLocationMap": "Select Location Map",
"licensesAndCertifications": "licenses & certifications",
"completeProfile1": "Complete Profile 1/3",
"completeProfile2": "Complete Profile 2/3",
"completeProfile3": "Complete Profile 3/3",
"provider": "Provider",
"noRequeststoShow": "No Requests to Show",
"myBranches": "My Branches",
"mergeAppointments": "Merge Appointments",
"addService": "Add Service",
"selectServicestoAdd": "Select services you want to add",
"noServiceFound": "No Service Found",
"selectItems": "Select Items",
"noItemSelectedYet": "No Item Selected Yet",
"totalAdditionalAmount": "Total Additional Amount",
"sar": "SAR",
"cancel": "Cancel",
"add": "Add",
"itemsAddedSuccessfully": "Items are added Successfully",
"pleaseSelectItems": "Please select items",
"totalAmount": "Total Amount",
"searchItems": "Search Items",
"addSelectedItems": "Add Selected Items",
"collectMoneyBefore": "Do you want to collect the money before providing services?",
"yes": "Yes",
"no": "No",
"reason": "Reason",
"typeHere": "Type Here...",
"pleaseSelectReason": "Please Select Reason",
"noAppointmentFound": "No Appointment Found",
"slotsOverview": "Slots Overview",
"empty": "Empty",
"occupied": "Occupied",
"totalSlots": "Total Slots",
"selectAppointments": "Select Appointments",
"appointmentMergeSuccessfully": "Appointment Merge is Successfully done",
"updateAppointment": "Update Appointment",
"addNewService": "Add New Service",
"waitingPaymentfromtheCustomer": "Waiting for the payment from the customer",
"appointmentisCompleted": "Appointment is completed",
"workStart": "Work Start",
"payNow": "Pay Now",
"arrived": "Arrived",
"payLater": "Pay Later",
"complete": "Complete",
"makeAnOffer": "Make an offer",
"provideOffer": "Provide Offer",
"enterAmount": "Enter amount",
"submit": "Submit",
"viewChat": "View Chat",
"requestDetail": "Request Detail",
"sendOffer": "Send Offer",
"offer": "Offer",
"sendPriceOffer": "Send Price Offer",
"comment": "Comment",
"sendOTP": "Send OTP",
"noUserAddedYet": "No User Added Yet",
"assignDealerUser": "Assign Dealer User",
"createNewUser": "Create New User",
"dealerUser": "Dealer User",
"setorEditBranchSchedule": "Set or Edit Branch Schedule",
"addServices": "Add Services",
"noServiceAddedYet": "No Service Added Yet",
"selectDays": "Select Days",
"addSelectedDays": "Add Selected Days",
"select_Services": "Select Services",
"searchService": "Search Service",
"addSelectedServices": "Add Selected Services",
"nameofSchedule": "Name of Schedule",
"startingDate": "Starting Date",
"endDate": "End Date",
"offDays": "Off Days",
"shiftStartTime": "Shift Start Time",
"shiftEndTime": "Shift End Time",
"slotsTime": "Slots Time",
"appointmentPerSlot": "Appointment Per Slot",
"create": "Create",
"pleaseEnterValidScheduleName": "Please enter valid schedule Name",
"pleaseSelectServices": "Please select Services",
"pleaseSelectStartDate": "Please select start date",
"pleaseSelectEndDate": "Please select end date",
"pleaseSelectOffDays": "Please Select off Days",
"pleaseSelectStartTime": "Please select start time",
"pleaseSelectEndTime": "Please select end time",
"pleaseSelectSlotTime": "Please select slot time",
"pleaseSelectAppointmentPerSlot": "Please select appointment per slot",
"exploreAds": "Explore Ads",
"myAds": "My Ads",
"noAppointmentstoShow": "No Appointments to show",
"myRecommendedAds": "My Recommended Ads",
"model": "Model",
"chooseImageSource": "Choose image source",
"camera": "Camera",
"gallery": "Gallery",
"imageIsDeleted": "Image is Deleted",
"myRequests": "My Requests",
"branchDetail": "Branch Detail",
"time": "Time",
"openMapLocation": "Open Map Location",
"providerProfile": "Provider Profile",
"servicesOffer": "Services Offer",
"noServicesAvailable": "No Services Available",
"bookAppointment": "Book Appointment",
"allowingHomeService": "Allowing home service",
"homeServiceRange": "Home service range",
"chargesPerKM": "Charges per KM",
"providerDetails": "Provider Details",
"someDescriptionExperienceandtheirReputation": "Some description about the provider and their years of experience and their reputation",
"availableforAppointment": "Available for appointment",
"allowingWorkshopService": "Allowing Workshop service",
"serviceAmount": "Service Amount",
"youNeedStoragePermissionFiles.": "You need to give storage permission to select files.",
"settingDeniedPermanently": "This permission was denied permanently, Please go to settings and allow. ",
"openAppSetting": "Open App Setting",
"adDuration": "Ad Duration",
"startDate": "Start Date",
"contactDetails": "Contact Details",
"showyournumbertoBuyers": "Do you want to show your number to the buyers?",
"isNumberRegisteredWhatsApp": "Is this number registered on WhatsApp?",
"selectSpecialServices": "Select Special Services",
"vehicleDetails": "Vehicle Details",
"vehicleModel": "Vehicle Model",
"vehicleColor": "Vehicle Color",
"vehicleCategory": "Vehicle Category",
"vehicleTransmission": "Vehicle Transmission",
"vehicleCountry": "Vehicle Country",
"vehicleAmount": "Vehicle Amount",
"vehicleTitle": "Vehicle Title",
"financeAvailable": "Finance Available",
"vehiclePictures": "Vehicle Pictures",
"vehiclePart": "Vehicle Part",
"damagePartPictures": "Damage Part Pictures",
"vehicleDamagePart": "Vehicle Damage Part",
"duration": "Duration",
"specialServices": "Special Services",
"specialService": "Special Service",
"adContactDetails": "Ad Contact Details",
"onWhatsAp": "On WhatsAp",
"reserveAdPriceInfo": "Reserve Ad Price Info",
"addDamagePart": "Add Damage Part",
"vehicleType": "Vehicle Type",
"vehicleYear": "Vehicle Year",
"vehicleCondition": "Vehicle Condition",
"vehicleMileage": "Vehicle Mileage",
"sellerType": "Seller Type",
"vehicleCity": "Vehicle City",
"vehicleVIN": "Vehicle VIN",
"warrantyAvailable": "Warranty Available",
"years": "Years",
"vehicleDetail": "Vehicle Detail",
"vehicleBrand": "Vehicle Brand",
"vehicleModelYear": "Vehicle Model Year",
"vehicleSellerType": "Vehicle Seller Type",
"demandAmount": "Demand Amount",
"warrantyAvailableYears": "Warranty Available (No. of Years)",
"vehicleDescription": "Vehicle Description",
"attachImage": "Attach Image",
"useFingerPrintFaceID": "Please use your fingerprint or face ID",
"setupTouchID": "Please set up your Touch ID",
"reenableTouchID": "Please reenable your Touch ID",
"scanFaceIDAuthenticate": "Scan your fingerprint or face ID to authenticate",
"adDeletedSuccessfully": "Ad has been deleted successfully!",
"yourReservationCancelled": "Your reservation has been cancelled.",
"adDeactivatedSuccessfully": "Ad has been deactivated successfully!",
"vehicle": {
"selectVehicleType": "Please select vehicle type",
"selectVehicleModel": "Please select vehicle model",
"selectVehicleModelYear": "Please select vehicle model year",
"selectVehicleColor": "Please select vehicle color",
"vehicleCondition": "Please select vehicle condition",
"vehicleCategory": "Please select vehicle category",
"vehicleMileage": "Please select vehicle Mileage",
"vehicleTransmission": "Please select vehicle transmission",
"vehicleSellerType": "Please select vehicle seller type",
"selectAny": "Please select any",
"vehicleCity": "Please select vehicle city",
"vehiclePart": "Please select vehicle part",
"selectValidVehicleType": "Please select valid Vehicle Type"
},
"selectAppointmentTimeService": "You must select appointment time the service.",
"error": "Error",
"appointmentBookedSuccessfully": "Your appointment has been booked successfully",
"appointmentStatusUpdated": "Appointment Status Updated",
"paymentStatusUpdated": "Payment Status Updated",
"selectOneSubService": "Please select at least one sub service",
"chargesBreakdown": "Charges Breakdown",
"services": "Services",
"homeLocation": "Home Location",
"selectAppointmentTime": "You must select appointment time for each schedule's appointment",
"noAppointmentAvailable": "There are no available appointments for selected Items",
"changedMind": "I have changed my mind",
"veryHighPrice": "Very High Price",
"alreadySold": "Already Sold",
"otherVar": "Other",
"paymentSuccessful": "Payment Successful",
"paymentFailed": "Payment Failed!",
"requestSuccessfullyCreated": "Request Successfully Created",
"selectValidRequestType": "Please select valid Request Type",
"selectValidBrand": "Please select valid Brand",
"selectValidModel": "Please select valid Model",
"selectValidYear": "Please select valid Year",
"selectValidCountry": "Please select valid Country",
"selectValidCity": "Please select valid City",
"addValidPrice": "Please add valid Price",
"addValidDescription": "Please add valid Description",
"passwordTooShort": "Your password is too short",
"passwordAcceptableStrong": "Your password is acceptable but not strong",
"passwordIsStrong": "Your password is strong",
"passwordVeryStrong": "Your password is very strong",
"onlyProviderApp": "Sorry, Only Providers can log in this app",
"selectDuration": "Select Duration",
"daysVar": "Days",
"adCharges": "Ad Charges",
"select": "Select",
"deleteAdConfirmation": "Do you want to delete the ad?",
"deleteAdConfirmationMessage": "Your ad will be permanently deleted and you cannot undo this action",
"mileage": "Mileage",
"transmission": "Transmission",
"demand": "Demand",
"adDurationExpired": "Your Ad Duration time is over",
"bankDetails": "Bank Details",
"bankName": "Bank Name",
"iban": "IBAN",
"rejectionComments": "Rejection Comments",
"editAd": "Edit Ad",
"reserveAd": "Reserve Ad",
"reservationAmount": "Reservation Amount",
"belowAmountPayLater": "Below Amount that you will pay later",
"carPrice": "Car Price",
"vatExcluded": "VAT Excluded",
"carInsuranceService": "Car insurance Service",
"toBeDecided": "To be Decided",
"registrationCarPlates": "Registration & Car Plates",
"homeDeliveryService": "Home Delivery Service",
"specialServicechargesInsuranceDeliveryLocation": "Special service charges will be added based on desired insurance and delivery Location",
"estimated": "Estimated",
"servicesReservingAd": "Some services are mandatory while reserving Ad",
"completeReservation": "Complete Reservation",
"contact": "Contact",
"setDateandTime": "Set Date and Time",
"selectOffice": "Select Office",
"availableSlots": "Available Slots",
"bookAndPay": "Book and Pay",
"reservationAmounts": "Reservation Amounts",
"tax": "Tax",
"adsFilter": "Ads Filter",
"searchByCity": "Search By City",
"selectCity": "Select City",
"searchByBrandName": "Search By Brand Name",
"selectVehicleBrand": "Select Vehicle Brand",
"searchByVehicleYear": "Search By Vehicle Year",
"selectYear": "Select Year",
"searchByAdOwner": "Search By Ad Owner",
"selectOwner": "Select Owner",
"search": "Search",
"clearFilters": "Clear Filters",
"book": "Book",
"markAsSold": "Mark As Sold",
"deactivateAd": "Deactivate Ad",
"doWantDeactivateAd": "Do you want to the Deactivate this Ad?",
"stoptheBuyers": "We will stop showing this ad to the buyers",
"cancelReservation": "Cancel Reservation",
"reasonForCancellation": "Reason for Cancellation",
"doWantCancelReservation": "Do you want to cancel the reservation",
"yourAdVisibletoBuy.": "Your ad reservation will be cancelled and this ad will be again visible to everyone to buy",
"completeDeal": "Complete Deal",
"uploadBankReceipt": "Upload Bank Receipt",
"notesForAdmin": "Notes For Admin",
"extendAd": "Extend Ad",
"updateAdDetails": "Do you want to update the Ad Details",
"durationExtendingAd": "You can change the ad duration and details before extending the ad",
"waitingAdminsResponse": "Waiting for Admins Response",
"cancelledByOwner": "Cancelled by Owner",
"cancelledByAdmin": "Cancelled by Admin",
"reservationTimeOver": "Reservation Time Over",
"paymentVerified": "Payment Verified",
"rejectedFormAdmin": "Rejected form Admin",
"waitingAdminPost": "Waiting for admin to post",
"waitingAdminsApproval": "Waiting for Admins Approval",
"sold": "Sold",
"noAdsShow": "No Ads to show",
"damagePartList": "Damage Part List",
"searchPart": "Search Part",
"addSpecialService": "Add Special Service",
"vehicleVar": "Vehicle",
"detailsVar": "Details",
"damageVar": "Damage",
"partsVar": "Parts",
"additional": "Additional",
"review": "Review",
"adVar": "Ad",
"updateAd": "Update Ad",
"createAd": "Create Ad",
"next": "Next",
"submitAd": "Submit Ad",
"selectAdType": "Select Ad Type",
"validUntilSubscriptionExpiration": "Valid Until Subscription Expiration",
"youLeftAdsGivenSubscription": "You have left with limited ads given in the subscription.",
"updateSubscription": "Update Subscription",
"workInProgress": "Work In Progress",
"visitCompleted": "Visit Completed",
"youWantCancelAppointment": "Do you want to cancel this appointment?",
"appointmentCancelledCannotUndoAction": "Your appointment will be cancelled and you cannot undo this action.",
"appointment": "Appointment",
"rescheduleAppointment": "Reschedule Appointment",
"payforAppointment": "Pay for Appointment",
"appointmentsFilter": "Appointments Filter",
"searchByProvider": "Search By Provider",
"selectProvider": "Select Provider",
"searchByBranch": "Search By Branch",
"searchByCategory": "Search By Category",
"selectCategory": "Select Category",
"searchByService": "Search By Service",
"selectServices": "Select Services",
"modifyPackage": "Modify Package",
"schedule": "Schedule",
"serviceLocation": "Service Location:",
"workshop": "Workshop",
"itemsSelected": "Item(s) Selected",
"workshopFullAccessServices": "Few services are not available on home location. Change the location to workshop to full access the services",
"changeLocationService": "Change location or service:",
"someDescriptionSubServices": "Some description about the sub-services",
"selectServicesYouWant": "Select services you want",
"selectServiceType": "Select service type",
"selectDateAndTime": "Select date and time",
"reviewAppointment": "Review Appointment",
"carEngineCheck": "Car Engine Check",
"dateAndTime": "Date and Time",
"timeLocation": "Time & Location",
"serviceCharges": "Service Charges",
"locationCharges": "Location Charges",
"payableNow": "Payable Now",
"remainingAmount": "Remaining Amount",
"branchesFilter": "Branches Filter",
"searchByDistance": "Search By Distance",
"searchByMinimumRatings": "Search By Minimum Ratings",
"chat": "Chat",
"noRequestsShow": "No Requests to show.",
"typeMessageHere": "Type your message here..",
"reject": "Reject",
"newOfferRequired": "New Offer Required",
"offerHasBeenAccepted": "Offer has been accepted",
"offerHasBeenRejected": "Offer has been rejected",
"offerHasBeenCancelled": "Offer has been cancelled",
"paymentMethod": "Payment Method",
"selectPaymentMethod": "Select Payment Method",
"password": "Password",
"customerName": "Customer Name",
"createRequest": "Create Request",
"requestType": "Request Type",
"brand": "Brand",
"year": "Year",
"price": "Price",
"shippingDelivery": "Shipping/Delivery",
"offers": "Offers",
"noOffersShow": "No Offers to show",
"allDocumentMandatoryDealershipProvider": "All document's are mandatory for Dealership Provider",
"documentsUploadedSuccessfully": "Documents uploaded successfully",
"help": "Help",
"faqs": "FAQs",
"contactUs": "Contact Us",
"termPrivacy": "Term & Privacy",
"inviteFriends": "Invite Friends",
"more": "More",
"language": "Language",
"mySubscription": "My Subscription",
"subscriptions": "Subscriptions",
"defineLicenses": "Define Licenses",
"logOut": "Log Out",
"customer": "Customer",
"accept": "Accept",
"amountVAR": "Amount",
"requestAlreadyInProgress": "This request is already in progress.",
"acceptOfferConfirmation": "Do you want to accept this offer?",
"acceptOfferConfirmationMessage": "This offer will be accepted and you will pay the requested amount to the buyer in given time or else this offer will be cancelled.",
"nowVar": "Now",
"whendoyouWanttoUpgrade": "When do you want to upgrade",
"yourSubscriptionUpgradeAffectingFrom": "Your subscription will upgrade now. Affecting from",
"upgradeAfterCurrentExpiry": "Upgrade after current expiry",
"yourSubscriptionUpgradeCurrentSubscriptionAffectingFrom": "Your subscription will upgrade after you current subscription will end. Affecting from",
"upgradeVar": "Upgrade",
"whendoyouWanttoRenew": "When do you want to renew",
"renewVar": "Renew",
"noUpcomingAppointments": "No Upcoming Appointments.",
"addNewAppointment": "Add New Appointment",
"myNearbyBranches": "My Nearby Branches",
"myRecentBranches": "My Recent Branches",
"favoriteList": "Favorite List",
"noReviewsBranch": "This branch has no reviews.",
"readLess": "Read Less",
"readMoreReviews": "Read More Reviews",
"noProvidersInFav": "You have no providers in Favorites.",
"providerHasNoBranches": "This Provider has no branches yet.",
"totalBranches": "Total Branches",
"memberSince": "Member Since",
"reserved": "Reserved",
"delete": "Delete",
"deleteBranchConfirmation": "Do you want to delete the Branch?",
"deleteBranchConfirmationMessage": "Your branch will be permanently deleted and you cannot undo this action",
"reviewAndPayment": "Review & Payment",
"awaitingPaymentFromCustomer": "Awaiting Payment from Customer",
"awaitingResponseFromProvider": "Awaiting Response From Provider",
"offerNoLongerAvailable": "Offer is No Longer Available",
"doYouWantToCompleteThisDeal": "Do you want to complete this deal?",
"customerCompletingDealMeansThat": "Completing this deal means that the you request that you have posted has been successfully received and this action cannot be undone.",
"providerCompletingDealMeansThat": "Completing this deal means that you have successfully provided the customer according to his request and this action cannot be undone.",
"offerSummary": "Offer Summary",
"personalInformation": "Personal Information",
"name": "Name",
"phone": "Phone",
"locationInformation": "Location Information",
"serviceInformation": "Service Information",
"additionalAddressDetails": "Additional Address Details",
"serviceName": "Service Name",
"serviceCategory": "Service Category",
"offerPrice": "Offer Price",
"totalPrice": "Total Price",
"providerName": "Provider Name",
"createdOn": "Created On",
"manufacturedBy": "Manufactured By",
"manufacturedOn": "Manufactured On",
"shipping": "Shipping",
"delivery": "Delivery",
"selectDeliveryType": "Select Delivery Type",
"shippingManagementInstruction": "Please go to Settings > Shipping Management screen to manage shipping/delivery items further.",
"withdrawOffer": "Withdraw Offer",
"manufacturer": "Manufacturer",
"priceRange": "Price Range",
"cancelOffer": "Cancel Offer",
"pleaseSpecify": "Please Specify",
"customerNotResponding": "The customer is not responding.",
"cancelRequestPrompt": "Do you want to cancel this request?",
"requestPermanentlyCancelled": "Your request will be permanently cancelled. You cannot undo this action.",
"awaitingResponseFromCustomer": "Awaiting Response From Customer",
"acknowledgePaymentToMowater": "I acknowledge that upon completion of this deal, I will pay 2% of this total deal to the Mowater company for their service.",
"requestsFilter": "Requests Filter",
"searchByCondition": "Search By Condition",
"selectCondition": "Select Condition",
"searchByRequestType": "Search By Request Type",
"searchByCustomerName": "Search By Customer Name",
"searchByProviderName": "Search By Provider Name",
"searchByRequestStatus": "Search By Request Status",
"selectRequestStatus": "Select Request Status",
"selectRequestType": "Select Request Type",
"searchByRequestedDate": "Search by Requested Date",
"selectDate": "Select Date",
"searchByVehicleModel": "Search By Vehicle Model",
"customerCarePrompt": "Got any question? We are here to service. Click here to talk to our customer care right now.",
"callNow": "Call Now",
"condition": "Condition",
"servicesNotAvailableHomeLocation": "This location will be same for all services",
"additionalChargesNotice": "These charges are additional to the actual service charges. For heavy items the charges may vary.",
"selectServiceLocation": "Select Service Location",
"apptOn": "Appt On",
"merged": "Merged",
"date": "Date",
"selectAll": "Select All",
"unselectAll": "Unselect All",
"copySelectedServices": "Copy Selected Services",
"pictures": "Pictures",
"noChatMessage": "No messages yet. Send a message to start the conversation!",
"shippingManagement": "Shipping Management",
"appointmentCancelled": "Appointment Cancelled",
"appointmentsPerSlot": "Appointments Per Slot",
"createSchedule": "Create Schedule",
"addItems": "Add Items",
"itemName": "Item Name",
"itemDescription": "Item Description",
"itemPrice": "Item Price",
"bookAppointmentForServices": "This option will allow customer to book appointment for these services.",
"showServiceAvailability": "This option will show to customer that you can avail this service on workshop or not.",
"bookAppointmentAtLocation": "This option will allow customer to book appointment at their desired location.",
"deleteScheduleConfirmation": " Are you sure you want to delete this Schedule?",
"deleteScheduleAdConfirmationMessage": "All the appointment slots will be removed and customers will no longer be able to book appointments for this schedule.",
"branchSchedules": "Branch Schedules",
"noSchedulesFound": "You have not added any schedule for this branch.",
"inviteFriendsBySMS": "Invite Friends By SMS",
"inviteFriendsByWhatsApp": "Invite Friends By WhatsApp",
"inviteFriendsByEmail": "Invite Friends By Email",
"noFAQsToShow": "There are no Frequently asked Questions Right now. Please contact us if you have any query.",
"appInfo": "App Info",
"users": "Users",
"adsRemaining": "Ads Remaining",
"attachPDF": "Attach PDF",
"serviceItem": "Service Item",
"createdBy": "Created By",
"createGroupServices": "Create Group Services",
"logoutConfirmation": "Are you sure you want want to Logout?",
"logoutConfirmationMessage": "You will be logged out of the application and you have to add your username and password again to login",
"addToFavoritesOn": "Added to Favorites on:",
"subscriptionDate": "Subscription Date",
"expiresOn": "Expires On",
"expired": "Expired",
"upgradeBranches": "Upgrade your subscription to add more Branches.",
"upgradeSubscription": "Upgrade your subscription",
"upgradeAds": "Upgrade your subscription to add more Ads.",
"upgradeSubUsers": "Upgrade your subscription to add more Sub Users.",
"explore": "Explore",
"manageRequests": "Manage Requests",
"serviceNotAvailableAtHomeLocation": "The Selected Service is not available at Home Location.",
"wantToRescheduleAppointment": "I want to reschedule the appointment.",
"noNeedForService": "I do not need this service anymore.",
"testTheService": "Test the service.",
"companyLocation": "Company Location",
"customerLocation": "Customer Location",
"deliveryAvailable": "Delivery Available",
"viewed": "Viewed",
"itemNoLongerAvailable": "This item is no longer available.",
"reactivateAd": "Reactivate Ad",
"dealOutsideApp": "The deal was done outside the app with another customer.",
"noAgreementCustomer": "There is no agreement from the customer side.",
"dealNotCompleted": "Deal not completed",
"changedDesireToSell": "I changed my desire to sell the vehicle.",
"vehicleDealOutsideApp": "The vehicle deal was done outside the app.",
"markAdAsSoldDesc": "This ad will be marked as sold, and other users will no longer be able to contact you.",
"ownerInformation": "Owner Information",
"noItemsToShow": "There are no Items no show.",
"acceptedRequests": "Accepted Requests",
"specialRequestChat": "Special Request Chat",
"companyName": "Company Name",
"noAvailableItems": "There are no available items.",
"serviceDeliveryType": "Service Delivery Type",
"noImagesToShow": "No Images to Show",
"updateGroupServices": "Update Group Services",
"addCommentsHere": "Add comments here",
"waitForBranchVerification": "Please wait for the branch verification.",
"reportComplaint": "Report a complaint",
"descriptionCannotBeEmpty": "Description cannot be empty.",
"adMarkedAsSold": "Ad has been marked as sold successfully!",
"chargesAndServiceRangeGreaterThanZero": "Charges and Service range should be greater than zero.",
"cannotSelectAllDaysAsOff": "You cannot select all days as Off days.",
"endDateAfterStartDate": "End Date should be after start date.",
"pleaseEnterStartDateFirst": "Please enter start date first.",
"endTimeAfterStartTime": "End Time should be after start time.",
"pickedLocationNotice": "This picked location will be used for all home-based services in this appointment",
"serviceNotProvided": "Unfortunately, this service is not provided by your selected branch in this picked location.",
"pleaseSelectService": "Please select at least one service.",
"operationalIssue": "Operational Issue",
"materialIssue": "Material Issue",
"selectReasonBeforeCancel": "Please select a reason before cancelling this appointment. This action cannot be undone.",
"blockedByAdmin": "Blocked by admin",
"active": "Active",
"paymentType": "Payment Type",
"dealCompleted": "The Deal Completed",
"theDealNotCompleted": "The Deal Not Completed",
"cancelRequest": "I want to cancel the request.",
"highPrice": "High Price",
"offerNotMatched": "The offer did not match the request.",
"offerRejected": "Offer has been Rejected.",
"offerAccepted": "Offer has been Accepted.",
"you": "You",
"youCannotDeactivateThisServiceRightNow": "You cannot deactivate this service right now because you have pending appointments for this service. The last appointment details are:",
"done": "Done",
"notice": "Notice",
"serviceDeactivated": "Service Deactivated",
"totalNumberOfServices": "Number of services:",
"noAvailableOfficesInCity": "There are no available offices in your city for your service.",
"searchByItem": "Search By Item",
"selectBranchToCopyServices": "Select the branch to copy their items to this branch. You can modify the selection at any time.",
"tapToSelect": "Tap to select",
"tapToSeeItems": "Tap to see items",
"noteCopyItemsExplanation": "Note: You will be able to copy items from one service to another in a selected category. You must create the services first and they should be approved. Then you will be able to get the available services from which you can copy all or selected items.",
"requestCreatedOn": "Request created on",
"online": "Online",
"searchByCreatedDate": "Search By Created Date",
"updateUserDetails": "Update User Details",
"enterNewFirstName": "Enter First Name",
"enterNewLastName": "Enter Last Name",
"userDetailsUpdated": "User Details is Updated",
"cityNameMandatory": "City is mandatory",
"genderMandatory": "Gender is mandatory",
"updateCity": "Update City",
"userGender": "Gender",
"userMale": "Male",
"userFemale": "Female",
"maxFileSelection": "You can select a maximum of 7 files",
"maxFileSize": "Each file size must be less than 2 MB",
"onlyJPGandPNG": "Only JPG and PNG files are allowed",
"expiryDate": "Expiry Date",
"deliveryStatus": "Your Delivery / Shipping Status is:",
"markAsCompleted": "Mark as Completed",
"searchByServiceDelivery": "Search by Service Delivery",
"searchByMobileNumber": "Search by Mobile Number",
"enterMobileNumber": "Enter Mobile Number",
"enterCustomerName": "Enter Customer Name",
"tapToView": "Tap to view",
"noServicesAvailableToCopy": "There are no services available in this branch to copy.",
"copySelectedItems": "Copy Selected Items",
"companyNameMandatory": "Company Name is mandatory",
"noOfInvites": "No of invites",
"noSpecialServicesAvailable": "There are no special services available for the selected region.",
"customService": "Custom Service",
"selectServiceDetails": "Select service details",
"addServiceDetails": "Add service details",
"connectionProblem": "Connection Problem",
"pleaseCheckConnection": "Please check your internet connection and try again.",
"ok": "Ok",
"continueAsGuest": "Continue as a guest",
"loginToViewAppointments": "Please Login to View Appointments",
"itemType": "Item Type",
"searchByAdID": "Search by Ad ID",
"enterAdID": "Enter Ad ID",
"searchByDemandPrice": "Search by demand price",
"enterStartPrice": "Enter start price",
"enterEndPrice": "Enter end price",
"searchByVehicleType": "Search by vehicle type",
"selectVehicleType": "Select vehicle type",
"specialRequestsChats": "Special Requests Chats",
"selectDeliveryOption": "Select Delivery Option",
"deliveryOptions": "Delivery Options",
"selfPickup": "Self Pickup",
"updateYourLocationInfo": "Update your location information",
"initiateSelfPickup": "Initiate Self Pickup",
"selfPickupStatus": "Self Pickup Status",
"myDraftAds": "My Draft Ads",
"scheduleDeletedSuccessfully": "The schedule has been deleted successfully",
"addValidAddress": "Please add a valid address"
} }

@ -4,18 +4,15 @@ import 'dart:developer';
import 'dart:io'; import 'dart:io';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:http/io_client.dart'; import 'package:http/io_client.dart';
import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/exceptions/api_exception.dart'; import 'package:mc_common_app/exceptions/api_exception.dart';
import 'package:mc_common_app/main.dart'; import 'package:mc_common_app/main.dart';
import 'package:mc_common_app/models/user_models/refresh_token.dart'; import 'package:mc_common_app/models/user_models/refresh_token.dart';
import 'package:mc_common_app/models/user_models/user.dart'; import 'package:mc_common_app/models/user_models/user.dart';
import 'package:mc_common_app/utils/shared_prefrence.dart'; import 'package:mc_common_app/utils/shared_prefrence.dart';
import 'package:mc_common_app/utils/utils.dart';
typedef FactoryConstructor<U> = U Function(dynamic); typedef FactoryConstructor<U> = U Function(dynamic);
@ -77,7 +74,10 @@ class ApiClientImp implements ApiClient {
if (headers != null && headers.isNotEmpty) { if (headers != null && headers.isNotEmpty) {
headers0.addAll(headers); headers0.addAll(headers);
} }
if (!kReleaseMode) {
log("Url:$url");
log("body:$jsonObject");
}
var response = await postJsonForResponse(url, jsonObject, token: token, queryParameters: queryParameters, headers: headers0, retryTimes: retryTimes); var response = await postJsonForResponse(url, jsonObject, token: token, queryParameters: queryParameters, headers: headers0, retryTimes: retryTimes);
try { try {
if (!kReleaseMode) { if (!kReleaseMode) {
@ -129,17 +129,15 @@ class ApiClientImp implements ApiClient {
var queryString = Uri(queryParameters: queryParameters).query; var queryString = Uri(queryParameters: queryParameters).query;
url = '$url?$queryString'; url = '$url?$queryString';
} }
Response response; Response response;
response = await _post(Uri.parse(url), body: requestBody, headers: headers0).timeout(const Duration(seconds: 100)); response = await _post(Uri.parse(url), body: requestBody, headers: headers0).timeout(const Duration(seconds: 100));
if (!kReleaseMode) { if (!kReleaseMode) {
logger.d("------URL------"); log("Url:$url");
logger.i(url); log("body:$requestBody");
logger.d("------Payload------"); log("res: ${response.body}");
logger.i(jsonDecode(requestBody));
logger.d("------Response------");
logger.i(jsonDecode(response.body));
} }
if (response.statusCode >= 200 && response.statusCode < 500) { if (response.statusCode >= 200 && response.statusCode < 500) {
var jsonData = jsonDecode(response.body); var jsonData = jsonDecode(response.body);
@ -168,10 +166,6 @@ class ApiClientImp implements ApiClient {
throw APIException(APIException.OTHER, arguments: e); throw APIException(APIException.OTHER, arguments: e);
} }
} on TimeoutException catch (e) { } on TimeoutException catch (e) {
BuildContext? context = navigatorKey.currentContext;
if (context != null) {
NoInternetDialog.show(context);
}
throw APIException(APIException.TIMEOUT, arguments: e); throw APIException(APIException.TIMEOUT, arguments: e);
} on ClientException catch (e) { } on ClientException catch (e) {
if (retryTimes > 0) { if (retryTimes > 0) {
@ -246,13 +240,14 @@ class ApiClientImp implements ApiClient {
} }
if (!kReleaseMode) { if (!kReleaseMode) {
logger.i(url); log("Url:$url");
logger.i("$queryParameters"); log("queryParameters:$queryParameters");
} }
var response = await _get(Uri.parse(url), headers: headers0).timeout(const Duration(seconds: 60)); var response = await _get(Uri.parse(url), headers: headers0).timeout(const Duration(seconds: 60));
if (!kReleaseMode) { if (!kReleaseMode) {
logger.i(jsonDecode(response.body)); log("res: ${response.body}");
log("resCode: ${response.statusCode}");
} }
if (response.statusCode >= 200 && response.statusCode < 500) { if (response.statusCode >= 200 && response.statusCode < 500) {
var jsonData = jsonDecode(response.body); var jsonData = jsonDecode(response.body);
@ -282,10 +277,6 @@ class ApiClientImp implements ApiClient {
throw APIException(APIException.OTHER, arguments: e); throw APIException(APIException.OTHER, arguments: e);
} }
} on TimeoutException catch (e) { } on TimeoutException catch (e) {
final context = navigatorKey.currentContext;
if (context != null) {
NoInternetDialog.show(context);
}
throw APIException(APIException.TIMEOUT, arguments: e); throw APIException(APIException.TIMEOUT, arguments: e);
} on ClientException catch (e) { } on ClientException catch (e) {
if (retryTimes > 0) { if (retryTimes > 0) {
@ -313,7 +304,7 @@ class ApiClientImp implements ApiClient {
Future<RefreshToken> refreshTokenAPI(String token, String refreshToken) async { Future<RefreshToken> refreshTokenAPI(String token, String refreshToken) async {
var postParams = {"token": token, "refreshToken": refreshToken}; var postParams = {"token": token, "refreshToken": refreshToken};
// String t = AppState().getUser.data!.accessToken ?? ""; // String t = AppState().getUser.data!.accessToken ?? "";
return await postJsonForObject((json) => RefreshToken.fromJson(json), ApiConsts.refreshToken, postParams); return await postJsonForObject((json) => RefreshToken.fromJson(json), ApiConsts.RefreshToken, postParams);
} }
Future<String> updateUserToken() async { Future<String> updateUserToken() async {

@ -1,10 +1,7 @@
import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:mc_common_app/models/general_models/post_params_model.dart'; import 'package:mc_common_app/models/general_models/post_params_model.dart';
import 'package:mc_common_app/models/subscriptions_models/provider_subscription_model.dart';
import 'package:mc_common_app/models/subscriptions_models/subscription_model.dart';
import 'package:mc_common_app/models/user_models/user.dart'; import 'package:mc_common_app/models/user_models/user.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart';
class AppState { class AppState {
static final AppState _instance = AppState._internal(); static final AppState _instance = AppState._internal();
@ -19,22 +16,6 @@ class AppState {
bool? get getIsLogged => isLogged; bool? get getIsLogged => isLogged;
String? _deviceToken;
String? get getDeviceToken => _deviceToken;
set setDeviceToken(String value) {
_deviceToken = value;
}
String? _deviceType;
String? get getDeviceType => _deviceType;
set setDeviceType(String value) {
_deviceType = value;
}
AppType currentAppType = AppType.provider; AppType currentAppType = AppType.provider;
UserType userType = UserType.customer; UserType userType = UserType.customer;
@ -42,7 +23,7 @@ class AppState {
currentAppType = appType; currentAppType = appType;
} }
User? _user; User? _user = null;
set setUser(v) => _user = v; set setUser(v) => _user = v;
@ -63,30 +44,4 @@ class AppState {
set setCurrentLocation(v) => currentLocation = v; set setCurrentLocation(v) => currentLocation = v;
LatLng get getCurrentLocation => currentLocation; LatLng get getCurrentLocation => currentLocation;
List<Subscription>? _providerSubscription;
List<Subscription> get getproviderSubscription => _providerSubscription ?? [Subscription(name: "")];
set setproviderSubscription(List<Subscription>? value) {
_providerSubscription = value;
}
DropValue? _userRegisterCountrySelection;
DropValue get getUserRegisterCountrySelection => _userRegisterCountrySelection!;
set setUserRegisterCountrySelection(DropValue value) {
_userRegisterCountrySelection = value;
}
bool _isViewOnly = false;
bool get getIsViewOnly => _isViewOnly;
set setIsViewOnly(bool value) {
_isViewOnly = value;
}
} }

@ -1,87 +1,65 @@
import 'dart:io';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/generated/codegen_loader.g.dart'; import 'package:mc_common_app/generated/codegen_loader.g.dart';
import 'package:mc_common_app/models/user_models/user.dart';
import 'package:mc_common_app/utils/enums.dart';
class ApiConsts { class ApiConsts {
// static String baseUrl = "http://10.200.204.20:2801/"; // Local server // static String baseUrl = "http://10.200.204.20:2801/"; // Local server
static String baseUrl = "https://ms.hmg.com/"; // production server static String baseUrl = "https://ms.hmg.com/"; // production server
static String baseUrlServices = baseUrl; // production server static String baseUrlServices = "$baseUrl"; // production server
static String basicOTP = "${baseUrlServices}api/Register/BasicOTP"; static String BasicOTP = "${baseUrlServices}api/Register/BasicOTP";
static String basicVerify = "${baseUrlServices}api/Register/BasicVerify"; static String BasicVerify = "${baseUrlServices}api/Register/BasicVerify";
static String basicComplete = "${baseUrlServices}api/Register/BasicComplete"; static String BasicComplete = "${baseUrlServices}api/Register/BasicComplete";
static String refreshToken = "${baseUrlServices}api/Account/RefreshToken"; static String RefreshToken = "${baseUrlServices}api/Account/RefreshToken";
static String signalRUrl = "${baseUrl}McHub";
//User //User
static String loginV1 = "${baseUrlServices}api/Account/Login_V1"; static String Login_V1 = "${baseUrlServices}api/Account/Login_V1";
static String loginV2OTP = "${baseUrlServices}api/Account/Login_V2_OTP"; static String Login_V2_OTP = "${baseUrlServices}api/Account/Login_V2_OTP";
static String loginV2OTPVerify = "${baseUrlServices}api/Account/Login_V2_OTPVerify"; static String Login_V2_OTPVerify = "${baseUrlServices}api/Account/Login_V2_OTPVerify";
static String user = "${baseUrlServices}api/User/"; static String user = "${baseUrlServices}api/User/";
static String getAllCountry = "${baseUrlServices}api/Master/Country_Get"; static String GetAllCountry = "${baseUrlServices}api/Master/Country_Get";
static String getProviderRoles = "${baseUrlServices}api/Master/RoleServiceProvider_Get"; static String GetProviderRoles = "${baseUrlServices}api/Master/RoleServiceProvider_Get";
static String getAllCities = "${baseUrlServices}api/Master/City_Get"; static String GetAllCities = "${baseUrlServices}api/Master/City_Get";
static String forgetPasswordOTPRequest = "${baseUrlServices}api/Account/ForgetPasswordOTPRequest"; static String ForgetPasswordOTPRequest = "${baseUrlServices}api/Account/ForgetPasswordOTPRequest";
static String forgetPasswordOTPCompare = "${baseUrlServices}api/Account/ForgetPasswordOTPCompare"; static String ForgetPasswordOTPCompare = "${baseUrlServices}api/Account/ForgetPasswordOTPCompare";
static String forgetPassword = "${baseUrlServices}api/Account/ForgetPassword"; static String ForgetPassword = "${baseUrlServices}api/Account/ForgetPassword";
static String loginEmailOTP = "${baseUrlServices}api/Account/EmailVerify"; static String Login_Email_OTP = "${baseUrlServices}api/Account/EmailVerify";
static String loginEmailOTPVerify = "${baseUrlServices}api/Account/EmailVerifyOTPVerify"; static String Login_Email_OTPVerify = "${baseUrlServices}api/Account/EmailVerifyOTPVerify";
static String changePassword = "${baseUrlServices}api/Account/ChangePassword"; static String ChangePassword = "${baseUrlServices}api/Account/ChangePassword";
static String changeMobileNoOTPRequest = "${baseUrlServices}api/Account/ChangeMobileNoOTPRequest"; static String ChangeMobileNoOTPRequest = "${baseUrlServices}api/Account/ChangeMobileNoOTPRequest";
static String changeMobileNo = "${baseUrlServices}api/Account/ChangeMobileNo"; static String ChangeMobileNo = "${baseUrlServices}api/Account/ChangeMobileNo";
static String changeEmailOTPRequest = "${baseUrlServices}api/Account/ChangeEmailOTPRequest"; static String ChangeEmailOTPRequest = "${baseUrlServices}api/Account/ChangeEmailOTPRequest";
static String changeEmail = "${baseUrlServices}api/Account/ChangeEmail"; static String ChangeEmail = "${baseUrlServices}api/Account/ChangeEmail";
static String emailVerify = "${baseUrlServices}api/Account/EmailVerify"; static String EmailVerify = "${baseUrlServices}api/Account/EmailVerify";
static String emailVerifyOTPVerify = "${baseUrlServices}api/Account/EmailVerifyOTPVerify"; static String EmailVerifyOTPVerify = "${baseUrlServices}api/Account/EmailVerifyOTPVerify";
static String logoutUser = "${baseUrlServices}api/Account/Logout"; static String UpdateUserImage = "${baseUrlServices}api/User_UpdateProfileImage";
static String updateUserImage = "${baseUrlServices}api/User_UpdateProfileImage"; static String GetUserImage = "${baseUrlServices}api/ProfileImage";
static String getUserImage = "${baseUrlServices}api/ProfileImage";
static String userUpdate = "${baseUrlServices}api/User_Update";
static String providerComplaintCreate = "${baseUrlServices}api/ServiceProviders/ProviderComplaint_Create";
static String provideContactInfoGet = "${baseUrlServices}api/ServiceProviders/ServiceProviderContact_Get";
//Profile //Profile
static String fetProviderDocument = "${baseUrlServices}api/ServiceProviders/ServiceProviderDocument_Get"; static String GetProviderDocument = "${baseUrlServices}api/ServiceProviders/ServiceProviderDocument_Get";
static String serviceProviderDocumentUpdate = "${baseUrlServices}api/ServiceProviders/ServiceProviderDocument_Update"; static String ServiceProviderDocument_Update = "${baseUrlServices}api/ServiceProviders/ServiceProviderDocument_Update";
//Branch //Branch
static String getProviderBranch = "${baseUrlServices}api/ServiceProviders/ServiceProviderBranch_Get"; static String getProviderBranch = "${baseUrlServices}api/ServiceProviders/ServiceProviderBranch_Get";
static String createProviderBranch = "${baseUrlServices}api/ServiceProviders/ServiceProviderBranch_Create"; static String createProviderBranch = "${baseUrlServices}api/ServiceProviders/ServiceProviderBranch_Create";
static String updateProviderBranch = "${baseUrlServices}api/ServiceProviders/ServiceProviderBranch_Update"; static String updateProviderBranch = "${baseUrlServices}api/ServiceProviders/ServiceProviderBranch_Update";
static String deleteProviderBranch = "${baseUrlServices}api/ServiceProviders/ServiceProviderBranch_Delete"; static String ServiceProviderBranchGet = "${baseUrlServices}api/ServiceProviders/ServiceProviderBranch_Get";
static String serviceProviderBranchGet = "${baseUrlServices}api/ServiceProviders/ServiceProviderBranch_Get"; static String ServiceCategory_Get = "${baseUrlServices}api/Master/ServiceCategory_Get";
static String serviceCategoryGet = "${baseUrlServices}api/Master/ServiceCategory_Get"; static String Services_Get = "${baseUrlServices}api/ServiceProviders/Services_Get";
static String servicesGet = "${baseUrlServices}api/ServiceProviders/Services_Get"; static String ServiceProviderService_Create = "${baseUrlServices}api/ServiceProviders/ServiceProviderService_Create";
static String serviceProviderServiceCreate = "${baseUrlServices}api/ServiceProviders/ServiceProviderService_Create"; static String ServiceProviderService_Update = "${baseUrlServices}api/ServiceProviders/ServiceProviderService_Update";
static String serviceProviderServiceUpdate = "${baseUrlServices}api/ServiceProviders/ServiceProviderService_Update"; static String GetProviderServices = "${baseUrlServices}api/ServiceProviders/ServiceProviderService_Get";
static String serviceProviderServiceStatusUpdate = "${baseUrlServices}api/ServiceProviders/CategoryAndService_ActivateDeactivateBySP";
static String getProviderServices = "${baseUrlServices}api/ServiceProviders/ServiceProviderService_Get"; static String ServiceProviderService_Get = "${baseUrlServices}api/ServiceProviders/ServiceProviderService_Get";
static String setScheduleInactive = "${baseUrlServices}api/ServiceProviders/BranchAppointmentSchedule_IsActiveUpdate"; static String BranchesAndServices = "${baseUrlServices}api/ServiceProviders/ServiceProviderDetail_Get";
static String serviceProviderAppointmentGetByCategoryOrService = "${baseUrlServices}api/ServiceProviders/ServiceProviderAppointment_GetByCategoryOrService"; static String GetAllNearBranches = "${baseUrlServices}api/ServiceProviders/ServiceProviderBranchDetail_Get";
static String serviceProviderServiceGet = "${baseUrlServices}api/ServiceProviders/ServiceProviderService_Get";
static String branchesAndServices = "${baseUrlServices}api/ServiceProviders/ServiceProviderDetail_Get";
static String serviceProviderDDLGet = "${baseUrlServices}api/ServiceProviders/ServiceProviderDDL_Get";
static String getAllNearBranches = "${baseUrlServices}api/ServiceProviders/ServiceProviderBranchDetail_Get";
static String getMyRecentBranches = "${baseUrlServices}api/ServiceProviders/ServiceProviderBranchRecent_Get";
static String getBranchRatings = "${baseUrlServices}api/ServiceProviders/BranchRating_Get";
static String createBranchRatings = "${baseUrlServices}api/ServiceProviders/BranchRating_Create";
static String favouriteServiceProviderCreate = "${baseUrlServices}api/ServiceProviders/FavouriteServiceProvider_Create";
static String unFavouriteServiceProvider = "${baseUrlServices}api/ServiceProviders/UnFavouriteServiceProvider";
static String favouriteServiceProviderGet = "${baseUrlServices}api/ServiceProviders/FavouriteServiceProvider_Get";
//Appointment APIs //Appointment APIs
static String serviceProvidersAppointmentGet = "${baseUrlServices}api/ServiceProviders/ServiceProvidersAppointment_Get"; static String serviceProvidersAppointmentGet = "${baseUrlServices}api/ServiceProviders/ServiceProvidersAppointment_Get";
static String customersAppointmentGetByFilters = "${baseUrlServices}api/ServiceProviders/ServiceProvidersAppointmentSearchFiltersByCustomer_Get"; static String serviceCategoryGet = "${baseUrlServices}api/Master/ServiceCategory_Get";
static String serviceItemsGet = "${baseUrlServices}api/ServiceProviders/ServiceItem_Get"; static String serviceItemsGet = "${baseUrlServices}api/ServiceProviders/ServiceItem_Get";
static String getServiceItemAppointmentScheduleSlots = "${baseUrlServices}api/ServiceProviders/ServiceItemAppointmentScheduleSlots_GetByAppointmentType"; static String GetServiceItemAppointmentScheduleSlots = "${baseUrlServices}api/ServiceProviders/ServiceItemAppointmentScheduleSlots_GetByAppointmentType";
static String serviceProvidersAppointmentCreate = "${baseUrlServices}api/ServiceProviders/ServiceProvidersAppointmentList_Create"; static String ServiceProvidersAppointmentCreate = "${baseUrlServices}api/ServiceProviders/ServiceProvidersAppointmentList_Create";
static String serviceProviderAppointmentRescheduleCancelAppointment = "${baseUrlServices}api/ServiceProviders/ServiceProviderAppointment_RescheduleCancelAppointment"; static String ServiceProviderAppointmentRescheduleCancelAppointment = "${baseUrlServices}api/ServiceProviders/ServiceProviderAppointment_RescheduleCancelAppointment";
static String addNewServicesInAppointment = "${baseUrlServices}api/ServiceProviders/ServiceProviderAppointment_ServiceItemAdd"; static String AddNewServicesInAppointment = "${baseUrlServices}api/ServiceProviders/ServiceProviderAppointment_ServiceItemAdd";
static String getAppointmentSlots = "${baseUrlServices}api/ServiceProviders/ScheduleSlotsInfo_Get"; static String getAppointmentSlots = "${baseUrlServices}api/ServiceProviders/ScheduleSlotsInfo_Get";
static String updateAppointmentStatus = "${baseUrlServices}api/ServiceProviders/ServiceProvidersAppointmentStatus_Update"; static String updateAppointmentStatus = "${baseUrlServices}api/ServiceProviders/ServiceProvidersAppointmentStatus_Update";
@ -104,7 +82,6 @@ class ApiConsts {
static String updateSchedule = "${baseUrlServices}api/ServiceProviders/BranchAppointmentSchedule_Update"; static String updateSchedule = "${baseUrlServices}api/ServiceProviders/BranchAppointmentSchedule_Update";
static String createGroup = "${baseUrlServices}api/ServiceProviders/BranchScheduleGroupService_Create"; static String createGroup = "${baseUrlServices}api/ServiceProviders/BranchScheduleGroupService_Create";
static String updateGroup = "${baseUrlServices}api/ServiceProviders/BranchScheduleGroupService_Update"; static String updateGroup = "${baseUrlServices}api/ServiceProviders/BranchScheduleGroupService_Update";
static String checkGroupServiceInBranchSchedule = "${baseUrlServices}api/ServiceProviders/BranchScheduleGroupService_Check";
//Advertisement APIs //Advertisement APIs
static String vehicleTypeGet = "${baseUrlServices}api/ServiceProviders/VehicleType_Get"; static String vehicleTypeGet = "${baseUrlServices}api/ServiceProviders/VehicleType_Get";
@ -124,8 +101,6 @@ class ApiConsts {
static String vehicleAdsDurationGet = "${baseUrlServices}api/Advertisement/AdsDuration_Get"; static String vehicleAdsDurationGet = "${baseUrlServices}api/Advertisement/AdsDuration_Get";
static String vehicleAdsSpecialServicesGet = "${baseUrlServices}api/Common/SpecialService_Get"; static String vehicleAdsSpecialServicesGet = "${baseUrlServices}api/Common/SpecialService_Get";
static String vehicleAdsSingleStepCreate = "${baseUrlServices}api/Advertisement/AdsSingleStep_Create"; static String vehicleAdsSingleStepCreate = "${baseUrlServices}api/Advertisement/AdsSingleStep_Create";
static String vehicleAdsSingleStepUpdate = "${baseUrlServices}api/Advertisement/AdsSingleStep_Update";
static String vehicleAdsSingleStepUpdateExtend = "${baseUrlServices}api/Advertisement/AdsSingleStep_Update_Extend";
static String vehicleAdsGet = "${baseUrlServices}api/Advertisement/Ads_Get"; static String vehicleAdsGet = "${baseUrlServices}api/Advertisement/Ads_Get";
static String myAdsReserveGet = "${baseUrlServices}api/Advertisement/AdsReserve_Get"; static String myAdsReserveGet = "${baseUrlServices}api/Advertisement/AdsReserve_Get";
static String reserveAdsBankDetailsGet = "${baseUrlServices}api/Advertisement/MCBankAccountAd_Get"; static String reserveAdsBankDetailsGet = "${baseUrlServices}api/Advertisement/MCBankAccountAd_Get";
@ -136,31 +111,24 @@ class ApiConsts {
static String adsPhotoOfficeAppointmentCreate = "${baseUrlServices}api/Advertisement/PhotoOfficeAppointment_Create"; static String adsPhotoOfficeAppointmentCreate = "${baseUrlServices}api/Advertisement/PhotoOfficeAppointment_Create";
static String adsMCBankAccountAdGet = "${baseUrlServices}api/Advertisement/MCBankAccountAd_Get"; static String adsMCBankAccountAdGet = "${baseUrlServices}api/Advertisement/MCBankAccountAd_Get";
static String adsReserveCreate = "${baseUrlServices}api/Advertisement/AdsReserve_Create"; static String adsReserveCreate = "${baseUrlServices}api/Advertisement/AdsReserve_Create";
static String reserveAdPaymentOnDealDoneCreate = "${baseUrlServices}api/Advertisement/ReserveAdPaymentOnDealDone_Create";
static String adsExtendDurationCreate = "${baseUrlServices}api/Advertisement/Ads_ExtendDuration_Create";
static String adsSingleStepDraftCreate = "${baseUrlServices}api/Advertisement/AdsSingleStepDraft_Create";
static String adsSingleStepDraftUpdate = "${baseUrlServices}api/Advertisement/AdsSingleStepDraft_Update";
static String getMyDraftAds = "${baseUrlServices}api/Advertisement/AdsDraft_Get";
//Subscription //Subscription
static String getMySubscriptions = "${baseUrlServices}api/ServiceProviders/ProviderSubscription_Get";
static String getAllSubscriptions = "${baseUrlServices}api/Common/Subscription_Get"; static String getAllSubscriptions = "${baseUrlServices}api/Common/Subscription_Get";
static String getSubscriptionBySP = "${baseUrlServices}api/Common/SubscriptionBySP_Get";
static String calculationUpgradePrice = "${baseUrlServices}api/ServiceProviders/CalculationUpgradePrice";
static String payFortOrderProviderSubscriptionCreate = "${baseUrlServices}api/Payment/PayFortOrder_ProviderSubscription_Create";
static String getSPBranchUserGet = "${baseUrlServices}api/ServiceProviders/SPBranchUser_Get";
// Payment // Payment
static String paymentWebViewUrl = "https://ms.hmg.com/pay/PaymentHome"; static String paymentWebViewUrl = "https://ms.hmg.com/pay/PaymentHome";
static String payForOrderDetailGet = "${baseUrlServices}api/Payment/PayFortOrderDetail_Get"; static String payForOrderDetailGet = "${baseUrlServices}api/Payment/PayFortOrderDetail_Get";
static String payForOrderIsPaidGet = "${baseUrlServices}api/Payment/PayFortOrderIsPaid_Get";
//Duplicate Services //Duplicate Services
static String getMatchedServices = "${baseUrlServices}api/ServiceProviders/ServiceProviderBranchServicesMapping_Get"; static String getMatchedServices = "${baseUrlServices}api/ServiceProviders/ServiceProviderBranchServicesMapping_Get";
static String duplicateItems = "${baseUrlServices}api/ServiceProviders/ServiceItemCopy_Create"; static String duplicateItems = "${baseUrlServices}api/ServiceProviders/ServiceItemCopy_Create";
//Branch Users //Branch Users
static String getAllProviderDealers = "${baseUrlServices}api/ServiceProviders/DealershipUserBranchWise_Get"; static String getAllProviderDealers = "${baseUrlServices}api/ServiceProviders/DealershipUserBranchWise_Get";
// /api/ServiceProviders/BranchUser_Get
//DealershipUserBranchWise_Get
static String getBranchUser = "${baseUrlServices}api/ServiceProviders/BranchUser_Get"; static String getBranchUser = "${baseUrlServices}api/ServiceProviders/BranchUser_Get";
static String assignDealerToBranch = "${baseUrlServices}api/ServiceProviders/BranchUser_Create"; static String assignDealerToBranch = "${baseUrlServices}api/ServiceProviders/BranchUser_Create";
static String removeDealerFromBranch = "${baseUrlServices}api/ServiceProviders/BranchUser_Update"; static String removeDealerFromBranch = "${baseUrlServices}api/ServiceProviders/BranchUser_Update";
@ -172,58 +140,18 @@ class ApiConsts {
static String createRequest = "${baseUrlServices}api/RequestManagement/Request_Create"; static String createRequest = "${baseUrlServices}api/RequestManagement/Request_Create";
static String getRequest = "${baseUrlServices}api/RequestManagement/Request_Get"; static String getRequest = "${baseUrlServices}api/RequestManagement/Request_Get";
static String getRequestOffers = "${baseUrlServices}api/RequestManagement/ReqOffer_Get"; static String getRequestOffers = "${baseUrlServices}api/RequestManagement/ReqOffer_Get";
static String updateRequestOfferStatus = "${baseUrlServices}api/RequestManagement/RequestOffer_UpdateStatus"; static String updateRequestOffer = "${baseUrlServices}api/RequestManagement/RequestOffer_UpdateStatus";
static String updateRequestOffer = "${baseUrlServices}api/RequestManagement/ReqOffer_Update";
static String updateRequestCustomer = "${baseUrlServices}api/RequestManagement/Request_StatusUpdate_Customer";
static String updateRequestProvider = "${baseUrlServices}api/RequestManagement/Request_StatusUpdate_Provider";
static String requestOffersSpsGet = "${baseUrlServices}api/RequestManagement/Request_OfferSPs_Get"; static String requestOffersSpsGet = "${baseUrlServices}api/RequestManagement/Request_OfferSPs_Get";
static String getServiceRequestsForProvider = "${baseUrlServices}api/RequestManagement/Request_ServiceProvider";
static String requestOfferUpdateDeliveryOptionByCustomer = "${baseUrlServices}api/RequestManagement/RequestOffer_UpdateDeliveryByCustomer";
static String requestUpdateAdditionalAddress = "${baseUrlServices}api/RequestManagement/Request_UpdateAdditionalAddress";
//Shipping
static String shippingRequestStatusUpdate = "${baseUrlServices}api/RequestManagement/ShippingRequestStatus_Update";
static String shippingRequestStatusGet = "${baseUrlServices}api/RequestManagement/ShippingRequestStatus_Get";
static String selfPickupRequestStatusGet = "${baseUrlServices}api/RequestManagement/SelfPickUpRequestStatus_Get";
static String selfPickupRequestStatusUpdate = "${baseUrlServices}api/RequestManagement/SelfPickUpRequestStatus_Update";
//Chat //Chat
static String chatHubUrl = "$baseUrlServices/McHub"; static String chatHubUrl = "$baseUrlServices/McHub";
static String messageIsReadUpdateForRequests = "${baseUrlServices}api/RequestManagement/ReqOfferChatIsRead_Update"; static String messageIsReadUpdate = "${baseUrlServices}api/RequestManagement/ReqOfferChatIsRead_Update";
static String messageIsReadUpdateForAds = "${baseUrlServices}api/Advertisement/AdsChatIsRead_Update"; static String getChatMessages = "${baseUrlServices}api/RequestManagement/ReqOfferChat_Get";
static String getChatMessagesForRequests = "${baseUrlServices}api/RequestManagement/ReqOfferChat_Get";
static String getChatMessagesForAds = "${baseUrlServices}api/Advertisement/AdsChat_Get";
static String getChatBuyersForAds = "${baseUrlServices}api/Advertisement/AdsChatBuyer_Get";
static String reqChatUnreadGet = "${baseUrlServices}api/RequestManagement/Req_ChatCount_Get";
//Settings Options
static String getAllFAQs = "${baseUrlServices}api/Common/FAQ_Get";
static String createAppInvitation = "${baseUrlServices}api/Common/AppInvitation_Create";
static String getContactInfo = "${baseUrlServices}api/Master/ContactInfo_Get";
static String getAppInfo = "${baseUrlServices}api/Master/AppInfo_Get";
static String getTermsAndConditions = "${baseUrlServices}api/Master/TermAndCondition_Get";
static String getAppInvitationHistory = "${baseUrlServices}api/Common/AppInvitation_Get";
static List<String> closingUrls = ["PayFortResponse"]; static List<String> closingUrls = ["PayFortResponse"];
} }
class GlobalConsts { class GlobalConsts {
static String appNameCustomer = "MOWATER Customer";
static String appNameProvider = "MOWATER Provider";
//Android
static String appPackageNameCustomerAndroid = "com.cloud.solutions.mowater.ksa.customer";
static String appPackageNameProviderAndroid = "com.cloud.solutions.mowater.ksa.provider";
static String appPlayStoreLinkCustomerAndroid = "https://play.google.com/store/apps/details?id=$appPackageNameCustomerAndroid";
static String appPlayStoreLinkProviderAndroid = "https://play.google.com/store/apps/details?id=$appPackageNameProviderAndroid";
//IOS
static String appIDCustomerIOS = "";
static String appIDProviderIOS = "";
static String appAppStoreStoreLinkCustomerIos = "https://apps.apple.com/us/app/$appIDCustomerIOS";
static String appAppStoreStoreLinkProviderIos = "https://apps.apple.com/us/app/$appIDProviderIOS";
static String isRememberMe = "remember_me"; static String isRememberMe = "remember_me";
static String email = "email"; static String email = "email";
static String password = "password"; static String password = "password";
@ -232,10 +160,8 @@ class GlobalConsts {
static String welcomeVideoUrl = "welcomeVideoUrl"; static String welcomeVideoUrl = "welcomeVideoUrl";
static String doNotShowWelcomeVideo = "doNotShowWelcomeVideo"; static String doNotShowWelcomeVideo = "doNotShowWelcomeVideo";
static String demandAmountError = "Amount Cannot be Empty"; static String demandAmountError = "Amount Cannot be Empty";
static String deliveryOptionSelectionError = "At least one delivery option should be selected.";
static String reservationCancelError = "Cancellation Reason Cannot be Empty"; static String reservationCancelError = "Cancellation Reason Cannot be Empty";
static String descriptionError = "Description should be more than 5 letters."; static String descriptionError = "Description Cannot be Empty";
static String acceptingThisOffer = "I am accepting this offer.";
static String vehicleVinError = "Vehicle VIN Cannot be Empty"; static String vehicleVinError = "Vehicle VIN Cannot be Empty";
static String vehicleTitleError = "Vehicle Title Cannot be Empty"; static String vehicleTitleError = "Vehicle Title Cannot be Empty";
static String warrantyError = "Warranty Duration Cannot be Empty"; static String warrantyError = "Warranty Duration Cannot be Empty";
@ -246,43 +172,8 @@ class GlobalConsts {
static String adDurationPhoneNumberError = "Phone number cannot be empty"; static String adDurationPhoneNumberError = "Phone number cannot be empty";
static String adReservablePriceErrorConst = "Ad Reservable price cannot be empty"; static String adReservablePriceErrorConst = "Ad Reservable price cannot be empty";
static String homeLocationEmptyError = "Home location cannot be empty"; static String homeLocationEmptyError = "Home location cannot be empty";
static String fillAllFields = "Please fill out all the fields.";
static String requestTypeCannotBeEmpty = "Request type cannot be empty.";
static String serviceNameError = "Service name cannot be empty.";
static String priceError = "Price cannot be empty.";
static String taxError = "Tax cannot be empty.";
static String reserveAdPriceInfo = static String reserveAdPriceInfo =
"Some dummy description to explain the following concept. This price will be for 24 hours and if a user cancels the reservations before 24 hours then the amount will be automatically refunded to the buyer."; "Some dummy description to explain the following concept. This price will be for 24 hours and if a user cancels the reservations before 24 hours then the amount will be automatically refunded to the buyer.";
static String appInvitationMessageEn = "🚗 Hey , check out MOWATER to book car services, buy/sell vehicles, and more—join here! [Invite Link]";
static String getAppInvitationLink() {
String appInvitationMessageEn = "";
if (Platform.isAndroid) {
if (AppState().currentAppType == AppType.customer) {
appInvitationMessageEn = "🚗 Hey , check out $appNameCustomer to book car services, buy/sell vehicles, and more—join here! \n\n $appPlayStoreLinkCustomerAndroid";
} else {
appInvitationMessageEn = "🚗 Hey , check out $appNameProvider to book car services, buy/sell vehicles, and more—join here! \n\n $appPlayStoreLinkProviderAndroid";
}
} else if (Platform.isIOS) {
if (AppState().currentAppType == AppType.customer) {
appInvitationMessageEn = "🚗 Hey , check out $appNameCustomer to book car services, buy/sell vehicles, and more—join here! \n\n $appPlayStoreLinkCustomerAndroid";
} else {
appInvitationMessageEn = "🚗 Hey , check out $appNameProvider to book car services, buy/sell vehicles, and more—join here! \n\n $appPlayStoreLinkProviderAndroid";
}
}
return appInvitationMessageEn;
}
// Attachment Values
static int maxFileCount = 7;
static int maxFileSizeInBytes = 2 * 1024 * 1024;
static String allowedFileExtensions = "jpg,jpeg,png - 2MB/file";
static String allowedFileExtensionsPDF = "PDF 2MB/file";
static int providerDealerRoleTypeId = 6;
static int providerIndividualRoleTypeId = 5;
} }
class MyAssets { class MyAssets {
@ -375,8 +266,6 @@ class MyAssets {
static String visaPng = "${assetPath}icons/payments/visa.png"; static String visaPng = "${assetPath}icons/payments/visa.png";
static String whatsAppIcon = "${assetPath}icons/whatsapp_icon.svg"; static String whatsAppIcon = "${assetPath}icons/whatsapp_icon.svg";
static const String arrowRight = "${assetPath}icons/ic_arrow_right.svg";
static const String brokenImage = "${assetPath}images/broken_image.png";
} }
RegExp numReg = RegExp(r".*[0-9].*"); RegExp numReg = RegExp(r".*[0-9].*");
@ -392,79 +281,5 @@ class MyLocales {
} }
class MyFonts { class MyFonts {
static const poppinsFont = 'packages/mc_common_app/Poppins'; static const poppinsFont = "packages/mc_common_app/Poppins";
static const gessTwoFont = 'packages/mc_common_app/GessTwo';
static const FontWeight Thin = FontWeight.w100;
static const FontWeight ExtraLight = FontWeight.w200;
static const FontWeight Light = FontWeight.w300;
static const FontWeight Regular = FontWeight.w400;
static const FontWeight Medium = FontWeight.w500;
static const FontWeight SemiBold = FontWeight.w600;
static const FontWeight Bold = FontWeight.w700;
static const FontWeight ExtraBold = FontWeight.w800;
static const FontWeight Black = FontWeight.w900;
static const FontWeight ItalicRegular = FontWeight.w400;
static const FontWeight ItalicMedium = FontWeight.w500;
static const FontWeight ItalicSemiBold = FontWeight.w600;
static const FontWeight ItalicBold = FontWeight.w700;
static const FontWeight ItalicExtraBold = FontWeight.w800;
static const FontWeight ItalicBlack = FontWeight.w900;
}
class SignalrConsts {
// Requests
static String receiveMessageRequestOffer = "ReceiveMessageRequestOffer";
static String sendMessageRequestOffer = "SendMessageRequestOffer";
// Ads
static String sendMessageAds = "SendMessageAds";
static String receiveMessageAds = "ReceiveMessageAds";
// General
static String sendMessageGeneral = "SendMessageGeneral";
static String receiveMessageGeneral = "ReceiveMessageGeneral";
}
class GuestConsts {
UserInfo userInfo = UserInfo.fromJson(
{
"id": -1,
"userID": null,
"firstName": "Guest",
"lastName": "User",
"companyName": null,
"accountStatus": "2",
"activityStatus": "Offline",
"accountStatusText": null,
"subscriptionDate": null,
"mobileNo": "966123456789",
"email": "mowatter@gmail.com",
"userImageUrl": "https://ms.hmg.com/api/ProfileImage?imageName=User_Default.png",
"roleID": 4,
"roleName": "Customer",
"isEmailVerified": false,
"serviceProviderBranch": [],
"isVerified": true,
"userRoles": [],
"isProviderDealership": false,
"isProviderIndividual": false,
"isProvider": false,
"providerID": null,
"isCustomer": true,
"customerID": 25,
"countryID": 1,
"countryName": "Saudi Arabia",
"cityID": 1,
"cityName": "Riyadh",
"dealershipUserID": null,
"serviceProviderBranchID": null,
"createdOn": "2024-12-24T09:20:47.6733333",
"genderID": 1,
"genderName": "Male",
"serviceProviderPayment": [],
"deviceType": "1",
"deviceToken": null,
},
);
} }

@ -1,24 +1,18 @@
// import 'package:firebase_crashlytics/firebase_crashlytics.dart'; // import 'package:firebase_crashlytics/firebase_crashlytics.dart';
// import 'package:flutter/material.dart'; // import 'package:flutter/material.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:injector/injector.dart'; import 'package:injector/injector.dart';
import 'package:mc_common_app/api/api_client.dart'; import 'package:mc_common_app/api/api_client.dart';
import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/repositories/ads_repo.dart'; import 'package:mc_common_app/repositories/ads_repo.dart';
import 'package:mc_common_app/repositories/appointment_repo.dart'; import 'package:mc_common_app/repositories/appointment_repo.dart';
import 'package:mc_common_app/repositories/branch_repo.dart';
import 'package:mc_common_app/repositories/chat_repo.dart'; import 'package:mc_common_app/repositories/chat_repo.dart';
import 'package:mc_common_app/repositories/common_repo.dart'; import 'package:mc_common_app/repositories/common_repo.dart';
import 'package:mc_common_app/repositories/payments_repo.dart'; import 'package:mc_common_app/repositories/payments_repo.dart';
import 'package:mc_common_app/repositories/setting_options_repo.dart'; import 'package:mc_common_app/repositories/provider_repo.dart';
import 'package:mc_common_app/repositories/shipping_repo.dart';
import 'package:mc_common_app/repositories/user_repo.dart'; import 'package:mc_common_app/repositories/user_repo.dart';
import 'package:mc_common_app/services/common_services.dart'; import 'package:mc_common_app/services/common_services.dart';
import 'package:mc_common_app/services/firebase_service.dart';
import 'package:mc_common_app/services/payments_service.dart'; import 'package:mc_common_app/services/payments_service.dart';
import 'package:mc_common_app/utils/location/Location.dart';
import '../repositories/request_repo.dart'; import '../repositories/request_repo.dart';
@ -31,11 +25,6 @@ class AppDependencies {
injector.registerSingleton<ApiClient>(() => ApiClientImp()); injector.registerSingleton<ApiClient>(() => ApiClientImp());
injector.registerSingleton<CommonAppServices>(() => CommonServicesImp()); injector.registerSingleton<CommonAppServices>(() => CommonServicesImp());
injector.registerSingleton<PaymentService>(() => PaymentServiceImp()); injector.registerSingleton<PaymentService>(() => PaymentServiceImp());
injector.registerSingleton<Location>(() => LocationService());
injector.registerSingleton<FirebaseMessagingService>(() => FirebaseMessagingServiceImp(
firebaseMessaging: FirebaseMessaging.instance,
flutterLocalNotifications: FlutterLocalNotificationsPlugin(),
));
//repos //repos
injector.registerSingleton<UserRepo>(() => UserRepoImp()); injector.registerSingleton<UserRepo>(() => UserRepoImp());
@ -43,12 +32,8 @@ class AppDependencies {
injector.registerSingleton<AdsRepo>(() => AdsRepoImp()); injector.registerSingleton<AdsRepo>(() => AdsRepoImp());
injector.registerSingleton<PaymentsRepo>(() => PaymentsRepoImp()); injector.registerSingleton<PaymentsRepo>(() => PaymentsRepoImp());
injector.registerSingleton<RequestRepo>(() => RequestRepoImp()); injector.registerSingleton<RequestRepo>(() => RequestRepoImp());
injector.registerSingleton<ProviderRepo>(() => ProviderRepoImp());
injector.registerSingleton<AppointmentRepo>(() => AppointmentRepoImp()); injector.registerSingleton<AppointmentRepo>(() => AppointmentRepoImp());
injector.registerSingleton<ChatRepo>(() => ChatRepoImp()); injector.registerSingleton<ChatRepo>(() => ChatRepoImp());
injector.registerSingleton<BranchRepo>(() => BranchRepoImp());
injector.registerSingleton<ShippingRepo>(() => ShippingRepoImp());
injector.registerSingleton<SettingOptionsRepo>(() => SettingOptionsRepoImp());
//
} }
} }

@ -1,35 +1,10 @@
import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart'; import 'package:mc_common_app/models/requests_models/offers_model.dart';
import 'package:mc_common_app/models/chat_models/buyers_chat_for_ads_model.dart';
import 'package:mc_common_app/models/chat_models/chat_message_model.dart';
import 'package:mc_common_app/models/requests_models/provider_offers_model.dart'; import 'package:mc_common_app/models/requests_models/provider_offers_model.dart';
import 'package:mc_common_app/models/requests_models/request_model.dart'; import 'package:mc_common_app/models/requests_models/request_model.dart';
import 'package:mc_common_app/models/user_models/register_user.dart'; import 'package:mc_common_app/models/user_models/register_user.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/views/advertisement/ads_buyer_chats_view.dart';
import 'package:mc_common_app/views/advertisement/ads_detail_view/ads_detail_view.dart';
import 'package:mc_common_app/views/advertisement/ads_filter_view.dart';
import 'package:mc_common_app/views/advertisement/create_ad_view.dart';
import 'package:mc_common_app/views/advertisement/my_draft_ads_view.dart';
import 'package:mc_common_app/views/advertisement/select_ad_type_view.dart';
import 'package:mc_common_app/views/chat/chat_view.dart';
import 'package:mc_common_app/views/payments/payment_methods_view.dart';
import 'package:mc_common_app/views/profile/profile_view.dart'; import 'package:mc_common_app/views/profile/profile_view.dart';
import 'package:mc_common_app/views/requests/create_request_page.dart';
import 'package:mc_common_app/views/requests/offer_list_page.dart';
import 'package:mc_common_app/views/requests/providers_chat_list_page.dart';
import 'package:mc_common_app/views/requests/request_detail_page.dart';
import 'package:mc_common_app/views/requests/requests_filter_view.dart';
import 'package:mc_common_app/views/requests/review_request_offer.dart';
import 'package:mc_common_app/views/setting_options/provider_accepted_requests_view.dart';
import 'package:mc_common_app/views/setting_options/provider_license_page.dart';
import 'package:mc_common_app/views/setting_options/setting_option_help.dart';
import 'package:mc_common_app/views/setting_options/setting_options_app_info.dart';
import 'package:mc_common_app/views/setting_options/setting_options_contact_us.dart';
import 'package:mc_common_app/views/setting_options/setting_options_faqs.dart';
import 'package:mc_common_app/views/setting_options/setting_options_invite_friends.dart';
import 'package:mc_common_app/views/setting_options/setting_options_more.dart';
import 'package:mc_common_app/views/setting_options/setting_options_terms_and_conditions.dart';
import 'package:mc_common_app/views/shipping_management/shipping_management_view.dart';
import 'package:mc_common_app/views/user/change_email_page.dart'; import 'package:mc_common_app/views/user/change_email_page.dart';
import 'package:mc_common_app/views/user/change_mobile_page.dart'; import 'package:mc_common_app/views/user/change_mobile_page.dart';
import 'package:mc_common_app/views/user/change_password_page.dart'; import 'package:mc_common_app/views/user/change_password_page.dart';
@ -46,13 +21,8 @@ import 'package:mc_common_app/views/user/register_page.dart';
import 'package:mc_common_app/views/user/register_provider_page.dart'; import 'package:mc_common_app/views/user/register_provider_page.dart';
import 'package:mc_common_app/views/user/register_selection_page.dart'; import 'package:mc_common_app/views/user/register_selection_page.dart';
import 'package:mc_common_app/views/splash/splash_page.dart'; import 'package:mc_common_app/views/splash/splash_page.dart';
import 'package:mc_common_app/views/user/update_user_city_country.dart';
import 'package:mc_common_app/views/user/update_user_details.dart';
import 'package:mc_common_app/views/user/vertify_password_page.dart'; import 'package:mc_common_app/views/user/vertify_password_page.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mc_common_app/widgets/image_viewer/image_viewer_screen.dart';
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
class AppRoutes { class AppRoutes {
//User //User
@ -77,107 +47,50 @@ class AppRoutes {
static const String changeEmailPage = "/changeEmailPage"; static const String changeEmailPage = "/changeEmailPage";
static const String editAccountPage = "/editAccoundPage"; static const String editAccountPage = "/editAccoundPage";
// Provider App Routes
//settings
static const defineLicense = "/defineLicese";
static const String dealershipSetting = "/dealershipSetting";
static const String branchList = "/branchList";
static const String branchDetail = "/branchDetail";
static const String defineBranch = "/defineBranch";
//Appointments
static const String appointment = "/appointment";
static const String appointmentDetailList = "/appointmentDetailList";
static const String updateAppointmentPage = "/updateAppointmentPage";
static const String addServiceInAppointment = "/addServiceInAppointment";
static const String mergeAppointments = "/mergeAppointments";
//Services
static const String dealerUser = "/dealerUser";
static const String servicesList = "/servicesList";
static const String itemsList = "/itemsList";
static const String createItem = "/createItem";
static const String createServices = "/createServices";
static const String createServices2 = "/createServices2";
static const String createServices3 = "/createServices3";
//Schedules
static const String schedulesList = "/schedulesList";
static const String addSchedule = "/addSchedule";
// Subscriptions
static const String mySubscriptionsPage = "/mySubscriptionsPage";
static const String subscriptionsPage = "/subscriptionsPage";
//Bracnh Duplication
static const String matchServices = "/matchServices";
static const String userSettings = "/userSettings";
static const String dashboard = "/dashboard"; static const String dashboard = "/dashboard";
static const String bookProviderAppView = "/bookProviderAppView"; static const String bookProviderAppView = "/bookProviderAppView";
// Appointments
static const String appointmentDetailView = "/appointmentDetailView"; static const String appointmentDetailView = "/appointmentDetailView";
static const String bookAppointmenServicesView = "/bookAppointmenServicesView"; static const String bookAppointmenServicesView = "/bookAppointmenServicesView";
static const String bookAppointmenSchedulesView = "/bookAppointmenSchedulesView"; static const String bookAppointmenSchedulesView = "/bookAppointmenSchedulesView";
static const String bookAppointmentsItemView = "/bookAppointmentsItemView"; static const String bookAppointmentsItemView = "/bookAppointmentsItemView";
static const String reviewAppointmentView = "/reviewAppointmentView"; static const String reviewAppointmentView = "/reviewAppointmentView";
static const String appoinmentSearchFilterPage = "/appoinmentSearchFilterPage";
//Advertisement //Advertisement
static const String selectAdTypeView = "/selectAdTypeView"; static const String selectAdTypeView = "/selectAdTypeView";
static const String adsDetailView = "/adsDetailView"; static const String adsDetailView = "/adsDetailView";
static const String createAdView = "/createAdView"; static const String createAdView = "/createAdView";
static const String adsFilterView = "/adsFilterView"; static const String adsFilterView = "/adsFilterView";
static const String adsBuyerChatsListView = "/adsBuyersChatListView";
static const String myDraftAdsView = "/myDraftAdsView";
// Payments // Payments
static const String paymentMethodsView = "/paymentMethodsView"; static const String paymentMethodsView = "/paymentMethodsView";
//Shipping
static const shippingManagementView = "/shippingManagementView";
//Customer APP: Provider & Services //Customer APP: Provider & Services
static const String branchDetailView = "/branchDetailPage"; static const String branchDetailPage = "/branchDetailPage";
static const String branchSearchFilterPage = "/branchSearchFilterPage"; static const String providerProfilePage = "/providerProfilePage";
static const String providerProfileView = "/providerProfilePage";
static const String favoriteListView = "/favoriteListView"; // Subscriptions
static const String mySubscriptionsPage = "/mySubscriptionsPage";
static const String subscriptionsPage = "/subscriptionsPage";
//Requests //Requests
static const String requestsDetailPage = "/requestsDetailPage";
static const String sendOfferPage = "/sendOfferPage";
static const String myRequestsPage = "/myRequestsPage"; static const String myRequestsPage = "/myRequestsPage";
static const String requestsFilterView = "/requestsFilterView";
static const String createRequestPage = "/createRequestPage"; static const String createRequestPage = "/createRequestPage";
static const String offersListPage = "/offersListPage"; static const String offersListPage = "/offersListPage";
static const String reviewRequestOffer = "/reviewRequestOffer"; static const String requestsDetailPage = "/requestsDetailPage";
static const String providerAcceptedRequestsView = "/providerAcceptedRequestsView"; static const String sendOfferPage = "/sendOfferPage";
static const String providersChatListPage = "/providersChatListPage";
//Setting Options //Setting Options
static const String settingOptionsFaqs = "/settingOptionsFaqs"; static const String settingOptionsFaqs = "/settingOptionsFaqs";
static const String settingOptionsContactUs = "/settingOptionsContactUs"; static const String settingOptionsLanguages = "/settingOptionsLanguages";
static const String settingOptionsAppInfo = "/settingOptionsAppInfo";
static const String settingOptionsTermsAndConditions = "/settingOptionsTermsAndConditions";
static const String settingOptionsMore = "/settingOptionsLanguages";
static const String settingOptionsInviteFriends = "/settingOptionsInviteFriends"; static const String settingOptionsInviteFriends = "/settingOptionsInviteFriends";
static const String settingOptionsHelp = "/settingOptionsHelp";
//MediaViewer
static const String mediaViewerScreen = "/mediaViewer";
//Profile Screen //Profile Screen
static const String profileView = "/profileView"; static const String profileView = "/profileView";
static const providerLicensePage = "/providerLicensePage";
static const String generalChatsListForProvider = "/generalChatsListForProvider";
//Chat //Chat
static const String chatView = "/chatView"; static const String chatView = "/chatView";
static const String updateUserDetails = "/updateUserDetails";
static const String updateUserCity = "/updateUserCity";
static const String initialRoute = splash; static const String initialRoute = splash;
static final Map<String, WidgetBuilder> routes = { static final Map<String, WidgetBuilder> routes = {
@ -189,57 +102,21 @@ class AppRoutes {
registerProvider: (context) => const RegisterProviderPage(), registerProvider: (context) => const RegisterProviderPage(),
forgetPassword: (context) => const ForgetPasswordPage(), forgetPassword: (context) => const ForgetPasswordPage(),
loginVerification: (context) => const LoginVerificationPage(), loginVerification: (context) => const LoginVerificationPage(),
loginWithPassword: (context) => LoginWithPassword(isRemoveBackButton: (ModalRoute.of(context)!.settings.arguments ?? true) as bool), loginWithPassword: (context) => const LoginWithPassword(),
loginMethodSelection: (context) => LoginMethodSelectionPage(ModalRoute.of(context)!.settings.arguments as String), loginMethodSelection: (context) => LoginMethodSelectionPage(ModalRoute.of(context)!.settings.arguments as String),
completeProfile: (context) => CompleteProfilePage(ModalRoute.of(context)!.settings.arguments as RegisterUserRespModel), completeProfile: (context) => CompleteProfilePage(ModalRoute.of(context)!.settings.arguments as RegisterUserRespModel),
verifyPassword: (context) => VerifyPasswordPage(), verifyPassword: (context) => VerifyPasswordPage(),
confirmNewPasswordPage: (context) => ConfirmNewPasswordPage(ModalRoute.of(context)!.settings.arguments as String), confirmNewPasswordPage: (context) => ConfirmNewPasswordPage(ModalRoute.of(context)!.settings.arguments as String),
changePassword: (context) => const ChangePasswordPage(),
forgetPasswordMethodPage: (context) => ForgetPasswordMethodPage(ModalRoute.of(context)!.settings.arguments as String), forgetPasswordMethodPage: (context) => ForgetPasswordMethodPage(ModalRoute.of(context)!.settings.arguments as String),
changeMobilePage: (context) => ChangeMobilePage(), changeMobilePage: (context) => ChangeMobilePage(),
changeEmailPage: (context) => const ChangeEmailPage(), changeEmailPage: (context) => const ChangeEmailPage(),
updateUserDetails: (context) => const UpdateUserDetails(),
updateUserCity: (context) => const UpdateUserCityCountry(),
changePassword: (context) => const ChangePasswordPage(),
editAccountPage: (context) => const EditAccountPage(), editAccountPage: (context) => const EditAccountPage(),
profileView: (context) => const ProfileScreen(), profileView: (context) => const ProfileScreen(),
settingOptionsMore: (context) => const SettingOptionsMore(),
settingOptionsHelp: (context) => const SettingOptionsHelp(),
providerLicensePage: (context) => const ProviderLicensePage(),
// common pages
AppRoutes.adsDetailView: (context) => AdsDetailView(adDetails: ModalRoute.of(context)!.settings.arguments as AdDetailsModel),
AppRoutes.createAdView: (context) => const CreateAdView(),
AppRoutes.adsFilterView: (context) => const AdsFilterView(),
AppRoutes.myDraftAdsView: (context) => const MyDraftAdsView(),
AppRoutes.selectAdTypeView: (context) => SelectAdTypeView(arguments: ModalRoute.of(context)!.settings.arguments as List<dynamic>),
AppRoutes.chatView: (context) => ChatView(chatViewArguments: ModalRoute.of(context)!.settings.arguments as ChatViewArguments),
AppRoutes.adsBuyerChatsListView: (context) => AdsBuyerChatsView(buyersListViewArguments: ModalRoute.of(context)!.settings.arguments as List<BuyersChatForAdsModel>),
AppRoutes.settingOptionsFaqs: (context) => const SettingOptionsFAQs(),
AppRoutes.settingOptionsContactUs: (context) => const SettingOptionsContactUs(),
AppRoutes.settingOptionsAppInfo: (context) => const SettingOptionsAppInfo(),
AppRoutes.settingOptionsTermsAndConditions: (context) => const SettingOptionsTermsAndConditions(),
AppRoutes.settingOptionsInviteFriends: (context) => const SettingOptionsInviteFriends(),
AppRoutes.paymentMethodsView: (context) => PaymentMethodsView(paymentType: ModalRoute.of(context)!.settings.arguments as PaymentTypes),
//Requests
AppRoutes.requestsDetailPage: (context) => RequestDetailPage(requestDetailPageArguments: ModalRoute.of(context)!.settings.arguments as RequestDetailPageArguments),
AppRoutes.createRequestPage: (context) => const CreateRequestPage(),
AppRoutes.offersListPage: (context) => OfferListPage(requestId: ModalRoute.of(context)!.settings.arguments as int),
AppRoutes.reviewRequestOffer: (context) => const ReviewRequestOffer(),
AppRoutes.requestsFilterView: (context) => const RequestsFilterView(),
AppRoutes.providersChatListPage: (context) => const ProvidersChatListPage(),
//MediaViewer
AppRoutes.mediaViewerScreen: (context) => MediaViewerScreen(images: ModalRoute.of(context)!.settings.arguments as List<MessageImageModel>),
// ChatsList Provider
AppRoutes.generalChatsListForProvider: (context) => OfferListPage(requestId: ModalRoute.of(context)!.settings.arguments as int),
//Shipping
AppRoutes.shippingManagementView: (context) => const ShippingManagementView(),
}; };
} }
class ChatViewArgumentsForRequest { class ChatViewArguments {
final int? requestId; final int? requestId;
final ChatTypeEnum chatTypeEnum; final ChatTypeEnum chatTypeEnum;
final String senderId; final String senderId;
@ -248,7 +125,7 @@ class ChatViewArgumentsForRequest {
final int requestIndex; final int requestIndex;
final RequestModel? requestModel; final RequestModel? requestModel;
ChatViewArgumentsForRequest({ ChatViewArguments({
required this.chatTypeEnum, required this.chatTypeEnum,
this.requestId, this.requestId,
required this.senderId, required this.senderId,
@ -259,25 +136,6 @@ class ChatViewArgumentsForRequest {
}); });
} }
class ChatViewArgumentsForAd {
final String? receiverUserID;
final int? adsID;
ChatViewArgumentsForAd({required this.receiverUserID, required this.adsID});
}
class ChatViewArguments {
final ChatViewArgumentsForAd? chatViewArgumentsForAd;
final ChatViewArgumentsForRequest? chatViewArgumentsForRequest;
final ChatTypeEnum chatTypeEnum;
ChatViewArguments({
this.chatViewArgumentsForAd,
this.chatViewArgumentsForRequest,
required this.chatTypeEnum,
});
}
class OfferListPageArguments { class OfferListPageArguments {
final List<ServiceProvidersOffers> serviceProviderOffers; final List<ServiceProvidersOffers> serviceProviderOffers;
final int? requestId; final int? requestId;

@ -1,12 +1,7 @@
import 'dart:developer';
import 'package:auto_size_text/auto_size_text.dart'; import 'package:auto_size_text/auto_size_text.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/date_helper.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
extension EmailValidator on String { extension EmailValidator on String {
@ -17,33 +12,25 @@ extension EmailValidator on String {
bool isUnderLine = false, bool isUnderLine = false,
bool isItalic = false, bool isItalic = false,
TextDecoration? textDecoration, TextDecoration? textDecoration,
double letterSpacing = 0, double letterSpacing = -0.4,
TextAlign? textAlign, TextAlign? textAlign,
FontWeight? fontWeight, FontWeight? fontWeight,
double? height, double? height,
Color? decorationColor, int? maxLines}) =>
TextOverflow? overflow, AutoSizeText(
bool isUpperCase = false, this,
int? maxLines}) {
bool isArabic = AppState().postParamsObject!.languageID == 1; // arabic -> 1 , English -> 2
return AutoSizeText(
isUpperCase ? toUpperCase() : this,
textAlign: textAlign, textAlign: textAlign,
maxLines: maxLines, maxLines: maxLines,
style: TextStyle( style: TextStyle(
overflow: overflow,
fontStyle: isItalic ? FontStyle.italic : null, fontStyle: isItalic ? FontStyle.italic : null,
height: height, height: height,
decoration: isUnderLine ? TextDecoration.underline : textDecoration ?? TextDecoration.none, decoration: isUnderLine ? TextDecoration.underline : textDecoration ?? TextDecoration.none,
decorationColor: decorationColor ?? color ?? MyColors.darkTextColor,
fontSize: fontSize ?? 10, fontSize: fontSize ?? 10,
fontFamily: isArabic ? MyFonts.gessTwoFont : MyFonts.poppinsFont, fontWeight: isBold ? FontWeight.bold : fontWeight ?? FontWeight.w600,
fontWeight: isBold ? FontWeight.bold : fontWeight ?? MyFonts.SemiBold,
color: color ?? MyColors.darkTextColor, color: color ?? MyColors.darkTextColor,
letterSpacing: letterSpacing, letterSpacing: letterSpacing,
), ),
); );
}
bool isValidEmail() { bool isValidEmail() {
return RegExp(r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$').hasMatch(this); return RegExp(r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$').hasMatch(this);
@ -165,57 +152,23 @@ extension FormatDate on String {
} }
extension RequestEnum on int { extension RequestEnum on int {
RequestStatusEnum toRequestStatusEnum() { RequestStatus toRequestStatusEnum() {
if (this == 1) { if (this == 1) {
return RequestStatusEnum.submitted; return RequestStatus.submitted;
} else if (this == 2) { } else if (this == 2) {
return RequestStatusEnum.inProgress; return RequestStatus.inProgress;
} else if (this == 3) { } else if (this == 3) {
return RequestStatusEnum.completed; return RequestStatus.completed;
} else if (this == 4) { } else if (this == 4) {
return RequestStatusEnum.cancelled; return RequestStatus.cancelled;
} else if (this == 5) { } else if (this == 5) {
return RequestStatusEnum.paid; return RequestStatus.paid;
} else if (this == 6) { } else if (this == 6) {
return RequestStatusEnum.expired; return RequestStatus.expired;
} else if (this == 7) { } else if (this == 7) {
return RequestStatusEnum.shipping; return RequestStatus.shipping;
} else if (this == 8) {
return RequestStatusEnum.delivery;
} else if (this == 9) {
return RequestStatusEnum.selfPickup;
} else { } else {
return RequestStatusEnum.pending; return RequestStatus.pending;
}
}
}
extension RequestStatusEnumToInt on RequestStatusEnum {
int getIdFromRequestStatusEnum() {
switch (this) {
case RequestStatusEnum.submitted:
return 1;
case RequestStatusEnum.inProgress:
return 2;
case RequestStatusEnum.completed:
return 3;
case RequestStatusEnum.cancelled:
return 4;
case RequestStatusEnum.paid:
return 5;
case RequestStatusEnum.expired:
return 6;
case RequestStatusEnum.shipping:
return 7;
case RequestStatusEnum.delivery:
return 8;
case RequestStatusEnum.selfPickup:
return 9;
case RequestStatusEnum.pending:
return 0;
default:
return 0;
} }
} }
} }
@ -244,10 +197,6 @@ extension AdPostEnum on int {
return AdPostStatus.buyingService; return AdPostStatus.buyingService;
} else if (this == 11) { } else if (this == 11) {
return AdPostStatus.reserveCancel; return AdPostStatus.reserveCancel;
} else if (this == 12) {
return AdPostStatus.deActive;
} else if (this == 13) {
return AdPostStatus.pendingForActive;
} else if (this == 0) { } else if (this == 0) {
return AdPostStatus.allAds; return AdPostStatus.allAds;
} else { } else {
@ -274,55 +223,21 @@ extension AppointmentStatusToInt on AppointmentStatusEnum {
case AppointmentStatusEnum.rescheduled: case AppointmentStatusEnum.rescheduled:
return 5; return 5;
case AppointmentStatusEnum.upcoming:
return 6;
case AppointmentStatusEnum.workStarted: case AppointmentStatusEnum.workStarted:
return 7; return 7;
case AppointmentStatusEnum.visitCompleted: case AppointmentStatusEnum.visitCompleted:
return 8; return 8;
case AppointmentStatusEnum.today:
return 9;
case AppointmentStatusEnum.past:
return 10;
case AppointmentStatusEnum.upcoming:
return 11;
case AppointmentStatusEnum.allAppointments:
return 0;
default: default:
return 0; return 0;
} }
} }
} }
extension AppointmentTypeEnumExt on int {
AppointmentTypeEnum toAppointmentTypeEnum() {
if (this == 1) {
return AppointmentTypeEnum.workshop;
} else if (this == 2) {
return AppointmentTypeEnum.home;
} else {
return AppointmentTypeEnum.workshop;
}
}
}
extension AppointmentTypeEnumExtString on AppointmentTypeEnum {
int getIdFromAppointmentTypeEnum() {
switch (this) {
case AppointmentTypeEnum.workshop:
return 1;
case AppointmentTypeEnum.home:
return 2;
default:
return 1;
}
}
}
extension AppointmentStatusToString on AppointmentStatusEnum { extension AppointmentStatusToString on AppointmentStatusEnum {
String getAppointmentNameFromEnum() { String getAppointmentNameFromEnum() {
switch (this) { switch (this) {
@ -350,18 +265,14 @@ extension AppointmentStatusToString on AppointmentStatusEnum {
case AppointmentStatusEnum.visitCompleted: case AppointmentStatusEnum.visitCompleted:
return "Visit Completed"; return "Visit Completed";
case AppointmentStatusEnum.past:
return "Past";
case AppointmentStatusEnum.today:
return "Today";
default: default:
return "Booked"; return "Booked";
} }
} }
} }
//TODO: Need to verify Enum on upcoming and inprogress with the database
//TODO: 6 is service Deactivated
extension AppointmentEnum on int { extension AppointmentEnum on int {
AppointmentStatusEnum toAppointmentStatusEnum() { AppointmentStatusEnum toAppointmentStatusEnum() {
if (this == 1) { if (this == 1) {
@ -374,16 +285,12 @@ extension AppointmentEnum on int {
return AppointmentStatusEnum.cancelled; return AppointmentStatusEnum.cancelled;
} else if (this == 5) { } else if (this == 5) {
return AppointmentStatusEnum.rescheduled; return AppointmentStatusEnum.rescheduled;
} else if (this == 6) {
return AppointmentStatusEnum.upcoming;
} else if (this == 7) { } else if (this == 7) {
return AppointmentStatusEnum.workStarted; return AppointmentStatusEnum.workStarted;
} else if (this == 8) { } else if (this == 8) {
return AppointmentStatusEnum.visitCompleted; return AppointmentStatusEnum.visitCompleted;
} else if (this == 9) {
return AppointmentStatusEnum.today;
} else if (this == 10) {
return AppointmentStatusEnum.past;
} else if (this == 11) {
return AppointmentStatusEnum.upcoming;
} else { } else {
return AppointmentStatusEnum.allAppointments; return AppointmentStatusEnum.allAppointments;
} }
@ -432,8 +339,8 @@ extension AppointmentPaymentEnum on int {
} }
} }
extension RequestTypeTypEnum on int { extension RequestTypeTypeEnum on int {
RequestsTypeEnum toRequestTypeEnum() { RequestsTypeEnum toRequestTypeStatusEnum() {
if (this == 1) { if (this == 1) {
return RequestsTypeEnum.specialCarRequest; return RequestsTypeEnum.specialCarRequest;
} else if (this == 2) { } else if (this == 2) {
@ -444,7 +351,7 @@ extension RequestTypeTypEnum on int {
} }
extension RequestTypeStatusToInt on RequestsTypeEnum { extension RequestTypeStatusToInt on RequestsTypeEnum {
int getIdFromRequestTypeEnum() { int getIdFromRequestTypeStatusEnum() {
switch (this) { switch (this) {
case RequestsTypeEnum.specialCarRequest: case RequestsTypeEnum.specialCarRequest:
return 1; return 1;
@ -463,7 +370,6 @@ extension AdPostStatusToInt on AdPostStatus {
switch (this) { switch (this) {
case AdPostStatus.pendingForReview: case AdPostStatus.pendingForReview:
return 1; return 1;
case AdPostStatus.pendingForPayment: case AdPostStatus.pendingForPayment:
return 2; return 2;
@ -493,13 +399,6 @@ extension AdPostStatusToInt on AdPostStatus {
case AdPostStatus.reserveCancel: case AdPostStatus.reserveCancel:
return 11; return 11;
case AdPostStatus.deActive:
return 12;
case AdPostStatus.pendingForActive:
return 13;
default: default:
return 0; return 0;
} }
@ -511,12 +410,16 @@ extension PaymentTypesToInt on PaymentTypes {
switch (this) { switch (this) {
case PaymentTypes.subscription: case PaymentTypes.subscription:
return 1; return 1;
case PaymentTypes.appointment: case PaymentTypes.appointment:
return 2; return 2;
case PaymentTypes.adReserve: case PaymentTypes.adReserve:
return 4; return 4;
case PaymentTypes.ads: case PaymentTypes.ads:
return 3; return 3;
case PaymentTypes.request: case PaymentTypes.request:
return 5; return 5;
case PaymentTypes.extendAds: case PaymentTypes.extendAds:
@ -530,30 +433,6 @@ extension PaymentTypesToInt on PaymentTypes {
} }
} }
extension PaymentIdToPaymentTypes on int {
PaymentTypes getPaymentTypeFromId() {
switch (this) {
case 1:
return PaymentTypes.subscription;
case 2:
return PaymentTypes.appointment;
case 4:
return PaymentTypes.adReserve;
case 3:
return PaymentTypes.ads;
case 5:
return PaymentTypes.request;
case 6:
return PaymentTypes.extendAds;
case 7:
return PaymentTypes.partialAppointment;
default:
return PaymentTypes.ads;
}
}
}
extension CreatedByRoleEnumToInt on CreatedByRoleEnum { extension CreatedByRoleEnumToInt on CreatedByRoleEnum {
int getIdFromCreatedByRoleEnum() { int getIdFromCreatedByRoleEnum() {
switch (this) { switch (this) {
@ -648,40 +527,12 @@ extension ServiceEnum on int {
} }
} }
extension BranchServiceEnumStatusToInt on ServiceStatusEnum {
int getIdFromServiceStatusEnum() {
switch (this) {
case ServiceStatusEnum.pending:
return 1;
case ServiceStatusEnum.review:
return 2;
case ServiceStatusEnum.approvedOrActive:
return 3;
case ServiceStatusEnum.rejected:
return 4;
case ServiceStatusEnum.blocked:
return 5;
case ServiceStatusEnum.deactivated:
return 6;
default:
return 1;
}
}
}
extension DateTimeConversions on DateTime { extension DateTimeConversions on DateTime {
String getTimeAgo({bool numericDates = true}) { String getTimeAgo({bool numericDates = true}) {
final date2 = DateTime.now(); final date2 = DateTime.now();
final difference = date2.difference(this); final difference = date2.difference(this);
if ((difference.inDays / 7).floor() >= 2) {
return DateHelper.formatAsDayMonthYear(this); if ((difference.inDays / 7).floor() >= 1) {
} else if ((difference.inDays / 7).floor() >= 1) {
return (numericDates) ? '1 week ago' : 'Last week'; return (numericDates) ? '1 week ago' : 'Last week';
} else if (difference.inDays >= 2) { } else if (difference.inDays >= 2) {
return '${difference.inDays} days ago'; return '${difference.inDays} days ago';
@ -692,11 +543,11 @@ extension DateTimeConversions on DateTime {
} else if (difference.inHours >= 1) { } else if (difference.inHours >= 1) {
return (numericDates) ? '1 hour ago' : 'An hour ago'; return (numericDates) ? '1 hour ago' : 'An hour ago';
} else if (difference.inMinutes >= 2) { } else if (difference.inMinutes >= 2) {
return '${difference.inMinutes} min ago'; return '${difference.inMinutes} minutes ago';
} else if (difference.inMinutes >= 1) { } else if (difference.inMinutes >= 1) {
return (numericDates) ? '1 min ago' : 'A min ago'; return (numericDates) ? '1 minute ago' : 'A minute ago';
} else if (difference.inSeconds >= 3) { } else if (difference.inSeconds >= 3) {
return '${difference.inSeconds} sec ago'; return '${difference.inSeconds} seconds ago';
} else { } else {
return 'Just now'; return 'Just now';
} }
@ -799,23 +650,6 @@ extension FormatMonthByNumber on String {
} }
} }
extension NameExtensions on String {
String getInitials() {
final name = trim();
String initials = "";
if (name.isEmpty) {
return initials;
}
final list = name.split(' ');
if (list.length > 1) {
initials = list[0][0].toUpperCase() + list[1][0].toUpperCase();
}
return initials;
}
}
extension ChatMessageTypeEnumExt on int { extension ChatMessageTypeEnumExt on int {
//FreeText = 1, //FreeText = 1,
// Image = 2, // Image = 2,
@ -923,237 +757,3 @@ extension ChatTypeEnumToInt on ChatTypeEnum {
} }
} }
} }
extension SubscriptionTypeEnumExt on int {
SubscriptionTypeEnum toSubscriptionTypeEnum() {
if (this == 2) {
return SubscriptionTypeEnum.upgrade;
} else if (this == 3) {
return SubscriptionTypeEnum.downgrade;
}
return SubscriptionTypeEnum.current;
}
}
extension SubscriptionTypeEnumToInt on SubscriptionTypeEnum {
int getIdSubscriptionTypeEnum() {
switch (this) {
case SubscriptionTypeEnum.current:
return 1;
case SubscriptionTypeEnum.upgrade:
return 2;
case SubscriptionTypeEnum.downgrade:
return 3;
default:
return 1;
}
}
}
extension SubscriptionTypeEnumToString on SubscriptionTypeEnum {
String getStringSubscriptionTypeEnum() {
switch (this) {
case SubscriptionTypeEnum.current:
return "Current";
case SubscriptionTypeEnum.upgrade:
return "Upgrade";
case SubscriptionTypeEnum.downgrade:
return "Downgrade";
default:
return "Current";
}
}
}
extension ShippingStatusEnumExt on int {
ShippingRequestStatusEnum toShippingStatusEnum() {
if (this == -1) {
return ShippingRequestStatusEnum.allRequests;
} else if (this == 0) {
return ShippingRequestStatusEnum.pending;
} else if (this == 1) {
return ShippingRequestStatusEnum.initiated;
} else if (this == 2) {
return ShippingRequestStatusEnum.inTransit;
} else if (this == 3) {
return ShippingRequestStatusEnum.outForDelivery;
} else if (this == 4) {
return ShippingRequestStatusEnum.delivered;
}
return ShippingRequestStatusEnum.pending;
}
}
extension ShippingStatusEnumToInt on ShippingRequestStatusEnum {
int getIdFromShippingStatusEnum() {
switch (this) {
case ShippingRequestStatusEnum.pending:
return 0;
case ShippingRequestStatusEnum.initiated:
return 1;
case ShippingRequestStatusEnum.inTransit:
return 2;
case ShippingRequestStatusEnum.outForDelivery:
return 3;
case ShippingRequestStatusEnum.delivered:
return 4;
case ShippingRequestStatusEnum.allRequests:
return -1;
default:
return -1;
}
}
}
extension SelfPickupStatusEnumExt on int {
SelfPickupRequestStatusEnum toSelfPickupStatusEnum() {
if (this == -1) {
return SelfPickupRequestStatusEnum.allRequests;
} else if (this == 0) {
return SelfPickupRequestStatusEnum.pending;
} else if (this == 1) {
return SelfPickupRequestStatusEnum.preparingToCollect;
} else if (this == 2) {
return SelfPickupRequestStatusEnum.readyToCollect;
} else if (this == 3) {
return SelfPickupRequestStatusEnum.collected;
}
return SelfPickupRequestStatusEnum.allRequests;
}
}
extension SelfPickupStatusEnumToInt on SelfPickupRequestStatusEnum {
int getIdFromSelfPickupStatusEnum() {
switch (this) {
case SelfPickupRequestStatusEnum.allRequests:
return -1;
case SelfPickupRequestStatusEnum.pending:
return 0;
case SelfPickupRequestStatusEnum.preparingToCollect:
return 1;
case SelfPickupRequestStatusEnum.readyToCollect:
return 2;
case SelfPickupRequestStatusEnum.collected:
return 3;
default:
return -1;
}
}
}
extension RequestDeliveryOptionEnumExt on int {
RequestDeliveryOptionEnum toRequestDeliveryOptionEnum() {
if (this == 1) {
return RequestDeliveryOptionEnum.delivery;
} else if (this == 2) {
return RequestDeliveryOptionEnum.selfPickup;
} else if (this == 3) {
return RequestDeliveryOptionEnum.both;
}
return RequestDeliveryOptionEnum.none;
}
}
extension RequestDeliveryOptionEnumToIntExt on RequestDeliveryOptionEnum {
int getIdRequestDeliveryOptionEnum() {
switch (this) {
case RequestDeliveryOptionEnum.delivery:
return 1;
case RequestDeliveryOptionEnum.selfPickup:
return 2;
case RequestDeliveryOptionEnum.both:
return 3;
default:
return 0;
}
}
}
extension RequestDeliveryOptionEnumTosTRINGExt on RequestDeliveryOptionEnum {
String getStringFromRequestDeliveryOptionEnum() {
switch (this) {
case RequestDeliveryOptionEnum.delivery:
return "Delivery";
case RequestDeliveryOptionEnum.selfPickup:
return "Self Pickup";
case RequestDeliveryOptionEnum.both:
return "Delivery, Self Pickup";
default:
return "Self Pickup";
}
}
}
extension CapitalizeFirstLetter on String {
String capitalizeFirstLetter() {
if (isEmpty) {
return this; // Return the string as-is if it's empty
}
return this[0].toUpperCase() + substring(1).toLowerCase();
}
}
// Extension to convert InviteType to corresponding integer
extension InviteTypeToInt on InviteTypeEnum {
int toIntFromEnum() {
switch (this) {
case InviteTypeEnum.whatsapp:
return 1;
case InviteTypeEnum.sms:
return 2;
case InviteTypeEnum.email:
return 3;
}
}
}
// Extension to convert integer to corresponding InviteType
extension IntToInviteType on int {
InviteTypeEnum get toInviteTypeFromInt {
switch (this) {
case 1:
return InviteTypeEnum.whatsapp;
case 2:
return InviteTypeEnum.sms;
case 3:
return InviteTypeEnum.email;
default:
throw ArgumentError('Invalid integer value: $this');
}
}
}
extension AdCreationStepsToInt on AdCreationStepsEnum {
int toIntFromStepsEnum() {
switch (this) {
case AdCreationStepsEnum.vehicleDetails:
return 1;
case AdCreationStepsEnum.damageParts:
return 2;
case AdCreationStepsEnum.adDuration:
return 3;
case AdCreationStepsEnum.reviewAd:
return 4;
}
}
}
extension AdCreationStepsFromInt on int {
AdCreationStepsEnum toAdCreationStepsEnumFromInt() {
switch (this) {
case 0:
return AdCreationStepsEnum.vehicleDetails;
case 1:
return AdCreationStepsEnum.vehicleDetails;
case 2:
return AdCreationStepsEnum.damageParts;
case 3:
return AdCreationStepsEnum.adDuration;
case 4:
return AdCreationStepsEnum.reviewAd;
}
return AdCreationStepsEnum.vehicleDetails;
}
}

File diff suppressed because it is too large Load Diff

@ -166,633 +166,5 @@ abstract class LocaleKeys {
static const updateBranch = 'updateBranch'; static const updateBranch = 'updateBranch';
static const branches = 'branches'; static const branches = 'branches';
static const requests = 'requests'; static const requests = 'requests';
static const noBranchFound = 'noBranchFound';
static const onlyProviderApp = 'onlyProviderApp';
static const pickAddress = 'pickAddress';
static const pickLocation = 'pickLocation';
static const chooseCity = 'chooseCity';
static const selectAttachment = 'selectAttachment';
static const somethingWrong = 'somethingWrong';
static const documentsUploaded = 'documentsUploaded';
static const update = 'update';
static const profileCompleted = 'profileCompleted';
static const selectLocationMap = 'selectLocationMap';
static const licensesAndCertifications = 'licensesAndCertifications';
static const completeProfile1 = 'completeProfile1';
static const completeProfile2 = 'completeProfile2';
static const completeProfile3 = 'completeProfile3';
static const provider = 'provider';
static const noRequeststoShow = 'noRequeststoShow';
static const myBranches = 'myBranches';
static const mergeAppointments = 'mergeAppointments';
static const addService = 'addService';
static const selectServicestoAdd = 'selectServicestoAdd';
static const noServiceFound = 'noServiceFound';
static const selectItems = 'selectItems';
static const noItemSelectedYet = 'noItemSelectedYet';
static const totalAdditionalAmount = 'totalAdditionalAmount';
static const sar = 'sar';
static const cancel = 'cancel';
static const add = 'add';
static const itemsAddedSuccessfully = 'itemsAddedSuccessfully';
static const pleaseSelectItems = 'pleaseSelectItems';
static const totalAmount = 'totalAmount';
static const searchItems = 'searchItems';
static const addSelectedItems = 'addSelectedItems';
static const collectMoneyBefore = 'collectMoneyBefore';
static const yes = 'yes';
static const no = 'no';
static const reason = 'reason';
static const typeHere = 'typeHere';
static const pleaseSelectReason = 'pleaseSelectReason';
static const noAppointmentFound = 'noAppointmentFound';
static const slotsOverview = 'slotsOverview';
static const empty = 'empty';
static const occupied = 'occupied';
static const totalSlots = 'totalSlots';
static const selectAppointments = 'selectAppointments';
static const appointmentMergeSuccessfully = 'appointmentMergeSuccessfully';
static const updateAppointment = 'updateAppointment';
static const addNewService = 'addNewService';
static const waitingPaymentfromtheCustomer = 'waitingPaymentfromtheCustomer';
static const appointmentisCompleted = 'appointmentisCompleted';
static const workStart = 'workStart';
static const payNow = 'payNow';
static const arrived = 'arrived';
static const payLater = 'payLater';
static const complete = 'complete';
static const makeAnOffer = 'makeAnOffer';
static const provideOffer = 'provideOffer';
static const enterAmount = 'enterAmount';
static const submit = 'submit';
static const viewChat = 'viewChat';
static const requestDetail = 'requestDetail';
static const sendOffer = 'sendOffer';
static const offer = 'offer';
static const sendPriceOffer = 'sendPriceOffer';
static const comment = 'comment';
static const sendOTP = 'sendOTP';
static const noUserAddedYet = 'noUserAddedYet';
static const assignDealerUser = 'assignDealerUser';
static const createNewUser = 'createNewUser';
static const dealerUser = 'dealerUser';
static const setorEditBranchSchedule = 'setorEditBranchSchedule';
static const addServices = 'addServices';
static const noServiceAddedYet = 'noServiceAddedYet';
static const selectDays = 'selectDays';
static const addSelectedDays = 'addSelectedDays';
static const select_Services = 'select_Services';
static const searchService = 'searchService';
static const addSelectedServices = 'addSelectedServices';
static const nameofSchedule = 'nameofSchedule';
static const startingDate = 'startingDate';
static const endDate = 'endDate';
static const offDays = 'offDays';
static const shiftStartTime = 'shiftStartTime';
static const shiftEndTime = 'shiftEndTime';
static const slotsTime = 'slotsTime';
static const appointmentPerSlot = 'appointmentPerSlot';
static const create = 'create';
static const pleaseEnterValidScheduleName = 'pleaseEnterValidScheduleName';
static const pleaseSelectServices = 'pleaseSelectServices';
static const pleaseSelectStartDate = 'pleaseSelectStartDate';
static const pleaseSelectEndDate = 'pleaseSelectEndDate';
static const pleaseSelectOffDays = 'pleaseSelectOffDays';
static const pleaseSelectStartTime = 'pleaseSelectStartTime';
static const pleaseSelectEndTime = 'pleaseSelectEndTime';
static const pleaseSelectSlotTime = 'pleaseSelectSlotTime';
static const pleaseSelectAppointmentPerSlot = 'pleaseSelectAppointmentPerSlot';
static const exploreAds = 'exploreAds';
static const myAds = 'myAds';
static const noAppointmentstoShow = 'noAppointmentstoShow';
static const myRecommendedAds = 'myRecommendedAds';
static const model = 'model';
static const chooseImageSource = 'chooseImageSource';
static const camera = 'camera';
static const gallery = 'gallery';
static const imageIsDeleted = 'imageIsDeleted';
static const myRequests = 'myRequests';
static const branchDetail = 'branchDetail';
static const time = 'time';
static const openMapLocation = 'openMapLocation';
static const providerProfile = 'providerProfile';
static const servicesOffer = 'servicesOffer';
static const noServicesAvailable = 'noServicesAvailable';
static const bookAppointment = 'bookAppointment';
static const allowingHomeService = 'allowingHomeService';
static const homeServiceRange = 'homeServiceRange';
static const chargesPerKM = 'chargesPerKM';
static const providerDetails = 'providerDetails';
static const someDescriptionExperienceandtheirReputation = 'someDescriptionExperienceandtheirReputation';
static const availableforAppointment = 'availableforAppointment';
static const allowingWorkshopService = 'allowingWorkshopService';
static const serviceAmount = 'serviceAmount';
static const youNeedStoragePermissionFiles = 'youNeedStoragePermissionFiles';
static const settingDeniedPermanently = 'settingDeniedPermanently';
static const openAppSetting = 'openAppSetting';
static const adDuration = 'adDuration';
static const startDate = 'startDate';
static const contactDetails = 'contactDetails';
static const showyournumbertoBuyers = 'showyournumbertoBuyers';
static const isNumberRegisteredWhatsApp = 'isNumberRegisteredWhatsApp';
static const selectSpecialServices = 'selectSpecialServices';
static const vehicleDetails = 'vehicleDetails';
static const vehicleModel = 'vehicleModel';
static const vehicleColor = 'vehicleColor';
static const vehicleCategory = 'vehicleCategory';
static const vehicleTransmission = 'vehicleTransmission';
static const vehicleCountry = 'vehicleCountry';
static const vehicleAmount = 'vehicleAmount';
static const vehicleTitle = 'vehicleTitle';
static const financeAvailable = 'financeAvailable';
static const vehiclePictures = 'vehiclePictures';
static const vehiclePart = 'vehiclePart';
static const damagePartPictures = 'damagePartPictures';
static const vehicleDamagePart = 'vehicleDamagePart';
static const duration = 'duration';
static const specialServices = 'specialServices';
static const specialService = 'specialService';
static const adContactDetails = 'adContactDetails';
static const onWhatsAp = 'onWhatsAp';
static const reserveAdPriceInfo = 'reserveAdPriceInfo';
static const addDamagePart = 'addDamagePart';
static const vehicleType = 'vehicleType';
static const vehicleYear = 'vehicleYear';
static const vehicleCondition = 'vehicleCondition';
static const vehicleMileage = 'vehicleMileage';
static const sellerType = 'sellerType';
static const vehicleCity = 'vehicleCity';
static const vehicleVIN = 'vehicleVIN';
static const warrantyAvailable = 'warrantyAvailable';
static const years = 'years';
static const vehicleDetail = 'vehicleDetail';
static const vehicleBrand = 'vehicleBrand';
static const vehicleModelYear = 'vehicleModelYear';
static const vehicleSellerType = 'vehicleSellerType';
static const demandAmount = 'demandAmount';
static const warrantyAvailableYears = 'warrantyAvailableYears';
static const vehicleDescription = 'vehicleDescription';
static const attachImage = 'attachImage';
static const useFingerPrintFaceID = 'useFingerPrintFaceID';
static const setupTouchID = 'setupTouchID';
static const reenableTouchID = 'reenableTouchID';
static const scanFaceIDAuthenticate = 'scanFaceIDAuthenticate';
static const adDeletedSuccessfully = 'adDeletedSuccessfully';
static const yourReservationCancelled = 'yourReservationCancelled';
static const adDeactivatedSuccessfully = 'adDeactivatedSuccessfully';
static const vehicle_selectVehicleType = 'vehicle.selectVehicleType';
static const vehicle_selectVehicleModel = 'vehicle.selectVehicleModel';
static const vehicle_selectVehicleModelYear = 'vehicle.selectVehicleModelYear';
static const vehicle_selectVehicleColor = 'vehicle.selectVehicleColor';
static const vehicle_vehicleCondition = 'vehicle.vehicleCondition';
static const vehicle_vehicleCategory = 'vehicle.vehicleCategory';
static const vehicle_vehicleMileage = 'vehicle.vehicleMileage';
static const vehicle_vehicleTransmission = 'vehicle.vehicleTransmission';
static const vehicle_vehicleSellerType = 'vehicle.vehicleSellerType';
static const vehicle_selectAny = 'vehicle.selectAny';
static const vehicle_vehicleCity = 'vehicle.vehicleCity';
static const vehicle_vehiclePart = 'vehicle.vehiclePart';
static const vehicle_selectValidVehicleType = 'vehicle.selectValidVehicleType';
static const vehicle = 'vehicle';
static const selectAppointmentTimeService = 'selectAppointmentTimeService';
static const error = 'error';
static const appointmentBookedSuccessfully = 'appointmentBookedSuccessfully';
static const appointmentStatusUpdated = 'appointmentStatusUpdated';
static const paymentStatusUpdated = 'paymentStatusUpdated';
static const selectOneSubService = 'selectOneSubService';
static const chargesBreakdown = 'chargesBreakdown';
static const services = 'services';
static const homeLocation = 'homeLocation';
static const selectAppointmentTime = 'selectAppointmentTime';
static const noAppointmentAvailable = 'noAppointmentAvailable';
static const changedMind = 'changedMind';
static const veryHighPrice = 'veryHighPrice';
static const alreadySold = 'alreadySold';
static const otherVar = 'otherVar';
static const paymentSuccessful = 'paymentSuccessful';
static const paymentFailed = 'paymentFailed';
static const requestSuccessfullyCreated = 'requestSuccessfullyCreated';
static const selectValidRequestType = 'selectValidRequestType';
static const selectValidBrand = 'selectValidBrand';
static const selectValidModel = 'selectValidModel';
static const selectValidYear = 'selectValidYear';
static const selectValidCountry = 'selectValidCountry';
static const selectValidCity = 'selectValidCity';
static const addValidPrice = 'addValidPrice';
static const addValidDescription = 'addValidDescription';
static const passwordTooShort = 'passwordTooShort';
static const passwordAcceptableStrong = 'passwordAcceptableStrong';
static const passwordIsStrong = 'passwordIsStrong';
static const passwordVeryStrong = 'passwordVeryStrong';
static const selectDuration = 'selectDuration';
static const daysVar = 'daysVar';
static const adCharges = 'adCharges';
static const select = 'select';
static const deleteAdConfirmation = 'deleteAdConfirmation';
static const deleteAdConfirmationMessage = 'deleteAdConfirmationMessage';
static const mileage = 'mileage';
static const transmission = 'transmission';
static const demand = 'demand';
static const adDurationExpired = 'adDurationExpired';
static const bankDetails = 'bankDetails';
static const bankName = 'bankName';
static const iban = 'iban';
static const rejectionComments = 'rejectionComments';
static const editAd = 'editAd';
static const reserveAd = 'reserveAd';
static const reservationAmount = 'reservationAmount';
static const belowAmountPayLater = 'belowAmountPayLater';
static const carPrice = 'carPrice';
static const vatExcluded = 'vatExcluded';
static const carInsuranceService = 'carInsuranceService';
static const toBeDecided = 'toBeDecided';
static const registrationCarPlates = 'registrationCarPlates';
static const homeDeliveryService = 'homeDeliveryService';
static const specialServicechargesInsuranceDeliveryLocation = 'specialServicechargesInsuranceDeliveryLocation';
static const estimated = 'estimated';
static const servicesReservingAd = 'servicesReservingAd';
static const completeReservation = 'completeReservation';
static const contact = 'contact';
static const setDateandTime = 'setDateandTime';
static const selectOffice = 'selectOffice';
static const availableSlots = 'availableSlots';
static const bookAndPay = 'bookAndPay';
static const reservationAmounts = 'reservationAmounts';
static const tax = 'tax';
static const adsFilter = 'adsFilter';
static const searchByCity = 'searchByCity';
static const selectCity = 'selectCity';
static const searchByBrandName = 'searchByBrandName';
static const selectVehicleBrand = 'selectVehicleBrand';
static const searchByVehicleYear = 'searchByVehicleYear';
static const selectYear = 'selectYear';
static const searchByAdOwner = 'searchByAdOwner';
static const selectOwner = 'selectOwner';
static const search = 'search';
static const clearFilters = 'clearFilters';
static const book = 'book';
static const markAsSold = 'markAsSold';
static const deactivateAd = 'deactivateAd';
static const doWantDeactivateAd = 'doWantDeactivateAd';
static const stoptheBuyers = 'stoptheBuyers';
static const cancelReservation = 'cancelReservation';
static const reasonForCancellation = 'reasonForCancellation';
static const doWantCancelReservation = 'doWantCancelReservation';
static const yourAdVisibletoBuy = 'yourAdVisibletoBuy';
static const completeDeal = 'completeDeal';
static const uploadBankReceipt = 'uploadBankReceipt';
static const notesForAdmin = 'notesForAdmin';
static const extendAd = 'extendAd';
static const updateAdDetails = 'updateAdDetails';
static const durationExtendingAd = 'durationExtendingAd';
static const waitingAdminsResponse = 'waitingAdminsResponse';
static const cancelledByOwner = 'cancelledByOwner';
static const cancelledByAdmin = 'cancelledByAdmin';
static const reservationTimeOver = 'reservationTimeOver';
static const paymentVerified = 'paymentVerified';
static const rejectedFormAdmin = 'rejectedFormAdmin';
static const waitingAdminPost = 'waitingAdminPost';
static const waitingAdminsApproval = 'waitingAdminsApproval';
static const sold = 'sold';
static const noAdsShow = 'noAdsShow';
static const damagePartList = 'damagePartList';
static const searchPart = 'searchPart';
static const addSpecialService = 'addSpecialService';
static const vehicleVar = 'vehicleVar';
static const detailsVar = 'detailsVar';
static const damageVar = 'damageVar';
static const partsVar = 'partsVar';
static const additional = 'additional';
static const review = 'review';
static const adVar = 'adVar';
static const updateAd = 'updateAd';
static const createAd = 'createAd';
static const next = 'next';
static const submitAd = 'submitAd';
static const selectAdType = 'selectAdType';
static const validUntilSubscriptionExpiration = 'validUntilSubscriptionExpiration';
static const youLeftAdsGivenSubscription = 'youLeftAdsGivenSubscription';
static const updateSubscription = 'updateSubscription';
static const workInProgress = 'workInProgress';
static const visitCompleted = 'visitCompleted';
static const youWantCancelAppointment = 'youWantCancelAppointment';
static const appointmentCancelledCannotUndoAction = 'appointmentCancelledCannotUndoAction';
static const appointment = 'appointment';
static const rescheduleAppointment = 'rescheduleAppointment';
static const payforAppointment = 'payforAppointment';
static const appointmentsFilter = 'appointmentsFilter';
static const searchByProvider = 'searchByProvider';
static const selectProvider = 'selectProvider';
static const searchByBranch = 'searchByBranch';
static const searchByCategory = 'searchByCategory';
static const selectCategory = 'selectCategory';
static const searchByService = 'searchByService';
static const selectServices = 'selectServices';
static const modifyPackage = 'modifyPackage';
static const schedule = 'schedule';
static const serviceLocation = 'serviceLocation';
static const workshop = 'workshop';
static const itemsSelected = 'itemsSelected';
static const workshopFullAccessServices = 'workshopFullAccessServices';
static const changeLocationService = 'changeLocationService';
static const someDescriptionSubServices = 'someDescriptionSubServices';
static const selectServicesYouWant = 'selectServicesYouWant';
static const selectServiceType = 'selectServiceType';
static const selectDateAndTime = 'selectDateAndTime';
static const reviewAppointment = 'reviewAppointment';
static const carEngineCheck = 'carEngineCheck';
static const dateAndTime = 'dateAndTime';
static const timeLocation = 'timeLocation';
static const serviceCharges = 'serviceCharges';
static const locationCharges = 'locationCharges';
static const payableNow = 'payableNow';
static const remainingAmount = 'remainingAmount';
static const branchesFilter = 'branchesFilter';
static const searchByDistance = 'searchByDistance';
static const searchByMinimumRatings = 'searchByMinimumRatings';
static const chat = 'chat';
static const noRequestsShow = 'noRequestsShow';
static const typeMessageHere = 'typeMessageHere';
static const reject = 'reject';
static const newOfferRequired = 'newOfferRequired';
static const offerHasBeenAccepted = 'offerHasBeenAccepted';
static const offerHasBeenRejected = 'offerHasBeenRejected';
static const offerHasBeenCancelled = 'offerHasBeenCancelled';
static const paymentMethod = 'paymentMethod';
static const selectPaymentMethod = 'selectPaymentMethod';
static const password = 'password';
static const customerName = 'customerName';
static const createRequest = 'createRequest';
static const requestType = 'requestType';
static const brand = 'brand';
static const year = 'year';
static const price = 'price';
static const shippingDelivery = 'shippingDelivery';
static const offers = 'offers';
static const noOffersShow = 'noOffersShow';
static const allDocumentMandatoryDealershipProvider = 'allDocumentMandatoryDealershipProvider';
static const documentsUploadedSuccessfully = 'documentsUploadedSuccessfully';
static const help = 'help';
static const faqs = 'faqs';
static const contactUs = 'contactUs';
static const termPrivacy = 'termPrivacy';
static const inviteFriends = 'inviteFriends';
static const more = 'more';
static const language = 'language';
static const mySubscription = 'mySubscription';
static const subscriptions = 'subscriptions';
static const defineLicenses = 'defineLicenses';
static const logOut = 'logOut';
static const customer = 'customer';
static const amountVAR = 'amountVAR';
static const accept = 'accept';
static const nowVar = 'nowVar';
static const whendoyouWanttoUpgrade = 'whendoyouWanttoUpgrade';
static const yourSubscriptionUpgradeAffectingFrom = 'yourSubscriptionUpgradeAffectingFrom';
static const upgradeAfterCurrentExpiry = 'upgradeAfterCurrentExpiry';
static const yourSubscriptionUpgradeCurrentSubscriptionAffectingFrom = 'yourSubscriptionUpgradeCurrentSubscriptionAffectingFrom';
static const upgradeVar = 'upgradeVar';
static const whendoyouWanttoRenew = 'whendoyouWanttoRenew';
static const renewVar = 'renewVar';
static const requestAlreadyInProgress = 'requestAlreadyInProgress';
static const acceptOfferConfirmation = 'acceptOfferConfirmation';
static const acceptOfferConfirmationMessage = 'acceptOfferConfirmationMessage';
static const noUpcomingAppointments = 'noUpcomingAppointments';
static const addNewAppointment = 'addNewAppointment';
static const myNearbyBranches = 'myNearbyBranches';
static const myRecentBranches = 'myRecentBranches';
static const favoriteList = 'favoriteList';
static const noReviewsBranch = 'noReviewsBranch';
static const readLess = 'readLess';
static const readMoreReviews = 'readMoreReviews';
static const noProvidersInFav = 'noProvidersInFav';
static const providerHasNoBranches = 'providerHasNoBranches';
static const totalBranches = 'totalBranches';
static const memberSince = 'memberSince';
static const reserved = 'reserved';
static const delete = 'delete';
static const deleteBranchConfirmation = 'deleteBranchConfirmation';
static const deleteBranchConfirmationMessage = 'deleteBranchConfirmationMessage';
static const reviewAndPayment = 'reviewAndPayment';
static const awaitingPaymentFromCustomer = 'awaitingPaymentFromCustomer';
static const awaitingResponseFromProvider = 'awaitingResponseFromProvider';
static const offerNoLongerAvailable = 'offerNoLongerAvailable';
static const doYouWantToCompleteThisDeal = 'doYouWantToCompleteThisDeal';
static const customerCompletingDealMeansThat = 'customerCompletingDealMeansThat';
static const providerCompletingDealMeansThat = 'providerCompletingDealMeansThat';
static const offerSummary = 'offerSummary';
static const personalInformation = 'personalInformation';
static const name = 'name';
static const phone = 'phone';
static const serviceInformation = 'serviceInformation';
static const locationInformation = 'locationInformation';
static const additionalAddressDetails = 'additionalAddressDetails';
static const serviceName = 'serviceName';
static const serviceCategory = 'serviceCategory';
static const offerPrice = 'offerPrice';
static const totalPrice = 'totalPrice';
static const providerName = 'providerName';
static const createdOn = 'createdOn';
static const manufacturedBy = 'manufacturedBy';
static const manufacturedOn = 'manufacturedOn';
static const shipping = 'shipping';
static const delivery = 'delivery';
static const selectDeliveryType = 'selectDeliveryType';
static const shippingManagementInstruction = 'shippingManagementInstruction';
static const withdrawOffer = 'withdrawOffer';
static const manufacturer = 'manufacturer';
static const priceRange = 'priceRange';
static const cancelOffer = 'cancelOffer';
static const pleaseSpecify = 'pleaseSpecify';
static const customerNotResponding = 'customerNotResponding';
static const cancelRequestPrompt = 'cancelRequestPrompt';
static const requestPermanentlyCancelled = 'requestPermanentlyCancelled';
static const awaitingResponseFromCustomer = 'awaitingResponseFromCustomer';
static const acknowledgePaymentToMowater = 'acknowledgePaymentToMowater';
static const requestsFilter = 'requestsFilter';
static const searchByCondition = 'searchByCondition';
static const selectCondition = 'selectCondition';
static const searchByRequestType = 'searchByRequestType';
static const searchByCustomerName = 'searchByCustomerName';
static const searchByProviderName = 'searchByProviderName';
static const searchByRequestStatus = 'searchByRequestStatus';
static const selectRequestType = 'selectRequestType';
static const selectRequestStatus = 'selectRequestStatus';
static const searchByRequestedDate = 'searchByRequestedDate';
static const selectDate = 'selectDate';
static const searchByVehicleModel = 'searchByVehicleModel';
static const customerCarePrompt = 'customerCarePrompt';
static const callNow = 'callNow';
static const condition = 'condition';
static const servicesNotAvailableHomeLocation = 'servicesNotAvailableHomeLocation';
static const additionalChargesNotice = 'additionalChargesNotice';
static const selectServiceLocation = 'selectServiceLocation';
static const apptOn = 'apptOn';
static const merged = 'merged';
static const date = 'date';
static const selectAll = 'selectAll';
static const unselectAll = 'unselectAll';
static const copySelectedServices = 'copySelectedServices';
static const pictures = 'pictures';
static const noChatMessage = 'noChatMessage';
static const shippingManagement = 'shippingManagement';
static const appointmentCancelled = 'appointmentCancelled';
static const appointmentsPerSlot = 'appointmentsPerSlot';
static const createSchedule = 'createSchedule';
static const addItems = 'addItems';
static const itemName = 'itemName';
static const itemDescription = 'itemDescription';
static const itemPrice = 'itemPrice';
static const bookAppointmentForServices = 'bookAppointmentForServices';
static const showServiceAvailability = 'showServiceAvailability';
static const bookAppointmentAtLocation = 'bookAppointmentAtLocation';
static const appointmentBookingOption = 'appointmentBookingOption';
static const workshopAvailabilityOption = 'workshopAvailabilityOption';
static const appointmentLocationOption = 'appointmentLocationOption';
static const deleteScheduleConfirmation = 'deleteScheduleConfirmation';
static const deleteScheduleAdConfirmationMessage = 'deleteScheduleAdConfirmationMessage';
static const branchSchedules = 'branchSchedules';
static const noSchedulesFound = 'noSchedulesFound';
static const inviteFriendsBySMS = 'inviteFriendsBySMS';
static const inviteFriendsByWhatsApp = 'inviteFriendsByWhatsApp';
static const inviteFriendsByEmail = 'inviteFriendsByEmail';
static const noFAQsToShow = 'noFAQsToShow';
static const appInfo = 'appInfo';
static const users = 'users';
static const adsRemaining = 'adsRemaining';
static const attachPDF = 'attachPDF';
static const noItemsToShow = 'noItemsToShow';
static const serviceItem = 'serviceItem';
static const createdBy = 'createdBy';
static const createGroupServices = 'createGroupServices';
static const logoutConfirmation = 'logoutConfirmation';
static const logoutConfirmationMessage = 'logoutConfirmationMessage';
static const addToFavoritesOn = 'addToFavoritesOn';
static const subscriptionDate = 'subscriptionDate';
static const expiresOn = 'expiresOn';
static const expired = 'expired';
static const upgradeBranches = 'upgradeBranches';
static const upgradeAds = 'upgradeAds';
static const upgradeSubUsers = 'upgradeSubUsers';
static const explore = 'explore';
static const manageRequests = 'manageRequests';
static const serviceNotAvailableAtHomeLocation = 'serviceNotAvailableAtHomeLocation';
static const wantToRescheduleAppointment = 'wantToRescheduleAppointment';
static const noNeedForService = 'noNeedForService';
static const testTheService = 'testTheService';
static const companyLocation = 'companyLocation';
static const customerLocation = 'customerLocation';
static const deliveryAvailable = 'deliveryAvailable';
static const viewed = 'viewed';
static const updateUserDetails = 'updateUserDetails';
static const enterNewFirstName = 'enterNewFirstName';
static const enterNewLastName = 'enterNewLastName';
static const userDetailsUpdated = 'userDetailsUpdated';
static const itemNoLongerAvailable = 'itemNoLongerAvailable';
static const reactivateAd = 'reactivateAd';
static const dealOutsideApp = 'dealOutsideApp';
static const noAgreementCustomer = 'noAgreementCustomer';
static const dealNotCompleted = 'dealNotCompleted';
static const changedDesireToSell = 'changedDesireToSell';
static const vehicleDealOutsideApp = 'vehicleDealOutsideApp';
static const markAdAsSoldDesc = 'markAdAsSoldDesc';
static const ownerInformation = 'ownerInformation';
static const acceptedRequests = 'acceptedRequests';
static const specialRequestChat = 'specialRequestChat';
static const companyName = 'companyName';
static const noAvailableItems = 'noAvailableItems';
static const serviceDeliveryType = 'serviceDeliveryType';
static const noImagesToShow = 'noImagesToShow';
static const updateGroupServices = 'updateGroupServices';
static const addCommentsHere = 'addCommentsHere';
static const waitForBranchVerification = 'waitForBranchVerification';
static const reportComplaint = 'reportComplaint';
static const descriptionCannotBeEmpty = 'descriptionCannotBeEmpty';
static const adMarkedAsSold = 'adMarkedAsSold';
static const chargesAndServiceRangeGreaterThanZero = 'chargesAndServiceRangeGreaterThanZero';
static const cannotSelectAllDaysAsOff = 'cannotSelectAllDaysAsOff';
static const endDateAfterStartDate = 'endDateAfterStartDate';
static const pleaseEnterStartDateFirst = 'pleaseEnterStartDateFirst';
static const endTimeAfterStartTime = 'endTimeAfterStartTime';
static const pickedLocationNotice = 'pickedLocationNotice';
static const serviceNotProvided = 'serviceNotProvided';
static const pleaseSelectService = 'pleaseSelectService';
static const operationalIssue = 'operationalIssue';
static const materialIssue = 'materialIssue';
static const selectReasonBeforeCancel = 'selectReasonBeforeCancel';
static const blockedByAdmin = 'blockedByAdmin';
static const active = 'active';
static const paymentType = 'paymentType';
static const searchByCreatedDate = 'searchByCreatedDate';
static const cityNameMandatory = 'cityNameMandatory';
static const genderMandatory = 'genderMandatory';
static const updateCity = 'updateCity';
static const userGender = 'userGender';
static const userMale = 'userMale';
static const userFemale = 'userFemale';
static const maxFileSelection = 'maxFileSelection';
static const maxFileSize = 'maxFileSize';
static const onlyJPGandPNG = 'onlyJPGandPNG';
static const expiryDate = 'expiryDate';
static const dealCompleted = 'dealCompleted';
static const theDealNotCompleted = 'theDealNotCompleted';
static const cancelRequest = 'cancelRequest';
static const highPrice = 'highPrice';
static const offerNotMatched = 'offerNotMatched';
static const offerRejected = 'offerRejected';
static const offerAccepted = 'offerAccepted';
static const you = 'you';
static const youCannotDeactivateThisServiceRightNow = 'youCannotDeactivateThisServiceRightNow';
static const done = 'done';
static const notice = 'notice';
static const serviceDeactivated = 'serviceDeactivated';
static const totalNumberOfServices = 'totalNumberOfServices';
static const noAvailableOfficesInCity = 'noAvailableOfficesInCity';
static const searchByItem = 'searchByItem';
static const selectBranchToCopyServices = 'selectBranchToCopyServices';
static const tapToSeeItems = 'tapToSeeItems';
static const tapToSelect = 'tapToSelect';
static const noteCopyItemsExplanation = 'noteCopyItemsExplanation';
static const requestCreatedOn = 'requestCreatedOn';
static const online = 'online';
static const deliveryStatus = 'deliveryStatus';
static const markAsCompleted = 'markAsCompleted';
static const searchByServiceDelivery = 'searchByServiceDelivery';
static const searchByMobileNumber = 'searchByMobileNumber';
static const enterMobileNumber = 'enterMobileNumber';
static const enterCustomerName = 'enterCustomerName';
static const tapToView = 'tapToView';
static const noServicesAvailableToCopy = 'noServicesAvailableToCopy';
static const copySelectedItems = 'copySelectedItems';
static const noOfInvites = 'noOfInvites';
static const noSpecialServicesAvailable = 'noSpecialServicesAvailable';
static const customService = 'customService';
static const selectServiceDetails = 'selectServiceDetails';
static const addServiceDetails = 'addServiceDetails';
static const companyNameMandatory = 'companyNameMandatory';
static const connectionProblem = 'connectionProblem';
static const pleaseCheckConnection = 'pleaseCheckConnection';
static const ok = 'ok';
static const continueAsGuest = 'continueAsGuest';
static const loginToViewAppointments = 'loginToViewAppointments';
static const itemType = 'itemType';
static const upgradeSubscription = 'upgradeSubscription';
static const searchByAdID = 'searchByAdID';
static const enterAdID = 'enterAdID';
static const searchByDemandPrice = 'searchByDemandPrice';
static const enterStartPrice = 'enterStartPrice';
static const enterEndPrice = 'enterEndPrice';
static const searchByVehicleType = 'searchByVehicleType';
static const selectVehicleType = 'selectVehicleType';
static const specialRequestsChats = 'specialRequestsChats';
static const selectDeliveryOption = 'selectDeliveryOption';
static const deliveryOptions = 'deliveryOptions';
static const selfPickup = 'selfPickup';
static const updateYourLocationInfo = 'updateYourLocationInfo';
static const initiateSelfPickup = 'initiateSelfPickup';
static const selfPickupStatus = 'selfPickupStatus';
static const myDraftAds = 'myDraftAds';
static const scheduleDeletedSuccessfully = 'scheduleDeletedSuccessfully';
static const addValidAddress = 'addValidAddress';
} }

@ -1,13 +1,134 @@
import 'dart:io';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:mc_common_app/theme/app_theme.dart';
import 'package:logger/logger.dart'; import 'package:logger/logger.dart';
import 'package:provider/provider.dart';
import 'package:provider/single_child_widget.dart';
import 'package:sizer/sizer.dart';
//testing push
final navigatorKey = GlobalKey<NavigatorState>();
Logger logger = Logger(
printer: PrettyPrinter(
lineLength: 0,
),
);
Logger logger = Logger(printer: PrettyPrinter(printEmojis: false, colors: true, printTime: false)); class MyHttpOverrides extends HttpOverrides {
@override
HttpClient createHttpClient(SecurityContext? context) {
return super.createHttpClient(context)..badCertificateCallback = (X509Certificate cert, String host, int port) => true;
}
}
bool disableThingsForQA = true; Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
// Language Tile in Settings await EasyLocalization.ensureInitialized();
// AppState().setPostParamsInitConfig();
HttpOverrides.global = MyHttpOverrides();
runApp(
EasyLocalization(
supportedLocales: const <Locale>[
Locale('en', 'US'),
Locale('ar', 'SA'),
],
path: 'resources',
// assetLoader: const CodegenLoader(),
child: MultiProvider(
providers: const <SingleChildWidget>[
// ChangeNotifierProvider<LoginProviderModel>(
// create: (_) => LoginProviderModel(),
// ),
],
child: const MyApp(),
),
),
);
}
// todo terminal command to genertate translation files // todo terminal command to genertate translation files
// flutter pub run easy_localization:generate --source-dir ./assets/langs // flutter pub run easy_localization:generate -S resources -f keys -O lib/generated -o locale_keys.g.dart
// todo terminal command to genertate translation keys
// flutter pub run easy_localization:generate --source-dir ./assets/langs -f keys -o locale_keys.g.dart class MyApp extends StatelessWidget {
// command to generate languages data from json const MyApp({super.key});
@override
Widget build(BuildContext context) {
return LayoutBuilder(builder: (context, constraints) {
return Sizer(
builder: (
BuildContext context,
Orientation orientation,
DeviceType deviceType,
) {
List<LocalizationsDelegate<dynamic>> delegates = context.localizationDelegates;
// AppState().setPostParamsModel(
// PostParamsModel(
// languageID: EasyLocalization.of(context)?.locale.languageCode == "ar" ? 1 : 2,
// ),
// );
return MaterialApp(
// key: navigatorKey,
navigatorKey: navigatorKey,
theme: AppTheme.getTheme(
isArabic: EasyLocalization.of(context)?.locale.languageCode == "ar",
),
debugShowCheckedModeBanner: false,
localizationsDelegates: delegates,
supportedLocales: context.supportedLocales,
locale: context.locale,
);
},
);
});
}
}
// class MyApp extends StatelessWidget {
// MyApp({super.key}) {
// AppDependencies.addDependencies();
// AppState = Injector.appInstance.get<AppState>();
// // AppState.setPostParamsInitConfig();
// }
//
// @override
// Widget build(BuildContext context) {
// return LayoutBuilder(builder: (context, constraints) {
// return Sizer(
// builder: (
// BuildContext context,
// Orientation orientation,
// DeviceType deviceType,
// ) {
// SizeConfig().init(constraints, orientation);
// List<LocalizationsDelegate<dynamic>> delegates = context.localizationDelegates;
// // AppState().setPostParamsModel(
// // PostParamsModel(
// // languageID: EasyLocalization.of(context)?.locale.languageCode == "ar" ? 1 : 2,
// // ),
// // );
// return MaterialApp(
// // key: navigatorKey,
// navigatorKey: navigatorKey,
// theme: AppTheme.getTheme(
// EasyLocalization.of(context)?.locale.languageCode == "ar",
// ),
// debugShowCheckedModeBanner: false,
// localizationsDelegates: delegates,
// supportedLocales: context.supportedLocales,
// locale: context.locale,
// initialRoute: AppRoutes.initialPage,
// routes: AppRoutes.routes,
// );
// },
// );
// });
// }
// }

@ -2,7 +2,6 @@ import 'dart:math';
import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/models/advertisment_models/special_service_model.dart'; import 'package:mc_common_app/models/advertisment_models/special_service_model.dart';
import 'package:mc_common_app/models/chat_models/chat_message_model.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
class AdDetailsModel { class AdDetailsModel {
@ -32,14 +31,11 @@ class AdDetailsModel {
String? qrCodePath; String? qrCodePath;
bool? isCustomerAcknowledged; bool? isCustomerAcknowledged;
int? createdByRole; int? createdByRole;
AdCreationStepsEnum? adCreationStepsEnum;
int? totalViews; int? totalViews;
String? createdOn; String? createdOn;
double? priceExcludingDiscount; double? priceExcludingDiscount;
double? reservePrice; double? reservePrice;
bool? isMCHandled; bool? isMCHandled;
bool? showContactDetail;
bool? isOnWhatsApp;
String? modifiedOn; String? modifiedOn;
AdPostStatus? adPostStatus; AdPostStatus? adPostStatus;
AdReserveStatus? adReserveStatus; AdReserveStatus? adReserveStatus;
@ -47,16 +43,10 @@ class AdDetailsModel {
bool? isReservedByMe; bool? isReservedByMe;
String? phoneNo; String? phoneNo;
String? whatsAppNo; String? whatsAppNo;
String? adOwnerName;
String? adOwnerEmail;
AdOwnerDetails? adOwnerDetails;
String? warrantyYears;
CreatedByRoleEnum? createdByRoleEnum; CreatedByRoleEnum? createdByRoleEnum;
List<ChatMessageModel>? adMessages;
int? totalItemsCount;
AdDetailsModel({ AdDetailsModel(
this.id, {this.id,
this.startdate, this.startdate,
this.enddate, this.enddate,
this.vehicle, this.vehicle,
@ -81,29 +71,19 @@ class AdDetailsModel {
this.qrCodePath, this.qrCodePath,
this.isCustomerAcknowledged, this.isCustomerAcknowledged,
this.createdByRole, this.createdByRole,
this.adCreationStepsEnum,
this.totalViews, this.totalViews,
this.createdOn, this.createdOn,
this.priceExcludingDiscount, this.priceExcludingDiscount,
this.reservePrice, this.reservePrice,
this.isMCHandled, this.isMCHandled,
this.showContactDetail,
this.isOnWhatsApp,
this.adPostStatus, this.adPostStatus,
this.adReserveStatus, this.adReserveStatus,
this.isMyAd, this.isMyAd,
this.isReservedByMe, this.isReservedByMe,
this.phoneNo, this.phoneNo,
this.whatsAppNo, this.whatsAppNo,
this.adOwnerName,
this.adOwnerEmail,
this.adOwnerDetails,
this.warrantyYears,
this.createdByRoleEnum, this.createdByRoleEnum,
this.modifiedOn, this.modifiedOn});
this.adMessages,
this.totalItemsCount,
});
int getRandomValue({required int min, required int max}) { int getRandomValue({required int min, required int max}) {
Random random = Random(); Random random = Random();
@ -111,7 +91,7 @@ class AdDetailsModel {
return randomNumber; return randomNumber;
} }
AdDetailsModel.fromJson(Map<String, dynamic> json, bool isMyAds, int totalItems) { AdDetailsModel.fromJson(Map<String, dynamic> json, bool isMyAds) {
id = json['id']; id = json['id'];
startdate = json['startdate']; startdate = json['startdate'];
enddate = json['enddate']; enddate = json['enddate'];
@ -137,31 +117,26 @@ class AdDetailsModel {
taxPrice = json['taxPrice']; taxPrice = json['taxPrice'];
totalPrice = json['totalPrice']; totalPrice = json['totalPrice'];
userID = json['userID']; userID = json['userID'];
vehiclePostingID = (json['vehiclePostingID'] == null || json['vehiclePostingID'] == 0) ? json['id'] : 0; vehiclePostingID = json['vehiclePostingID'];
qrCodePath = json['qrCodePath']; qrCodePath = json['qrCodePath'];
isCustomerAcknowledged = json['isCustomerAcknowledged']; isCustomerAcknowledged = json['isCustomerAcknowledged'];
createdByRole = json['createdByRole']; createdByRole = json['createdByRole'];
adCreationStepsEnum = json['stepNo'] != null ? (json['stepNo'] as int).toAdCreationStepsEnumFromInt() : AdCreationStepsEnum.vehicleDetails;
totalViews = json['totalViews']; totalViews = json['totalViews'];
createdOn = json['createdOn']; createdOn = json['createdOn'];
priceExcludingDiscount = json['priceExcludingDiscount']; priceExcludingDiscount = json['priceExcludingDiscount'];
reservePrice = json['reservePrice']; reservePrice = json['reservePrice'];
isMCHandled = json['isMCHandled']; isMCHandled = json['isMCHandled'];
showContactDetail = json['showContactDetail'];
isOnWhatsApp = json['isOnWhatsApp'];
modifiedOn = json['modifiedOn']; modifiedOn = json['modifiedOn'];
phoneNo = json['vehicle'] != null ? (json['vehicle']['mobileNo'] ?? "") : ""; whatsAppNo = json['phoneNo'];
whatsAppNo = json['vehicle'] != null ? (json['vehicle']['whatsAppNo'] ?? "") : ""; modifiedOn = json['whatsAppNo'];
warrantyYears = json['vehicle'] != null ? (json['vehicle']['warantyYears'] != null ? ((json['vehicle']['warantyYears']).toString()) : "") : ""; // adPostStatus = AdPostStatus.expired;
adOwnerName = json['vehicle'] != null ? (json['vehicle']['adOwnerName'] ?? "") : ""; adPostStatus = (json['statusID'] as int).toAdPostEnum();
adOwnerEmail = json['vehicle'] != null ? (json['vehicle']['adOwnerEmail'] ?? "") : ""; //TODO: THIS ID SHOULD BE UPDATED!
adOwnerDetails = (json['vehicle'] != null && json['vehicle']['aDsUser'] != null) ? (AdOwnerDetails.fromJson(json['vehicle']['aDsUser'])) : null;
adPostStatus = ((json['statusID'] ?? 1) as int).toAdPostEnum();
adReserveStatus = AdReserveStatus.defaultStatus; adReserveStatus = AdReserveStatus.defaultStatus;
// createdByRoleEnum = CreatedByRoleEnum.admin;
createdByRoleEnum = (json['createdByRole'] as int).toCreatedByRoleEnum(); createdByRoleEnum = (json['createdByRole'] as int).toCreatedByRoleEnum();
isMyAd = isMyAds; isMyAd = isMyAds;
isReservedByMe = false; isReservedByMe = false;
totalItemsCount = totalItems;
} }
} }
@ -173,7 +148,7 @@ class Vehicle {
bool? isActive; bool? isActive;
bool? isFinanceAvailable; bool? isFinanceAvailable;
int? status; int? status;
String? statusText; String? statustext;
Category? category; Category? category;
Category? color; Category? color;
Condition? condition; Condition? condition;
@ -182,8 +157,8 @@ class Vehicle {
ModelYear? modelyear; ModelYear? modelyear;
Condition? sellertype; Condition? sellertype;
Condition? transmission; Condition? transmission;
AdsDuration? duration; Duration? duration;
List<GenericImageModel>? image; List<AdImage>? image;
List<DamageReport>? damagereport; List<DamageReport>? damagereport;
String? vehicleDescription; String? vehicleDescription;
String? vehicleTitle; String? vehicleTitle;
@ -200,7 +175,7 @@ class Vehicle {
this.isActive, this.isActive,
this.isFinanceAvailable, this.isFinanceAvailable,
this.status, this.status,
this.statusText, this.statustext,
this.category, this.category,
this.color, this.color,
this.condition, this.condition,
@ -227,7 +202,7 @@ class Vehicle {
isActive = json['isActive']; isActive = json['isActive'];
isFinanceAvailable = json['isFinanceAvailable']; isFinanceAvailable = json['isFinanceAvailable'];
status = json['status']; status = json['status'];
statusText = json['statustext']; statustext = json['statustext'];
category = json['category'] != null ? Category.fromJson(json['category']) : null; category = json['category'] != null ? Category.fromJson(json['category']) : null;
color = json['color'] != null ? Category.fromJson(json['color']) : null; color = json['color'] != null ? Category.fromJson(json['color']) : null;
condition = json['condition'] != null ? Condition.fromJson(json['condition']) : null; condition = json['condition'] != null ? Condition.fromJson(json['condition']) : null;
@ -236,11 +211,11 @@ class Vehicle {
modelyear = json['modelyear'] != null ? ModelYear.fromJson(json['modelyear']) : null; modelyear = json['modelyear'] != null ? ModelYear.fromJson(json['modelyear']) : null;
sellertype = json['sellertype'] != null ? Condition.fromJson(json['sellertype']) : null; sellertype = json['sellertype'] != null ? Condition.fromJson(json['sellertype']) : null;
transmission = json['transmission'] != null ? Condition.fromJson(json['transmission']) : null; transmission = json['transmission'] != null ? Condition.fromJson(json['transmission']) : null;
duration = json['duration'] != null ? AdsDuration.fromJson(json['duration']) : null; duration = json['duration'] != null ? Duration.fromJson(json['duration']) : null;
if (json['image'] != null) { if (json['image'] != null) {
image = <GenericImageModel>[]; image = <AdImage>[];
json['image'].forEach((v) { json['image'].forEach((v) {
image!.add(GenericImageModel.fromJson(v)); image!.add(AdImage.fromJson(v));
}); });
} }
if (json['damagereport'] != null) { if (json['damagereport'] != null) {
@ -285,15 +260,13 @@ class Category {
class Condition { class Condition {
int? id; int? id;
int? vehicleBrandID;
String? label; String? label;
String? labelN; String? labelN;
Condition({this.id, this.label, this.labelN, this.vehicleBrandID}); Condition({this.id, this.label, this.labelN});
Condition.fromJson(Map<String, dynamic> json) { Condition.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
vehicleBrandID = json['vehicleBrandID'];
label = json['label']; label = json['label'];
labelN = json['labelN']; labelN = json['labelN'];
} }
@ -351,16 +324,16 @@ class ModelYear {
} }
} }
class AdsDuration { class Duration {
int? id; int? id;
String? label; String? label;
int? days; int? days;
double? price; double? price;
ModelYear? country; ModelYear? country;
AdsDuration({this.id, this.label, this.days, this.price, this.country}); Duration({this.id, this.label, this.days, this.price, this.country});
AdsDuration.fromJson(Map<String, dynamic> json) { Duration.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
label = json['label']; label = json['label'];
days = json['days']; days = json['days'];
@ -381,15 +354,15 @@ class AdsDuration {
} }
} }
class GenericImageModel { class AdImage {
int? id; int? id;
String? imageName; String? imageName;
String? imageUrl; String? imageUrl;
bool? isActive; bool? isActive;
GenericImageModel({this.id, this.imageName, this.imageUrl, this.isActive}); AdImage({this.id, this.imageName, this.imageUrl, this.isActive});
GenericImageModel.fromJson(Map<String, dynamic> json) { AdImage.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
imageName = json['imageName']; imageName = json['imageName'];
imageUrl = json['imageUrl']; imageUrl = json['imageUrl'];
@ -423,7 +396,6 @@ class DamageReport {
isActive = json['isActive']; isActive = json['isActive'];
vehicleDamagePartID = json['vehicleDamagePartID']; vehicleDamagePartID = json['vehicleDamagePartID'];
partName = json['partName']; partName = json['partName'];
comment = json['comment'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -437,28 +409,3 @@ class DamageReport {
return data; return data;
} }
} }
class AdOwnerDetails {
String? name;
String? email;
String? mobileNo;
String? profilePic;
AdOwnerDetails({this.name, this.email, this.mobileNo, this.profilePic});
AdOwnerDetails.fromJson(Map<String, dynamic> json) {
name = json['name'];
email = json['email'];
mobileNo = json['mobileNo'];
profilePic = json['profilePic'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['name'] = name;
data['email'] = email;
data['mobileNo'] = mobileNo;
data['profilePic'] = profilePic;
return data;
}
}

@ -28,17 +28,3 @@ class AdsBankDetailsModel {
return data; return data;
} }
} }
class AdExtensionOrderResponseModel {
final int adsID;
final bool isPaymentRequired;
AdExtensionOrderResponseModel({required this.adsID, required this.isPaymentRequired});
factory AdExtensionOrderResponseModel.fromJson(Map<String, dynamic> json) {
return AdExtensionOrderResponseModel(
adsID: json['adsID'] as int,
isPaymentRequired: json['isPaymentRequired'] as bool,
);
}
}

@ -6,28 +6,15 @@ class AdsDurationModel {
int? countryID; int? countryID;
bool? isActive; bool? isActive;
String? countryName; String? countryName;
String? currency;
double? discountValue;
double? discountPercent;
double? priceAfterDiscount;
int? roleID;
bool? isSelected;
AdsDurationModel({ AdsDurationModel(
this.id, {this.id,
this.name, this.name,
this.days, this.days,
this.price, this.price,
this.countryID, this.countryID,
this.isActive, this.isActive,
this.countryName, this.countryName});
this.currency,
this.discountValue,
this.discountPercent,
this.priceAfterDiscount,
this.roleID,
this.isSelected,
});
AdsDurationModel.fromJson(Map<String, dynamic> json) { AdsDurationModel.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
@ -37,12 +24,6 @@ class AdsDurationModel {
countryID = json['countryID']; countryID = json['countryID'];
isActive = json['isActive']; isActive = json['isActive'];
countryName = json['countryName']; countryName = json['countryName'];
currency = json['currency'];
discountValue = json['discountValue'];
discountPercent = json['discountPercent'];
priceAfterDiscount = json['priceAfterDiscount'];
roleID = json['roleID'];
isSelected = false;
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -54,11 +35,6 @@ class AdsDurationModel {
data['countryID'] = countryID; data['countryID'] = countryID;
data['isActive'] = isActive; data['isActive'] = isActive;
data['countryName'] = countryName; data['countryName'] = countryName;
data['currency'] = currency;
data['discountValue'] = discountValue;
data['discountPercent'] = discountPercent;
data['priceAfterDiscount'] = priceAfterDiscount;
data['roleID'] = roleID;
return data; return data;
} }
} }

@ -1,7 +0,0 @@
class PdfReceiptModel {
int? id;
String? pdfName;
String? pdfString;
PdfReceiptModel({this.id, this.pdfName, this.pdfString});
}

@ -81,7 +81,7 @@ class Office {
String? officeAreaName; String? officeAreaName;
String? officeAreaNameN; String? officeAreaNameN;
int? cityID; int? cityID;
CitySSModel? city; String? city;
int? specialServiceID; int? specialServiceID;
Office({this.id, this.officeAreaName, this.officeAreaNameN, this.cityID, this.city, this.specialServiceID}); Office({this.id, this.officeAreaName, this.officeAreaNameN, this.cityID, this.city, this.specialServiceID});
@ -91,41 +91,11 @@ class Office {
officeAreaName = json['officeAreaName']; officeAreaName = json['officeAreaName'];
officeAreaNameN = json['officeAreaNameN']; officeAreaNameN = json['officeAreaNameN'];
cityID = json['cityID']; cityID = json['cityID'];
if (json['city'] != null) { city = json['city'];
city = json['city'] != null ? CitySSModel.fromJson(json['city']) : null;
}
specialServiceID = json['specialServiceID']; specialServiceID = json['specialServiceID'];
} }
} }
class CitySSModel {
int? id;
String? cityName;
String? cityNameN;
int? countryID;
String? country;
bool? isActive;
int? createdBy;
String? createdOn;
String? modifiedBy;
String? modifiedOn;
CitySSModel({this.id, this.cityName, this.cityNameN, this.countryID, this.country, this.isActive, this.createdBy, this.createdOn, this.modifiedBy, this.modifiedOn});
CitySSModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
cityName = json['cityName'];
cityNameN = json['cityNameN'];
countryID = json['countryID'];
country = json['country'];
isActive = json['isActive'];
createdBy = json['createdBy'];
createdOn = json['createdOn'];
modifiedBy = json['modifiedBy'];
modifiedOn = json['modifiedOn'];
}
}
class SpecialServiceModelForAds { class SpecialServiceModelForAds {
int? adsID; int? adsID;
int? specialServiceID; int? specialServiceID;
@ -156,6 +126,7 @@ class SpecialServiceModelForAds {
appointmentStatusEnum = (json['appointmentStatus'] as int).toAppointmentStatusEnum(); appointmentStatusEnum = (json['appointmentStatus'] as int).toAppointmentStatusEnum();
appointmentDate = json['appointmentDate']; appointmentDate = json['appointmentDate'];
appointmentStatusId = json['appointmentStatus']; appointmentStatusId = json['appointmentStatus'];
} }
@override @override

@ -12,7 +12,7 @@ class SSPhotoOfficeScheduleModel {
String? areaName; String? areaName;
String? latitude; String? latitude;
String? longitude; String? longitude;
double? distanceKM; int? distanceKM;
int? totalItemsCount; int? totalItemsCount;
List<PhotoOfficeScheduleSlots>? photoOfficeScheduleSlots; List<PhotoOfficeScheduleSlots>? photoOfficeScheduleSlots;
List<CustomTimeDateSlotModel>? customTimeDateSlotList; List<CustomTimeDateSlotModel>? customTimeDateSlotList;

@ -33,6 +33,7 @@ class VehicleDetailsModel {
}); });
VehicleDetailsModel.fromJson(Map<String, dynamic> json) { VehicleDetailsModel.fromJson(Map<String, dynamic> json) {
log("jsonJee: $json");
vehicleBrands = List.generate((json['vehiclebrands']['data']).length, (index) => VehicleBrandsModel.fromJson(json['vehiclebrands']['data'][index])); vehicleBrands = List.generate((json['vehiclebrands']['data']).length, (index) => VehicleBrandsModel.fromJson(json['vehiclebrands']['data'][index]));
vehicleCategories = List.generate((json['vehiclecategories']['data']).length, (index) => VehicleCategoryModel.fromJson(json['vehiclecategories']['data'][index])); vehicleCategories = List.generate((json['vehiclecategories']['data']).length, (index) => VehicleCategoryModel.fromJson(json['vehiclecategories']['data'][index]));
vehicleColors = List.generate((json['vehiclecolors']['data']).length, (index) => VehicleColorModel.fromJson(json['vehiclecolors']['data'][index])); vehicleColors = List.generate((json['vehiclecolors']['data']).length, (index) => VehicleColorModel.fromJson(json['vehiclecolors']['data'][index]));
@ -59,7 +60,6 @@ class VehicleTypeModel {
String? vehicleTypeNameN; String? vehicleTypeNameN;
bool? isActive; bool? isActive;
VehicleType? vehicleTypeEnum; VehicleType? vehicleTypeEnum;
bool? isSelected;
VehicleTypeModel({ VehicleTypeModel({
this.id, this.id,
@ -67,7 +67,6 @@ class VehicleTypeModel {
this.vehicleTypeNameN, this.vehicleTypeNameN,
this.isActive, this.isActive,
this.vehicleTypeEnum = VehicleType.car, this.vehicleTypeEnum = VehicleType.car,
this.isSelected,
}); });
VehicleTypeModel.fromJson(Map<String, dynamic> json) { VehicleTypeModel.fromJson(Map<String, dynamic> json) {
@ -76,7 +75,6 @@ class VehicleTypeModel {
vehicleTypeNameN = json['vehicleTypeNameN']; vehicleTypeNameN = json['vehicleTypeNameN'];
isActive = json['isActive']; isActive = json['isActive'];
vehicleTypeEnum = (json['id'] as int).toVehicleTypeEnum(); vehicleTypeEnum = (json['id'] as int).toVehicleTypeEnum();
isSelected = false;
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -451,11 +449,9 @@ class VehicleBrandsModel {
String? vehicleTypeVal; String? vehicleTypeVal;
String? vehicleBrandDescription; String? vehicleBrandDescription;
String? vehicleBrandDescriptionN; String? vehicleBrandDescriptionN;
String? imageUrl;
bool? isActive; bool? isActive;
bool? isSelected;
VehicleBrandsModel({this.id, this.vehicleType, this.vehicleTypeVal, this.vehicleBrandDescription, this.vehicleBrandDescriptionN, this.isActive, this.isSelected, this.imageUrl}); VehicleBrandsModel({this.id, this.vehicleType, this.vehicleTypeVal, this.vehicleBrandDescription, this.vehicleBrandDescriptionN, this.isActive});
VehicleBrandsModel.fromJson(Map<String, dynamic> json) { VehicleBrandsModel.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
@ -464,8 +460,6 @@ class VehicleBrandsModel {
vehicleBrandDescription = json['vehicleBrand_Description']; vehicleBrandDescription = json['vehicleBrand_Description'];
vehicleBrandDescriptionN = json['vehicleBrand_DescriptionN']; vehicleBrandDescriptionN = json['vehicleBrand_DescriptionN'];
isActive = json['isActive']; isActive = json['isActive'];
imageUrl = json['imageUrl'];
isSelected = false;
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -475,7 +469,6 @@ class VehicleBrandsModel {
data['vehicleTypeVal'] = vehicleTypeVal; data['vehicleTypeVal'] = vehicleTypeVal;
data['vehicleBrand_Description'] = vehicleBrandDescription; data['vehicleBrand_Description'] = vehicleBrandDescription;
data['vehicleBrand_DescriptionN'] = vehicleBrandDescriptionN; data['vehicleBrand_DescriptionN'] = vehicleBrandDescriptionN;
data['imageUrl'] = imageUrl;
data['isActive'] = isActive; data['isActive'] = isActive;
return data; return data;
} }

@ -1,45 +0,0 @@
class AppointmentBasicDetailsModel {
int? serviceSlotID;
String? slotDate;
String? startTime;
String? endTime;
int? appointmentStatusID;
String? appointmentStatusText;
int? serviceProviderID;
int? customerID;
AppointmentBasicDetailsModel({
this.serviceSlotID,
this.slotDate,
this.startTime,
this.endTime,
this.appointmentStatusID,
this.appointmentStatusText,
this.serviceProviderID,
this.customerID,
});
AppointmentBasicDetailsModel.fromJson(Map<String, dynamic> json) {
serviceSlotID = json['serviceSlotID'];
slotDate = json['slotDate'];
startTime = json['startTime'];
endTime = json['endTime'];
appointmentStatusID = json['appointmentStatusID'];
appointmentStatusText = json['appointmentStatusText'];
serviceProviderID = json['serviceProviderID'];
customerID = json['customerID'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['serviceSlotID'] = serviceSlotID;
data['slotDate'] = slotDate;
data['startTime'] = startTime;
data['endTime'] = endTime;
data['appointmentStatusID'] = appointmentStatusID;
data['appointmentStatusText'] = appointmentStatusText;
data['serviceProviderID'] = serviceProviderID;
data['customerID'] = customerID;
return data;
}
}

@ -16,19 +16,12 @@ class AppointmentListModel {
String? customerName; String? customerName;
String? customerMobileNum; String? customerMobileNum;
int? appointmentType; int? appointmentType;
AppointmentTypeEnum? appointmentTypeEnum;
String? providerName; String? providerName;
String? duration; String? duration;
String? appointmentDate; String? appointmentDate;
String? appointmentCreatedOn;
String? paymentType;
String? appointmentAddress;
String? appointmentLatitude;
String? appointmentLongitude;
String? branchName; String? branchName;
int? branchId; int? branchId;
int? servicePaymentStatus; int? servicePaymentStatus;
bool? isPaymentRequiredAtBooking;
double? totalAmount; double? totalAmount;
double? remainingAmount; double? remainingAmount;
bool? isSelected; bool? isSelected;
@ -39,8 +32,7 @@ class AppointmentListModel {
List<AppointmentListModel>? customerAppointmentList; List<AppointmentListModel>? customerAppointmentList;
List<MergeAppointmentList>? mergeAppointmentList; List<MergeAppointmentList>? mergeAppointmentList;
AppointmentListModel({ AppointmentListModel({this.id,
this.id,
this.serviceSlotID, this.serviceSlotID,
this.appointmentStatusID, this.appointmentStatusID,
this.appointmentStatusText, this.appointmentStatusText,
@ -53,29 +45,21 @@ class AppointmentListModel {
this.customerName, this.customerName,
this.customerMobileNum, this.customerMobileNum,
this.appointmentType, this.appointmentType,
this.appointmentTypeEnum,
this.providerName, this.providerName,
this.paymentType, this.duration,
this.appointmentAddress,
this.appointmentLatitude,
this.appointmentLongitude,
this.branchName, this.branchName,
this.branchId, this.branchId,
this.servicePaymentStatus, this.servicePaymentStatus,
this.isPaymentRequiredAtBooking,
this.totalAmount, this.totalAmount,
this.remainingAmount, this.remainingAmount,
this.isSelected, this.isSelected,
this.appointmentDate, this.appointmentDate,
this.appointmentCreatedOn,
this.appointmentServicesList, this.appointmentServicesList,
this.customerAppointmentList, this.customerAppointmentList, this.mergeAppointmentList,});
this.mergeAppointmentList,
});
@override @override
String toString() { String toString() {
return 'AppointmentListModel{id: $id, serviceSlotID: $serviceSlotID, appointmentStatusID: $appointmentStatusID, appointmentStatusText: $appointmentStatusText, serviceProviderID: $serviceProviderID, customerID: $customerID, isActive: $isActive, isPaymentRequired: $isPaymentRequired, paymentStatus: $paymentStatus, paymentStatusText: $paymentStatusText, customerName: $customerName, providerName: $providerName, duration: $duration, appointmentDate: $appointmentDate,appointmentCreatedOn: $appointmentCreatedOn, appointmentStatusEnum: $appointmentStatusEnum, appointmentServicesList: $appointmentServicesList}'; return 'AppointmentListModel{id: $id, serviceSlotID: $serviceSlotID, appointmentStatusID: $appointmentStatusID, appointmentStatusText: $appointmentStatusText, serviceProviderID: $serviceProviderID, customerID: $customerID, isActive: $isActive, isPaymentRequired: $isPaymentRequired, paymentStatus: $paymentStatus, paymentStatusText: $paymentStatusText, customerName: $customerName, providerName: $providerName, duration: $duration, appointmentDate: $appointmentDate, appointmentStatusEnum: $appointmentStatusEnum, appointmentServicesList: $appointmentServicesList}';
} }
AppointmentListModel.fromJson(Map<String, dynamic> json) { AppointmentListModel.fromJson(Map<String, dynamic> json) {
@ -92,31 +76,31 @@ class AppointmentListModel {
customerName = json['customerName']; customerName = json['customerName'];
customerMobileNum = json['customerMobile']; customerMobileNum = json['customerMobile'];
appointmentType = json['appointmentType']; appointmentType = json['appointmentType'];
appointmentTypeEnum = json['appointmentType'] != null ? (json['appointmentType'] as int).toAppointmentTypeEnum() : AppointmentTypeEnum.workshop;
providerName = json['providerName']; providerName = json['providerName'];
duration = json['duration']; duration = json['duration'];
appointmentDate = json['appointmentDate']; appointmentDate = json['appointmentDate'];
appointmentCreatedOn = json['createdOn'];
paymentType = json['paymentType'];
appointmentAddress = json['address'] ?? "";
appointmentLatitude = json['branchLatitude'];
appointmentLongitude = json['branchLongitude'];
branchName = json['branchName']; branchName = json['branchName'];
branchId = json['branchID']; branchId = json['branchID'];
servicePaymentStatus = json['servicePaymentStatus']; servicePaymentStatus = json['servicePaymentStatus'];
isPaymentRequiredAtBooking = json['isPaymentRequiredAtBooking'];
totalAmount = json['amountTotal']; totalAmount = json['amountTotal'];
remainingAmount = json['amountRem']; remainingAmount = json['amountRem'];
isSelected = false; isSelected = false;
appointmentStatusEnum = (json['appointmentStatusID'] as int).toAppointmentStatusEnum(); appointmentStatusEnum =
appointmentPaymentStatusEnum = (json['servicePaymentStatus'] as int).toAppointmentPaymentStatusEnum(); (json['appointmentStatusID'] as int).toAppointmentStatusEnum();
appointmentPaymentStatusEnum =
(json['servicePaymentStatus'] as int).toAppointmentPaymentStatusEnum();
if (json['serviceList'] != null) { if (json['serviceList'] != null) {
appointmentServicesList = <ServiceModel>[]; appointmentServicesList = <ServiceModel>[];
json['serviceList'].forEach((v) { json['serviceList'].forEach((v) {
appointmentServicesList!.add(ServiceModel.fromJson(v, isForAppointment: true)); appointmentServicesList!
.add(ServiceModel.fromJson(v, isForAppointment: true));
}); });
} }
mergeAppointmentList = json["mergeAppointmentList"] == null ? [] : List<MergeAppointmentList>.from(json["mergeAppointmentList"]!.map((x) => MergeAppointmentList.fromJson(x))); mergeAppointmentList =
json["mergeAppointmentList"] == null ? [] : List<MergeAppointmentList>.from(
json["mergeAppointmentList"]!.map((x) =>
MergeAppointmentList.fromJson(x)));
} }
} }
@ -126,7 +110,10 @@ class ServiceAppointmentItems {
String? serviceItemName; String? serviceItemName;
String? serviceItemDescription; String? serviceItemDescription;
ServiceAppointmentItems({this.id, this.serviceItemID, this.serviceItemName, this.serviceItemDescription}); ServiceAppointmentItems({this.id,
this.serviceItemID,
this.serviceItemName,
this.serviceItemDescription});
ServiceAppointmentItems.fromJson(Map<String, dynamic> json) { ServiceAppointmentItems.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
@ -151,9 +138,12 @@ class CustomerData {
final String customerName; final String customerName;
final List<AppointmentListModel> appointmentList; final List<AppointmentListModel> appointmentList;
CustomerData({required this.customerID, required this.customerName, required this.appointmentList}); CustomerData({required this.customerID,
required this.customerName,
required this.appointmentList});
} }
class MergeAppointmentList { class MergeAppointmentList {
int? id; int? id;
int? mergeAppointmentId; int? mergeAppointmentId;
@ -165,13 +155,15 @@ class MergeAppointmentList {
this.serviceAppointmentId, this.serviceAppointmentId,
}); });
factory MergeAppointmentList.fromJson(Map<String, dynamic> json) => MergeAppointmentList( factory MergeAppointmentList.fromJson(Map<String, dynamic> json) =>
MergeAppointmentList(
id: json["id"], id: json["id"],
mergeAppointmentId: json["mergeAppointmentID"], mergeAppointmentId: json["mergeAppointmentID"],
serviceAppointmentId: json["serviceAppointmentID"], serviceAppointmentId: json["serviceAppointmentID"],
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() =>
{
"id": id, "id": id,
"mergeAppointmentID": mergeAppointmentId, "mergeAppointmentID": mergeAppointmentId,
"serviceAppointmentID": serviceAppointmentId, "serviceAppointmentID": serviceAppointmentId,

@ -58,7 +58,6 @@ class ScheduleData {
final List<ServiceModel>? scheduleServices; final List<ServiceModel>? scheduleServices;
final List<ServiceModel>? selectedServices; final List<ServiceModel>? selectedServices;
String branchId; String branchId;
int? appointmentType;
ScheduleData({ ScheduleData({
this.id, this.id,
@ -78,7 +77,6 @@ class ScheduleData {
this.scheduleServices, this.scheduleServices,
this.selectedServices, this.selectedServices,
this.branchId = "", this.branchId = "",
this.appointmentType
}); });
factory ScheduleData.fromJson(Map<String, dynamic> json) => factory ScheduleData.fromJson(Map<String, dynamic> json) =>
@ -96,7 +94,6 @@ class ScheduleData {
address: json["address"], address: json["address"],
latitude: json["latitude"], latitude: json["latitude"],
longitude: json["longitude"], longitude: json["longitude"],
appointmentType: json["appointmentType"] == null ? null : json["appointmentType"],
weeklyOffDays: json["weeklyOffDays"] == null ? [] : List<WeeklyOffDay>.from(json["weeklyOffDays"]!.map((x) => WeeklyOffDay.fromJson(x))), weeklyOffDays: json["weeklyOffDays"] == null ? [] : List<WeeklyOffDay>.from(json["weeklyOffDays"]!.map((x) => WeeklyOffDay.fromJson(x))),
scheduleServices: json["scheduleServices"] == null ? [] : List<ServiceModel>.from(json["scheduleServices"]!.map((x) => ServiceModel.fromJson(x))), scheduleServices: json["scheduleServices"] == null ? [] : List<ServiceModel>.from(json["scheduleServices"]!.map((x) => ServiceModel.fromJson(x))),
selectedServices: [], selectedServices: [],
@ -117,7 +114,6 @@ class ScheduleData {
"address": address, "address": address,
"latitude": latitude, "latitude": latitude,
"longitude": longitude, "longitude": longitude,
"appointmentType": appointmentType,
"scheduleServices": scheduleServices == null ? [] : List<dynamic>.from(scheduleServices!.map((x) => x.toJson())), "scheduleServices": scheduleServices == null ? [] : List<dynamic>.from(scheduleServices!.map((x) => x.toJson())),
}; };

@ -1,7 +1,6 @@
import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/models/services_models/service_model.dart'; import 'package:mc_common_app/models/services_models/service_model.dart';
import 'package:mc_common_app/models/general_models/widgets_models.dart'; import 'package:mc_common_app/models/general_models/widgets_models.dart';
import 'package:mc_common_app/utils/enums.dart';
class CustomTimeDateSlotModel { class CustomTimeDateSlotModel {
TimeSlotModel? date; TimeSlotModel? date;
@ -11,7 +10,6 @@ class CustomTimeDateSlotModel {
} }
class ServiceAppointmentScheduleModel { class ServiceAppointmentScheduleModel {
String? scheduleName;
List<ServiceSlotList>? serviceSlotList; List<ServiceSlotList>? serviceSlotList;
List<ServiceModel>? servicesListInAppointment; List<ServiceModel>? servicesListInAppointment;
int? selectedDateIndex; int? selectedDateIndex;
@ -21,12 +19,8 @@ class ServiceAppointmentScheduleModel {
double? amountTotal; double? amountTotal;
double? amountRem; double? amountRem;
int? appointmentType; int? appointmentType;
double? totalLocationCharges;
CurrentLocationInfoModel? locationInfoModel;
AppointmentTypeEnum? appointmentTypeEnum;
ServiceAppointmentScheduleModel({ ServiceAppointmentScheduleModel({
this.scheduleName,
this.serviceSlotList, this.serviceSlotList,
this.servicesListInAppointment, this.servicesListInAppointment,
this.selectedDateIndex, this.selectedDateIndex,
@ -36,9 +30,6 @@ class ServiceAppointmentScheduleModel {
this.amountTotal, this.amountTotal,
this.amountRem, this.amountRem,
this.appointmentType, this.appointmentType,
this.totalLocationCharges,
this.locationInfoModel,
this.appointmentTypeEnum,
}); });
List<CustomTimeDateSlotModel> getFormattedDateTimeSlotPackage() { List<CustomTimeDateSlotModel> getFormattedDateTimeSlotPackage() {
@ -78,7 +69,7 @@ class ServiceAppointmentScheduleModel {
.toList(); .toList();
List<TimeSlotModel> slotTime = []; List<TimeSlotModel> slotTime = [];
for (var element in slotTimeData) { for (var element in slotTimeData) {
slotTime.add(TimeSlotModel(isSelected: false, slotId: element.id!, slot: element.startTime ?? "", date: element.slotDate!.toFormattedDateWithoutTime())); slotTime.add(TimeSlotModel(isSelected: false, slotId: element.id!, slot: element.startTime ?? "", date: element.slotDate!.toFormattedDateWithoutTime() ?? ""));
} }
return slotTime; return slotTime;
@ -96,8 +87,6 @@ class ServiceAppointmentScheduleModel {
} }
ServiceAppointmentScheduleModel.fromJson(Map<String, dynamic> json, {bool isForAppointment = false}) { ServiceAppointmentScheduleModel.fromJson(Map<String, dynamic> json, {bool isForAppointment = false}) {
scheduleName = json['scheduleName'];
if (json['serviceSlotList'] != null) { if (json['serviceSlotList'] != null) {
serviceSlotList = <ServiceSlotList>[]; serviceSlotList = <ServiceSlotList>[];
json['serviceSlotList'].forEach((v) { json['serviceSlotList'].forEach((v) {
@ -116,9 +105,6 @@ class ServiceAppointmentScheduleModel {
amountTotal = json['amountTotal']; amountTotal = json['amountTotal'];
amountRem = json['amountRem']; amountRem = json['amountRem'];
appointmentType = json['appointmentType']; appointmentType = json['appointmentType'];
totalLocationCharges = 0.0;
locationInfoModel = CurrentLocationInfoModel(address: "", latitude: 0.0, longitude: 0.0, distanceToBranch: 0.0, homeChargesInCurrentService: 0.0);
appointmentTypeEnum = json['appointmentType'] != null ? (json['appointmentType'] as int).toAppointmentTypeEnum() : AppointmentTypeEnum.workshop;
} }
} }

@ -1,21 +0,0 @@
class BuyersChatForAdsModel {
int? id;
String? buyerUserID;
String? buyerName;
int? adsID;
int? unReadMessagesCount;
String? lastMessage;
String? lastMessageDateTime;
BuyersChatForAdsModel({this.id, this.buyerUserID, this.buyerName, this.adsID});
BuyersChatForAdsModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
buyerUserID = json['buyerUserID'];
buyerName = json['buyerName'];
adsID = json['adsID'];
unReadMessagesCount = json['unReadCount'];
lastMessage = json['lastMessage'];
lastMessageDateTime = json['lastMessageDateTime'];
}
}

@ -17,7 +17,6 @@ class ChatMessageModel {
int? serviceProviderID; int? serviceProviderID;
int? offerStatus; int? offerStatus;
ReqOffer? reqOffer; ReqOffer? reqOffer;
List<MessageImageModel>? messageImages;
bool? isRead; bool? isRead;
String? readOn; String? readOn;
bool? isMyMessage; bool? isMyMessage;
@ -35,7 +34,6 @@ class ChatMessageModel {
this.serviceProviderID, this.serviceProviderID,
this.offerStatus, this.offerStatus,
this.reqOffer, this.reqOffer,
this.messageImages,
this.isRead, this.isRead,
this.readOn, this.readOn,
this.isMyMessage, this.isMyMessage,
@ -43,10 +41,10 @@ class ChatMessageModel {
@override @override
String toString() { String toString() {
return 'ChatMessageModel{id: $id, senderUserID: $senderUserID, senderName: $senderName, messageType: $messageType, chatMessageTypeEnum: $chatMessageTypeEnum, chatText: $chatText, requestID: $requestID, reqOfferID: $reqOfferID, serviceProviderID: $serviceProviderID, offerStatus: $offerStatus, reqOffer: ${reqOffer.toString()}, isRead: $isRead, readOn: $readOn, isMyMessage: $isMyMessage}'; return 'ChatMessageModel{id: $id, senderUserID: $senderUserID, senderName: $senderName, messageType: $messageType, chatMessageTypeEnum: $chatMessageTypeEnum, chatText: $chatText, requestID: $requestID, reqOfferID: $reqOfferID, serviceProviderID: $serviceProviderID, offerStatus: $offerStatus, reqOffer: $reqOffer, isRead: $isRead, readOn: $readOn, isMyMessage: $isMyMessage}';
} }
ChatMessageModel.fromJson(Map<String, dynamic> json, {bool isFromNetwork = true, bool isForReqOfferImagesURLs = false}) { ChatMessageModel.fromJson(Map<String, dynamic> json) {
final myUserId = AppState().getUser.data!.userInfo!.userId.toString().toUpperCase(); final myUserId = AppState().getUser.data!.userInfo!.userId.toString().toUpperCase();
id = json['id']; id = json['id'];
senderUserID = json['senderUserID']; senderUserID = json['senderUserID'];
@ -59,13 +57,7 @@ class ChatMessageModel {
reqOfferID = json['reqOfferID']; reqOfferID = json['reqOfferID'];
serviceProviderID = json['serviceProviderID']; serviceProviderID = json['serviceProviderID'];
offerStatus = json['offerStatus']; offerStatus = json['offerStatus'];
reqOffer = json['reqOffer'] != null ? ReqOffer.fromJson(json['reqOffer'], isFromNetwork, isForReqOfferImagesURLs) : null; reqOffer = json['reqOffer'] != null ? ReqOffer.fromJson(json['reqOffer']) : null;
if (json['reqOfferImages'] != null) {
messageImages = <MessageImageModel>[];
json['reqOfferImages'].forEach((v) {
messageImages!.add(MessageImageModel.fromJson(v, isFromNetwork));
});
}
isRead = json['isRead']; isRead = json['isRead'];
readOn = json['readOn']; readOn = json['readOn'];
isMyMessage = (json['senderUserID']).toString().toUpperCase() == myUserId; isMyMessage = (json['senderUserID']).toString().toUpperCase() == myUserId;
@ -79,15 +71,8 @@ class ReqOffer {
int? offerStatus; int? offerStatus;
String? offerStatusText; String? offerStatusText;
String? comment; String? comment;
String? serviceItemName;
String? manufacturedByName;
String? manufacturedOn;
double? price; double? price;
bool? isDeliveryAvailable;
RequestDeliveryOptionEnum? requestDeliveryOption;
RequestsTypeEnum? requestsTypeEnum;
RequestOfferStatusEnum? requestOfferStatusEnum; RequestOfferStatusEnum? requestOfferStatusEnum;
List<MessageImageModel>? reqOfferImages;
ReqOffer({ ReqOffer({
this.id, this.id,
@ -96,52 +81,19 @@ class ReqOffer {
this.offerStatus, this.offerStatus,
this.offerStatusText, this.offerStatusText,
this.comment, this.comment,
this.serviceItemName,
this.manufacturedByName,
this.manufacturedOn,
this.price, this.price,
this.isDeliveryAvailable,
this.requestDeliveryOption,
this.requestOfferStatusEnum, this.requestOfferStatusEnum,
this.requestsTypeEnum,
this.reqOfferImages,
}); });
ReqOffer.fromJson(Map<String, dynamic> json, bool isFromNetwork, bool isForReqOfferImagesURLs) { ReqOffer.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
requestID = json['requestID']; requestID = json['requestID'];
serviceProviderID = json['serviceProviderID']; serviceProviderID = json['serviceProviderID'];
offerStatus = json['offerStatus']; offerStatus = json['offerStatus'];
offerStatusText = json['offerStatusText']; offerStatusText = json['offerStatusText'];
comment = json['comment']; comment = json['comment'];
serviceItemName = json['serviceItem'];
manufacturedByName = json['offeredItemCreatedByName'].toString();
manufacturedOn = json['offeredItemCreatedOn'] ?? json["createdOn"];
price = json['price']; price = json['price'];
isDeliveryAvailable = json['isDeliveryAvailable'];
requestDeliveryOption = ((json['offerDeliveryOption'] ?? 0) as int).toRequestDeliveryOptionEnum();
requestOfferStatusEnum = ((json['offerStatus']) as int).toRequestOfferStatusEnum(); requestOfferStatusEnum = ((json['offerStatus']) as int).toRequestOfferStatusEnum();
requestsTypeEnum = RequestsTypeEnum.serviceRequest;
// if (isForReqOfferImagesURLs) {
// if (json['reqOfferImagesURLs'] != null) {
// reqOfferImages = <MessageImageModel>[];
// json['reqOfferImagesURLs'].forEach((v) {
// reqOfferImages!.add(MessageImageModel.fromJson(v, isFromNetwork));
// });
// }
// } else {
if (json['reqOfferImages'] != null) {
reqOfferImages = <MessageImageModel>[];
json['reqOfferImages'].forEach((v) {
reqOfferImages!.add(MessageImageModel.fromJson(v, isFromNetwork));
});
}
// }
}
@override
String toString() {
return 'ReqOffer{id: $id, requestID: $requestID, serviceProviderID: $serviceProviderID, offerStatus: $offerStatus, offerStatusText: $offerStatusText, comment: $comment, serviceItemName: $serviceItemName, manufacturedById: $manufacturedByName, manufacturedOn: $manufacturedOn, price: $price, requestsTypeEnum: $requestsTypeEnum, requestOfferStatusEnum: $requestOfferStatusEnum}';
} }
} }
@ -152,43 +104,3 @@ class OfferRequestCommentModel {
OfferRequestCommentModel({this.index, this.title, this.isSelected}); OfferRequestCommentModel({this.index, this.title, this.isSelected});
} }
class MessageImageModel {
int? id;
String? imageUrl;
String? imageStr;
String? imagePath;
bool? isFromNetwork;
int? reqOfferID;
MessageImageModel({
this.id,
this.imageUrl,
this.imageStr,
this.imagePath,
this.reqOfferID,
this.isFromNetwork = false,
});
MessageImageModel.fromJson(Map<String, dynamic> json, bool fromNetwork) {
id = json['id'];
imageUrl = json['imageUrl'];
imageStr = json['imageStr'];
imagePath = json[''];
reqOfferID = json['reqOfferID'];
isFromNetwork = fromNetwork;
}
Map<String, dynamic> toJson() {
return {
'id': id,
'imageStr': imageStr,
'reqOfferID': reqOfferID, // We don't include 'isFromNetwork' since it's set manually when parsing JSON
};
}
@override
String toString() {
return 'MessageImageModel{id: $id, imageUrl: $imageUrl, imageStr: $imageStr, imagePath: $imagePath, isFromNetwork: $isFromNetwork, reqOfferID: $reqOfferID}';
}
}

@ -2,7 +2,6 @@ class EnumsModel {
int id; int id;
int enumTypeId; int enumTypeId;
String enumValueStr; String enumValueStr;
String enumValueStrDes;
int enumValue; int enumValue;
bool isActive; bool isActive;
@ -10,7 +9,6 @@ class EnumsModel {
required this.id, required this.id,
required this.enumTypeId, required this.enumTypeId,
required this.enumValueStr, required this.enumValueStr,
required this.enumValueStrDes,
required this.enumValue, required this.enumValue,
required this.isActive, required this.isActive,
}); });
@ -19,13 +17,20 @@ class EnumsModel {
id: json["id"], id: json["id"],
enumTypeId: json["enumTypeID"], enumTypeId: json["enumTypeID"],
enumValueStr: json["enumValueStr"], enumValueStr: json["enumValueStr"],
enumValueStrDes: json["enumValueStrDes"] ?? json["enumValueStr"],
enumValue: json["enumValue"], enumValue: json["enumValue"],
isActive: json["isActive"], isActive: json["isActive"],
); );
@override @override
String toString() { String toString() {
return 'EnumsModel{id: $id, enumTypeId: $enumTypeId, enumValueStr: $enumValueStr,enumValueStrDes: $enumValueStrDes, enumValue: $enumValue, isActive: $isActive}'; return 'EnumsModel{id: $id, enumTypeId: $enumTypeId, enumValueStr: $enumValueStr, enumValue: $enumValue, isActive: $isActive}';
} }
Map<String, dynamic> toJson() => {
"id": id,
"enumTypeID": enumTypeId,
"enumValueStr": enumValueStr,
"enumValue": enumValue,
"isActive": isActive,
};
} }

@ -1,7 +1,3 @@
import 'dart:io';
import 'package:mc_common_app/utils/utils.dart';
class GenericRespModel { class GenericRespModel {
GenericRespModel({ GenericRespModel({
this.data, this.data,
@ -15,19 +11,12 @@ class GenericRespModel {
int? totalItemsCount; int? totalItemsCount;
String? message; String? message;
factory GenericRespModel.fromJson(Map<String, dynamic> json) { factory GenericRespModel.fromJson(Map<String, dynamic> json) => GenericRespModel(
if (json.containsKey('StatusMessage')) {
if ((json['StatusMessage'] as String).contains('Internal server error')) {
Utils.showToast("${json['StatusMessage']}");
}
}
return GenericRespModel(
data: json["data"], data: json["data"],
messageStatus: json["messageStatus"], messageStatus: json["messageStatus"],
totalItemsCount: json["totalItemsCount"], totalItemsCount: json["totalItemsCount"],
message: json["message"], message: json["message"],
); );
}
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"data": data, "data": data,
@ -47,6 +36,17 @@ class AdsCreationPayloadModel {
ads = json['ads'] != null ? Ads.fromJson(json['ads']) : null; ads = json['ads'] != null ? Ads.fromJson(json['ads']) : null;
vehiclePosting = json['vehiclePosting'] != null ? VehiclePosting.fromJson(json['vehiclePosting']) : null; vehiclePosting = json['vehiclePosting'] != null ? VehiclePosting.fromJson(json['vehiclePosting']) : null;
} }
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
if (ads != null) {
data['ads'] = ads!.toJson();
}
if (vehiclePosting != null) {
data['vehiclePosting'] = vehiclePosting!.toJson();
}
return data;
}
} }
class Ads { class Ads {
@ -56,19 +56,8 @@ class Ads {
int? countryId; int? countryId;
List<int>? specialServiceIDs; List<int>? specialServiceIDs;
bool? isMCHandled; bool? isMCHandled;
bool? showContactDetail;
bool? isOnWhatsApp; Ads({this.id, this.adsDurationID, this.startDate, this.countryId, this.specialServiceIDs, this.isMCHandled});
Ads({
this.id,
this.adsDurationID,
this.startDate,
this.countryId,
this.specialServiceIDs,
this.isMCHandled,
this.showContactDetail,
this.isOnWhatsApp,
});
Ads.fromJson(Map<String, dynamic> json) { Ads.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
@ -77,8 +66,6 @@ class Ads {
countryId = json['countryId']; countryId = json['countryId'];
specialServiceIDs = json['specialServiceIDs'].cast<int>(); specialServiceIDs = json['specialServiceIDs'].cast<int>();
isMCHandled = json['isMCHandled']; isMCHandled = json['isMCHandled'];
showContactDetail = json['showContactDetail'];
isOnWhatsApp = json['isOnWhatsApp'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -125,8 +112,8 @@ class VehiclePosting {
String? phoneNo; String? phoneNo;
String? whatsAppNo; String? whatsAppNo;
VehiclePosting({ VehiclePosting(
this.id, {this.id,
this.userID, this.userID,
this.vehicleType, this.vehicleType,
this.vehicleModelID, this.vehicleModelID,
@ -150,8 +137,7 @@ class VehiclePosting {
this.phoneNo, this.phoneNo,
this.whatsAppNo, this.whatsAppNo,
this.vehiclePostingImages, this.vehiclePostingImages,
this.vehiclePostingDamageParts, this.vehiclePostingDamageParts});
});
VehiclePosting.fromJson(Map<String, dynamic> json) { VehiclePosting.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
@ -191,6 +177,40 @@ class VehiclePosting {
} }
} }
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['userID'] = userID;
data['vehicleType'] = vehicleType;
data['vehicleModelID'] = vehicleModelID;
data['vehicleModelYearID'] = vehicleModelYearID;
data['vehicleColorID'] = vehicleColorID;
data['vehicleCategoryID'] = vehicleCategoryID;
data['vehicleConditionID'] = vehicleConditionID;
data['vehicleMileageID'] = vehicleMileageID;
data['vehicleTransmissionID'] = vehicleTransmissionID;
data['vehicleSellerTypeID'] = vehicleSellerTypeID;
data['cityID'] = cityID;
data['price'] = price;
data['vehicleVIN'] = vehicleVIN;
data['vehicleDescription'] = vehicleDescription;
data['vehicleTitle'] = vehicleTitle;
data['vehicleDescriptionN'] = vehicleDescriptionN;
data['isFinanceAvailable'] = isFinanceAvailable;
data['warantyYears'] = warantyYears;
data['demandAmount'] = demandAmount;
data['adStatus'] = adStatus;
data['phoneNo'] = phoneNo;
data['whatsAppNo'] = whatsAppNo;
if (vehiclePostingImages != null) {
data['vehiclePostingImages'] = vehiclePostingImages!.map((v) => v.toJson()).toList();
}
if (vehiclePostingDamageParts != null) {
data['vehiclePostingDamageParts'] = vehiclePostingDamageParts!.map((v) => v.toJson()).toList();
}
return data;
}
@override @override
String toString() { String toString() {
return 'VehiclePosting{id: $id, userID: $userID, vehicleType: $vehicleType, vehicleModelID: $vehicleModelID, vehicleModelYearID: $vehicleModelYearID, vehicleColorID: $vehicleColorID, vehicleCategoryID: $vehicleCategoryID, vehicleConditionID: $vehicleConditionID, vehicleMileageID: $vehicleMileageID, vehicleTransmissionID: $vehicleTransmissionID, vehicleSellerTypeID: $vehicleSellerTypeID, cityID: $cityID, price: $price, vehicleVIN: $vehicleVIN, vehicleDescription: $vehicleDescription, vehicleTitle: $vehicleTitle, vehicleDescriptionN: $vehicleDescriptionN, isFinanceAvailable: $isFinanceAvailable, warantyYears: $warantyYears, demandAmount: $demandAmount, adStatus: $adStatus, vehiclePostingImages: $vehiclePostingImages, vehiclePostingDamageParts: $vehiclePostingDamageParts, phoneNo: $phoneNo, whatsAppNo: $whatsAppNo}'; return 'VehiclePosting{id: $id, userID: $userID, vehicleType: $vehicleType, vehicleModelID: $vehicleModelID, vehicleModelYearID: $vehicleModelYearID, vehicleColorID: $vehicleColorID, vehicleCategoryID: $vehicleCategoryID, vehicleConditionID: $vehicleConditionID, vehicleMileageID: $vehicleMileageID, vehicleTransmissionID: $vehicleTransmissionID, vehicleSellerTypeID: $vehicleSellerTypeID, cityID: $cityID, price: $price, vehicleVIN: $vehicleVIN, vehicleDescription: $vehicleDescription, vehicleTitle: $vehicleTitle, vehicleDescriptionN: $vehicleDescriptionN, isFinanceAvailable: $isFinanceAvailable, warantyYears: $warantyYears, demandAmount: $demandAmount, adStatus: $adStatus, vehiclePostingImages: $vehiclePostingImages, vehiclePostingDamageParts: $vehiclePostingDamageParts, phoneNo: $phoneNo, whatsAppNo: $whatsAppNo}';
@ -199,18 +219,16 @@ class VehiclePosting {
class VehiclePostingImages { class VehiclePostingImages {
int? id; int? id;
File? file;
String? imageName; String? imageName;
String? imageUrl; String? imageUrl;
String? imageStr; String? imageStr;
int? vehiclePostingID; int? vehiclePostingID;
String? vehiclePosting; String? vehiclePosting;
VehiclePostingImages({this.id, this.file, this.imageName, this.imageUrl, this.imageStr, this.vehiclePostingID, this.vehiclePosting}); VehiclePostingImages({this.id, this.imageName, this.imageUrl, this.imageStr, this.vehiclePostingID, this.vehiclePosting});
VehiclePostingImages.fromJson(Map<String, dynamic> json) { VehiclePostingImages.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
file = null;
imageName = json['imageName']; imageName = json['imageName'];
imageUrl = json['imageUrl']; imageUrl = json['imageUrl'];
imageStr = json['imageStr']; imageStr = json['imageStr'];
@ -229,10 +247,10 @@ class VehiclePostingImages {
return data; return data;
} }
@override // @override
String toString() { // String toString() {
return 'VehiclePostingImages{id: $id, imageName: $imageName, imageUrl: $imageUrl, imageStr: "", vehiclePostingID: $vehiclePostingID, vehiclePosting: $vehiclePosting}'; // return 'VehiclePostingImages{id: $id, imageName: $imageName, imageUrl: $imageUrl, imageStr: $imageStr, vehiclePostingID: $vehiclePostingID, vehiclePosting: $vehiclePosting}';
} // }
} }
class RequestPostingImages { class RequestPostingImages {
@ -250,9 +268,9 @@ class RequestPostingImages {
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{}; final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id ?? 0; data['id'] = id;
data['requestImage'] = requestImage; data['requestImage'] = requestImage;
data['requestID'] = requestID ?? 0; data['requestID'] = requestID;
return data; return data;
} }
@ -264,21 +282,17 @@ class RequestPostingImages {
class VehiclePostingDamageParts { class VehiclePostingDamageParts {
int? id; int? id;
File? file;
String? comment; String? comment;
String? imageUrl;
String? vehicleImageBase64; String? vehicleImageBase64;
int? vehicleDamagePartID; int? vehicleDamagePartID;
int? vehiclePostingID; int? vehiclePostingID;
bool? isActive; bool? isActive;
VehiclePostingDamageParts({this.id, this.file, this.comment, this.imageUrl, this.vehicleImageBase64, this.vehicleDamagePartID, this.vehiclePostingID, this.isActive}); VehiclePostingDamageParts({this.id, this.comment, this.vehicleImageBase64, this.vehicleDamagePartID, this.vehiclePostingID, this.isActive});
VehiclePostingDamageParts.fromJson(Map<String, dynamic> json) { VehiclePostingDamageParts.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
file = null;
comment = json['comment']; comment = json['comment'];
imageUrl = json['imageUrl'];
vehicleImageBase64 = json['vehicleImageBase64']; vehicleImageBase64 = json['vehicleImageBase64'];
vehicleDamagePartID = json['vehicleDamagePartID']; vehicleDamagePartID = json['vehicleDamagePartID'];
vehiclePostingID = json['vehiclePostingID']; vehiclePostingID = json['vehiclePostingID'];
@ -289,7 +303,6 @@ class VehiclePostingDamageParts {
final Map<String, dynamic> data = <String, dynamic>{}; final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id; data['id'] = id;
data['comment'] = comment; data['comment'] = comment;
data['imageUrl'] = imageUrl;
data['vehicleImageBase64'] = vehicleImageBase64; data['vehicleImageBase64'] = vehicleImageBase64;
data['vehicleDamagePartID'] = vehicleDamagePartID; data['vehicleDamagePartID'] = vehicleDamagePartID;
data['vehiclePostingID'] = vehiclePostingID; data['vehiclePostingID'] = vehiclePostingID;
@ -297,24 +310,8 @@ class VehiclePostingDamageParts {
return data; return data;
} }
@override // @override
String toString() { // String toString() {
return 'VehiclePostingDamageParts{id: $id, comment: $comment, vehicleImageBase64: $vehicleImageBase64, vehicleDamagePartID: $vehicleDamagePartID, vehiclePostingID: $vehiclePostingID, isActive: $isActive}'; // return 'VehiclePostingDamageParts{id: $id, comment: $comment, vehicleImageBase64: $vehicleImageBase64, vehicleDamagePartID: $vehicleDamagePartID, vehiclePostingID: $vehiclePostingID, isActive: $isActive}';
} // }
}
class BranchPostingImages {
int? id;
String? imageName;
String? imageUrl;
String? imageStr;
BranchPostingImages({this.id, this.imageName, this.imageUrl, this.imageStr});
BranchPostingImages.fromJson(Map<String, dynamic> json) {
id = json['id'];
imageName = json['imageName'];
imageUrl = json['imageUrl'];
imageStr = json['imageStr'];
}
} }

@ -0,0 +1,36 @@
// To parse this JSON data, do
//
// final mResponse = mResponseFromJson(jsonString);
import 'dart:convert';
MResponse mResponseFromJson(String str) => MResponse.fromJson(json.decode(str));
String mResponseToJson(MResponse data) => json.encode(data.toJson());
class MResponse {
MResponse({
this.totalItemsCount,
this.messageStatus,
this.message,
this.data,
});
int? totalItemsCount;
int? messageStatus;
String? message;
dynamic data;
factory MResponse.fromJson(Map<String, dynamic> json) => MResponse(
totalItemsCount: json["totalItemsCount"],
messageStatus: json["messageStatus"],
message: json["message"],
data: json["data"],
);
Map<String, dynamic> toJson() => {
"totalItemsCount": totalItemsCount,
"messageStatus": messageStatus,
"message": message,
};
}

@ -1,10 +1,9 @@
class FilterListModel { class FilterListModel {
String title; String title;
String iconUrl;
int id; int id;
bool isSelected; bool isSelected;
FilterListModel({required this.id, required this.isSelected, this.iconUrl = "", required this.title}); FilterListModel({required this.id, required this.isSelected, required this.title});
} }
class SelectionModel { class SelectionModel {
@ -12,20 +11,13 @@ class SelectionModel {
int selectedId; int selectedId;
String errorValue; String errorValue;
String itemPrice; String itemPrice;
String currency;
SelectionModel({ SelectionModel({
this.selectedOption = "", this.selectedOption = "",
this.errorValue = "", this.errorValue = "",
this.selectedId = 0, this.selectedId = 0,
this.itemPrice = "", this.itemPrice = "",
this.currency = "",
}); });
@override
String toString() {
return 'SelectionModel{selectedOption: $selectedOption, selectedId: $selectedId, errorValue: $errorValue, itemPrice: $itemPrice, currency: $currency}';
}
} }
class TimeSlotModel { class TimeSlotModel {

@ -1,44 +1,35 @@
import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart';
import 'package:mc_common_app/models/provider_branches_models/profile/categroy.dart'; import 'package:mc_common_app/models/provider_branches_models/profile/categroy.dart';
import 'package:mc_common_app/models/services_models/service_model.dart'; import 'package:mc_common_app/models/services_models/service_model.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
class BranchDetailModel { class BranchDetailModel {
int? id; final int? id;
int? serviceProviderId; final int? serviceProviderId;
String? serviceProviderName; final String? serviceProviderName;
String? branchProfileImage; final String? branchName;
String? branchName; final String? branchDescription;
String? branchDescription; final int? cityId;
int? cityId; final String? cityName;
String? cityName; final String? address;
String? address; final String? latitude;
String? latitude; final String? longitude;
String? longitude; final double? distanceKm;
double? distanceKm; final String? openTime;
String? openTime; final String? closeTime;
String? closeTime; final BranchStatusEnum? branchStatus;
BranchStatusEnum? branchStatus; final int? statusId;
List<GenericImageModel>? branchImages; final dynamic statusText;
int? statusId; final List<ServiceModel>? branchServices;
String? statusText;
String? branchStatusLabel;
double? branchRateAvg;
List<ServiceModel>? branchServices;
List<CategoryData>? categories; List<CategoryData>? categories;
List<BranchAuditTrial>? branchAuditTrial;
int? countryID; int? countryID;
String? countryName; String? countryName;
bool isExpanded = false; bool isExpanded;
bool? isFavorite;
BranchDetailModel({ BranchDetailModel({
this.id, this.id,
this.serviceProviderId, this.serviceProviderId,
this.serviceProviderName, this.serviceProviderName,
this.branchProfileImage,
this.branchName, this.branchName,
this.branchDescription, this.branchDescription,
this.cityId, this.cityId,
@ -50,77 +41,57 @@ class BranchDetailModel {
this.openTime, this.openTime,
this.closeTime, this.closeTime,
this.branchStatus, this.branchStatus,
this.branchImages,
this.branchRateAvg,
this.statusId, this.statusId,
this.statusText, this.statusText,
this.branchStatusLabel,
this.branchServices, this.branchServices,
this.categories, this.categories,
this.branchAuditTrial,
this.countryID, this.countryID,
this.countryName, this.countryName,
this.isFavorite,
required this.isExpanded, required this.isExpanded,
}); });
List<GenericImageModel> populateBranchImages(value) { factory BranchDetailModel.fromJson(Map<String, dynamic> json) =>
List<GenericImageModel> images = []; BranchDetailModel(
if (value != null) { id: json["id"],
value.forEach((v) { serviceProviderId: json["serviceProviderID"],
images.add(GenericImageModel.fromJson(v)); serviceProviderName: json["serviceProviderName"],
}); branchName: json["branchName"],
} branchDescription: json["branchDescription"],
return images; cityId: json["cityID"],
} cityName: json["cityName"],
address: json["address"],
latitude: json["latitude"],
longitude: json["longitude"],
distanceKm: json["distanceKM"]?.toDouble(),
openTime: json["openTime"],
closeTime: json["closeTime"],
branchStatus: (json['branchStatus'] as int).toBranchStatusEnum(),
statusId: json["branchStatus"],
statusText: json["statusText"],
branchServices: json["serviceProviderServices"] == null ? [] : List<
ServiceModel>.from(json["serviceProviderServices"]!.map((x) =>
ServiceModel.fromJson(x))),
categories: [],
isExpanded: false,
);
BranchDetailModel.fromJson(Map<String, dynamic> json) { Map<String, dynamic> toJson() =>
List<GenericImageModel> images = []; {
if (json.containsKey('serviceProviderBranchImage')) { "id": id,
images = populateBranchImages(json["serviceProviderBranchImage"]); "serviceProviderID": serviceProviderId,
} else { "serviceProviderName": serviceProviderName,
images = populateBranchImages(json["branchImages"]); "branchName": branchName,
} "branchDescription": branchDescription,
id = json["id"]; "cityID": cityId,
serviceProviderId = json["serviceProviderID"]; "address": address,
branchProfileImage = images.isNotEmpty ? images.first.imageUrl ?? "" : null; "latitude": latitude,
serviceProviderName = json["serviceProviderName"]; "longitude": longitude,
branchName = json["branchName"]; "distanceKM": distanceKm,
branchDescription = json["branchDescription"]; "openTime": openTime,
cityId = json["cityID"]; "closeTime": closeTime,
cityName = json["cityName"]; "status": statusId,
address = json["address"]; "statusText": statusText,
latitude = json["latitude"]; "serviceProviderServices": branchServices == null ? [] : List<
longitude = json["longitude"]; dynamic>.from(branchServices!.map((x) => x.toJson())),
distanceKm = json["distanceKM"]?.toDouble(); };
openTime = json["openTime"];
closeTime = json["closeTime"];
branchStatus = json.containsKey("branchStatus") ? (json['branchStatus'] as int).toBranchStatusEnum() : null;
statusId = json["branchStatus"];
branchImages = images;
statusText = json["statusText"];
branchStatusLabel = json["branchStatusText"];
branchRateAvg = json["branchRateAvg"];
branchServices = json["serviceProviderServices"] == null ? [] : List<ServiceModel>.from(json["serviceProviderServices"]!.map((x) => ServiceModel.fromJson(x)));
categories = [];
branchAuditTrial = json["branchAuditTrial"] == null ? [] : List<BranchAuditTrial>.from(json["branchAuditTrial"]!.map((x) => BranchAuditTrial.fromJson(x)));
isExpanded = false;
isFavorite = false;
}
}
class BranchAuditTrial {
int? status;
String? comment;
int? createdBy;
String? createdOn;
BranchAuditTrial({this.status, this.comment, this.createdBy, this.createdOn});
BranchAuditTrial.fromJson(Map<String, dynamic> json) {
status = json['status'];
comment = json['comment'];
createdBy = json['createdBy'];
createdOn = json['createdOn'];
}
} }

@ -1,36 +0,0 @@
class BranchRatingModel {
int? id;
String? title;
String? review;
int? ratNo;
int? serviceProviderBranchID;
String? serviceProviderBranchName;
int? customerID;
String? customerName;
BranchRatingModel({this.id, this.title, this.review, this.ratNo, this.serviceProviderBranchID, this.serviceProviderBranchName, this.customerID, this.customerName});
BranchRatingModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
title = json['title'];
review = json['review'];
ratNo = json['ratNo'];
serviceProviderBranchID = json['serviceProviderBranchID'];
serviceProviderBranchName = json['serviceProviderBranchName'];
customerID = json['customerID'];
customerName = json['customerName'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['title'] = title;
data['review'] = review;
data['ratNo'] = ratNo;
data['serviceProviderBranchID'] = serviceProviderBranchID;
data['serviceProviderBranchName'] = serviceProviderBranchName;
data['customerID'] = customerID;
data['customerName'] = customerName;
return data;
}
}

@ -22,17 +22,17 @@ class Branch {
String? message; String? message;
factory Branch.fromJson(Map<String, dynamic> json) => Branch( factory Branch.fromJson(Map<String, dynamic> json) => Branch(
totalItemsCount: json["totalItemsCount"], totalItemsCount: json["totalItemsCount"] == null ? null : json["totalItemsCount"],
data: json["data"] == null ? null : List<BranchData>.from(json["data"].map((x) => BranchData.fromJson(x))), data: json["data"] == null ? null : List<BranchData>.from(json["data"].map((x) => BranchData.fromJson(x))),
messageStatus: json["messageStatus"], messageStatus: json["messageStatus"] == null ? null : json["messageStatus"],
message: json["message"], message: json["message"] == null ? null : json["message"],
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"totalItemsCount": totalItemsCount, "totalItemsCount": totalItemsCount == null ? null : totalItemsCount,
"data": data == null ? null : List<dynamic>.from(data!.map((x) => x.toJson())), "data": data == null ? null : List<dynamic>.from(data!.map((x) => x.toJson())),
"messageStatus": messageStatus, "messageStatus": messageStatus == null ? null : messageStatus,
"message": message, "message": message == null ? null : message,
}; };
} }
@ -60,26 +60,26 @@ class BranchData {
int? status; int? status;
factory BranchData.fromJson(Map<String, dynamic> json) => BranchData( factory BranchData.fromJson(Map<String, dynamic> json) => BranchData(
id: json["id"], id: json["id"] == null ? null : json["id"],
serviceProviderId: json["serviceProviderID"], serviceProviderId: json["serviceProviderID"] == null ? null : json["serviceProviderID"],
branchName: json["branchName"], branchName: json["branchName"] == null ? null : json["branchName"],
branchDescription: json["branchDescription"], branchDescription: json["branchDescription"] == null ? null : json["branchDescription"],
cityId: json["cityID"], cityId: json["cityID"] == null ? null : json["cityID"],
address: json["address"], address: json["address"] == null ? null : json["address"],
latitude: json["latitude"], latitude: json["latitude"] == null ? null : json["latitude"],
longitude: json["longitude"], longitude: json["longitude"] == null ? null : json["longitude"],
status: json["status"], status: json["status"] == null ? null : json["status"],
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"id": id, "id": id == null ? null : id,
"serviceProviderID": serviceProviderId, "serviceProviderID": serviceProviderId == null ? null : serviceProviderId,
"branchName": branchName, "branchName": branchName == null ? null : branchName,
"branchDescription": branchDescription, "branchDescription": branchDescription == null ? null : branchDescription,
"cityID": cityId, "cityID": cityId == null ? null : cityId,
"address": address, "address": address == null ? null : address,
"latitude": latitude, "latitude": latitude == null ? null : latitude,
"longitude": longitude, "longitude": longitude == null ? null : longitude,
"status": status, "status": status == null ? null : status,
}; };
} }

@ -26,17 +26,17 @@ class Category {
String? message; String? message;
factory Category.fromJson(Map<String, dynamic> json) => Category( factory Category.fromJson(Map<String, dynamic> json) => Category(
totalItemsCount: json["totalItemsCount"], totalItemsCount: json["totalItemsCount"] == null ? null : json["totalItemsCount"],
data: json["data"] == null ? null : List<CategoryData>.from(json["data"].map((x) => CategoryData.fromJson(x))), data: json["data"] == null ? null : List<CategoryData>.from(json["data"].map((x) => CategoryData.fromJson(x))),
messageStatus: json["messageStatus"], messageStatus: json["messageStatus"] == null ? null : json["messageStatus"],
message: json["message"], message: json["message"] == null ? null : json["message"],
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"totalItemsCount": totalItemsCount, "totalItemsCount": totalItemsCount == null ? null : totalItemsCount,
"data": data == null ? null : List<dynamic>.from(data!.map((x) => x.toJson())), "data": data == null ? null : List<dynamic>.from(data!.map((x) => x.toJson())),
"messageStatus": messageStatus, "messageStatus": messageStatus == null ? null : messageStatus,
"message": message, "message": message == null ? null : message,
}; };
} }
@ -51,33 +51,30 @@ class CategoryData extends Equatable {
this.services, this.services,
this.branchId, this.branchId,
this.branchName, this.branchName,
this.isDeactivated,
}); });
int? id; int? id;
String? categoryName; String? categoryName;
String? categoryNameN; String? categoryNameN;
String? serviceCategoryIconUrl; dynamic? serviceCategoryIconUrl;
String? serviceCategoryImageUrl; dynamic? serviceCategoryImageUrl;
String? branchId; String? branchId;
String? branchName; String? branchName;
bool? isDeactivated;
List<ServiceModel>? services; List<ServiceModel>? services;
factory CategoryData.fromJson(Map<String, dynamic> json) => CategoryData( factory CategoryData.fromJson(Map<String, dynamic> json) => CategoryData(
id: json["id"], id: json["id"] == null ? null : json["id"],
categoryName: json["categoryName"], categoryName: json["categoryName"] == null ? null : json["categoryName"],
categoryNameN: json["categoryNameN"], categoryNameN: json["categoryNameN"] == null ? null : json["categoryNameN"],
serviceCategoryIconUrl: json["serviceCategoryIconUrl"], serviceCategoryIconUrl: json["serviceCategoryIconUrl"],
serviceCategoryImageUrl: json["serviceCategoryImageUrl"], serviceCategoryImageUrl: json["serviceCategoryImageUrl"],
services: [], services: [],
isDeactivated: false,
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"id": id, "id": id == null ? null : id,
"categoryName": categoryName, "categoryName": categoryName == null ? null : categoryName,
"categoryNameN": categoryNameN, "categoryNameN": categoryNameN == null ? null : categoryNameN,
"serviceCategoryIconUrl": serviceCategoryIconUrl, "serviceCategoryIconUrl": serviceCategoryIconUrl,
"serviceCategoryImageUrl": serviceCategoryImageUrl, "serviceCategoryImageUrl": serviceCategoryImageUrl,
}; };

@ -4,8 +4,6 @@
import 'dart:convert'; import 'dart:convert';
import 'package:mc_common_app/utils/enums.dart';
Document documentFromJson(String str) => Document.fromJson(json.decode(str)); Document documentFromJson(String str) => Document.fromJson(json.decode(str));
String documentToJson(Document data) => json.encode(data.toJson()); String documentToJson(Document data) => json.encode(data.toJson());
@ -24,103 +22,65 @@ class Document {
String? message; String? message;
factory Document.fromJson(Map<String, dynamic> json) => Document( factory Document.fromJson(Map<String, dynamic> json) => Document(
totalItemsCount: json["totalItemsCount"], totalItemsCount: json["totalItemsCount"] == null ? null : json["totalItemsCount"],
data: json["data"] == null ? null : List<DocumentData>.from(json["data"].map((x) => DocumentData.fromJson(x))), data: json["data"] == null ? null : List<DocumentData>.from(json["data"].map((x) => DocumentData.fromJson(x))),
messageStatus: json["messageStatus"], messageStatus: json["messageStatus"] == null ? null : json["messageStatus"],
message: json["message"], message: json["message"] == null ? null : json["message"],
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"totalItemsCount": totalItemsCount, "totalItemsCount": totalItemsCount == null ? null : totalItemsCount,
"data": data == null ? null : List<dynamic>.from(data!.map((x) => x.toJson())), "data": data == null ? null : List<dynamic>.from(data!.map((x) => x.toJson())),
"messageStatus": messageStatus, "messageStatus": messageStatus == null ? null : messageStatus,
"message": message, "message": message == null ? null : message,
}; };
} }
class DocumentData { class DocumentData {
DocumentData( DocumentData({
{this.id, this.id,
this.serviceProviderId, this.serviceProviderId,
this.documentId, this.documentId,
this.documentUrl, this.documentUrl,
this.status, this.status,
this.statusText,
this.comment, this.comment,
this.isActive, this.isActive,
this.document, this.document,
this.fileExt, this.fileExt,
this.documentName, this.documentName,
this.isLocalFile, });
this.description,
this.dateExpire,
this.isAllowUpdate,
this.isExpired});
int? id; int? id;
int? serviceProviderId; int? serviceProviderId;
int? documentId; int? documentId;
String? documentUrl; dynamic? documentUrl;
DocumentStatusEnum? status; int? status;
String? comment; dynamic? comment;
bool? isActive; bool? isActive;
String? document; String? document;
String? fileExt; String? fileExt;
String? statusText;
String? documentName; String? documentName;
bool? isLocalFile;
String? description;
String? dateExpire;
bool? isExpired;
bool? isAllowUpdate;
factory DocumentData.fromJson(Map<String, dynamic> json) => DocumentData( factory DocumentData.fromJson(Map<String, dynamic> json) => DocumentData(
id: json["id"], id: json["id"] == null ? null : json["id"],
serviceProviderId: json["serviceProviderID"], serviceProviderId: json["serviceProviderID"] == null ? null : json["serviceProviderID"],
documentId: json["documentID"], documentId: json["documentID"] == null ? null : json["documentID"],
documentUrl: json["documentURL"], documentUrl: json["documentURL"],
status: json.containsKey("status") ? (json['status'] as int).toDocumentStatusEnum() : null, status: json["status"] == null ? null : json["status"],
statusText: json["statusText"],
comment: json["comment"], comment: json["comment"],
isActive: json["isActive"], isActive: json["isActive"] == null ? null : json["isActive"],
dateExpire: json["dateExpire"],
isExpired: json["isExpired"],
isAllowUpdate: json["isAllowUpdate"],
document: null, document: null,
fileExt: null, fileExt: null,
documentName: json["documentName"], documentName: json["documentName"] == null ? null : json["documentName"],
isLocalFile: false, );
description: null);
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"id": id, "id": id == null ? null : id,
"serviceProviderID": serviceProviderId, "serviceProviderID": serviceProviderId == null ? null : serviceProviderId,
"documentID": documentId, "documentID": documentId == null ? null : documentId,
"documentURL": documentUrl, "documentURL": documentUrl,
"status": status, "status": status == null ? null : status,
"comment": comment, "comment": comment,
"isActive": isActive, "isActive": isActive == null ? null : isActive,
"dateExpire": dateExpire,
"isExpired": isExpired,
"isAllowUpdate": isAllowUpdate,
}; };
} }
extension DocumentEnum on int {
DocumentStatusEnum toDocumentStatusEnum() {
switch (this) {
case 0:
return DocumentStatusEnum.needUpload;
case 1:
return DocumentStatusEnum.pending;
case 2:
return DocumentStatusEnum.review;
case 3:
return DocumentStatusEnum.approvedOrActive;
case 4:
return DocumentStatusEnum.rejected;
default:
throw Exception('Invalid status value: $this'); // Explicit handling for invalid cases
}
}
}

@ -55,7 +55,7 @@ class ServicesData {
String? descriptionN; String? descriptionN;
dynamic? serviceIconUrl; dynamic? serviceIconUrl;
dynamic? serviceImageUrl; dynamic? serviceImageUrl;
dynamic? serviceCategoryId; int? serviceCategoryId;
dynamic? categoryName; dynamic? categoryName;
bool? isSelected; bool? isSelected;

@ -1,47 +0,0 @@
class ProviderContactInfoModel {
int? id;
int? providerID;
String? name;
int? allDocStatus;
String? companyName;
String? companyDescription;
int? countryID;
String? countryName;
String? userID;
String? memberSince;
String? mobile;
String? whatsApp;
String? email;
ProviderContactInfoModel({
this.id,
this.providerID,
this.name,
this.allDocStatus,
this.companyName,
this.companyDescription,
this.countryID,
this.countryName,
this.userID,
this.memberSince,
this.mobile,
this.whatsApp,
this.email,
});
ProviderContactInfoModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
providerID = json['providerID'];
name = json['name'];
allDocStatus = json['allDocStatus'];
companyName = json['companyName'];
companyDescription = json['companyDescription'];
countryID = json['countryID'];
countryName = json['countryName'];
userID = json['userID'];
memberSince = json['memberSince'];
mobile = json['mobile'];
whatsApp = json['whatsApp'];
email = json['email'];
}
}

@ -8,6 +8,8 @@ import 'package:mc_common_app/models/provider_branches_models/branch_detail_mode
ProviderModel branch2FromJson(String str) => ProviderModel.fromJson(json.decode(str)); ProviderModel branch2FromJson(String str) => ProviderModel.fromJson(json.decode(str));
String branch2ToJson(ProviderModel data) => json.encode(data.toJson());
class ProviderModel { class ProviderModel {
ProviderModel({ ProviderModel({
this.messageStatus, this.messageStatus,
@ -21,12 +23,21 @@ class ProviderModel {
final ProviderModelData? data; final ProviderModelData? data;
final String? message; final String? message;
factory ProviderModel.fromJson(Map<String, dynamic> json) => ProviderModel( factory ProviderModel.fromJson(Map<String, dynamic> json) =>
ProviderModel(
messageStatus: json["messageStatus"], messageStatus: json["messageStatus"],
totalItemsCount: json["totalItemsCount"], totalItemsCount: json["totalItemsCount"],
data: json["data"] == null ? null : ProviderModelData.fromJson(json["data"]), data: json["data"] == null ? null : ProviderModelData.fromJson(json["data"]),
message: json["message"], message: json["message"],
); );
Map<String, dynamic> toJson() =>
{
"messageStatus": messageStatus,
"totalItemsCount": totalItemsCount,
"data": data == null ? null : data!.toJson(),
"message": message,
};
} }
class ProviderModelData { class ProviderModelData {
@ -52,7 +63,8 @@ class ProviderModelData {
final String? userId; final String? userId;
final List<BranchDetailModel>? serviceProviderBranch; final List<BranchDetailModel>? serviceProviderBranch;
factory ProviderModelData.fromJson(Map<String, dynamic> json) => ProviderModelData( factory ProviderModelData.fromJson(Map<String, dynamic> json) =>
ProviderModelData(
id: json["id"], id: json["id"],
companyName: json["companyName"], companyName: json["companyName"],
countryName: json["countryName"], countryName: json["countryName"],
@ -63,26 +75,16 @@ class ProviderModelData {
userId: json["userID"], userId: json["userID"],
serviceProviderBranch: json["serviceProviderBranch"] == null ? null : List<BranchDetailModel>.from(json["serviceProviderBranch"].map((x) => BranchDetailModel.fromJson(x))), serviceProviderBranch: json["serviceProviderBranch"] == null ? null : List<BranchDetailModel>.from(json["serviceProviderBranch"].map((x) => BranchDetailModel.fromJson(x))),
); );
}
class ProviderBasicDataModel {
int? id;
String? providerName;
String? providerDescription;
ProviderBasicDataModel({this.id, this.providerName, this.providerDescription}); Map<String, dynamic> toJson() =>
{
ProviderBasicDataModel.fromJson(Map<String, dynamic> json) { "id": id,
id = json['id']; "companyName": companyName,
providerName = json['providerName']; "companyDescription": companyDescription,
providerDescription = json['providerDescription']; "allDocStatus": allDocStatus,
"isValidSubscription": isValidSubscription,
"userID": userId,
"serviceProviderBranch": serviceProviderBranch == null ? null : List<dynamic>.from(serviceProviderBranch!.map((x) => x.toJson())),
};
} }
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['providerName'] = providerName;
data['providerDescription'] = providerDescription;
return data;
}
}

@ -1,86 +1,53 @@
// To parse this JSON data, do
//
// final branch2 = branch2FromJson(jsonString);
import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart'; import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart';
class ProviderProfileModel { class ProviderProfileModel {
ProviderProfileModel({ ProviderProfileModel({
this.id, this.id,
this.companyName, this.companyName,
this.profileImage,
this.name,
this.countryName, this.countryName,
this.companyDescription, this.companyDescription,
this.allDocStatus, this.allDocStatus,
this.isValidSubscription, this.isValidSubscription,
this.userId, this.userId,
this.memberSince,
this.serviceProviderBranch, this.serviceProviderBranch,
this.countryID, this.countryID,
this.isFavorite,
this.providerID,
this.noOfBranches,
this.customerID,
}); });
final int? id; final int? id;
final String? profileImage;
final String? companyName; final String? companyName;
final String? companyDescription;
int? countryID;
final String? countryName; final String? countryName;
int? countryID;
final String? companyDescription;
final int? allDocStatus; final int? allDocStatus;
final bool? isValidSubscription; final bool? isValidSubscription;
final String? name;
final String? userId; final String? userId;
final String? memberSince;
bool? isFavorite;
final int? providerID;
final int? customerID;
final int? noOfBranches;
final List<BranchDetailModel>? serviceProviderBranch; final List<BranchDetailModel>? serviceProviderBranch;
factory ProviderProfileModel.fromJson(Map<String, dynamic> json) => ProviderProfileModel( factory ProviderProfileModel.fromJson(Map<String, dynamic> json) => ProviderProfileModel(
id: json["id"], id: json["id"],
companyName: json["companyName"], companyName: json["companyName"],
profileImage: json["profileImage"] ?? "",
name: json["name"],
countryName: json["countryName"], countryName: json["countryName"],
countryID: json["countryID"], countryID: json["countryID"],
companyDescription: json["companyDescription"], companyDescription: json["companyDescription"],
allDocStatus: json["allDocStatus"], allDocStatus: json["allDocStatus"],
isValidSubscription: json["isValidSubscription"], isValidSubscription: json["isValidSubscription"],
userId: json["userID"], userId: json["userID"],
memberSince: json["memberSince"] ?? "",
providerID: json["providerID"] ?? 0,
customerID: json["customerID"] ?? 0,
noOfBranches: json["noOfBranches"] ?? (json["serviceProviderBranch"] != null ? (json["serviceProviderBranch"] as List).length : 0),
isFavorite: json["isFavourite"] ?? false,
serviceProviderBranch: json["serviceProviderBranch"] == null ? null : List<BranchDetailModel>.from(json["serviceProviderBranch"].map((x) => BranchDetailModel.fromJson(x))), serviceProviderBranch: json["serviceProviderBranch"] == null ? null : List<BranchDetailModel>.from(json["serviceProviderBranch"].map((x) => BranchDetailModel.fromJson(x))),
); );
Map<String, dynamic> toJson() => {
"id": id,
"companyName": companyName,
"companyDescription": companyDescription,
"allDocStatus": allDocStatus,
"isValidSubscription": isValidSubscription,
"userID": userId,
"serviceProviderBranch": serviceProviderBranch == null ? null : List<dynamic>.from(serviceProviderBranch!.map((x) => x.toJson())),
};
} }
// {
// "id": 10,
// "companyName": "string",
// "companyDescription": "",
// "countryID": 1,
// "countryName": "Saudi Arabia",
// "allDocStatus": 0,
// "isValidSubscription": true,
// "name": null,
// "userID": "88e2e2e8-9a6d-4f97-b05c-08dc7e4513b3",
// }
//
// {
// "id": 0,
// "companyName": "string",
// "companyDescription": "",
// "countryID": 1,
// "countryName": "string",
// "allDocStatus": 3,
// "isValidSubscription": true,
// "name": "Mirza Shafique",
// "userID": "7db5e1ae-6de4-47d7-984b-08db2842f899",
// "providerID": 2,
// "customerID": 6,
// "noOfBranches": 12,
// "memberSince": "2024-08-22T11:36:46.41"
// }

@ -1,30 +1,50 @@
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/utils/enums.dart';
class OffersModel { class OffersModel {
int? id; int? id;
int? requestID; int? requestID;
int? serviceProviderID; int? serviceProviderID;
ServiceProvider? serviceProvider; ServiceProvider? serviceProvider;
int? offerStatus; int? offerStatus;
RequestOfferStatusEnum? requestOfferStatusEnum;
String? offerStatusText; String? offerStatusText;
String? comment; String? comment;
double? price; double? price;
OffersModel({this.id, this.requestID, this.serviceProviderID, this.serviceProvider, this.offerStatus, this.offerStatusText, this.comment, this.price}); OffersModel(
{this.id,
this.requestID,
this.serviceProviderID,
this.serviceProvider,
this.offerStatus,
this.offerStatusText,
this.comment,
this.price});
OffersModel.fromJson(Map<String, dynamic> json) { OffersModel.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
requestID = json['requestID']; requestID = json['requestID'];
serviceProviderID = json['serviceProviderID']; serviceProviderID = json['serviceProviderID'];
serviceProvider = json['serviceProvider'] != null ? ServiceProvider.fromJson(json['serviceProvider']) : null; serviceProvider = json['serviceProvider'] != null
? ServiceProvider.fromJson(json['serviceProvider'])
: null;
offerStatus = json['offerStatus']; offerStatus = json['offerStatus'];
requestOfferStatusEnum = ((json['offerStatus']) as int).toRequestOfferStatusEnum();
offerStatusText = json['offerStatusText']; offerStatusText = json['offerStatusText'];
comment = json['comment']; comment = json['comment'];
price = json['price']; price = json['price'];
} }
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['requestID'] = requestID;
data['serviceProviderID'] = serviceProviderID;
if (serviceProvider != null) {
data['serviceProvider'] = serviceProvider!.toJson();
}
data['offerStatus'] = offerStatus;
data['offerStatusText'] = offerStatusText;
data['comment'] = comment;
data['price'] = price;
return data;
}
} }
class ServiceProvider { class ServiceProvider {

@ -1,60 +0,0 @@
class OffersUnreadChatModel {
final int reqTotal;
final List<OffersUnreadChatDataModel> reqChatUnread;
OffersUnreadChatModel({
required this.reqTotal,
required this.reqChatUnread,
});
factory OffersUnreadChatModel.fromJson(Map<String, dynamic> json) {
return OffersUnreadChatModel(
reqTotal: json['total'],
reqChatUnread: (json['reqChatCountData'] as List).map((e) => OffersUnreadChatDataModel.fromJson(e)).toList(),
);
}
}
class OffersUnreadChatDataModel {
String reqTitle;
int reqTotal;
int requestID;
String senderUserID;
int unreadMessagesCount;
String lastChatTime;
String lastChatText;
String customerName;
OffersUnreadChatDataModel({
required this.reqTitle,
required this.reqTotal,
required this.requestID,
required this.senderUserID,
required this.unreadMessagesCount,
required this.lastChatTime,
required this.lastChatText,
required this.customerName,
});
factory OffersUnreadChatDataModel.fromJson(Map<String, dynamic> json) {
return OffersUnreadChatDataModel(
reqTitle: json['reqTitle'],
reqTotal: json['reqTotal'],
requestID: json['requestID'],
senderUserID: json['senderUserID'],
unreadMessagesCount: json['unreadMessagesCount'],
lastChatTime: json['lastChatTime'],
lastChatText: json['lastChatText'],
customerName: json['customerName'],
);
}
}
// "reqTitle": "Spare_Parts / Ford / Edge / 2016",
// I/flutter (16941): "reqTotal": 1,
// I/flutter (16941): "requestID": 145,
// I/flutter (16941): "senderUserID": "b56bc6bd-e45c-4644-b7c4-08dd02460895",
// I/flutter (16941): "unreadMessagesCount": 0,
// I/flutter (16941): "lastChatTime": "2025-02-12T10:33:42.1433333",
// I/flutter (16941): "lastChatText": "I am accepting this offer.",
// I/flutter (16941): "customerName": "Faiz 100"

@ -1,9 +1,6 @@
import 'dart:developer'; import 'dart:developer';
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/main.dart';
import 'package:mc_common_app/models/chat_models/chat_message_model.dart'; import 'package:mc_common_app/models/chat_models/chat_message_model.dart';
import 'package:mc_common_app/utils/enums.dart';
class ProviderOffersModel { class ProviderOffersModel {
int? id; int? id;
@ -34,7 +31,7 @@ class ProviderOffersModel {
this.serviceProviders, this.serviceProviders,
}); });
ProviderOffersModel.fromJson(Map<String, dynamic> json, int? reqId) { ProviderOffersModel.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
customerID = json['customerID']; customerID = json['customerID'];
requestType = json['requestType']; requestType = json['requestType'];
@ -49,7 +46,7 @@ class ProviderOffersModel {
if (json['serviceProviders'] != null) { if (json['serviceProviders'] != null) {
serviceProviders = <ServiceProvidersOffers>[]; serviceProviders = <ServiceProvidersOffers>[];
json['serviceProviders'].forEach((v) { json['serviceProviders'].forEach((v) {
serviceProviders!.add(ServiceProvidersOffers.fromJson(v, reqId)); serviceProviders!.add(ServiceProvidersOffers.fromJson(v));
}); });
} }
} }
@ -62,51 +59,19 @@ class ServiceProvidersOffers {
String? mobileNo; String? mobileNo;
String? email; String? email;
String? companyName; String? companyName;
String? createdOn;
RequestOfferStatusEnum? requestOfferStatusEnum;
int? offerCount; int? offerCount;
int? requestId;
String? providerAddress;
String? providerLatitude;
String? providerLongitude;
List<ChatMessageModel>? chatMessages; List<ChatMessageModel>? chatMessages;
ServiceProvidersOffers({ ServiceProvidersOffers({this.providerId, this.name, this.mobileNo, this.email, this.companyName, this.offerCount, this.chatMessages, this.providerUserId});
this.providerId,
this.name,
this.mobileNo,
this.email,
this.companyName,
this.offerCount,
this.requestId,
this.chatMessages,
this.providerUserId,
this.createdOn,
this.requestOfferStatusEnum,
this.providerAddress,
this.providerLatitude,
this.providerLongitude,
});
ServiceProvidersOffers.fromJson(Map<String, dynamic> json, int? reqId) { ServiceProvidersOffers.fromJson(Map<String, dynamic> json) {
providerId = json['providerID']; providerId = json['providerID'];
providerUserId = json['providerUserID']; providerUserId = json['providerUserId'] ?? "c680271c-b2a7-4ecf-7e95-08db545aec1b"; //TODO Remove this when parameter is added in backend
name = json['name']; name = json['name'];
mobileNo = json['mobileNo']; mobileNo = json['mobileNo'];
email = json['email']; email = json['email'];
companyName = json['companyName']; companyName = json['companyName'];
offerCount = json['offerCount']; offerCount = json['offerCount'];
requestId = reqId;
createdOn = json['createdOn'];
requestOfferStatusEnum = ((json['offerStatusLast']) as int).toRequestOfferStatusEnum();
providerAddress = json['address'] ?? "";
providerLatitude = json['latititude'] ?? "0.0";
providerLongitude = json['langitude'] ?? "0.0";
chatMessages = []; chatMessages = [];
} }
@override
String toString() {
return 'ServiceProvidersOffers{providerUserId: $providerUserId, providerId: $providerId, name: $name, mobileNo: $mobileNo, email: $email, companyName: $companyName,offeredItemCreatedOn: $createdOn, requestOfferStatusEnum: $requestOfferStatusEnum, offerCount: $offerCount, chatMessages: $chatMessages}';
}
} }

@ -1,158 +0,0 @@
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/utils/enums.dart';
class ProviderOffersChatsModel {
int? id;
int? requestID;
int? serviceProviderID;
ServiceProviderModel? serviceProvider;
int? offerStatus;
RequestOfferStatusEnum? requestOfferStatusEnum;
String? offerStatusText;
String? comment;
String? customerName;
double? price;
String? serviceItem;
String? offeredItemCreatedBy;
String? offeredItemCreatedByName;
String? offeredItemCreatedOn;
String? reqOfferImages;
bool? isDeliveryAvailable;
String? createdOn;
ProviderOffersChatsModel({
this.id,
this.requestID,
this.serviceProviderID,
this.serviceProvider,
this.offerStatus,
this.requestOfferStatusEnum,
this.offerStatusText,
this.comment,
this.customerName,
this.price,
this.serviceItem,
this.offeredItemCreatedBy,
this.offeredItemCreatedByName,
this.offeredItemCreatedOn,
this.reqOfferImages,
this.isDeliveryAvailable,
this.createdOn,
});
ProviderOffersChatsModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
requestID = json['requestID'];
serviceProviderID = json['serviceProviderID'];
serviceProvider = json['serviceProvider'] != null ? ServiceProviderModel.fromJson(json['serviceProvider']) : null;
offerStatus = json['offerStatus'];
requestOfferStatusEnum = ((json['offerStatus']) as int).toRequestOfferStatusEnum();
offerStatusText = json['offerStatusText'];
comment = json['comment'];
customerName = json['customerName'];
price = json['price'];
serviceItem = json['serviceItem'];
offeredItemCreatedBy = json['offeredItemCreatedBy'];
offeredItemCreatedByName = json['offeredItemCreatedByName'];
offeredItemCreatedOn = json['offeredItemCreatedOn'];
reqOfferImages = json['reqOfferImages'];
isDeliveryAvailable = json['isDeliveryAvailable'];
createdOn = json['createdOn'];
}
}
class ServiceProviderModel {
int? providerId;
String? providerGUID;
String? firstName;
String? lastName;
String? name;
int? gender;
String? genderName;
String? mobileNo;
String? email;
bool? isEmailVerified;
bool? isCompleted;
int? city;
String? cityName;
int? country;
String? countryName;
int? accountStatus;
String? accountStatusText;
int? activityStatus;
String? activityStatusText;
String? bankName;
String? iBanNo;
bool? isActive;
String? subscriptionDate;
String? createdOn;
String? companyName;
String? currency;
String? branch;
bool? isChatted;
bool? isDealership;
ServiceProviderModel({
this.providerId,
this.providerGUID,
this.firstName,
this.lastName,
this.name,
this.gender,
this.genderName,
this.mobileNo,
this.email,
this.isEmailVerified,
this.isCompleted,
this.city,
this.cityName,
this.country,
this.countryName,
this.accountStatus,
this.accountStatusText,
this.activityStatus,
this.activityStatusText,
this.bankName,
this.iBanNo,
this.isActive,
this.subscriptionDate,
this.createdOn,
this.companyName,
this.currency,
this.branch,
this.isChatted,
this.isDealership,
});
ServiceProviderModel.fromJson(Map<String, dynamic> json) {
providerId = json['providerId'];
providerGUID = json['providerGUID'];
firstName = json['firstName'];
lastName = json['lastName'];
name = json['name'];
gender = json['gender'];
genderName = json['genderName'];
mobileNo = json['mobileNo'];
email = json['email'];
isEmailVerified = json['isEmailVerfied'];
isCompleted = json['isCompleted'];
city = json['city'];
cityName = json['cityName'];
country = json['country'];
countryName = json['countryName'];
accountStatus = json['accountStatus'];
accountStatusText = json['accountStatusText'];
activityStatus = json['activityStatus'];
activityStatusText = json['activityStatusText'];
bankName = json['bankName'];
iBanNo = json['iBanNo'];
isActive = json['isActive'];
subscriptionDate = json['subscriptionDate'];
createdOn = json['createdOn'];
companyName = json['companyName'];
currency = json['currency'];
branch = json['branch'];
isChatted = json['isChatted'];
isDealership = json['isDealership'];
}
}

@ -1,5 +1,4 @@
import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart';
import 'package:mc_common_app/models/chat_models/chat_message_model.dart'; import 'package:mc_common_app/models/chat_models/chat_message_model.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
@ -7,25 +6,17 @@ class RequestModel {
int requestType; int requestType;
String requestTypeName; String requestTypeName;
String requestStatusName; String requestStatusName;
RequestStatusEnum requestStatus; RequestStatus requestStatus;
int? shippingStatus;
ShippingRequestStatusEnum? shippingStatusEnum;
SelfPickupRequestStatusEnum? selfPickupRequestStatusEnum;
String cityName; String cityName;
String vehicleTypeName; String vehicleTypeName;
String countryName; String countryName;
String customerName; String customerName;
String customerID; String customerID;
String address;
String additionalAddressDetails;
dynamic serviceProviders; dynamic serviceProviders;
int offerCount; int offerCount;
int id; int id;
int customerId; int customerId;
bool isChatted; bool isChatted;
bool isOfferAccepted;
RequestDeliveryOptionEnum offerDeliveryOption;
RequestDeliveryOptionEnum selectedDeliveryOptionByCustomer;
String customerUserID; String customerUserID;
dynamic customer; dynamic customer;
String brand; String brand;
@ -33,7 +24,7 @@ class RequestModel {
int year; int year;
bool isNew; bool isNew;
String description; String description;
List<GenericImageModel>? requestImages; List<dynamic> requestImages;
int cityId; int cityId;
dynamic city; dynamic city;
double price; double price;
@ -43,9 +34,9 @@ class RequestModel {
List<dynamic> requestProviderItem; List<dynamic> requestProviderItem;
bool isActive; bool isActive;
int createdBy; int createdBy;
String? createdOn; DateTime createdOn;
int? modifiedBy; dynamic modifiedBy;
String? modifiedOn; dynamic modifiedOn;
List<ChatMessageModel> chatMessages; List<ChatMessageModel> chatMessages;
RequestModel({ RequestModel({
@ -53,9 +44,6 @@ class RequestModel {
required this.requestTypeName, required this.requestTypeName,
required this.requestStatusName, required this.requestStatusName,
required this.requestStatus, required this.requestStatus,
required this.shippingStatus,
required this.shippingStatusEnum,
required this.selfPickupRequestStatusEnum,
required this.cityName, required this.cityName,
required this.vehicleTypeName, required this.vehicleTypeName,
required this.countryName, required this.countryName,
@ -66,13 +54,8 @@ class RequestModel {
required this.id, required this.id,
required this.customerId, required this.customerId,
required this.isChatted, required this.isChatted,
required this.isOfferAccepted,
required this.offerDeliveryOption,
required this.selectedDeliveryOptionByCustomer,
required this.customerUserID, required this.customerUserID,
required this.customer, required this.customer,
required this.address,
required this.additionalAddressDetails,
required this.brand, required this.brand,
required this.model, required this.model,
required this.year, required this.year,
@ -94,40 +77,22 @@ class RequestModel {
required this.chatMessages, required this.chatMessages,
}); });
List<GenericImageModel> populateRequestImages(value) {
List<GenericImageModel> images = [];
if (value != null) {
value.forEach((v) {
images.add(GenericImageModel.fromJson(v));
});
}
return images;
}
factory RequestModel.fromJson(Map<String, dynamic> json) { factory RequestModel.fromJson(Map<String, dynamic> json) {
return RequestModel( return RequestModel(
requestType: json["requestType"], requestType: json["requestType"],
requestTypeName: json["requestTypeName"], requestTypeName: json["requestTypeName"],
requestStatusName: json["requestStatusName"], requestStatusName: json["requestStatusName"],
requestStatus: (json['requestStatus'] as int).toRequestStatusEnum(), requestStatus: (json['requestStatus'] as int).toRequestStatusEnum(),
shippingStatus: json['shippingRequestStatus'],
shippingStatusEnum: json['shippingRequestStatus'] != null ? (json['shippingRequestStatus'] as int).toShippingStatusEnum() : ShippingRequestStatusEnum.pending,
selfPickupRequestStatusEnum: json['selfPickupRequestStatus'] != null ? (json['selfPickupRequestStatus'] as int).toSelfPickupStatusEnum() : SelfPickupRequestStatusEnum.preparingToCollect,
cityName: json["cityName"], cityName: json["cityName"],
vehicleTypeName: json["vehicleTypeName"], vehicleTypeName: json["vehicleTypeName"],
countryName: json["countryName"], countryName: json["countryName"],
customerName: json["customerName"] ?? "", customerName: json["customerName"],
address: json["address"] ?? "",
additionalAddressDetails: json['additionalAddress'] ?? "",
customerID: json["customerUserID"], customerID: json["customerUserID"],
serviceProviders: json["serviceProviders"], serviceProviders: json["serviceProviders"],
offerCount: json["offerCount"], offerCount: json["offerCount"],
id: json["id"], id: json["id"],
customerId: json["customerID"], customerId: json["customerID"],
isChatted: json["isChatted"], isChatted: json["isChatted"],
isOfferAccepted: json["isOfferAccepted"],
offerDeliveryOption: ((json["offerDeliveryOption"] ?? 0) as int).toRequestDeliveryOptionEnum(),
selectedDeliveryOptionByCustomer: ((json["deliveryOption"] ?? 0) as int).toRequestDeliveryOptionEnum(),
customerUserID: json["customerUserID"], customerUserID: json["customerUserID"],
customer: json["customer"], customer: json["customer"],
brand: json["brand"], brand: json["brand"],
@ -135,7 +100,7 @@ class RequestModel {
year: json["year"], year: json["year"],
isNew: json["isNew"], isNew: json["isNew"],
description: json["description"], description: json["description"],
requestImages: List<GenericImageModel>.from(json["requestImages"].map((x) => GenericImageModel.fromJson(x))), requestImages: List<dynamic>.from(json["requestImages"].map((x) => x)),
cityId: json["cityID"], cityId: json["cityID"],
city: json["city"], city: json["city"],
price: json["price"], price: json["price"],
@ -145,7 +110,7 @@ class RequestModel {
requestProviderItem: List<dynamic>.from(json["requestProviderItem"].map((x) => x)), requestProviderItem: List<dynamic>.from(json["requestProviderItem"].map((x) => x)),
isActive: json["isActive"], isActive: json["isActive"],
createdBy: json["createdBy"], createdBy: json["createdBy"],
createdOn: json["createdOn"], createdOn: DateTime.parse(json["createdOn"]),
modifiedBy: json["modifiedBy"], modifiedBy: json["modifiedBy"],
modifiedOn: json["modifiedOn"], modifiedOn: json["modifiedOn"],
chatMessages: [], chatMessages: [],

@ -42,7 +42,7 @@ class ItemData {
final String? price; final String? price;
final String? manufactureDate; final String? manufactureDate;
final String? description; final String? description;
final String? pictureUrl; final dynamic pictureUrl;
final int? companyId; final int? companyId;
final int? serviceProviderServiceId; final int? serviceProviderServiceId;
final String? serviceProviderServiceDescription; final String? serviceProviderServiceDescription;

@ -1,6 +1,4 @@
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/models/services_models/item_model.dart'; import 'package:mc_common_app/models/services_models/item_model.dart';
import 'package:mc_common_app/utils/enums.dart';
class ServiceModel { class ServiceModel {
final int? serviceProviderServiceId; final int? serviceProviderServiceId;
@ -11,21 +9,19 @@ class ServiceModel {
final String? serviceDescription; final String? serviceDescription;
final String? serviceDescriptionN; final String? serviceDescriptionN;
final int? serviceStatus; final int? serviceStatus;
final ServiceStatusEnum? serviceStatusEnum;
final dynamic statusText; final dynamic statusText;
final bool? isAllowAppointment; final bool? isAllowAppointment;
final bool? isAllowAppointmentHome; final bool? isAllowAppointmentHome;
final int? customerLocationRange; final int? customerLocationRange;
String? rangePricePerKm; final String? rangePricePerKm;
final int? itemsCount; final int? itemsCount;
List<ItemData>? serviceItems; List<ItemData>? serviceItems;
bool isExpandedOrSelected; bool isExpandedOrSelected;
int providerServiceId; int providerServiceId;
String providerServiceName; String providerServiceName;
bool isHomeSelected; bool isHomeSelected;
String homeLocation;
double currentTotalServicePrice; double currentTotalServicePrice;
CurrentLocationInfoModel servicelocationInfo;
bool isActive;
ServiceModel({ ServiceModel({
this.serviceProviderServiceId, this.serviceProviderServiceId,
@ -36,7 +32,6 @@ class ServiceModel {
this.serviceDescription, this.serviceDescription,
this.serviceDescriptionN, this.serviceDescriptionN,
this.serviceStatus, this.serviceStatus,
this.serviceStatusEnum,
this.statusText, this.statusText,
this.isAllowAppointment, this.isAllowAppointment,
this.isAllowAppointmentHome, this.isAllowAppointmentHome,
@ -45,12 +40,11 @@ class ServiceModel {
this.itemsCount, this.itemsCount,
this.serviceItems, this.serviceItems,
this.isHomeSelected = false, this.isHomeSelected = false,
this.homeLocation = "",
this.currentTotalServicePrice = 0.0, this.currentTotalServicePrice = 0.0,
this.isActive = true,
required this.isExpandedOrSelected, required this.isExpandedOrSelected,
required this.providerServiceId, required this.providerServiceId,
required this.providerServiceName, required this.providerServiceName,
required this.servicelocationInfo,
}); });
factory ServiceModel.fromJson(Map<String, dynamic> json, {bool isForAppointment = false}) => ServiceModel( factory ServiceModel.fromJson(Map<String, dynamic> json, {bool isForAppointment = false}) => ServiceModel(
@ -62,12 +56,11 @@ class ServiceModel {
serviceDescription: json["serviceDescription"] ?? json["serviceName"], serviceDescription: json["serviceDescription"] ?? json["serviceName"],
serviceDescriptionN: json["serviceDescriptionN"] ?? json["serviceNameN"], serviceDescriptionN: json["serviceDescriptionN"] ?? json["serviceNameN"],
serviceStatus: json["serviceStatus"], serviceStatus: json["serviceStatus"],
serviceStatusEnum: ((json["serviceStatus"] ?? 0) as int).toServiceStatusEnum(),
statusText: json["statusText"], statusText: json["statusText"],
isAllowAppointment: json["isAllowAppointment"], isAllowAppointment: json["isAllowAppointment"],
isAllowAppointmentHome: json["isAllowAppointmentHome"], isAllowAppointmentHome: json["isAllowAppointmentHome"],
customerLocationRange: json["customerLocationRange"], customerLocationRange: json["customerLocationRange"],
rangePricePerKm: json["rangePricePerKm"]?.toString(), rangePricePerKm: json["rangePricePerKm"].toString(),
itemsCount: json["itemsCount"], itemsCount: json["itemsCount"],
serviceItems: isForAppointment serviceItems: isForAppointment
? json["serviceItemList"] == null ? json["serviceItemList"] == null
@ -78,10 +71,9 @@ class ServiceModel {
: List<ItemData>.from(json["branchServiceItems"]!.map((x) => ItemData.fromJson(x))), : List<ItemData>.from(json["branchServiceItems"]!.map((x) => ItemData.fromJson(x))),
isExpandedOrSelected: false, isExpandedOrSelected: false,
providerServiceId: 0, providerServiceId: 0,
providerServiceName: json['serviceName'] ?? "", providerServiceName: "",
isHomeSelected: false, isHomeSelected: false,
isActive: json["isActive"] ?? true, homeLocation: "",
servicelocationInfo: CurrentLocationInfoModel(address: '', distanceToBranch: 0.0, homeChargesInCurrentService: 0.0, latitude: 0.0, longitude: 0.0),
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
@ -107,24 +99,3 @@ class ServiceModel {
return 'ServiceModel{serviceProviderServiceId: $serviceProviderServiceId, providerServiceDescription: $providerServiceDescription, categoryId: $categoryId, categoryName: $categoryName, serviceId: $serviceId, serviceDescription: $serviceDescription, serviceDescriptionN: $serviceDescriptionN, serviceStatus: $serviceStatus, statusText: $statusText, isAllowAppointment: $isAllowAppointment, isAllowAppointmentHome: $isAllowAppointmentHome, customerLocationRange: $customerLocationRange, rangePricePerKm: $rangePricePerKm, itemsCount: $itemsCount, serviceItems: $serviceItems, isExpandedOrSelected: $isExpandedOrSelected}'; return 'ServiceModel{serviceProviderServiceId: $serviceProviderServiceId, providerServiceDescription: $providerServiceDescription, categoryId: $categoryId, categoryName: $categoryName, serviceId: $serviceId, serviceDescription: $serviceDescription, serviceDescriptionN: $serviceDescriptionN, serviceStatus: $serviceStatus, statusText: $statusText, isAllowAppointment: $isAllowAppointment, isAllowAppointmentHome: $isAllowAppointmentHome, customerLocationRange: $customerLocationRange, rangePricePerKm: $rangePricePerKm, itemsCount: $itemsCount, serviceItems: $serviceItems, isExpandedOrSelected: $isExpandedOrSelected}';
} }
} }
class CurrentLocationInfoModel {
String address;
double latitude;
double longitude;
double distanceToBranch;
double homeChargesInCurrentService;
CurrentLocationInfoModel({
required this.address,
required this.latitude,
required this.longitude,
required this.distanceToBranch,
required this.homeChargesInCurrentService,
});
@override
String toString() {
return 'CurrentLocationInfoModel{address: $address, latitude: $latitude, longitude: $longitude, distanceToBranch: $distanceToBranch, homeChargesInCurrentService: $homeChargesInCurrentService}';
}
}

@ -1,30 +0,0 @@
import 'package:mc_common_app/view_models/ad_view_model.dart';
class AppInfoModel {
int? id;
String? header;
String? content;
bool? isActive;
int? channel;
List<ImageModel>? images;
AppInfoModel({this.id, this.header, this.content, this.isActive, this.channel, this.images});
AppInfoModel.fromJson(Map<String, dynamic> json, {bool isForTermsAndCondition = false}) {
String imagesKey = "appInfoImages";
if (isForTermsAndCondition) {
imagesKey = "termAndConditionImages";
}
id = json['id'];
header = json['header'];
content = json['content'];
isActive = json['isActive'];
channel = json['channel'];
if (json[imagesKey] != null) {
images = <ImageModel>[];
json[imagesKey].forEach((v) {
images!.add(ImageModel.fromJson(v));
});
}
}
}

@ -1,26 +0,0 @@
class AppInvitationHistoryModel {
int? id;
int? customerID;
int? channelID;
int? appInvitationEnumID;
int? noOfInvites;
String? comments;
AppInvitationHistoryModel({
this.id,
this.customerID,
this.channelID,
this.appInvitationEnumID,
this.noOfInvites,
this.comments,
});
AppInvitationHistoryModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
customerID = json['customerID'];
channelID = json['channelID'];
appInvitationEnumID = json['appInvitationEnumID'];
noOfInvites = json['noofInvites'];
comments = json['comments'];
}
}

@ -1,36 +0,0 @@
import 'package:mc_common_app/view_models/ad_view_model.dart';
class ContactInfoModel {
int? id;
String? companyName;
String? mobileNo;
String? phoneNo;
String? email;
String? address;
String? latitude;
String? longitude;
int? channel;
bool? isActive;
List<ImageModel>? contactInfoImages;
ContactInfoModel({this.id, this.companyName, this.mobileNo, this.phoneNo, this.email, this.address, this.latitude, this.longitude, this.channel, this.isActive, this.contactInfoImages});
ContactInfoModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
companyName = json['companyName'];
mobileNo = json['mobileNo'];
phoneNo = json['phoneNo'];
email = json['email'];
address = json['address'];
latitude = json['latitude'];
longitude = json['longitude'];
channel = json['channel'];
isActive = json['isActive'];
if (json['contactInfoImages'] != null) {
contactInfoImages = <ImageModel>[];
json['contactInfoImages'].forEach((v) {
contactInfoImages!.add(ImageModel.fromJson(v));
});
}
}
}

@ -1,32 +0,0 @@
class FAQsModel {
int? id;
String? question;
String? answer;
int? sequenceNo;
bool? isActive;
int? channel;
bool? isCollapsed;
FAQsModel({this.id, this.question, this.answer, this.sequenceNo, this.isActive, this.channel, this.isCollapsed});
FAQsModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
question = json['question'];
answer = json['answer'];
sequenceNo = json['sequenceNo'];
isActive = json['isActive'];
channel = json['channel'];
isCollapsed = false;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['question'] = question;
data['answer'] = answer;
data['sequenceNo'] = sequenceNo;
data['isActive'] = isActive;
data['channel'] = channel;
return data;
}
}

@ -1,83 +0,0 @@
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/utils/enums.dart';
class ShippingRequestModel {
int? id;
int? requestID;
Request? request;
int? pickupOrshippingStatus;
ShippingRequestStatusEnum? shippingStatusEnum;
SelfPickupRequestStatusEnum? selfPickupRequestStatusEnum;
String? deliveredorCollectedOn;
String? comment;
String? createdOn;
int? customerID;
String? customerName;
int? vehicleTypeID;
String? vehicleType;
ShippingRequestModel({
this.id,
this.requestID,
this.request,
this.pickupOrshippingStatus,
this.deliveredorCollectedOn,
this.comment,
this.createdOn,
this.customerID,
this.customerName,
this.vehicleTypeID,
this.vehicleType,
});
ShippingRequestModel.fromJsonShipping(Map<String, dynamic> json, bool isForShipping) {
id = json['id'];
requestID = json['requestID'];
request = json['request'] != null ? Request.fromJson(json['request']) : null;
pickupOrshippingStatus = isForShipping ? json['shippingStatus'] : json['selfPickUpStatus'];
shippingStatusEnum = isForShipping ? (json['shippingStatus'] != null ? (json['shippingStatus'] as int).toShippingStatusEnum() : ShippingRequestStatusEnum.initiated) : null;
selfPickupRequestStatusEnum =
isForShipping ? null : (json['selfPickUpStatus'] != null ? (json['selfPickUpStatus'] as int).toSelfPickupStatusEnum() : SelfPickupRequestStatusEnum.preparingToCollect);
deliveredorCollectedOn = isForShipping ? json['deliveredOn'] : json['collectedOn'];
comment = json['comment'];
createdOn = json['createdOn'];
customerID = json['customerID'];
customerName = json['customerName'];
vehicleTypeID = json['vehicleTypeID'];
vehicleType = json['vehicleType'];
}
}
class Request {
int? requestType;
String? brand;
String? model;
int? year;
bool? isNew;
String? description;
double? price;
Request({this.requestType, this.brand, this.model, this.year, this.isNew, this.description, this.price});
Request.fromJson(Map<String, dynamic> json) {
requestType = json['requestType'];
brand = json['brand'];
model = json['model'];
year = json['year'];
isNew = json['isNew'];
description = json['description'];
price = json['price'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['requestType'] = requestType;
data['brand'] = brand;
data['model'] = model;
data['year'] = year;
data['isNew'] = isNew;
data['description'] = description;
data['price'] = price;
return data;
}
}

@ -1,32 +0,0 @@
class BranchSelectionModel {
int branchId;
String branchName;
bool isSelected;
bool isOpend;
List<UserSelectionModel> usersList;
BranchSelectionModel
({
required
this
.
branchId,
required this.branchName,
required this.isSelected,
this.isOpend = false,
required this.usersList,
});
}
class UserSelectionModel {
int userId;
String userName;
bool isSelected;
UserSelectionModel(
{required this.userId, required this.userName, required this.isSelected});
}

@ -1,98 +0,0 @@
import 'dart:convert';
class ProviderSubscriptionModel {
int? id;
int? subscriptionAppliedId;
int? serviceProviderId;
String? subscriptionName;
String? subscriptionDescription;
DateTime? dateStart;
DateTime? dateEnd;
int? branchesRemaining;
int? subUsersRemaining;
int? subscriptionID;
int? adsRemaining;
bool? isExpired;
bool? isActive;
bool? isUpgradeNow;
bool? isUpgradeLater;
bool? isTrialSubscription;
dynamic currentSubscription;
int? totalBranches;
int? totalSubUsers;
int? totalAds;
ProviderSubscriptionModel({
this.id,
this.subscriptionAppliedId,
this.serviceProviderId,
this.subscriptionName,
this.subscriptionDescription,
this.dateStart,
this.dateEnd,
this.branchesRemaining,
this.subUsersRemaining,
this.adsRemaining,
this.isExpired,
this.isActive,
this.isUpgradeNow,
this.isUpgradeLater,
this.isTrialSubscription,
this.currentSubscription,
this.subscriptionID,
this.totalAds,
this.totalBranches,
this.totalSubUsers,
});
factory ProviderSubscriptionModel.fromRawJson(String str) => ProviderSubscriptionModel.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory ProviderSubscriptionModel.fromJson(Map<String, dynamic> json) => ProviderSubscriptionModel(
id: json["id"],
subscriptionAppliedId: json["subscriptionAppliedID"],
serviceProviderId: json["serviceProviderID"],
subscriptionID: json["subscriptionID"],
subscriptionName: json["subscriptionName"],
subscriptionDescription: json["subscriptionDescription"],
dateStart: json["dateStart"] == null ? null : DateTime.parse(json["dateStart"]),
dateEnd: json["dateEnd"] == null ? null : DateTime.parse(json["dateEnd"]),
branchesRemaining: json["branchesRemaining"],
subUsersRemaining: json["subUsersRemaining"],
adsRemaining: json["adsRemaining"],
isExpired: json["isExpired"],
isActive: json["isActive"],
isUpgradeNow: json["isUpgradeNow"],
isUpgradeLater: json["isUpgradeLater"],
isTrialSubscription: json["isTrialSubscription"],
currentSubscription: json["currentSubscription"],
totalBranches: json["totalBranches"],
totalAds: json["totalAds"],
totalSubUsers: json["totalSubUsers"],
);
Map<String, dynamic> toJson() => {
"id": id,
"subscriptionAppliedID": subscriptionAppliedId,
"serviceProviderID": serviceProviderId,
"subscriptionID": subscriptionID,
"subscriptionName": subscriptionName,
"subscriptionDescription": subscriptionDescription,
"dateStart": dateStart?.toIso8601String(),
"dateEnd": dateEnd?.toIso8601String(),
"branchesRemaining": branchesRemaining,
"subUsersRemaining": subUsersRemaining,
"adsRemaining": adsRemaining,
"isExpired": isExpired,
"isActive": isActive,
"isUpgradeNow": isUpgradeNow,
"isUpgradeLater": isUpgradeLater,
"isTrialSubscription": isTrialSubscription,
"currentSubscription": currentSubscription,
"totalAds": totalAds,
"totalSubUsers": totalSubUsers,
"totalBranches": totalBranches,
};
}

@ -4,12 +4,10 @@
import 'dart:convert'; import 'dart:convert';
import 'package:mc_common_app/extensions/string_extensions.dart';
import '../../utils/enums.dart';
Subscription subscriptionFromJson(String str) => Subscription.fromJson(json.decode(str)); Subscription subscriptionFromJson(String str) => Subscription.fromJson(json.decode(str));
String subscriptionToJson(Subscription data) => json.encode(data.toJson());
class SubscriptionModel { class SubscriptionModel {
SubscriptionModel({ SubscriptionModel({
this.messageStatus, this.messageStatus,
@ -29,17 +27,27 @@ class SubscriptionModel {
data: json["data"] == null ? [] : List<Subscription>.from(json["data"]!.map((x) => Subscription.fromJson(x))), data: json["data"] == null ? [] : List<Subscription>.from(json["data"]!.map((x) => Subscription.fromJson(x))),
message: json["message"], message: json["message"],
); );
Map<String, dynamic> toJson() => {
"messageStatus": messageStatus,
"totalItemsCount": totalItemsCount,
"data": data == null ? [] : List<dynamic>.from(data!.map((x) => x.toJson())),
"message": message,
};
} }
class Subscription { class Subscription {
Subscription( Subscription({
{this.id, this.id,
this.name, this.name,
this.description, this.description,
this.durationName, this.durationName,
this.durationDays, this.durationDays,
this.price, this.price,
this.currency, this.currency,
this.numberOfBranches,
this.numberOfSubUsers,
this.numberOfAds,
this.countryId, this.countryId,
this.countryName, this.countryName,
this.isSubscribed, this.isSubscribed,
@ -49,19 +57,7 @@ class Subscription {
this.dateEnd, this.dateEnd,
this.isExpired, this.isExpired,
this.isActive, this.isActive,
this.subscriptionTypeEnum, });
this.isMyCurrentPackage,
this.isRenewable,
this.subscriptionBranches,
this.subscriptionSubUsers,
this.subscriptionAds,
this.totalBranches,
this.totalSubUsers,
this.totalAds,
this.branchesRemaining,
this.subUsersRemaining,
this.subscriptionType,
this.adsRemaining});
int? id; int? id;
String? name; String? name;
@ -70,29 +66,18 @@ class Subscription {
int? durationDays; int? durationDays;
double? price; double? price;
String? currency; String? currency;
int? numberOfBranches;
int? numberOfSubUsers;
int? numberOfAds;
int? countryId; int? countryId;
String? countryName; String? countryName;
bool? isSubscribed; bool? isSubscribed;
int? subscriptionAppliedId; int? subscriptionAppliedId;
int? serviceProviderId; int? serviceProviderId;
String? dateStart; DateTime? dateStart;
String? dateEnd; DateTime? dateEnd;
bool? isExpired; bool? isExpired;
bool? isActive; bool? isActive;
SubscriptionTypeEnum? subscriptionTypeEnum;
bool? isMyCurrentPackage;
bool? isRenewable;
int? subscriptionType;
int? subscriptionBranches;
int? subscriptionSubUsers;
int? subscriptionAds;
int? totalBranches;
int? totalSubUsers;
int? totalAds;
int? branchesRemaining;
int? subUsersRemaining;
int? adsRemaining;
factory Subscription.fromJson(Map<String, dynamic> json) => Subscription( factory Subscription.fromJson(Map<String, dynamic> json) => Subscription(
id: json["id"], id: json["id"],
@ -102,27 +87,39 @@ class Subscription {
durationDays: json["durationDays"], durationDays: json["durationDays"],
price: json["price"]?.toDouble(), price: json["price"]?.toDouble(),
currency: json["currency"], currency: json["currency"],
numberOfBranches: json["numberOfBranches"],
numberOfSubUsers: json["numberOfSubUsers"],
numberOfAds: json["numberOfAds"],
countryId: json["countryID"], countryId: json["countryID"],
countryName: json["countryName"], countryName: json["countryName"]!,
isSubscribed: json["isSubscribed"], isSubscribed: json["isSubscribed"],
subscriptionAppliedId: json["subscriptionAppliedID"], subscriptionAppliedId: json["subscriptionAppliedID"],
serviceProviderId: json["serviceProviderID"], serviceProviderId: json["serviceProviderID"],
dateStart: json["dateStart"], dateStart: json["dateStart"] == null ? null : DateTime.parse(json["dateStart"]),
dateEnd: json["dateEnd"], dateEnd: json["dateEnd"] == null ? null : DateTime.parse(json["dateEnd"]),
isExpired: json["isExpired"], isExpired: json["isExpired"],
isActive: json["isActive"], isActive: json["isActive"],
isMyCurrentPackage: false,
isRenewable: json["isRenewable"],
subscriptionTypeEnum: json["subscriptionType"] == null ? null : ((json['subscriptionType']) as int).toSubscriptionTypeEnum(),
subscriptionBranches: json["subscriptionBranches"],
subscriptionSubUsers: json["subscriptionSubUsers"],
subscriptionAds: json["subscriptionAds"],
totalBranches: json["totalBranches"],
totalSubUsers: json["totalBranches"],
totalAds: json["totalAds"],
branchesRemaining: json["branchesRemaining"],
subUsersRemaining: json["subUsersRemaining"],
adsRemaining: json["adsRemaining"],
subscriptionType: json["subscriptionType"],
); );
Map<String, dynamic> toJson() => {
"id": id,
"name": name,
"description": description,
"durationName": durationName,
"durationDays": durationDays,
"price": price,
"currency": currency,
"numberOfBranches": numberOfBranches,
"numberOfSubUsers": numberOfSubUsers,
"numberOfAds": numberOfAds,
"countryID": countryId,
"countryName": countryName,
"isSubscribed": isSubscribed,
"subscriptionAppliedID": subscriptionAppliedId,
"serviceProviderID": serviceProviderId,
"dateStart": dateStart?.toIso8601String(),
"dateEnd": dateEnd?.toIso8601String(),
"isExpired": isExpired,
"isActive": isActive,
};
} }

@ -3,12 +3,11 @@ class BranchUser {
String? userId; String? userId;
int? serviceProviderId; int? serviceProviderId;
int? dealershipUserID; int? dealershipUserID;
String? firstName; String firstName;
String? lastName; String lastName;
String? mobileNo; String mobileNo;
String? email; String email;
bool? isBranchUser; bool isBranchUser;
int? serviceProviderBranchID;
BranchUser({ BranchUser({
required this.id, required this.id,
@ -20,27 +19,19 @@ class BranchUser {
required this.mobileNo, required this.mobileNo,
required this.email, required this.email,
required this.isBranchUser, required this.isBranchUser,
this.serviceProviderBranchID,
}); });
factory BranchUser.fromJson(Map<String, dynamic> json) => BranchUser( factory BranchUser.fromJson(Map<String, dynamic> json) =>
BranchUser(
id: json["id"], id: json["id"],
userId: json.containsKey("userID") ? json["userID"] : null, userId: json.containsKey("userID") ? json["userID"] : null,
serviceProviderId: json.containsKey("serviceProviderID") serviceProviderId: json.containsKey("serviceProviderID") ? json["serviceProviderID"] : null,
? json["serviceProviderID"] dealershipUserID: json.containsKey("dealershipUserID") ? json["dealershipUserID"] : null,
: null, firstName: json["firstName"],
dealershipUserID: json.containsKey("dealershipUserID") lastName: json["lastName"],
? json["dealershipUserID"] mobileNo: json["mobileNo"],
: null, email: json["email"],
firstName: json.containsKey("firstName") ? json["firstName"] : null, isBranchUser: json.containsKey("isBranchUser") ? json["isBranchUser"] : false,
lastName: json.containsKey("lastName") ? json["lastName"] : null,
mobileNo: json.containsKey("mobileNo") ? json["mobileNo"] : null,
email: json.containsKey("email") ? json["email"] : null,
isBranchUser:
json.containsKey("isBranchUser") ? json["isBranchUser"] : false,
serviceProviderBranchID: json.containsKey("serviceProviderBranchID")
? json["serviceProviderBranchID"]
: null,
); );
Map<String, dynamic> toJson() => Map<String, dynamic> toJson() =>

@ -22,17 +22,17 @@ class Role {
String? message; String? message;
factory Role.fromJson(Map<String, dynamic> json) => Role( factory Role.fromJson(Map<String, dynamic> json) => Role(
totalItemsCount: json["totalItemsCount"], totalItemsCount: json["totalItemsCount"] == null ? null : json["totalItemsCount"],
data: json["data"] == null ? null : List<RoleData>.from(json["data"].map((x) => RoleData.fromJson(x))), data: json["data"] == null ? null : List<RoleData>.from(json["data"].map((x) => RoleData.fromJson(x))),
messageStatus: json["messageStatus"], messageStatus: json["messageStatus"] == null ? null : json["messageStatus"],
message: json["message"], message: json["message"] == null ? null : json["message"],
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"totalItemsCount": totalItemsCount, "totalItemsCount": totalItemsCount == null ? null : totalItemsCount,
"data": data == null ? null : List<dynamic>.from(data!.map((x) => x.toJson())), "data": data == null ? null : List<dynamic>.from(data!.map((x) => x.toJson())),
"messageStatus": messageStatus, "messageStatus": messageStatus == null ? null : messageStatus,
"message": message, "message": message == null ? null : message,
}; };
} }
@ -50,16 +50,16 @@ class RoleData {
bool? isActive; bool? isActive;
factory RoleData.fromJson(Map<String, dynamic> json) => RoleData( factory RoleData.fromJson(Map<String, dynamic> json) => RoleData(
id: json["id"], id: json["id"] == null ? null : json["id"],
roleName: json["roleName"], roleName: json["roleName"] == null ? null : json["roleName"],
roleNameN: json["roleNameN"], roleNameN: json["roleNameN"] == null ? null : json["roleNameN"],
isActive: json["isActive"], isActive: json["isActive"] == null ? null : json["isActive"],
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"id": id, "id": id == null ? null : id,
"roleName": roleName, "roleName": roleName == null ? null : roleName,
"roleNameN": roleNameN, "roleNameN": roleNameN == null ? null : roleNameN,
"isActive": isActive, "isActive": isActive == null ? null : isActive,
}; };
} }

@ -3,7 +3,6 @@
// final user = userFromJson(jsonString); // final user = userFromJson(jsonString);
import 'dart:convert'; import 'dart:convert';
import 'dart:io';
import '../../classes/app_state.dart'; import '../../classes/app_state.dart';
import '../../utils/enums.dart'; import '../../utils/enums.dart';
@ -25,18 +24,16 @@ class User {
int? messageStatus; int? messageStatus;
String? message; String? message;
factory User.fromJson(Map<String, dynamic> json) => factory User.fromJson(Map<String, dynamic> json) => User(
User(
totalItemsCount: json["totalItemsCount"], totalItemsCount: json["totalItemsCount"],
data: json["data"] == null ? null : UserData.fromJson(json["data"]), data: json["data"] == null ? null : UserData.fromJson(json["data"]),
messageStatus: json["messageStatus"], messageStatus: json["messageStatus"],
message: json["message"], message: json["message"],
); );
Map<String, dynamic> toJson() => Map<String, dynamic> toJson() => {
{
"totalItemsCount": totalItemsCount, "totalItemsCount": totalItemsCount,
"data": data?.toJson(), "data": data == null ? null : data!.toJson(),
"messageStatus": messageStatus, "messageStatus": messageStatus,
"message": message, "message": message,
}; };
@ -55,25 +52,24 @@ class UserData {
DateTime? expiryDate; DateTime? expiryDate;
UserInfo? userInfo; UserInfo? userInfo;
factory UserData.fromJson(Map<String, dynamic> json) => factory UserData.fromJson(Map<String, dynamic> json) => UserData(
UserData(
accessToken: json["accessToken"], accessToken: json["accessToken"],
refreshToken: json["refreshToken"], refreshToken: json["refreshToken"],
expiryDate: json["expiryDate"] == null ? null : DateTime.parse(json["expiryDate"]), expiryDate: json["expiryDate"] == null ? null : DateTime.parse(json["expiryDate"]),
userInfo: json["userInfo"] == null ? null : UserInfo.fromJson(json["userInfo"]), userInfo: json["userInfo"] == null ? null : UserInfo.fromJson(json["userInfo"]),
); );
Map<String, dynamic> toJson() => Map<String, dynamic> toJson() => {
{
"accessToken": accessToken, "accessToken": accessToken,
"refreshToken": refreshToken, "refreshToken": refreshToken,
"expiryDate": expiryDate?.toIso8601String(), "expiryDate": expiryDate == null ? null : expiryDate!.toIso8601String(),
"userInfo": userInfo?.toJson(), "userInfo": userInfo == null ? null : userInfo!.toJson(),
}; };
} }
class UserInfo { class UserInfo {
UserInfo({this.id, UserInfo({
this.id,
this.userId, this.userId,
this.firstName, this.firstName,
this.lastName, this.lastName,
@ -82,8 +78,6 @@ class UserInfo {
this.userImageUrl, this.userImageUrl,
this.roleId, this.roleId,
this.roleName, this.roleName,
this.genderID,
this.genderName,
this.isEmailVerified, this.isEmailVerified,
this.serviceProviderBranch, this.serviceProviderBranch,
this.isVerified, this.isVerified,
@ -93,23 +87,13 @@ class UserInfo {
this.isDealershipUser, this.isDealershipUser,
this.providerId, this.providerId,
this.customerId, this.customerId,
this.countryId,
this.cityId,
this.dealershipId, this.dealershipId,
this.userLocalImage,
this.cityName,
this.countryName,
}); });
int? id; int? id;
String? userId; String? userId;
String? firstName; String? firstName;
String? lastName; String? lastName;
String? countryName;
String? cityName;
int? genderID;
String? genderName;
String? mobileNo; String? mobileNo;
String? email; String? email;
dynamic userImageUrl; dynamic userImageUrl;
@ -124,18 +108,13 @@ class UserInfo {
bool? isDealershipUser; bool? isDealershipUser;
dynamic providerId; dynamic providerId;
int? customerId; int? customerId;
int? cityId;
int? countryId;
dynamic dealershipId; dynamic dealershipId;
File? userLocalImage;
UserInfo.fromJson(Map<String, dynamic> json) { UserInfo.fromJson(Map<String, dynamic> json) {
if (json["roleID"] == 5) { if (json["roleID"] == 5) {
AppState().userType = UserType.providerDealer; AppState().userType = UserType.providerDealer;
} else if (json["roleID"] == 6) { } else if (json["roleID"] == 6) {
AppState().userType = UserType.providerIndividual; AppState().userType = UserType.providerIndividual;
} else if (json["roleID"] == 7) {
AppState().userType = UserType.providerIndividual;
} else { } else {
AppState().userType = UserType.customer; AppState().userType = UserType.customer;
} }
@ -143,10 +122,6 @@ class UserInfo {
userId = json["userID"]; userId = json["userID"];
firstName = json["firstName"]; firstName = json["firstName"];
lastName = json["lastName"]; lastName = json["lastName"];
cityName = json["cityName"];
genderID = json["genderID"];
genderName = json["genderName"];
countryName = json["countryName"];
mobileNo = json["mobileNo"]; mobileNo = json["mobileNo"];
email = json["email"]; email = json["email"];
userImageUrl = json["userImageUrl"]; userImageUrl = json["userImageUrl"];
@ -161,10 +136,7 @@ class UserInfo {
isDealershipUser = json["isDealershipUser"]; isDealershipUser = json["isDealershipUser"];
providerId = json["providerID"]; providerId = json["providerID"];
customerId = json["customerID"]; customerId = json["customerID"];
countryId = json["countryId"] ?? 1;
cityId = json["cityId"] ?? 1;
dealershipId = json["dealershipID"]; dealershipId = json["dealershipID"];
userLocalImage = null;
} }
// factory UserInfo.fromJson(Map<String, dynamic> json) => UserInfo( // factory UserInfo.fromJson(Map<String, dynamic> json) => UserInfo(
@ -189,14 +161,11 @@ class UserInfo {
// dealershipId: json["dealershipID"], // dealershipId: json["dealershipID"],
// ); // );
Map<String, dynamic> toJson() => Map<String, dynamic> toJson() => {
{
"id": id, "id": id,
"userID": userId, "userID": userId,
"firstName": firstName, "firstName": firstName,
"lastName": lastName, "lastName": lastName,
"countryName": countryName,
"cityName": cityName,
"mobileNo": mobileNo, "mobileNo": mobileNo,
"email": email, "email": email,
"userImageUrl": userImageUrl, "userImageUrl": userImageUrl,
@ -212,12 +181,5 @@ class UserInfo {
"providerID": providerId, "providerID": providerId,
"customerID": customerId, "customerID": customerId,
"dealershipID": dealershipId, "dealershipID": dealershipId,
"genderName": genderName,
"genderID": genderID
}; };
@override
String toString() {
return 'UserInfo{id: $id, userId: $userId, firstName: $firstName, lastName: $lastName, mobileNo: $mobileNo, email: $email, userImageUrl: $userImageUrl, roleId: $roleId, roleName: $roleName, isEmailVerified: $isEmailVerified, serviceProviderBranch: $serviceProviderBranch, isVerified: $isVerified, userRoles: $userRoles, isCustomer: $isCustomer, isProviderDealership: $isProviderDealership, isDealershipUser: $isDealershipUser, providerId: $providerId, customerId: $customerId, dealershipId: $dealershipId, userLocalImage: $userLocalImage}';
}
} }

@ -1,57 +1,55 @@
import 'dart:developer'; import 'dart:developer';
import 'package:easy_localization/easy_localization.dart';
import 'package:mc_common_app/api/api_client.dart'; import 'package:mc_common_app/api/api_client.dart';
import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/dependency_injection.dart'; import 'package:mc_common_app/config/dependencies.dart';
import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart'; import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart';
import 'package:mc_common_app/models/advertisment_models/ads_bank_details_model.dart'; import 'package:mc_common_app/models/advertisment_models/ads_bank_details_model.dart';
import 'package:mc_common_app/models/advertisment_models/ads_duration_model.dart'; import 'package:mc_common_app/models/advertisment_models/ads_duration_model.dart';
import 'package:mc_common_app/models/advertisment_models/pdf_receipt_model.dart';
import 'package:mc_common_app/models/advertisment_models/reserved_ads_models.dart'; import 'package:mc_common_app/models/advertisment_models/reserved_ads_models.dart';
import 'package:mc_common_app/models/advertisment_models/special_service_model.dart'; import 'package:mc_common_app/models/advertisment_models/special_service_model.dart';
import 'package:mc_common_app/models/chat_models/buyers_chat_for_ads_model.dart'; import 'package:mc_common_app/models/advertisment_models/vehicle_details_models.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/utils.dart';
abstract class AdsRepo { abstract class AdsRepo {
Future<List<AdsDurationModel>> getAdsDuration({required int? countryId}); Future<List<VehicleTypeModel>> getVehicleTypes();
Future<List<SpecialServiceModel>> getSpecialServices({required int specialServiceType, required int cityId, required int countryId}); Future<List<VehicleBrandsModel>> getVehicleBrands({required int vehicleTypeId});
Future<GenericRespModel> createOrUpdateAd({required AdsCreationPayloadModel adsCreationPayloadModel, required bool isCreateNew, required bool isExtendAdEditEnabled}); Future<List<VehicleModel>> getVehicleModels({required int vehicleTypeId});
Future<GenericRespModel> createOrUpdateDraftAd({required AdsCreationPayloadModel adsCreationPayloadModel, required bool isCreateNew, required AdCreationStepsEnum stepNo}); Future<List<VehicleYearModel>> getVehicleModelYears({required int vehicleTypeId});
Future<List<AdDetailsModel>> getAllAds({ Future<List<VehicleColorModel>> getVehicleColors({required int vehicleTypeId});
required bool isMyAds,
AdPostStatus? adPostStatus,
CreatedByRoleEnum? createdByRoleEnum,
int? vehicleBrandId,
int? page,
});
Future<List<AdDetailsModel>> getMyDraftAds({int? page}); Future<List<VehicleConditionModel>> getVehicleConditions({required int vehicleTypeId});
Future<List<AdDetailsModel>> getExploreAdsBasedOnFilters({ Future<List<VehicleCategoryModel>> getVehicleCategories({required int vehicleTypeId});
List<String>? adIdsList,
List<String>? cityIdsList, Future<List<VehicleMileageModel>> getVehicleMileages({required int vehicleTypeId});
List<String>? vehicleModelYearIdsList,
List<String>? vehicleTypeIdsList, Future<List<VehicleTransmissionModel>> getVehicleTransmission({required int vehicleTypeId});
List<String>? vehicleBrandIdsList,
List<String>? createdByRolesIdsList, Future<List<VehicleSellerTypeModel>> getVehicleSellerTypes({required int vehicleTypeId});
List<String>? vehicleAdConditionIdsList,
List<String>? vehicleAdCreatedDateList, Future<List<VehicleCountryModel>> getVehicleCountries();
List<String>? mobileNumbersList,
int? startPriceDemand, Future<List<VehicleCityModel>> getVehicleCities({required int countryId});
int? endPriceDemand,
int page, Future<List<VehiclePartModel>> getVehicleDamageParts();
bool isMyAds = false,
}); Future<VehicleDetailsModel> getVehicleDetails({required int vehicleTypeId, required int vehicleBrandId});
Future<List<AdsDurationModel>> getAdsDuration();
Future<List<SpecialServiceModel>> getSpecialServices({required int specialServiceId});
Future<GenericRespModel> createNewAd({required AdsCreationPayloadModel adsCreationPayloadModel});
Future<List<AdDetailsModel>> getAllAds({required bool isMyAds});
Future<List<AdDetailsModel>> getMyReservedAds(); Future<List<AdDetailsModel>> getMyReservedAds();
@ -59,7 +57,7 @@ abstract class AdsRepo {
Future<AdsBankDetailsModel?> getAdBankingAccountInfo({required int adId}); Future<AdsBankDetailsModel?> getAdBankingAccountInfo({required int adId});
Future<GenericRespModel> updateAdStatus({required int adId, required AdPostStatus adStatusToUpdate, String? comment}); Future<GenericRespModel> updateAdStatus({required int adId, required AdPostStatus adStatusToUpdate});
Future<GenericRespModel> createAppointmentForAdSpecialService({required int adId, required int photoOfficeID, required int photoOfficeSlotID, required int adsSpecialServiceID}); Future<GenericRespModel> createAppointmentForAdSpecialService({required int adId, required int photoOfficeID, required int photoOfficeSlotID, required int adsSpecialServiceID});
@ -68,12 +66,6 @@ abstract class AdsRepo {
Future<GenericRespModel> cancelMyAdReservation({required int adId, required int adsReserveStatus, required String reason}); Future<GenericRespModel> cancelMyAdReservation({required int adId, required int adsReserveStatus, required String reason});
Future<GenericRespModel> createReserveAd({required int adId}); Future<GenericRespModel> createReserveAd({required int adId});
Future<GenericRespModel> uploadBankReceiptsOnReserveDealDone({required int adId, required String detailNote, required List<PdfReceiptModel> pdfReceiptsList});
Future<List<BuyersChatForAdsModel>> getChatBuyersForAds({required int adsID});
Future<GenericRespModel> createAdExtensionOrder({required int adID, required List<int> specialServiceIds, required int adsDurationId});
} }
class AdsRepoImp implements AdsRepo { class AdsRepoImp implements AdsRepo {
@ -81,192 +73,254 @@ class AdsRepoImp implements AdsRepo {
AppState appState = injector.get<AppState>(); AppState appState = injector.get<AppState>();
@override @override
Future<List<AdsDurationModel>> getAdsDuration({required int? countryId}) async { Future<List<VehicleTypeModel>> getVehicleTypes() async {
int roleID = appState.getUser.data!.userInfo!.roleId ?? 0; GenericRespModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleTypeGet);
var param = { List<VehicleTypeModel> vehicleTypes = List.generate(adsGenericModel.data.length, (index) => VehicleTypeModel.fromJson(adsGenericModel.data[index]));
return vehicleTypes;
}
@override
Future<List<VehicleCategoryModel>> getVehicleCategories({required int vehicleTypeId}) async {
var postParams = {
"VehicleType": vehicleTypeId.toString(),
};
GenericRespModel adsGenericModel =
await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleCategoryGet, queryParameters: postParams);
List<VehicleCategoryModel> vehicleCategories = List.generate(adsGenericModel.data.length, (index) => VehicleCategoryModel.fromJson(adsGenericModel.data[index]));
return vehicleCategories;
}
@override
Future<List<VehicleCityModel>> getVehicleCities({required int countryId}) async {
var postParams = {
"CountryID": countryId.toString(), "CountryID": countryId.toString(),
"roleID": roleID.toString(),
}; };
GenericRespModel adsGenericModel = await apiClient.getJsonForObject( GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken, token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleCityGet, queryParameters: countryId != -1 ? postParams : null);
(json) => GenericRespModel.fromJson(json), List<VehicleCityModel> vehicleCities = List.generate(adsGenericModel.data.length, (index) => VehicleCityModel.fromJson(adsGenericModel.data[index]));
queryParameters: param, return vehicleCities;
ApiConsts.vehicleAdsDurationGet,
);
List<AdsDurationModel> vehicleAdsDuration = List.generate(adsGenericModel.data.length, (index) => AdsDurationModel.fromJson(adsGenericModel.data[index]));
return vehicleAdsDuration;
} }
@override @override
Future<List<SpecialServiceModel>> getSpecialServices({required int specialServiceType, required int cityId, required int countryId}) async { Future<List<VehicleColorModel>> getVehicleColors({required int vehicleTypeId}) async {
log("getSpecialServices cityId: $cityId"); var postParams = {
var params = { "VehicleType": vehicleTypeId.toString(),
"SpecialServiceType": specialServiceType.toString(),
"CountryID": countryId.toString(),
}; };
GenericRespModel adsGenericModel = GenericRespModel adsGenericModel =
await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleAdsSpecialServicesGet, queryParameters: params); await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleColorGet, queryParameters: postParams);
List<SpecialServiceModel> list = List.generate(adsGenericModel.data.length, (index) => SpecialServiceModel.fromJson(adsGenericModel.data[index])); List<VehicleColorModel> vehicleColors = List.generate(adsGenericModel.data.length, (index) => VehicleColorModel.fromJson(adsGenericModel.data[index]));
return vehicleColors;
List<SpecialServiceModel> specialServicesByCity = getOfficesOnlyByCity(list, cityId);
return specialServicesByCity;
} }
List<SpecialServiceModel> getOfficesOnlyByCity(List<SpecialServiceModel> allServices, int cityId) { @override
List<SpecialServiceModel> list = []; Future<List<VehicleConditionModel>> getVehicleConditions({required int vehicleTypeId}) async {
var postParams = {
for (var service in allServices) { "VehicleType": vehicleTypeId.toString(),
if (service.office != null && service.office!.isNotEmpty) { };
for (var office in service.office!) { GenericRespModel adsGenericModel =
if (office.cityID == cityId) { await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleConditionGet, queryParameters: postParams);
list.add(service); List<VehicleConditionModel> vehicleConditions = List.generate(adsGenericModel.data.length, (index) => VehicleConditionModel.fromJson(adsGenericModel.data[index]));
} return vehicleConditions;
}
}
} }
return list;
@override
Future<List<VehicleCountryModel>> getVehicleCountries() async {
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json),
ApiConsts.vehicleCountryGet,
);
List<VehicleCountryModel> vehicleConditions = List.generate(adsGenericModel.data.length, (index) => VehicleCountryModel.fromJson(adsGenericModel.data[index]));
return vehicleConditions;
} }
@override @override
Future<GenericRespModel> createOrUpdateAd({required AdsCreationPayloadModel adsCreationPayloadModel, required bool isCreateNew, required bool isExtendAdEditEnabled}) async { Future<List<VehicleMileageModel>> getVehicleMileages({required int vehicleTypeId}) async {
List vehiclePostingImages = []; var postParams = {
"VehicleType": vehicleTypeId.toString(),
};
GenericRespModel adsGenericModel =
await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleMileageGet, queryParameters: postParams);
List<VehicleMileageModel> vehicleMileages = List.generate(adsGenericModel.data.length, (index) => VehicleMileageModel.fromJson(adsGenericModel.data[index]));
return vehicleMileages;
}
log("isExtendAdEditEnabled: $isExtendAdEditEnabled"); @override
log("adsCreationPayloadModel.ads!.adsDurationID,: ${adsCreationPayloadModel.ads!.adsDurationID}"); Future<List<VehicleYearModel>> getVehicleModelYears({required int vehicleTypeId}) async {
adsCreationPayloadModel.vehiclePosting!.vehiclePostingImages?.forEach((element) { var postParams = {
var imageMap = { "VehicleType": vehicleTypeId.toString(),
"id": element.id ?? 0,
"imageName": element.imageName,
"imageUrl": element.imageUrl,
"imageStr": element.imageStr,
"vehiclePostingID": isCreateNew ? 0 : element.vehiclePostingID ?? 0,
"vehiclePosting": null,
}; };
vehiclePostingImages.add(imageMap); GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
}); token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json),
ApiConsts.vehicleModelYearGet,
queryParameters: vehicleTypeId != -1 ? postParams : null,
);
List<VehicleYearModel> vehicleModelYears = List.generate(adsGenericModel.data.length, (index) => VehicleYearModel.fromJson(adsGenericModel.data[index]));
return vehicleModelYears;
}
List vehiclePostingDamageParts = []; @override
Future<List<VehicleModel>> getVehicleModels({required int vehicleTypeId}) async {
var postParams = {
"VehicleType": vehicleTypeId.toString(),
};
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json),
ApiConsts.vehicleModelGet,
queryParameters: postParams,
);
List<VehicleModel> vehicleModels = List.generate(adsGenericModel.data.length, (index) => VehicleModel.fromJson(adsGenericModel.data[index]));
return vehicleModels;
}
int sellerTypeID = AppState().getUser.data!.userInfo!.roleId ?? 0; @override
Future<List<VehicleBrandsModel>> getVehicleBrands({required int vehicleTypeId}) async {
var postParams = {
"VehicleType": vehicleTypeId.toString(),
};
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json),
ApiConsts.vehicleBrandGet,
queryParameters: vehicleTypeId != -1 ? postParams : null,
);
List<VehicleBrandsModel> vehicleBrands = List.generate(adsGenericModel.data.length, (index) => VehicleBrandsModel.fromJson(adsGenericModel.data[index]));
return vehicleBrands;
}
adsCreationPayloadModel.vehiclePosting!.vehiclePostingDamageParts?.forEach((element) { @override
log("comment: ${element.comment}"); Future<List<VehicleSellerTypeModel>> getVehicleSellerTypes({required int vehicleTypeId}) async {
var imageMap = { var postParams = {
"id": element.id ?? 0, "VehicleType": vehicleTypeId.toString(),
"comment": element.comment,
"vehicleImageBase64": element.vehicleImageBase64,
"vehicleDamagePartID": element.vehicleDamagePartID,
"vehiclePostingID": isCreateNew ? 0 : element.vehiclePostingID ?? 0,
"isActive": true
}; };
vehiclePostingDamageParts.add(imageMap); GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
}); token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json),
ApiConsts.vehicleSellerTypeGet,
queryParameters: postParams,
);
List<VehicleSellerTypeModel> vehicleSellerTypes = List.generate(adsGenericModel.data.length, (index) => VehicleSellerTypeModel.fromJson(adsGenericModel.data[index]));
return vehicleSellerTypes;
}
@override
Future<List<VehicleTransmissionModel>> getVehicleTransmission({required int vehicleTypeId}) async {
var postParams = { var postParams = {
"ads": { "VehicleType": vehicleTypeId.toString(),
"id": isCreateNew ? 0 : adsCreationPayloadModel.ads!.id ?? 0, };
"adsDurationID": adsCreationPayloadModel.ads!.adsDurationID, GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
"startDate": adsCreationPayloadModel.ads!.startDate, token: appState.getUser.data!.accessToken,
"countryId": adsCreationPayloadModel.ads!.countryId, (json) => GenericRespModel.fromJson(json),
"specialServiceIDs": adsCreationPayloadModel.ads!.specialServiceIDs, ApiConsts.vehicleTransmissionGet,
"isMCHandled": false, queryParameters: postParams,
"showContactDetail": adsCreationPayloadModel.ads!.showContactDetail ?? false, );
"isOnWhatsApp": adsCreationPayloadModel.ads!.isOnWhatsApp ?? false, List<VehicleTransmissionModel> vehicleTransmissions = List.generate(adsGenericModel.data.length, (index) => VehicleTransmissionModel.fromJson(adsGenericModel.data[index]));
}, return vehicleTransmissions;
"vehiclePosting": {
"id": isCreateNew ? 0 : adsCreationPayloadModel.vehiclePosting!.id ?? 0,
"userID": adsCreationPayloadModel.vehiclePosting!.userID,
"vehicleType": adsCreationPayloadModel.vehiclePosting!.vehicleType,
"vehicleModelID": adsCreationPayloadModel.vehiclePosting!.vehicleModelID,
"vehicleModelYearID": adsCreationPayloadModel.vehiclePosting!.vehicleModelYearID,
"vehicleColorID": adsCreationPayloadModel.vehiclePosting!.vehicleColorID,
"vehicleCategoryID": adsCreationPayloadModel.vehiclePosting!.vehicleCategoryID,
"vehicleConditionID": adsCreationPayloadModel.vehiclePosting!.vehicleConditionID,
"vehicleMileageID": adsCreationPayloadModel.vehiclePosting!.vehicleMileageID,
"vehicleTransmissionID": adsCreationPayloadModel.vehiclePosting!.vehicleTransmissionID,
"vehicleSellerTypeID": sellerTypeID,
"cityID": adsCreationPayloadModel.vehiclePosting!.cityID,
"price": adsCreationPayloadModel.vehiclePosting!.price,
"vehicleVIN": adsCreationPayloadModel.vehiclePosting!.vehicleVIN,
"vehicleDescription": adsCreationPayloadModel.vehiclePosting!.vehicleDescription,
"vehicleTitle": adsCreationPayloadModel.vehiclePosting!.vehicleTitle,
"vehicleDescriptionN": adsCreationPayloadModel.vehiclePosting!.vehicleDescription,
"isFinanceAvailable": adsCreationPayloadModel.vehiclePosting!.isFinanceAvailable,
"warantyYears": adsCreationPayloadModel.vehiclePosting!.warantyYears,
"demandAmount": adsCreationPayloadModel.vehiclePosting!.demandAmount,
// "adStatus": 1,
"vehiclePostingImages": vehiclePostingImages,
"vehiclePostingDamageParts": vehiclePostingDamageParts,
"mobileNo": adsCreationPayloadModel.vehiclePosting!.phoneNo,
"whatsAppNo": adsCreationPayloadModel.vehiclePosting!.whatsAppNo,
} }
@override
Future<VehicleDetailsModel> getVehicleDetails({required int vehicleTypeId, required int vehicleBrandId}) async {
var postParams = {
"vehicleType": vehicleTypeId.toString(),
"isVehicleBrand": "true",
"vehicleBrand": vehicleBrandId.toString(),
"isVehicleCategory": "true",
"isVehicleColor": "true",
"isVehicleCondition": "true",
"isVehicleMileage": "true",
"isVehicleModel": "true",
"isVehicleModelYear": "true",
"isVehiclePriceRange": "true",
"isVehiclePricingMethod": "true",
"isVehcileSellerType": "true",
"isVehicleTransmission": "true",
"isCountry": "true"
}; };
String token = appState.getUser.data!.accessToken ?? ""; String token = appState.getUser.data!.accessToken ?? "";
GenericRespModel adsGenericModel = await apiClient.postJsonForObject( GenericRespModel adsGenericModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
isExtendAdEditEnabled ApiConsts.vehicleDetailsMaster,
? ApiConsts.vehicleAdsSingleStepUpdateExtend
: isCreateNew
? ApiConsts.vehicleAdsSingleStepCreate
: ApiConsts.vehicleAdsSingleStepUpdate,
postParams, postParams,
token: token, token: token,
); );
VehicleDetailsModel vehicleDetails = VehicleDetailsModel.fromJson(adsGenericModel.data);
return vehicleDetails;
}
return Future.value(adsGenericModel); @override
Future<List<VehiclePartModel>> getVehicleDamageParts() async {
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json),
ApiConsts.vehicleDamagePartGet,
);
List<VehiclePartModel> vehicleParts = List.generate(adsGenericModel.data.length, (index) => VehiclePartModel.fromJson(adsGenericModel.data[index]));
return vehicleParts;
} }
@override @override
Future<GenericRespModel> createOrUpdateDraftAd({required AdsCreationPayloadModel adsCreationPayloadModel, required bool isCreateNew, required AdCreationStepsEnum stepNo}) async { Future<List<AdsDurationModel>> getAdsDuration() async {
int sellerTypeID = AppState().getUser.data!.userInfo!.roleId ?? 0; GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json),
ApiConsts.vehicleAdsDurationGet,
);
List<AdsDurationModel> vehicleAdsDuration = List.generate(adsGenericModel.data.length, (index) => AdsDurationModel.fromJson(adsGenericModel.data[index]));
return vehicleAdsDuration;
}
List vehiclePostingImages = []; @override
List vehiclePostingDamageParts = []; Future<List<SpecialServiceModel>> getSpecialServices({required int specialServiceId}) async {
var params = {
"SpecialServiceType": specialServiceId.toString(),
};
GenericRespModel adsGenericModel =
await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleAdsSpecialServicesGet, queryParameters: params);
List<SpecialServiceModel> vehicleAdsDuration = List.generate(adsGenericModel.data.length, (index) => SpecialServiceModel.fromJson(adsGenericModel.data[index]));
return vehicleAdsDuration;
}
if (adsCreationPayloadModel.vehiclePosting!.vehiclePostingImages != null) { @override
adsCreationPayloadModel.vehiclePosting!.vehiclePostingImages?.forEach( Future<GenericRespModel> createNewAd({required AdsCreationPayloadModel adsCreationPayloadModel}) async {
(element) { List vehiclePostingImages = [];
adsCreationPayloadModel.vehiclePosting!.vehiclePostingImages?.forEach((element) {
var imageMap = { var imageMap = {
"id": element.id ?? 0, "id": 0,
"imageName": element.imageName, "imageName": element.imageName,
"imageUrl": element.imageUrl, "imageUrl": element.imageUrl,
"imageStr": element.imageStr, "imageStr": element.imageStr,
"vehiclePostingDraftID": element.vehiclePostingID ?? 0, "vehiclePostingID": 0,
"vehiclePosting": null, "vehiclePosting": null,
}; };
vehiclePostingImages.add(imageMap); vehiclePostingImages.add(imageMap);
}, });
);
}
if (adsCreationPayloadModel.vehiclePosting!.vehiclePostingDamageParts != null) { List vehiclePostingDamageParts = [];
adsCreationPayloadModel.vehiclePosting!.vehiclePostingDamageParts?.forEach((element) { adsCreationPayloadModel.vehiclePosting!.vehiclePostingDamageParts?.forEach((element) {
var imageMap = { var imageMap = {
"id": element.id ?? 0, "id": 0,
"comment": element.comment, "comment": element.comment,
"vehicleImageBase64": element.vehicleImageBase64, "vehicleImageBase64": element.vehicleImageBase64,
"vehicleDamagePartID": element.vehicleDamagePartID, "vehicleDamagePartID": element.vehicleDamagePartID,
"vehiclePostingDraftID": element.vehiclePostingID ?? 0, "vehiclePostingID": 0,
"isActive": true "isActive": true
}; };
vehiclePostingDamageParts.add(imageMap); vehiclePostingDamageParts.add(imageMap);
}); });
}
var postParams = { var postParams = {
"adsDraft": { "ads": {
"id": adsCreationPayloadModel.ads!.id ?? 0, "id": 0,
"adsDurationID": adsCreationPayloadModel.ads!.adsDurationID, "adsDurationID": adsCreationPayloadModel.ads!.adsDurationID,
"startDate": adsCreationPayloadModel.ads!.startDate, "startDate": adsCreationPayloadModel.ads!.startDate,
"countryId": adsCreationPayloadModel.ads!.countryId, "countryId": adsCreationPayloadModel.ads!.countryId,
"specialServiceIDs": adsCreationPayloadModel.ads!.specialServiceIDs, "specialServiceIDs": adsCreationPayloadModel.ads!.specialServiceIDs,
"isMCHandled": false, "isMCHandled": false
"showContactDetail": adsCreationPayloadModel.ads!.showContactDetail ?? false,
"isOnWhatsApp": adsCreationPayloadModel.ads!.isOnWhatsApp ?? false,
}, },
"vehiclePostingDraft": { "vehiclePosting": {
"id": adsCreationPayloadModel.vehiclePosting!.id ?? 0, "id": 0,
"userID": adsCreationPayloadModel.vehiclePosting!.userID, "userID": adsCreationPayloadModel.vehiclePosting!.userID,
"vehicleType": adsCreationPayloadModel.vehiclePosting!.vehicleType, "vehicleType": adsCreationPayloadModel.vehiclePosting!.vehicleType,
"vehicleModelID": adsCreationPayloadModel.vehiclePosting!.vehicleModelID, "vehicleModelID": adsCreationPayloadModel.vehiclePosting!.vehicleModelID,
@ -276,7 +330,7 @@ class AdsRepoImp implements AdsRepo {
"vehicleConditionID": adsCreationPayloadModel.vehiclePosting!.vehicleConditionID, "vehicleConditionID": adsCreationPayloadModel.vehiclePosting!.vehicleConditionID,
"vehicleMileageID": adsCreationPayloadModel.vehiclePosting!.vehicleMileageID, "vehicleMileageID": adsCreationPayloadModel.vehiclePosting!.vehicleMileageID,
"vehicleTransmissionID": adsCreationPayloadModel.vehiclePosting!.vehicleTransmissionID, "vehicleTransmissionID": adsCreationPayloadModel.vehiclePosting!.vehicleTransmissionID,
"vehicleSellerTypeID": sellerTypeID, "vehicleSellerTypeID": adsCreationPayloadModel.vehiclePosting!.vehicleSellerTypeID,
"cityID": adsCreationPayloadModel.vehiclePosting!.cityID, "cityID": adsCreationPayloadModel.vehiclePosting!.cityID,
"price": adsCreationPayloadModel.vehiclePosting!.price, "price": adsCreationPayloadModel.vehiclePosting!.price,
"vehicleVIN": adsCreationPayloadModel.vehiclePosting!.vehicleVIN, "vehicleVIN": adsCreationPayloadModel.vehiclePosting!.vehicleVIN,
@ -286,19 +340,17 @@ class AdsRepoImp implements AdsRepo {
"isFinanceAvailable": adsCreationPayloadModel.vehiclePosting!.isFinanceAvailable, "isFinanceAvailable": adsCreationPayloadModel.vehiclePosting!.isFinanceAvailable,
"warantyYears": adsCreationPayloadModel.vehiclePosting!.warantyYears, "warantyYears": adsCreationPayloadModel.vehiclePosting!.warantyYears,
"demandAmount": adsCreationPayloadModel.vehiclePosting!.demandAmount, "demandAmount": adsCreationPayloadModel.vehiclePosting!.demandAmount,
"vehiclePostingImagesDraft": vehiclePostingImages,
"vehiclePostingDamagePartsDraft": vehiclePostingDamageParts,
"mobileNo": adsCreationPayloadModel.vehiclePosting!.phoneNo,
"whatsAppNo": adsCreationPayloadModel.vehiclePosting!.whatsAppNo,
// "adStatus": 1, // "adStatus": 1,
}, "vehiclePostingImages": vehiclePostingImages,
"stepNo": stepNo.toIntFromStepsEnum(), "vehiclePostingDamageParts": vehiclePostingDamageParts
}
}; };
log("posting this ads: ${postParams.toString()}");
String token = appState.getUser.data!.accessToken ?? ""; String token = appState.getUser.data!.accessToken ?? "";
GenericRespModel adsGenericModel = await apiClient.postJsonForObject( GenericRespModel adsGenericModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
isCreateNew ? ApiConsts.adsSingleStepDraftCreate : ApiConsts.adsSingleStepDraftUpdate, ApiConsts.vehicleAdsSingleStepCreate,
postParams, postParams,
token: token, token: token,
); );
@ -307,127 +359,22 @@ class AdsRepoImp implements AdsRepo {
} }
@override @override
Future<List<AdDetailsModel>> getMyDraftAds({int? page}) async { Future<List<AdDetailsModel>> getAllAds({required isMyAds}) async {
var draftAdsParams = { var onlyMyAdsParams = {
"PageSize": "30",
"PageIndex": page != null ? page.toString() : "0",
"userID": appState.getUser.data!.userInfo!.userId ?? "", "userID": appState.getUser.data!.userInfo!.userId ?? "",
}; };
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json),
ApiConsts.getMyDraftAds,
queryParameters: draftAdsParams,
);
List<AdDetailsModel> vehicleAdsDetails = List.generate(
adsGenericModel.data.length,
(index) => AdDetailsModel.fromJson(adsGenericModel.data[index], true, adsGenericModel.totalItemsCount ?? 1),
);
return vehicleAdsDetails;
}
@override
Future<List<AdDetailsModel>> getAllAds({
required isMyAds,
AdPostStatus? adPostStatus,
CreatedByRoleEnum? createdByRoleEnum,
int? vehicleBrandId,
int? page,
}) async {
Map<String, dynamic> onlyMyAdsParams = {
"userID": appState.getUser.data!.userInfo!.userId ?? "",
};
if (isMyAds && adPostStatus != null) {
onlyMyAdsParams.addAll({
"AdsStatuses": ["${adPostStatus.getIdFromAdPostStatusEnum()}"],
"PageSize": "30",
"PageIndex": page != null ? page.toString() : "0",
});
}
var allAdsParams = { var allAdsParams = {
"AdsStatuses": ["${AdPostStatus.active.getIdFromAdPostStatusEnum()}"], //only Active ADS "AdsStatuses": ["${AdPostStatus.active.getIdFromAdPostStatusEnum()}"], //only Active ADS
"isActive": "true", //only Active ADS "IsPaid": "true", //only Active ADS
"isExplore": "true",
"PageSize": "30",
"PageIndex": page != null ? page.toString() : "0",
}; };
if (!isMyAds && createdByRoleEnum != null) {
allAdsParams.addAll({
"CreatedByRoles": ["${createdByRoleEnum.getIdFromCreatedByRoleEnum()}"],
});
}
if (!isMyAds && vehicleBrandId != null && vehicleBrandId != 0) {
allAdsParams.addAll({
"VehicleBrandIDs": ["$vehicleBrandId"],
});
}
GenericRespModel adsGenericModel = await apiClient.getJsonForObject( GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken, token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
ApiConsts.vehicleAdsGet, ApiConsts.vehicleAdsGet,
queryParameters: isMyAds ? onlyMyAdsParams : allAdsParams, queryParameters: isMyAds ? onlyMyAdsParams : allAdsParams,
); );
List<AdDetailsModel> vehicleAdsDetails = List.generate(adsGenericModel.data.length, (index) => AdDetailsModel.fromJson(adsGenericModel.data[index], isMyAds, adsGenericModel.totalItemsCount ?? 1)); List<AdDetailsModel> vehicleAdsDetails = List.generate(adsGenericModel.data.length, (index) => AdDetailsModel.fromJson(adsGenericModel.data[index], isMyAds));
return vehicleAdsDetails;
}
@override
Future<List<AdDetailsModel>> getExploreAdsBasedOnFilters({
List<String>? adIdsList,
List<String>? cityIdsList,
List<String>? vehicleModelYearIdsList,
List<String>? vehicleTypeIdsList,
List<String>? vehicleBrandIdsList,
List<String>? createdByRolesIdsList,
List<String>? vehicleAdConditionIdsList,
List<String>? vehicleAdCreatedDateList,
List<String>? mobileNumbersList,
int? startPriceDemand,
int? endPriceDemand,
int? page,
bool isMyAds = false,
}) async {
var parameters = {
"AdsIDs": adIdsList ?? [],
"CityIDs": cityIdsList ?? [],
"VehicleTypeIDs": vehicleTypeIdsList ?? [],
"VehicleBrandIDs": vehicleBrandIdsList ?? [],
"VehicleModelYearIDs": vehicleModelYearIdsList ?? [],
"CreatedByRoles": createdByRolesIdsList ?? [],
"AdsStatuses": ["${AdPostStatus.active.getIdFromAdPostStatusEnum()}"], //only Active ADS
"VehicleNew": vehicleAdConditionIdsList != null && vehicleAdConditionIdsList.isNotEmpty ? vehicleAdConditionIdsList.first.toString() : null,
"CreatedOn": (vehicleAdCreatedDateList != null && vehicleAdCreatedDateList.isNotEmpty) ? vehicleAdCreatedDateList.first.toString() : null,
"MobileNumbers": mobileNumbersList ?? [],
"StartPriceDemand": startPriceDemand?.toString(),
"EndPriceDemand": endPriceDemand?.toString(),
"isActive": "true", //only Active ADS
"isExplore": (!isMyAds).toString(),
"PageSize": "30",
"PageIndex": page != null ? page.toString() : "1",
};
if (isMyAds) {
parameters.addAll({
"userID": appState.getUser.data!.userInfo!.userId ?? "",
});
}
parameters.removeWhere((key, value) => value == null);
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json),
ApiConsts.vehicleAdsGet,
queryParameters: parameters,
);
if (adsGenericModel.messageStatus != 1 || adsGenericModel.data == null) {
Utils.showToast(adsGenericModel.message ?? LocaleKeys.somethingWrong.tr());
return [];
}
List<AdDetailsModel> vehicleAdsDetails = List.generate(adsGenericModel.data.length, (index) => AdDetailsModel.fromJson(adsGenericModel.data[index], false, adsGenericModel.totalItemsCount ?? 1));
return vehicleAdsDetails; return vehicleAdsDetails;
} }
@ -443,11 +390,6 @@ class AdsRepoImp implements AdsRepo {
ApiConsts.myAdsReserveGet, ApiConsts.myAdsReserveGet,
queryParameters: params, queryParameters: params,
); );
if (adsGenericModel.messageStatus != 1 || adsGenericModel.data == null) {
Utils.showToast(adsGenericModel.message ?? LocaleKeys.somethingWrong.tr());
return [];
}
List<MyReservedAdsRespModel> reservedAds = List.generate(adsGenericModel.data.length, (index) => MyReservedAdsRespModel.fromJson(adsGenericModel.data[index])); List<MyReservedAdsRespModel> reservedAds = List.generate(adsGenericModel.data.length, (index) => MyReservedAdsRespModel.fromJson(adsGenericModel.data[index]));
List<String> selectedIdsString = reservedAds.map((component) => component.adsID.toString()).toList(); List<String> selectedIdsString = reservedAds.map((component) => component.adsID.toString()).toList();
@ -461,8 +403,6 @@ class AdsRepoImp implements AdsRepo {
Future<List<AdDetailsModel>> getAdsPerSpecificIds({required List<String> ids, required List<MyReservedAdsRespModel> reservedAds}) async { Future<List<AdDetailsModel>> getAdsPerSpecificIds({required List<String> ids, required List<MyReservedAdsRespModel> reservedAds}) async {
var params = { var params = {
"AdsIDs": ids, "AdsIDs": ids,
"isActive": "true",
"PageSize": "30",
}; };
GenericRespModel adsGenericModel = await apiClient.getJsonForObject( GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken, token: appState.getUser.data!.accessToken,
@ -470,17 +410,11 @@ class AdsRepoImp implements AdsRepo {
queryParameters: params, queryParameters: params,
ApiConsts.vehicleAdsGet, ApiConsts.vehicleAdsGet,
); );
if (adsGenericModel.messageStatus != 1 || adsGenericModel.data == null) { List<AdDetailsModel> vehicleAdsDetails = List.generate(adsGenericModel.data.length, (index) => AdDetailsModel.fromJson(adsGenericModel.data[index], true));
Utils.showToast(adsGenericModel.message ?? LocaleKeys.somethingWrong.tr());
return [];
}
List<AdDetailsModel> vehicleAdsDetails = List.generate(adsGenericModel.data.length, (index) => AdDetailsModel.fromJson(adsGenericModel.data[index], true, adsGenericModel.totalItemsCount ?? 1));
for (int i = 0; i < vehicleAdsDetails.length; i++) { for (int i = 0; i < vehicleAdsDetails.length; i++) {
vehicleAdsDetails[i].adReserveStatus = (reservedAds[i].adsReserveStatus ?? 0).toAdRserveStatusEnum(); vehicleAdsDetails[i].adReserveStatus = (reservedAds[i].adsReserveStatus ?? 0).toAdRserveStatusEnum();
} }
vehicleAdsDetails.removeWhere((element) => element.adReserveStatus != AdReserveStatus.reserved);
return vehicleAdsDetails; return vehicleAdsDetails;
} }
@ -488,7 +422,6 @@ class AdsRepoImp implements AdsRepo {
Future<List<AdDetailsModel>> getMyAds() async { Future<List<AdDetailsModel>> getMyAds() async {
var params = { var params = {
"userID": appState.getUser.data!.userInfo!.userId ?? "", "userID": appState.getUser.data!.userInfo!.userId ?? "",
"PageSize": "30",
}; };
GenericRespModel adsGenericModel = await apiClient.getJsonForObject( GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken, token: appState.getUser.data!.accessToken,
@ -496,11 +429,7 @@ class AdsRepoImp implements AdsRepo {
queryParameters: params, queryParameters: params,
ApiConsts.vehicleAdsGet, ApiConsts.vehicleAdsGet,
); );
if (adsGenericModel.messageStatus != 1 || adsGenericModel.data == null) { List<AdDetailsModel> vehicleAdsDetails = List.generate(adsGenericModel.data.length, (index) => AdDetailsModel.fromJson(adsGenericModel.data[index], true));
Utils.showToast(adsGenericModel.message ?? LocaleKeys.somethingWrong.tr());
return [];
}
List<AdDetailsModel> vehicleAdsDetails = List.generate(adsGenericModel.data.length, (index) => AdDetailsModel.fromJson(adsGenericModel.data[index], true, adsGenericModel.totalItemsCount ?? 1));
return vehicleAdsDetails; return vehicleAdsDetails;
} }
@ -525,11 +454,11 @@ class AdsRepoImp implements AdsRepo {
} }
@override @override
Future<GenericRespModel> updateAdStatus({required int adId, required AdPostStatus adStatusToUpdate, String? comment}) async { Future<GenericRespModel> updateAdStatus({required int adId, required AdPostStatus adStatusToUpdate}) async {
var postParams = { var postParams = {
"id": adId, "id": adId,
"status": adStatusToUpdate.getIdFromAdPostStatusEnum().toString(), "status": adStatusToUpdate.getIdFromAdPostStatusEnum().toString(),
"comment": comment ?? "", "comment": "",
}; };
String token = appState.getUser.data!.accessToken ?? ""; String token = appState.getUser.data!.accessToken ?? "";
@ -543,25 +472,6 @@ class AdsRepoImp implements AdsRepo {
return Future.value(adsGenericModel); return Future.value(adsGenericModel);
} }
@override
Future<GenericRespModel> createAdExtensionOrder({required int adID, required List<int> specialServiceIds, required int adsDurationId}) async {
var postParams = {
"adsID": adID,
"adsDurationID": adsDurationId,
"specialServiceIDs": specialServiceIds,
};
String token = appState.getUser.data!.accessToken ?? "";
GenericRespModel adsGenericModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.adsExtendDurationCreate,
postParams,
token: token,
);
return Future.value(adsGenericModel);
}
@override @override
Future<GenericRespModel> deleteAd({required int adId}) async { Future<GenericRespModel> deleteAd({required int adId}) async {
var postParams = { var postParams = {
@ -629,73 +539,24 @@ class AdsRepoImp implements AdsRepo {
required int photoOfficeSlotID, required int photoOfficeSlotID,
required int adsSpecialServiceID, required int adsSpecialServiceID,
}) async { }) async {
String? userId = AppState().getUser.data!.userInfo!.userId ?? ""; int customerId = AppState().getUser.data!.userInfo!.customerId ?? 0;
var postParams = { var postParams = {
"adsID": adId, "adsID": adId,
"photoOfficeID": photoOfficeID, "photoOfficeID": photoOfficeID,
"photoOfficeSlotID": photoOfficeSlotID, "photoOfficeSlotID": photoOfficeSlotID,
"adsSpecialServiceID": adsSpecialServiceID, "adsSpecialServiceID": adsSpecialServiceID,
"UserID": userId,
};
String token = appState.getUser.data!.accessToken ?? "";
GenericRespModel adsGenericModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.adsPhotoOfficeAppointmentCreate,
postParams,
token: token,
);
return Future.value(adsGenericModel);
}
@override
Future<GenericRespModel> uploadBankReceiptsOnReserveDealDone({required int adId, required String detailNote, required List<PdfReceiptModel> pdfReceiptsList}) async {
int customerId = AppState().getUser.data!.userInfo!.customerId ?? 0;
List receiptImages = [];
for (var element in pdfReceiptsList) {
var pdfReceiptMap = {
"id": 0,
"imageName": element.pdfName,
"imageStr": element.pdfString,
};
receiptImages.add(pdfReceiptMap);
}
var postParams = {
"adsID": adId,
"customerID": customerId, "customerID": customerId,
"detailNote": detailNote,
"receiptImages": receiptImages,
}; };
String token = appState.getUser.data!.accessToken ?? ""; String token = appState.getUser.data!.accessToken ?? "";
GenericRespModel adsGenericModel = await apiClient.postJsonForObject( GenericRespModel adsGenericModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
"", ApiConsts.adsPhotoOfficeAppointmentCreate,
postParams, postParams,
token: token, token: token,
); );
return Future.value(adsGenericModel); return Future.value(adsGenericModel);
} }
@override
Future<List<BuyersChatForAdsModel>> getChatBuyersForAds({required int adsID}) async {
var queryParameters = {"AdsID": adsID.toString()};
GenericRespModel genericRespModel = await apiClient.getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getChatBuyersForAds,
queryParameters: queryParameters,
token: appState.getUser.data!.accessToken,
);
List<BuyersChatForAdsModel> buyersChatListForAds = [];
if (genericRespModel.data != null && genericRespModel.data.length > 0) {
buyersChatListForAds = List.generate(genericRespModel.data.length, (index) => BuyersChatForAdsModel.fromJson(genericRespModel.data[index]));
}
return buyersChatListForAds;
}
} }

@ -3,57 +3,37 @@ import 'dart:developer';
import 'package:mc_common_app/api/api_client.dart'; import 'package:mc_common_app/api/api_client.dart';
import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/dependency_injection.dart'; import 'package:mc_common_app/config/dependencies.dart';
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/models/appointments_models/appointment_list_model.dart';
import 'package:mc_common_app/models/appointments_models/schedule_model.dart'; import 'package:mc_common_app/models/appointments_models/schedule_model.dart';
import 'package:mc_common_app/models/appointments_models/service_schedule_model.dart'; import 'package:mc_common_app/models/appointments_models/service_schedule_model.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/general_models/m_response.dart';
import 'package:mc_common_app/models/provider_branches_models/profile/services.dart'; import 'package:mc_common_app/models/provider_branches_models/profile/services.dart';
import 'package:mc_common_app/utils/enums.dart';
abstract class AppointmentRepo { import '../models/appointments_models/appointment_list_model.dart';
Future<List<AppointmentListModel>> getMyAppointmentsForProvider(Map<String, dynamic> map);
Future<List<AppointmentListModel>> getMyAppointmentsForProvidersByFilters({
required int branchID,
List<String>? serviceProviderServiceIdsList,
List<String>? customerNamesList,
List<String>? customerPhonesList,
List<String>? deliveryTypeIdsList,
AppointmentStatusEnum? appointmentStatusEnum,
String? fromDate,
String? toDate,
});
Future<List<AppointmentListModel>> getMyAppointmentsForCustomersByFilters({ abstract class AppointmentRepo {
List<String>? providerIdsList, Future<List<AppointmentListModel>> getMyAppointments(Map<String, dynamic> map);
List<String>? categoryIdsList,
List<String>? serviceIdsList,
List<String>? itemIdsList,
List<String>? branchIdsList,
AppointmentStatusEnum? appointmentStatusEnum,
});
Future<GenericRespModel> updateAppointmentStatus({required int appointmentId, required AppointmentStatusEnum appointmentStatusEnum}); Future<MResponse> updateAppointmentStatus(Map<String, dynamic> map);
Future<GenericRespModel> updateAppointmentPaymentStatus(Map<String, dynamic> map); Future<MResponse> updateAppointmentPaymentStatus(Map<String, dynamic> map);
Future<GenericRespModel> getAppointmentSlots({required int branchID, required String fromDate, required String toDate}); Future<MResponse> getAppointmentSlots(Map<String, dynamic> map);
Future<GenericRespModel> createMergeAppointment(Map<String, dynamic> map); Future<MResponse> createMergeAppointment(Map<String, dynamic> map);
Future<Services> getAllServices(String branchId); Future<Services> getAllServices(String branchId);
Future<GenericRespModel> createSchedule(Map map); Future<MResponse> createSchedule(Map map);
Future<GenericRespModel> addServicesInSchedule(Map map); Future<MResponse> addServicesInSchedule(Map map);
Future<GenericRespModel> updateSchedule(Map map); Future<MResponse> updateSchedule(Map map);
Future<List<ScheduleData>> getSchedules(String branchId); Future<List<ScheduleData>> getSchedules(String branchId);
Future<GenericRespModel> updateServicesInSchedule(Map map); Future<MResponse> updateServicesInSchedule(Map map);
Future<List<ServiceAppointmentScheduleModel>> mergeServiceIntoAvailableSchedules({ Future<List<ServiceAppointmentScheduleModel>> mergeServiceIntoAvailableSchedules({
required List<String> serviceItemIdsForHome, required List<String> serviceItemIdsForHome,
@ -66,34 +46,31 @@ abstract class AppointmentRepo {
} }
class AppointmentRepoImp implements AppointmentRepo { class AppointmentRepoImp implements AppointmentRepo {
ApiClient apiClient = injector.get<ApiClient>();
AppState appState = injector.get<AppState>();
@override @override
Future<Services> getAllServices(String branchId) async { Future<Services> getAllServices(String branchId) async {
Map<String, dynamic> map = {"ProviderBranchID": branchId}; Map<String, dynamic> map = {"ProviderBranchID": branchId};
String t = appState.getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.getJsonForObject((json) => Services.fromJson(json), ApiConsts.getServicesOfBranch, token: t, queryParameters: map); return await injector.get<ApiClient>().getJsonForObject((json) => Services.fromJson(json), ApiConsts.getServicesOfBranch, token: t, queryParameters: map);
} }
@override @override
Future<GenericRespModel> createSchedule(Map map) async { Future<MResponse> createSchedule(Map map) async {
String t = appState.getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.createSchedule, map, token: t); return await injector.get<ApiClient>().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.createSchedule, map, token: t);
} }
@override @override
Future<GenericRespModel> addServicesInSchedule(Map map) async { Future<MResponse> addServicesInSchedule(Map map) async {
String t = appState.getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.createGroup, map, token: t); return await injector.get<ApiClient>().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.createGroup, map, token: t);
} }
@override @override
Future<List<ScheduleData>> getSchedules(String branchId) async { Future<List<ScheduleData>> getSchedules(String branchId) async {
Map<String, dynamic> map = {"ServiceProviderBranchID": branchId}; Map<String, dynamic> map = {"ServiceProviderBranchID": branchId};
String t = appState.getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
GenericRespModel adsGenericModel = await apiClient.getJsonForObject( GenericRespModel adsGenericModel = await injector.get<ApiClient>().getJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
ApiConsts.getSchedule, ApiConsts.getSchedule,
token: t, token: t,
@ -104,41 +81,35 @@ class AppointmentRepoImp implements AppointmentRepo {
} }
@override @override
Future<GenericRespModel> updateSchedule(Map map) async { Future<MResponse> updateSchedule(Map map) async {
String t = appState.getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.updateSchedule, map, token: t); return await injector.get<ApiClient>().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.updateSchedule, map, token: t);
} }
@override @override
Future<GenericRespModel> updateServicesInSchedule(Map map) async { Future<MResponse> updateServicesInSchedule(Map map) async {
String t = appState.getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.updateGroup, map, token: t); return await injector.get<ApiClient>().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.updateGroup, map, token: t);
} }
@override
Future<List<ServiceAppointmentScheduleModel>> mergeServiceIntoAvailableSchedules({ Future<List<ServiceAppointmentScheduleModel>> mergeServiceIntoAvailableSchedules({
required List<String> serviceItemIdsForHome, required List<String> serviceItemIdsForHome,
required List<String> serviceItemIdsForWorkshop, required List<String> serviceItemIdsForWorkshop,
}) async { }) async {
String t = appState.getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
var queryParameters = []; var queryParameters = [
{
if (serviceItemIdsForWorkshop.isNotEmpty) {
queryParameters.add({
"appointmentType": 1,
"ServiceItemIDs": serviceItemIdsForWorkshop,
});
}
if (serviceItemIdsForHome.isNotEmpty) {
queryParameters.add({
"appointmentType": 2, "appointmentType": 2,
"ServiceItemIDs": serviceItemIdsForHome, "ServiceItemIDs": serviceItemIdsForHome,
}); },
{
"appointmentType": 1,
"ServiceItemIDs": serviceItemIdsForWorkshop,
} }
GenericRespModel adsGenericModel = await apiClient.postJsonForObject( ];
GenericRespModel adsGenericModel = await injector.get<ApiClient>().postJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
ApiConsts.getServiceItemAppointmentScheduleSlots, ApiConsts.GetServiceItemAppointmentScheduleSlots,
queryParameters, queryParameters,
token: t, token: t,
); );
@ -150,46 +121,30 @@ class AppointmentRepoImp implements AppointmentRepo {
return serviceAppointmentScheduleModel; return serviceAppointmentScheduleModel;
} }
@override
Future<GenericRespModel> createServiceAppointment({required List<ServiceAppointmentScheduleModel> schedules, required int serviceProviderID}) async { Future<GenericRespModel> createServiceAppointment({required List<ServiceAppointmentScheduleModel> schedules, required int serviceProviderID}) async {
String t = appState.getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
int customerId = appState.getUser.data!.userInfo!.customerId ?? 0; int customerId = AppState().getUser.data!.userInfo!.customerId ?? 0;
List<Map<String, dynamic>> mapList = []; List<Map<String, dynamic>> mapList = [];
for (var schedule in schedules) { schedules.forEach((schedule) {
List<int> serviceItemIds = []; List<int> serviceItemIds = [];
for (var service in schedule.servicesListInAppointment!) { schedule.servicesListInAppointment!.forEach((service) {
for (var item in service.serviceItems!) { service.serviceItems!.forEach((item) {
serviceItemIds.add(item.id!); serviceItemIds.add(item.id!);
} });
} });
int slotId = 0;
int index = schedule.selectedCustomTimeDateSlotModel!.availableSlots!.indexWhere((element) => element.isSelected);
if (index == -1) {
index = 0;
}
slotId = schedule.selectedCustomTimeDateSlotModel!.availableSlots![index].slotId;
mapList.add({ mapList.add({
"serviceSlotID": slotId, "serviceSlotID": schedule.selectedCustomTimeDateSlotModel!.date!.slotId,
"serviceProviderID": serviceProviderID, "serviceProviderID": serviceProviderID,
"customerID": customerId, "customerID": customerId,
"serviceItemID": serviceItemIds, "serviceItemID": serviceItemIds,
"amountCustomerLocation": schedule.totalLocationCharges.toString(),
"customerLocLat": (schedule.locationInfoModel!.latitude).toString(),
"customerLocLong": (schedule.locationInfoModel!.longitude).toString(),
"customerLocAddress": (schedule.locationInfoModel!.address).toString(),
}); });
} });
log("maplist: ${mapList.toString() }"); log("maplist: ${mapList.toString() }");
GenericRespModel adsGenericModel = await apiClient.postJsonForObject( GenericRespModel adsGenericModel = await injector.get<ApiClient>().postJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
ApiConsts.serviceProvidersAppointmentCreate, ApiConsts.ServiceProvidersAppointmentCreate,
mapList, mapList,
token: t, token: t,
); );
@ -199,7 +154,7 @@ class AppointmentRepoImp implements AppointmentRepo {
@override @override
Future<GenericRespModel> cancelOrRescheduleServiceAppointment({required int serviceAppointmentID, required int serviceSlotID, required int appointmentScheduleAction}) async { Future<GenericRespModel> cancelOrRescheduleServiceAppointment({required int serviceAppointmentID, required int serviceSlotID, required int appointmentScheduleAction}) async {
String t = appState.getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
final payload = { final payload = {
"serviceAppointmentID": serviceAppointmentID, "serviceAppointmentID": serviceAppointmentID,
@ -207,9 +162,9 @@ class AppointmentRepoImp implements AppointmentRepo {
"appointmentScheduleAction": appointmentScheduleAction, "appointmentScheduleAction": appointmentScheduleAction,
}; };
GenericRespModel adsGenericModel = await apiClient.postJsonForObject( GenericRespModel adsGenericModel = await injector.get<ApiClient>().postJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
ApiConsts.serviceProviderAppointmentRescheduleCancelAppointment, ApiConsts.ServiceProviderAppointmentRescheduleCancelAppointment,
payload, payload,
token: t, token: t,
); );
@ -218,10 +173,10 @@ class AppointmentRepoImp implements AppointmentRepo {
} }
@override @override
Future<List<AppointmentListModel>> getMyAppointmentsForProvider(Map<String, dynamic> map) async { Future<List<AppointmentListModel>> getMyAppointments(Map<String, dynamic> map) async {
String t = appState.getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
GenericRespModel genericRespModel = await apiClient.getJsonForObject( GenericRespModel genericRespModel = await injector.get<ApiClient>().getJsonForObject(
token: t, token: t,
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
queryParameters: map, queryParameters: map,
@ -232,81 +187,11 @@ class AppointmentRepoImp implements AppointmentRepo {
} }
@override @override
Future<List<AppointmentListModel>> getMyAppointmentsForProvidersByFilters({ Future<MResponse> getAppointmentSlots(Map<String, dynamic> map) async {
required int branchID, String t = AppState().getUser.data!.accessToken ?? "";
List<String>? serviceProviderServiceIdsList,
List<String>? customerNamesList,
List<String>? customerPhonesList,
List<String>? deliveryTypeIdsList,
AppointmentStatusEnum? appointmentStatusEnum,
String? fromDate,
String? toDate,
}) async {
String t = appState.getUser.data!.accessToken ?? "";
String providerId = appState.getUser.data!.userInfo!.providerId.toString();
var params = {
"ServiceProviderID": providerId.toString(),
"ProviderBranchID": branchID.toString(),
"IsSearchFilter": true.toString(),
"SPServiceIDs": serviceProviderServiceIdsList ?? [],
"CustomerNames": customerNamesList ?? [],
"CustomerMobileNos": customerPhonesList ?? [],
"AppointmentTypes": deliveryTypeIdsList ?? [],
"FromDate": fromDate ?? "",
"DateTo": toDate ?? "",
};
if (appointmentStatusEnum != null) {
params.addAll({"AppointmentStatusID": appointmentStatusEnum.getIdFromAppointmentStatusEnum().toString()});
}
GenericRespModel genericRespModel = await apiClient.getJsonForObject(
token: t,
(json) => GenericRespModel.fromJson(json),
queryParameters: params,
ApiConsts.serviceProvidersAppointmentGet,
);
List<AppointmentListModel> appointmentList = List.generate(genericRespModel.data.length, (index) => AppointmentListModel.fromJson(genericRespModel.data[index]));
return appointmentList;
}
@override MResponse adsGenericModel = await injector.get<ApiClient>().getJsonForObject(
Future<List<AppointmentListModel>> getMyAppointmentsForCustomersByFilters({ (json) => MResponse.fromJson(json),
List<String>? providerIdsList,
List<String>? categoryIdsList,
List<String>? serviceIdsList,
List<String>? itemIdsList,
List<String>? branchIdsList,
AppointmentStatusEnum? appointmentStatusEnum,
}) async {
var params = {
"customerID": appState.getUser.data!.userInfo!.customerId.toString(),
"ServiceProviderIDs": providerIdsList ?? [],
"ProviderBranchIDs": branchIdsList ?? [],
"ServiceIDs": serviceIdsList ?? [],
"ServiceItemIDs": itemIdsList ?? [],
"CategoryIDs": categoryIdsList ?? [],
};
if (appointmentStatusEnum != null) {
params.addAll({"AppointmentStatusID": appointmentStatusEnum.getIdFromAppointmentStatusEnum().toString()});
}
GenericRespModel genericRespModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json),
queryParameters: params,
ApiConsts.customersAppointmentGetByFilters,
);
List<AppointmentListModel> appointmentList = List.generate(genericRespModel.data.length, (index) => AppointmentListModel.fromJson(genericRespModel.data[index]));
return appointmentList;
}
@override
Future<GenericRespModel> getAppointmentSlots({required int branchID, required String fromDate, required String toDate}) async {
String t = appState.getUser.data!.accessToken ?? "";
final map = {"ProviderBranchID": branchID.toString(), "FromDate": fromDate, "ToDate": toDate};
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getAppointmentSlots, ApiConsts.getAppointmentSlots,
token: t, token: t,
queryParameters: map, queryParameters: map,
@ -316,24 +201,20 @@ class AppointmentRepoImp implements AppointmentRepo {
} }
@override @override
Future<GenericRespModel> updateAppointmentPaymentStatus(Map<String, dynamic> map) async { Future<MResponse> updateAppointmentPaymentStatus(Map<String, dynamic> map) async {
String t = appState.getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.updateAppointmentPaymentStatus, map, token: t); return await injector.get<ApiClient>().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.updateAppointmentPaymentStatus, map, token: t);
} }
@override @override
Future<GenericRespModel> updateAppointmentStatus({required int appointmentId, required AppointmentStatusEnum appointmentStatusEnum}) async { Future<MResponse> updateAppointmentStatus(Map<String, dynamic> map) async {
String t = appState.getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
var params = { return await injector.get<ApiClient>().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.updateAppointmentStatus, map, token: t);
"appointmentID": appointmentId.toString(),
"appointmentStatusID": appointmentStatusEnum.getIdFromAppointmentStatusEnum().toString(),
};
return await apiClient.postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.updateAppointmentStatus, params, token: t);
} }
@override @override
Future<GenericRespModel> createMergeAppointment(Map<String, dynamic> map) async { Future<MResponse> createMergeAppointment(Map<String, dynamic> map) async {
String t = appState.getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.createMergeAppointment, map, token: t); return await injector.get<ApiClient>().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.createMergeAppointment, map, token: t);
} }
} }

@ -1,643 +0,0 @@
import 'dart:async';
import 'package:flutter/cupertino.dart';
import 'package:mc_common_app/api/api_client.dart';
import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/dependency_injection.dart';
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/models/appointments_models/appointment_basic_detail_model.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart';
import 'package:mc_common_app/models/provider_branches_models/branch_review_model.dart';
import 'package:mc_common_app/models/provider_branches_models/profile/branch.dart';
import 'package:mc_common_app/models/provider_branches_models/profile/categroy.dart';
import 'package:mc_common_app/models/provider_branches_models/profile/document.dart';
import 'package:mc_common_app/models/provider_branches_models/profile/services.dart';
import 'package:mc_common_app/models/provider_branches_models/provider_model.dart';
import 'package:mc_common_app/models/provider_branches_models/provider_profile_model.dart';
import 'package:mc_common_app/models/services_models/item_model.dart';
import 'package:mc_common_app/models/services_models/service_model.dart';
import 'package:mc_common_app/utils/enums.dart';
abstract class BranchRepo {
Future<GenericRespModel> createBranch({
required String branchName,
required String branchDescription,
required int cityId,
required String address,
required String openTime,
required String closeTime,
required double latitude,
required double longitude,
required List<BranchPostingImages> imagesList,
});
Future<GenericRespModel> updateBranch({
required int branchId,
required String branchName,
required String branchDescription,
required String openTime,
required String closeTime,
required int cityId,
required String address,
required String latitude,
required String longitude,
required List<BranchPostingImages> imagesList,
bool isNeedToDelete = true,
});
Future<GenericRespModel> deleteBranch({required int branchId});
Future<Branch> fetchAllBranches();
Future<Category> fetchBranchCategory();
Future<Services> fetchServicesByCategoryId({required int serviceCategoryId});
Future<Services> fetchProviderServices(String branchID, String serviceCategoryId);
Future<List<ServiceModel>> fetchProviderServicesModelByCategoryIdAndBranchID(String branchID, String serviceCategoryId);
Future<GenericRespModel> createNewService(List<Map<String, dynamic>> map);
Future<Document> getServiceProviderDocument(dynamic userId);
Future<GenericRespModel> serviceProviderDocumentsUpdate(List<DocumentData>? documents);
Future<ProviderModel> getBranchAndServices();
Future<List<ProviderBasicDataModel>> getAllProvidersWitheBasicData();
Future<GenericRespModel> createService(List<Map<String, dynamic>> map);
Future<GenericRespModel> updateService(List<Map<String, dynamic>> map);
Future<GenericRespModel> updateServiceStatus({required int branchId, required List<int> serviceIds, required ServiceStatusEnum serviceStatusEnum});
Future<GenericRespModel> updateCategoryStatus({required int branchId, required int categoryId, required ServiceStatusEnum serviceStatusEnum});
Future<List<AppointmentBasicDetailsModel>> getAppointmentsByCategoryOrService({required int branchId, required int categoryId, required int serviceId});
Future<GenericRespModel> getMatchedServices(int oldBranchId, int newBranchId, int categoryId);
Future<GenericRespModel> duplicateItems({required String providerBranchID, required List<int> items});
Future<GenericRespModel> getAllProviderDealers(Map<String, dynamic> map);
Future<GenericRespModel> getBranchUsers(Map<String, dynamic> map);
Future<GenericRespModel> assignDealerToBranch(Map<String, dynamic> map);
Future<GenericRespModel> removeDealerFromBranch(Map<String, dynamic> map);
Future<GenericRespModel> addNewServicesInAppointment(Map<String, dynamic> map);
Future<List<BranchDetailModel>> getAllNearBranchAndServices({required double latitude, required double longitude});
Future<List<ItemData>> getServiceItems({required int serviceId});
Future<ProviderProfileModel> getBranchAndServicesByProviderId(int providerId, {double? latitude, double? longitude});
Future<List<BranchDetailModel>> getBranchesByFilters({
List<int>? providerIdsList,
List<int>? categoryIdsList,
List<int>? serviceIdsList,
int? distanceKm,
int? rating,
double? latitude,
double? longitude,
});
Future<List<BranchDetailModel>> getMyRecentBranchesWithServices();
Future<List<BranchRatingModel>> getBranchRatings({required int serviceProviderBranchID});
Future<GenericRespModel> submitBranchRatings({required int serviceProviderBranchID, required String title, required String review, required double ratingNo});
Future<GenericRespModel> addProviderToFavourite({required int providerID});
Future<GenericRespModel> removeProviderFromFavourite({required int providerID});
Future<List<ProviderProfileModel>> getMyFavoriteProviders();
}
class BranchRepoImp implements BranchRepo {
ApiClient apiClient = injector.get<ApiClient>();
AppState appState = injector.get<AppState>();
@override
Future<GenericRespModel> createBranch({
required String branchName,
required String branchDescription,
required int cityId,
required String address,
required String openTime,
required String closeTime,
required double latitude,
required double longitude,
required List<BranchPostingImages> imagesList,
}) async {
List serviceProviderBranchImages = [];
for (var element in imagesList) {
var imageMap = {
"id": element.id ?? 0,
"imageName": element.imageName,
"imageUrl": element.imageUrl,
"imageStr": element.imageStr,
};
serviceProviderBranchImages.add(imageMap);
}
var postParams = {
"serviceProviderID": AppState().getUser.data?.userInfo?.providerId ?? "",
"branchName": branchName,
"branchDescription": branchDescription,
"cityID": cityId.toString(),
"address": address,
"openTime": openTime,
"closeTime": closeTime,
"latitude": latitude,
"longitude": longitude,
"isActive": true,
"serviceProviderBranchImages": serviceProviderBranchImages,
};
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.createProviderBranch, postParams, token: t);
}
@override
Future<Branch> fetchAllBranches() async {
var postParams = {"ServiceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""};
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.getJsonForObject((json) => Branch.fromJson(json), ApiConsts.serviceProviderBranchGet, queryParameters: postParams, token: t);
}
@override
Future<Category> fetchBranchCategory() async {
var postParams = {"ServiceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""};
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.getJsonForObject((json) => Category.fromJson(json), ApiConsts.serviceCategoryGet, queryParameters: postParams, token: t);
}
@override
Future<Services> fetchServicesByCategoryId({required int serviceCategoryId}) async {
var postParams = {"ServiceCategoryID": serviceCategoryId.toString()};
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.getJsonForObject((json) => Services.fromJson(json), ApiConsts.servicesGet, queryParameters: serviceCategoryId.toString() != "-1" ? postParams : null, token: t);
}
@override
Future<GenericRespModel> createNewService(List<Map<String, dynamic>> map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.serviceProviderServiceCreate, map, token: t);
}
@override
Future<Document> getServiceProviderDocument(dynamic userId) async {
var queryParameters = {
"ServiceProviderID": userId.toString(),
};
String? token = AppState().getUser.data?.accessToken;
debugPrint(token);
return await injector
.get<ApiClient>()
.getJsonForObject((json) => Document.fromJson(json), ApiConsts.fetProviderDocument, queryParameters: queryParameters, token: AppState().getUser.data!.accessToken ?? "");
}
@override
Future<GenericRespModel> serviceProviderDocumentsUpdate(List<DocumentData>? documents) async {
List<Map<String, dynamic>> map = [];
for (int i = 0; i < documents!.length; i++) {
if (documents[i].document != null) {
var postParams = {
"id": documents[i].id,
"serviceProviderID": documents[i].serviceProviderId,
"documentID": documents[i].documentId,
"documentExt": documents[i].fileExt,
"documentImage": documents[i].document,
"isActive": true,
"dateExpire": documents[i].dateExpire,
};
map.add(postParams);
}
}
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.serviceProviderDocumentUpdate, map, token: t);
}
@override
Future<ProviderModel> getBranchAndServices() async {
var postParams = {"serviceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""};
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.getJsonForObject((json) => ProviderModel.fromJson(json), ApiConsts.branchesAndServices, queryParameters: postParams, token: t);
}
@override
Future<List<ProviderBasicDataModel>> getAllProvidersWitheBasicData() async {
String t = AppState().getUser.data!.accessToken ?? "";
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: t,
(json) => GenericRespModel.fromJson(json),
ApiConsts.serviceProviderDDLGet,
);
List<ProviderBasicDataModel> providersList = List.generate(adsGenericModel.data.length, (index) => ProviderBasicDataModel.fromJson(adsGenericModel.data[index]));
return providersList;
}
@override
Future<GenericRespModel> updateBranch({
required int branchId,
required String branchName,
required String branchDescription,
required String openTime,
required String closeTime,
required int cityId,
required String address,
required String latitude,
required String longitude,
required List<BranchPostingImages> imagesList,
bool isNeedToDelete = true,
}) async {
List serviceProviderBranchImages = [];
for (var element in imagesList) {
var imageMap = {
"id": element.id ?? 0,
"imageName": element.imageName,
"imageUrl": element.imageUrl,
"imageStr": element.imageStr,
};
serviceProviderBranchImages.add(imageMap);
}
String lat = "0", long = "0";
try {
lat = latitude.toString().substring(0, 9);
long = longitude.toString().substring(0, 9);
} catch (e) {}
var postParams = {
"id": branchId,
"serviceProviderID": AppState().getUser.data?.userInfo?.providerId ?? "",
"branchName": branchName,
"branchDescription": branchDescription,
"openTime": openTime,
"closeTime": closeTime,
"cityID": cityId,
"address": address,
"latitude": lat,
"longitude": long,
"serviceProviderBranchImages": serviceProviderBranchImages,
"isActive": isNeedToDelete
};
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.updateProviderBranch, postParams, token: t);
}
@override
Future<GenericRespModel> deleteBranch({required int branchId}) async {
var postParams = {
"id": branchId,
};
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.deleteProviderBranch, postParams, token: t);
}
@override
Future<GenericRespModel> createService(List<Map<String, dynamic>> map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.serviceProviderServiceCreate, map, token: t);
}
@override
Future<GenericRespModel> updateService(List<Map<String, dynamic>> map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.serviceProviderServiceUpdate, map, token: t);
}
@override
Future<GenericRespModel> updateServiceStatus({required int branchId, required List<int> serviceIds, required ServiceStatusEnum serviceStatusEnum}) async {
List<String> ids = [];
for (var id in serviceIds) {
ids.add(id.toString());
}
int providerID = AppState().getUser.data!.userInfo!.providerId;
var map = {
"ServiceProviderID": providerID.toString(),
"ProviderBranchID": branchId.toString(),
"ProviderServiceIDs": ids,
"Status": serviceStatusEnum.getIdFromServiceStatusEnum().toString(),
};
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.getJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.serviceProviderServiceStatusUpdate, queryParameters: map, token: t);
}
@override
Future<GenericRespModel> updateCategoryStatus({required int branchId, required int categoryId, required ServiceStatusEnum serviceStatusEnum}) async {
int providerID = AppState().getUser.data!.userInfo!.providerId;
var map = {
"ServiceProviderID": providerID.toString(),
"ProviderBranchID": branchId.toString(),
"ServiceCategoryID": categoryId.toString(),
"Status": serviceStatusEnum.getIdFromServiceStatusEnum().toString(),
};
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.getJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.serviceProviderServiceStatusUpdate, queryParameters: map, token: t);
}
@override
Future<List<AppointmentBasicDetailsModel>> getAppointmentsByCategoryOrService({required int branchId, required int categoryId, required int serviceId}) async {
var map = {
"ProviderBranchID": branchId.toString(),
};
if (serviceId != -1) {
map.addAll({
"ServiceProviderServiceID": serviceId.toString(),
});
}
if (categoryId != -1) {
map.addAll({
"ServiceProviderServiceID": serviceId.toString(),
});
}
String t = AppState().getUser.data!.accessToken ?? "";
GenericRespModel genericRespModel = await apiClient.getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.serviceProviderAppointmentGetByCategoryOrService,
queryParameters: map,
token: t,
);
List<AppointmentBasicDetailsModel> basicAppointmentList = List.generate(genericRespModel.data.length, (index) => AppointmentBasicDetailsModel.fromJson(genericRespModel.data[index]));
return basicAppointmentList;
}
@override
Future<GenericRespModel> getMatchedServices(int oldBranchId, int newBranchId, int categoryId) async {
var postParams = {
"ProviderBranchIDExisted": oldBranchId.toString(),
"ProviderBranchIDNew": newBranchId.toString(),
"CategoryID": categoryId.toString(),
};
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.getJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.getMatchedServices, queryParameters: postParams, token: t);
}
@override
Future<GenericRespModel> duplicateItems({required String providerBranchID, required List<int> items}) async {
String t = AppState().getUser.data!.accessToken ?? "";
Map<String, dynamic> map = {
"providerBranchID": providerBranchID,
"serviceItems": items,
};
return await apiClient.postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.duplicateItems, map, token: t);
}
@override
Future<GenericRespModel> getAllProviderDealers(Map<String, dynamic> map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.getJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.getAllProviderDealers, queryParameters: map, token: t);
}
@override
Future<GenericRespModel> getBranchUsers(Map<String, dynamic> map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.getJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.getBranchUser, queryParameters: map, token: t);
}
@override
Future<GenericRespModel> assignDealerToBranch(Map<String, dynamic> map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.assignDealerToBranch, map, token: t);
}
@override
Future<GenericRespModel> removeDealerFromBranch(Map<String, dynamic> map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.removeDealerFromBranch, map, token: t);
}
@override
Future<Services> fetchProviderServices(String branchID, String serviceCategoryId) async {
var postParams = {
"ServiceCategoryID": serviceCategoryId,
"ProviderBranchID": branchID,
};
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.getJsonForObject((json) => Services.fromJson(json), ApiConsts.getProviderServices, queryParameters: postParams, token: t);
}
@override
Future<List<ServiceModel>> fetchProviderServicesModelByCategoryIdAndBranchID(String branchID, String serviceCategoryId) async {
var queryParameters = {
"ID": branchID,
"ServiceCategoryIDs": [serviceCategoryId],
};
String t = AppState().getUser.data!.accessToken ?? "";
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getAllNearBranches,
token: appState.getUser.data!.accessToken,
queryParameters: queryParameters,
);
List<BranchDetailModel> nearBranches = List.generate(adsGenericModel.data.length, (index) => BranchDetailModel.fromJson(adsGenericModel.data[index]));
if (nearBranches.isNotEmpty) {
List<ServiceModel> services = nearBranches.first.branchServices ?? [];
return services;
}
return [];
}
@override
Future<GenericRespModel> addNewServicesInAppointment(Map<String, dynamic> map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await apiClient.postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.addNewServicesInAppointment, map, token: t);
}
@override
Future<List<BranchDetailModel>> getAllNearBranchAndServices({required double latitude, required double longitude}) async {
var queryParameters = {
"isActive": "true",
"Status": "3",
"latitude": latitude.toString(),
"longitude": longitude.toString(),
};
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getAllNearBranches,
token: appState.getUser.data!.accessToken,
queryParameters: queryParameters,
);
List<BranchDetailModel> nearBranches = List.generate(adsGenericModel.data.length, (index) => BranchDetailModel.fromJson(adsGenericModel.data[index]));
return nearBranches;
}
@override
Future<List<BranchDetailModel>> getMyRecentBranchesWithServices() async {
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getMyRecentBranches,
token: appState.getUser.data!.accessToken,
);
List<BranchDetailModel> recentBranches = List.generate(adsGenericModel.data.length, (index) => BranchDetailModel.fromJson(adsGenericModel.data[index]));
return recentBranches;
}
@override
Future<List<ItemData>> getServiceItems({required int serviceId}) async {
var queryParameters = {
"ServiceProviderServiceID": serviceId.toString(),
};
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getServiceItems,
token: appState.getUser.data!.accessToken,
queryParameters: serviceId.toString() != "-1" ? queryParameters : null,
);
List<ItemData> serviceItems = List.generate(adsGenericModel.data.length, (index) => ItemData.fromJson(adsGenericModel.data[index]));
return serviceItems;
}
@override
Future<ProviderProfileModel> getBranchAndServicesByProviderId(int providerId, {double? latitude, double? longitude}) async {
var postParams = {
"serviceProviderID": providerId.toString(),
};
if (latitude != null && longitude != null) {
postParams.addAll({"Longitude": "$longitude"});
postParams.addAll({"Latitude": "$latitude"});
}
GenericRespModel adsGenericModel =
await apiClient.getJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.branchesAndServices, token: appState.getUser.data!.accessToken, queryParameters: postParams);
return ProviderProfileModel.fromJson(adsGenericModel.data);
}
@override
Future<List<BranchDetailModel>> getBranchesByFilters({
List<int>? providerIdsList,
List<int>? categoryIdsList,
List<int>? serviceIdsList,
int? distanceKm,
int? rating,
double? latitude,
double? longitude,
}) async {
List<String> providerIds = [];
if (providerIdsList != null) {
for (var element in providerIdsList) {
providerIds.add(element.toString());
}
}
List<String> categoryIds = [];
if (categoryIdsList != null) {
for (var element in categoryIdsList) {
categoryIds.add(element.toString());
}
}
List<String> serviceIds = [];
if (serviceIdsList != null) {
for (var element in serviceIdsList) {
serviceIds.add(element.toString());
}
}
var postParams = {
"ServiceProviderIDs": providerIds,
"ServiceCategoryIDs": categoryIds,
"ServiceIDs": serviceIds,
"DistanceByKM": "${distanceKm ?? 0}",
"Rating": "${rating ?? 0}",
"Latitude": latitude.toString(),
"Longitude": longitude.toString(),
"Status": "3",
};
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getAllNearBranches,
token: appState.getUser.data!.accessToken,
queryParameters: postParams,
);
List<BranchDetailModel> nearBranches = List.generate(adsGenericModel.data.length, (index) => BranchDetailModel.fromJson(adsGenericModel.data[index]));
return nearBranches;
}
@override
Future<List<BranchRatingModel>> getBranchRatings({required int serviceProviderBranchID}) async {
var postParams = {"ServiceProviderBranchID": serviceProviderBranchID.toString()};
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getBranchRatings,
token: appState.getUser.data!.accessToken,
queryParameters: postParams,
);
List<BranchRatingModel> branchRatings = List.generate(adsGenericModel.data.length, (index) => BranchRatingModel.fromJson(adsGenericModel.data[index]));
return branchRatings;
}
@override
Future<GenericRespModel> submitBranchRatings({required int serviceProviderBranchID, required String title, required String review, required double ratingNo}) async {
final customerID = appState.getUser.data!.userInfo!.customerId;
final parameters = {"title": title, "review": review, "ratNo": ratingNo, "serviceProviderBranchID": serviceProviderBranchID, "customerID": "$customerID"};
GenericRespModel adsGenericModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.createBranchRatings,
parameters,
token: appState.getUser.data!.accessToken,
);
return adsGenericModel;
}
@override
Future<GenericRespModel> addProviderToFavourite({required int providerID}) async {
final customerID = appState.getUser.data!.userInfo!.customerId;
final parameters = {
"providerID": providerID.toString(),
"customerID": customerID.toString(),
};
GenericRespModel adsGenericModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.favouriteServiceProviderCreate,
parameters,
token: appState.getUser.data!.accessToken,
);
return adsGenericModel;
}
@override
Future<GenericRespModel> removeProviderFromFavourite({required int providerID}) async {
final parameters = {"id": providerID.toString()};
GenericRespModel adsGenericModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.unFavouriteServiceProvider,
parameters,
token: appState.getUser.data!.accessToken,
);
return adsGenericModel;
}
@override
Future<List<ProviderProfileModel>> getMyFavoriteProviders() async {
final customerID = appState.getUser.data!.userInfo!.customerId;
var postParams = {"customerID": customerID.toString()};
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.favouriteServiceProviderGet,
token: appState.getUser.data!.accessToken,
queryParameters: postParams,
);
List<ProviderProfileModel> favProviders = List.generate(adsGenericModel.data.length, (index) => ProviderProfileModel.fromJson(adsGenericModel.data[index]));
return favProviders;
}
}

@ -4,44 +4,18 @@ import 'package:http/io_client.dart';
import 'package:mc_common_app/api/api_client.dart'; import 'package:mc_common_app/api/api_client.dart';
import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/dependency_injection.dart'; import 'package:mc_common_app/config/dependencies.dart';
import 'package:mc_common_app/main.dart'; import 'package:mc_common_app/main.dart';
import 'package:mc_common_app/models/chat_models/chat_message_model.dart'; import 'package:mc_common_app/models/chat_models/chat_message_model.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:signalr_core/signalr_core.dart'; import 'package:signalr_core/signalr_core.dart';
abstract class ChatRepo { abstract class ChatRepo {
Future<HubConnection> getHubConnection(); Future<HubConnection> getHubConnection();
Future<bool> markMessageAsRead({required List<int> messageIds, required ChatTypeEnum chatTypeEnum}); Future<void> markMessageAsRead({required int messageId});
Future<List<ChatMessageModel>> getUsersChatMessagesForRequests({ Future<List<ChatMessageModel>> getUsersChatMessages({required int providerId, required int customerId, required int requestOfferId, required int requestId, int pageIndex = 0, int pageSize = 0});
required int providerId,
required int customerId,
required int requestOfferId,
required int requestId,
int pageIndex = 0,
int pageSize = 0,
});
Future<List<ChatMessageModel>> getUsersChatMessagesForAds({
String? userID,
int? adID,
int? adsChatBuyerId,
required bool isForBuyer,
int pageIndex = 0,
int pageSize = 0,
});
Future<List<ChatMessageModel>> getUsersChatMessagesForGeneralChat({
String? userID,
int? adID,
int? adsChatBuyerId,
required bool isForBuyer,
int pageIndex = 0,
int pageSize = 0,
});
} }
class ChatRepoImp implements ChatRepo { class ChatRepoImp implements ChatRepo {
@ -51,7 +25,7 @@ class ChatRepoImp implements ChatRepo {
@override @override
Future<HubConnection> getHubConnection() async { Future<HubConnection> getHubConnection() async {
final userId = AppState().getUser.data!.userInfo!.userId ?? ""; final userId = AppState().getUser.data!.userInfo!.userId ?? "";
final hubUrl = "${ApiConsts.signalRUrl}?userID=$userId"; final hubUrl = "https://ms.hmg.com/McHub?userID=$userId";
logger.i("Connecting with Hub ($hubUrl)"); logger.i("Connecting with Hub ($hubUrl)");
HubConnection hub; HubConnection hub;
@ -59,45 +33,32 @@ class ChatRepoImp implements ChatRepo {
.withUrl( .withUrl(
hubUrl, hubUrl,
HttpConnectionOptions( HttpConnectionOptions(
client: IOClient(HttpClient()..badCertificateCallback = (x, y, z) => true), client: IOClient(HttpClient()
logging: (level, message) {}, ..badCertificateCallback = (x, y, z) => true),
logging: (level, message) {
log(message);
},
)) ))
.withAutomaticReconnect()
.build(); .build();
return hub; return hub;
} }
@override @override
Future<bool> markMessageAsRead({required List<int> messageIds, required ChatTypeEnum chatTypeEnum}) async { Future<void> markMessageAsRead({required int messageId}) async {
String url = ""; var queryParameters = {
"id": messageId.toString(),
if (chatTypeEnum == ChatTypeEnum.ads) { };
url = ApiConsts.messageIsReadUpdateForAds; await apiClient.postJsonForObject(
} else if (chatTypeEnum == ChatTypeEnum.requestOffer) {
url = ApiConsts.messageIsReadUpdateForRequests;
} else if (chatTypeEnum == ChatTypeEnum.general) {
url = ApiConsts.messageIsReadUpdateForRequests;
}
var queryParameters = {"iDs": messageIds};
GenericRespModel genericRespModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
url, ApiConsts.messageIsReadUpdate,
queryParameters, queryParameters,
token: appState.getUser.data!.accessToken, token: appState.getUser.data!.accessToken,
); );
return genericRespModel.message == "";
} }
@override @override
Future<List<ChatMessageModel>> getUsersChatMessagesForRequests({ Future<List<ChatMessageModel>> getUsersChatMessages(
required int providerId, {required int providerId, required int customerId, required int requestOfferId, required int requestId, int pageIndex = 0, int pageSize = 0}) async {
required int customerId,
required int requestOfferId,
required int requestId,
int pageIndex = 0,
int pageSize = 0,
}) async {
var queryParameters = { var queryParameters = {
"ReqOfferID": requestOfferId.toString(), "ReqOfferID": requestOfferId.toString(),
"RequestID": requestId.toString(), "RequestID": requestId.toString(),
@ -108,75 +69,7 @@ class ChatRepoImp implements ChatRepo {
}; };
GenericRespModel genericRespModel = await apiClient.getJsonForObject( GenericRespModel genericRespModel = await apiClient.getJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
ApiConsts.getChatMessagesForRequests, ApiConsts.getChatMessages,
queryParameters: queryParameters,
token: appState.getUser.data!.accessToken,
);
if (genericRespModel.messageStatus == 1 && genericRespModel.data != null) {
List<ChatMessageModel> chatMessages = List.generate(
genericRespModel.data.length,
(index) => ChatMessageModel.fromJson(genericRespModel.data[index]),
);
return chatMessages;
}
return [];
}
@override
Future<List<ChatMessageModel>> getUsersChatMessagesForAds({String? userID, int? adID, int? adsChatBuyerId, required bool isForBuyer, int pageIndex = 0, int pageSize = 0}) async {
var parameterForBuyer = {
"UserID": userID.toString(),
"AdsID": adID.toString(),
"IsAdsBuyer": isForBuyer.toString(),
"PageSize": pageSize.toString(),
"PageIndex": pageIndex.toString(),
};
var parameterForSeller = {
"AdsChatBuyerID": adsChatBuyerId.toString(),
"IsAdsBuyer": isForBuyer.toString(),
"PageSize": pageSize.toString(),
"PageIndex": pageIndex.toString(),
};
var queryParameters = isForBuyer ? parameterForBuyer : parameterForSeller;
GenericRespModel genericRespModel = await apiClient.getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getChatMessagesForAds,
queryParameters: queryParameters,
token: appState.getUser.data!.accessToken,
);
if (genericRespModel.messageStatus == 1 && genericRespModel.data != null) {
List<ChatMessageModel> chatMessages = List.generate(
genericRespModel.data.length,
(index) => ChatMessageModel.fromJson(genericRespModel.data[index]),
);
return chatMessages;
}
return [];
}
@override
Future<List<ChatMessageModel>> getUsersChatMessagesForGeneralChat({String? userID, int? adID, int? adsChatBuyerId, required bool isForBuyer, int pageIndex = 0, int pageSize = 0}) async {
var parameterForBuyer = {
"UserID": userID.toString(),
"AdsID": adID.toString(),
"IsAdsBuyer": isForBuyer.toString(),
"PageSize": pageSize.toString(),
"PageIndex": pageIndex.toString(),
};
var parameterForSeller = {
"AdsChatBuyerID": adsChatBuyerId.toString(),
"IsAdsBuyer": isForBuyer.toString(),
"PageSize": pageSize.toString(),
"PageIndex": pageIndex.toString(),
};
var queryParameters = isForBuyer ? parameterForBuyer : parameterForSeller;
GenericRespModel genericRespModel = await apiClient.getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getChatMessagesForAds,
queryParameters: queryParameters, queryParameters: queryParameters,
token: appState.getUser.data!.accessToken, token: appState.getUser.data!.accessToken,
); );

@ -1,64 +1,48 @@
import 'package:mc_common_app/api/api_client.dart'; import 'package:mc_common_app/api/api_client.dart';
import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/dependency_injection.dart'; import 'package:mc_common_app/config/dependencies.dart';
import 'package:mc_common_app/models/advertisment_models/ss_car_check_schedule_model.dart'; import 'package:mc_common_app/models/advertisment_models/ss_car_check_schedule_model.dart';
import 'package:mc_common_app/models/advertisment_models/ss_photo_schedule_model.dart'; import 'package:mc_common_app/models/advertisment_models/ss_photo_schedule_model.dart';
import 'package:mc_common_app/models/advertisment_models/vehicle_details_models.dart'; import 'package:mc_common_app/models/advertisment_models/vehicle_details_models.dart';
import 'package:mc_common_app/models/appointments_models/appointment_list_model.dart'; import 'package:mc_common_app/models/appointments_models/appointment_list_model.dart';
import 'package:mc_common_app/models/general_models/enums_model.dart'; import 'package:mc_common_app/models/general_models/enums_model.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/provider_branches_models/provider_contact_info_model.dart';
import 'package:mc_common_app/models/user_models/cities.dart'; import 'package:mc_common_app/models/user_models/cities.dart';
import 'package:mc_common_app/models/user_models/country.dart'; import 'package:mc_common_app/models/user_models/country.dart';
import 'package:mc_common_app/models/user_models/role.dart'; import 'package:mc_common_app/models/user_models/role.dart';
import 'package:mc_common_app/utils/utils.dart';
abstract class CommonRepo { abstract class CommonRepo {
Future<Country> getAllCountries(); Future<Country> getAllCountries();
Future<List<VehicleTypeModel>> getVehicleTypes(); Future<Cities> getAllCites(String countryId);
Future<List<VehicleBrandsModel>> getVehicleBrands({required int vehicleTypeId});
Future<List<VehicleModel>> getVehicleModels({required int vehicleTypeId});
Future<List<VehicleYearModel>> getVehicleModelYears({required int vehicleTypeId});
Future<List<VehicleColorModel>> getVehicleColors({required int vehicleTypeId});
Future<List<VehicleConditionModel>> getVehicleConditions({required int vehicleTypeId});
Future<List<VehicleCategoryModel>> getVehicleCategories({required int vehicleTypeId});
Future<List<VehicleMileageModel>> getVehicleMileages({required int vehicleTypeId});
Future<List<VehicleTransmissionModel>> getVehicleTransmission({required int vehicleTypeId});
Future<List<VehicleSellerTypeModel>> getVehicleSellerTypes({required int vehicleTypeId});
Future<List<VehicleCountryModel>> getVehicleCountries();
//TODO: Needs to remove cities method one of them
Future<List<VehicleCityModel>> getVehicleCities({required int countryId}); Future<List<VehicleCityModel>> getVehicleCities({required int countryId});
Future<List<VehiclePartModel>> getVehicleDamageParts(); Future<Role> getRoles();
Future<Cities> getAllCites(String countryId); Future<List<AppointmentListModel>> getMyAppointments();
Future<Role> getRoles(); Future<SSCarCheckScheduleModel> getCarCheckServiceScheduleDetails(
{required double lat, required double long});
Future<SSCarCheckScheduleModel> getCarCheckServiceScheduleDetails({required double lat, required double long}); Future<List<SSPhotoOfficeScheduleModel>>
getPhotographyServiceScheduleListByOffices(
{required double lat, required double long});
Future<List<SSPhotoOfficeScheduleModel>> getPhotographyServiceScheduleListByOffices({required double lat, required double long, required int cityID}); // Future<List<ProviderCategoryModel>> getProviderServiceCategories();
//TODO: Needs to remove common methods from AD's repo and delete all repeated methods. // Future<List<ProviderServiceModel>> getProviderServices({required int categoryId});
Future<VehicleDetailsModel> getVehicleDetails({int? vehicleTypeId, int? vehicleBrandId});
Future<List<EnumsModel>> getEnumTypeValues({int? enumTypeID, String? enumTypeName}); Future<List<VehicleTypeModel>> getVehicleTypes();
Future<GenericRespModel> createComplainFromProvider({required int customerId, required String comment, required int complainType}); //TODO: Needs to remove common methods from AD's repo and delete all repeated methods.
Future<VehicleDetailsModel> getVehicleDetails(
{int? vehicleTypeId, int? vehicleBrandId});
Future<ProviderContactInfoModel> getProvidersContactInfo({required int providerId}); Future<List<EnumsModel>> getEnumTypeValues(
{int? enumTypeID, String? enumTypeName});
} }
class CommonRepoImp implements CommonRepo { class CommonRepoImp implements CommonRepo {
@ -67,7 +51,8 @@ class CommonRepoImp implements CommonRepo {
@override @override
Future<Country> getAllCountries() async { Future<Country> getAllCountries() async {
return await apiClient.getJsonForObject((json) => Country.fromJson(json), ApiConsts.getAllCountry); return await apiClient.getJsonForObject(
(json) => Country.fromJson(json), ApiConsts.GetAllCountry);
} }
@override @override
@ -75,16 +60,38 @@ class CommonRepoImp implements CommonRepo {
var postParams = { var postParams = {
"CountryID": countryId, "CountryID": countryId,
}; };
return await apiClient.getJsonForObject((json) => Cities.fromJson(json), ApiConsts.getAllCities, queryParameters: postParams); return await apiClient.getJsonForObject(
(json) => Cities.fromJson(json), ApiConsts.GetAllCities,
queryParameters: postParams);
} }
@override @override
Future<Role> getRoles() async { Future<Role> getRoles() async {
return await apiClient.getJsonForObject((json) => Role.fromJson(json), ApiConsts.getProviderRoles); return await apiClient.getJsonForObject(
(json) => Role.fromJson(json), ApiConsts.GetProviderRoles);
} }
@override @override
Future<SSCarCheckScheduleModel> getCarCheckServiceScheduleDetails({required double lat, required double long}) async { Future<List<AppointmentListModel>> getMyAppointments() async {
var params = {
"customerID":
appState.getUser.data!.userInfo!.customerId.toString() ?? "",
};
GenericRespModel genericRespModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json),
queryParameters: params,
ApiConsts.serviceProvidersAppointmentGet,
);
List<AppointmentListModel> appointmentList = List.generate(
genericRespModel.data.length,
(index) => AppointmentListModel.fromJson(genericRespModel.data[index]));
return appointmentList;
}
@override
Future<SSCarCheckScheduleModel> getCarCheckServiceScheduleDetails(
{required double lat, required double long}) async {
var params = { var params = {
"Latitude": lat.toString(), "Latitude": lat.toString(),
"Longitude": long.toString(), "Longitude": long.toString(),
@ -95,16 +102,18 @@ class CommonRepoImp implements CommonRepo {
queryParameters: params, queryParameters: params,
ApiConsts.adsCarCheckupSPBranchScheduleSlotGet, ApiConsts.adsCarCheckupSPBranchScheduleSlotGet,
); );
SSCarCheckScheduleModel ssCarCheckScheduleModel = SSCarCheckScheduleModel.fromJson(genericRespModel.data[0]); SSCarCheckScheduleModel ssCarCheckScheduleModel =
SSCarCheckScheduleModel.fromJson(genericRespModel.data[0]);
return ssCarCheckScheduleModel; return ssCarCheckScheduleModel;
} }
@override @override
Future<List<SSPhotoOfficeScheduleModel>> getPhotographyServiceScheduleListByOffices({required double lat, required double long, required int cityID}) async { Future<List<SSPhotoOfficeScheduleModel>>
getPhotographyServiceScheduleListByOffices(
{required double lat, required double long}) async {
var params = { var params = {
"Latitude": lat.toString(), "Latitude": lat.toString(),
"Longitude": long.toString(), "Longitude": long.toString(),
"cityID": cityID.toString(),
}; };
GenericRespModel genericRespModel = await apiClient.getJsonForObject( GenericRespModel genericRespModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken, token: appState.getUser.data!.accessToken,
@ -115,205 +124,32 @@ class CommonRepoImp implements CommonRepo {
if (genericRespModel.data == null) { if (genericRespModel.data == null) {
return []; return [];
} }
List<SSPhotoOfficeScheduleModel> ssPhotoScheduleModel = List.generate(genericRespModel.data.length, (index) => SSPhotoOfficeScheduleModel.fromJson(genericRespModel.data[index])); List<SSPhotoOfficeScheduleModel> ssPhotoScheduleModel = List.generate(
genericRespModel.data.length,
(index) =>
SSPhotoOfficeScheduleModel.fromJson(genericRespModel.data[index]));
return ssPhotoScheduleModel ?? []; return ssPhotoScheduleModel ?? [];
} }
@override @override
Future<List<VehicleTypeModel>> getVehicleTypes() async { Future<List<VehicleTypeModel>> getVehicleTypes() async {
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleTypeGet);
List<VehicleTypeModel> vehicleTypes = List.generate(adsGenericModel.data.length, (index) => VehicleTypeModel.fromJson(adsGenericModel.data[index]));
return vehicleTypes;
}
@override
Future<List<EnumsModel>> getEnumTypeValues({int? enumTypeID, String? enumTypeName}) async {
if (enumTypeID == -1) {
// This is for the vehicle type condition (old, new) which will be added to API later
final Map<String, dynamic> json = {
"data": [
{"id": 1, "enumTypeID": 0, "enumValueStr": "New", "enumValue": 1, "isActive": true},
{"id": 2, "enumTypeID": 0, "enumValueStr": "Used", "enumValue": 2, "isActive": true},
],
};
List<EnumsModel> enums = List.generate((json['data'] as List).length, (index) => EnumsModel.fromJson(json['data'][index]));
return enums;
}
if (enumTypeID == -2) {
// This is for the ShippingRequestStatus which will be added to API later
final Map<String, dynamic> json = {
"data": [
{"id": 1, "enumTypeID": 0, "enumValueStr": "Initiated", "enumValue": 1, "isActive": true},
{"id": 2, "enumTypeID": 0, "enumValueStr": "In Transit", "enumValue": 2, "isActive": true},
{"id": 3, "enumTypeID": 0, "enumValueStr": "Out for Delivery", "enumValue": 3, "isActive": true},
{"id": 4, "enumTypeID": 0, "enumValueStr": "Delivered", "enumValue": 4, "isActive": true},
],
};
List<EnumsModel> enums = List.generate((json['data'] as List).length, (index) => EnumsModel.fromJson(json['data'][index]));
return enums;
}
var postParams = {"enumTypeID": (enumTypeID ?? 0).toString(), "enumTypeName": enumTypeName ?? ""};
GenericRespModel enumGenericModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getEnumTypeValues,
postParams,
token: appState.getUser.data!.accessToken,
);
List<EnumsModel> enums = List.generate(enumGenericModel.data.length, (index) => EnumsModel.fromJson(enumGenericModel.data[index]));
return enums;
}
@override
Future<List<VehicleCategoryModel>> getVehicleCategories({required int vehicleTypeId}) async {
var postParams = {
"VehicleType": vehicleTypeId.toString(),
};
GenericRespModel adsGenericModel =
await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleCategoryGet, queryParameters: postParams);
List<VehicleCategoryModel> vehicleCategories = List.generate(adsGenericModel.data.length, (index) => VehicleCategoryModel.fromJson(adsGenericModel.data[index]));
return vehicleCategories;
}
@override
Future<List<VehicleCityModel>> getVehicleCities({required int countryId}) async {
var postParams = {
"CountryID": countryId.toString(),
};
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleCityGet, queryParameters: countryId != -1 ? postParams : null);
List<VehicleCityModel> vehicleCities = List.generate(adsGenericModel.data.length, (index) => VehicleCityModel.fromJson(adsGenericModel.data[index]));
return vehicleCities;
}
@override
Future<List<VehicleColorModel>> getVehicleColors({required int vehicleTypeId}) async {
var postParams = {
"VehicleType": vehicleTypeId.toString(),
};
GenericRespModel adsGenericModel =
await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleColorGet, queryParameters: postParams);
List<VehicleColorModel> vehicleColors = List.generate(adsGenericModel.data.length, (index) => VehicleColorModel.fromJson(adsGenericModel.data[index]));
return vehicleColors;
}
@override
Future<List<VehicleConditionModel>> getVehicleConditions({required int vehicleTypeId}) async {
var postParams = {
"VehicleType": vehicleTypeId.toString(),
};
GenericRespModel adsGenericModel =
await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleConditionGet, queryParameters: postParams);
List<VehicleConditionModel> vehicleConditions = List.generate(adsGenericModel.data.length, (index) => VehicleConditionModel.fromJson(adsGenericModel.data[index]));
return vehicleConditions;
}
@override
Future<List<VehicleCountryModel>> getVehicleCountries() async {
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json),
ApiConsts.vehicleCountryGet,
);
List<VehicleCountryModel> vehicleConditions = List.generate(adsGenericModel.data.length, (index) => VehicleCountryModel.fromJson(adsGenericModel.data[index]));
return vehicleConditions;
}
@override
Future<List<VehicleMileageModel>> getVehicleMileages({required int vehicleTypeId}) async {
var postParams = {
"VehicleType": vehicleTypeId.toString(),
};
GenericRespModel adsGenericModel =
await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.vehicleMileageGet, queryParameters: postParams);
List<VehicleMileageModel> vehicleMileages = List.generate(adsGenericModel.data.length, (index) => VehicleMileageModel.fromJson(adsGenericModel.data[index]));
return vehicleMileages;
}
@override
Future<List<VehicleYearModel>> getVehicleModelYears({required int vehicleTypeId}) async {
var postParams = {
"VehicleType": vehicleTypeId.toString(),
};
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json),
ApiConsts.vehicleModelYearGet,
queryParameters: vehicleTypeId != -1 ? postParams : null,
);
List<VehicleYearModel> vehicleModelYears = List.generate(adsGenericModel.data.length, (index) => VehicleYearModel.fromJson(adsGenericModel.data[index]));
return vehicleModelYears;
}
@override
Future<List<VehicleModel>> getVehicleModels({required int vehicleTypeId}) async {
var postParams = {
"VehicleType": vehicleTypeId.toString(),
};
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json),
ApiConsts.vehicleModelGet,
queryParameters: postParams,
);
List<VehicleModel> vehicleModels = List.generate(adsGenericModel.data.length, (index) => VehicleModel.fromJson(adsGenericModel.data[index]));
return vehicleModels;
}
@override
Future<List<VehicleBrandsModel>> getVehicleBrands({required int vehicleTypeId}) async {
var postParams = {
"VehicleType": vehicleTypeId.toString(),
};
GenericRespModel adsGenericModel = await apiClient.getJsonForObject( GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken, token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
ApiConsts.vehicleBrandGet, ApiConsts.vehicleTypeGet);
queryParameters: vehicleTypeId != -1 ? postParams : null, List<VehicleTypeModel> vehicleTypes = List.generate(
); adsGenericModel.data.length,
List<VehicleBrandsModel> vehicleBrands = List.generate(adsGenericModel.data.length, (index) => VehicleBrandsModel.fromJson(adsGenericModel.data[index])); (index) => VehicleTypeModel.fromJson(adsGenericModel.data[index]));
return vehicleBrands; return vehicleTypes;
}
@override
Future<List<VehicleSellerTypeModel>> getVehicleSellerTypes({required int vehicleTypeId}) async {
var postParams = {
"VehicleType": vehicleTypeId.toString(),
};
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json),
ApiConsts.vehicleSellerTypeGet,
queryParameters: postParams,
);
List<VehicleSellerTypeModel> vehicleSellerTypes = List.generate(adsGenericModel.data.length, (index) => VehicleSellerTypeModel.fromJson(adsGenericModel.data[index]));
return vehicleSellerTypes;
}
@override
Future<List<VehicleTransmissionModel>> getVehicleTransmission({required int vehicleTypeId}) async {
var postParams = {
"VehicleType": vehicleTypeId.toString(),
};
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json),
ApiConsts.vehicleTransmissionGet,
queryParameters: postParams,
);
List<VehicleTransmissionModel> vehicleTransmissions = List.generate(adsGenericModel.data.length, (index) => VehicleTransmissionModel.fromJson(adsGenericModel.data[index]));
return vehicleTransmissions;
} }
@override @override
Future<VehicleDetailsModel> getVehicleDetails({int? vehicleTypeId, int? vehicleBrandId}) async { Future<VehicleDetailsModel> getVehicleDetails(
{int? vehicleTypeId, int? vehicleBrandId}) async {
var postParams = { var postParams = {
"vehicleType": vehicleTypeId == null ? 0 : vehicleTypeId.toString(), "vehicleType": vehicleTypeId ?? 0,
"isVehicleBrand": "true", "isVehicleBrand": "true",
"vehicleBrand": vehicleBrandId == null ? 0 : vehicleBrandId.toString(), "vehicleBrand": vehicleBrandId ?? 0,
"isVehicleCategory": "true", "isVehicleCategory": "true",
"isVehicleColor": "true", "isVehicleColor": "true",
"isVehicleCondition": "true", "isVehicleCondition": "true",
@ -334,51 +170,62 @@ class CommonRepoImp implements CommonRepo {
postParams, postParams,
token: token, token: token,
); );
VehicleDetailsModel vehicleDetails = VehicleDetailsModel.fromJson(adsGenericModel.data); VehicleDetailsModel vehicleDetails =
VehicleDetailsModel.fromJson(adsGenericModel.data);
return vehicleDetails; return vehicleDetails;
} }
@override @override
Future<List<VehiclePartModel>> getVehicleDamageParts() async { Future<List<VehicleCityModel>> getVehicleCities(
{required int countryId}) async {
var postParams = {
"CountryID": countryId.toString(),
};
GenericRespModel adsGenericModel = await apiClient.getJsonForObject( GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken, token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
ApiConsts.vehicleDamagePartGet, ApiConsts.vehicleCityGet,
); queryParameters: postParams);
List<VehiclePartModel> vehicleParts = List.generate(adsGenericModel.data.length, (index) => VehiclePartModel.fromJson(adsGenericModel.data[index])); List<VehicleCityModel> vehicleCities = List.generate(
return vehicleParts; adsGenericModel.data.length,
(index) => VehicleCityModel.fromJson(adsGenericModel.data[index]));
return vehicleCities;
} }
@override @override
Future<GenericRespModel> createComplainFromProvider({required int customerId, required String comment, required int complainType}) async { Future<List<EnumsModel>> getEnumTypeValues(
final providerId = appState.getUser.data!.userInfo!.providerId; {int? enumTypeID, String? enumTypeName}) async {
final parameters = { var postParams = {
"serviceProviderID": providerId, "enumTypeID": (enumTypeID ?? 0).toString(),
"customerID": customerId, "enumTypeName": enumTypeName ?? ""
"detail": comment,
"complaintType": complainType,
}; };
GenericRespModel adsGenericModel = await apiClient.postJsonForObject( GenericRespModel enumGenericModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
ApiConsts.providerComplaintCreate, ApiConsts.getEnumTypeValues,
parameters, postParams,
token: appState.getUser.data!.accessToken, token: appState.getUser.data!.accessToken,
); );
return adsGenericModel;
}
@override List<EnumsModel> vehicleCities = List.generate(enumGenericModel.data.length,
Future<ProviderContactInfoModel> getProvidersContactInfo({required int providerId}) async { (index) => EnumsModel.fromJson(enumGenericModel.data[index]));
final parameters = { return vehicleCities;
"ProviderID": providerId.toString(),
};
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken,
(json) => GenericRespModel.fromJson(json),
ApiConsts.provideContactInfoGet,
queryParameters: parameters,
);
ProviderContactInfoModel contactInfoModel = ProviderContactInfoModel.fromJson(adsGenericModel.data);
return contactInfoModel;
} }
//
// @override
// Future<List<ProviderCategoryModel>> getProviderServiceCategories() async {
// GenericRespModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.serviceCategoryGet);
// List<ProviderCategoryModel> providerCategories = List.generate(adsGenericModel.data.length, (index) => ProviderCategoryModel.fromJson(adsGenericModel.data[index]));
// return providerCategories;
// }
// @override
// Future<List<ProviderServiceModel>> getProviderServices({required int categoryId}) async {
// var postParams = {
// "ServiceCategoryID": categoryId.toString(),
// };
// GenericRespModel adsGenericModel =
// await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.serviceCategoryGet, queryParameters: postParams);
// List<ProviderServiceModel> providerServices = List.generate(adsGenericModel.data.length, (index) => ProviderServiceModel.fromJson(adsGenericModel.data[index]));
// return providerServices;
// }
} }

@ -1,43 +0,0 @@
import 'package:flutter/material.dart';
import 'package:mc_common_app/api/api_client.dart';
import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/dependency_injection.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/services_models/item_model.dart';
abstract class ItemsRepo {
Future<GenericRespModel> createServiceItems(Map map);
Future<ItemModel> getServiceItems(int serviceId);
Future<GenericRespModel> updateServiceItem(Map map);
}
class ItemsRepoImp implements ItemsRepo {
@override
Future<GenericRespModel> createServiceItems(Map map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.createItems, map, token: t);
}
@override
Future<ItemModel> getServiceItems(int serviceId) async {
var queryParameters = {
"ServiceProviderServiceID": serviceId.toString(),
};
String? token = AppState().getUser.data?.accessToken;
return await injector
.get<ApiClient>()
.getJsonForObject((json) => ItemModel.fromJson(json), ApiConsts.getServiceItems, queryParameters: queryParameters, token: AppState().getUser.data!.accessToken ?? "");
}
@override
Future<GenericRespModel> updateServiceItem(Map map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.updateServiceItem, map, token: t);
}
}

@ -1,16 +1,12 @@
import 'package:mc_common_app/api/api_client.dart'; import 'package:mc_common_app/api/api_client.dart';
import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/dependency_injection.dart'; import 'package:mc_common_app/config/dependencies.dart';
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/payment_models/pay_order_detail_resp_model.dart'; import 'package:mc_common_app/models/payment_models/pay_order_detail_resp_model.dart';
import 'package:mc_common_app/utils/enums.dart';
abstract class PaymentsRepo { abstract class PaymentsRepo {
Future<bool> verifyPayment({required int paymentTypeId, required int id, bool isForAppointments = false, List<int>? appointmentIds}); Future<PayOrderDetailRespModel> getPayOrderDetails({required int paymentId, required int adId});
Future<PayOrderDetailRespModel> getPayOrderDetails({required int paymentTypeId, required int adId});
} }
class PaymentsRepoImp implements PaymentsRepo { class PaymentsRepoImp implements PaymentsRepo {
@ -18,67 +14,9 @@ class PaymentsRepoImp implements PaymentsRepo {
AppState appState = injector.get<AppState>(); AppState appState = injector.get<AppState>();
@override @override
Future<PayOrderDetailRespModel> getPayOrderDetails({required int paymentTypeId, required int adId}) async { Future<PayOrderDetailRespModel> getPayOrderDetails({required int paymentId, required int adId}) async {
var queryParameters = { GenericRespModel adsGenericModel = await apiClient.getJsonForObject(token: appState.getUser.data!.accessToken, (json) => GenericRespModel.fromJson(json), ApiConsts.payForOrderDetailGet);
"AdsID": adId.toString(),
"PaymentType": paymentTypeId.toString(),
};
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken,
queryParameters: queryParameters,
(json) => GenericRespModel.fromJson(json),
ApiConsts.payForOrderDetailGet,
);
PayOrderDetailRespModel payOrderDetailRespModel = PayOrderDetailRespModel.fromJson(adsGenericModel.data); PayOrderDetailRespModel payOrderDetailRespModel = PayOrderDetailRespModel.fromJson(adsGenericModel.data);
return payOrderDetailRespModel; return payOrderDetailRespModel;
} }
String getKeyByPaymentType({required int paymentType}) {
PaymentTypes paymentTypeEnum = paymentType.getPaymentTypeFromId();
switch (paymentTypeEnum) {
case PaymentTypes.subscription:
return "SubscriptionAppliedID";
case PaymentTypes.appointment:
case PaymentTypes.partialAppointment:
return "appointmentIds";
case PaymentTypes.ads:
case PaymentTypes.adReserve:
case PaymentTypes.extendAds:
return "AdsID";
case PaymentTypes.request:
return "RequestID";
}
}
@override
Future<bool> verifyPayment({required int paymentTypeId, required int id, bool isForAppointments = false, List<int>? appointmentIds}) async {
Map<String, dynamic> queryParameters = {
"ID": id.toString(),
"PaymentType": paymentTypeId.toString(),
};
if (isForAppointments) {
List<String> ids = [];
if (appointmentIds != null) {
for (var element in appointmentIds) {
ids.add(element.toString());
}
}
queryParameters.removeWhere((key, value) => key == "ID");
queryParameters.addAll({"IDs": ids});
}
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
token: appState.getUser.data!.accessToken,
queryParameters: queryParameters,
(json) => GenericRespModel.fromJson(json),
ApiConsts.payForOrderIsPaidGet,
);
if (adsGenericModel.data == null) {
return false;
}
bool isPaid = adsGenericModel.data['isPaid'] ?? false;
return isPaid;
}
} }

@ -0,0 +1,55 @@
import 'dart:async';
import 'package:mc_common_app/api/api_client.dart';
import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/dependencies.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart';
import 'package:mc_common_app/models/provider_branches_models/provider_profile_model.dart';
import 'package:mc_common_app/models/services_models/item_model.dart';
abstract class ProviderRepo {
Future<List<BranchDetailModel>> getAllNearBranchAndServices();
Future<List<ItemData>> getServiceItems(int serviceId);
Future<ProviderProfileModel> getBranchAndServices(int providerId);
}
class ProviderRepoImp implements ProviderRepo {
ApiClient apiClient = injector.get<ApiClient>();
AppState appState = injector.get<AppState>();
@override
Future<List<BranchDetailModel>> getAllNearBranchAndServices() async {
GenericRespModel adsGenericModel = await apiClient.getJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.GetAllNearBranches, token: appState.getUser.data!.accessToken);
List<BranchDetailModel> nearBranches = List.generate(adsGenericModel.data.length, (index) => BranchDetailModel.fromJson(adsGenericModel.data[index]));
return nearBranches;
}
@override
Future<List<ItemData>> getServiceItems(int serviceId) async {
var queryParameters = {
"ServiceProviderServiceID": serviceId.toString(),
};
GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getServiceItems,
token: appState.getUser.data!.accessToken,
queryParameters: queryParameters,
);
List<ItemData> serviceItems = List.generate(adsGenericModel.data.length, (index) => ItemData.fromJson(adsGenericModel.data[index]));
return serviceItems;
}
@override
Future<ProviderProfileModel> getBranchAndServices(int providerId) async {
var postParams = {"serviceProviderID": providerId.toString()};
GenericRespModel adsGenericModel =
await apiClient.getJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.BranchesAndServices, token: appState.getUser.data!.accessToken, queryParameters: postParams);
return ProviderProfileModel.fromJson(adsGenericModel.data);
}
}

@ -1,80 +1,24 @@
import 'dart:developer';
import 'package:mc_common_app/api/api_client.dart'; import 'package:mc_common_app/api/api_client.dart';
import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/dependency_injection.dart'; import 'package:mc_common_app/config/dependencies.dart';
import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/requests_models/offers_unread_chat_model.dart'; import 'package:mc_common_app/models/requests_models/offers_model.dart';
import 'package:mc_common_app/models/requests_models/provider_offers_model.dart'; import 'package:mc_common_app/models/requests_models/provider_offers_model.dart';
import 'package:mc_common_app/models/requests_models/providers_offers_chat_model.dart';
import 'package:mc_common_app/models/requests_models/request_model.dart'; import 'package:mc_common_app/models/requests_models/request_model.dart';
import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/enums.dart';
abstract class RequestRepo { abstract class RequestRepo {
Future<GenericRespModel> createRequest({ Future<GenericRespModel> createRequest(Map<String, dynamic> map);
required int requestTypeId,
required int vehicleTypeId,
required String brand,
required String model,
required String year,
required bool isNew,
required int countryID,
required int cityID,
required String price,
required String description,
required String address,
required bool isSpecialServiceNeeded,
required List requestImages,
});
Future<List<ProviderOffersChatsModel>> getOffersChatByProvider({int requestId = 0, required int serviceProviderId});
Future<OffersUnreadChatModel> getOffersChatsUnreadList({required String userId}); Future<List<OffersModel>> getOffersByRequest({required int requestId, int serviceProviderId = 0});
Future<ProviderOffersModel> getOffersFromProvidersByRequest({required int requestId}); Future<ProviderOffersModel> getOffersFromProvidersByRequest({required int requestId});
Future<List<RequestModel>> getRequests({required int providerOrCustomerID}); Future<List<RequestModel>> getRequests(Map<String, dynamic> postParams);
Future<List<RequestModel>> getRequestsBasedOnFilters({
required int requestTypeId,
int requestId = 0,
int requestStatusId = 0,
int reqOfferStatus = 0,
int? cityId = 0,
int? vehicleYearId = 0,
String? vehicleModel = "",
String? vehicleBrand = "",
String? requestedDate = "",
int? conditionId = 0,
int pageIndex = 0,
int pageSize = 100,
});
Future<List<RequestModel>> getServiceRequestsForProviders({required int serviceProviderID});
Future<GenericRespModel> updateRequestStatus({required RequestStatusEnum requestStatusEnum, required int requestId});
Future<GenericRespModel> updateRequestOfferStatus({required RequestOfferStatusEnum requestOfferStatusEnum, required int requestOfferId, required String comments});
Future<GenericRespModel> updateRequestDeliveryOptionByCustomer({required int requestID, required int requestOfferId, required RequestDeliveryOptionEnum deliveryOptionEnum});
Future<GenericRespModel> updateRequestOfferFromProvider({
required String message,
required int requestId,
required int offerId,
required String offerPrice,
required bool isDeliveryAvailable,
required int offerDeliveryOption,
required String serviceItemName,
required String manufacturedByName,
required String manufacturedOn,
required List requestImages,
required RequestOfferStatusEnum requestOfferStatusEnum,
});
Future<GenericRespModel> updateRequestAdditionalAddress({required int requestID, required String additionalAddress}); Future<GenericRespModel> updateOfferRequestStatus({required RequestOfferStatusEnum requestOfferStatusEnum, required int requestOfferId});
} }
class RequestRepoImp implements RequestRepo { class RequestRepoImp implements RequestRepo {
@ -82,37 +26,7 @@ class RequestRepoImp implements RequestRepo {
AppState appState = injector.get<AppState>(); AppState appState = injector.get<AppState>();
@override @override
Future<GenericRespModel> createRequest({ Future<GenericRespModel> createRequest(Map<String, dynamic> postParams) async {
required int requestTypeId,
required int vehicleTypeId,
required String brand,
required String model,
required String year,
required bool isNew,
required int countryID,
required int cityID,
required String price,
required String description,
required String address,
required bool isSpecialServiceNeeded,
required List requestImages,
}) async {
Map<String, dynamic> postParams = {
"customerID": appState.getUser.data!.userInfo!.customerId ?? 0,
"requestType": requestTypeId,
"vehicleTypeID": vehicleTypeId,
"brand": brand,
"model": model,
"year": year,
"isNew": isNew,
"countryID": countryID,
"cityID": cityID,
"price": price,
"description": description,
"address": address,
"isSpecialServiceNeeded": false,
"requestImages": requestImages,
};
GenericRespModel enumGenericModel = await apiClient.postJsonForObject( GenericRespModel enumGenericModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
ApiConsts.createRequest, ApiConsts.createRequest,
@ -123,21 +37,11 @@ class RequestRepoImp implements RequestRepo {
} }
@override @override
Future<List<RequestModel>> getRequests({required int providerOrCustomerID}) async { Future<List<RequestModel>> getRequests(Map<String, dynamic> postParams) async {
final paramsForGetRequests = {
"pageSize": 100,
"pageIndex": 0,
};
if (appState.currentAppType == AppType.provider) {
paramsForGetRequests.addEntries([MapEntry("providerID", providerOrCustomerID)]);
} else {
paramsForGetRequests.addEntries([MapEntry("customerID", providerOrCustomerID)]);
}
GenericRespModel enumGenericModel = await apiClient.postJsonForObject( GenericRespModel enumGenericModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
ApiConsts.getRequest, ApiConsts.getRequest,
paramsForGetRequests, postParams,
token: appState.getUser.data!.accessToken, token: appState.getUser.data!.accessToken,
); );
List<RequestModel> requests = List.generate( List<RequestModel> requests = List.generate(
@ -150,141 +54,7 @@ class RequestRepoImp implements RequestRepo {
} }
@override @override
Future<List<RequestModel>> getRequestsBasedOnFilters({ Future<List<OffersModel>> getOffersByRequest({required int requestId, int serviceProviderId = 0}) async {
required int requestTypeId,
int requestStatusId = 0,
int requestId = 0,
int reqOfferStatus = 0,
int? cityId = 0,
int? vehicleYearId = 0,
String? vehicleModel = "",
String? vehicleBrand = "",
String? requestedDate = "",
int? conditionId = 0,
int pageIndex = 0,
int pageSize = 100,
}) async {
final paramsForGetRequests = {
"pageIndex": pageIndex,
"pageSize": pageSize,
"doPagination": true,
"requestType": requestTypeId.toString(),
"requestStatus": requestStatusId.toString(),
"reqOfferStatus": reqOfferStatus.toString(),
"brand": vehicleBrand.toString(),
"requestedDate": requestedDate,
"model": vehicleModel.toString(),
"year": vehicleYearId.toString(),
"cityID": cityId.toString(),
"isNew": conditionId == 0 ? "" : conditionId == 1,
};
if (appState.currentAppType == AppType.customer) {
paramsForGetRequests.addEntries([MapEntry("customerID", appState.getUser.data!.userInfo!.customerId ?? 0)]);
} else {
paramsForGetRequests.addEntries([MapEntry("providerID", appState.getUser.data!.userInfo!.providerId.toString())]);
}
paramsForGetRequests.removeWhere((key, value) => value == "" || value == "0");
if (appState.currentAppType == AppType.provider && requestTypeId == 2) {
List<RequestModel> requests = await getRequestBasedOnFiltersForProvidersServiceRequest(paramsForGetRequests);
return requests;
}
GenericRespModel enumGenericModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getRequest,
paramsForGetRequests,
token: appState.getUser.data!.accessToken,
);
List<RequestModel> requests = List.generate(
enumGenericModel.data.length,
(index) => RequestModel.fromJson(enumGenericModel.data[index]),
);
return requests;
}
Future<List<RequestModel>> getRequestBasedOnFiltersForProvidersServiceRequest(Map<String, Object?> parameters) async {
List<String> requestStatusList = [
RequestStatusEnum.submitted.getIdFromRequestStatusEnum().toString(),
RequestStatusEnum.completed.getIdFromRequestStatusEnum().toString(),
RequestStatusEnum.inProgress.getIdFromRequestStatusEnum().toString(),
RequestStatusEnum.paid.getIdFromRequestStatusEnum().toString(),
RequestStatusEnum.delivery.getIdFromRequestStatusEnum().toString(),
RequestStatusEnum.shipping.getIdFromRequestStatusEnum().toString(),
RequestStatusEnum.selfPickup.getIdFromRequestStatusEnum().toString(),
];
if (parameters['requestStatus'] != null && parameters['requestStatus'] != "0") {
parameters.addEntries([
MapEntry("RequestStatuses", [parameters['requestStatus'].toString()])
]);
} else {
parameters.removeWhere((key, value) => key == "requestStatus");
parameters.addEntries([MapEntry("RequestStatuses", requestStatusList)]);
}
parameters.removeWhere((key, value) => key == "providerID");
parameters.removeWhere((key, value) => key == "pageIndex");
parameters.removeWhere((key, value) => key == "pageSize");
parameters.removeWhere((key, value) => key == "doPagination");
parameters.addEntries([MapEntry("ServiceProviderId", appState.getUser.data!.userInfo!.providerId.toString())]);
// final parameters = {
// "ServiceProviderId": serviceProviderID.toString(),
// "RequestType": "2", // Only to get the Service Request
// "RequestStatuses": requestStatusList,
// };
GenericRespModel genericRespModel = await apiClient.getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getServiceRequestsForProvider,
queryParameters: parameters,
token: appState.getUser.data!.accessToken,
);
List<RequestModel> requests = List.generate(
genericRespModel.data.length,
(index) => RequestModel.fromJson(
genericRespModel.data[index],
),
);
return requests;
}
@override
Future<List<RequestModel>> getServiceRequestsForProviders({required int serviceProviderID}) async {
List<String> requestStatusList = [
RequestStatusEnum.submitted.getIdFromRequestStatusEnum().toString(),
RequestStatusEnum.completed.getIdFromRequestStatusEnum().toString(),
RequestStatusEnum.inProgress.getIdFromRequestStatusEnum().toString(),
RequestStatusEnum.paid.getIdFromRequestStatusEnum().toString(),
RequestStatusEnum.delivery.getIdFromRequestStatusEnum().toString(),
RequestStatusEnum.shipping.getIdFromRequestStatusEnum().toString(),
RequestStatusEnum.selfPickup.getIdFromRequestStatusEnum().toString(),
];
final parameters = {
"ServiceProviderId": serviceProviderID.toString(),
"RequestType": "2", // Only to get the Service Request
"RequestStatuses": requestStatusList,
};
GenericRespModel genericRespModel = await apiClient.getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getServiceRequestsForProvider,
queryParameters: parameters,
token: appState.getUser.data!.accessToken,
);
List<RequestModel> requests = List.generate(
genericRespModel.data.length,
(index) => RequestModel.fromJson(
genericRespModel.data[index],
),
);
return requests;
}
@override
Future<List<ProviderOffersChatsModel>> getOffersChatByProvider({int requestId = 0, required int serviceProviderId}) async {
var queryParameters = { var queryParameters = {
"RequestID": requestId.toString(), "RequestID": requestId.toString(),
"ServiceProviderID": serviceProviderId.toString(), "ServiceProviderID": serviceProviderId.toString(),
@ -295,29 +65,13 @@ class RequestRepoImp implements RequestRepo {
queryParameters: queryParameters, queryParameters: queryParameters,
token: appState.getUser.data!.accessToken, token: appState.getUser.data!.accessToken,
); );
List<ProviderOffersChatsModel> offersList = List.generate( List<OffersModel> offersList = List.generate(
genericRespModel.data.length, genericRespModel.data.length,
(index) => ProviderOffersChatsModel.fromJson(genericRespModel.data[index]), (index) => OffersModel.fromJson(genericRespModel.data[index]),
); );
return offersList; return offersList;
} }
@override
Future<OffersUnreadChatModel> getOffersChatsUnreadList({required String userId}) async {
var queryParameters = {
"ReceiverUserID": userId.toString(),
};
GenericRespModel genericRespModel = await apiClient.getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.reqChatUnreadGet,
queryParameters: queryParameters,
token: appState.getUser.data!.accessToken,
);
OffersUnreadChatModel offersUnreadChatModel = OffersUnreadChatModel.fromJson(genericRespModel.data);
return offersUnreadChatModel;
}
@override @override
Future<ProviderOffersModel> getOffersFromProvidersByRequest({required int requestId}) async { Future<ProviderOffersModel> getOffersFromProvidersByRequest({required int requestId}) async {
final customerId = appState.getUser.data!.userInfo!.customerId; final customerId = appState.getUser.data!.userInfo!.customerId;
@ -333,106 +87,16 @@ class RequestRepoImp implements RequestRepo {
); );
ProviderOffersModel providerOffersModel = ProviderOffersModel(); ProviderOffersModel providerOffersModel = ProviderOffersModel();
if (genericRespModel.data != null && genericRespModel.data.length > 0) { if (genericRespModel.data != null && genericRespModel.data.length > 0) {
providerOffersModel = ProviderOffersModel.fromJson(genericRespModel.data.first, requestId); providerOffersModel = ProviderOffersModel.fromJson(genericRespModel.data.first);
} }
return providerOffersModel; return providerOffersModel;
} }
@override @override
Future<GenericRespModel> updateRequestStatus({required RequestStatusEnum requestStatusEnum, required int requestId}) async { Future<GenericRespModel> updateOfferRequestStatus({required RequestOfferStatusEnum requestOfferStatusEnum, required int requestOfferId}) async {
var queryParameters = {
"requestId": requestId.toString(),
"requestStatus": requestStatusEnum.getIdFromRequestStatusEnum().toString(),
};
GenericRespModel genericRespModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json),
appState.currentAppType == AppType.provider ? ApiConsts.updateRequestProvider : ApiConsts.updateRequestCustomer,
queryParameters,
token: appState.getUser.data!.accessToken,
);
return genericRespModel;
}
@override
Future<GenericRespModel> updateRequestAdditionalAddress({required int requestID, required String additionalAddress}) async {
var queryParameters = {
"requestID": requestID.toString(),
"additionalAddress": additionalAddress.toString(),
};
GenericRespModel genericRespModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.requestUpdateAdditionalAddress,
queryParameters,
token: appState.getUser.data!.accessToken,
);
return genericRespModel;
}
@override
Future<GenericRespModel> updateRequestOfferStatus({required RequestOfferStatusEnum requestOfferStatusEnum, required int requestOfferId, required String comments}) async {
var queryParameters = { var queryParameters = {
"requestOfferId": requestOfferId.toString(), "requestOfferId": requestOfferId.toString(),
"offerStatus": requestOfferStatusEnum.getIdFromRequestOfferStatusEnum().toString(), "offerStatus": requestOfferStatusEnum.getIdFromRequestOfferStatusEnum().toString(),
"comments": comments,
};
GenericRespModel genericRespModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.updateRequestOfferStatus,
queryParameters,
token: appState.getUser.data!.accessToken,
);
return genericRespModel;
}
@override
Future<GenericRespModel> updateRequestDeliveryOptionByCustomer({required int requestID, required int requestOfferId, required RequestDeliveryOptionEnum deliveryOptionEnum}) async {
var queryParameters = {
"requestID": requestID.toString(),
"requestOfferId": requestOfferId.toString(),
"deliveryOption": deliveryOptionEnum.getIdRequestDeliveryOptionEnum().toString(),
};
GenericRespModel genericRespModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.requestOfferUpdateDeliveryOptionByCustomer,
queryParameters,
token: appState.getUser.data!.accessToken,
);
return genericRespModel;
}
@override
Future<GenericRespModel> updateRequestOfferFromProvider({
required String message,
required int requestId,
required int offerId,
required String offerPrice,
required bool isDeliveryAvailable,
required int offerDeliveryOption,
required String serviceItemName,
required String manufacturedByName,
required String manufacturedOn,
required List requestImages,
required RequestOfferStatusEnum requestOfferStatusEnum,
}) async {
final providerId = appState.getUser.data!.userInfo!.providerId;
var queryParameters = {
"id": offerId,
"requestID": requestId,
"serviceProviderID": providerId,
"offerStatus": requestOfferStatusEnum.getIdFromRequestOfferStatusEnum(),
"serviceItem": serviceItemName,
"comment": message,
"price": offerPrice,
"offeredItemCreatedByName": manufacturedByName.toString(),
"offeredItemCreatedOn": manufacturedOn.toString(),
"reqOfferImages": requestImages,
"isDeliveryAvailable": isDeliveryAvailable,
"offerDeliveryOption": offerDeliveryOption
}; };
GenericRespModel genericRespModel = await apiClient.postJsonForObject( GenericRespModel genericRespModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),

@ -1,82 +0,0 @@
import 'package:mc_common_app/models/appointments_models/schedule_model.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/provider_branches_models/profile/services.dart';
import 'package:mc_common_app/api/api_client.dart';
import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/dependency_injection.dart';
abstract class ScheduleRepo {
Future<Services> getAllServices(String branchId);
Future<GenericRespModel> createSchedule(Map map);
Future<GenericRespModel> checkServiceGroupInBranchSchedule(Map map);
Future<GenericRespModel> addServicesInSchedule(Map map);
Future<GenericRespModel> updateSchedule(Map map);
Future<Schedule> getSchedules(String branchId);
Future<GenericRespModel> updateServicesInSchedule(Map map);
Future<GenericRespModel> setScheduleInActive(int scheduleId, int branchId);
}
class ScheduleRepoImp implements ScheduleRepo {
@override
Future<Services> getAllServices(String branchId) async {
Map<String, dynamic> map = {"ProviderBranchID": branchId};
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().getJsonForObject((json) => Services.fromJson(json), ApiConsts.getServicesOfBranch, token: t, queryParameters: map);
}
@override
Future<GenericRespModel> createSchedule(Map map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.createSchedule, map, token: t);
}
@override
Future<GenericRespModel> checkServiceGroupInBranchSchedule(Map map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.checkGroupServiceInBranchSchedule, map, token: t);
}
@override
Future<GenericRespModel> addServicesInSchedule(Map map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.createGroup, map, token: t);
}
@override
Future<Schedule> getSchedules(String branchId) async {
Map<String, dynamic> map = {"ServiceProviderBranchID": branchId};
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().getJsonForObject((json) => Schedule.fromJson(json), ApiConsts.getSchedule, token: t, queryParameters: map);
}
@override
Future<GenericRespModel> setScheduleInActive(int scheduleId, int branchId) async {
Map<String, dynamic> map = {
"id": scheduleId,
"serviceProviderBranchID": branchId,
"isActive": false,
};
String t = AppState().getUser.data!.accessToken ?? "";
return injector.get<ApiClient>().postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.setScheduleInactive, token: t, map);
}
@override
Future<GenericRespModel> updateSchedule(Map map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.updateSchedule, map, token: t);
}
@override
Future<GenericRespModel> updateServicesInSchedule(Map map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.updateGroup, map, token: t);
}
}

@ -1,214 +0,0 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:mc_common_app/api/api_client.dart';
import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/dependency_injection.dart';
import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/setting_utils_models/app_info_model.dart';
import 'package:mc_common_app/models/setting_utils_models/app_invitation_history_model.dart';
import 'package:mc_common_app/models/setting_utils_models/contact_infos_model.dart';
import 'package:mc_common_app/models/setting_utils_models/faqs_model.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/utils.dart';
abstract class SettingOptionsRepo {
Future<List<FAQsModel>> getAllFaqs();
Future<List<ContactInfoModel>> getAllContactInfos();
Future<List<AppInfoModel>> getAppInfoList();
Future<List<AppInfoModel>> getTermsAndConditions();
Future<GenericRespModel> appInvitationCreate({required int channelId, required String message});
Future<List<AppInvitationHistoryModel>> getAppInvitationsHistory();
}
class SettingOptionsRepoImp extends SettingOptionsRepo {
ApiClient apiClient = injector.get<ApiClient>();
AppState appState = injector.get<AppState>();
@override
Future<List<FAQsModel>> getAllFaqs() async {
int channel = 0;
if (AppState().currentAppType == AppType.provider) {
channel = 2;
} else {
channel = 3;
}
final params = {
"Channel": channel.toString(),
};
String token = appState.getUser.data!.accessToken ?? "";
GenericRespModel genericRespModel = await injector.get<ApiClient>().getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getAllFAQs,
token: token,
queryParameters: params,
);
if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) {
Utils.showToast(genericRespModel.message ?? LocaleKeys.somethingWrong.tr());
return [];
}
List<FAQsModel> list = List.generate(genericRespModel.data.length, (index) => FAQsModel.fromJson(genericRespModel.data[index]));
return list;
}
@override
Future<List<ContactInfoModel>> getAllContactInfos() async {
int channel = 0;
if (AppState().currentAppType == AppType.provider) {
channel = 2;
} else {
channel = 3;
}
final params = {"Channel": channel.toString()};
String token = appState.getUser.data!.accessToken ?? "";
GenericRespModel genericRespModel = await injector.get<ApiClient>().getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getContactInfo,
queryParameters: params,
token: token,
);
if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) {
Utils.showToast(genericRespModel.message ?? LocaleKeys.somethingWrong.tr());
return [];
}
List<ContactInfoModel> list = List.generate(genericRespModel.data.length, (index) => ContactInfoModel.fromJson(genericRespModel.data[index]));
return list;
}
@override
Future<List<AppInfoModel>> getAppInfoList() async {
String token = appState.getUser.data!.accessToken ?? "";
int channel = 0;
if (AppState().currentAppType == AppType.provider) {
channel = 2;
} else {
channel = 3;
}
final params = {
"Channel": channel.toString(),
};
GenericRespModel genericRespModel = await injector.get<ApiClient>().getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getAppInfo,
token: token,
queryParameters: params,
);
if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) {
Utils.showToast(genericRespModel.message ?? LocaleKeys.somethingWrong.tr());
return [];
}
List<AppInfoModel> list = List.generate(genericRespModel.data.length, (index) => AppInfoModel.fromJson(genericRespModel.data[index]));
return list;
}
@override
Future<List<AppInfoModel>> getTermsAndConditions() async {
String token = appState.getUser.data!.accessToken ?? "";
int channel = 0;
if (AppState().currentAppType == AppType.provider) {
channel = 2;
} else {
channel = 3;
}
final params = {
"Channel": channel.toString(),
};
GenericRespModel genericRespModel = await injector.get<ApiClient>().getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getTermsAndConditions,
token: token,
queryParameters: params,
);
if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) {
Utils.showToast(genericRespModel.message ?? LocaleKeys.somethingWrong.tr());
return [];
}
List<AppInfoModel> list = List.generate(genericRespModel.data.length, (index) => AppInfoModel.fromJson(genericRespModel.data[index], isForTermsAndCondition: true));
return list;
}
@override
Future<GenericRespModel> appInvitationCreate({required int channelId, required String message}) async {
String token = appState.getUser.data!.accessToken ?? "";
final params = {
"appInvitationEnumID": channelId.toString(),
"comments": message,
};
if (AppState().currentAppType == AppType.customer) {
params.addAll({
"customerID": (appState.getUser.data!.userInfo!.customerId ?? "0").toString(),
"channelID": "3",
});
} else {
params.addAll({
"providerID": (appState.getUser.data!.userInfo!.providerId ?? "0").toString(),
"channelID": "2",
});
}
GenericRespModel genericRespModel = await injector.get<ApiClient>().postJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.createAppInvitation,
token: token,
params,
);
return genericRespModel;
}
@override
Future<List<AppInvitationHistoryModel>> getAppInvitationsHistory() async {
final params = {
"CustomerID": (appState.getUser.data!.userInfo!.customerId ?? "0").toString(),
"ChannelID": "3",
};
String token = appState.getUser.data!.accessToken ?? "";
GenericRespModel genericRespModel = await injector.get<ApiClient>().getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getAppInvitationHistory,
queryParameters: params,
token: token,
);
if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) {
Utils.showToast(genericRespModel.message ?? LocaleKeys.somethingWrong.tr());
return [];
}
List<AppInvitationHistoryModel> list = List.generate(genericRespModel.data.length, (index) => AppInvitationHistoryModel.fromJson(genericRespModel.data[index]));
return list;
}
}

@ -1,125 +0,0 @@
import 'dart:developer';
import 'package:easy_localization/easy_localization.dart';
import 'package:mc_common_app/api/api_client.dart';
import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/dependency_injection.dart';
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/shipping_models/shipping_status_model.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/utils/utils.dart';
abstract class ShippingRepo {
Future<List<ShippingRequestModel>> getSelfPickupRequestListByStatus({SelfPickupRequestStatusEnum? selfPickupRequestStatus, int? requestId});
Future<List<ShippingRequestModel>> getShippingRequestListByStatus({ShippingRequestStatusEnum? shippingStatusEnum, int? requestId});
Future<GenericRespModel> updateShippingRequestStatus({required ShippingRequestStatusEnum shippingStatusEnum, required int shippingRequestId, String? comment});
Future<GenericRespModel> updateSelfPickupRequestStatus({required SelfPickupRequestStatusEnum selfPickupStatusEnum, required int shippingRequestId, String? comment});
}
class ShippingRepoImp extends ShippingRepo {
ApiClient apiClient = injector.get<ApiClient>();
AppState appState = injector.get<AppState>();
@override
Future<List<ShippingRequestModel>> getShippingRequestListByStatus({ShippingRequestStatusEnum? shippingStatusEnum, int? requestId}) async {
String token = appState.getUser.data!.accessToken ?? "";
Map queryParameters = {
"requestID": "${requestId ?? 0}",
"shippingStatus": "${shippingStatusEnum != null ? shippingStatusEnum.getIdFromShippingStatusEnum() : -1}", // -1 to get all requests
};
GenericRespModel genericRespModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.shippingRequestStatusGet,
queryParameters,
token: token,
);
if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) {
Utils.showToast(genericRespModel.message ?? LocaleKeys.somethingWrong.tr());
return [];
}
List<ShippingRequestModel> list = List.generate(genericRespModel.data.length, (index) => ShippingRequestModel.fromJsonShipping(genericRespModel.data[index], true));
return list;
}
@override
Future<List<ShippingRequestModel>> getSelfPickupRequestListByStatus({SelfPickupRequestStatusEnum? selfPickupRequestStatus, int? requestId}) async {
String token = appState.getUser.data!.accessToken ?? "";
Map queryParameters = {
"requestID": "${requestId ?? 0}",
"selfPickUpStatus": "${selfPickupRequestStatus != null ? selfPickupRequestStatus.getIdFromSelfPickupStatusEnum() : -1}", // -1 to get all requests
};
GenericRespModel genericRespModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.selfPickupRequestStatusGet,
queryParameters,
token: token,
);
if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) {
Utils.showToast(genericRespModel.message ?? LocaleKeys.somethingWrong.tr());
return [];
}
List<ShippingRequestModel> list = List.generate(genericRespModel.data.length, (index) => ShippingRequestModel.fromJsonShipping(genericRespModel.data[index], false));
return list;
}
@override
Future<GenericRespModel> updateShippingRequestStatus({required ShippingRequestStatusEnum shippingStatusEnum, required int shippingRequestId, String? comment}) async {
String token = appState.getUser.data!.accessToken ?? "";
Map<String, String> queryParameters = {
"id": "$shippingRequestId",
"shippingStatus": "${shippingStatusEnum.getIdFromShippingStatusEnum()}",
"comment": comment ?? "",
};
GenericRespModel genericRespModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.shippingRequestStatusUpdate,
queryParameters,
token: token,
);
if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) {
Utils.showToast(genericRespModel.message ?? LocaleKeys.somethingWrong.tr());
}
return genericRespModel;
}
@override
Future<GenericRespModel> updateSelfPickupRequestStatus({required SelfPickupRequestStatusEnum selfPickupStatusEnum, required int shippingRequestId, String? comment}) async {
String token = appState.getUser.data!.accessToken ?? "";
Map<String, String> queryParameters = {
"id": "$shippingRequestId",
"selfPickUpStatus": "${selfPickupStatusEnum.getIdFromSelfPickupStatusEnum()}",
"comment": comment ?? "",
};
GenericRespModel genericRespModel = await apiClient.postJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.selfPickupRequestStatusUpdate,
queryParameters,
token: token,
);
if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) {
Utils.showToast(genericRespModel.message ?? LocaleKeys.somethingWrong.tr());
}
return genericRespModel;
}
}

@ -1,178 +0,0 @@
import 'package:mc_common_app/api/api_client.dart';
import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/dependency_injection.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart';
import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart';
import 'package:mc_common_app/models/subscriptions_models/branch_user_selection_model.dart';
import 'package:mc_common_app/models/subscriptions_models/subscription_model.dart';
import 'package:mc_common_app/models/user_models/branch_user.dart';
abstract class SubscriptionRepo {
// Future<SubscriptionModel> getAllSubscriptions(String? serviceProviderID);
// Future<List<ProviderSubscriptionModel>> getProviderSubscription({String? serviceProviderID});
Future<SubscriptionModel> getMySubscriptions(String? serviceProviderID);
Future<SubscriptionModel> getSubscriptionBySP(String? serviceProviderID, bool isRenew);
Future<GenericRespModel> calculationUpgradePrice(String? serviceProviderID, String? newSubscription);
Future<GenericRespModel> payForProviderSubscription(Map<String, dynamic> map);
Future<List<BranchSelectionModel>> getSPBranchUserGet(Map<String, String> map);
}
class SubscriptionRepoImp extends SubscriptionRepo {
ApiClient apiClient = injector.get<ApiClient>();
AppState appState = injector.get<AppState>();
@override
Future<SubscriptionModel> getSubscriptionBySP(String? serviceProviderID, bool isRenew) async {
String t = AppState().getUser.data!.accessToken ?? "";
Map<String, dynamic> queryParameters = {};
if (serviceProviderID != null) {
queryParameters = {
"ProviderID": serviceProviderID,
"IsRenew": isRenew.toString(),
};
}
return await injector.get<ApiClient>().getJsonForObject(
(json) => SubscriptionModel.fromJson(json),
ApiConsts.getSubscriptionBySP,
token: t,
queryParameters: queryParameters,
);
}
@override
Future<GenericRespModel> calculationUpgradePrice(String? serviceProviderID, String? newSubscription) async {
String t = AppState().getUser.data!.accessToken ?? "";
Map<String, String> queryParameters = {};
if (serviceProviderID != null) {
queryParameters = {
"ServiceProviderID": serviceProviderID,
"NewSubscription": newSubscription!,
};
}
return await injector.get<ApiClient>().getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.calculationUpgradePrice,
token: t,
queryParameters: queryParameters,
);
}
@override
Future<GenericRespModel> payForProviderSubscription(Map<String, dynamic> map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.payFortOrderProviderSubscriptionCreate,
map,
token: t,
);
}
@override
Future<List<BranchSelectionModel>> getSPBranchUserGet(Map<String, String> map) async {
String t = AppState().getUser.data!.accessToken ?? "";
GenericRespModel genericRespModel = await injector.get<ApiClient>().getJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConsts.getSPBranchUserGet,
token: t,
queryParameters: map,
);
List<BranchSelectionModel> branchList = [];
if (genericRespModel.data != null) {
List<BranchDetailModel> branches = [];
List<BranchUser> branchUsers = [];
// List<BranchUsersDatum>.from(json["data"]!.map((x) => BranchUsersDatum.fromJson(x))
branches = List<BranchDetailModel>.from(genericRespModel.data["branches"]["data"]!.map((x) => BranchDetailModel.fromJson(x)));
branchUsers = List<BranchUser>.from(genericRespModel.data["branchUsers"]["data"]!.map((x) => BranchUser.fromJson(x)));
for (int i = 0; i < branches.length; i++) {
List<UserSelectionModel> availableUsers = [];
for (int j = 0; j < branchUsers.length; j++) {
if (branches[i].id == branchUsers[j].serviceProviderBranchID) {
availableUsers.add(UserSelectionModel(userId: branchUsers[j].id, userName: ("${branchUsers[j].firstName ?? ""} ${branchUsers[j].lastName}"), isSelected: false));
}
}
branchList.add(BranchSelectionModel(branchId: branches[i].id ?? 0, branchName: branches[i].branchName ?? "", isSelected: false, usersList: availableUsers));
}
}
return branchList;
}
@override
Future<SubscriptionModel> getMySubscriptions(String? serviceProviderID) async {
String t = AppState().getUser.data!.accessToken ?? "";
Map<String, String> queryParameters = {};
if (serviceProviderID != null) {
queryParameters = {
"ID": serviceProviderID,
};
}
return await injector.get<ApiClient>().getJsonForObject((json) => SubscriptionModel.fromJson(json), ApiConsts.getAllSubscriptions, token: t, queryParameters: queryParameters);
}
// @override
// Future<SubscriptionModel> getAllSubscriptions(String? serviceProviderID) async {
// String t = AppState().getUser.data!.accessToken ?? "";
// Map<String, String> queryParameters = {};
// if (serviceProviderID != null) {
// queryParameters = {
// "ID": serviceProviderID,
// };
// }
//
// return await injector.get<ApiClient>().getJsonForObject((json) => SubscriptionModel.fromJson(json), ApiConsts.getAllSubscriptions, token: t, queryParameters: queryParameters);
// }
// @override
// Future<List<ProviderSubscriptionModel>> getProviderSubscription({String? serviceProviderID}) async {
// Map<String, String> queryParameters = {};
// if (serviceProviderID != null) {
// queryParameters = {
// "ServiceProviderID": serviceProviderID,
// "IsActiveSubscriptionForProvider": "true",
// };
// }
//
// GenericRespModel adsGenericModel = await apiClient.getJsonForObject(
// token: appState.getUser.data!.accessToken,
// (json) => GenericRespModel.fromJson(json),
// ApiConsts.getMySubscriptions,
// queryParameters: queryParameters,
// );
// List<ProviderSubscriptionModel> providerSubList = List.generate(adsGenericModel.data.length, (index) => ProviderSubscriptionModel.fromJson(adsGenericModel.data[index]));
// return providerSubList;
// }
// @override
// Future<SubscriptionModel> getProviderSubscription(
// String? serviceProviderID) async {
// String t = AppState().getUser.data!.accessToken ?? "";
// Map<String, String> queryParameters = {};
// if (serviceProviderID != null) {
// queryParameters = {
// "ID": serviceProviderID,
// };
// }
//
//
// return await injector.get<ApiClient>().getJsonForObject(
// (json) => SubscriptionModel.fromJson(json),
// ApiConsts.getMySubscriptions,
// token: t,
// queryParameters: queryParameters);
// }
}

@ -6,8 +6,8 @@ import 'package:http/http.dart';
import 'package:mc_common_app/api/api_client.dart'; import 'package:mc_common_app/api/api_client.dart';
import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/config/dependency_injection.dart'; import 'package:mc_common_app/config/dependencies.dart';
import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:mc_common_app/models/general_models/m_response.dart';
import 'package:mc_common_app/models/user_models/basic_otp.dart'; import 'package:mc_common_app/models/user_models/basic_otp.dart';
import 'package:mc_common_app/models/user_models/change_email.dart'; import 'package:mc_common_app/models/user_models/change_email.dart';
import 'package:mc_common_app/models/user_models/change_mobile.dart'; import 'package:mc_common_app/models/user_models/change_mobile.dart';
@ -31,13 +31,13 @@ abstract class UserRepo {
Future<RegisterUserRespModel> basicVerify(String phoneNo, String otp, String userToken, {bool isNeedToPassToken = false}); Future<RegisterUserRespModel> basicVerify(String phoneNo, String otp, String userToken, {bool isNeedToPassToken = false});
Future<RegisterUserRespModel> basicComplete(String userId, String firstName, String lastName, String compannyNname, String email, String password, String cityID, String genderID, {bool isNeedToPassToken = false}); Future<RegisterUserRespModel> basicComplete(String userId, String firstName, String lastName, String email, String password, {bool isNeedToPassToken = false});
Future<Response> loginV1(String phoneNo, String password); Future<Response> loginV1(String phoneNo, String password);
Future<LoginPasswordRespModel> loginV2OTP(String userToken, String loginType); Future<LoginPasswordRespModel> loginV2OTP(String userToken, String loginType);
Future<Response> loginV2OTPVerify(String userToken, String otp, String deviceType, String deviceToken); Future<Response> loginV2OTPVerify(String userToken, String otp);
Future<RefreshToken> refreshTokenAPI(String token, String refreshToken); Future<RefreshToken> refreshTokenAPI(String token, String refreshToken);
@ -53,9 +53,7 @@ abstract class UserRepo {
Future<ConfirmPasswordRespModel> forgetPassword(String userToken, String newPassword); Future<ConfirmPasswordRespModel> forgetPassword(String userToken, String newPassword);
Future<GenericRespModel> changePassword(String currentPassword, String newPassword); Future<MResponse> changePassword(String currentPassword, String newPassword);
Future<Map<String, dynamic>> updateUserInfo(String firstName, String lastName, String? city);
Future<ChangeMobileRespModel> changeMobileNoOTPRequest(countryID, String mobileNo, String password); Future<ChangeMobileRespModel> changeMobileNoOTPRequest(countryID, String mobileNo, String password);
@ -67,14 +65,12 @@ abstract class UserRepo {
Future<VerifyEmailRespModel> emailVerify(String email, String userID); Future<VerifyEmailRespModel> emailVerify(String email, String userID);
Future<GenericRespModel> emailVerifyOTPVerify(String userToken, String userOTP); Future<MResponse> emailVerifyOTPVerify(String userToken, String userOTP);
Future<ImageResponse> updateUserImage(String image); Future<ImageResponse> updateUserImage(String image);
Future<ImageResponse> getUserImage(String image); Future<ImageResponse> getUserImage(String image);
Future<Response> logoutUser();
Future<String> updateUserToken(); Future<String> updateUserToken();
} }
@ -87,7 +83,7 @@ class UserRepoImp implements UserRepo {
t = AppState().getUser.data!.accessToken ?? ""; t = AppState().getUser.data!.accessToken ?? "";
debugPrint("token $t"); debugPrint("token $t");
} }
return await injector.get<ApiClient>().postJsonForObject((json) => BasicOtpRespModel.fromJson(json), ApiConsts.basicOTP, postParams, token: t); return await injector.get<ApiClient>().postJsonForObject((json) => BasicOtpRespModel.fromJson(json), ApiConsts.BasicOTP, postParams, token: t);
} }
@override @override
@ -102,23 +98,23 @@ class UserRepoImp implements UserRepo {
t = AppState().getUser.data!.accessToken ?? ""; t = AppState().getUser.data!.accessToken ?? "";
debugPrint("token $t"); debugPrint("token $t");
} }
return await injector.get<ApiClient>().postJsonForObject((json) => RegisterUserRespModel.fromJson(json), ApiConsts.basicVerify, postParams, token: t); return await injector.get<ApiClient>().postJsonForObject((json) => RegisterUserRespModel.fromJson(json), ApiConsts.BasicVerify, postParams, token: t);
} }
@override @override
Future<RegisterUserRespModel> basicComplete(String userId, String firstName, String lastName, String companyName, String email, String password, String cityID, String genderID, {bool isNeedToPassToken = false}) async { Future<RegisterUserRespModel> basicComplete(String userId, String firstName, String lastName, String email, String password, {bool isNeedToPassToken = false}) async {
Map<String, Object> postParams; Map<String, Object> postParams;
if (email.isEmpty) { if (email.isEmpty) {
postParams = {"userID": userId, "firstName": firstName, "lastName": lastName, "companyName": companyName, "isEmailVerified": true, "password": password, "cityID": cityID, "genderID": genderID}; postParams = {"userID": userId, "firstName": firstName, "lastName": lastName, "companyName": "string", "isEmailVerified": true, "password": password};
} else { } else {
postParams = {"userID": userId, "firstName": firstName, "lastName": lastName, "email": email, "companyName": companyName, "isEmailVerified": true, "password": password, "cityID": cityID, "genderID": genderID}; postParams = {"userID": userId, "firstName": firstName, "lastName": lastName, "email": email, "companyName": "string", "isEmailVerified": true, "password": password};
} }
String? t; String? t;
if (isNeedToPassToken) { if (isNeedToPassToken) {
t = AppState().getUser.data!.accessToken ?? ""; t = AppState().getUser.data!.accessToken ?? "";
debugPrint("token $t"); debugPrint("token $t");
} }
return await injector.get<ApiClient>().postJsonForObject((json) => RegisterUserRespModel.fromJson(json), ApiConsts.basicComplete, postParams, token: t); return await injector.get<ApiClient>().postJsonForObject((json) => RegisterUserRespModel.fromJson(json), ApiConsts.BasicComplete, postParams, token: t);
} }
@override @override
@ -127,7 +123,7 @@ class UserRepoImp implements UserRepo {
"mobileorEmail": phoneNo, "mobileorEmail": phoneNo,
"password": password, "password": password,
}; };
return await injector.get<ApiClient>().postJsonForResponse(ApiConsts.loginV1, postParams); return await injector.get<ApiClient>().postJsonForResponse(ApiConsts.Login_V1, postParams);
//return await injector.get<ApiClient>().postJsonForObject((json) => BasicOtp.fromJson(json), ApiConsts.Login_V1, postParams); //return await injector.get<ApiClient>().postJsonForObject((json) => BasicOtp.fromJson(json), ApiConsts.Login_V1, postParams);
} }
@ -138,50 +134,40 @@ class UserRepoImp implements UserRepo {
"loginType": loginType, "loginType": loginType,
}; };
Response response = await injector.get<ApiClient>().postJsonForResponse(ApiConsts.loginV2OTP, postParams); Response response = await injector.get<ApiClient>().postJsonForResponse(ApiConsts.Login_V2_OTP, postParams);
LoginPasswordRespModel user = LoginPasswordRespModel.fromJson(jsonDecode(response.body)); LoginPasswordRespModel user = LoginPasswordRespModel.fromJson(jsonDecode(response.body));
return user; return user;
} }
@override @override
Future<Response> loginV2OTPVerify( Future<Response> loginV2OTPVerify(String userToken, String otp) async {
String userToken, var postParams = {"userToken": userToken, "userOTP": otp};
String otp, return await injector.get<ApiClient>().postJsonForResponse(ApiConsts.Login_V2_OTPVerify, postParams);
String deviceType,
String deviceToken,
) async {
var postParams = {"userToken": userToken, "userOTP": otp, "deviceType": deviceType, "deviceToken": deviceToken};
return await injector.get<ApiClient>().postJsonForResponse(ApiConsts.loginV2OTPVerify, postParams);
} }
@override @override
Future<RefreshToken> refreshTokenAPI(String token, String refreshToken) async { Future<RefreshToken> refreshTokenAPI(String token, String refreshToken) async {
var postParams = {"token": token, "refreshToken": refreshToken}; var postParams = {"token": token, "refreshToken": refreshToken};
// String t = AppState().getUser.data!.accessToken ?? ""; // String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => RefreshToken.fromJson(json), ApiConsts.refreshToken, postParams); return await injector.get<ApiClient>().postJsonForObject((json) => RefreshToken.fromJson(json), ApiConsts.RefreshToken, postParams);
} }
@override @override
Future<Country> getAllCountries() async { Future<Country> getAllCountries() async {
return await injector.get<ApiClient>().getJsonForObject((json) => Country.fromJson(json), ApiConsts.getAllCountry); return await injector.get<ApiClient>().getJsonForObject((json) => Country.fromJson(json), ApiConsts.GetAllCountry);
} }
// @override
// Future<Country> getAllCountriesForUser() async {
// return await injector.get<ApiClient>().getJsonForObject((json) => Country.fromJson(json), ApiConsts.getAllCountry);
// }
@override @override
Future<Cities> getAllCites(String countryId) async { Future<Cities> getAllCites(String countryId) async {
var postParams = { var postParams = {
"CountryID": countryId, "CountryID": countryId,
}; };
return await injector.get<ApiClient>().getJsonForObject((json) => Cities.fromJson(json), ApiConsts.getAllCities, queryParameters: postParams); return await injector.get<ApiClient>().getJsonForObject((json) => Cities.fromJson(json), ApiConsts.GetAllCities, queryParameters: postParams);
} }
@override @override
Future<Role> getRoles() async { Future<Role> getRoles() async {
return await injector.get<ApiClient>().getJsonForObject((json) => Role.fromJson(json), ApiConsts.getProviderRoles); return await injector.get<ApiClient>().getJsonForObject((json) => Role.fromJson(json), ApiConsts.GetProviderRoles);
} }
@override @override
@ -190,14 +176,14 @@ class UserRepoImp implements UserRepo {
"userName": userName, "userName": userName,
"otpType": 1, "otpType": 1,
}; };
return await injector.get<ApiClient>().postJsonForResponse(ApiConsts.forgetPasswordOTPRequest, postParams); return await injector.get<ApiClient>().postJsonForResponse(ApiConsts.ForgetPasswordOTPRequest, postParams);
//return await injector.get<ApiClient>().postJsonForObject((json) => PasswordOTPRequest.fromJson(json), ApiConsts.ForgetPasswordOTPRequest, postParams); //return await injector.get<ApiClient>().postJsonForObject((json) => PasswordOTPRequest.fromJson(json), ApiConsts.ForgetPasswordOTPRequest, postParams);
} }
@override @override
Future<PasswordOTPCompareResModel> forgetPasswordOTPCompare(String userToken, String userOTP) async { Future<PasswordOTPCompareResModel> forgetPasswordOTPCompare(String userToken, String userOTP) async {
var postParams = {"userToken": userToken, "userOTP": userOTP}; var postParams = {"userToken": userToken, "userOTP": userOTP};
Response response = await injector.get<ApiClient>().postJsonForResponse(ApiConsts.forgetPasswordOTPCompare, postParams); Response response = await injector.get<ApiClient>().postJsonForResponse(ApiConsts.ForgetPasswordOTPCompare, postParams);
PasswordOTPCompareResModel otpCompare = PasswordOTPCompareResModel.fromJson(jsonDecode(response.body)); PasswordOTPCompareResModel otpCompare = PasswordOTPCompareResModel.fromJson(jsonDecode(response.body));
return otpCompare; return otpCompare;
@ -210,7 +196,7 @@ class UserRepoImp implements UserRepo {
"newPassword": newPassword, "newPassword": newPassword,
}; };
Response response = await injector.get<ApiClient>().postJsonForResponse(ApiConsts.forgetPassword, postParams); Response response = await injector.get<ApiClient>().postJsonForResponse(ApiConsts.ForgetPassword, postParams);
ConfirmPasswordRespModel data = ConfirmPasswordRespModel.fromJson(jsonDecode(response.body)); ConfirmPasswordRespModel data = ConfirmPasswordRespModel.fromJson(jsonDecode(response.body));
return data; return data;
@ -218,7 +204,7 @@ class UserRepoImp implements UserRepo {
} }
@override @override
Future<GenericRespModel> changePassword(String currentPassword, String newPassword) async { Future<MResponse> changePassword(String currentPassword, String newPassword) async {
var postParams = { var postParams = {
"currentPassword": currentPassword, "currentPassword": currentPassword,
"newPassword": newPassword, "newPassword": newPassword,
@ -227,14 +213,14 @@ class UserRepoImp implements UserRepo {
String t = AppState().getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
debugPrint("token $t"); debugPrint("token $t");
return await injector.get<ApiClient>().postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.changePassword, postParams, token: t); return await injector.get<ApiClient>().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.ChangePassword, postParams, token: t);
} }
@override @override
Future<ChangeMobileRespModel> changeMobileNoOTPRequest(countryID, String mobileNo, String password) async { Future<ChangeMobileRespModel> changeMobileNoOTPRequest(countryID, String mobileNo, String password) async {
var postParams = {"countryID": 1, "mobileNo": mobileNo, "password": password}; var postParams = {"countryID": 1, "mobileNo": mobileNo, "password": password};
String t = AppState().getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => ChangeMobileRespModel.fromJson(json), ApiConsts.changeMobileNoOTPRequest, postParams, token: t); return await injector.get<ApiClient>().postJsonForObject((json) => ChangeMobileRespModel.fromJson(json), ApiConsts.ChangeMobileNoOTPRequest, postParams, token: t);
} }
@override @override
@ -244,28 +230,21 @@ class UserRepoImp implements UserRepo {
"userOTP": userOTP, "userOTP": userOTP,
}; };
String t = AppState().getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => ConfirmMobileRespModel.fromJson(json), ApiConsts.changeMobileNo, postParams, token: t); return await injector.get<ApiClient>().postJsonForObject((json) => ConfirmMobileRespModel.fromJson(json), ApiConsts.ChangeMobileNo, postParams, token: t);
} }
@override @override
Future<ChanEmailRespModel> changeEmailOTPRequest(String email, String password) async { Future<ChanEmailRespModel> changeEmailOTPRequest(String email, String password) async {
var postParams = {"email": email, "password": password}; var postParams = {"email": email, "password": password};
String t = AppState().getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => ChanEmailRespModel.fromJson(json), ApiConsts.changeEmailOTPRequest, postParams, token: t); return await injector.get<ApiClient>().postJsonForObject((json) => ChanEmailRespModel.fromJson(json), ApiConsts.ChangeEmailOTPRequest, postParams, token: t);
} }
@override @override
Future<ConfirmEmailRespModel> changeEmail(String userToken, String userOTP) async { Future<ConfirmEmailRespModel> changeEmail(String userToken, String userOTP) async {
var postParams = {"userToken": userToken, "userOTP": userOTP}; var postParams = {"userToken": userToken, "userOTP": userOTP};
String t = AppState().getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => ConfirmEmailRespModel.fromJson(json), ApiConsts.changeEmail, postParams, token: t); return await injector.get<ApiClient>().postJsonForObject((json) => ConfirmEmailRespModel.fromJson(json), ApiConsts.ChangeEmail, postParams, token: t);
}
@override
Future<Map<String, dynamic>> updateUserInfo(String firstName, String lastName, String? city) async {
var postParams = {"userID": "${AppState().getUser.data!.userInfo!.userId}", "firstName": "${firstName}", "lastName": "${lastName}", "genderID": 1, "cityID": city ?? 1};
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => json, ApiConsts.userUpdate, postParams, token: t);
} }
@override @override
@ -278,15 +257,15 @@ class UserRepoImp implements UserRepo {
}; };
String t = AppState().getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => VerifyEmailRespModel.fromJson(json), ApiConsts.emailVerify, postParams, token: t); return await injector.get<ApiClient>().postJsonForObject((json) => VerifyEmailRespModel.fromJson(json), ApiConsts.EmailVerify, postParams, token: t);
} }
@override @override
Future<GenericRespModel> emailVerifyOTPVerify(String userToken, String userOTP) async { Future<MResponse> emailVerifyOTPVerify(String userToken, String userOTP) async {
var postParams = {"userToken": userToken, "userOTP": userOTP}; var postParams = {"userToken": userToken, "userOTP": userOTP};
String t = AppState().getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => GenericRespModel.fromJson(json), ApiConsts.emailVerifyOTPVerify, postParams, token: t); return await injector.get<ApiClient>().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.EmailVerifyOTPVerify, postParams, token: t);
} }
@override @override
@ -296,12 +275,7 @@ class UserRepoImp implements UserRepo {
String t = AppState().getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
debugPrint("token $t"); debugPrint("token $t");
return await injector.get<ApiClient>().postJsonForObject( return await injector.get<ApiClient>().postJsonForObject((json) => ImageResponse.fromJson(json), ApiConsts.UpdateUserImage, postParams, token: t);
(json) => ImageResponse.fromJson(json),
ApiConsts.updateUserImage,
postParams,
token: t,
);
} }
@override @override
@ -311,7 +285,7 @@ class UserRepoImp implements UserRepo {
String t = AppState().getUser.data!.accessToken ?? ""; String t = AppState().getUser.data!.accessToken ?? "";
debugPrint("token $t"); debugPrint("token $t");
return await injector.get<ApiClient>().postJsonForObject((json) => ImageResponse.fromJson(json), ApiConsts.updateUserImage, postParams, token: t); return await injector.get<ApiClient>().postJsonForObject((json) => ImageResponse.fromJson(json), ApiConsts.UpdateUserImage, postParams, token: t);
} }
@override @override
@ -329,10 +303,4 @@ class UserRepoImp implements UserRepo {
AppState().setUser = user; AppState().setUser = user;
return refresh.data!.accessToken ?? ""; return refresh.data!.accessToken ?? "";
} }
Future<Response> logoutUser() async {
String t = AppState().getUser.data!.accessToken ?? "";
var postParams = {"token": AppState().getUser.data!.accessToken ?? ""};
return await injector.get<ApiClient>().postJsonForResponse(ApiConsts.logoutUser, postParams, token: t);
}
} }

@ -1,70 +0,0 @@
import 'dart:io';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter/services.dart';
import 'package:local_auth/local_auth.dart';
import 'package:local_auth_android/local_auth_android.dart';
import 'package:local_auth_darwin/types/auth_messages_ios.dart';
import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:easy_localization/easy_localization.dart';
abstract class CommonAuthServices {
Future<bool> authenticate();
Future<List<BiometricType>> getAvailBio();
}
class CommonAuthImp implements CommonAuthServices {
final LocalAuthentication localAuth = LocalAuthentication();
@override
Future<bool> authenticate() async {
try {
final availableBiometrics = await localAuth.getAvailableBiometrics();
if (availableBiometrics.isEmpty) {
return false;
}
final didAuthenticate = await localAuth.authenticate(
localizedReason: "Scan your fingerprint or face ID to authenticate",
options: const AuthenticationOptions(
stickyAuth: false,
biometricOnly: true,
sensitiveTransaction: true,
useErrorDialogs: true,
),
authMessages: [
AndroidAuthMessages(
cancelButton: LocaleKeys.cancel.tr(),
biometricHint: LocaleKeys.useFingerPrintFaceID.tr(),
goToSettingsButton: LocaleKeys.settings.tr(),
goToSettingsDescription: LocaleKeys.setupTouchID.tr(),
),
IOSAuthMessages(
cancelButton: LocaleKeys.cancel.tr(),
goToSettingsButton: LocaleKeys.settings.tr(),
goToSettingsDescription: LocaleKeys.setupTouchID.tr(),
lockOut: LocaleKeys.reenableTouchID.tr(),
),
],
);
return didAuthenticate;
} on PlatformException catch (e) {
print('Error during authentication: $e');
return false;
}
}
Future<List<BiometricType>> getAvailBio() async {
return await localAuth.getAvailableBiometrics();
}
// Future<void> getHuaweiAuth() async {
// DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
// AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
// // if (androidInfo.brand == "HUAWEI") {
// // huawei.canAuth();
// // }
// }
}

@ -1,31 +1,19 @@
import 'dart:io'; import 'dart:io';
import 'package:easy_localization/easy_localization.dart';
import 'package:file_picker/file_picker.dart'; import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/main.dart';
import 'package:mc_common_app/utils/app_permission_handler.dart'; import 'package:mc_common_app/utils/app_permission_handler.dart';
import 'package:mc_common_app/utils/utils.dart';
abstract class CommonAppServices { abstract class CommonAppServices {
Future<List<File>> pickMultipleImages(); Future<List<File>> pickMultipleImages();
Future<File?> pickImageFromPhone(int sourceFlag); Future<File?> pickImageFromPhone(int sourceFlag);
Future<List<File>?> pickMultipleFiles(BuildContext context, {bool allowMultiple = true}); Future<List<File>?> pickMultipleFiles(BuildContext context);
Future<File?> pickFile(BuildContext context, {required FileType fileType, List<String>? allowedExtensions}); Future<File?> pickFile(BuildContext context,
{required FileType fileType, List<String>? allowedExtensions});
double getDistanceBetween({
required double curLatitude,
required double curLongitude,
required double destLatitude,
required double destLongitude,
});
} }
class CommonServicesImp implements CommonAppServices { class CommonServicesImp implements CommonAppServices {
@ -40,12 +28,12 @@ class CommonServicesImp implements CommonAppServices {
} }
@override @override
Future<List<File>?> pickMultipleFiles(BuildContext context, {bool allowMultiple = true}) async { Future<List<File>?> pickMultipleFiles(BuildContext context) async {
FilePickerResult? result; FilePickerResult? result;
final status = await AppPermissions.checkStoragePermissions(context); final status = await AppPermissions.checkStoragePermissions(context);
if (status) { if (status) {
result = await FilePicker.platform.pickFiles(allowMultiple: allowMultiple, type: FileType.custom, allowedExtensions: ['pdf']); result = await FilePicker.platform.pickFiles(allowMultiple: true, type: FileType.custom, allowedExtensions: ['pdf']);
} }
List<File> pickedFiles = []; List<File> pickedFiles = [];
@ -62,41 +50,32 @@ class CommonServicesImp implements CommonAppServices {
@override @override
Future<List<File>> pickMultipleImages() async { Future<List<File>> pickMultipleImages() async {
final picker = ImagePicker(); final picker = ImagePicker();
List<File> imageModels = []; final pickedImagesXFiles = await picker.pickMultiImage();
List<File> pickedImages = [];
var images = await picker.pickMultiImage(imageQuality: 70);
for (var element in images) { List<File> pickedImages = [];
final extension = element.path.split('.').last.toLowerCase(); if (pickedImagesXFiles == null) {
if (extension != 'jpg' && extension != 'jpeg' && extension != 'png') {
Utils.showToast(LocaleKeys.onlyJPGandPNG);
return []; return [];
} }
if (pickedImagesXFiles.isEmpty) {
if (await element.length() > GlobalConsts.maxFileSizeInBytes) {
Utils.showToast(LocaleKeys.maxFileSize);
return []; return [];
} }
imageModels.add(File(element.path)); for (var element in pickedImagesXFiles) {
} pickedImages.add(File(element.path));
if (imageModels.length > GlobalConsts.maxFileCount) {
Utils.showToast(LocaleKeys.maxFileSelection.tr());
imageModels = imageModels.sublist(0, GlobalConsts.maxFileCount); // Keep only the first 7 images
} }
pickedImages.addAll(imageModels);
return pickedImages; return pickedImages;
} }
@override @override
Future<File?> pickFile(BuildContext context, {required FileType fileType, List<String>? allowedExtensions}) async { Future<File?> pickFile(BuildContext context,
{required FileType fileType, List<String>? allowedExtensions}) async {
FilePickerResult? result; FilePickerResult? result;
final status = await AppPermissions.checkStoragePermissions(context); final status = await AppPermissions.checkStoragePermissions(context);
if (status) { if (status) {
result = await FilePicker.platform.pickFiles(allowMultiple: false, type: fileType, allowedExtensions: allowedExtensions); result = await FilePicker.platform.pickFiles(
allowMultiple: true,
type: fileType,
allowedExtensions: allowedExtensions);
} }
List<File> pickedFiles = []; List<File> pickedFiles = [];
@ -107,23 +86,6 @@ class CommonServicesImp implements CommonAppServices {
} }
} }
} }
return pickedFiles.isNotEmpty ? pickedFiles.first : null; return pickedFiles.length > 0 ? pickedFiles.first : null;
}
@override
double getDistanceBetween({required double curLatitude, required double curLongitude, required double destLatitude, required double destLongitude}) {
try {
double distance = Geolocator.distanceBetween(
curLatitude,
curLongitude,
destLatitude,
destLongitude,
);
return (distance / 1000);
} catch (e) {
logger.e(e.toString());
return 0.0;
}
} }
} }

@ -1,115 +0,0 @@
import 'dart:io';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:mc_common_app/classes/app_state.dart';
import 'package:mc_common_app/main.dart';
import 'package:permission_handler/permission_handler.dart';
abstract class FirebaseMessagingService {
Future<String> getFirebaseToken();
Future<void> initializeNotifications();
}
class FirebaseMessagingServiceImp implements FirebaseMessagingService {
final FlutterLocalNotificationsPlugin flutterLocalNotifications;
final FirebaseMessaging firebaseMessaging;
FirebaseMessagingServiceImp({required this.firebaseMessaging, required this.flutterLocalNotifications});
@override
Future<String> getFirebaseToken() async => await firebaseMessaging.getToken() ?? "";
Future<void> requestPermissions() async {
if (Platform.isIOS) {
await flutterLocalNotifications.resolvePlatformSpecificImplementation<IOSFlutterLocalNotificationsPlugin>()?.requestPermissions(alert: true, badge: true, sound: true);
} else if (Platform.isAndroid) {
AndroidFlutterLocalNotificationsPlugin? androidImplementation = flutterLocalNotifications.resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>();
bool? granted = await androidImplementation?.requestNotificationsPermission();
if (granted == false) {
await Permission.notification.request();
}
}
}
@override
Future<void> initializeNotifications() async {
await requestPermissions();
AppState().setDeviceToken = await getFirebaseToken();
AppState().setDeviceType = Platform.isAndroid ? "1" : "2";
await Permission.notification.isDenied.then((bool value) {
if (value) {
Permission.notification.request();
}
});
// initialise the plugin. app_icon needs to be a added as a drawable resource to the Android head project
const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings('ic_launcher');
DarwinInitializationSettings initializationSettingsDarwin = const DarwinInitializationSettings(
requestAlertPermission: true,
requestBadgePermission: true,
requestCriticalPermission: true,
requestProvisionalPermission: true,
requestSoundPermission: true,
defaultPresentAlert: true,
defaultPresentBadge: true,
defaultPresentBanner: true,
defaultPresentList: true,
defaultPresentSound: true,
);
final InitializationSettings initializationSettings = InitializationSettings(android: initializationSettingsAndroid, iOS: initializationSettingsDarwin);
await flutterLocalNotifications.initialize(initializationSettings, onDidReceiveNotificationResponse: (notificationResponse) {}, );
RemoteMessage? initialMessage = await FirebaseMessaging.instance.getInitialMessage();
if (initialMessage != null) _handleNotification(initialMessage);
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
if (message.notification != null) _handleNotification(message);
});
FirebaseMessaging.onMessageOpenedApp.listen(_handleNotification);
FirebaseMessaging.onBackgroundMessage(backgroundMessageHandler);
FirebaseMessaging.instance.onTokenRefresh.listen((String token) async {
AppState().setDeviceToken = token;
});
}
void _onDidReceiveLocalNotification(int id, String? title, String? body, String? payload) async {
logger.i(body);
}
void _handleNotification(RemoteMessage message) async {
logger.i(message.notification!.title);
logger.i(message.notification!.body);
displayNotification(title: message.notification!.title ?? '', body: message.notification!.body ?? '');
}
Future<void> displayNotification({required String title, required String body}) async {
const AndroidNotificationDetails androidNotificationDetails = AndroidNotificationDetails(
"0",
'mowater',
channelDescription: 'mowater_notifications',
importance: Importance.max,
priority: Priority.high,
ticker: 'ticker',
);
const DarwinNotificationDetails iOSPlatformChannelSpecifics = DarwinNotificationDetails(threadIdentifier: 'thread_id');
const NotificationDetails notificationDetails = NotificationDetails(android: androidNotificationDetails, iOS: iOSPlatformChannelSpecifics);
await flutterLocalNotifications.show(0, title, body, notificationDetails, payload: 'item x');
}
}
@pragma('vm:entry-point')
Future<dynamic> backgroundMessageHandler(RemoteMessage message) async {
await Firebase.initializeApp();
}

@ -26,34 +26,24 @@ abstract class PaymentService {
class PaymentServiceImp implements PaymentService { class PaymentServiceImp implements PaymentService {
MyInAppBrowser? myInAppBrowser; MyInAppBrowser? myInAppBrowser;
var inAppBrowserOptions = InAppBrowserClassSettings( var inAppBrowserOptions = InAppBrowserClassOptions(
webViewSettings: InAppWebViewSettings( inAppWebViewGroupOptions:
useShouldOverrideUrlLoading: false, InAppWebViewGroupOptions(crossPlatform: InAppWebViewOptions(useShouldOverrideUrlLoading: true, transparentBackground: false), ios: IOSInAppWebViewOptions(applePayAPIEnabled: true)),
transparentBackground: false, crossPlatform: InAppBrowserOptions(hideUrlBar: true, toolbarTopBackgroundColor: Colors.black),
isInspectable: false, android: AndroidInAppBrowserOptions(),
applePayAPIEnabled: true, ios:
cacheEnabled: false, IOSInAppBrowserOptions(hideToolbarBottom: true, toolbarBottomBackgroundColor: Colors.white, closeButtonColor: Colors.white, presentationStyle: IOSUIModalPresentationStyle.OVER_FULL_SCREEN));
allowsBackForwardNavigationGestures: false,
),
browserSettings: InAppBrowserSettings(
hideUrlBar: true,
hideTitleBar: true,
hideDefaultMenuItems: true,
hideToolbarBottom: true,
hideToolbarTop: false,
hideCloseButton: false,
allowGoBackWithBackButton: false,
toolbarBottomBackgroundColor: Colors.black,
closeButtonColor: Colors.white,
presentationStyle: ModalPresentationStyle.FULL_SCREEN,
// toolbarTopBackgroundColor: Colors.black
),
);
String getUrlRequestByPaymentId({required int id, List<int>? appointmentIds, required PaymentTypes paymentType}) { @override
Future<void> placePayment({
required int id,
List<int>? appointmentIds,
required PaymentTypes paymentType,
required Function() onSuccess,
required Function() onFailure,
}) async {
String urlRequest = ""; String urlRequest = "";
int customerId = AppState().getUser.data!.userInfo!.customerId ?? 0; int customerId = AppState().getUser.data!.userInfo!.customerId ?? 0;
switch (paymentType) { switch (paymentType) {
case PaymentTypes.subscription: case PaymentTypes.subscription:
urlRequest = "${ApiConsts.paymentWebViewUrl}?PaymentType=${paymentType.getIdFromPaymentTypesEnum()}&OrderProviderSubscriptionID=$id"; urlRequest = "${ApiConsts.paymentWebViewUrl}?PaymentType=${paymentType.getIdFromPaymentTypesEnum()}&OrderProviderSubscriptionID=$id";
@ -84,19 +74,6 @@ class PaymentServiceImp implements PaymentService {
urlRequest = "${ApiConsts.paymentWebViewUrl}?PaymentType=${paymentType.getIdFromPaymentTypesEnum()}&CustomerID=$customerId&RequestID=$id"; urlRequest = "${ApiConsts.paymentWebViewUrl}?PaymentType=${paymentType.getIdFromPaymentTypesEnum()}&CustomerID=$customerId&RequestID=$id";
break; break;
} }
return urlRequest;
}
@override
Future<void> placePayment({
required int id,
List<int>? appointmentIds,
required PaymentTypes paymentType,
required Function() onSuccess,
required Function() onFailure,
}) async {
String urlRequest = getUrlRequestByPaymentId(id: id, paymentType: paymentType, appointmentIds: appointmentIds);
log("PaymentUrl: $urlRequest"); log("PaymentUrl: $urlRequest");
myInAppBrowser = MyInAppBrowser(onExitCallback: () { myInAppBrowser = MyInAppBrowser(onExitCallback: () {
log("Browser Exited"); log("Browser Exited");
@ -105,13 +82,8 @@ class PaymentServiceImp implements PaymentService {
onBrowserLoadStart(onFailure: onFailure, onSuccess: onSuccess, url: url); onBrowserLoadStart(onFailure: onFailure, onSuccess: onSuccess, url: url);
}); });
await myInAppBrowser!.openUrlRequest( await myInAppBrowser!.openUrlRequest(
urlRequest: URLRequest( urlRequest: URLRequest(url: Uri.parse(urlRequest)),
url: WebUri(urlRequest, forceToStringRawValue: true), options: inAppBrowserOptions,
allowsCellularAccess: true,
allowsConstrainedNetworkAccess: true,
allowsExpensiveNetworkAccess: true,
),
settings: inAppBrowserOptions,
); );
} }

@ -5,14 +5,13 @@ import 'colors.dart';
class AppTheme { class AppTheme {
static getTheme({required isArabic}) { static getTheme({required isArabic}) {
return ThemeData( return ThemeData(
fontFamily: !isArabic ? MyFonts.poppinsFont : MyFonts.gessTwoFont, fontFamily: !isArabic ? MyFonts.poppinsFont : null,
primaryColor: primaryColor, primaryColor: primaryColor,
useMaterial3: false, primaryTextTheme: const TextTheme(
primaryTextTheme: TextTheme( titleLarge: TextStyle(color: Colors.white),
titleLarge: TextStyle(color: Colors.white, fontFamily: !isArabic ? MyFonts.poppinsFont : MyFonts.gessTwoFont,) ), colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.orange).copyWith(background: Colors.white),
),
colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.orange).copyWith(surface: Colors.white),
); );
} }
} }

@ -3,7 +3,6 @@ import 'package:flutter/material.dart';
class MyColors { class MyColors {
static const Color darkPrimaryColor = Color(0xffF47F20); static const Color darkPrimaryColor = Color(0xffF47F20);
static const Color primaryColor = Color(0xffF69521); static const Color primaryColor = Color(0xffF69521);
static const Color lightPrimaryColor = Color(0xffFFD077);
static const Color accentColor = Colors.blue; static const Color accentColor = Colors.blue;
static const Color lightTextColor = Color(0xff969696); static const Color lightTextColor = Color(0xff969696);
static const Color textColor = Color(0xff777777); static const Color textColor = Color(0xff777777);
@ -39,10 +38,6 @@ class MyColors {
static const Color borderColor = Color(0xffE8E8E8); static const Color borderColor = Color(0xffE8E8E8);
static const Color greyAddBorderColor = Color(0xffEEEEEE); static const Color greyAddBorderColor = Color(0xffEEEEEE);
static const Color lightGreyBgColor = Color(0xffFDFDFD); static const Color lightGreyBgColor = Color(0xffFDFDFD);
static const Color lightGreyDDColor = Color(0xffDDDDDD);
static const Color greyColor = Color(0xff787878);
static const Color provTextColor = Color(0xFF28323A);
//AdStatusColors: //AdStatusColors:
static const Color adActiveStatusColor = Color(0xff5FC16A); static const Color adActiveStatusColor = Color(0xff5FC16A);
@ -50,17 +45,6 @@ class MyColors {
static const Color adSoldStatusColor = Color(0xff22742B); static const Color adSoldStatusColor = Color(0xff22742B);
static const Color adPendingStatusColor = Color(0xffEDB947); static const Color adPendingStatusColor = Color(0xffEDB947);
static const Color pendingColor = Colors.amber;
static const Color submittedColor = Colors.blue;
static const Color inProgressColor = Colors.indigo;
static const Color completedColor = Colors.green;
static const Color cancelledColor = Colors.red;
static const Color paidColor = Colors.teal;
static const Color expiredColor = Colors.grey;
static const Color shippingColor = Colors.purple;
static const Color deliveryColor = Colors.brown;
static const Color selfPickupColor = Colors.orange;
static Decoration gradient = BoxDecoration( static Decoration gradient = BoxDecoration(
gradient: const LinearGradient(colors: [ gradient: const LinearGradient(colors: [
darkPrimaryColor, darkPrimaryColor,

@ -1,9 +1,7 @@
import 'dart:developer'; import 'dart:developer';
import 'dart:io';
import 'package:easy_localization/easy_localization.dart';
import 'package:device_info_plus/device_info_plus.dart'; import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/widgets/common_widgets/confirm_dialog.dart'; import 'package:mc_common_app/widgets/common_widgets/confirm_dialog.dart';
import 'package:permission_handler/permission_handler.dart'; import 'package:permission_handler/permission_handler.dart';
@ -23,7 +21,7 @@ Future<bool> requestPermissionGranted(context, Permission requestPermissions) as
// Application has been denied permission to use the feature. // Application has been denied permission to use the feature.
return false; return false;
case PermissionStatus.permanentlyDenied: case PermissionStatus.permanentlyDenied:
ConfirmAction? res = await showConfirmDialogs(context, LocaleKeys.settingDeniedPermanently.tr(), LocaleKeys.openAppSetting.tr(), LocaleKeys.cancel.tr()); ConfirmAction? res = await showConfirmDialogs(context, 'This permission was denied permanently, Please go to settings and allow. ', 'Open App Setting', 'Cancel');
if (res == ConfirmAction.ACCEPT) { if (res == ConfirmAction.ACCEPT) {
return false; return false;
} else if (res == ConfirmAction.CANCEL) { } else if (res == ConfirmAction.CANCEL) {
@ -65,27 +63,19 @@ class AppPermissions {
return showDialog( return showDialog(
context: context, context: context,
builder: (BuildContext cxt) => ConfirmDialog( builder: (BuildContext cxt) => ConfirmDialog(
message: LocaleKeys.youNeedStoragePermissionFiles.tr(), message: "You need to give storage permission to select files.",
onTap: () { onTap: () {
Navigator.pop(context); Navigator.pop(context);
openAppSettings();
}, },
), ),
); );
} }
static Future<int> getAndroidDeviceInfo() async {
if (Platform.isAndroid) {
AndroidDeviceInfo deviceInfo = await DeviceInfoPlugin().androidInfo;
return deviceInfo.version.sdkInt;
} else {
return 0;
}
}
static Future<bool> checkStoragePermissions(BuildContext context) async { static Future<bool> checkStoragePermissions(BuildContext context) async {
bool permissionStatus = false; bool permissionStatus;
if (await getAndroidDeviceInfo() > 32) { final deviceInfo = await DeviceInfoPlugin().androidInfo;
if (deviceInfo.version.sdkInt! > 32) {
permissionStatus = await Permission.photos.request().isGranted; permissionStatus = await Permission.photos.request().isGranted;
if (permissionStatus) { if (permissionStatus) {
return true; return true;
@ -94,16 +84,12 @@ class AppPermissions {
return false; return false;
} }
} else { } else {
if (Platform.isAndroid) {
permissionStatus = await Permission.storage.request().isGranted; permissionStatus = await Permission.storage.request().isGranted;
} else if (Platform.isIOS) {
print("Ios");
permissionStatus = await Permission.photos.request().isGranted;
}
if (permissionStatus) { if (permissionStatus) {
return true; return true;
} else { } else {
getDialog(context); getDialog(context);
return false; return false;
} }
} }

@ -1,11 +1,6 @@
import 'package:flutter/material.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
class DateHelper { class DateHelper {
static String formatDateT(String dateString) {
return dateString.split('T')[0];
}
static DateTime parseStringToDate(String dateString) { static DateTime parseStringToDate(String dateString) {
final formatter = DateFormat('yyyy-MM-dd'); final formatter = DateFormat('yyyy-MM-dd');
return formatter.parse(dateString); return formatter.parse(dateString);
@ -51,44 +46,3 @@ class DateHelper {
return formatter.format(date); return formatter.format(date);
} }
} }
extension TimeOfDayUtils on TimeOfDay {
bool isAfter(TimeOfDay other) {
final thisTime = DateTime(0, 1, 1, hour, minute);
final otherTime = DateTime(0, 1, 1, other.hour, other.minute);
return thisTime.isAfter(otherTime);
}
bool isBefore(TimeOfDay other) {
final thisTime = DateTime(0, 1, 1, hour, minute);
final otherTime = DateTime(0, 1, 1, other.hour, other.minute);
return thisTime.isBefore(otherTime);
}
static TimeOfDay convertStringToTimeOfDay(String timeString) {
bool is12HourFormat = timeString.contains(RegExp(r'AM|PM', caseSensitive: false));
int hour;
int minute;
if (is12HourFormat) {
List<String> parts = timeString.split(' '); // Split time and AM/PM part
List<String> timeParts = parts[0].split(':'); // Split hours and minutes
hour = int.parse(timeParts[0]);
minute = int.parse(timeParts[1]);
if (parts[1].toUpperCase() == 'PM' && hour != 12) {
hour += 12;
} else if (parts[1].toUpperCase() == 'AM' && hour == 12) {
hour = 0;
}
} else {
List<String> timeParts = timeString.split(':');
hour = int.parse(timeParts[0]);
minute = int.parse(timeParts[1]);
}
return TimeOfDay(hour: hour, minute: minute);
}
}

@ -1,6 +1,4 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mc_common_app/classes/consts.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/utils/app_permission_handler.dart'; import 'package:mc_common_app/utils/app_permission_handler.dart';
@ -13,7 +11,7 @@ Future<ConfirmAction?> showConfirmDialogs(context, msg, positiveText, negativeTe
builder: (context) { builder: (context) {
return AlertDialog( return AlertDialog(
backgroundColor: Colors.white, backgroundColor: Colors.white,
title: Text(msg, style: const TextStyle(fontSize: 16)), title: Text(msg, style: TextStyle(fontSize: 16)),
actions: <Widget>[ actions: <Widget>[
TextButton( TextButton(
child: Text( child: Text(
@ -37,7 +35,7 @@ Future<ConfirmAction?> showConfirmDialogs(context, msg, positiveText, negativeTe
); );
} }
void actionConfirmationBottomSheet({required BuildContext context, required Widget title, required subtitle, required Widget actionButtonYes, required Widget actionButtonNo, Widget? checkBoxConfirmationWidget, bool isOnlyOneButton = false}) { void actionConfirmationBottomSheet({required BuildContext context, required Widget title, required subtitle, required Widget actionButtonYes, required Widget actionButtonNo}) {
showModalBottomSheet( showModalBottomSheet(
context: context, context: context,
isScrollControlled: true, isScrollControlled: true,
@ -48,19 +46,8 @@ void actionConfirmationBottomSheet({required BuildContext context, required Widg
description: Column( description: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
"$subtitle".toText(fontSize: 14, fontWeight: MyFonts.Medium), "$subtitle".toText(fontSize: 16),
if (checkBoxConfirmationWidget != null) ...[
10.height,
checkBoxConfirmationWidget,
],
25.height, 25.height,
if (isOnlyOneButton) ...[
Row(
children: [
actionButtonYes,
],
),
] else ...[
Row( Row(
children: [ children: [
actionButtonYes, actionButtonYes,
@ -68,11 +55,9 @@ void actionConfirmationBottomSheet({required BuildContext context, required Widg
actionButtonNo, actionButtonNo,
], ],
), ),
],
19.height, 19.height,
], ],
), ));
);
}, },
); );
} }

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save