Merge branch 'zaid_development_new' into sikander-development

# Conflicts:
#	ios/Runner/Info.plist
main
Sikander Saleem 3 years ago
commit 88185b412a

@ -54,22 +54,25 @@ android {
} }
signingConfigs { signingConfigs {
release { // release {
keyAlias keystoreProperties['keyAlias'] // keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword'] // keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null // storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword'] // storePassword keystoreProperties['storePassword']
} // }
} }
buildTypes { buildTypes {
debug { debug {
signingConfig signingConfigs.debug signingConfig signingConfigs.debug
} }
release { release {
minifyEnabled true signingConfig signingConfigs.debug
shrinkResources true
signingConfig signingConfigs.release
} }
// release {
// minifyEnabled true
// shrinkResources true
// signingConfig signingConfigs.release
// }
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="50.481" height="50.488" viewBox="0 0 50.481 50.488">
<g id="research_1_" data-name="research (1)" transform="translate(-2 -2)">
<path id="Path_4616" data-name="Path 4616" d="M9.2,15H3.8A1.8,1.8,0,0,0,2,16.8V31.226a1.8,1.8,0,0,0,1.8,1.8H18.226a1.8,1.8,0,0,0,1.8-1.8v-.937a16.379,16.379,0,0,1-6.094-3.858A16.215,16.215,0,0,1,9.2,15Z" transform="translate(0 10.437)" fill="#5bb0d9"/>
<path id="Path_4617" data-name="Path 4617" d="M3.8,20.028h6.292a15.865,15.865,0,0,1,3.84-6.094,16.379,16.379,0,0,1,6.094-3.856V3.8a1.8,1.8,0,0,0-1.8-1.8H3.8A1.8,1.8,0,0,0,2,3.8V18.226a1.8,1.8,0,0,0,1.8,1.8ZM7.03,9.41a1.785,1.785,0,0,1,2.56,0l.739.739,2.109-2.091A1.8,1.8,0,0,1,15,10.6l-3.389,3.371a1.763,1.763,0,0,1-2.542,0L7.03,11.952a1.8,1.8,0,0,1,0-2.54Z" fill="#5bb0d9"/>
<path id="Path_4618" data-name="Path 4618" d="M46.922,39.274a1.945,1.945,0,0,0-.22-.193L37.78,32.706a1.8,1.8,0,0,0-2.322.193L32.82,30.262a14.452,14.452,0,1,0-2.558,2.558L32.9,35.458a1.8,1.8,0,0,0-.193,2.322L39.081,46.7a1.785,1.785,0,0,0,.193.227,5.408,5.408,0,1,0,7.648-7.648Zm-33.145-10.2a10.817,10.817,0,1,1,7.648,3.168,10.817,10.817,0,0,1-7.648-3.168Z" transform="translate(3.975 3.975)" fill="#5bb0d9"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -3,8 +3,6 @@
"failed_request_message": "الفشل في إكمال الطلب", "failed_request_message": "الفشل في إكمال الطلب",
"successful_request_message": "تم إكمال الطلب بنجاح", "successful_request_message": "تم إكمال الطلب بنجاح",
"request_lock_message": "انتظر حتى إكمال الطلب", "request_lock_message": "انتظر حتى إكمال الطلب",
"cancel": "إلغاء", "cancel": "إلغاء",
"confirm": "تاكيد", "confirm": "تاكيد",
"done": "تم", "done": "تم",
@ -13,7 +11,6 @@
"sign_out": "تسجيل الخروج", "sign_out": "تسجيل الخروج",
"logout_alert": "هل انت متاكد من رغبتك في تسجيل الخروج؟", "logout_alert": "هل انت متاكد من رغبتك في تسجيل الخروج؟",
"language": "اللغة", "language": "اللغة",
"name": "الاسم", "name": "الاسم",
"email": "البريد الالكتروني", "email": "البريد الالكتروني",
"phone_number": "رقم الهاتف", "phone_number": "رقم الهاتف",
@ -29,7 +26,6 @@
"confirm_password_validate_message": "كلمة المرور و تاكيد كلمة المرور غير متطابقان", "confirm_password_validate_message": "كلمة المرور و تاكيد كلمة المرور غير متطابقان",
"phone_number_validate_message": "رقم الهاتف غير صالح", "phone_number_validate_message": "رقم الهاتف غير صالح",
"terms_and_conditions_validate_message": "موافقة علي الشروط والاحكام مطاوبة", "terms_and_conditions_validate_message": "موافقة علي الشروط والاحكام مطاوبة",
"update": "تحديث", "update": "تحديث",
"step": "خطوة", "step": "خطوة",
"forget_password_with_mark": "نسيت كلمة المرور؟", "forget_password_with_mark": "نسيت كلمة المرور؟",
@ -59,7 +55,6 @@
"title_not_found": "لا يوجد عنوان", "title_not_found": "لا يوجد عنوان",
"title_validate_message": "العنوان مطلوب", "title_validate_message": "العنوان مطلوب",
"url_not_found": "لا يوجد رابط", "url_not_found": "لا يوجد رابط",
"date": "تاريخ", "date": "تاريخ",
"status": "الحالة", "status": "الحالة",
"code": "كود", "code": "كود",
@ -74,10 +69,9 @@
"details": "تفاصيل", "details": "تفاصيل",
"device": "جهاز", "device": "جهاز",
"deviceArName": "اسم الجهاز بعربي", "deviceArName": "اسم الجهاز بعربي",
"deviceEnName": "اسم الجهاز بالانجليزية", "deviceName": "اسم الجهاز",
"deviceImages": "صور الجهاز", "deviceImages": "صور الجهاز",
"deviceModel": "مركة الجهاز", "deviceModel": "مركة الجهاز",
"deviceName": "اسم الجهاز",
"deviceRequired": "الجهاز مطلوب", "deviceRequired": "الجهاز مطلوب",
"deviceSN": "رقم تسلسلي للجهاز", "deviceSN": "رقم تسلسلي للجهاز",
"engineerName": "اسم المهندس", "engineerName": "اسم المهندس",
@ -135,9 +129,7 @@
"visitDate": "تاريخ الزيارة", "visitDate": "تاريخ الزيارة",
"whatsApp": "واتساب", "whatsApp": "واتساب",
"workPerformed": "العمل انجز", "workPerformed": "العمل انجز",
"actualDate": "تاريخ الفعلي", "actualDate": "تاريخ الفعلي",
"done": "تم الانتهاء",
"expectDate": "التاريخ المتوقع", "expectDate": "التاريخ المتوقع",
"images": "الصور", "images": "الصور",
"imagesRequired": "الصور مطلوبة", "imagesRequired": "الصور مطلوبة",
@ -166,7 +158,6 @@
"requiredImage": "الصورة مطلوبة", "requiredImage": "الصورة مطلوبة",
"taskStatus": "حالة الطلب", "taskStatus": "حالة الطلب",
"activationAlert": "الحساب قيد المراجعة يرجى الانتظار حتى يتم تفعيله", "activationAlert": "الحساب قيد المراجعة يرجى الانتظار حتى يتم تفعيله",
"attachImage": "ارفق صورة", "attachImage": "ارفق صورة",
"callLastSituation": "اخر موقف للطلب", "callLastSituation": "اخر موقف للطلب",
"customer": "العميل", "customer": "العميل",
@ -176,17 +167,40 @@
"newServiceReport": "تقرير خدمة جديد", "newServiceReport": "تقرير خدمة جديد",
"number": "رقم", "number": "رقم",
"operatingHours": "ساعات العمل", "operatingHours": "ساعات العمل",
"partNumber": "رقم القطعة", "partNumberName": "رقم/اسم القطعة",
"quantity": "كمية", "quantity": "كمية",
"reasons": "الاسباب", "reasons": "الاسباب",
"reportStatus": "حالة التقرير", "reportStatus": "حالة التقرير",
"reportType": "نوع التقرير", "reportType": "نوع التقرير",
"callId": "رقم الطلب", "callId": "رقم الطلب",
"requiredWord": "مطلوب", "requiredWord": "مطلوب",
"serviceType": "نوع الخدمة", "AssetType": "نوع الاصل",
"workPreformed": "العمل المنجز", "workPreformed": "العمل المنجز",
"alert": "تنبيه", "alert": "تنبيه",
"duplicateAlert": "تنبيه التكرار", "duplicateAlert": "تنبيه التكرار",
"duplicateAlertMessage": "هل أنت متأكد أنك تريد تكرار الطلب؟", "duplicateAlertMessage": "هل أنت متأكد أنك تريد تكرار الطلب؟",
"duplicateRequest": "تكرار الطلب" "duplicateRequest": "تكرار الطلب",
"orderWorkNumber": "رقم طلب العمل",
"assignedEmployee": "الموظف المعين",
"assetSN": "رقم تسلسلي للاصل ",
"assetName": "اسم الاصل",
"assetNumber": "رقم الاصل",
"site": "الموقع",
"maintenanceSituation": "موقع الصيانه",
"currentSituation": "الموقع الحالي",
"comment": "تعليق",
"updateServiceRequest": "تعديل طلب الخدمة",
"repairLocation": "موقع الإصلاح",
"travelingExpense": "مصاريف التنقل",
"startDate": "وقت البدء",
"requestedQuantity": "الكمية المطلوبة",
"deliveredQuantity": "الكمية المسلّمة",
"endDate": "وقت الانتهاء",
"destinationSite": "موقع الوجهه",
"building": "بناء",
"floor": "طابق",
"department": "قسم",
"room": "غرفه",
"actions": "اجراءات",
"deviceFiles": "ملفات الجهاز"
} }

@ -3,7 +3,6 @@
"failed_request_message": "Failed to complete request", "failed_request_message": "Failed to complete request",
"successful_request_message": "Request complete successfully", "successful_request_message": "Request complete successfully",
"request_lock_message": "Wait until your request complete", "request_lock_message": "Wait until your request complete",
"cancel": "Cancel", "cancel": "Cancel",
"confirm": "Confirm", "confirm": "Confirm",
"done": "Done", "done": "Done",
@ -12,7 +11,6 @@
"sign_out": "Sign Out", "sign_out": "Sign Out",
"logout_alert": "Are you sure you want to Sign Out?", "logout_alert": "Are you sure you want to Sign Out?",
"language": "English", "language": "English",
"name": "Name", "name": "Name",
"email": "Email", "email": "Email",
"phone_number": "Phone Number", "phone_number": "Phone Number",
@ -28,7 +26,6 @@
"confirm_password_validate_message": "Password and confirm password not match", "confirm_password_validate_message": "Password and confirm password not match",
"phone_number_validate_message": "Not valid phone number", "phone_number_validate_message": "Not valid phone number",
"terms_and_conditions_validate_message": "Accept terms and conditions is required", "terms_and_conditions_validate_message": "Accept terms and conditions is required",
"update": "Update", "update": "Update",
"step": "Step", "step": "Step",
"forget_password_with_mark": "Forget Password?", "forget_password_with_mark": "Forget Password?",
@ -58,7 +55,6 @@
"title_not_found": "Title not found", "title_not_found": "Title not found",
"title_validate_message": "Title Can't be empty", "title_validate_message": "Title Can't be empty",
"url_not_found": "URL not found", "url_not_found": "URL not found",
"date": "Date", "date": "Date",
"status": "Status", "status": "Status",
"code": "Code", "code": "Code",
@ -73,12 +69,11 @@
"details": "Details", "details": "Details",
"device": "Asset", "device": "Asset",
"deviceArName": "Asset Ar Name", "deviceArName": "Asset Ar Name",
"deviceEnName": "Asset En Name", "deviceName": "Asset Name",
"deviceImages": "Asset Images", "deviceImages": "Asset Images",
"deviceModel": "Asset Model", "deviceModel": "Asset Model",
"deviceName": "Asset Name",
"deviceRequired": "Asset Required", "deviceRequired": "Asset Required",
"deviceSN": "Asset SN", "deviceSN": "Asset Serial Number",
"engineerName": "Engineer Name", "engineerName": "Engineer Name",
"engineerPhone": "Engineer Phone", "engineerPhone": "Engineer Phone",
"facebook": "facebook", "facebook": "facebook",
@ -134,9 +129,7 @@
"visitDate": "Visit Date", "visitDate": "Visit Date",
"whatsApp": "WhatsApp", "whatsApp": "WhatsApp",
"workPerformed": "Work Performed", "workPerformed": "Work Performed",
"actualDate": "Actual Date", "actualDate": "Actual Date",
"done": "Done",
"expectDate": "Expect Date", "expectDate": "Expect Date",
"images": "Images", "images": "Images",
"imagesRequired": "Images Required", "imagesRequired": "Images Required",
@ -165,7 +158,6 @@
"requiredImage": "Image Required", "requiredImage": "Image Required",
"taskStatus": "Task Status", "taskStatus": "Task Status",
"activationAlert": "Account under reviewing please wait until be activated", "activationAlert": "Account under reviewing please wait until be activated",
"attachImage": "Attach Image", "attachImage": "Attach Image",
"callLastSituation": "Call's Last Situation", "callLastSituation": "Call's Last Situation",
"customer": "Customer", "customer": "Customer",
@ -175,18 +167,40 @@
"newServiceReport": "New Work Order", "newServiceReport": "New Work Order",
"number": "Number", "number": "Number",
"operatingHours": "Operating Hours", "operatingHours": "Operating Hours",
"partNumber": "Part Number", "partNumberName": "Part Number/Name",
"quantity": "Quantity", "quantity": "Quantity",
"reasons": "Reasons", "reasons": "Reasons",
"reportStatus": "Report Status", "reportStatus": "Report Status",
"reportType": "Report Type", "reportType": "Report Type",
"callId": "Call Id", "callId": "Call Id",
"requiredWord": "required", "requiredWord": "required",
"serviceType": "Service Type", "AssetType": "Asset Type",
"workPreformed": "Work Preformed", "workPreformed": "Work Preformed",
"orderWorkNumber": "Order Work Number",
"assignedEmployee": "Assigned Employee",
"assetSN": "Asset S.N",
"assetName": "Asset Name",
"assetNumber": "Asset Number",
"site": "Site",
"maintenanceSituation": "Maintenance Situation",
"currentSituation": "Current Situation",
"alert": "Alert", "alert": "Alert",
"duplicateAlert": "Duplicate Alert", "duplicateAlert": "Duplicate Alert",
"duplicateAlertMessage": "Are you sure you want to duplicate request?", "duplicateAlertMessage": "Are you sure you want to duplicate request?",
"duplicateRequest": "Duplicate Request" "duplicateRequest": "Duplicate Request",
"comment": "Comment",
"updateServiceRequest": "Update Service Request",
"repairLocation": "Repair Location",
"travelingExpense": "Traveling Expense",
"startDate": "Start Date",
"requestedQuantity": "Requested Quantity",
"deliveredQuantity": "Delivered Quantity",
"endDate": "End Date",
"destinationSite": "Destination Site",
"building": "Building",
"floor": "Floor",
"department": "Department",
"room": "Room",
"actions": "Actions",
"deviceFiles": "Asset Files"
} }

@ -38,4 +38,16 @@ post_install do |installer|
installer.pods_project.targets.each do |target| installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target) flutter_additional_ios_build_settings(target)
end end
installer.generated_projects.each do |project|
project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
'$(inherited)',
## dart: PermissionGroup.microphone
'PERMISSION_MICROPHONE=1',
]
end
end
end
end end

@ -1,216 +0,0 @@
PODS:
- audioplayers_darwin (0.0.1):
- Flutter
- Firebase/CoreOnly (10.3.0):
- FirebaseCore (= 10.3.0)
- Firebase/Messaging (10.3.0):
- Firebase/CoreOnly
- FirebaseMessaging (~> 10.3.0)
- firebase_core (2.4.1):
- Firebase/CoreOnly (= 10.3.0)
- Flutter
- firebase_messaging (14.2.1):
- Firebase/Messaging (= 10.3.0)
- firebase_core
- Flutter
- FirebaseCore (10.3.0):
- FirebaseCoreInternal (~> 10.0)
- GoogleUtilities/Environment (~> 7.8)
- GoogleUtilities/Logger (~> 7.8)
- FirebaseCoreInternal (10.3.0):
- "GoogleUtilities/NSData+zlib (~> 7.8)"
- FirebaseInstallations (10.3.0):
- FirebaseCore (~> 10.0)
- GoogleUtilities/Environment (~> 7.8)
- GoogleUtilities/UserDefaults (~> 7.8)
- PromisesObjC (~> 2.1)
- FirebaseMessaging (10.3.0):
- FirebaseCore (~> 10.0)
- FirebaseInstallations (~> 10.0)
- GoogleDataTransport (~> 9.2)
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
- GoogleUtilities/Environment (~> 7.8)
- GoogleUtilities/Reachability (~> 7.8)
- GoogleUtilities/UserDefaults (~> 7.8)
- nanopb (< 2.30910.0, >= 2.30908.0)
- Flutter (1.0.0)
- flutter_keyboard_visibility (0.0.1):
- Flutter
- flutter_local_notifications (0.0.1):
- Flutter
- flutter_sound (9.2.13):
- Flutter
- flutter_sound_core (= 9.2.13)
- flutter_sound_core (9.2.13)
- fluttertoast (0.0.2):
- Flutter
- Toast
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- GoogleDataTransport (9.2.0):
- GoogleUtilities/Environment (~> 7.7)
- nanopb (< 2.30910.0, >= 2.30908.0)
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities/AppDelegateSwizzler (7.10.0):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Environment (7.10.0):
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities/Logger (7.10.0):
- GoogleUtilities/Environment
- GoogleUtilities/Network (7.10.0):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (7.10.0)"
- GoogleUtilities/Reachability (7.10.0):
- GoogleUtilities/Logger
- GoogleUtilities/UserDefaults (7.10.0):
- GoogleUtilities/Logger
- image_picker_ios (0.0.1):
- Flutter
- MTBBarcodeScanner (5.0.11)
- nanopb (2.30909.0):
- nanopb/decode (= 2.30909.0)
- nanopb/encode (= 2.30909.0)
- nanopb/decode (2.30909.0)
- nanopb/encode (2.30909.0)
- package_info (0.0.1):
- Flutter
- path_provider_ios (0.0.1):
- Flutter
- permission_handler_apple (9.0.4):
- Flutter
- PromisesObjC (2.1.1)
- qr_code_scanner (0.2.0):
- Flutter
- MTBBarcodeScanner
- share (0.0.1):
- Flutter
- shared_preferences_ios (0.0.1):
- Flutter
- speech_to_text (0.0.1):
- Flutter
- Try
- sqflite (0.0.2):
- Flutter
- FMDB (>= 2.7.5)
- Toast (4.0.0)
- Try (2.1.1)
- url_launcher_ios (0.0.1):
- Flutter
DEPENDENCIES:
- audioplayers_darwin (from `.symlinks/plugins/audioplayers_darwin/ios`)
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
- Flutter (from `Flutter`)
- flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`)
- flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
- flutter_sound (from `.symlinks/plugins/flutter_sound/ios`)
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
- package_info (from `.symlinks/plugins/package_info/ios`)
- path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`)
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
- qr_code_scanner (from `.symlinks/plugins/qr_code_scanner/ios`)
- share (from `.symlinks/plugins/share/ios`)
- shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`)
- speech_to_text (from `.symlinks/plugins/speech_to_text/ios`)
- sqflite (from `.symlinks/plugins/sqflite/ios`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
SPEC REPOS:
trunk:
- Firebase
- FirebaseCore
- FirebaseCoreInternal
- FirebaseInstallations
- FirebaseMessaging
- flutter_sound_core
- FMDB
- GoogleDataTransport
- GoogleUtilities
- MTBBarcodeScanner
- nanopb
- PromisesObjC
- Toast
- Try
EXTERNAL SOURCES:
audioplayers_darwin:
:path: ".symlinks/plugins/audioplayers_darwin/ios"
firebase_core:
:path: ".symlinks/plugins/firebase_core/ios"
firebase_messaging:
:path: ".symlinks/plugins/firebase_messaging/ios"
Flutter:
:path: Flutter
flutter_keyboard_visibility:
:path: ".symlinks/plugins/flutter_keyboard_visibility/ios"
flutter_local_notifications:
:path: ".symlinks/plugins/flutter_local_notifications/ios"
flutter_sound:
:path: ".symlinks/plugins/flutter_sound/ios"
fluttertoast:
:path: ".symlinks/plugins/fluttertoast/ios"
image_picker_ios:
:path: ".symlinks/plugins/image_picker_ios/ios"
package_info:
:path: ".symlinks/plugins/package_info/ios"
path_provider_ios:
:path: ".symlinks/plugins/path_provider_ios/ios"
permission_handler_apple:
:path: ".symlinks/plugins/permission_handler_apple/ios"
qr_code_scanner:
:path: ".symlinks/plugins/qr_code_scanner/ios"
share:
:path: ".symlinks/plugins/share/ios"
shared_preferences_ios:
:path: ".symlinks/plugins/shared_preferences_ios/ios"
speech_to_text:
:path: ".symlinks/plugins/speech_to_text/ios"
sqflite:
:path: ".symlinks/plugins/sqflite/ios"
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"
SPEC CHECKSUMS:
audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40
Firebase: f92fc551ead69c94168d36c2b26188263860acd9
firebase_core: bf59c32d2e53814f558efa20840c1902fa2fe461
firebase_messaging: ee597229fc260f8fa491fa8f2d4a32dfbfa406fa
FirebaseCore: 988754646ab3bd4bdcb740f1bfe26b9f6c0d5f2a
FirebaseCoreInternal: 29b76f784d607df8b2a1259d73c3f04f1210137b
FirebaseInstallations: e2f26126089dcf41e215f7b8925af8d953c7d602
FirebaseMessaging: e345b219fd15d325f0cf2fef28cb8ce00d851b3f
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069
flutter_local_notifications: 0c0b1ae97e741e1521e4c1629a459d04b9aec743
flutter_sound: c60effa2a350fb977885f0db2fbc4c1ad5160900
flutter_sound_core: 26c10e5832e76aaacfae252d8925232281c486ae
fluttertoast: eb263d302cc92e04176c053d2385237e9f43fad0
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
GoogleDataTransport: 1c8145da7117bd68bbbed00cf304edb6a24de00f
GoogleUtilities: bad72cb363809015b1f7f19beb1f1cd23c589f95
image_picker_ios: b786a5dcf033a8336a657191401bfdf12017dabb
MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431
package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02
permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce
PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb
qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e
share: 0b2c3e82132f5888bccca3351c504d0003b3b410
shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad
speech_to_text: b43a7d99aef037bd758ed8e45d79bbac035d2dfe
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
Toast: 91b396c56ee72a5790816f40d3a94dd357abc196
Try: 5ef669ae832617b3cee58cb2c6f99fb767a4ff96
url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de
PODFILE CHECKSUM: 4e8f8b2be68aeea4c0d5beb6ff1e79fface1d048
COCOAPODS: 1.11.3

@ -3,7 +3,7 @@
archiveVersion = 1; archiveVersion = 1;
classes = { classes = {
}; };
objectVersion = 51; objectVersion = 54;
objects = { objects = {
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
@ -160,6 +160,7 @@
97C146E61CF9000F007C117D /* Project object */ = { 97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject; isa = PBXProject;
attributes = { attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1300; LastUpgradeCheck = 1300;
ORGANIZATIONNAME = ""; ORGANIZATIONNAME = "";
TargetAttributes = { TargetAttributes = {
@ -227,6 +228,7 @@
}; };
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
@ -258,6 +260,7 @@
}; };
9740EEB61CF901F6004384FC /* Run Script */ = { 9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
@ -308,6 +311,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++"; CLANG_CXX_LIBRARY = "libc++";
@ -361,6 +365,7 @@
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
@ -439,16 +444,12 @@
"-framework", "-framework",
"\"package_info\"", "\"package_info\"",
"-framework", "-framework",
"\"path_provider_ios\"",
"-framework",
"\"permission_handler_apple\"", "\"permission_handler_apple\"",
"-framework", "-framework",
"\"qr_code_scanner\"", "\"qr_code_scanner\"",
"-framework", "-framework",
"\"share\"", "\"share\"",
"-framework", "-framework",
"\"shared_preferences_ios\"",
"-framework",
"\"speech_to_text\"", "\"speech_to_text\"",
"-framework", "-framework",
"\"sqflite\"", "\"sqflite\"",
@ -470,6 +471,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++"; CLANG_CXX_LIBRARY = "libc++";
@ -527,6 +529,7 @@
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++"; CLANG_CXX_LIBRARY = "libc++";
@ -582,6 +585,7 @@
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
@ -660,16 +664,12 @@
"-framework", "-framework",
"\"package_info\"", "\"package_info\"",
"-framework", "-framework",
"\"path_provider_ios\"",
"-framework",
"\"permission_handler_apple\"", "\"permission_handler_apple\"",
"-framework", "-framework",
"\"qr_code_scanner\"", "\"qr_code_scanner\"",
"-framework", "-framework",
"\"share\"", "\"share\"",
"-framework", "-framework",
"\"shared_preferences_ios\"",
"-framework",
"\"speech_to_text\"", "\"speech_to_text\"",
"-framework", "-framework",
"\"sqflite\"", "\"sqflite\"",
@ -693,6 +693,7 @@
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
@ -771,16 +772,12 @@
"-framework", "-framework",
"\"package_info\"", "\"package_info\"",
"-framework", "-framework",
"\"path_provider_ios\"",
"-framework",
"\"permission_handler_apple\"", "\"permission_handler_apple\"",
"-framework", "-framework",
"\"qr_code_scanner\"", "\"qr_code_scanner\"",
"-framework", "-framework",
"\"share\"", "\"share\"",
"-framework", "-framework",
"\"shared_preferences_ios\"",
"-framework",
"\"speech_to_text\"", "\"speech_to_text\"",
"-framework", "-framework",
"\"sqflite\"", "\"sqflite\"",

@ -7,7 +7,7 @@
<key>CFBundleDevelopmentRegion</key> <key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string> <string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key> <key>CFBundleDisplayName</key>
<string>Atoms</string> <string>Atoms SA</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string> <string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
@ -15,7 +15,7 @@
<key>CFBundleInfoDictionaryVersion</key> <key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string> <string>6.0</string>
<key>CFBundleName</key> <key>CFBundleName</key>
<string>Atoms</string> <string>Atoms SA</string>
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
@ -36,8 +36,10 @@
<string>This app requires permission to access photo gallery to allow user to attach images</string> <string>This app requires permission to access photo gallery to allow user to attach images</string>
<key>NSSpeechRecognitionUsageDescription</key> <key>NSSpeechRecognitionUsageDescription</key>
<string>This app requires permission for Speech Recognition for speech to text functionality.</string> <string>This app requires permission for Speech Recognition for speech to text functionality.</string>
<key>UIApplicationSupportsIndirectInputEvents</key> <key>LSSupportsOpeningDocumentsInPlace</key>
<true/> <true/>
<key>UISupportsDocumentBrowser</key>
<true/>
<key>UIBackgroundModes</key> <key>UIBackgroundModes</key>
<array> <array>
<string>fetch</string> <string>fetch</string>
@ -62,5 +64,7 @@
</array> </array>
<key>UIViewControllerBasedStatusBarAppearance</key> <key>UIViewControllerBasedStatusBarAppearance</key>
<false/> <false/>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
</dict> </dict>
</plist> </plist>

@ -0,0 +1,149 @@
import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:http/http.dart' as http;
import 'package:http/http.dart';
import 'package:test_sa/models/user.dart';
class ApiManager {
ApiManager._();
Map<String, String> get _headers => {
'Content-Type': 'application/json',
if (user != null) 'Authorization': 'Bearer ${user.token}',
};
static ApiManager instance = ApiManager._();
User user;
Future<http.Response> get(
String url, {
Map<String, String> headers,
enableToastMessage = true,
}) async {
headers ??= {};
headers.addAll(_headers);
Uri _url = Uri.parse(url);
// print(_url);
// print(headers);
http.Response response = await http.get(_url, headers: headers);
if (jsonDecode(response.body) is Map<String, dynamic>) {
final message = jsonDecode(response.body)["message"];
if (message != null && message.toString().isNotEmpty && enableToastMessage) {
Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG);
}
}
return response;
}
Future<http.Response> post(
String url, {
Map<String, String> headers,
@required Map<String, dynamic> body,
}) async {
headers ??= {};
headers.addAll(_headers);
Uri _url = Uri.parse(url);
if (!kReleaseMode) {
print("URL:$_url");
print("Headers:$headers");
print("Body:$body");
}
var request = http.Request('POST', _url);
request.body = json.encode(body);
request.headers.addAll(headers);
http.StreamedResponse _streamedResponse = await request.send();
http.Response response = await http.Response.fromStream(_streamedResponse);
// print(response.statusCode);
// log(response.body);
if (jsonDecode(response.body) is Map<String, dynamic>) {
final message = jsonDecode(response.body)["message"];
if (message != null && message.toString().isNotEmpty) {
Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG);
}
}
return response;
}
Future<http.Response> put(
String url, {
Map<String, String> headers,
@required Map<String, dynamic> body,
}) async {
headers ??= {};
headers.addAll(_headers);
Uri _url = Uri.parse(url);
print(_url);
// print(headers);
// log(json.encode(body));
var request = http.Request('PUT', _url);
request.body = json.encode(body);
request.headers.addAll(headers);
http.StreamedResponse streamedResponse = await request.send();
http.Response response = await http.Response.fromStream(streamedResponse);
// print(response.statusCode);
// log(response.body);
if (jsonDecode(response.body) is Map<String, dynamic>) {
final message = jsonDecode(response.body)["message"];
if (message != null && message.toString().isNotEmpty) {
Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG);
}
}
return response;
}
Future<http.Response> multiPart(
String url, {
Map<String, String> headers,
@required Map<String, String> body,
@required List<Future<MultipartFile>> files,
}) async {
Map<String, String> _headers = const {
'Content-Type': 'multipart/form-data',
};
headers ??= {};
headers.addAll(_headers);
Uri _url = Uri.parse(url);
// print(_url);
// print(_headers);
// print(json.encode(body));
var request = http.MultipartRequest('POST', _url);
request.fields.addAll(body);
request.headers.addAll(_headers);
for (var element in files) {
request.files.add(await element);
}
//request.files.addAll(_files);
// print(request.files);
http.StreamedResponse streamedResponse = await request.send();
http.Response response = await http.Response.fromStream(streamedResponse);
// print(response.statusCode);
// log(response.body);
if (jsonDecode(response.body) is Map<String, dynamic>) {
final message = jsonDecode(response.body)["message"];
if (message != null && message.toString().isNotEmpty) {
Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG);
}
}
return response;
}
}

@ -1,40 +1,39 @@
import 'package:test_sa/models/subtitle.dart';
import 'package:meta/meta.dart'; import 'package:meta/meta.dart';
import 'package:test_sa/models/subtitle.dart';
class HttpStatusManger{ class HttpStatusManger {
static String getStatusMessage({ static String getStatusMessage({
@required int status, @required int status,
@required Subtitle subtitle, @required Subtitle subtitle,
String messageFor400, String messageFor400,
String messageFor200, String messageFor200,
}){ }) {
if(status == null) if (status == null)
// no status code - code error no need for subtitle // no status code - code error no need for subtitle
return "careful null status"; return "careful null status";
if(status == -1) if (status == -1)
// client's request in process // client's request in process
return subtitle.currentlyServiceNotAvailable; return subtitle.currentlyServiceNotAvailable;
if(status == -2){ if (status == -2) {
// client's request in process // client's request in process
return subtitle.waitUntilYourRequestComplete; return subtitle.waitUntilYourRequestComplete;
}else if(status >= 200 && status < 300){ } else if (status >= 200 && status < 300) {
// client's request was successfully received // client's request was successfully received
return messageFor200 ?? subtitle.requestCompleteSuccessfully; return messageFor200 ?? subtitle.requestCompleteSuccessfully;
} else if(status >= 400 && status < 500){ } else if (status >= 400 && status < 500) {
// client's request have error // client's request have error
switch(status){ switch (status) {
case 400: case 400:
return messageFor400 ?? subtitle.failedToCompleteRequest; return messageFor400 ?? subtitle.failedToCompleteRequest;
default: default:
return subtitle.failedToCompleteRequest; return subtitle.failedToCompleteRequest;
} }
} else if(status >= 500){ } else if (status >= 500) {
// server error // server error
return subtitle.currentlyServiceNotAvailable; return subtitle.currentlyServiceNotAvailable;
} else { } else {
// no error match so return default error // no error match so return default error
return subtitle.failedToCompleteRequest; return subtitle.failedToCompleteRequest;
} }
} }
} }

@ -1,67 +1,105 @@
class URLs{ class URLs {
URLs._(); URLs._();
static const host2 = "http://194.163.164.213/atoms/api"; static const host2 = "http://194.163.164.213/atoms/api";
static const host1 = "https://atoms.hmg.com/api"; static const host1 = "https://atomsuat.hmg.com"; // uat url
// static const host1 = "http://109.123.243.118:9000";
static String _baseUrl = "$_host/mobile";
static String _host = host1;
set host(String value) => _host = value;
static String getFileUrl(String file) => (file == null || file.isEmpty) ? null : (file.contains("/") ? file : "$_host/Files/DownloadFile?fileName=$file");
// static String getFileUrl(String file) => (file == null || file.isEmpty) ? null : (file.contains("/") ? file : "$_host/attachment/$file");
// API Routes // API Routes
static const login = "/handle/user/login"; // post static get login => "$_baseUrl/MobileAuth/LoginIntegration"; // post
static const register = "/handle/create/user"; // post static get register => "$_baseUrl/handle/create/user"; // post
static const updateProfile = "/update/user/profile"; // post static get updateProfile => "$_baseUrl/update/user/profile"; // post
static const getHospitals = "/handle/return/all/clients"; // get static get getHospitals => "$_baseUrl/Customer/GetCustomers"; // get
static const getDepartments = "/handle/return/all/departments"; // get static get getHospitalsAutoComplete => "$_baseUrl/Customer/GetCustomersAutoComplete"; // get
static const getEquipment = "/handle/return/all/client/equipments"; // get ?client=208051
static const getServiceRequests = "/return/user/calls"; // get static get getDepartments => "$_baseUrl/Customer/GetDepartmentLookup"; // get
static get getEquipment => "$_baseUrl/Asset/GetAssets"; // get ?client=208051
static const getPreventiveMaintenanceVisits = "/return/user/calibrations"; // get static get getModels => "$_baseUrl/ModelDefinition/GetModelDefinitionAsset"; // get ?client=2
static const updatePreventiveMaintenanceVisits = "/update/user/calibrations"; // get // 08051
static get getServiceRequests => "$_baseUrl/CallRequest/GetCallRequests"; // get
static const getRegularVisits = "/return/user/ppm"; // get static get getServiceRequestById => "$_baseUrl/CallRequest/GetCallRequestById"; // get
static const updateRegularVisits = "/update/user/ppm"; // get static get getServiceRequestThrough => "$_baseUrl/Lookups/GetLookup?lookupEnum=603"; // get
static get getServiceLoanAvailability => "$_baseUrl/Lookups/GetLookup?lookupEnum=4"; // get
static const getSingleServiceRequest = "/return/call/information"; // get static get getServiceFirstAction => "$_baseUrl/Lookups/GetLookup?lookupEnum=700"; // get
static const getNotifications = "/return/user/notification"; // get static get getServiceRequestTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=604"; // get
static const getRecentNotifications = "/return/user/recent/notification"; // get static get getServiceRequestStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=503";
static const createRequest = "/handle/create/request"; // get
static const createReport = "/handle/create/report/issue"; // get static get getRepairLocation => "$_baseUrl/Lookups/GetLookup?lookupEnum=504";
static const updateRequestDate = "/handle/update/request"; // get
static get equipmentStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=601";
static get getDateOperators => "$_baseUrl/Lookups/GetLookup?lookupEnum=200";
static get getMaintenanceSituation => "$_baseUrl/Lookups/GetLookup?lookupEnum=502";
static get getAllUsers => "http://109.123.243.118:5000/api/Account/GetAllUsers";
static get getPreventiveMaintenanceVisits => "$_baseUrl/return/user/calibrations"; // get
static get updatePreventiveMaintenanceVisits => "$_baseUrl/Visit/UpdateVisits"; // get
static get getRegularVisits => "$_baseUrl/Visit/GetVisits"; // get
static get updateRegularVisits => "$_baseUrl/Visit/UpdateVisits"; // get
static get getSingleServiceRequest => "$_baseUrl/return/call/information"; // get
static get getNotifications => "$_baseUrl/return/user/notification"; // get
static get getRecentNotifications => "$_baseUrl/return/user/recent/notification"; // get
static get createRequest => "$_baseUrl/CallRequest/AddCallRequest"; // get
static get createReport => "$_baseUrl/handle/create/report/issue"; // get
static get updateRequestDate => "$_baseUrl/CallRequest/UpdateCallRequest"; // get
// service report // service report
static const createServiceReport = "/handle/create/service/report"; // get static get createServiceReport => "$_baseUrl/WorkOrder/AddWorkOrder"; // get
static const updateServiceReport = "/handle/update/service/report"; // get static get updateServiceReport => "$_baseUrl/WorkOrder/UpdateWorkOrder"; // get
static const getServiceReport = "/handle/view/service/report"; // get static get getServiceReport => "$_baseUrl/WorkOrder/GetWorkOrderById"; // get
static const createDuplicatedReport = "/handle/duplicate/request"; // get static get createDuplicatedReport => "$_baseUrl/handle/duplicate/request"; // get
static get searchWorkOrders => "$_baseUrl/WorkOrder/SearchWorkOrders";
static const getServiceReportReasons = "/return/service/report/reasons"; // get
static const getServiceReportTypes = "/return/service/report/type"; // get static get getServiceReportReasons => "$_baseUrl/Lookups/GetLookup?lookupEnum=522"; // get
static const getServiceReportStatus = "/return/service/report/status"; // get static get getServiceReportTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=501"; // get
static const getServiceReportLastCalls = "/return/call/last/situation"; // get static get getServiceReportStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=521"; // get
static const getServiceTypes = "/return/service/type"; // get static get getServiceReportLastCalls => "$_baseUrl/WorkOrder/GetLookupCallLastSituationBasedOnCase"; // get
static const getPartNumber = "/handle/return/all/parts"; // get static get getAssetTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=500"; // get
static const getServiceReportPriority = "/return/call/priority/list"; // get static get getPartNumber => "$_baseUrl/PartCatalog/GetPartAutoComplete"; // get
static const getServiceReportDefectTypes = "/return/call/defect/type/list"; // get static get getServiceReportPriority => "$_baseUrl/Lookups/GetLookup?lookupEnum=602"; // get
static get getServiceReportDefectTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=601"; // get
static get getCallRequestForWorkOrder => "$_baseUrl/CallRequest/GetCallRequestForWorkOrder"; // get
//gas refill //gas refill
static const getGasTypes = "/return/gas/refill/types"; // get static get getGasTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=606"; // get
static const getGasCylinderSize = "/return/gas/refill/size/cylinder"; // get // todo check edits with backend
static const getGasStatus = "/return/gas/refill/status"; // get static get getGasCylinderSize => "$_baseUrl/Lookups/GetLookup?lookupEnum=608"; // get
static const requestGasRefill = "/create/gas/refill"; // get static get getGasCylinderType => "$_baseUrl/Lookups/GetLookup?lookupEnum=607"; // get
static const updateGasRefill = "/update/gas/refill/"; // get static get getGasStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=609"; // get
static const getGasRefill = "/search/gas/refill"; // get static get requestGasRefill => "$_baseUrl/GazRefill/AddGazRefill"; // get
static get updateGasRefill => "$_baseUrl/GazRefill/UpdateGazRefill"; // get
static get getGasRefill => "$_baseUrl/GazRefill/GetGazRefills"; // get
//device transfer //device transfer
static const requestDeviceTransfer = "/create/transfer/asset"; // get static get requestDeviceTransfer => "$_baseUrl/AssetTransfer/AddAssetTransfer"; // get
static const updateDeviceTransfer = "/update/transfer/asset"; // get static get updateDeviceTransfer => "$_baseUrl/AssetTransfer/UpdateAssetTransfer"; // get
static const getDeviceTransfer = "/search/transfer/asset"; // get static get getDeviceTransfer => "$_baseUrl/AssetTransfer/GetAssetTransfers"; // get
static get getAssetTransferById => "$_baseUrl/AssetTransfer/GetAssetTransferById"; // get
// employee // employee
static const getEmployees = "/return/assigned/employee"; // get static get getEmployees => "$_baseUrl/Lookups/GetLookup?lookupEnum=33"; // get
static get getEngineers => "$_baseUrl/Account/GetUserByRoleValue?value=R-6"; // get
// pentry // pentry
static const getPentry = "/return/pentry/details"; // get static get getPentry => "$_baseUrl/return/pentry/details"; // get
static const updatePentry = "/update/pentry/details"; // get static get updatePentry => "$_baseUrl/Visit/UpdateVisit"; // get
static const getPentryTaskStatus = "/return/pentry/task/status"; // get static get getPentryTaskStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=403"; // get
static const getPentryVisitStatus = "/return/pentry/visit/status/list"; // get static get getPentryVisitStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=402"; // get
static const getPentryStatus = "/return/pentry/status/list"; // get static get getPentryStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=401"; // get
// contacts // contacts
static const getPentryContacts = "/handle/return/all/contacts"; // get static get getPentryContacts => "$_baseUrl/handle/return/all/contacts"; // get
}
}

@ -4,7 +4,6 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
class AppLocalization { class AppLocalization {
AppLocalization(this.locale); AppLocalization(this.locale);
@ -17,23 +16,20 @@ class AppLocalization {
Subtitle get subtitle => _subtitle; Subtitle get subtitle => _subtitle;
Future<void> load() async { Future<void> load() async {
String jsonStringValues = String jsonStringValues = await rootBundle.loadString('assets/subtitles/${locale.languageCode}_subtitle.json');
await rootBundle.loadString('assets/subtitles/${locale.languageCode}_subtitle.json');
_subtitle = Subtitle.fromJson(json.decode(jsonStringValues)); _subtitle = Subtitle.fromJson(json.decode(jsonStringValues));
} }
// static member to have simple access to the delegate from Material App // static member to have simple access to the delegate from Material App
static const LocalizationsDelegate<AppLocalization> delegate = static const LocalizationsDelegate<AppLocalization> delegate = _DemoLocalizationsDelegate();
_DemoLocalizationsDelegate();
} }
class _DemoLocalizationsDelegate class _DemoLocalizationsDelegate extends LocalizationsDelegate<AppLocalization> {
extends LocalizationsDelegate<AppLocalization> {
const _DemoLocalizationsDelegate(); const _DemoLocalizationsDelegate();
@override @override
bool isSupported(Locale locale) { bool isSupported(Locale locale) {
return ['en','ar'].contains(locale.languageCode); return ['en', 'ar'].contains(locale.languageCode);
} }
@override @override
@ -45,4 +41,4 @@ class _DemoLocalizationsDelegate
@override @override
bool shouldReload(LocalizationsDelegate<AppLocalization> old) => false; bool shouldReload(LocalizationsDelegate<AppLocalization> old) => false;
} }

@ -7,8 +7,7 @@ import 'package:test_sa/models/app_notification.dart';
import 'notification_manger.dart'; import 'notification_manger.dart';
class FirebaseNotificationManger{ class FirebaseNotificationManger {
static FirebaseMessaging messaging = FirebaseMessaging.instance; static FirebaseMessaging messaging = FirebaseMessaging.instance;
static String token; static String token;
@ -23,7 +22,7 @@ class FirebaseNotificationManger{
sound: true, sound: true,
); );
if(settings.authorizationStatus == AuthorizationStatus.authorized){ if (settings.authorizationStatus == AuthorizationStatus.authorized) {
token = await messaging.getToken(); token = await messaging.getToken();
} }
return token; return token;
@ -32,7 +31,7 @@ class FirebaseNotificationManger{
static initialized(BuildContext context) async { static initialized(BuildContext context) async {
await Firebase.initializeApp(); await Firebase.initializeApp();
NotificationSettings settings; NotificationSettings settings;
try{ try {
settings = await messaging.requestPermission( settings = await messaging.requestPermission(
alert: true, alert: true,
announcement: false, announcement: false,
@ -42,11 +41,11 @@ class FirebaseNotificationManger{
provisional: false, provisional: false,
sound: true, sound: true,
); );
}catch(error){ } catch (error) {
return; return;
} }
if(settings.authorizationStatus != AuthorizationStatus.authorized){ if (settings.authorizationStatus != AuthorizationStatus.authorized) {
return; return;
} }
@ -56,28 +55,17 @@ class FirebaseNotificationManger{
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) { FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
AppNotification notification = AppNotification.fromJson(message.data); AppNotification notification = AppNotification.fromJson(message.data);
if(notification.path == null if (notification.path == null || notification.path.isEmpty) return;
|| notification.path.isEmpty) Navigator.pushNamed(context, notification.path, arguments: notification.requestId);
return;
Navigator.pushNamed(
context,
notification.path,
arguments: notification.requestId
);
}); });
FirebaseMessaging.onMessage.listen((RemoteMessage message) { FirebaseMessaging.onMessage.listen((RemoteMessage message) {
AppNotification notification = AppNotification.fromJson(message.data); AppNotification notification = AppNotification.fromJson(message.data);
NotificationManger.showNotification( NotificationManger.showNotification(
title: message.notification.title, title: message.notification.title, subtext: message.notification.body, hashcode: int.tryParse(notification.requestId ?? "") ?? 1, payload: json.encode(message.data));
subtext: message.notification.body,
hashcode: int.tryParse(notification.requestId ?? "") ?? 1,
payload: json.encode(message.data)
);
return; return;
}); });
} }
} }
Future<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async { Future<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async {}
}

@ -2,7 +2,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
class NotificationManger{ class NotificationManger {
// private constructor to avoid create object // private constructor to avoid create object
NotificationManger._(); NotificationManger._();
@ -12,43 +12,26 @@ class NotificationManger{
/// onNotificationPressed action when notification pressed to open tap /// onNotificationPressed action when notification pressed to open tap
/// onIOSNotificationPressed action when notification pressed /// onIOSNotificationPressed action when notification pressed
/// to open tap in iOS versions older than 10 /// to open tap in iOS versions older than 10
static initialisation( static initialisation(Function(NotificationResponse) onNotificationPressed, DidReceiveLocalNotificationCallback onIOSNotificationPressed) async {
Function(NotificationResponse) onNotificationPressed, FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
DidReceiveLocalNotificationCallback onIOSNotificationPressed
) async {
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
// initialise the plugin. app_icon needs to be a added as a drawable resource to the Android head project // initialise the plugin. app_icon needs to be a added as a drawable resource to the Android head project
const AndroidInitializationSettings initializationSettingsAndroid = const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings(
AndroidInitializationSettings('app_icon',); 'app_icon',
);
final DarwinInitializationSettings initializationSettingsDarwin = final DarwinInitializationSettings initializationSettingsDarwin = DarwinInitializationSettings(onDidReceiveLocalNotification: onIOSNotificationPressed);
DarwinInitializationSettings(
onDidReceiveLocalNotification: onIOSNotificationPressed);
final InitializationSettings initializationSettings = InitializationSettings( final InitializationSettings initializationSettings = InitializationSettings(android: initializationSettingsAndroid, iOS: initializationSettingsDarwin, macOS: initializationSettingsDarwin);
android: initializationSettingsAndroid,
iOS: initializationSettingsDarwin,
macOS: initializationSettingsDarwin);
await flutterLocalNotificationsPlugin.initialize( await flutterLocalNotificationsPlugin.initialize(initializationSettings, onDidReceiveNotificationResponse: onNotificationPressed);
initializationSettings,
onDidReceiveNotificationResponse: onNotificationPressed);
} }
// push new notification // push new notification
static Future showNotification( static Future showNotification({@required String title, @required String subtext, @required int hashcode, String payload}) async {
{
@required String title,
@required String subtext,
@required int hashcode,
String payload
}) async {
const AndroidNotificationDetails androidChannel = AndroidNotificationDetails( const AndroidNotificationDetails androidChannel = AndroidNotificationDetails(
'com.newtrack.testsa', 'com.newtrack.testsa',
'Test SA', 'Test SA',
channelDescription:'Push notification service for Test SA', channelDescription: 'Push notification service for Test SA',
importance: Importance.max, importance: Importance.max,
priority: Priority.max, priority: Priority.max,
playSound: true, playSound: true,
@ -62,8 +45,7 @@ class NotificationManger{
groupKey: 'com.newtrack.testsa', groupKey: 'com.newtrack.testsa',
); );
const DarwinNotificationDetails iosNotificationDetails = const DarwinNotificationDetails iosNotificationDetails = DarwinNotificationDetails(
DarwinNotificationDetails(
categoryIdentifier: "testSA", categoryIdentifier: "testSA",
); );
@ -81,5 +63,4 @@ class NotificationManger{
payload: payload, payload: payload,
); );
} }
}
}

@ -2,13 +2,13 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/department.dart'; import 'package:test_sa/models/department.dart';
class DepartmentsProvider extends ChangeNotifier{ class DepartmentsProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
departments = null; departments = null;
stateCode = null; stateCode = null;
} }
@ -18,7 +18,6 @@ class DepartmentsProvider extends ChangeNotifier{
// 500 service not available // 500 service not available
int stateCode; int stateCode;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Department> departments; List<Department> departments;
@ -28,40 +27,35 @@ class DepartmentsProvider extends ChangeNotifier{
// failed _loading = false // failed _loading = false
bool isLoading; bool isLoading;
/// return -2 if request in progress /// return -2 if request in progress
/// return -1 if error happen when sending request /// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getDepartment (String host) async { Future<int> getDepartment(String host) async {
if(isLoading == true) if (isLoading == true) return -2;
return -2;
isLoading = true; isLoading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await ApiManager.instance.post(URLs.getDepartments, body: {
Uri.parse(host + URLs.getDepartments), "pageSize": 50,
headers: { // if(title != null && title.isNotEmpty) "name":title,
"Content-Type":"application/json; charset=utf-8" });
} } catch (error) {
);
} catch(error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); List listJson = json.decode(response.body)["data"];
departments = listJson.map((department) => Department.fromJson(department)).toList(); departments = listJson.map((department) => Department.fromJson(department)).toList();
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} }
}
}

@ -2,21 +2,33 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/device/device_transfer.dart'; import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/device/device_transfer_info.dart'; import 'package:test_sa/models/device/device_transfer_info.dart';
import 'package:test_sa/models/device/device_transfer_search.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class DeviceTransferProvider extends ChangeNotifier{ import '../../../models/hospital.dart';
class DeviceTransferProvider extends ChangeNotifier {
// number of items call in each request // number of items call in each request
final pageItemNumber = 50; final pageItemNumber = 12;
DeviceTransferSearch deviceTransferSearch = DeviceTransferSearch();
//reset provider data //reset provider data
void reset(){ void reset() {
items = null; items = null;
nextPage = true; nextPage = true;
stateCode = null; stateCode = null;
hospital = null;
building = null;
floor = null;
department = null;
room = "";
startDate = null;
endDate = null;
} }
// state code of current request to defied error message // state code of current request to defied error message
@ -35,136 +47,224 @@ class DeviceTransferProvider extends ChangeNotifier{
// failed _loading = false // failed _loading = false
bool isLoading; bool isLoading;
Hospital hospital;
Buildings building;
Floors floor;
Departments department;
String room;
DateTime startDate;
DateTime endDate;
/// return -2 if request in progress /// return -2 if request in progress
/// return -1 if error happen when sending request /// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getRequests ({ Future<int> getRequests({
@required String host, @required String host,
@required User user, @required User user,
}) async { }) async {
if(isLoading == true) if (isLoading == true) return -2;
return -2;
isLoading = true; isLoading = true;
if (items?.isEmpty ?? true) notifyListeners();
// isLoading = false;
// stateCode = 200;
// items = [];
// items.addAll(List.generate(20, (index) => DeviceTransfer(
// title: "ddddd",
// id: "5",
// device: Device(id: "1",brand: "brand",model: "model"),
// destinationClient: Hospital(name: "hospital name",id: "1"),
// destinationDepartment: Department(id: "5",name: "destination Department"),
// senderDepartment: Department(id: "5",name: "sender Department"),
// userId: "5"
// )));
// notifyListeners();
// return 200;
Response response; Response response;
try{ try {
response = await get( Map<String, dynamic> body = {};
Uri.parse( body["pageNumber"] = (items?.length ?? 0) ~/ pageItemNumber + 1;
"$host${URLs.getDeviceTransfer}?uid=${user.id}" body["pageSize"] = pageItemNumber;
"&token=${user.token}&page=${(items?.length ?? 0) ~/pageItemNumber}" body.addAll(deviceTransferSearch.toMap());
),
headers: { response = await ApiManager.instance.post(
"Content-Type":"application/json; charset=utf-8" URLs.getDeviceTransfer,
} body: body,
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(stateCode >= 200 && stateCode < 300) { if (stateCode >= 200 && stateCode < 300) {
// client's request was successfully received // client's request was successfully received
List listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); List listJson = json.decode(response.body)["data"];
List<DeviceTransfer> itemsPage = listJson.map( List<DeviceTransfer> itemsPage = listJson.map((request) => DeviceTransfer.fromJson(request)).toList();
(request) => DeviceTransfer.fromJson(request)).toList();
items ??= []; items ??= [];
items.addAll(itemsPage); items.addAll(itemsPage.toSet().toList());
if(itemsPage.length == pageItemNumber){ sortMostRecent(items, deviceTransferSearch.mostRecent);
print(listJson);
if (itemsPage.length == pageItemNumber) {
nextPage = true; nextPage = true;
}else{ } else {
nextPage = false; nextPage = false;
} }
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
}
void sortMostRecent(List<DeviceTransfer> transfer, bool mostRecent) {
if (mostRecent != null) {
transfer.sort((prev, next) =>
(mostRecent ?? false) ? DateTime.tryParse(next.createdOn).compareTo(DateTime.tryParse(prev.createdOn)) : DateTime.tryParse(prev.createdOn).compareTo(DateTime.tryParse(next.createdOn)));
}
} }
Future<int> createRequest ({ Future<DeviceTransfer> getRequestById({int assetTransferId}) async {
Response response;
try {
response = await ApiManager.instance.get(
URLs.getAssetTransferById + "?assetTransferId=$assetTransferId",
enableToastMessage: false,
);
if (response.statusCode >= 200 && response.statusCode < 300) {
return DeviceTransfer.fromJson(json.decode(response.body)["data"]);
}
return null;
} catch (error) {
print(error);
return null;
}
}
Future<int> createRequest({
@required String host, @required String host,
@required User user, @required User user,
@required DeviceTransfer model, @required DeviceTransfer model,
}) async { }) async {
Map<String,dynamic> body = { Map<String, dynamic> body = {
"uid": user.id.toString(), "id": 0,
"token": user.token ?? "", "assetId": model.device.id ?? "",
"serial_id": model.device.id ?? "", "destSiteId": hospital.id ?? "",
"destination_client": model.receiver.client.id ?? "", "destDepartmentId": department.id ?? "",
"destination_department": model.receiver.department.id ?? "", "senderSiteId": model.sender.client.id ?? "",
// "transferNo": 0,
// "transferCode": "string",
"destBuildingId": building?.id,
"destFloorId": floor.id,
"destRoom": room,
/////
"senderBuildingId": model.device.destBuildingId,
"senderFloorId": model.device.destFloorId,
"senderDepartmentId": model.device.destDepartmentId,
"senderRoom": model.device.destRoom,
// "senderAssignedEmployeeId": "string",
// "senderMachineStatusId": 0,
// "senderComment": "string",
// "senderStartDate": "2023-06-11T09:21:56.453Z",
// "senderEndDate": "2023-06-11T09:21:56.453Z",
// "senderWorkingHours": "string",
// "senderTravelingHours": "string",
// "senderAttachmentName": "string",
// "receiverAssignedEmployeeId": "string",
// "receiverMachineStatusId": 0,
// "receiverComment": "string",
// "receiverStartDate": "2023-06-11T09:21:56.453Z",
// "receiverEndDate": "2023-06-11T09:21:56.453Z",
// "receiverWorkingHours": "string",
// "receiverTravelingHours": "string",
// "receiverAttachmentName": "string"
}; };
Response response; Response response;
try{ try {
response = await post( response = await ApiManager.instance.post(URLs.requestDeviceTransfer, body: body);
Uri.parse(
host+URLs.requestDeviceTransfer),
body: body,
);
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
if(items != null) { if (items != null) {
items.insert( items.insert(0, DeviceTransfer.fromJson(json.decode(utf8.decode(response.bodyBytes))[0]));
0, reset();
DeviceTransfer.fromJson(
json.decode(utf8.decode(response.bodyBytes))[0]
)
);
notifyListeners(); notifyListeners();
} }
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
Future<int> updateRequest ({ Future<int> updateRequest({
@required String host, @required String host,
@required User user, @required User user,
@required bool isSender, @required bool isSender,
@required String requestId, @required int requestId,
@required DeviceTransfer oldModel, @required DeviceTransfer oldModel,
@required DeviceTransferInfo newModel, @required DeviceTransferInfo newModel,
}) async { }) async {
Map<String, dynamic> body = {
Map<String,dynamic> body = { "id": oldModel.id,
"uid": user.id.toString(), "assetId": oldModel.device.id ?? "",
"token": user.token ?? "", "senderSiteId": oldModel.sender.client.id,
"current_user": user.id ?? "", "destSiteId": oldModel.receiver.client.id,
"destDepartmentId": oldModel.receiver.department.id,
}; };
body.addAll(newModel.toJson(isSender)); if (isSender) {
body.addAll({
"senderSiteId": newModel.client.id,
"senderDepartmentId": newModel.department.id,
"senderAssignedEmployeeId": newModel.userId,
"senderMachineStatusId": newModel.status.id,
"senderComment": newModel.comment,
"senderWorkingHours": newModel.workingHours,
"senderStartDate": newModel.timer?.startAt?.toIso8601String(),
"senderEndDate": newModel.timer?.endAt?.toIso8601String(),
"senderTravelingHours": newModel.travelingHours,
"senderAttachmentName": newModel?.signature ?? "",
"destSiteId": oldModel.receiver.client.id,
"destDepartmentId": oldModel.receiver.department.id,
"receiverAssignedEmployeeId": oldModel.receiver.userId,
"receiverMachineStatusId": oldModel.receiver.status.id ?? "",
"receiverComment": oldModel.receiver.comment,
"receiverWorkingHours": oldModel.receiver.workingHours,
"receiverStartDate": oldModel.receiver.timer?.startAt?.toIso8601String(),
"receiverEndDate": oldModel.receiver.timer?.endAt?.toIso8601String(),
"receiverTravelingHours": oldModel.receiver.travelingHours,
"receiverAttachmentName": oldModel.receiver?.signature ?? "",
});
} else {
body.addAll({
"senderSiteId": oldModel.sender.client.id,
"senderDepartmentId": oldModel.sender.department.id,
"senderAssignedEmployeeId": oldModel.sender.userId,
"senderMachineStatusId": oldModel.sender.status.id,
"senderComment": oldModel.sender.comment,
"senderWorkingHours": oldModel.sender.workingHours,
"senderStartDate": oldModel.sender.timer?.startAt?.toIso8601String(),
"senderEndDate": oldModel.sender.timer?.endAt?.toIso8601String(),
"senderTravelingHours": oldModel.sender.travelingHours,
"senderAttachmentName": oldModel.sender?.signature ?? "",
"destSiteId": newModel.client.id,
"destDepartmentId": newModel.department.id,
"receiverAssignedEmployeeId": newModel.userId,
"receiverMachineStatusId": newModel.status?.id ?? "",
"receiverComment": newModel.comment,
"receiverWorkingHours": newModel.workingHours,
"receiverStartDate": newModel.timer?.startAt?.toIso8601String(),
"receiverEndDate": newModel.timer?.endAt?.toIso8601String(),
"receiverTravelingHours": newModel.travelingHours,
"receiverAttachmentName": newModel?.signature ?? "",
});
}
//body.addAll(newModel.toJson(isSender));
print(body);
Response response; Response response;
try{ try {
response = await post( response = await ApiManager.instance.put(URLs.updateDeviceTransfer, body: body);
Uri.parse("$host${URLs.updateDeviceTransfer}/$requestId"),
body: body, print(response.body);
); print("${newModel.signature}.png");
// response = await post(
// Uri.parse("$host${URLs.updateDeviceTransfer}/$requestId"),
// body: body,
// );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
reset(); reset();
// oldModel.fromDeviceTransfer( // oldModel.fromDeviceTransfer(
// DeviceTransfer.fromJson( // DeviceTransfer.fromJson(
@ -174,10 +274,8 @@ class DeviceTransferProvider extends ChangeNotifier{
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
} }

@ -2,33 +2,41 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class DevicesProvider extends ChangeNotifier{ class DevicesProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_devices = null; _devices = [];
_stateCode = null; _stateCode = null;
} }
final pageItemNumber = 10;
bool nextPage = true;
// state code of current request to defied error message // state code of current request to defied error message
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int _stateCode;
int get stateCode => _stateCode; int get stateCode => _stateCode;
List<Device> _devices; List<Device> _devices = [];
List<Device> get devices => _devices; List<Device> get devices => _devices;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool _loading;
bool get isLoading => _loading; bool get isLoading => _loading;
set isLoading(bool isLoading){
set isLoading(bool isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -38,34 +46,39 @@ class DevicesProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getEquipment ({ Future<int> getEquipment({
@required String host, @required String host,
@required User user, @required User user,
@required String hospitalId @required int hospitalId,
String serialNumber,
String number,
}) async { }) async {
if(_loading == true) if (_loading == true) return -2;
return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await ApiManager.instance.post(URLs.getEquipment, body: {
Uri.parse(host + URLs.getEquipment+"?client=$hospitalId"), "pageSize": pageItemNumber,
headers: { "pageNumber": devices.length ~/ pageItemNumber + 1,
"Content-Type":"application/json; charset=utf-8" "siteId": hospitalId,
} if (serialNumber?.isEmpty == false) "assetSerialNumber": serialNumber,
); if (number?.isEmpty == false) "assetNo": number,
} catch(error) { });
} catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List equipmentListJson = json.decode(utf8.decode(response.bodyBytes)); List equipmentListJson = json.decode(response.body)["data"];
_devices = equipmentListJson.map((device) => Device.fromJson(device)).toList(); _devices.addAll(equipmentListJson.map<Device>((device) => Device.fromJson(device, startKeyWithDest: false)).toList());
nextPage = true;
} else {
nextPage = false;
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
@ -77,66 +90,93 @@ class DevicesProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<List<Device>> getDevicesList ({ Future<List<Device>> getDevicesList({
@required String host, @required String host,
@required User user, @required User user,
@required String hospitalId, @required int hospitalId,
String serialNumber, String serialNumber,
String number, String number,
}) async { }) async {
Response response; Response response;
try{ try {
response = await get( response = await ApiManager.instance.post(URLs.getEquipment, body: {
Uri.parse("$host${URLs.getEquipment}?client=$hospitalId" "pageSize": pageItemNumber,
"${serialNumber?.isEmpty == false ? "&name=$serialNumber" :""}" "pageNumber": devices.length ~/ pageItemNumber + 1,
"${number?.isEmpty == false ? "&number=$number" : ""}" "siteId": devices.length ~/ pageItemNumber + 1,
), if (serialNumber?.isEmpty == false) "assetSerialNumber": serialNumber,
); if (number?.isEmpty == false) "assetNo": number,
List<Device> page = []; });
if(response.statusCode >= 200 && response.statusCode < 300) { // response = await get(
// Uri.parse("$host${URLs.getEquipment}?siteId=$hospitalId"
// "${serialNumber?.isEmpty == false ? "&assetSerialNumber=$serialNumber" :""}"
// "${number?.isEmpty == false ? "&assetNo=$number" : ""}"
// ),
// );
List<Device> page = [];
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List equipmentListJson = json.decode(response.body)["data"];
page = categoriesListJson.map((device) => Device.fromJson(device)).toList(); page = equipmentListJson.map((device) => Device.fromJson(device, startKeyWithDest: false)).toList();
_devices.addAll(equipmentListJson.map<Device>((device) => Device.fromJson(device, startKeyWithDest: false)).toList());
notifyListeners();
} }
return page; return page;
} catch(error) { } catch (error) {
return []; return [];
} }
} }
/// return -2 if request in progress Future<List<Lookup>> getModels({
/// return -1 if error happen when sending request String code,
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<List<Device>> getDevicesListBySN ({
@required String host,
@required User user,
@required String hospitalId,
@required String sn
}) async { }) async {
Response response; Response response;
try{ try {
response = await get( response = await ApiManager.instance.get(
Uri.parse(host + URLs.getEquipment+"?client=$hospitalId" URLs.getModels + "?code=$code",
+ ( sn == null || sn.isEmpty ? "" : "&serial_qr=$sn" )),
); );
List<Lookup> page = [];
_stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) {
List<Device> _page = [];
if(response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(response.body)["data"];
_page = categoriesListJson.map((device) => Device.fromJson(device)).toList(); page = categoriesListJson
.map((json) => Lookup(
name: json["modelDefCode"],
id: json["id"],
value: json["id"],
))
.toList();
} }
return _page; return page;
} catch(error) { } catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return []; return [];
} }
} }
}
// /// return -2 if request in progress
// /// return -1 if error happen when sending request
// /// return state code if request complete may be 200, 404 or 403
// /// for more details check http state manager
// /// lib\controllers\http_status_manger\http_status_manger.dart
// Future<List<Device>> getDevicesListBySN({@required String host, @required User user, @required int hospitalId, @required String sn}) async {
// Response response;
// try {
// response = await get(
// Uri.parse(URLs.getEquipment + "?client=$hospitalId" + (sn == null || sn.isEmpty ? "" : "&serial_qr=$sn")),
// );
//
// _stateCode = response.statusCode;
// List<Device> _page = [];
// if (response.statusCode >= 200 && response.statusCode < 300) {
// // client's request was successfully received
// List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
// _page = categoriesListJson.map((device) => Device.fromJson(device)).toList();
// }
// return _page;
// } catch (error) {
// _loading = false;
// _stateCode = -1;
// notifyListeners();
// return [];
// }
// }
}

@ -1,21 +1,28 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:developer';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/gas_refill/gas_refill_model.dart'; import 'package:test_sa/models/gas_refill/gas_refill_model.dart';
import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/timer_model.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class GasRefillProvider extends ChangeNotifier{ class GasRefillProvider extends ChangeNotifier {
// number of items call in each request // number of items call in each request
final pageItemNumber = 50; final pageItemNumber = 12;
//reset provider data //reset provider data
void reset(){ void reset() {
items = null; items = null;
nextPage = true; nextPage = true;
stateCode = null; stateCode = null;
hospital = null;
building = null;
floor = null;
department = null;
} }
// state code of current request to defied error message // state code of current request to defied error message
@ -39,134 +46,169 @@ class GasRefillProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getRequests ({ Future<int> getRequests({
@required String host, @required String host,
@required User user, @required User user,
bool mostRecent,
}) async { }) async {
if(isLoading == true) if (isLoading == true) return -2;
return -2;
isLoading = true; isLoading = true;
if (items?.isEmpty ?? true) notifyListeners();
Response response; Response response;
try{
response = await get( Map<String, dynamic> body = {};
Uri.parse( body["pageNumber"] = (items?.length ?? 0) ~/ pageItemNumber + 1;
"$host${URLs.getGasRefill}?uid=${user.id}" body["pageSize"] = pageItemNumber;
"&token=${user.token}&page=${(items?.length ?? 0) ~/pageItemNumber}" print("url:${URLs.getGasRefill}:body:$body");
),
headers: { response = await ApiManager.instance.post(
"Content-Type":"application/json; charset=utf-8" URLs.getGasRefill,
} body: body,
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(stateCode >= 200 && stateCode < 300) { if (stateCode >= 200 && stateCode < 300) {
// client's request was successfully received // client's request was successfully received
List requestsListJson = json.decode(utf8.decode(response.bodyBytes)); List requestsListJson = json.decode(response.body)["data"];
List<GasRefillModel> itemsPage = requestsListJson.map( List<GasRefillModel> itemsPage = requestsListJson.map((request) => GasRefillModel.fromJson(request)).toList();
(request) => GasRefillModel.fromJson(request)).toList(); if (mostRecent != null) {
items = [];
} else {
items ??= []; items ??= [];
items.addAll(itemsPage);
if(itemsPage.length == pageItemNumber){
nextPage = true;
}else{
nextPage = false;
}
} }
items.addAll(itemsPage);
sortMostRecent(items, mostRecent);
if (itemsPage.length == pageItemNumber) {
nextPage = true;
} else {
nextPage = false;
}
}
try {
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
}
void sortMostRecent(List<GasRefillModel> models, bool mostRecent) {
if (mostRecent != null) {
models.sort((prev, next) => (mostRecent ?? false) ? next.title.compareTo(prev.title) : prev.title.compareTo(next.title));
}
} }
Future<int> createModel ({ Future<int> createModel({
@required String host, @required String host,
@required User user, @required User user,
@required GasRefillModel model, @required GasRefillModel model,
}) async { }) async {
Map<String,dynamic> body = { Map<String, dynamic> body = {
"uid": user.id.toString(), "uid": user.id.toString(),
"token": user.token ?? "", "token": user.token ?? "",
"title": model.title ?? "", "site": hospital?.toMap(),
"status": "0",//model.status.value.toString(), "building": {"id": building?.id, "name": building?.name, "value": building?.value},
"floor": {"id": floor?.id, "name": floor?.name, "value": floor?.value},
if (expectedDateTime != null) "expectedDate": expectedDateTime?.toIso8601String(),
if (expectedDateTime != null) "expectedTime": expectedDateTime?.toIso8601String(),
if (timer?.startAt != null) "startDate": timer.startAt.toIso8601String(),
if (timer?.startAt != null) "startTime": timer.startAt.toIso8601String(),
if (timer?.endAt != null) "endDate": timer.endAt.toIso8601String(),
if (timer?.endAt != null) "endTime": timer.endAt.toIso8601String(),
"department": {"id": department?.id, "departmentName": department?.name, "departmentCode": "", "ntCode": ""},
"GazRefillNo": "GR-${DateTime.now().toString().split(" ").first}",
"status": model.status.toMap(),
}; };
body["gazRefillDetails"] = model.details
body["details"] = jsonEncode(model.details.map((model) => { .map((model) => {
"type": model.type.id?.toString(), "gasType": model.type.toMap(),
"size": model.cylinderSize?.id.toString(), "cylinderSize": model.cylinderSize.toMap(),
"requsted_qty": model.requestedQuantity.toString(), "cylinderType": model.cylinderType.toMap(),
}).toList()); "requestedQty": model.requestedQuantity,
})
.toList();
Response response; Response response;
try{ try {
response = await post( response = await ApiManager.instance.post(URLs.requestGasRefill, body: body);
Uri.parse(
host+URLs.requestGasRefill),
body: body,
);
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
if(items != null) { if (items != null) {
items.insert( reset();
0,
GasRefillModel.fromJson(
json.decode(utf8.decode(response.bodyBytes))[0]
)
);
notifyListeners(); notifyListeners();
} }
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) { print(error);
return -1; return -1;
} }
} }
Future<int> updateModel ({ Future<int> updateModel({
@required String host, @required String host,
@required User user, @required User user,
@required GasRefillModel oldModel, @required GasRefillModel oldModel,
@required GasRefillModel newModel, @required GasRefillModel newModel,
}) async { }) async {
Map<String,dynamic> body = { Map<String, dynamic> body = {
"uid": user.id.toString(), "id": newModel.id,
"token": user.token ?? "", "gazRefillNo": newModel.title ?? "",
"title": newModel.title ?? "", "status": newModel.status.toMap(),
"status": newModel.status.id.toString(), "expectedDate": newModel.expectedDate?.toIso8601String(),
"expectedTime": newModel.expectedDate?.toIso8601String(),
if (timer?.startAt != null) "startDate": timer.startAt.toIso8601String(),
if (timer?.startAt != null) "startTime": timer.startAt.toIso8601String(),
if (timer?.endAt != null) "endDate": timer.endAt.toIso8601String(),
if (timer?.endAt != null) "endTime": timer.endAt.toIso8601String(),
// "workingHours": ((endDate?.difference(startDate)?.inMinutes ?? 0) / 60),
'workingHours': timer.durationInSecond != null ? timer.durationInSecond / 60 / 60 : newModel.workingHours,
"assignedEmployee": oldModel?.assignedEmployee?.id == null ? null : oldModel?.assignedEmployee?.toJson(),
"site": hospital?.toMap(),
"building": building?.toJson(includeFloors: false),
"floor": floor?.toJson(includeDepartments: false),
"department": department?.toJson(),
"engSignature": newModel.signatureEngineer,
"nurseSignature": newModel.signatureNurse,
}; };
body["details"] = jsonEncode(newModel.details.map((model) => { body["gazRefillDetails"] = newModel.details
"type": model.type.id.toString(), .map((model) => {
"size": model.cylinderSize.id.toString(), "gasType": model.type.toMap(),
"requsted_qty": model.requestedQuantity.toString(), "cylinderSize": model.cylinderSize.toMap(),
"deliverd_qty": model.deliveredQuantity.toString(), "cylinderType": model.cylinderType.toMap(),
}).toList()); "requestedQty": model.requestedQuantity,
"deliverdQty": model.deliveredQuantity,
Response response; })
try{ .toList();
response = await post( log(body.toString());
Uri.parse("$host${URLs.updateGasRefill}/${newModel.id}"), return -1;
body: body, // Response response;
); // try {
// response = await ApiManager.instance.put(URLs.updateGasRefill, body: body);
stateCode = response.statusCode; // // response = await post(
if(response.statusCode >= 200 && response.statusCode < 300) { // // Uri.parse("$host${URLs.updateGasRefill}/${newModel.id}"),
oldModel.fromGasRefillModel(newModel); // // body: body,
notifyListeners(); // // );
} //
return response.statusCode; // stateCode = response.statusCode;
// if (response.statusCode >= 200 && response.statusCode < 300) {
} catch(error) { // oldModel.fromGasRefillModel(newModel);
return -1; // notifyListeners();
} // }
// return response.statusCode;
// } catch (error) {
// return -1;
// }
} }
}
Hospital hospital;
Buildings building;
Floors floor;
Departments department;
DateTime expectedDateTime;
TimerModel timer;
}

@ -3,17 +3,17 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class HospitalsProvider extends ChangeNotifier{ class HospitalsProvider extends ChangeNotifier {
// number of items call in each request // number of items call in each request
final pageItemNumber = 50; final pageItemNumber = 12;
//reset provider data //reset provider data
void reset(){ void reset() {
_hospitals = null; _hospitals = null;
_stateCode = null; _stateCode = null;
} }
@ -22,23 +22,28 @@ class HospitalsProvider extends ChangeNotifier{
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int _stateCode;
int get stateCode => _stateCode; int get stateCode => _stateCode;
// true if there is next page in product list and false if not // true if there is next page in product list and false if not
bool _nextPage = true; bool _nextPage = true;
bool get nextPage => _nextPage; bool get nextPage => _nextPage;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Hospital> _hospitals; List<Hospital> _hospitals;
List<Hospital> get hospitals => _hospitals; List<Hospital> get hospitals => _hospitals;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool _loading;
bool get isLoading => _loading; bool get isLoading => _loading;
set isLoading(bool isLoading){
set isLoading(bool isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -48,77 +53,101 @@ class HospitalsProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getHospitals ({String host,User user,String title}) async { Future<int> getHospitals({String host, User user, String title}) async {
if(_loading == true) if (_loading == true) return -2;
return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await ApiManager.instance.post(URLs.getHospitals, body: {
Uri.parse( "pageNumber": (hospitals?.length ?? 0) ~/ pageItemNumber + 1,
host + URLs.getHospitals "pageSize": 50,
+ "?page=${(_hospitals?.length ?? 0) ~/pageItemNumber}" if (title != null && title.isNotEmpty) "name": title,
+ ( title == null || title.isEmpty ? "" : "&name=$title" ) });
),
headers: {
"Content-Type":"application/json; charset=utf-8"
}
);
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(response.body)["data"];
List<Hospital> _page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList(); List<Hospital> _page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList();
if(hospitals == null) if (hospitals == null) _hospitals = [];
_hospitals = [];
_hospitals.addAll(_page); _hospitals.addAll(_page);
if(_page.length >= pageItemNumber){ if (_page.length >= pageItemNumber) {
_nextPage = true; _nextPage = true;
}else{ } else {
_nextPage = false; _nextPage = false;
} }
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
Future<List<Hospital>> getHospitalsList ({String host,User user,String title}) async { Future<List<Hospital>> getHospitalsList({String host, User user, String title}) async {
Response response; Response response;
try{ try {
response = await ApiManager.instance.post(URLs.getHospitals, body: {
response = await get( "pageSize": 50,
Uri.parse(host + URLs.getHospitals if (title != null && title.isNotEmpty) "name": title,
+ ( title == null || title.isEmpty ? "" : "?name=$title" )), });
headers: { // response = await get(
"Content-Type":"application/json; charset=utf-8" // Uri.parse(host + URLs.getHospitals
} // + ( title == null || title.isEmpty ? "" : "?name=$title" )),
); // headers: {
// "Content-Type":"application/json; charset=utf-8"
// }
// );
_stateCode = response.statusCode; _stateCode = response.statusCode;
List<Hospital> _page = []; List<Hospital> _page = [];
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(response.body)["data"];
_page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList(); _page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList();
} }
return _page; return _page;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return []; return [];
} }
} }
} Future<List<Hospital>> getHospitalsListByVal({String searchVal = ""}) async {
Response response;
try {
if (searchVal.isNotEmpty) {
searchVal = "?searchText=$searchVal";
}
response = await ApiManager.instance.get(URLs.getHospitalsAutoComplete + searchVal);
// response = await get(
// Uri.parse(host + URLs.getHospitals
// + ( title == null || title.isEmpty ? "" : "?name=$title" )),
// headers: {
// "Content-Type":"application/json; charset=utf-8"
// }
// );
_stateCode = response.statusCode;
List<Hospital> _page = [];
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"];
_page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList();
}
return _page;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return [];
}
}
}

@ -6,13 +6,12 @@ import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/app_notification.dart'; import 'package:test_sa/models/app_notification.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class NotificationsProvider extends ChangeNotifier{ class NotificationsProvider extends ChangeNotifier {
// number of items call in each request // number of items call in each request
final pageItemNumber = 20; final pageItemNumber = 12;
//reset provider data //reset provider data
void reset(){ void reset() {
notifications = null; notifications = null;
nextPage = true; nextPage = true;
stateCode = null; stateCode = null;
@ -34,58 +33,50 @@ class NotificationsProvider extends ChangeNotifier{
// failed _loading = false // failed _loading = false
bool isLoading; bool isLoading;
/// return -2 if request in progress /// return -2 if request in progress
/// return -1 if error happen when sending request /// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getNotifications ({ Future<int> getNotifications({
@required String host, @required String host,
@required User user, @required User user,
@required String hospitalId, @required int hospitalId,
}) async { }) async {
if(isLoading == true) if (isLoading == true) return -2;
return -2;
isLoading = true; isLoading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
// userId = 397.toString(); // testing id to view data // userId = 397.toString(); // testing id to view data
try{ try {
response = await get( response = await get(
Uri.parse(host+URLs.getNotifications Uri.parse(URLs.getNotifications +
+"?uid=${user.id}" "?uid=${user.id}"
"&token=${user.token}" "&token=${user.token}"
"&page=${(notifications?.length ?? 0) ~/pageItemNumber}"), "&page=${(notifications?.length ?? 0) ~/ pageItemNumber}"),
headers: { headers: {"Content-Type": "application/json; charset=utf-8"});
"Content-Type":"application/json; charset=utf-8"
}
);
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List requestsListJson = json.decode(utf8.decode(response.bodyBytes)); List requestsListJson = json.decode(utf8.decode(response.bodyBytes));
List<AppNotification> _serviceRequestsPage = requestsListJson.map( List<AppNotification> _serviceRequestsPage = requestsListJson.map((request) => AppNotification.fromJson(request)).toList();
(request) => AppNotification.fromJson(request)).toList(); if (notifications == null) notifications = [];
if(notifications == null)
notifications = [];
notifications.addAll(_serviceRequestsPage); notifications.addAll(_serviceRequestsPage);
if(_serviceRequestsPage.length == pageItemNumber){ if (_serviceRequestsPage.length == pageItemNumber) {
nextPage = true; nextPage = true;
}else{ } else {
nextPage = false; nextPage = false;
} }
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
/// return -2 if request in progress /// return -2 if request in progress
@ -93,35 +84,26 @@ class NotificationsProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<List<AppNotification>> getRecentNotifications ({ Future<List<AppNotification>> getRecentNotifications({
@required String host, @required String host,
@required User user, @required User user,
}) async { }) async {
Response response; Response response;
//userId = 397.toString(); // testing id to view data //userId = 397.toString(); // testing id to view data
try{ try {
response = await get( response = await get(Uri.parse(host + URLs.getNotifications + "?uid=${user.id}&token=${user.token}"), headers: {"Content-Type": "application/json; charset=utf-8"});
Uri.parse(host+URLs.getNotifications
+"?uid=${user.id}&token=${user.token}"),
headers: {
"Content-Type":"application/json; charset=utf-8"
}
);
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List requestsListJson = json.decode(utf8.decode(response.bodyBytes)); List requestsListJson = json.decode(utf8.decode(response.bodyBytes));
List<AppNotification> _recentNotifications = requestsListJson.map( List<AppNotification> _recentNotifications = requestsListJson.map((request) => AppNotification.fromJson(request)).toList();
(request) => AppNotification.fromJson(request)).toList();
return _recentNotifications; return _recentNotifications;
} }
return null; return null;
} catch (error) {
} catch(error) {
return null; return null;
} }
} }
} }

@ -1,19 +1,19 @@
import 'dart:convert'; import 'dart:convert';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/part.dart';
import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/part.dart';
import 'package:test_sa/models/user.dart';
class PartsProvider extends ChangeNotifier{ class PartsProvider extends ChangeNotifier {
// number of items call in each request // number of items call in each request
final pageItemNumber = 50; final pageItemNumber = 20;
//reset provider data //reset provider data
void reset(){ void reset() {
_parts = null; _parts = null;
_stateCode = null; _stateCode = null;
} }
@ -22,23 +22,28 @@ class PartsProvider extends ChangeNotifier{
// like 400 customer request failed // like 400 customer request failed
// 500 service not available // 500 service not available
int _stateCode; int _stateCode;
int get stateCode => _stateCode; int get stateCode => _stateCode;
// true if there is next page in product list and false if not // true if there is next page in product list and false if not
bool _nextPage = true; bool _nextPage = true;
bool get nextPage => _nextPage; bool get nextPage => _nextPage;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Part> _parts; List<Part> _parts;
List<Part> get parts => _parts; List<Part> get parts => _parts;
// when categories in-process _loading = true // when categories in-process _loading = true
// done _loading = true // done _loading = true
// failed _loading = false // failed _loading = false
bool _loading; bool _loading;
bool get isLoading => _loading; bool get isLoading => _loading;
set isLoading(bool isLoading){
set isLoading(bool isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -48,48 +53,36 @@ class PartsProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getParts ({String host,User user,String title}) async { Future<int> getParts({String host, User user, String title}) async {
if(_loading == true) if (_loading == true) return -2;
return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await ApiManager.instance.post(URLs.getPartNumber, body: {if (title != null && title.isNotEmpty) "partName": title});
Uri.parse(
host + URLs.getPartNumber
+ "?page=${(_parts?.length ?? 0) ~/pageItemNumber}"
+ ( title == null || title.isEmpty ? "" : "&name=$title" )
),
headers: {
"Content-Type":"application/json; charset=utf-8"
}
);
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
List<Part> _page = categoriesListJson.map((part) => Part.fromJson(part)).toList(); List<Part> _page = categoriesListJson.map((part) => Part.fromJson(part)).toList();
if(parts == null) if (parts == null) _parts = [];
_parts = [];
_parts.addAll(_page); _parts.addAll(_page);
if(_page.length >= pageItemNumber){ if (_page.length >= pageItemNumber) {
_nextPage = true; _nextPage = true;
}else{ } else {
_nextPage = false; _nextPage = false;
} }
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
/// return -2 if request in progress /// return -2 if request in progress
@ -97,30 +90,23 @@ class PartsProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<List<Part>> getPartsList ({String host,User user,String title}) async { Future<List<Part>> getPartsList({String host, User user, String title}) async {
Response response; Response response;
try{ try {
if (int.tryParse(title) != null) {
response = await get( response = await ApiManager.instance.post(URLs.getPartNumber, body: {if (title != null && title.isNotEmpty) "partNo": title});
Uri.parse( } else {
host + URLs.getPartNumber response = await ApiManager.instance.post(URLs.getPartNumber, body: {if (title != null && title.isNotEmpty) "partName": title});
+ ( title == null || title.isEmpty ? "" : "?name=$title" ) }
), List<Part> page = [];
headers: { if (response.statusCode >= 200 && response.statusCode < 300) {
"Content-Type":"application/json; charset=utf-8"
}
);
List<Part> _page = [];
if(response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(response.body)["data"];
_page = categoriesListJson.map((part) => Part.fromJson(part)).toList(); page = categoriesListJson.map((part) => Part.fromJson(part)).toList();
} }
return _page; return page;
} catch(error) { } catch (error) {
return []; return [];
} }
} }
}
}

@ -1,20 +1,20 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/models/visits/visit.dart';
import 'package:test_sa/models/visits/visits_group.dart'; import 'package:test_sa/models/visits/visits_group.dart';
import 'package:test_sa/models/visits/visits_search.dart'; import 'package:test_sa/models/visits/visits_search.dart';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
class PreventiveMaintenanceVisitsProvider extends ChangeNotifier{
class PreventiveMaintenanceVisitsProvider extends ChangeNotifier {
// number of items call in each request // number of items call in each request
final pageItemNumber = 50; final pageItemNumber = 10;
//reset provider data //reset provider data
void reset(){ void reset() {
visits = null; visits = null;
nextPage = true; nextPage = true;
stateCode = null; stateCode = null;
@ -43,47 +43,37 @@ class PreventiveMaintenanceVisitsProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getVisits ({ Future<int> getVisits({
@required String host, @required String host,
@required User user, @required User user,
// VisitsSearch visitsSearch, // VisitsSearch visitsSearch,
}) async { }) async {
if(isLoading == true) if (isLoading == true) return -2;
return -2;
isLoading = true; isLoading = true;
Response response; Response response;
//userId = 397.toString(); // testing id to view data //userId = 397.toString(); // testing id to view data
try{ try {
response = await get( response = await get(
Uri.parse( Uri.parse(
host + URLs.getPreventiveMaintenanceVisits "${host + URLs.getPreventiveMaintenanceVisits}?uid=${user.id}&token=${user.token}&page=${(visits?.length ?? 0) ~/ pageItemNumber}${visitsSearch?.toMap()}",
+"?uid=${user.id}"
"&token=${user.token}"
"&page=${(visits?.length ?? 0) ~/pageItemNumber}"
+visitsSearch?.toSearchString() ?? ""
), ),
headers: { headers: {"Content-Type": "application/json; charset=utf-8"});
"Content-Type":"application/json; charset=utf-8" } catch (error) {
}
);
} catch(error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List requestsListJson = json.decode(utf8.decode(response.bodyBytes)); List requestsListJson = json.decode(utf8.decode(response.bodyBytes));
List<Visit> _visits = requestsListJson.map( List<Visit> _visits = requestsListJson.map((request) => Visit.fromJson(request)).toList();
(request) => Visit.fromJson(request)).toList(); if (visits == null) visits = [];
if(visits == null)
visits = [];
visits.addAll(_visits); visits.addAll(_visits);
if(_visits.length == pageItemNumber){ if (_visits.length == pageItemNumber) {
nextPage = true; nextPage = true;
}else{ } else {
nextPage = false; nextPage = false;
} }
} }
@ -97,41 +87,36 @@ class PreventiveMaintenanceVisitsProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> updateGroupOfVisits ({ Future<int> updateGroupOfVisits({
@required String host, @required String host,
@required User user, @required User user,
VisitsGroup group, VisitsGroup group,
}) async { }) async {
Response response; Response response;
Map<String,String> body = group.toJson(); Map<String, String> body = group.toJson();
body["token"] = user.token ?? ""; // body["token"] = user.token ?? "";
body["uid"] = user.id; // body["uid"] = user.id;
//userId = 397.toString(); // testing id to view data //userId = 397.toString(); // testing id to view data
try{ try {
response = await post( response = await ApiManager.instance.put(URLs.updatePreventiveMaintenanceVisits, body: body);
Uri.parse(
host+URLs.updatePreventiveMaintenanceVisits
),
body: body,
);
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
group.visits.forEach((visit) { // group.visits.forEach((visit) {
visit.status = group.status; // visit.status = group.status;
visit.actualDate = group.date.toString().split(" ").first; // visit.actualDate = group.date.toString().split(" ").first;
}); // });
group.visits.clear(); group.visits.clear();
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
} }

@ -1,21 +1,22 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
import 'package:logger/logger.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/pantry/pentry.dart'; import 'package:test_sa/models/pantry/pentry.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/models/visits/visit.dart';
import 'package:test_sa/models/visits/visits_group.dart'; import 'package:test_sa/models/visits/visits_group.dart';
import 'package:test_sa/models/visits/visits_search.dart'; import 'package:test_sa/models/visits/visits_search.dart';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
class RegularVisitsProvider extends ChangeNotifier{
class RegularVisitsProvider extends ChangeNotifier {
// number of items call in each request // number of items call in each request
final pageItemNumber = 50; final pageItemNumber = 20;
//reset provider data //reset provider data
void reset(){ void reset() {
visits = null; visits = null;
nextPage = true; nextPage = true;
stateCode = null; stateCode = null;
@ -44,93 +45,94 @@ class RegularVisitsProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getVisits ({ Future<int> getVisits({
@required String host, @required String host,
@required User user, @required User user,
// VisitsSearch visitsSearch, // VisitsSearch visitsSearch,
}) async { }) async {
if(isLoading == true) if (isLoading == true) return -2;
return -2;
isLoading = true; isLoading = true;
if (visits == null) notifyListeners();
Response response; Response response;
//userId = 397.toString(); // testing id to view data //userId = 397.toString(); // testing id to view data
try{
response = await get( try {
Uri.parse( Map<String, dynamic> body = {};
host+URLs.getRegularVisits body.addAll(visitsSearch.toMap());
+"?uid=${user.id}" body["pageNumber"] = (visits?.length ?? 0) ~/ pageItemNumber + 1;
"&token=${user.token}" body["pageSize"] = pageItemNumber;
"&page=${(visits?.length ?? 0) ~/pageItemNumber}"
+visitsSearch?.toSearchString() ?? "" response = await ApiManager.instance.post(
), URLs.getRegularVisits,
headers: { body: body,
"Content-Type":"application/json; charset=utf-8"
}
); );
} catch(error) { } catch (error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
try{ try {
List requestsListJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); List requestsListJson = json.decode(response.body)["data"];
List<Visit> _visits = requestsListJson.map( List<Visit> _visits = requestsListJson.map((request) => Visit.fromJson(request)).toList();
(request) => Visit.fromJson(request) visits ??= [];
).toList(); sortMostRecent(_visits);
if(visits == null)
visits = [];
visits.addAll(_visits); visits.addAll(_visits);
if(_visits.length == pageItemNumber){ if (_visits.length == pageItemNumber) {
nextPage = true; nextPage = true;
}else{ } else {
nextPage = false; nextPage = false;
} }
}catch(error){ } catch (error) {
Logger().e(error);
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} }
void sortMostRecent(List<Visit> visits) {
visits.sort((prev, next) => (visitsSearch.mostRecent ?? false)
? DateTime.tryParse(next.createdOn).compareTo(DateTime.tryParse(prev.createdOn))
: DateTime.tryParse(prev.createdOn).compareTo(DateTime.tryParse(next.createdOn)));
}
/// return -2 if request in progress /// return -2 if request in progress
/// return -1 if error happen when sending request /// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> updateGroupOfVisits ({ Future<int> updateGroupOfVisits({
@required String host, @required String host,
@required User user, @required User user,
VisitsGroup group, VisitsGroup group,
}) async { }) async {
Response response; Response response;
Map<String,String> body = group.toJson();
body["token"] = user.token ?? ""; try {
body["uid"] = user.id; Map<String, dynamic> body = group.toJson();
//userId = 397.toString(); // testing id to view data
try{ response = await ApiManager.instance.post(
response = await post( URLs.getRegularVisits,
Uri.parse(host+URLs.updateRegularVisits), body: body,
body: body,
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
reset(); reset();
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
@ -138,46 +140,46 @@ class RegularVisitsProvider extends ChangeNotifier{
} }
} }
Future<Pentry> getPently({String host,User user,String id}) async { Future<Pentry> getPently({String host, User user, int id}) async {
Response response; Response response;
response = await get( response = await get(Uri.parse("$host${URLs.getPentry}/$id"), headers: {"Content-Type": "application/json; charset=utf-8"});
Uri.parse("$host${URLs.getPentry}/$id"),
headers: {
"Content-Type":"application/json; charset=utf-8"
}
);
Pentry pantry; Pentry pantry;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
pantry = Pentry.fromMap(json.decode(utf8.decode(response.bodyBytes))); pantry = Pentry.fromMap(json.decode(utf8.decode(response.bodyBytes)));
} }
return pantry; return pantry;
} }
Future<int> updatePentry ({ Future<int> updatePentry({
@required String host, @required String host,
@required User user, @required User user,
@required Pentry pentry, @required Pentry pentry,
@required Visit visit, @required Visit visit,
}) async { }) async {
try{ try {
Response response; Response response;
Map<String,String> body = pentry.toMap(); Map<String, dynamic> body = pentry.toMap(visit.id);
body["uid"] = user.id; body["id"] = visit.id;
body["token"] = user.token; body["assetId"] = visit.deviceId;
response = await post( body["ppmScheduleId"] = visit.ppmScheduleId;
Uri.parse(host+URLs.updatePentry + "/${visit.id}"), // body["token"] = user.token;
body: body, // body["vChecklists"]?.addAll({});
); // body["vCalibrationTools"]?.addAll({"visitId": visit.id,});
if(response.statusCode >= 200 && response.statusCode < 300) { // body["vKits"]?.add({"visitId": visit.id,});
visit.status = pentry.ppmVisitStatus; response = await ApiManager.instance.put(URLs.updatePentry, body: body);
// response = await post(
// Uri.parse(host+URLs.updatePentry + "/${visit.id}"),
// body: body,
// );
if (response.statusCode >= 200 && response.statusCode < 300) {
reset(); //visit.status = pentry.ppmVisitStatus;
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
} }

@ -1,9 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:developer';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/http_status_manger.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/controllers/http_status_manger/http_status_manger.dart'; import 'package:test_sa/models/call_request_for_work_order_model.dart';
import 'package:test_sa/models/issue.dart'; import 'package:test_sa/models/issue.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/service_report.dart'; import 'package:test_sa/models/service_report.dart';
@ -11,15 +14,17 @@ import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/service_request/service_request_search.dart'; import 'package:test_sa/models/service_request/service_request_search.dart';
import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/models/timer_model.dart'; import 'package:test_sa/models/timer_model.dart';
import 'package:test_sa/models/user.dart';
class ServiceRequestsProvider extends ChangeNotifier{ import '../../../models/service_request/search_work_order.dart';
import '../../../models/user.dart';
class ServiceRequestsProvider extends ChangeNotifier {
// number of items call in each request // number of items call in each request
final pageItemNumber = 50; final pageItemNumber = 10;
//reset provider data //reset provider data
void reset(){ void reset() {
workOrders = [];
serviceRequests = null; serviceRequests = null;
nextPage = true; nextPage = true;
stateCode = null; stateCode = null;
@ -35,6 +40,7 @@ class ServiceRequestsProvider extends ChangeNotifier{
// list of user requests // list of user requests
List<ServiceRequest> serviceRequests; List<ServiceRequest> serviceRequests;
List<SearchWorkOrder> workOrders = [];
// when requests in-process _loading = true // when requests in-process _loading = true
// done _loading = true // done _loading = true
@ -48,55 +54,51 @@ class ServiceRequestsProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getRequests ({ Future<int> getRequests({@required int hospitalId}) async {
@required String host, if (isLoading == true) return -2;
@required User user,
@required String hospitalId,
}) async {
if(isLoading == true)
return -2;
isLoading = true; isLoading = true;
if (serviceRequests == null) notifyListeners();
Response response; Response response;
try{ try {
response = await get( Map<String, dynamic> body = {};
Uri.parse( body.addAll(search.toMap());
host+URLs.getServiceRequests body["pageNumber"] = (serviceRequests?.length ?? 0) ~/ pageItemNumber + 1;
+"?uid=${user.id}" body["pageSize"] = pageItemNumber;
+(hospitalId == null? "" :"&client_nid=$hospitalId")
+"&token=${user.token}" response = await ApiManager.instance.post(
"&page=${(serviceRequests?.length ?? 0) ~/pageItemNumber}" URLs.getServiceRequests,
+search?.toSearchString() ?? "" body: body,
),
headers: {
"Content-Type":"application/json; charset=utf-8"
}
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List requestsListJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); List requestsListJson = json.decode(response.body)["data"];
List<ServiceRequest> _serviceRequestsPage = requestsListJson.map( List<ServiceRequest> serviceRequestsPage = requestsListJson.map((request) => ServiceRequest.fromJson(request)).toList();
(request) => ServiceRequest.fromJson(request)).toList(); serviceRequests ??= [];
if(serviceRequests == null) sortMostRecent(serviceRequestsPage);
serviceRequests = []; serviceRequests.addAll(serviceRequestsPage);
serviceRequests.addAll(_serviceRequestsPage); if (serviceRequestsPage.length == pageItemNumber) {
if(_serviceRequestsPage.length == pageItemNumber){
nextPage = true; nextPage = true;
}else{ } else {
nextPage = false; nextPage = false;
} }
} }
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
isLoading = false; isLoading = false;
stateCode = -1; stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
}
void sortMostRecent(List<ServiceRequest> requests) {
requests.sort(
(prev, next) => (search.mostRecent ?? false) ? DateTime.tryParse(next.date).compareTo(DateTime.tryParse(prev.date)) : DateTime.tryParse(prev.date).compareTo(DateTime.tryParse(next.date)),
);
} }
Future<ServiceRequest> getSingleServiceRequest({ Future<ServiceRequest> getSingleServiceRequest({
@ -106,317 +108,569 @@ class ServiceRequestsProvider extends ChangeNotifier{
@required Subtitle subtitle, @required Subtitle subtitle,
}) async { }) async {
String userData = ''; String userData = '';
if(user != null){ if (user != null) {
userData += "&uid="+user.id; userData += "&uid=" + user.id;
userData += "&token="+user.token; userData += "&token=" + user.token;
} }
Response response; Response response;
try{ try {
response = await get( response = await get(Uri.parse(
Uri.parse( host +
host+URLs.getSingleServiceRequest URLs.getSingleServiceRequest +
+'?call_nid=$requestId' '?call_nid=$requestId'
'$userData',) '$userData',
); ));
}catch(error){ } catch (error) {
throw(HttpStatusManger.getStatusMessage( throw (HttpStatusManger.getStatusMessage(status: -1, subtitle: subtitle));
status: -1, subtitle: subtitle));
} }
// If the call to the server was successful, parse the JSON. // If the call to the server was successful, parse the JSON.
if (response.statusCode >= 200 && response.statusCode < 300){ if (response.statusCode >= 200 && response.statusCode < 300) {
// If the call to the server was successful, parse the JSON. // If the call to the server was successful, parse the JSON.
List jsonList = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); List jsonList = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", ""));
List<ServiceRequest> _requests = jsonList.map((i) => ServiceRequest.fromJson(i)).toList(); List<ServiceRequest> _requests = jsonList.map((i) => ServiceRequest.fromJson(i)).toList();
return _requests[0]; return _requests[0];
}else{ } else {
throw(HttpStatusManger.getStatusMessage( throw (HttpStatusManger.getStatusMessage(status: response.statusCode, subtitle: subtitle));
status: response.statusCode, subtitle: subtitle));
} }
} }
Future<int> createRequest ({ Future<int> createRequest({
@required String host, @required String host,
@required User user, @required User user,
@required ServiceRequest serviceRequest, @required ServiceRequest serviceRequest,
}) async { }) async {
var body = { var body = {
"uid": user.id, "id": 0,
"token": user.token ?? "", "calNo": "",
"sn_id": serviceRequest.deviceId ?? "", "callCreatedBy": {"id": user.userID, "name": user.userName ?? ""},
"date": (DateTime.now().millisecondsSinceEpoch).toString(), "assets": serviceRequest.deviceId == null ? [] : [serviceRequest.deviceId],
"client": user.hospital.id ?? '', "requestedDate": DateTime.now().toIso8601String(),
"complaint": serviceRequest.maintenanceIssue, "requestedTime": DateTime.now().toIso8601String(),
"image": json.encode(serviceRequest.devicePhotos), "client": user.clientId,
"priority": (serviceRequest.priority?.id).toString(), "callComments": serviceRequest.callComments,
"defect_types": (serviceRequest.defectType?.id).toString(), if (serviceRequest.devicePhotos.isNotEmpty) "attachmentsCallRequest": serviceRequest.devicePhotos.map((e) => {"name": e}).toList(),
"priority": serviceRequest.priority.toMap(),
"defectType": serviceRequest.defectType.toMap(),
"typeofRequest": serviceRequest.type.toMap(),
"requestedThrough": serviceRequest.requestedThrough.toMap(),
"reviewComment": null,
if (serviceRequest.audio != null) "voiceNote": serviceRequest.audio,
"callSiteContactPerson": [
{
"id": 0,
// "employeeCode": user.email,
"name": user.userName,
"telephone": user.phoneNumber,
// "job": "",
"email": user.email,
// "land": "",
"contactUserId": user.userID,
},
],
"noofFollowup": 0,
"status": null,
"callLastSituation": null,
"firstAction": null,
"loanAvailablity": null,
"comments": null,
"firstActionDate": null,
"visitDate": null,
"callReview": null,
}; };
if(serviceRequest.audio != null){ if (serviceRequest.audio != null) {
body["audio"] = serviceRequest.audio; body["voiceNote"] = serviceRequest.audio;
} }
Response response; Response response;
try{ try {
response = await post( response = await ApiManager.instance.post(URLs.createRequest, body: body);
Uri.parse(
host+URLs.createRequest),
body: body,
);
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
if(serviceRequests != null) if (serviceRequests != null) serviceRequests.insert(0, ServiceRequest.fromJson(json.decode(utf8.decode(response.bodyBytes))[0]));
serviceRequests.insert(
0,
ServiceRequest.fromJson(
json.decode(utf8.decode(response.bodyBytes))[0]
)
);
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
Future<int> createIssueReport ({ Future<int> createIssueReport({
@required String host, @required String host,
@required User user, @required User user,
@required Issue issue, @required Issue issue,
}) async { }) async {
Response response; Response response;
Map<String,String> body = issue.toMap(); Map<String, String> body = issue.toMap();
body["uid"] = user.id; body["uid"] = user.id;
body["token"] = user.token; body["token"] = user.token;
try{ try {
response = await post( response = await post(
Uri.parse(host+URLs.createReport), Uri.parse(host + URLs.createReport),
body: body, body: body,
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {}
}
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
Future<int> updateDate ({ Future<int> updateDate({
@required String host, @required String host,
@required User user, @required User user,
@required String newDate,
@required Lookup employee,
@required ServiceRequest request, @required ServiceRequest request,
DateTime date,
}) async { }) async {
Map<String, dynamic> serviceRequest = await getServiceRequestById(requestId: request.id) ?? "";
final List callSiteContacts = (serviceRequest['callSiteContactPerson'] as List);
final Map<String, dynamic> callSiteContactPerson = callSiteContacts.isEmpty ? {} : callSiteContacts[0];
print(callSiteContactPerson);
Response response; Response response;
Map<String,String> body = {}; var body = {
body["uid"] = user.id; "id": request.id,
body["token"] = user.token; "callNo": serviceRequest['callNo'],
body["nid"] = request.id; "callCreatedBy": serviceRequest['callCreatedBy'],
if(newDate != null) body["date"] = newDate; "requestedDate": request.date ?? "",
if(employee != null) body["ass_emp"] = employee.id.toString(); "requestedTime": request.date ?? "",
try{ "priority": request.priority?.toMap(),
response = await post( "defectType": request.defectType?.toMap(),
Uri.parse( "typeofRequest": request.type?.toMap(),
host+URLs.updateRequestDate), "requestedThrough": request.requestedThrough?.toMap(),
"voiceNote": request.audio,
"assets": request.deviceId == null ? [] : [request.deviceId],
"attachmentsCallRequest": request.devicePhotos?.map((e) => {"name": e})?.toList(),
"assignedEmployee": {
"id": request.engineerId,
"name": request.engineerName,
},
"callSiteContactPerson": [
{
"id": callSiteContactPerson['id'] ?? 0,
"employeeCode": callSiteContactPerson['employeeCode'],
"name": callSiteContactPerson['name'] ?? user.userName,
"telephone": callSiteContactPerson['telephone'] ?? user.phoneNumber,
"job": callSiteContactPerson['job'],
"email": callSiteContactPerson['email'] ?? user.email,
"land": callSiteContactPerson['land'],
"contactUserId": user.userID,
},
],
"callComments": request.callComments,
"noofFollowup": 0,
"status": request.statusId == null
? null
: {
"id": request.statusId,
"name": request.statusLabel,
"value": request.statusValue,
},
"callLastSituation": null,
"firstAction": request.firstAction?.toMap(),
"loanAvailablity": request.loanAvailability?.toMap(),
"comments": request.reviewComment,
"firstActionDate": date?.toIso8601String(),
"visitDate": date?.toIso8601String() ?? "",
"callReview": null,
"reviewComment": null,
};
try {
response = await ApiManager.instance.put(
URLs.updateRequestDate,
body: body, body: body,
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
request.engineerName = employee.label; // request.engineerName = employee.name;
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
Future<int> createServiceReport ({ Future<int> createServiceReport({
@required String host, @required String host,
@required User user, @required User user,
@required ServiceReport report, @required ServiceReport report,
@required ServiceRequest request, @required ServiceRequest request,
}) async { }) async {
Response response; Response response;
Map<String,String> body = report.toMap(); try {
body["uid"] = user.id; Map<String, dynamic> body = {
body["token"] = user.token; "id": 0,
body["job_id"] = request.id; "parentWOId": null,
try{ "workOrderNo": "",
response = await post( "workOrderYear": null,
Uri.parse( "workOrderSequennce": null,
host+URLs.createServiceReport), "callRequest": {
body: body, "id": request.id,
); },
"assetType": report.assetType?.toMap(),
"assignedEmployee": {"id": report.engineer?.id, "name": report.engineer?.name ?? ""},
"visitDate": report.returnToService?.toIso8601String() ?? "",
// "assistantEmployees": [
// {"id": report.engineer.id, "name": report.engineer.name},
// ],
"supplier": null,
"vendorTicketNumber": null,
"contactPersonWorkOrders": [
{
"id": 0,
// "employeeCode": "",
"name": user.userName,
"telephone": user.phoneNumber,
// "job": "",
"email": user.email,
// "land": "",
"contactUserId": user.userID,
}
],
"calllastSituation": report.callLastSituation?.toMap(),
"currentSituation": null,
"repairLocation": report.repairLocation?.toMap(),
"reason": report.reason?.toMap(),
"startofWorkTime": report.timer?.startAt?.toIso8601String() ?? "",
"endofWorkTime": report.timer?.endAt?.toIso8601String() ?? "",
"workingHours": report?.workingHours,
"travelingHours": report.travelingHours,
"travelingExpenses": report.travelingExpense ?? 0,
if (report.faultDescription != null) "faultDescription": report.faultDescription.toJson(),
"sparePartsWorkOrders": report.parts
?.map(
(p) => {
"id": p.reportPartID ?? 0,
"sparePart": {"id": p.id, "partNo": p.code, "partName": p.name},
"qty": p.quantity
},
)
?.toList(),
"reviewComment": "",
"comment": report.comment,
"attachmentsWorkOrder": request.devicePhotos?.map((e) => {"name": e})?.toList(),
"equipmentStatus": report.equipmentStatus?.toMap(),
"suppEngineerWorkOrders": null,
"engSignature": report.signatureEngineer,
"nurseSignature": report.signatureNurse,
"woParentDto": null,
};
// body["uid"] = user.id;
// body["token"] = user.token;
response = await ApiManager.instance.post(URLs.createServiceReport, body: body);
print(response.body);
// response = await post(
// Uri.parse(
// host+URLs.createServiceReport),
// body: body,
// );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
reset(); reset();
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch (error) {
print(error);
return -1;
}
}
} catch(error) { Future<int> createSubWorkOrder({
@required SearchWorkOrder workOrder,
}) async {
Response response;
try {
Map<String, dynamic> body = workOrder.toJson();
response = await ApiManager.instance.post(URLs.createServiceReport, body: body);
print(response.body);
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
reset();
notifyListeners();
}
return response.statusCode;
} catch (error) {
print(error);
return -1; return -1;
} }
}
CallRequestForWorkOrder callRequestForWorkOrder;
Future<CallRequestForWorkOrder> getCallRequestForWorkOrder({String callId}) async {
Response response;
try {
response = await ApiManager.instance.get(
URLs.getCallRequestForWorkOrder + "?callId=$callId",
);
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
Map<String, dynamic> listJson = json.decode(response.body)["data"];
log(listJson?.toString());
callRequestForWorkOrder = CallRequestForWorkOrder.fromJson(listJson);
}
notifyListeners();
return callRequestForWorkOrder;
} catch (error) {
print(error);
return null;
}
} }
Future<int> createDuplicatedReport ({ Future<List<SearchWorkOrder>> searchWorkOrders({@required String callId}) async {
Response response;
try {
var body = {
"pageSize": pageItemNumber,
"pageNumber": ((workOrders?.length ?? 0) ~/ pageItemNumber) + 1,
"callId": callId,
};
response = await ApiManager.instance.post(URLs.searchWorkOrders, body: body);
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List workOrdersJson = json.decode(response.body)["data"];
print(workOrdersJson);
workOrders = workOrdersJson.map<SearchWorkOrder>((request) => SearchWorkOrder.fromJson(request)).toList();
if (workOrders.length == pageItemNumber) {
nextPage = true;
} else {
nextPage = false;
}
}
return workOrders;
} catch (e) {
return [];
}
}
Future<int> createDuplicatedReport({
@required String host, @required String host,
@required User user, @required User user,
@required ServiceRequest request, @required ServiceRequest request,
}) async { }) async {
Response response; Response response;
String userData = ''; String userData = '';
if(user != null){ if (user != null) {
userData += "&uid="+user.id; userData += "&uid=" + user.id;
userData += "&token="+user.token; userData += "&token=" + user.token;
} }
try{ try {
response = await get( response = await get(
Uri.parse( Uri.parse(host + URLs.createDuplicatedReport + "?nid=${request.id}" + userData),
host+URLs.createDuplicatedReport
+"?nid=${request.id}"
+userData),
); );
stateCode = response.statusCode; stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
reset(); reset();
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
Future<int> updateServiceReport ({ Future<int> updateServiceReport({
@required String host,
@required User user,
@required ServiceReport report, @required ServiceReport report,
@required ServiceRequest request, String host,
User user,
ServiceRequest request,
}) async { }) async {
Response response; Response response;
Map<String,String> body = report.toMap(); //Map<String,dynamic> body = report.toMap(request);
body["uid"] = user.id; // body["uid"] = user.id;
body["token"] = user.token; // body["token"] = user.token;
body["job_id"] = request.id; // body["job_id"] = request.id;
body["report_id"] = request.reportID; // body["report_id"] = request.reportID;
try{ // try {
response = await post( Map<String, dynamic> body = report.toMap(request);
Uri.parse( // body["uid"] = user.id;
host+URLs.updateServiceReport), // body["token"] = user.token;
body: body, response = await ApiManager.instance.put(URLs.updateServiceReport, body: body);
); // response = await post(
stateCode = response.statusCode; // Uri.parse(
// host+URLs.updateServiceReport),
// body: body,
// );
// stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
reset();
notifyListeners();
}
return response.statusCode;
// } catch (error) {
// print(error);
// return -1;
// }
}
if(response.statusCode >= 200 && response.statusCode < 300) { Future<int> updateWorkOrderDetails({@required SearchWorkOrder workOrder}) async {
Response response;
//Map<String,dynamic> body = report.toMap(request);
// body["uid"] = user.id;
// body["token"] = user.token;
// body["job_id"] = request.id;
// body["report_id"] = request.reportID;
try {
Map<String, dynamic> body = workOrder.toJson();
// body["uid"] = user.id;
// body["token"] = user.token;
response = await ApiManager.instance.put(URLs.updateServiceReport, body: body);
// response = await post(
// Uri.parse(
// host+URLs.updateServiceReport),
// body: body,
// );
// stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
reset(); reset();
notifyListeners(); notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
Future<int> updateServiceReportTimer ({ Future<int> updateServiceReportTimer({
@required String host, @required String host,
@required User user, @required User user,
@required TimerModel timer, @required TimerModel timer,
@required ServiceRequest request, @required ServiceRequest request,
}) async { }) async {
Response response; Response response;
Map<String,String> body = {}; Map<String, dynamic> body = {};
body["uid"] = user.id; body["uid"] = user.id;
body["token"] = user.token; body["token"] = user.token;
body["job_id"] = request.id; body["job_id"] = request.id;
body["start_time"] = (timer.startAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0); body["start_time"] = (timer.startAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0);
body["end_time"] = (timer.endAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0); body["end_time"] = (timer.endAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0);
body["working_hours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5); body["working_hours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5);
body["report_id"] = request.reportID; body["report_id"] = request.reportID;
try{ try {
response = await post( response = await post(
Uri.parse( Uri.parse(host + URLs.updateServiceReport),
host+URLs.updateServiceReport),
body: body, body: body,
); );
//stateCode = response.statusCode; //stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// reset(); // reset();
// notifyListeners(); // notifyListeners();
} }
return response.statusCode; return response.statusCode;
} catch (error) {
} catch(error) {
return -1; return -1;
} }
} }
Future<ServiceReport> getSingleServiceReport({ Future<ServiceReport> getSingleServiceReport({
@required String reportId, @required int reportId,
@required String host, @required String host,
@required User user, @required User user,
@required Subtitle subtitle, @required Subtitle subtitle,
}) async { }) async {
String userData = ''; Response response;
if(user != null){ try {
userData += "&uid="+user.id; response = await ApiManager.instance.get(
userData += "&token="+user.token; URLs.getServiceReport + "?workOrderId=$reportId",
);
} catch (error) {
throw (HttpStatusManger.getStatusMessage(status: -1, subtitle: subtitle));
} }
Response response; // If the call to the server was successful, parse the JSON.
try{ if (response.statusCode >= 200 && response.statusCode < 300) {
// If the call to the server was successful, parse the JSON.
return ServiceReport.fromJson(json.decode(response.body)["data"], reportId);
} else {
throw (HttpStatusManger.getStatusMessage(status: response.statusCode, subtitle: subtitle));
}
}
response = await get( Future<Map<String, dynamic>> getServiceRequestById({@required String requestId}) async {
Uri.parse( Response response;
host+URLs.getServiceReport try {
+'?report_id=$reportId' response = await ApiManager.instance.get(
'$userData',) URLs.getServiceRequestById + "?callRequestId=$requestId",
); );
} catch (error) {
}catch(error){ print(error);
throw(HttpStatusManger.getStatusMessage( return {};
status: -1, subtitle: subtitle));
} }
// If the call to the server was successful, parse the JSON. // If the call to the server was successful, parse the JSON.
if (response.statusCode >= 200 && response.statusCode < 300){ if (response.statusCode >= 200 && response.statusCode < 300) {
// If the call to the server was successful, parse the JSON. // If the call to the server was successful, parse the JSON.
return ServiceReport.fromJson( return {
json.decode(utf8.decode(response.bodyBytes)),reportId); "callNo": json.decode(response.body)["data"]["callNo"],
}else{ "callCreatedBy": json.decode(response.body)["data"]["callCreatedBy"],
throw(HttpStatusManger.getStatusMessage( "callSiteContactPerson": json.decode(response.body)["data"]["callSiteContactPerson"],
status: response.statusCode, subtitle: subtitle)); "firstActionDate": json.decode(response.body)["data"]["firstActionDate"],
};
} else {
return {};
} }
} }
Future<List<SearchWorkOrder>> searchForWorkOrders(
} SearchWorkOrder search,
String callerId,
Lookup dateOperator,
String site,
) async {
Response response;
try {
var body = {
"pageSize": pageItemNumber,
"pageNumber": ((workOrders?.length ?? 0) ~/ pageItemNumber) + 1,
if (callerId?.isNotEmpty ?? false) "callId": callerId,
if (search.assetType != null) "assetSerialNo": search.assetType?.name,
if (search.workOrderNo != null) "workOrderNo": search.workOrderNo,
if (search.id != null) "workOrderNo": search.id?.toString(),
if (search.calllastSituation != null) "callslastSituationWO": search.calllastSituation.toMap(),
if (search.assignedEmployee != null)
"assignedEmployees": [
search.assignedEmployee.id,
],
// "statusWO": [],
if (site?.isNotEmpty ?? false) "site": site,
if (search.visitDate != null && dateOperator != null) "visitDateSymbol": dateOperator?.toMap(),
if (search.visitDate != null && dateOperator != null) "visitDateFrom": search.visitDate,
};
print(body);
response = await ApiManager.instance.post(URLs.searchWorkOrders, body: body);
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List workOrdersJson = json.decode(response.body)["data"];
print(workOrdersJson);
workOrders ??= [];
workOrders.addAll(workOrdersJson.map<SearchWorkOrder>((request) => SearchWorkOrder.fromJson(request)).toList());
if (workOrders.length == pageItemNumber) {
nextPage = true;
} else {
nextPage = false;
}
}
return workOrders;
} catch (e) {
print(e);
return [];
}
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class EmployeesProvider extends ChangeNotifier{ class AssignedToProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_items = null; _items = null;
_stateCode = null; _stateCode = null;
} }
@ -31,7 +31,7 @@ class EmployeesProvider extends ChangeNotifier{
// failed _loading = false // failed _loading = false
bool _loading; bool _loading;
bool get isLoading => _loading; bool get isLoading => _loading;
set isLoading(bool isLoading){ set isLoading(bool isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,34 +41,29 @@ class EmployeesProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getData ({String host,User user}) async { Future<int> getData({String host, User user}) async {
if(_loading == true) if (_loading == true) return -2;
return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await ApiManager.instance.get(
Uri.parse( URLs.getEmployees,
host + URLs.getEmployees),
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(response.body)["data"];
_items = categoriesListJson.map((type) => Lookup.fromJson(type)).toList(); _items = categoriesListJson.map((type) => Lookup.fromJson(type)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -0,0 +1,69 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/engineer.dart';
import 'package:test_sa/models/user.dart';
class EngineersProvider extends ChangeNotifier {
//reset provider data
void reset() {
_items = null;
_stateCode = null;
}
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int _stateCode;
int get stateCode => _stateCode;
// contain user data
// when user not login or register _user = null
List<Engineer> _items;
List<Engineer> get items => _items;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
/// return -2 if request in progress
/// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getData({String host, User user}) async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get(
URLs.getEngineers,
);
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body);
_items = categoriesListJson.map((type) => Engineer.fromJson(type)).toList();
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class GasCylinderSizesProvider extends ChangeNotifier{ class GasCylinderSizesProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_items = null; _items = null;
_loading = null; _loading = null;
_stateCode = null; _stateCode = null;
@ -32,7 +32,7 @@ class GasCylinderSizesProvider extends ChangeNotifier{
// failed _loading = false // failed _loading = false
bool _loading; bool _loading;
bool get isLoading => _loading; bool get isLoading => _loading;
set isLoading(bool isLoading){ set isLoading(bool isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -42,32 +42,32 @@ class GasCylinderSizesProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getData ({String host,User user,}) async { Future<int> getData({
if(_loading == true) String host,
return -2; User user,
}) async {
if (_loading == true) return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await ApiManager.instance.get(
Uri.parse(host + URLs.getGasCylinderSize), URLs.getGasCylinderSize,
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(response.body)["data"];
_items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); _items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -0,0 +1,73 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class GasCylinderTypesProvider extends ChangeNotifier {
//reset provider data
void reset() {
_items = null;
_loading = null;
_stateCode = null;
}
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int _stateCode;
int get stateCode => _stateCode;
// contain user data
// when user not login or register _user = null
List<Lookup> _items;
List<Lookup> get items => _items;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
/// return -2 if request in progress
/// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getData({
String host,
User user,
}) async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get(
URLs.getGasCylinderType,
);
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"];
_items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList();
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
}

@ -1,16 +1,16 @@
import 'dart:convert'; import 'dart:convert';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class GasStatusProvider extends ChangeNotifier{ class GasStatusProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_items = null; _items = null;
_loading = null; _loading = null;
_stateCode = null; _stateCode = null;
@ -32,7 +32,7 @@ class GasStatusProvider extends ChangeNotifier{
// failed _loading = false // failed _loading = false
bool _loading; bool _loading;
bool get isLoading => _loading; bool get isLoading => _loading;
set isLoading(bool isLoading){ set isLoading(bool isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -42,31 +42,32 @@ class GasStatusProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getData ({String host,User user,}) async { Future<int> getData({
if(_loading == true) return -2; String host,
User user,
}) async {
if (_loading == true) return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await ApiManager.instance.get(
Uri.parse(host + URLs.getGasStatus), URLs.getGasStatus,
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(response.body)["data"];
_items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); _items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -1,16 +1,16 @@
import 'dart:convert'; import 'dart:convert';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class GasTypesProvider extends ChangeNotifier{ class GasTypesProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_items = null; _items = null;
_loading = null; _loading = null;
_stateCode = null; _stateCode = null;
@ -32,7 +32,7 @@ class GasTypesProvider extends ChangeNotifier{
// failed _loading = false // failed _loading = false
bool _loading; bool _loading;
bool get isLoading => _loading; bool get isLoading => _loading;
set isLoading(bool isLoading){ set isLoading(bool isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -42,31 +42,32 @@ class GasTypesProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getData ({String host,User user,}) async { Future<int> getData({
if(_loading == true) return -2; String host,
User user,
}) async {
if (_loading == true) return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await ApiManager.instance.get(
Uri.parse(host + URLs.getGasTypes), URLs.getGasTypes,
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(response.body)["data"];
_items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); _items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class PentryStatusProvider extends ChangeNotifier{ class PentryStatusProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_items = null; _items = null;
_stateCode = null; _stateCode = null;
} }
@ -31,7 +31,7 @@ class PentryStatusProvider extends ChangeNotifier{
// failed _loading = false // failed _loading = false
bool _loading; bool _loading;
bool get isLoading => _loading; bool get isLoading => _loading;
set isLoading(bool isLoading){ set isLoading(bool isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,35 +41,30 @@ class PentryStatusProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getData ({String host,User user}) async { Future<int> getData({String host, User user}) async {
if(_loading == true) if (_loading == true) return -2;
return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await ApiManager.instance.get(
Uri.parse( URLs.getPentryStatus,
host + URLs.getPentryStatus),
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List listJson = json.decode(utf8.decode(response.bodyBytes)); List listJson = json.decode(response.body)["data"];
_items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList(); _items = listJson.map((type) => Lookup.fromJson(type)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class PentryTaskStatusProvider extends ChangeNotifier{ class PentryTaskStatusProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_items = null; _items = null;
_stateCode = null; _stateCode = null;
} }
@ -31,7 +31,7 @@ class PentryTaskStatusProvider extends ChangeNotifier{
// failed _loading = false // failed _loading = false
bool _loading; bool _loading;
bool get isLoading => _loading; bool get isLoading => _loading;
set isLoading(bool isLoading){ set isLoading(bool isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,35 +41,30 @@ class PentryTaskStatusProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getData ({String host,User user}) async { Future<int> getData({String host, User user}) async {
if(_loading == true) if (_loading == true) return -2;
return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await ApiManager.instance.get(
Uri.parse( URLs.getPentryTaskStatus,
host + URLs.getPentryTaskStatus),
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(response.body)["data"];
_items = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); _items = categoriesListJson.map((type) => Lookup.fromJson(type)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class PentryVisitStatusProvider extends ChangeNotifier{ class PentryVisitStatusProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_items = null; _items = null;
_stateCode = null; _stateCode = null;
} }
@ -31,7 +31,7 @@ class PentryVisitStatusProvider extends ChangeNotifier{
// failed _loading = false // failed _loading = false
bool _loading; bool _loading;
bool get isLoading => _loading; bool get isLoading => _loading;
set isLoading(bool isLoading){ set isLoading(bool isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,34 +41,30 @@ class PentryVisitStatusProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getData ({String host,User user}) async { Future<int> getData({String host, User user}) async {
if(_loading == true) if (_loading == true) return -2;
return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await ApiManager.instance.get(
Uri.parse( URLs.getPentryVisitStatus,
host + URLs.getPentryVisitStatus),
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List listJson = json.decode(utf8.decode(response.bodyBytes)); List listJson = json.decode(response.body)["data"];
_items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList(); _items = listJson.map((type) => Lookup.fromJson(type)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -0,0 +1,76 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/service_request/search_work_order.dart';
class ServiceReportAssistantsEmployeeProvider extends ChangeNotifier {
//reset provider data
void reset() {
_assistantEmployees = null;
_loading = null;
_stateCode = null;
}
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int _stateCode;
int get stateCode => _stateCode;
// contain user data
// when user not login or register _user = null
List<AssistantEmployees> _assistantEmployees;
List<AssistantEmployees> get assistantEmployees => _assistantEmployees;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
/// return -2 if request in progress
/// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getAssistantEmployees() async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get(
"${URLs.getEngineers}",
);
// response = await get(
// Uri.parse(
// URLs.getServiceReportLastCalls
// +(serviceStatus == null ? "" : "?service_status=$serviceStatus")
// ),
// );
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List usersListJson = json.decode(response.body);
_assistantEmployees = [];
_assistantEmployees = usersListJson.map((type) => AssistantEmployees.fromJson(type ?? {})).toList();
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class ServiceRequestDefectTypesProvider extends ChangeNotifier{ class ServiceRequestDefectTypesProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_items = null; _items = null;
_stateCode = null; _stateCode = null;
} }
@ -31,7 +31,7 @@ class ServiceRequestDefectTypesProvider extends ChangeNotifier{
// failed _loading = false // failed _loading = false
bool _loading; bool _loading;
bool get isLoading => _loading; bool get isLoading => _loading;
set isLoading(bool isLoading){ set isLoading(bool isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,35 +41,29 @@ class ServiceRequestDefectTypesProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getData ({String host,User user}) async { Future<int> getData({String host, User user}) async {
if(_loading == true) if (_loading == true) return -2;
return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await ApiManager.instance.get(
Uri.parse( URLs.getServiceReportDefectTypes,
host + URLs.getServiceReportDefectTypes),
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List listJson = json.decode(utf8.decode(response.bodyBytes)); List listJson = json.decode(response.body)["data"];
_items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList(); _items = listJson.map((type) => Lookup.fromJson(type)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -0,0 +1,72 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class ServiceReportEquipmentStatusProvider extends ChangeNotifier {
//reset provider data
void reset() {
_status = null;
_stateCode = null;
}
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int _stateCode;
int get stateCode => _stateCode;
// contain user data
// when user not login or register _user = null
List<Lookup> _status;
List<Lookup> get statuses => _status;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
/// return -2 if request in progress
/// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getTypes({String host, User user}) async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get(URLs.equipmentStatus);
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"];
_status = categoriesListJson.map((type) => Lookup.fromJson(type)).toList();
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
}

@ -0,0 +1,70 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/user.dart';
import '../../../../../models/fault_description.dart';
class ServiceRequestFaultDescriptionProvider extends ChangeNotifier {
//reset provider data
void reset() {
_items = null;
_stateCode = null;
}
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int _stateCode;
int get stateCode => _stateCode;
// contain user data
// when user not login or register _user = null
List<FaultDescription> _items;
List<FaultDescription> get items => _items;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
/// return -2 if request in progress
/// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getCallRequestForWorkOrder({String host, User user, String requestId}) async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get(
URLs.getCallRequestForWorkOrder + "?callId=$requestId",
);
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List listJson = json.decode(response.body)["data"]['asset']['modelDefinition']['modelDefRelatedDefects'];
_items = listJson?.map((type) => FaultDescription.fromJson(type))?.toList() ?? [];
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class ServiceReportLastCallsProvider extends ChangeNotifier{ class ServiceReportLastCallsProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_calls = null; _calls = null;
_loading = null; _loading = null;
_stateCode = null; _stateCode = null;
@ -32,7 +32,7 @@ class ServiceReportLastCallsProvider extends ChangeNotifier{
// failed _loading = false // failed _loading = false
bool _loading; bool _loading;
bool get isLoading => _loading; bool get isLoading => _loading;
set isLoading(bool isLoading){ set isLoading(bool isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -42,35 +42,43 @@ class ServiceReportLastCallsProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getCalls ({String host,User user,String serviceStatus}) async { Future<int> getCalls({
if(_loading == true) String host,
return -2; User user,
int serviceStatus,
String woId,
int id,
String typeName,
}) async {
if (_loading == true) return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( // todo request new api from backend to make filter work
Uri.parse( response = await ApiManager.instance.get(
host + URLs.getServiceReportLastCalls "${URLs.getServiceReportLastCalls}?parentWOId=${woId ?? id}&isAdd=true&id=${id ?? 0}&typeTransaction=$typeName",
+(serviceStatus == null ? "" : "?service_status=$serviceStatus")
),
); );
// response = await get(
// Uri.parse(
// URLs.getServiceReportLastCalls
// +(serviceStatus == null ? "" : "?service_status=$serviceStatus")
// ),
// );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(response.body)["data"];
_calls = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); _calls = categoriesListJson.map((type) => Lookup.fromJson(type)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -0,0 +1,75 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
class ServiceReportMaintenanceSituationProvider extends ChangeNotifier {
//reset provider data
void reset() {
_calls = null;
_loading = null;
_stateCode = null;
}
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int _stateCode;
int get stateCode => _stateCode;
// contain user data
// when user not login or register _user = null
List<Lookup> _calls;
List<Lookup> get operators => _calls;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
/// return -2 if request in progress
/// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getOperators(String woId) async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get(
woId == null ? "${URLs.getMaintenanceSituation}" : "${URLs.getServiceReportLastCalls}?parentWOId=$woId&isAdd=true&id=${0}&typeTransaction='Nothing'",
);
// response = await get(
// Uri.parse(
// URLs.getServiceReportLastCalls
// +(serviceStatus == null ? "" : "?service_status=$serviceStatus")
// ),
// );
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"];
_calls = categoriesListJson.map((type) => Lookup.fromJson(type)).toList();
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class ServiceRequestPriorityProvider extends ChangeNotifier{ class ServiceRequestPriorityProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_items = null; _items = null;
_stateCode = null; _stateCode = null;
} }
@ -31,7 +31,7 @@ class ServiceRequestPriorityProvider extends ChangeNotifier{
// failed _loading = false // failed _loading = false
bool _loading; bool _loading;
bool get isLoading => _loading; bool get isLoading => _loading;
set isLoading(bool isLoading){ set isLoading(bool isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,34 +41,30 @@ class ServiceRequestPriorityProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getData ({String host,User user}) async { Future<int> getData({String host, User user}) async {
if(_loading == true) if (_loading == true) return -2;
return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await ApiManager.instance.get(
Uri.parse( URLs.getServiceReportPriority,
host + URLs.getServiceReportPriority),
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List listJson = json.decode(utf8.decode(response.bodyBytes)); List listJson = json.decode(response.body)["data"];
_items = listJson.map((type) => Lookup.fromIntIdJson(type)).toList(); _items = listJson.map((type) => Lookup.fromJson(type)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class ServiceReportReasonsProvider extends ChangeNotifier{ class ServiceReportReasonsProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_reasons = null; _reasons = null;
_stateCode = null; _stateCode = null;
} }
@ -31,7 +31,7 @@ class ServiceReportReasonsProvider extends ChangeNotifier{
// failed _loading = false // failed _loading = false
bool _loading; bool _loading;
bool get isLoading => _loading; bool get isLoading => _loading;
set isLoading(bool isLoading){ set isLoading(bool isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,33 +41,29 @@ class ServiceReportReasonsProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getTypes ({String host,User user}) async { Future<int> getTypes({String host, User user}) async {
if(_loading == true) if (_loading == true) return -2;
return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await ApiManager.instance.get(
Uri.parse( URLs.getServiceReportReasons,
host + URLs.getServiceReportReasons),
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(response.body)["data"];
_reasons = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); _reasons = categoriesListJson.map((type) => Lookup.fromJson(type)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -0,0 +1,69 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class ServiceReportRepairLocationProvider extends ChangeNotifier {
//reset provider data
void reset() {
_reasons = null;
_stateCode = null;
}
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int _stateCode;
int get stateCode => _stateCode;
// contain user data
// when user not login or register _user = null
List<Lookup> _reasons;
List<Lookup> get reasons => _reasons;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
/// return -2 if request in progress
/// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getTypes({String host, User user}) async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get(
URLs.getRepairLocation,
);
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"];
_reasons = categoriesListJson.map((type) => Lookup.fromJson(type)).toList();
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class ServiceReportStatusProvider extends ChangeNotifier{ class ServiceReportStatusProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_status = null; _status = null;
_stateCode = null; _stateCode = null;
} }
@ -31,7 +31,7 @@ class ServiceReportStatusProvider extends ChangeNotifier{
// failed _loading = false // failed _loading = false
bool _loading; bool _loading;
bool get isLoading => _loading; bool get isLoading => _loading;
set isLoading(bool isLoading){ set isLoading(bool isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,34 +41,30 @@ class ServiceReportStatusProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getTypes ({String host,User user}) async { Future<int> getTypes({String host, User user}) async {
if(_loading == true) if (_loading == true) return -2;
return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await get( response = await ApiManager.instance.get(
Uri.parse( URLs.getServiceReportStatus,
host + URLs.getServiceReportStatus),
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(response.body)["data"];
_status = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); _status = categoriesListJson.map((type) => Lookup.fromJson(type)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class ServiceReportTypesProvider extends ChangeNotifier{ class ServiceReportTypesProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_types = null; _types = null;
_stateCode = null; _stateCode = null;
} }
@ -31,7 +31,7 @@ class ServiceReportTypesProvider extends ChangeNotifier{
// failed _loading = false // failed _loading = false
bool _loading; bool _loading;
bool get isLoading => _loading; bool get isLoading => _loading;
set isLoading(bool isLoading){ set isLoading(bool isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,34 +41,29 @@ class ServiceReportTypesProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getTypes ({String host,User user}) async { Future<int> getTypes({String host, User user}) async {
if(_loading == true) if (_loading == true) return -2;
return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await ApiManager.instance.get(
response = await get( URLs.getServiceReportTypes,
Uri.parse(
host + URLs.getServiceReportTypes),
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(response.body)["data"];
_types = categoriesListJson.map((type) => Lookup.fromIntIdJson(type)).toList(); _types = categoriesListJson.map((type) => Lookup.fromJson(type)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -0,0 +1,75 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/engineer.dart';
class ServiceReportUsersProvider extends ChangeNotifier {
//reset provider data
void reset() {
_engineers = null;
_loading = null;
_stateCode = null;
}
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int _stateCode;
int get stateCode => _stateCode;
// contain user data
// when user not login or register _user = null
List<Engineer> _engineers;
List<Engineer> get engineers => _engineers;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
/// return -2 if request in progress
/// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getAllUsers() async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get(
"${URLs.getAllUsers}",
);
// response = await get(
// Uri.parse(
// URLs.getServiceReportLastCalls
// +(serviceStatus == null ? "" : "?service_status=$serviceStatus")
// ),
// );
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List usersListJson = json.decode(response.body);
_engineers = usersListJson.map((type) => Engineer.fromJson(type)).toList();
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
}

@ -0,0 +1,75 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
class ServiceReportVisitOperatorProvider extends ChangeNotifier {
//reset provider data
void reset() {
_calls = null;
_loading = null;
_stateCode = null;
}
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int _stateCode;
int get stateCode => _stateCode;
// contain user data
// when user not login or register _user = null
List<Lookup> _calls;
List<Lookup> get operators => _calls;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
/// return -2 if request in progress
/// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getOperators() async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get(
"${URLs.getDateOperators}",
);
// response = await get(
// Uri.parse(
// URLs.getServiceReportLastCalls
// +(serviceStatus == null ? "" : "?service_status=$serviceStatus")
// ),
// );
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"];
_calls = categoriesListJson.map((type) => Lookup.fromJson(type)).toList();
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
}

@ -3,14 +3,14 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
class ServiceStatusProvider extends ChangeNotifier{ class ServiceStatusProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_statuses = null; _statuses = null;
_stateCode = null; _stateCode = null;
} }
@ -31,7 +31,7 @@ class ServiceStatusProvider extends ChangeNotifier{
// failed _loading = false // failed _loading = false
bool _loading; bool _loading;
bool get isLoading => _loading; bool get isLoading => _loading;
set isLoading(bool isLoading){ set isLoading(bool isLoading) {
_loading = isLoading; _loading = isLoading;
notifyListeners(); notifyListeners();
} }
@ -41,35 +41,29 @@ class ServiceStatusProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getTypes ({String host,User user}) async { Future<int> getTypes({String host, User user}) async {
if(_loading == true) if (_loading == true) return -2;
return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await ApiManager.instance.get(
response = await get( URLs.getAssetTypes,
Uri.parse(
host + URLs.getServiceTypes),
); );
_stateCode = response.statusCode; _stateCode = response.statusCode;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(response.body)["data"];
_statuses = categoriesListJson.map((e) => Lookup.fromIntIdJson(e)).toList(); _statuses = categoriesListJson.map((e) => Lookup.fromJson(e)).toList();
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
_loading = false; _loading = false;
_stateCode = -1; _stateCode = -1;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
} }
}
}

@ -0,0 +1,69 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class ServiceFirstActionProvider extends ChangeNotifier {
//reset provider data
void reset() {
_statuses = null;
_stateCode = null;
}
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int _stateCode;
int get stateCode => _stateCode;
// contain user data
// when user not login or register _user = null
List<Lookup> _statuses;
List<Lookup> get items => _statuses;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
/// return -2 if request in progress
/// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getData({String host, User user}) async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get(
URLs.getServiceFirstAction,
);
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"];
_statuses = categoriesListJson.map((e) => Lookup.fromJson(e)).toList();
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
}

@ -0,0 +1,69 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class ServiceLoanAvailabilityProvider extends ChangeNotifier {
//reset provider data
void reset() {
_statuses = null;
_stateCode = null;
}
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int _stateCode;
int get stateCode => _stateCode;
// contain user data
// when user not login or register _user = null
List<Lookup> _statuses;
List<Lookup> get items => _statuses;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
/// return -2 if request in progress
/// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getData({String host, User user}) async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get(
URLs.getServiceLoanAvailability,
);
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"];
_statuses = categoriesListJson.map((e) => Lookup.fromJson(e)).toList();
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
}

@ -0,0 +1,69 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class ServiceRequestStatusProvider extends ChangeNotifier {
//reset provider data
void reset() {
_statuses = null;
_stateCode = null;
}
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int _stateCode;
int get stateCode => _stateCode;
// contain user data
// when user not login or register _user = null
List<Lookup> _statuses;
List<Lookup> get items => _statuses;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
/// return -2 if request in progress
/// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getData({String host, User user}) async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get(
URLs.getServiceRequestStatus,
);
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"];
_statuses = categoriesListJson.map((e) => Lookup.fromJson(e)).toList();
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
}

@ -0,0 +1,73 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class ServiceRequestedThroughProvider extends ChangeNotifier {
//reset provider data
void reset() {
_statuses = null;
_stateCode = null;
}
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int _stateCode;
int get stateCode => _stateCode;
// contain user data
// when user not login or register _user = null
List<Lookup> _statuses;
List<Lookup> get items => _statuses;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
/// return -2 if request in progress
/// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getData({String host, User user}) async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get(
URLs.getServiceRequestThrough,
);
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"];
_statuses = categoriesListJson.map((e) => Lookup.fromJson(e)).toList();
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
Lookup getDefaultItem() {
return items?.firstWhere((element) => element.name.toLowerCase().contains("app"));
}
}

@ -0,0 +1,73 @@
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class ServiceRequestTypeProvider extends ChangeNotifier {
//reset provider data
void reset() {
_statuses = null;
_stateCode = null;
}
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int _stateCode;
int get stateCode => _stateCode;
// contain user data
// when user not login or register _user = null
List<Lookup> _statuses;
List<Lookup> get items => _statuses;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
bool get isLoading => _loading;
set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
/// return -2 if request in progress
/// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getData({String host, User user}) async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
response = await ApiManager.instance.get(
URLs.getServiceRequestTypes,
);
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(response.body)["data"];
_statuses = categoriesListJson.map((e) => Lookup.fromJson(e)).toList();
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
Lookup getDefaultItem() {
return items?.firstWhere((element) => element.name.toLowerCase().contains("maintenance"));
}
}

@ -1,15 +1,16 @@
import 'dart:convert'; import 'dart:convert';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/user.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/user.dart';
class UserProvider extends ChangeNotifier{ class UserProvider extends ChangeNotifier {
//reset provider data //reset provider data
void reset(){ void reset() {
_user = null; _user = null;
ApiManager.instance.user = user;
_loading = false; _loading = false;
} }
@ -19,10 +20,10 @@ class UserProvider extends ChangeNotifier{
User get user => _user; User get user => _user;
set user(User user) { set user(User user) {
_user = user; _user = user;
ApiManager.instance.user = user;
notifyListeners(); notifyListeners();
} }
// when login or register in-process _login = true // when login or register in-process _login = true
// when login or register is done or not start = false // when login or register is done or not start = false
bool _loading = false; bool _loading = false;
@ -38,32 +39,31 @@ class UserProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager /// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> login ({ Future<int> login({
@required String host, @required String host,
@required User user, @required User user,
}) async { }) async {
if(_loading == true) if (_loading == true) return -2;
return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await post( response = await ApiManager.instance.post(
Uri.parse( URLs.login,
host+URLs.login),
body: await user.toLoginJson(), body: await user.toLoginJson(),
); );
_loading = false; _loading = false;
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
_user = User.fromJson(jsonDecode(utf8.decode(response.bodyBytes))[0]); _user = User.fromJson(jsonDecode(response.body));
ApiManager.instance.user = _user;
notifyListeners();
return response.statusCode; return response.statusCode;
} }
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} catch(error) { } catch (error) {
print(error);
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return -1; return -1;
@ -76,32 +76,31 @@ class UserProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details about state codes check http state manager /// for more details about state codes check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> register ({ Future<int> register({
@required String host, @required String host,
@required User user, @required User user,
}) async { }) async {
if(_loading == true) if (_loading == true) return -2;
return -2;
_loading = true; _loading = true;
notifyListeners(); notifyListeners();
Response response; Response response;
try{ try {
response = await post( response = await ApiManager.instance.post(
Uri.parse( URLs.register,
host+URLs.register), body: await user.toLoginJson(),
body: await user.toRegisterJson()
); );
} catch(error) { } catch (error) {
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
return -1; return -1;
} }
_loading = false; _loading = false;
notifyListeners(); notifyListeners();
if(response.statusCode >= 200 && response.statusCode < 300) { if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received // client's request was successfully received
_user = User.fromJson(jsonDecode(utf8.decode(response.bodyBytes))[0]); _user = User.fromJson(jsonDecode(utf8.decode(response.bodyBytes))[0]);
_user.hospital = user.hospital; _user.clientId = user.clientId;
_user.clientName = user.clientName;
notifyListeners(); notifyListeners();
return response.statusCode; return response.statusCode;
} }
@ -114,49 +113,45 @@ class UserProvider extends ChangeNotifier{
/// return state code if request complete may be 200, 404 or 403 /// return state code if request complete may be 200, 404 or 403
/// for more details about state codes check http state manager /// for more details about state codes check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart /// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> updateProfile ({ // Future<int> updateProfile({
@required String host, // @required String host,
@required User user, // @required User user,
}) async { // }) async {
if(_loading == true) // if (_loading == true) return -2;
return -2; // _loading = true;
_loading = true; // notifyListeners();
notifyListeners(); // Response response;
Response response; //
// Map<String, dynamic> jsonObject = {};
Map<String,dynamic> jsonObject ={}; // jsonObject["uid"] = user.id;
jsonObject["uid"] = user.id; // jsonObject["token"] = user.token;
jsonObject["token"] = user.token; // if (user.departmentId != _user.departmentId) jsonObject["department"] = user.departmentId;
if(user.department.id != _user.department.id) // // if (user.whatsApp != _user.whatsApp) jsonObject["whatsapp"] = user.whatsApp;
jsonObject["department"] = user.department.id; // if (user.phoneNumber != _user.phoneNumber) jsonObject["phone"] = user.phoneNumber;
if(user.whatsApp != _user.whatsApp) // try {
jsonObject["whatsapp"] = user.whatsApp; // response = response = await ApiManager.instance.post(
if(user.phoneNumber != _user.phoneNumber) // URLs.login,
jsonObject["phone"] = user.phoneNumber; // body: jsonObject,
try{ // );
response = await post( // } catch (error) {
Uri.parse( // _loading = false;
host+URLs.updateProfile), // notifyListeners();
body: jsonObject // return -1;
); // }
} catch(error) { //
_loading = false; // _loading = false;
notifyListeners(); // notifyListeners();
return -1; //
} // if (response.statusCode >= 200 && response.statusCode < 300) {
// // client's request was successfully received
_loading = false; // _user = User.fromJson(jsonDecode(utf8.decode(response.bodyBytes))[0]);
notifyListeners(); // _user.clientId = user.clientId;
// _user.clientName = user.clientName;
if(response.statusCode >= 200 && response.statusCode < 300) { // _user.departmentName = user.departmentName;
// client's request was successfully received // _user.departmentId = user.departmentId;
_user = User.fromJson(jsonDecode(utf8.decode(response.bodyBytes))[0]); // notifyListeners();
_user.hospital = user.hospital; // return response.statusCode;
_user.department = user.department; // }
notifyListeners(); // return response.statusCode;
return response.statusCode; // }
} }
return response.statusCode;
}
}

@ -3,4 +3,4 @@ class ASettings {
static final String host = "host"; static final String host = "host";
static final String language = "language"; static final String language = "language";
static final String speechToText = "speech_to_text"; static final String speechToText = "speech_to_text";
} }

@ -1,15 +1,14 @@
import 'dart:async'; import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/user.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import '../settings/app_settings.dart'; import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/user.dart';
class SettingProvider extends ChangeNotifier{ import '../settings/app_settings.dart';
class SettingProvider extends ChangeNotifier {
resetSettings() async { resetSettings() async {
SharedPreferences prefs = await SharedPreferences.getInstance(); SharedPreferences prefs = await SharedPreferences.getInstance();
user = null; user = null;
@ -58,40 +57,38 @@ class SettingProvider extends ChangeNotifier{
} }
// call loadSharedPreferences when provider initialise // call loadSharedPreferences when provider initialise
SettingProvider(){ SettingProvider() {
loadSharedPreferences(); loadSharedPreferences();
} }
// get app setting // get app setting
Future<void> loadSharedPreferences() async { Future<void> loadSharedPreferences() async {
SharedPreferences prefs = await SharedPreferences.getInstance(); SharedPreferences prefs = await SharedPreferences.getInstance();
if(prefs.containsKey(ASettings.language)){ if (prefs.containsKey(ASettings.language)) {
_language = prefs.getString(ASettings.language); _language = prefs.getString(ASettings.language);
}else{ } else {
_language = 'en'; _language = 'en';
} }
if(prefs.containsKey(ASettings.speechToText)){ if (prefs.containsKey(ASettings.speechToText)) {
_speechToText = prefs.getString(ASettings.speechToText); _speechToText = prefs.getString(ASettings.speechToText);
}else{ } else {
_speechToText = 'ar'; _speechToText = 'ar';
} }
if(prefs.containsKey(ASettings.user)){ if (prefs.containsKey(ASettings.user)) {
String userJson = prefs.getString(ASettings.user); String userJson = prefs.getString(ASettings.user);
user = User.fromJson(json.decode(userJson)); user = User.fromJson(json.decode(userJson));
} }
if(prefs.containsKey(ASettings.host)){ if (prefs.containsKey(ASettings.host)) {
_host = prefs.getString(ASettings.host); _host = prefs.getString(ASettings.host);
} else{ } else {
_host = URLs.host1; _host = URLs.host1;
} }
isLoaded = true; isLoaded = true;
notifyListeners(); notifyListeners();
} }
}
}

@ -1,24 +1,22 @@
class Validator{ class Validator {
// private constructor to avoid create class object // private constructor to avoid create class object
Validator._(); Validator._();
// check if string not empty and has value // check if string not empty and has value
static bool hasValue(String string){ static bool hasValue(String string) {
if (string == null || string.isEmpty) if (string == null || string.isEmpty) return false;
return false;
return true; return true;
} }
// Return true if email is valid. Otherwise, return false // Return true if email is valid. Otherwise, return false
static bool isEmail(String email){ static bool isEmail(String email) {
RegExp exp = new RegExp(r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+"); RegExp exp = new RegExp(r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+");
if(exp.hasMatch(email)) if (exp.hasMatch(email)) return true;
return true;
return false; return false;
} }
// Return true if phone number is valid. Otherwise, return false // Return true if phone number is valid. Otherwise, return false
static bool isPhoneNumber(String phoneNumber){ static bool isPhoneNumber(String phoneNumber) {
if (phoneNumber == null || phoneNumber.isEmpty) { if (phoneNumber == null || phoneNumber.isEmpty) {
return false; return false;
} }
@ -26,17 +24,14 @@ class Validator{
final pattern = r'^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$'; final pattern = r'^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$';
final regExp = RegExp(pattern); final regExp = RegExp(pattern);
if (regExp.hasMatch(phoneNumber)) if (regExp.hasMatch(phoneNumber)) return true;
return true;
return false; return false;
} }
// Return true if password is valid. Otherwise, return false // Return true if password is valid. Otherwise, return false
static bool isValidPassword(String password){ static bool isValidPassword(String password) {
if(password == null) if (password == null) return false;
return false; if (password.length < 6) return false;
if(password.length <6)
return false;
return true; return true;
} }
@ -55,4 +50,4 @@ class Validator{
} }
return int.tryParse(value) != null; return int.tryParse(value) != null;
} }
} }

@ -1,4 +1,3 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';

@ -1,5 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
extension WidgetExtensions on Widget { extension WidgetExtensions on Widget {
Widget onPress(VoidCallback onTap) => InkWell(onTap: onTap, child: this); Widget onPress(VoidCallback onTap) => InkWell(onTap: onTap, child: this);

@ -13,18 +13,31 @@ import 'package:test_sa/controllers/providers/api/hospitals_provider.dart';
import 'package:test_sa/controllers/providers/api/notifications_provider.dart'; import 'package:test_sa/controllers/providers/api/notifications_provider.dart';
import 'package:test_sa/controllers/providers/api/regular_visits_provider.dart'; import 'package:test_sa/controllers/providers/api/regular_visits_provider.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/employee/employee_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/employee/assigned_to_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/employee/engineers_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_equipment_status_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_maintenance_situation_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_users_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_visit_date_operator_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_first_action_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_loan_availability_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_status_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqest/service_request_type_provider.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/pages/login.dart'; import 'package:test_sa/views/pages/login.dart';
import 'package:test_sa/views/pages/register.dart'; import 'package:test_sa/views/pages/register.dart';
import 'package:test_sa/views/pages/splash_screen.dart'; import 'package:test_sa/views/pages/splash_screen.dart';
import 'package:test_sa/views/pages/sub_workorder/create_sub_workorder_page.dart';
import 'package:test_sa/views/pages/sub_workorder/search_sub_workorder_page.dart';
import 'package:test_sa/views/pages/user/gas_refill/request_gas_refill.dart'; import 'package:test_sa/views/pages/user/gas_refill/request_gas_refill.dart';
import 'package:test_sa/views/pages/user/gas_refill/track_gas_refill.dart'; import 'package:test_sa/views/pages/user/gas_refill/track_gas_refill.dart';
import 'package:test_sa/views/pages/user/land_page.dart'; import 'package:test_sa/views/pages/user/land_page.dart';
@ -42,8 +55,11 @@ import 'package:test_sa/views/widgets/equipment/single_device_picker.dart';
import 'controllers/providers/api/parts_provider.dart'; import 'controllers/providers/api/parts_provider.dart';
import 'controllers/providers/api/preventive_maintenance_visits_provider.dart'; import 'controllers/providers/api/preventive_maintenance_visits_provider.dart';
import 'controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart'; import 'controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_report_assistants_employee_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_report_fault_description_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart'; import 'controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart'; import 'controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_report_repair_location_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_report_status_provider.dart'; import 'controllers/providers/api/status_drop_down/report/service_report_status_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_report_types_provider.dart'; import 'controllers/providers/api/status_drop_down/report/service_report_types_provider.dart';
import 'controllers/providers/api/status_drop_down/report/service_types_provider.dart'; import 'controllers/providers/api/status_drop_down/report/service_types_provider.dart';
@ -57,17 +73,16 @@ void main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
if (Platform.isIOS) { if (Platform.isIOS) {
await Firebase.initializeApp( await Firebase.initializeApp(
options: const FirebaseOptions(apiKey: "AIzaSyACQkSleNwU1jzEKR5ho1uSfZERokwwAbc", appId: "1:973582662416:ios:bc4a8061444c6a08fbc395", messagingSenderId: "973582662416", projectId: "atoms-fb912"), options:
const FirebaseOptions(apiKey: "AIzaSyACQkSleNwU1jzEKR5ho1uSfZERokwwAbc", appId: "1:973582662416:ios:bc4a8061444c6a08fbc395", messagingSenderId: "973582662416", projectId: "atoms-fb912"),
); );
} else { } else {
await Firebase.initializeApp(); await Firebase.initializeApp();
} }
runApp( runApp(ChangeNotifierProvider(
ChangeNotifierProvider( create: (_) => SettingProvider(),
create: (_) => SettingProvider(), child: MyApp(),
child: MyApp(), ));
)
);
} }
class MyApp extends StatelessWidget { class MyApp extends StatelessWidget {
@ -88,20 +103,34 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => PartsProvider()), ChangeNotifierProvider(create: (_) => PartsProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportReasonsProvider()), ChangeNotifierProvider(create: (_) => ServiceReportReasonsProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportStatusProvider()), ChangeNotifierProvider(create: (_) => ServiceReportStatusProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportEquipmentStatusProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportTypesProvider()), ChangeNotifierProvider(create: (_) => ServiceReportTypesProvider()),
ChangeNotifierProvider(create: (_) => ServiceStatusProvider()), ChangeNotifierProvider(create: (_) => ServiceStatusProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportLastCallsProvider()), ChangeNotifierProvider(create: (_) => ServiceReportLastCallsProvider()),
ChangeNotifierProvider(create: (_) => GasCylinderSizesProvider()), ChangeNotifierProvider(create: (_) => GasCylinderSizesProvider()),
ChangeNotifierProvider(create: (_) => GasCylinderTypesProvider()),
ChangeNotifierProvider(create: (_) => GasStatusProvider()), ChangeNotifierProvider(create: (_) => GasStatusProvider()),
ChangeNotifierProvider(create: (_) => GasTypesProvider()), ChangeNotifierProvider(create: (_) => GasTypesProvider()),
ChangeNotifierProvider(create: (_) => GasRefillProvider()), ChangeNotifierProvider(create: (_) => GasRefillProvider()),
ChangeNotifierProvider(create: (_) => DeviceTransferProvider()), ChangeNotifierProvider(create: (_) => DeviceTransferProvider()),
ChangeNotifierProvider(create: (_) => EmployeesProvider()), ChangeNotifierProvider(create: (_) => AssignedToProvider()),
ChangeNotifierProvider(create: (_) => PentryTaskStatusProvider()), ChangeNotifierProvider(create: (_) => PentryTaskStatusProvider()),
ChangeNotifierProvider(create: (_) => PentryVisitStatusProvider()), ChangeNotifierProvider(create: (_) => PentryVisitStatusProvider()),
ChangeNotifierProvider(create: (_) => PentryStatusProvider()), ChangeNotifierProvider(create: (_) => PentryStatusProvider()),
ChangeNotifierProvider(create: (_) => ServiceRequestPriorityProvider()), ChangeNotifierProvider(create: (_) => ServiceRequestPriorityProvider()),
ChangeNotifierProvider(create: (_) => ServiceRequestDefectTypesProvider()), ChangeNotifierProvider(create: (_) => ServiceRequestDefectTypesProvider()),
ChangeNotifierProvider(create: (_) => ServiceRequestTypeProvider()),
ChangeNotifierProvider(create: (_) => ServiceRequestedThroughProvider()),
ChangeNotifierProvider(create: (_) => ServiceRequestStatusProvider()),
ChangeNotifierProvider(create: (_) => EngineersProvider()),
ChangeNotifierProvider(create: (_) => ServiceLoanAvailabilityProvider()),
ChangeNotifierProvider(create: (_) => ServiceFirstActionProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportRepairLocationProvider()),
ChangeNotifierProvider(create: (_) => ServiceRequestFaultDescriptionProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportVisitOperatorProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportMaintenanceSituationProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportUsersProvider()),
ChangeNotifierProvider(create: (_) => ServiceReportAssistantsEmployeeProvider()),
], ],
child: GestureDetector( child: GestureDetector(
onTap: () { onTap: () {
@ -114,18 +143,12 @@ class MyApp extends StatelessWidget {
title: 'ATOMS', title: 'ATOMS',
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
theme: ThemeData( theme: ThemeData(
fontFamily: "Poppins", fontFamily: "Poppins",
//canvasColor: AColors.primaryColor, //canvasColor: AColors.primaryColor,
scaffoldBackgroundColor: AColors.scaffoldBackgroundColor, scaffoldBackgroundColor: AColors.scaffoldBackgroundColor,
primaryColor: AColors.primaryColor, primaryColor: AColors.primaryColor,
indicatorColor: AColors.primaryColor, indicatorColor: AColors.primaryColor,
colorScheme: const ColorScheme.light( colorScheme: const ColorScheme.light(primary: AColors.primaryColor, onPrimary: Colors.white, secondary: AColors.secondaryColor, onSecondary: Colors.white)),
primary: AColors.primaryColor,
onPrimary: Colors.white,
secondary: AColors.secondaryColor,
onSecondary: Colors.white
)
),
localizationsDelegates: const [ localizationsDelegates: const [
// ... app-specific localization delegate[s] here // ... app-specific localization delegate[s] here
AppLocalization.delegate, AppLocalization.delegate,
@ -140,31 +163,30 @@ class MyApp extends StatelessWidget {
locale: Locale(_settingProvider.language ?? 'en'), locale: Locale(_settingProvider.language ?? 'en'),
initialRoute: SplashScreen.id, initialRoute: SplashScreen.id,
routes: { routes: {
SplashScreen.id: (_)=> const SplashScreen(), SplashScreen.id: (_) => const SplashScreen(),
LandPage.id: (_)=> const LandPage(), LandPage.id: (_) => const LandPage(),
Login.id: (_)=> Login(), Login.id: (_) => Login(),
Register.id: (_)=> Register(), Register.id: (_) => Register(),
ProfilePage.id: (_)=> ProfilePage(), ProfilePage.id: (_) => ProfilePage(),
ReportIssuesPage.id: (_)=> const ReportIssuesPage(), ReportIssuesPage.id: (_) => const ReportIssuesPage(),
RequestGasRefill.id: (_)=> const RequestGasRefill(), RequestGasRefill.id: (_) => const RequestGasRefill(),
CreateRequestPage.id: (_)=> CreateRequestPage(), CreateRequestPage.id: (_) => const CreateRequestPage(),
SingleHospitalPicker.id: (_)=> SingleHospitalPicker(), SingleHospitalPicker.id: (_) => SingleHospitalPicker(),
SingleDevicePicker.id: (_)=> SingleDevicePicker(), SingleDevicePicker.id: (_) => SingleDevicePicker(),
SingleDepartmentPicker.id: (_)=> SingleDepartmentPicker(), SingleDepartmentPicker.id: (_) => SingleDepartmentPicker(),
ServiceRequestsPage.id: (_)=> ServiceRequestsPage(), ServiceRequestsPage.id: (_) => ServiceRequestsPage(),
NotificationsPage.id: (_)=> NotificationsPage(), NotificationsPage.id: (_) => NotificationsPage(),
FutureRequestServiceDetails.id: (_)=> FutureRequestServiceDetails(), FutureRequestServiceDetails.id: (_) => FutureRequestServiceDetails(),
PreventiveMaintenanceVisitsPage.id: (_)=> PreventiveMaintenanceVisitsPage(), PreventiveMaintenanceVisitsPage.id: (_) => PreventiveMaintenanceVisitsPage(),
RegularVisitsPage.id: (_)=> RegularVisitsPage(), RegularVisitsPage.id: (_) => RegularVisitsPage(),
TrackGasRefillPage.id: (_)=> const TrackGasRefillPage(), TrackGasRefillPage.id: (_) => const TrackGasRefillPage(),
RequestDeviceTransfer.id: (_)=> const RequestDeviceTransfer(), RequestDeviceTransfer.id: (_) => const RequestDeviceTransfer(),
TrackDeviceTransferPage.id: (_)=> const TrackDeviceTransferPage(), TrackDeviceTransferPage.id: (_) => const TrackDeviceTransferPage(),
SearchSubWorkOrderPage.id: (_) => const SearchSubWorkOrderPage(),
CreateSubWorkOrderPage.id: (_) => const CreateSubWorkOrderPage(),
}, },
), ),
), ),
); );
} }
} }

@ -1,6 +1,6 @@
import 'package:test_sa/views/pages/user/requests/future_request_service_details.dart'; import 'package:test_sa/views/pages/user/requests/future_request_service_details.dart';
class AppNotification{ class AppNotification {
String requestId; String requestId;
String title; String title;
String description; String description;
@ -15,13 +15,12 @@ class AppNotification{
this.path, this.path,
}); });
factory AppNotification.fromJson(Map<String,dynamic> parsedJson){ factory AppNotification.fromJson(Map<String, dynamic> parsedJson) {
return AppNotification( return AppNotification(
requestId: parsedJson["nid"], requestId: parsedJson["nid"],
title: parsedJson["call_client"] ?? parsedJson["title"], title: parsedJson["call_client"] ?? parsedJson["title"],
description: parsedJson["task_description"], description: parsedJson["task_description"],
date: parsedJson["creation_date"], date: parsedJson["creation_date"],
path: FutureRequestServiceDetails.id path: FutureRequestServiceDetails.id);
);
} }
} }

@ -0,0 +1,542 @@
import 'package:test_sa/models/lookup.dart';
class CallRequestForWorkOrder {
int id;
String callNo;
Asset asset;
AssignedEmployee assignedEmployee;
List<CallSiteContactPerson> callSiteContactPerson;
Status status;
Status callLastSituation;
Status defectType;
Status firstAction;
int assetType;
CallRequestForWorkOrder(
{this.id, this.callNo, this.asset, this.assignedEmployee, this.callSiteContactPerson, this.status, this.callLastSituation, this.defectType, this.firstAction, this.assetType});
CallRequestForWorkOrder.fromJson(Map<String, dynamic> json) {
id = json['id'];
callNo = json['callNo'];
asset = json['asset'] != null ? new Asset.fromJson(json['asset']) : null;
assignedEmployee = json['assignedEmployee'] != null ? new AssignedEmployee.fromJson(json['assignedEmployee']) : null;
if (json['callSiteContactPerson'] != null) {
callSiteContactPerson = <CallSiteContactPerson>[];
json['callSiteContactPerson'].forEach((v) {
callSiteContactPerson.add(new CallSiteContactPerson.fromJson(v));
});
}
status = json['status'] != null ? new Status.fromJson(json['status']) : null;
callLastSituation = json['callLastSituation'] != null ? new Status.fromJson(json['callLastSituation']) : null;
defectType = json['defectType'] != null ? new Status.fromJson(json['defectType']) : null;
firstAction = json['firstAction'] != null ? new Status.fromJson(json['firstAction']) : null;
assetType = json['assetType'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['callNo'] = this.callNo;
if (this.asset != null) {
data['asset'] = this.asset.toJson();
}
if (this.assignedEmployee != null) {
data['assignedEmployee'] = this.assignedEmployee.toJson();
}
if (this.callSiteContactPerson != null) {
data['callSiteContactPerson'] = this.callSiteContactPerson.map((v) => v.toJson()).toList();
}
if (this.status != null) {
data['status'] = this.status.toJson();
}
if (this.callLastSituation != null) {
data['callLastSituation'] = this.callLastSituation.toJson();
}
if (this.defectType != null) {
data['defectType'] = this.defectType.toJson();
}
if (this.firstAction != null) {
data['firstAction'] = this.firstAction.toJson();
}
data['assetType'] = this.assetType;
return data;
}
}
class Asset {
int id;
String assetSerialNo;
String systemID;
String assetNumber;
ModelDefinition modelDefinition;
String supplier;
String ipAddress;
String macAddress;
String portNumber;
Lookup assetReplace;
String oldAsset;
Lookup isParent;
String parentAsset;
Lookup assetType;
Site site;
Building building;
String floor;
Department department;
String room;
String testsDay;
num purchasingPrice;
String nbv;
String currency;
String poNo;
String invoiceNumber;
String invoiceDate;
String replacementDate;
Department originDepartment;
Site originSite;
String budgetYear;
String lastPOPrice;
String commissioningStatus;
String productionDate;
String edd;
String technicalInspectionDate;
String deliveryInspectionDate;
String endUserAcceptanceDate;
String receivingCommittee;
String siteWarrantyMonths;
String extendedWarrantyMonths;
String remainderWarrantyMonths;
String eomWarrantyMonthsNo;
String warrantyValue;
String warrantyEndDate;
String warrantyContractConditions;
List technicalGuidanceBooks;
String comment;
String tagCode;
Asset(
{this.id,
this.assetSerialNo,
this.systemID,
this.assetNumber,
this.modelDefinition,
this.supplier,
this.ipAddress,
this.macAddress,
this.portNumber,
this.assetReplace,
this.oldAsset,
this.isParent,
this.parentAsset,
this.assetType,
this.site,
this.building,
this.floor,
this.department,
this.room,
this.testsDay,
this.purchasingPrice,
this.nbv,
this.currency,
this.poNo,
this.invoiceNumber,
this.invoiceDate,
this.replacementDate,
this.originDepartment,
this.originSite,
this.budgetYear,
this.lastPOPrice,
this.commissioningStatus,
this.productionDate,
this.edd,
this.technicalInspectionDate,
this.deliveryInspectionDate,
this.endUserAcceptanceDate,
this.receivingCommittee,
this.siteWarrantyMonths,
this.extendedWarrantyMonths,
this.remainderWarrantyMonths,
this.eomWarrantyMonthsNo,
this.warrantyValue,
this.warrantyEndDate,
this.warrantyContractConditions,
this.technicalGuidanceBooks,
this.comment,
this.tagCode});
Asset.fromJson(Map<String, dynamic> json) {
id = json['id'];
assetSerialNo = json['assetSerialNo'];
systemID = json['systemID'];
assetNumber = json['assetNumber'];
modelDefinition = json['modelDefinition'] != null ? new ModelDefinition.fromJson(json['modelDefinition']) : null;
supplier = json['supplier'];
ipAddress = json['ipAddress'];
macAddress = json['macAddress'];
portNumber = json['portNumber'];
assetReplace = json['assetReplace'] != null ? Lookup.fromJson(json['assetReplace']) : null;
oldAsset = json['oldAsset'];
isParent = json['isParent'] != null ? Lookup.fromJson(json['isParent']) : null;
parentAsset = json['parentAsset'];
assetType = json['assetType'] != null ? Lookup.fromJson(json['assetType']) : null;
site = json['site'] != null ? new Site.fromJson(json['site']) : null;
building = json['building'];
floor = json['floor'];
department = json['department'] != null ? new Department.fromJson(json['department']) : null;
room = json['room'];
testsDay = json['testsDay'];
purchasingPrice = json['purchasingPrice'];
nbv = json['nbv'];
currency = json['currency'];
poNo = json['poNo'];
invoiceNumber = json['invoiceNumber'];
invoiceDate = json['invoiceDate'];
replacementDate = json['replacementDate'];
originDepartment = json['originDepartment'] != null ? new Department.fromJson(json['originDepartment']) : null;
originSite = json['originSite'] != null ? new Site.fromJson(json['originSite']) : null;
budgetYear = json['budgetYear'];
lastPOPrice = json['lastPOPrice'];
commissioningStatus = json['commissioningStatus'];
productionDate = json['productionDate'];
edd = json['edd'];
technicalInspectionDate = json['technicalInspectionDate'];
deliveryInspectionDate = json['deliveryInspectionDate'];
endUserAcceptanceDate = json['endUserAcceptanceDate'];
receivingCommittee = json['receivingCommittee'];
siteWarrantyMonths = json['siteWarrantyMonths'];
extendedWarrantyMonths = json['extendedWarrantyMonths'];
remainderWarrantyMonths = json['remainderWarrantyMonths'];
eomWarrantyMonthsNo = json['eomWarrantyMonthsNo'];
warrantyValue = json['warrantyValue'];
warrantyEndDate = json['warrantyEndDate'];
warrantyContractConditions = json['warrantyContractConditions'];
if (json['technicalGuidanceBooks'] != null) {
technicalGuidanceBooks = [];
json['technicalGuidanceBooks'].forEach((v) {
//technicalGuidanceBooks.add(new Null.fromJson(v));
});
}
comment = json['comment'];
tagCode = json['tagCode'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['assetSerialNo'] = this.assetSerialNo;
data['systemID'] = this.systemID;
data['assetNumber'] = this.assetNumber;
if (this.modelDefinition != null) {
data['modelDefinition'] = this.modelDefinition.toJson();
}
data['supplier'] = this.supplier;
data['ipAddress'] = this.ipAddress;
data['macAddress'] = this.macAddress;
data['portNumber'] = this.portNumber;
data['assetReplace'] = this.assetReplace;
data['oldAsset'] = this.oldAsset;
data['isParent'] = this.isParent;
data['parentAsset'] = this.parentAsset;
data['assetType'] = this.assetType;
if (this.site != null) {
data['site'] = this.site.toJson();
}
data['building'] = this.building;
data['floor'] = this.floor;
if (this.department != null) {
data['department'] = this.department.toJson();
}
data['room'] = this.room;
data['testsDay'] = this.testsDay;
data['purchasingPrice'] = this.purchasingPrice;
data['nbv'] = this.nbv;
data['currency'] = this.currency;
data['poNo'] = this.poNo;
data['invoiceNumber'] = this.invoiceNumber;
data['invoiceDate'] = this.invoiceDate;
data['replacementDate'] = this.replacementDate;
if (this.originDepartment != null) {
data['originDepartment'] = this.originDepartment.toJson();
}
if (this.originSite != null) {
data['originSite'] = this.originSite.toJson();
}
data['budgetYear'] = this.budgetYear;
data['lastPOPrice'] = this.lastPOPrice;
data['commissioningStatus'] = this.commissioningStatus;
data['productionDate'] = this.productionDate;
data['edd'] = this.edd;
data['technicalInspectionDate'] = this.technicalInspectionDate;
data['deliveryInspectionDate'] = this.deliveryInspectionDate;
data['endUserAcceptanceDate'] = this.endUserAcceptanceDate;
data['receivingCommittee'] = this.receivingCommittee;
data['siteWarrantyMonths'] = this.siteWarrantyMonths;
data['extendedWarrantyMonths'] = this.extendedWarrantyMonths;
data['remainderWarrantyMonths'] = this.remainderWarrantyMonths;
data['eomWarrantyMonthsNo'] = this.eomWarrantyMonthsNo;
data['warrantyValue'] = this.warrantyValue;
data['warrantyEndDate'] = this.warrantyEndDate;
data['warrantyContractConditions'] = this.warrantyContractConditions;
if (this.technicalGuidanceBooks != null) {
data['technicalGuidanceBooks'] = this.technicalGuidanceBooks.map((v) => v.toJson()).toList();
}
data['comment'] = this.comment;
data['tagCode'] = this.tagCode;
return data;
}
}
class ModelDefinition {
int id;
String assetName;
String modelDefCode;
String modelName;
int manufacturerId;
String manufacturerName;
String supplierName;
String replacementDate;
int lifeSpan;
List<ModelDefRelatedDefects> modelDefRelatedDefects;
List suppliers;
ModelDefinition(
{this.id,
this.assetName,
this.modelDefCode,
this.modelName,
this.manufacturerId,
this.manufacturerName,
this.supplierName,
this.replacementDate,
this.lifeSpan,
this.modelDefRelatedDefects,
this.suppliers});
ModelDefinition.fromJson(Map<String, dynamic> json) {
id = json['id'];
assetName = json['assetName'];
modelDefCode = json['modelDefCode'];
modelName = json['modelName'];
manufacturerId = json['manufacturerId'];
manufacturerName = json['manufacturerName'];
supplierName = json['supplierName'];
replacementDate = json['replacementDate'];
lifeSpan = json['lifeSpan'];
if (json['modelDefRelatedDefects'] != null) {
modelDefRelatedDefects = <ModelDefRelatedDefects>[];
json['modelDefRelatedDefects'].forEach((v) {
modelDefRelatedDefects.add(new ModelDefRelatedDefects.fromJson(v));
});
}
if (json['suppliers'] != null) {
suppliers = [];
json['suppliers'].forEach((v) {
// suppliers!.add(new Null.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['assetName'] = this.assetName;
data['modelDefCode'] = this.modelDefCode;
data['modelName'] = this.modelName;
data['manufacturerId'] = this.manufacturerId;
data['manufacturerName'] = this.manufacturerName;
data['supplierName'] = this.supplierName;
data['replacementDate'] = this.replacementDate;
data['lifeSpan'] = this.lifeSpan;
if (this.modelDefRelatedDefects != null) {
data['modelDefRelatedDefects'] = this.modelDefRelatedDefects.map((v) => v.toJson()).toList();
}
if (this.suppliers != null) {
data['suppliers'] = this.suppliers.map((v) => v.toJson()).toList();
}
return data;
}
}
class ModelDefRelatedDefects {
int id;
String defectName;
String workPerformed;
String estimatedTime;
ModelDefRelatedDefects({this.id, this.defectName, this.workPerformed, this.estimatedTime});
ModelDefRelatedDefects.fromJson(Map<String, dynamic> json) {
id = json['id'];
defectName = json['defectName'];
workPerformed = json['workPerformed'];
estimatedTime = json['estimatedTime'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['defectName'] = this.defectName;
data['workPerformed'] = this.workPerformed;
data['estimatedTime'] = this.estimatedTime;
return data;
}
}
class Site {
int id;
int customerCode;
String custName;
List buildings;
Site({this.id, this.customerCode, this.custName, this.buildings});
Site.fromJson(Map<String, dynamic> json) {
id = json['id'];
customerCode = json['customerCode'];
custName = json['custName'];
if (json['buildings'] != null) {
buildings = [];
json['buildings'].forEach((v) {
// buildings!.add(new Null.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['customerCode'] = this.customerCode;
data['custName'] = this.custName;
if (this.buildings != null) {
data['buildings'] = this.buildings.map((v) => v.toJson()).toList();
}
return data;
}
}
class Department {
int id;
String departmentName;
String departmentCode;
String ntCode;
Department({this.id, this.departmentName, this.departmentCode, this.ntCode});
Department.fromJson(Map<String, dynamic> json) {
id = json['id'];
departmentName = json['departmentName'];
departmentCode = json['departmentCode'];
ntCode = json['ntCode'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['departmentName'] = departmentName;
data['departmentCode'] = departmentCode;
data['ntCode'] = ntCode;
return data;
}
}
class AssignedEmployee {
String id;
String name;
AssignedEmployee({this.id, this.name});
AssignedEmployee.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
return data;
}
}
class CallSiteContactPerson {
int id;
String employeeCode;
String name;
String telephone;
String job;
String email;
String land;
String contactUserId;
CallSiteContactPerson({this.id, this.employeeCode, this.name, this.telephone, this.job, this.email, this.land, this.contactUserId});
CallSiteContactPerson.fromJson(Map<String, dynamic> json) {
id = json['id'];
employeeCode = json['employeeCode'];
name = json['name'];
telephone = json['telephone'];
job = json['job'];
email = json['email'];
land = json['land'];
contactUserId = json['contactUserId'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['employeeCode'] = this.employeeCode;
data['name'] = this.name;
data['telephone'] = this.telephone;
data['job'] = this.job;
data['email'] = this.email;
data['land'] = this.land;
data['contactUserId'] = this.contactUserId;
return data;
}
}
class Status {
int id;
String name;
int value;
Status({this.id, this.name, this.value});
Status.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
value = json['value'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['value'] = this.value;
return data;
}
}
class Building {
int id;
String name;
int value;
var floor;
Building({this.id, this.name, this.value, this.floor});
Building.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
value = json['value'];
floor = json['floor'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['value'] = this.value;
data['floor'] = this.floor;
return data;
}
}

@ -0,0 +1,149 @@
class Customer {
List<Data> data;
String message;
String innerMessage;
int responseCode;
bool isSuccess;
Customer({this.data, this.message, this.innerMessage, this.responseCode, this.isSuccess});
Customer.fromJson(Map<String, dynamic> json) {
if (json['data'] != null) {
data = [];
json['data'].forEach((v) {
data.add(new Data.fromJson(v));
});
}
message = json['message'];
innerMessage = json['innerMessage'];
responseCode = json['responseCode'];
isSuccess = json['isSuccess'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.data != null) {
data['data'] = this.data.map((v) => v.toJson()).toList();
}
data['message'] = this.message;
data['innerMessage'] = this.innerMessage;
data['responseCode'] = this.responseCode;
data['isSuccess'] = this.isSuccess;
return data;
}
}
class Data {
int id;
int customerCode;
String custName;
List<Buildings> buildings;
Data({this.id, this.customerCode, this.custName, this.buildings});
Data.fromJson(Map<String, dynamic> json) {
id = json['id'];
customerCode = json['customerCode'];
custName = json['custName'];
if (json['buildings'] != null) {
buildings = [];
json['buildings'].forEach((v) {
buildings.add(new Buildings.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['customerCode'] = this.customerCode;
data['custName'] = this.custName;
if (this.buildings != null) {
data['buildings'] = this.buildings.map((v) => v.toJson()).toList();
}
return data;
}
}
class Buildings {
int id;
String name;
int value;
List<Floors> floors;
Buildings({this.id, this.name, this.value, this.floors});
Buildings.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
value = json['value'];
if (json['floors'] != null) {
floors = [];
json['floors'].forEach((v) {
floors.add(new Floors.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['value'] = this.value;
if (this.floors != null) {
data['floors'] = this.floors.map((v) => v.toJson()).toList();
}
return data;
}
}
class Floors {
int id;
String name;
int value;
List<Departments> departments;
Floors({this.id, this.name, this.value, this.departments});
Floors.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
value = json['value'];
if (json['departments'] != null) {
departments = [];
json['departments'].forEach((v) {
departments.add(new Departments.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['value'] = this.value;
if (this.departments != null) {
data['departments'] = this.departments.map((v) => v.toJson()).toList();
}
return data;
}
}
class Departments {
int id;
String name;
Departments({this.id, this.name});
Departments.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
return data;
}
}

@ -1,5 +1,5 @@
class Department{ class Department {
String id; int id;
String name; String name;
Department({ Department({
@ -7,16 +7,16 @@ class Department{
this.name, this.name,
}); });
factory Department.fromJson(Map<String,dynamic> parsedJson){ factory Department.fromJson(Map<String, dynamic> parsedJson) {
return Department( return Department(
id: parsedJson["nid"] ?? parsedJson["id"], id: parsedJson["id"],
name: parsedJson["dept_name"] ?? parsedJson["value"], name: parsedJson["name"],
); );
} }
factory Department.fromDepartment(Department department){ factory Department.fromDepartment(Department department) {
return Department( return Department(
id: department?.id, id: department?.id,
name: department?.name, name: department?.name,
); );
} }
} }

@ -1,66 +1,90 @@
class Device{ import 'package:test_sa/models/hospital.dart';
String id; import 'package:test_sa/models/lookup.dart';
import 'model.dart';
class Device {
int id;
String serialNumber; String serialNumber;
String number; String number;
String brand; String assetName;
String model; String destBuildingName;
DateTime productionDate; int destBuildingId;
DateTime supplyDate; String destDepartmentName;
DateTime installDate; int destDepartmentId;
DateTime receivingDate; String destRoom;
DateTime operationDate; String destFloor;
DateTime warrantyDate; int destFloorId;
String destSiteName;
// String brand;
// String model;
ModelDefinition modelDefinition;
Hospital hospital;
Device({ Device({
this.id, this.id,
this.serialNumber, this.serialNumber,
this.number, this.number,
this.brand, this.assetName,
this.model, this.hospital,
this.productionDate, this.destBuildingName,
this.supplyDate, this.destDepartmentName,
this.installDate, this.destRoom,
this.receivingDate, this.destFloor,
this.operationDate, this.destSiteName,
this.warrantyDate, // this.brand,
// this.model,
this.modelDefinition,
this.destFloorId,
this.destDepartmentId,
this.destBuildingId,
}); });
factory Device.fromJson(Map<String,dynamic> parsedJson){ factory Device.fromJson(Map<String, dynamic> parsedJson, {bool startKeyWithDest = true}) {
print("parsedJson:$parsedJson");
return Device( return Device(
id: parsedJson["nid"] ?? parsedJson["id"], id: parsedJson["id"],
serialNumber: parsedJson["sn"] ?? parsedJson["value"], serialNumber: parsedJson["assetSerialNo"],
number: parsedJson["asset_no"], number: parsedJson["assetNumber"],
brand: parsedJson["brand"].toString(), assetName: parsedJson["assetName"],
model: parsedJson["model"].toString(), modelDefinition: ModelDefinition.fromJson(parsedJson["modelDefinition"]),
productionDate: getDateFromString(parsedJson["production_date"]), hospital: Hospital.fromJson(parsedJson["site"]),
supplyDate: getDateFromString(parsedJson["supply_date "]), destBuildingName: startKeyWithDest ? parsedJson["destBuildingName"] : parsedJson['building']['name'],
installDate: getDateFromString(parsedJson["install_date "]), destBuildingId: startKeyWithDest ? parsedJson["destBuildingName"] : parsedJson['building']['id'],
receivingDate: getDateFromString(parsedJson["receving_date "]), destDepartmentName: startKeyWithDest ? parsedJson["destDepartmentName"] : parsedJson['department']['departmentName'],
operationDate: getDateFromString(parsedJson["operation_date "]), destDepartmentId: startKeyWithDest ? parsedJson["destDepartmentName"] : parsedJson['department']['id'],
warrantyDate: getDateFromString(parsedJson["warranty_date "]), destRoom: startKeyWithDest ? parsedJson["destRoom"] : parsedJson['room'],
); destFloor: startKeyWithDest ? parsedJson["destFloor"] : parsedJson['floor']['name'],
destFloorId: startKeyWithDest ? null : parsedJson['floor']['id'],
destSiteName: parsedJson['destSiteName']
// parsedJson["modelDefinition"] == null ? "" :
// parsedJson["modelDefinition"]["manufacturerName"],
// model: parsedJson["modelDefinition"] == null ? "" :
// parsedJson["modelDefinition"]["modelName"],
);
} }
factory Device.fromDevice(Device device){ factory Device.fromDevice(Device device) {
return Device( return Device(
id: device.id, id: device.id,
serialNumber: device.serialNumber, serialNumber: device.serialNumber,
number: device.number, number: device.number,
brand: device.brand, // brand: device.brand,
model: device.model, // model: device.model,
productionDate: device.productionDate,
supplyDate: device.supplyDate,
installDate: device.installDate,
receivingDate: device.receivingDate,
operationDate: device.operationDate,
warrantyDate: device.warrantyDate,
); );
} }
}
DateTime getDateFromString(String unixDate){ Map<String, dynamic> toMap(Lookup assetType) {
if(unixDate == null) return {
return null; 'id': id,
return DateTime.fromMillisecondsSinceEpoch( 'assetSerialNo': serialNumber,
int.parse(unixDate)); 'assetNumber': number,
} 'assetName': assetName,
'modelDefinition': modelDefinition.toJson(),
'site': hospital.toMap(),
'AssetType': assetType.toMap(),
"supplier": {"id": 0, "suppliername": "string"},
};
}
}

@ -1,13 +1,20 @@
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/department.dart';
import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/device/device_transfer_info.dart'; import 'package:test_sa/models/device/device_transfer_info.dart';
import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/lookup.dart';
class DeviceTransfer{ import '../timer_model.dart';
String id;
class DeviceTransfer {
int id;
String userId; String userId;
String title; String title;
Device device; Device device;
DeviceTransferInfo sender; DeviceTransferInfo sender;
DeviceTransferInfo receiver; DeviceTransferInfo receiver;
String createdOn;
DeviceTransfer({ DeviceTransfer({
this.id, this.id,
@ -16,14 +23,15 @@ class DeviceTransfer{
this.userId, this.userId,
this.sender, this.sender,
this.receiver, this.receiver,
this.createdOn,
}); });
bool validate(){ bool validate() {
if(device == null) return false; if (device == null) return false;
return receiver.validate(); return receiver.validate();
} }
fromDeviceTransfer(DeviceTransfer old){ fromDeviceTransfer(DeviceTransfer old) {
id = old.id; id = old.id;
title = old.title; title = old.title;
userId = old.userId; userId = old.userId;
@ -34,17 +42,76 @@ class DeviceTransfer{
final receiver = DeviceTransferInfo(); final receiver = DeviceTransferInfo();
receiver.fromDetails(old.receiver); receiver.fromDetails(old.receiver);
this.receiver = receiver; this.receiver = receiver;
createdOn = old.createdOn;
} }
factory DeviceTransfer.fromJson(Map<String,dynamic> parsedJson){ factory DeviceTransfer.fromJson(Map<String, dynamic> parsedJson) {
return DeviceTransfer( return DeviceTransfer(
id: parsedJson["id"], id: parsedJson["id"],
title: parsedJson["title"], title: parsedJson["transferCode"],
userId: parsedJson["uid"], userId: parsedJson["uid"],
device: Device.fromJson(parsedJson["eq_sn"]), createdOn: parsedJson['createdOn'],
sender: DeviceTransferInfo.fromJson(parsedJson,"sender_"), device: Device(
receiver: DeviceTransferInfo.fromJson(parsedJson,"receiver_"), id: parsedJson["assetId"],
number: parsedJson["assetNumber"],
assetName: parsedJson["assetName"],
serialNumber: parsedJson["assetSerialNo"],
destBuildingName: parsedJson["destBuildingName"],
destDepartmentName: parsedJson["destDepartmentName"],
destFloor: parsedJson["destFloorName"],
destRoom: parsedJson["destRoom"],
destSiteName: parsedJson["destSiteName"],
),
sender: DeviceTransferInfo(
travelingHours: parsedJson["senderTravelingHours"],
comment: parsedJson["senderComment"],
workingHours: parsedJson["senderWorkingHours"],
timer: TimerModel(
startAt: DateTime.tryParse(parsedJson["senderStartDate"] ?? ""),
endAt: DateTime.tryParse(parsedJson["senderEndDate"] ?? ""),
durationInSecond: ((parsedJson["workingHours"] ?? 0) * 60 * 60).toInt(),
),
// startDate: parsedJson["senderStartDate"] == null ? null : DateTime.parse(parsedJson["senderStartDate"]),
// endDate: parsedJson["senderEndDate"] == null ? null : DateTime.parse(parsedJson["senderEndDate"]),
userId: parsedJson["senderAssignedEmployeeId"],
userName: parsedJson["senderAssignedEmployeeName"],
assignedEmployeeName: parsedJson["senderAssignedEmployeeName"],
client: Hospital(id: parsedJson["senderSiteId"], name: parsedJson["senderSiteName"]),
department: Department(
id: parsedJson["senderDepartmentId"],
name: parsedJson["senderDepartmentName"],
),
// todo add segnature
signature: URLs.getFileUrl(parsedJson["senderAttachmentName"]),
status: Lookup(
id: parsedJson["senderMachineStatusId"],
name: parsedJson["senderMachineStatusName"],
),
),
receiver: DeviceTransferInfo(
travelingHours: parsedJson["receiverTravelingHours"],
comment: parsedJson["receiverComment"],
workingHours: parsedJson["receiverWorkingHours"],
timer: parsedJson["receiverStartDate"] != null || parsedJson["receiverEndDate"] != null
? TimerModel(startAt: DateTime.tryParse(parsedJson["receiverStartDate"] ?? ""), endAt: DateTime.tryParse(parsedJson["receiverEndDate"] ?? ""))
: null,
// startDate: parsedJson["receiverStartDate"] == null ? null : DateTime.parse(parsedJson["receiverStartDate"]),
// endDate: parsedJson["receiverEndDate"] == null ? null : DateTime.parse(parsedJson["receiverEndDate"]),
userId: parsedJson["receiverAssignedEmployeeId"],
userName: parsedJson["receiverAssignedEmployeeName"],
assignedEmployeeName: parsedJson["receiverAssignedEmployeeName"],
client: Hospital(id: parsedJson["destSiteId"], name: parsedJson["destSiteName"]),
department: Department(
id: parsedJson["destDepartmentId"],
name: parsedJson["destDepartmentName"],
),
// todo add segnature
signature: URLs.getFileUrl(parsedJson["receiverAttachmentName"]),
status: Lookup(
id: parsedJson["receiverMachineStatusId"],
name: parsedJson["receiverMachineStatusName"],
),
),
); );
} }
} }

@ -2,71 +2,102 @@ import 'package:test_sa/models/department.dart';
import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
class DeviceTransferInfo{ import '../timer_model.dart';
class DeviceTransferInfo {
String userId; String userId;
String comment; String comment;
Hospital client; Hospital client;
Department department; Department department;
String workingHours; String workingHours;
// DateTime startDate;
// DateTime endDate;
String travelingHours; String travelingHours;
String name; String userName;
String signature; String signature;
String assignedEmployeeName;
Lookup status; Lookup status;
TimerModel timer;
DeviceTransferInfo({ DeviceTransferInfo({
this.userId, this.userId,
this.comment, this.comment,
this.department, this.department,
this.client, this.client,
this.name, this.userName,
this.travelingHours, this.travelingHours,
// this.startDate,
// this.endDate,
this.workingHours, this.workingHours,
this.signature, this.signature,
this.status, this.status,
this.assignedEmployeeName,
this.timer,
}); });
Map<String,String>toJson(bool isSender){ Map<String, String> toJson(bool isSender) {
Map<String,String> body = {}; Map<String, String> body = {};
final baseKey = isSender ? "sender_" : "receiver_"; final baseKey = isSender ? "sender_" : "receiver_";
if(comment != null && comment.isNotEmpty) body["${baseKey}comment"] = comment; if (comment != null && comment.isNotEmpty) body["${baseKey}comment"] = comment;
if(workingHours != null && workingHours.isNotEmpty) body["${baseKey}working_hours"] = workingHours; if (workingHours != null && workingHours.isNotEmpty) body["${baseKey}working_hours"] = workingHours;
if(travelingHours != null && travelingHours.isNotEmpty) body["${baseKey}travel_hours"] = comment; // if (startDate != null) body["${baseKey}start_date"] = startDate?.toIso8601String();
if(status != null) body["${baseKey}status"] = status.id.toString(); // if (endDate != null) body["${baseKey}end_date"] = endDate?.toIso8601String();
if(signature != null && signature.isNotEmpty) body["${baseKey}image"] = signature; if (timer?.startAt != null) body["${baseKey}start_date"] = timer?.startAt?.toIso8601String();
if (timer?.endAt != null) body["${baseKey}end_date"] = timer?.endAt?.toIso8601String();
if (travelingHours != null && travelingHours.isNotEmpty) body["${baseKey}travel_hours"] = travelingHours;
if (status != null) body["${baseKey}status"] = status.id.toString();
if (signature != null && signature.isNotEmpty) body["${baseKey}image"] = signature;
return body; return body;
} }
bool validate(){ bool validate() {
if(client == null) return false; if (client == null) return false;
if(department == null) return false; if (department == null) return false;
return true; return true;
} }
fromDetails(DeviceTransferInfo old,{bool withSignature = true}){ fromDetails(DeviceTransferInfo old, {bool withSignature = true}) {
userId = old.userId; userId = old.userId;
name = old.name; userName = old.userName;
client = Hospital.fromHospital(old.client); client = Hospital.fromHospital(old.client);
department = Department.fromDepartment(old.department); department = Department.fromDepartment(old.department);
workingHours = old.workingHours; workingHours = old.workingHours;
// startDate = old.startDate;
// endDate = old.endDate;
timer = old.timer;
travelingHours = old.travelingHours; travelingHours = old.travelingHours;
comment = old.comment; comment = old.comment;
if(withSignature) signature = old.signature; if (withSignature) signature = old.signature;
status = old.status; status = old.status;
} }
factory DeviceTransferInfo.fromJson(Map<String,dynamic> parsedJson,String key){ factory DeviceTransferInfo.fromJson(Map<String, dynamic> parsedJson, String key) {
return DeviceTransferInfo( return DeviceTransferInfo(
workingHours: parsedJson["${key}working_hours"], workingHours: parsedJson["${key}working_hours"],
// startDate: parsedJson["${key}start_date"],
// endDate: parsedJson["${key}end_date"],
timer: TimerModel(
startAt: DateTime.tryParse(parsedJson["${key}start_date"] ?? ""),
endAt: DateTime.tryParse(parsedJson["${key}end_date"] ?? ""),
durationInSecond: ((parsedJson["${key}working_hours"] ?? 0) * 60 * 60).toInt(),
),
travelingHours: parsedJson["${key}travel_hours"], travelingHours: parsedJson["${key}travel_hours"],
name: parsedJson["${key}name"], userName: parsedJson["${key}name"],
signature: parsedJson["${key}image"], signature: parsedJson["${key}image"],
userId: parsedJson["${key}id"], userId: parsedJson["${key}id"],
comment: parsedJson["${key}comment"], comment: parsedJson["${key}comment"],
client: Hospital.fromJson(parsedJson["${key}client"]), assignedEmployeeName: parsedJson["${key}AssignedEmployeeName"],
department: Department.fromJson(parsedJson["${key}department"]), client: Hospital(id: parsedJson["${key}SiteId"], name: parsedJson["${key}SiteName"]),
status: Lookup.fromJson(parsedJson["${key}status"]), department: Department(
id: parsedJson["${key}DepartmentId"],
name: parsedJson["${key}DepartmentName"],
),
status: Lookup(
id: parsedJson["${key}status"],
name: parsedJson["${key}status"],
),
); );
} }
} }

@ -0,0 +1,49 @@
import '../lookup.dart';
class DeviceTransferSearch {
String assetName, assetNumber, site;
bool mostRecent;
Lookup dateOperator;
String from, to;
DeviceTransferSearch({
this.assetName,
this.assetNumber,
this.site,
this.mostRecent,
this.dateOperator,
this.from,
this.to,
});
Map<String, dynamic> toMap() {
Map<String, dynamic> search = {};
if (assetName != null && assetName.isNotEmpty) {
search["assetName"] = assetName;
}
if (assetNumber != null && assetNumber.isNotEmpty) {
search["assetNumber"] = assetNumber;
}
if (site != null && site.isNotEmpty) {
search["site"] = site;
}
if (dateOperator != null && from != null) {
search["requestedDateSymbol"] = dateOperator.toMap();
search["requestedDateFrom"] = from;
}
if (dateOperator != null && to != null) {
search["requestedDateTo"] = to;
}
return search;
}
void fromSearch(DeviceTransferSearch newSearch) {
assetName = newSearch.assetName;
assetNumber = newSearch.assetNumber;
site = newSearch.site;
mostRecent = newSearch.mostRecent;
from = newSearch.from;
to = newSearch.to;
dateOperator = newSearch.dateOperator;
}
}

@ -0,0 +1,48 @@
class ModelDefinition {
int id;
String assetName;
String modelDefCode;
String modelName;
String manufacturerName;
String supplierName;
String replacementDate;
int lifeSpan;
ModelDefinition({
this.id,
this.assetName,
this.modelDefCode,
this.modelName,
this.manufacturerName,
this.supplierName,
this.replacementDate,
this.lifeSpan,
});
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['assetName'] = assetName;
data['modelDefCode'] = modelDefCode;
data['modelName'] = modelName;
data['manufacturerName'] = manufacturerName;
data['supplierName'] = supplierName;
data['replacementDate'] = replacementDate;
data['lifeSpan'] = lifeSpan;
return data;
}
factory ModelDefinition.fromJson(Map<String, dynamic> map) {
if (map == null) return null;
return ModelDefinition(
id: map['id'] as int,
assetName: map['assetName'] as String,
modelDefCode: map['modelDefCode'] as String,
modelName: map['modelName'] as String,
manufacturerName: map['manufacturerName'] as String,
supplierName: map['supplierName'] as String,
replacementDate: map['replacementDate'] as String,
lifeSpan: map['lifeSpan'] as int,
);
}
}

@ -0,0 +1,36 @@
class Engineer {
String id;
String name;
Engineer({
this.id,
this.name,
});
factory Engineer.fromJson(Map<String, dynamic> parsedJson) {
if (parsedJson == null) return Engineer();
return Engineer(
id: parsedJson["userId"] ?? parsedJson["id"],
name: parsedJson["userName"] ?? parsedJson["name"],
);
}
factory Engineer.fromEngineer(Engineer department) {
return Engineer(
id: department?.id,
name: department?.name,
);
}
@override
bool operator ==(Object other) => identical(this, other) || other is Engineer && id == other.id;
@override
int get hashCode => id.hashCode;
Map<String, dynamic> toMap() {
return {
'id': id,
'name': name,
};
}
}

@ -1,4 +1,4 @@
enum UsersTypes{ enum UsersTypes {
engineer, // 0 engineer, // 0
normal_user, // 1 normal_user, // 1
} }

@ -0,0 +1,39 @@
class FaultDescription {
FaultDescription({
this.id,
this.defectName,
this.workPerformed,
this.estimatedTime,
});
FaultDescription.fromJson(dynamic json) {
id = json['id'];
defectName = json['defectName'];
workPerformed = json['workPerformed'];
estimatedTime = json['estimatedTime'];
}
num id;
String defectName;
String workPerformed;
String estimatedTime;
FaultDescription copyWith({
num id,
String defectName,
String workPerformed,
String estimatedTime,
}) =>
FaultDescription(
id: id ?? this.id,
defectName: defectName ?? this.defectName,
workPerformed: workPerformed ?? this.workPerformed,
estimatedTime: estimatedTime ?? this.estimatedTime,
);
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['id'] = id;
map['defectName'] = defectName;
map['workPerformed'] = workPerformed;
map['estimatedTime'] = estimatedTime;
return map;
}
}

@ -1,43 +1,46 @@
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
class GasRefillDetails{ class GasRefillDetails {
Lookup type; Lookup type;
Lookup cylinderSize; Lookup cylinderSize;
int requestedQuantity; Lookup cylinderType;
int deliveredQuantity; double requestedQuantity;
double deliveredQuantity;
bool selectedForEditing;
GasRefillDetails({ GasRefillDetails({
this.type, this.type,
this.cylinderSize, this.cylinderSize,
this.cylinderType,
this.requestedQuantity, this.requestedQuantity,
this.deliveredQuantity, this.deliveredQuantity,
this.selectedForEditing,
}); });
bool validate(){ bool validate() {
//if(cylinderSize == null) return false; //if(cylinderSize == null) return false;
if(type == null) return false; if (type == null) return false;
if(requestedQuantity == null) return false; if (requestedQuantity == null) return false;
return true; return true;
} }
factory GasRefillDetails.fromJson(Map<String,dynamic> parsedJson){
return GasRefillDetails(
type: Lookup.fromJson(parsedJson["type"]),
cylinderSize: Lookup.fromJson(parsedJson["size"]), factory GasRefillDetails.fromJson(Map<String, dynamic> parsedJson) {
requestedQuantity: parsedJson["requsted_qty"] == null return GasRefillDetails(
? 0 : int.tryParse(parsedJson["requsted_qty"].toString()) ?? 0, type: Lookup.fromJson(parsedJson["gasType"]),
deliveredQuantity: parsedJson["deliverd_qty"] == null cylinderSize: Lookup.fromJson(parsedJson["cylinderSize"]),
? 0 : int.tryParse(parsedJson["deliverd_qty"].toString()) ?? 0, cylinderType: Lookup.fromJson(parsedJson["cylinderType"]),
requestedQuantity: parsedJson["requestedQty"],
deliveredQuantity: parsedJson["deliverdQty"],
); );
} }
factory GasRefillDetails.fromDetails(GasRefillDetails details){ factory GasRefillDetails.fromDetails(GasRefillDetails details) {
return GasRefillDetails( return GasRefillDetails(
type: Lookup.fromStatus(details.type), type: Lookup.fromStatus(details.type),
cylinderSize:Lookup.fromStatus(details.cylinderSize), cylinderSize: Lookup.fromStatus(details.cylinderSize),
cylinderType: Lookup.fromStatus(details.cylinderType),
requestedQuantity: details.requestedQuantity, requestedQuantity: details.requestedQuantity,
deliveredQuantity: details.deliveredQuantity, deliveredQuantity: details.deliveredQuantity,
); );
} }
} }

@ -1,53 +1,107 @@
import 'dart:typed_data';
import 'package:test_sa/models/gas_refill/gas_refill_details.dart'; import 'package:test_sa/models/gas_refill/gas_refill_details.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
class GasRefillModel{ import '../../controllers/api_routes/urls.dart';
String id; import '../call_request_for_work_order_model.dart';
String userId;
class GasRefillModel {
int id;
//String userId;
String clientName; String clientName;
String title; String title;
Lookup status; Lookup status;
Lookup building;
Lookup floor;
Department department;
List<GasRefillDetails> details; List<GasRefillDetails> details;
AssignedEmployee assignedEmployee;
String signatureNurse;
String signatureEngineer;
Uint8List localNurseSignature;
Uint8List localEngineerSignature;
num workingHours;
DateTime startDate, endDate, expectedDate;
GasRefillModel({ GasRefillModel({
this.id, this.id,
this.userId, //this.userId,
this.clientName, this.clientName,
this.title, this.title,
this.status, this.status,
this.details, this.details,
this.building,
this.floor,
this.startDate,
this.endDate,
this.expectedDate,
this.department,
this.assignedEmployee,
this.signatureNurse,
this.signatureEngineer,
this.localEngineerSignature,
this.localNurseSignature,
this.workingHours,
}); });
bool validate(){ bool validate() {
if(title == null) return false; if (title == null) return false;
if(status == null) return false; if (status == null) return false;
if(details == null && details.isEmpty) return false; // if (building == null) return false;
// if (floor == null) return false;
// if (department == null) return false;
// if (startDate == null) return false;
// if (endDate == null) return false;
if (details == null && details.isEmpty) return false;
return true; return true;
} }
fromGasRefillModel(GasRefillModel model){ fromGasRefillModel(GasRefillModel model) {
id = model.id; id = model.id;
userId = model.userId; //userId = model.userId;
clientName = model.clientName; clientName = model.clientName;
title = model.title; title = model.title;
status = Lookup.fromStatus(model.status); status = Lookup.fromStatus(model.status);
details = model.details.map((e) => GasRefillDetails.fromDetails(e)).toList(); details = model.details.map((e) => GasRefillDetails.fromDetails(e)).toList();
building = model.building;
floor = model.floor;
department = model.department;
startDate = model.startDate;
endDate = model.endDate;
expectedDate = model.expectedDate;
assignedEmployee = model.assignedEmployee;
localEngineerSignature = model.localEngineerSignature;
localNurseSignature = model.localNurseSignature;
signatureEngineer = model.signatureEngineer;
signatureNurse = model.signatureNurse;
workingHours = model.workingHours;
} }
factory GasRefillModel.fromJson(Map<String,dynamic> parsedJson){ factory GasRefillModel.fromJson(Map<String, dynamic> parsedJson) {
List<GasRefillDetails> details = []; List<GasRefillDetails> details = [];
if(parsedJson["details"] != null){ if (parsedJson["gazRefillDetails"] != null) {
List list = parsedJson["details"]; List list = parsedJson["gazRefillDetails"];
details = list.map((e) => GasRefillDetails.fromJson(e)).toList(); details = list.map((e) => GasRefillDetails.fromJson(e)).toList();
} }
return GasRefillModel( return GasRefillModel(
id: parsedJson["id"], id: parsedJson["id"],
userId: parsedJson["uid"], //userId: parsedJson["uid"],
title: parsedJson["title"], title: parsedJson["gazRefillNo"],
clientName: parsedJson["client"], clientName: parsedJson["site"] == null ? null : parsedJson["site"]["custName"],
status: Lookup.fromJson(parsedJson["status"]), status: Lookup.fromJson(parsedJson["status"] ?? {}),
details: details, details: details,
building: Lookup.fromJson(parsedJson["building"] ?? {}),
floor: Lookup.fromJson(parsedJson["floor"] ?? {}),
department: Department.fromJson(parsedJson["department"] ?? {}),
startDate: DateTime.tryParse(parsedJson['startDate'] ?? ""),
endDate: DateTime.tryParse(parsedJson['endDate'] ?? ""),
expectedDate: DateTime.tryParse(parsedJson['expectedDate'] ?? ""),
assignedEmployee: AssignedEmployee.fromJson(parsedJson['assignedEmployee'] ?? {}),
signatureEngineer: URLs.getFileUrl(parsedJson["engSignature"]),
signatureNurse: URLs.getFileUrl(parsedJson["nurseSignature"]),
workingHours: parsedJson["workingHours"],
); );
} }
} }

@ -1,23 +1,149 @@
class Hospital{ class Hospital {
String id; int id;
int customerCode;
String name; String name;
List<Buildings> buildings;
Hospital({ Hospital({
this.id, this.id,
this.customerCode,
this.name, this.name,
this.buildings,
}); });
factory Hospital.fromJson(Map<String,dynamic> parsedJson){ factory Hospital.fromJson(Map<String, dynamic> parsedJson) {
return Hospital( List<Buildings> buildings = [];
id: parsedJson["nid"] ?? parsedJson["id"],
name: parsedJson["client_name"] ?? parsedJson["value"], if (parsedJson['buildings'] != null) {
); buildings = [];
parsedJson['buildings'].forEach((v) {
buildings.add(Buildings.fromJson(v));
});
}
return Hospital(id: parsedJson["id"], name: parsedJson["custName"], customerCode: parsedJson["customerCode"], buildings: buildings);
}
factory Hospital.fromHospital(Hospital hospital) {
return Hospital(id: hospital?.id, name: hospital?.name, customerCode: hospital?.customerCode, buildings: hospital?.buildings);
}
Map<String, dynamic> toMap() {
return {'id': id, 'customerCode': customerCode, 'custName': name, "buildings": buildings};
}
}
// class Data {
// int id;
// int customerCode;
// String custName;
// List<Buildings> buildings;
//
// Data({this.id, this.customerCode, this.custName, this.buildings});
//
// Data.fromJson(Map<String, dynamic> json) {
// id = json['id'];
// customerCode = json['customerCode'];
// custName = json['custName'];
// if (json['buildings'] != null) {
// buildings = new List<Buildings>();
// json['buildings'].forEach((v) {
// buildings.add(new Buildings.fromJson(v));
// });
// }
// }
//
// Map<String, dynamic> toJson() {
// final Map<String, dynamic> data = new Map<String, dynamic>();
// data['id'] = this.id;
// data['customerCode'] = this.customerCode;
// data['custName'] = this.custName;
// if (this.buildings != null) {
// data['buildings'] = this.buildings.map((v) => v.toJson()).toList();
// }
// return data;
// }
// }
class Buildings {
int id;
String name;
int value;
List<Floors> floors;
Buildings({this.id, this.name, this.value, this.floors});
Buildings.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
value = json['value'];
if (json['floors'] != null) {
floors = [];
json['floors'].forEach((v) {
floors.add(Floors.fromJson(v));
});
}
}
Map<String, dynamic> toJson({bool includeFloors = true}) {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['name'] = name;
data['value'] = value;
if (floors != null && includeFloors) {
data['floors'] = floors.map((v) => v.toJson()).toList();
}
return data;
}
}
class Floors {
int id;
String name;
int value;
List<Departments> departments;
Floors({this.id, this.name, this.value, this.departments});
Floors.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
value = json['value'];
if (json['departments'] != null) {
departments = [];
json['departments'].forEach((v) {
departments.add(Departments.fromJson(v));
});
}
}
Map<String, dynamic> toJson({bool includeDepartments = true}) {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['name'] = name;
data['value'] = value;
if (departments != null && includeDepartments) {
data['departments'] = departments.map((v) => v.toJson()).toList();
}
return data;
}
}
class Departments {
int id;
String name;
Departments({this.id, this.name});
Departments.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
} }
factory Hospital.fromHospital(Hospital hospital){ Map<String, dynamic> toJson() {
return Hospital( final Map<String, dynamic> data = <String, dynamic>{};
id: hospital?.id, data['id'] = id;
name: hospital?.name, data['name'] = name;
); return data;
} }
} }

@ -1,4 +1,4 @@
class Issue{ class Issue {
String title; String title;
String userId; String userId;
List<int> reports; List<int> reports;
@ -15,13 +15,13 @@ class Issue{
this.serviceRequestId, this.serviceRequestId,
}); });
Map<String,String> toMap(){ Map<String, String> toMap() {
Map<String,String> map ={}; Map<String, String> map = {};
if(title != null) map["title"] = title; if (title != null) map["title"] = title;
if(reports != null) map["issue_report"] = reports.toString(); if (reports != null) map["issue_report"] = reports.toString();
if(userId != null) map["uid"] = userId; if (userId != null) map["uid"] = userId;
if(description != null) map["desc"] = description; if (description != null) map["desc"] = description;
if(serviceRequestId != null) map["call_id"] = serviceRequestId; if (serviceRequestId != null) map["call_id"] = serviceRequestId;
return map; return map;
} }
} }

@ -1,47 +1,58 @@
class Lookup{ class Lookup {
//old name label
final String label; final String name;
final String key; // old name key
final int value;
final int id; final int id;
const Lookup({ const Lookup({
this.label, this.name,
this.key, this.value,
this.id, this.id,
}); });
@override @override
bool operator == (Object other) => bool operator ==(Object other) => identical(this, other) || other is Lookup && ((value != null && value == other.value) || (id != null && id == other.id));
identical(this, other) || other is Lookup &&
key == other.key &&
id == other.id;
@override @override
int get hashCode => id.hashCode; int get hashCode => id?.hashCode ?? value?.hashCode;
factory Lookup.fromStatus(Lookup old){ toMap() {
return Lookup( return {"id": id, "name": name, "value": value};
label: old.label,
id: old.id,
key: old.key,
);
} }
factory Lookup.fromJson(Map<String,dynamic> parsedJson){ factory Lookup.fromStatus(Lookup old) {
if(parsedJson["id"] == null && parsedJson["uid"] == null) return null; if (old == null) return null;
return Lookup( return Lookup(
label: parsedJson["value"], name: old.name,
id: parsedJson["id"] is int id: old.id,
? parsedJson["id"] value: old.value,
: int.tryParse(parsedJson["id"] ?? parsedJson["uid"]),
); );
} }
factory Lookup.fromIntIdJson(Map<String,dynamic> parsedJson){ factory Lookup.fromJson(Map<String, dynamic> parsedJson) {
if (parsedJson == null) return null;
return Lookup( return Lookup(
label: parsedJson["value"], name: parsedJson["name"],
id: parsedJson["id"], id: parsedJson["id"],
value: parsedJson["value"],
); );
} }
}
// factory Lookup.fromJson(Map<String,dynamic> parsedJson){
// if(parsedJson["id"] == null && parsedJson["uid"] == null) return null;
// return Lookup(
// name: parsedJson["value"],
// id: parsedJson["id"] is int
// ? parsedJson["id"]
// : int.tryParse(parsedJson["id"] ?? parsedJson["uid"]),
// );
// }
// factory Lookup.fromIntIdJson(Map<String,dynamic> parsedJson){
// return Lookup(
// name: parsedJson["value"],
// id: parsedJson["id"],
// );
// }
}

@ -1,26 +1,40 @@
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
class CalibrationTool{ class CalibrationTool {
int id;
Lookup assetsNumber; Lookup assetsNumber;
DateTime dataOfTesting; DateTime dataOfTesting;
CalibrationTool({ CalibrationTool({
this.id,
this.assetsNumber, this.assetsNumber,
this.dataOfTesting, this.dataOfTesting,
}); });
Map<String, String> toMap() { Map<String, dynamic> toMap(int visitId) {
return { return {
if(assetsNumber != null) 'assetsSN': (assetsNumber?.id).toString(), "id": id ?? 0,
if(dataOfTesting != null) 'dataOfTesting': (dataOfTesting.millisecondsSinceEpoch ~/ 1000).toString(), "visitId": visitId,
if (assetsNumber != null) 'assetId': (assetsNumber?.id).toString(),
if (dataOfTesting != null) 'calibrationDateOfTesters': dataOfTesting.toIso8601String(),
}; };
} }
factory CalibrationTool.fromMap(Map<String, dynamic> map) { factory CalibrationTool.fromMap(Map<String, dynamic> map) {
return CalibrationTool( return CalibrationTool(
assetsNumber: Lookup.fromJson(map['assetsSN']), assetsNumber: Lookup(id: map["assetId"], name: map['assetSerialNo']),
dataOfTesting: map['dataOfTesting'] == null || map['dataOfTesting'] == "" ? null : dataOfTesting: DateTime.tryParse(map['calibrationDateOfTesters'] ?? ""),
DateTime.fromMillisecondsSinceEpoch(int.tryParse(map['dataOfTesting']) * 1000),
); );
} }
}
CalibrationTool copyWith({
Lookup assetsNumber,
DateTime dataOfTesting,
}) {
return CalibrationTool(
id: id,
assetsNumber: assetsNumber ?? this.assetsNumber,
dataOfTesting: dataOfTesting ?? this.dataOfTesting,
);
}
}

@ -1,6 +1,6 @@
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
class Contact{ class Contact {
Lookup title; Lookup title;
Lookup contactPerson; Lookup contactPerson;
String job; String job;
@ -8,14 +8,7 @@ class Contact{
String telephone; String telephone;
String landLine; String landLine;
Contact({ Contact({this.title, this.contactPerson, this.job, this.email, this.telephone, this.landLine});
this.title,
this.contactPerson,
this.job,
this.email,
this.telephone,
this.landLine
});
Map<String, String> toMap() { Map<String, String> toMap() {
return { return {
@ -38,4 +31,4 @@ class Contact{
landLine: map['landLine'] as String, landLine: map['landLine'] as String,
); );
} }
} }

@ -1,15 +1,12 @@
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
class ContactTitle extends Lookup { class ContactTitle extends Lookup {
ContactTitle({ ContactTitle({int id, String label}) : super(id: id, name: label);
int id,
String label
}):super(id: id,label: label);
factory ContactTitle.fromMap(Map<String,dynamic> parsedJson){ factory ContactTitle.fromMap(Map<String, dynamic> parsedJson) {
return ContactTitle( return ContactTitle(
label: parsedJson["value"], label: parsedJson["value"],
id: parsedJson["id"], id: parsedJson["id"],
); );
} }
} }

@ -1,15 +1,12 @@
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
class ContactTitle extends Lookup { class ContactTitle extends Lookup {
ContactTitle({ ContactTitle({int id, String label}) : super(id: id, name: label);
int id,
String label
}):super(id: id,label: label);
factory ContactTitle.fromMap(Map<String,dynamic> parsedJson){ factory ContactTitle.fromMap(Map<String, dynamic> parsedJson) {
return ContactTitle( return ContactTitle(
label: parsedJson["value"], label: parsedJson["value"],
id: parsedJson["id"], id: parsedJson["id"],
); );
} }
} }

@ -1,60 +1,97 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'dart:typed_data';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/pantry/calibration_tools.dart'; import 'package:test_sa/models/pantry/calibration_tools.dart';
import 'package:test_sa/models/pantry/pm_kit.dart'; import 'package:test_sa/models/pantry/pm_kit.dart';
import 'package:test_sa/models/pantry/ppm_check_list.dart'; import 'package:test_sa/models/pantry/ppm_check_list.dart';
import 'package:test_sa/models/timer_model.dart'; import 'package:test_sa/models/timer_model.dart';
class Pentry{ class Pentry {
Lookup ppmVisitStatus; Lookup ppmVisitStatus;
Lookup status; Lookup status;
TimerModel timer; TimerModel timer;
DateTime actualVisitDate; DateTime actualVisitDate;
DateTime expectedVisitDate;
String travelingHours; String travelingHours;
String image; String image;
File imageFile; File imageFile;
// List<Contact> contacts; // List<Contact> contacts;
List<PPMCheckList> ppmCheckLists; List<PPMCheckList> ppmCheckLists;
List<CalibrationTool> calibrationTools; List<CalibrationTool> calibrationTools;
List<PMKit> pmKits; List<PMKit> pmKits;
String signatureNurse;
String signatureEngineer;
Uint8List localNurseSignature;
Uint8List localEngineerSignature;
Pentry({ Pentry(
this.travelingHours, {this.travelingHours,
this.timer, this.timer,
this.status, this.status,
this.ppmVisitStatus, this.ppmVisitStatus,
this.actualVisitDate, this.actualVisitDate,
this.image, this.expectedVisitDate,
this.imageFile, this.image,
// this.contacts, this.imageFile,
this.ppmCheckLists, // this.contacts,
this.calibrationTools, this.ppmCheckLists,
this.pmKits, this.calibrationTools,
}); this.pmKits,
this.signatureNurse,
this.signatureEngineer,
this.localNurseSignature,
this.localEngineerSignature});
bool validate(){ Future<bool> validate() async {
if(actualVisitDate == null) return false; if (actualVisitDate == null) {
if(timer == null && timer.endAt != null) return false; await Fluttertoast.showToast(msg: "Actual visit date is Required");
if(ppmVisitStatus == null) return false; return false;
//if(status == null) return false; }
if (expectedVisitDate == null) {
await Fluttertoast.showToast(msg: "expected visit date is Required");
return false;
}
if (timer?.startAt == null) {
await Fluttertoast.showToast(msg: "Working Hours Required");
return false;
}
if (timer?.endAt == null) {
await Fluttertoast.showToast(msg: "Please Stop The Timer");
return false;
}
if (ppmVisitStatus == null) return false;
if (status?.id == null) {
await Fluttertoast.showToast(msg: "Device Status is Required");
return false;
}
return true; return true;
} }
Map<String, String> toMap() { Map<String, dynamic> toMap(int visitId) {
Map<String, String> map = {}; Map<String, dynamic> map = {};
map["visit_status"] = ppmVisitStatus?.id.toString(); map["visitStatusId"] = ppmVisitStatus?.id.toString();
if(status != null) map["pentry_status"] = status?.id.toString(); if (status != null) map["deviceStatusId"] = status?.id.toString();
if(travelingHours != null) map["traveling_hours"] = travelingHours; if (travelingHours != null) map["travelingHours"] = travelingHours;
if(imageFile != null) map["file_attachement"] = base64Encode(imageFile.readAsBytesSync()); //if(imageFile != null) map["file_attachement"] = base64Encode(imageFile.readAsBytesSync());
map["actual_date"] = (actualVisitDate.millisecondsSinceEpoch / 1000).toStringAsFixed(0); map["actualDate"] = actualVisitDate.toIso8601String();
if(timer != null){ map["expectedDate"] = expectedVisitDate.toIso8601String();
map["start_date"] = (timer.startAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0); if (timer != null) {
map["end_date"] = ((timer.endAt ?? DateTime.now()).millisecondsSinceEpoch / 1000).toStringAsFixed(0); map["startDate"] = timer.startAt.toIso8601String();
map["working_hours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5); map["endDate"] = timer.endAt?.toIso8601String() ?? DateTime.now().toIso8601String();
map["workingHours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5);
} }
if (imageFile != null) {
map["vAttachments"] = [
{"attachmentName": (imageFile.path.split("/").last + base64Encode(imageFile.readAsBytesSync()))}
];
}
map["travelingHours"] = travelingHours;
// if(contacts?.isNotEmpty == true) { // if(contacts?.isNotEmpty == true) {
// for(int i = 0;i<contacts.length;i++){ // for(int i = 0;i<contacts.length;i++){
// contacts[i].toMap().forEach((key, value) { // contacts[i].toMap().forEach((key, value) {
@ -62,9 +99,11 @@ class Pentry{
// }); // });
// } // }
// } // }
map["ppmCheckLists"] = jsonEncode(ppmCheckLists.map((e) => e.toMap()).toList()); map["vChecklists"] = ppmCheckLists.map((e) => e.toMap(visitId)).toList();
map["calibrationTools"] = jsonEncode(calibrationTools.map((e) => e.toMap()).toList()); map["vCalibrationTools"] = calibrationTools.map((e) => e.toMap(visitId)).toList();
map["pmKits"] = jsonEncode(pmKits.map((e) => e.toMap()).toList()); map["vKits"] = pmKits.map((e) => e.toMap(visitId)).toList();
map["nurseSignature"] = signatureNurse; //"${DateTime.now().toIso8601String()}.png|$signatureNurse";
map["engSignature"] = signatureEngineer; //"${DateTime.now().toIso8601String()}.png|$signatureEngineer";
return map; return map;
} }
@ -77,44 +116,67 @@ class Pentry{
// } // }
List<PMKit> pmKits = []; List<PMKit> pmKits = [];
if(map['pmKits'] != null){ if (map['vKits'] != null) {
pmKits =(map['pmKits'] as List<dynamic>) pmKits = (map['vKits'] as List<dynamic>).map((e) => PMKit.fromMap(e as Map<String, dynamic>)).toList();
.map((e) => PMKit.fromMap(e as Map<String, dynamic>))
.toList();
} }
List<PPMCheckList> ppmCheckLists = []; List<PPMCheckList> ppmCheckLists = [];
if(map['ppmCheckLists'] != null){ if (map['vChecklists'] != null) {
ppmCheckLists =(map['ppmCheckLists'] as List<dynamic>) ppmCheckLists = (map['vChecklists'] as List<dynamic>).map((e) => PPMCheckList.fromMap(e as Map<String, dynamic>)).toList();
.map((e) => PPMCheckList.fromMap(e as Map<String, dynamic>))
.toList();
} }
List<CalibrationTool> calibrationTools = []; List<CalibrationTool> calibrationTools = [];
if(map['calibrationTools'] != null){ if (map['vCalibrationTools'] != null) {
calibrationTools =(map['calibrationTools'] as List<dynamic>) calibrationTools = (map['vCalibrationTools'] as List<dynamic>).map((e) => CalibrationTool.fromMap(e as Map<String, dynamic>)).toList();
.map((e) => CalibrationTool.fromMap(e as Map<String, dynamic>))
.toList();
} }
return Pentry( return Pentry(
status: Lookup.fromJson(map["pentry_status"]), status: Lookup(id: map["taskStatusId"], name: map["taskStatusName"]),
ppmVisitStatus: Lookup.fromJson(map["visit_status"]), ppmVisitStatus: Lookup(id: map["visitStatusId"], name: map["visitStatusName"]),
actualVisitDate: getDate(map["actual_date"]), actualVisitDate: DateTime.tryParse(map["actualDate"] ?? ""),
travelingHours: map["traveling_hours"], expectedVisitDate: DateTime.tryParse(map["expectedDate"] ?? ""),
travelingHours: map["travelingHours"],
timer: TimerModel( timer: TimerModel(
startAt: getDate(map["start_date"]), startAt: DateTime.tryParse(map["startDate"] ?? ""),
endAt: getDate(map["end_date"]), endAt: DateTime.tryParse(map["endDate"] ?? ""),
durationInSecond: (int.tryParse(map["working_hours"] ?? "") ?? 0) * 60 *60 durationInSecond: (int.tryParse(map["workingHours"] ?? "") ?? 0) * 60 * 60,
), ),
// contacts: contacts, // contacts: contacts,
ppmCheckLists: ppmCheckLists, ppmCheckLists: ppmCheckLists,
calibrationTools: calibrationTools, calibrationTools: calibrationTools,
pmKits: pmKits, pmKits: pmKits,
signatureNurse: URLs.getFileUrl(map["nurseSignature"]),
signatureEngineer: URLs.getFileUrl(map["engSignature"]),
); );
} }
static getDate(String date){ Pentry copyWith({
return date == null || date.isEmpty Lookup ppmVisitStatus,
? null : DateTime.fromMillisecondsSinceEpoch(int.tryParse(date) * 1000); Lookup status,
TimerModel timer,
DateTime actualVisitDate,
DateTime expectedVisitDate,
String travelingHours,
String image,
File imageFile,
List<PPMCheckList> ppmCheckLists,
List<CalibrationTool> calibrationTools,
List<PMKit> pmKits,
String signatureNurse,
String signatureEngineer,
}) {
return Pentry(
ppmVisitStatus: ppmVisitStatus ?? this.ppmVisitStatus,
status: status ?? this.status,
timer: timer ?? this.timer,
actualVisitDate: actualVisitDate ?? this.actualVisitDate,
expectedVisitDate: expectedVisitDate ?? this.expectedVisitDate,
travelingHours: travelingHours ?? this.travelingHours,
image: image ?? this.image,
imageFile: imageFile ?? this.imageFile,
ppmCheckLists: ppmCheckLists ?? this.ppmCheckLists?.map((e) => e.copyWith())?.toList(),
calibrationTools: calibrationTools ?? this.calibrationTools?.map((e) => e.copyWith())?.toList(),
pmKits: pmKits ?? this.pmKits.map((e) => e.copyWith()).toList(),
signatureNurse: signatureNurse ?? this.signatureNurse,
signatureEngineer: signatureEngineer ?? this.signatureEngineer);
} }
} }

@ -1,6 +1,7 @@
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
class PMKit{ class PMKit {
int id;
Lookup itemCode; Lookup itemCode;
String itemName; String itemName;
String preparationTimeFrame; String preparationTimeFrame;
@ -9,31 +10,26 @@ class PMKit{
String quantityNeeded; String quantityNeeded;
String quantityReserved; String quantityReserved;
PMKit({ PMKit({this.id, this.itemCode, this.itemName, this.preparationTimeFrame, this.kitFrequencyDemand, this.availability, this.quantityNeeded, this.quantityReserved});
this.itemCode,
this.itemName,
this.preparationTimeFrame,
this.kitFrequencyDemand,
this.availability,
this.quantityNeeded,
this.quantityReserved
});
Map<String, String> toMap() { Map<String, dynamic> toMap(int visitId) {
return { return {
if(itemCode != null) 'itemCode': (itemCode?.id).toString(), "id": id ?? 0,
if(itemName != null) 'itemName': itemName, "visitId": visitId,
if(preparationTimeFrame != null) 'preparationTimeFrame': preparationTimeFrame, if (itemCode != null) 'partCatalogItemId': (itemCode?.id).toString(),
if(kitFrequencyDemand != null) 'kitFrequencyDemand': kitFrequencyDemand, // if(itemName != null) 'itemName': itemName,
if(availability != null) 'availability': availability, // if(preparationTimeFrame != null) 'preparationTimeFrame': preparationTimeFrame,
if(quantityNeeded != null) 'quantityNeeded': quantityNeeded, // if(kitFrequencyDemand != null) 'kitFrequencyDemand': kitFrequencyDemand,
if(quantityReserved != null) 'quantityReserved': quantityReserved, // if(availability != null) 'availability': availability,
// if(quantityNeeded != null) 'quantityNeeded': quantityNeeded,
// if(quantityReserved != null) 'quantityReserved': quantityReserved,
}; };
} }
factory PMKit.fromMap(Map<String, dynamic> map) { factory PMKit.fromMap(Map<String, dynamic> map) {
return PMKit( return PMKit(
itemCode: Lookup.fromJson(map['itemCode']), id: map['id'],
itemCode: Lookup(id: map['partCatalogItemId'], name: map["partNumber"]),
itemName: map['itemName'] as String, itemName: map['itemName'] as String,
preparationTimeFrame: map['preparationTimeFrame'] as String, preparationTimeFrame: map['preparationTimeFrame'] as String,
kitFrequencyDemand: map['kitFrequencyDemand'] as String, kitFrequencyDemand: map['kitFrequencyDemand'] as String,
@ -42,4 +38,26 @@ class PMKit{
quantityReserved: map['quantityReserved'] as String, quantityReserved: map['quantityReserved'] as String,
); );
} }
}
PMKit copyWith({
int id,
Lookup itemCode,
String itemName,
String preparationTimeFrame,
String kitFrequencyDemand,
String availability,
String quantityNeeded,
String quantityReserved,
}) {
return PMKit(
id: id ?? this.id,
itemCode: itemCode ?? this.itemCode,
itemName: itemName ?? this.itemName,
preparationTimeFrame: preparationTimeFrame ?? this.preparationTimeFrame,
kitFrequencyDemand: kitFrequencyDemand ?? this.kitFrequencyDemand,
availability: availability ?? this.availability,
quantityNeeded: quantityNeeded ?? this.quantityNeeded,
quantityReserved: quantityReserved ?? this.quantityReserved,
);
}
}

@ -1,33 +1,54 @@
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
class PPMCheckList{ class PPMCheckList {
int id;
Lookup status; Lookup status;
String title; String title;
String comment; String comment;
String measuredValue; String measuredValue;
PPMCheckList({ PPMCheckList({
this.id,
this.title, this.title,
this.status, this.status,
this.comment, this.comment,
this.measuredValue, this.measuredValue,
}); });
Map<String, String> toMap() { Map<String, dynamic> toMap(int visitId) {
return { return {
if(status != null) 'status': status?.id.toString(), 'id': id ?? 0,
if(title != null) 'title': title, "visitId": visitId,
if(comment != null) 'comment': comment, if (status != null) 'taskStatusId': status?.id,
if(measuredValue != null) 'measuredValue': measuredValue, if (title != null) 'task': title,
if (comment != null) 'taskComment': comment,
if (measuredValue != null) 'measuredValue': measuredValue,
}; };
} }
factory PPMCheckList.fromMap(Map<String, dynamic> map) { factory PPMCheckList.fromMap(Map<String, dynamic> map) {
return PPMCheckList( return PPMCheckList(
status: Lookup.fromJson(map['status']), id: map['id'] as int,
title: map['title'] as String, status: Lookup(id: map["taskStatusId"], name: map["taskStatusName"]),
comment: map['comment'] as String, title: map['task'] as String,
comment: map['taskComment'] as String,
measuredValue: map['measuredValue'] as String, measuredValue: map['measuredValue'] as String,
); );
} }
}
PPMCheckList copyWith({
int id,
Lookup status,
String title,
String comment,
String measuredValue,
}) {
return PPMCheckList(
id: id ?? this.id,
status: status ?? this.status,
title: title ?? this.title,
comment: comment ?? this.comment,
measuredValue: measuredValue ?? this.measuredValue,
);
}
}

@ -1,23 +1,33 @@
class Part{ class Part {
String id; int id;
int reportPartID;
String code; String code;
String name; String name;
int quantity; int quantity;
Part({ Part({
this.id, this.id,
this.reportPartID,
this.code, this.code,
this.name, this.name,
this.quantity = 1, this.quantity = 1,
}); });
factory Part.fromJson(Map<String,dynamic> parsedJson){ Map<String, dynamic> toJson() {
return {
"id": reportPartID ?? 0,
"sparePart": {"id": id, "partNo": code, "partName": name},
"qty": quantity
};
}
factory Part.fromJson(Map<String, dynamic> parsedJson, {Map<String, dynamic> reportJson}) {
return Part( return Part(
id: parsedJson["nid"] ?? parsedJson["id"], id: parsedJson["id"],
code: parsedJson["part_code"] ?? parsedJson["name"], reportPartID: reportJson != null ? reportJson["id"] : null,
name: parsedJson["part_name"], code: parsedJson["partNo"],
quantity: parsedJson["qty"] == null name: parsedJson["partName"],
? 1 : int.tryParse(parsedJson["qty"].toString()) ?? 1, quantity: reportJson != null ? (reportJson["qty"] ?? 1).toInt() : 1,
); );
} }
} }

@ -1,149 +1,245 @@
import 'dart:convert'; import 'dart:typed_data';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/engineer.dart';
import 'package:test_sa/models/fault_description.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/part.dart'; import 'package:test_sa/models/part.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/timer_model.dart'; import 'package:test_sa/models/timer_model.dart';
class ServiceReport { class ServiceReport {
String id; int id;
String operatingHours; double operatingHours;
DateTime visitDate; DateTime visitDate;
DateTime endDate; DateTime returnToService;
Lookup serviceType;
// DateTime endDate;
// DateTime startDate;
Lookup assetType;
Lookup callLastSituation; Lookup callLastSituation;
Lookup status; Lookup currentSituation;
Lookup repairLocation;
Engineer engineer;
Lookup equipmentStatus;
Lookup type; Lookup type;
Lookup reason; Lookup reason;
String faultDescription; int faultDescriptionId;
String workPreformed; String workPreformed;
//String workHours;
String travelingHours; num workingHours;
double travelingHours;
String invoiceNumber; String invoiceNumber;
String invoiceCode; String invoiceCode;
List<Part> parts; List<Part> parts;
String image; List<String> image;
Device device; Device device;
String quantity; String quantity;
String jobSheetNumber; String jobSheetNumber;
TimerModel timer; TimerModel timer;
String signatureNurse;
String signatureEngineer;
String comment;
Uint8List localNurseSignature;
Uint8List localEngineerSignature;
num travelingExpense;
String reviewComment;
FaultDescription faultDescription;
ServiceReport({ ServiceReport(
this.id, {this.id,
this.visitDate, this.visitDate,
this.endDate, // this.endDate,
this.serviceType, this.assetType,
this.status, this.equipmentStatus,
this.type, this.type,
this.faultDescription, this.faultDescriptionId,
//this.workHours, this.workingHours,
this.travelingHours, this.travelingHours,
this.parts, this.parts,
this.workPreformed, this.engineer,
this.reason, this.workPreformed,
this.operatingHours, this.reason,
this.callLastSituation, this.operatingHours,
this.jobSheetNumber, this.callLastSituation,
this.image, this.currentSituation,
this.device, this.jobSheetNumber,
this.invoiceCode, this.image,
this.invoiceNumber, this.device,
this.quantity = "1", this.invoiceCode,
this.timer, this.invoiceNumber,
}); this.quantity = "1",
this.timer,
this.signatureNurse,
this.signatureEngineer,
this.localNurseSignature,
this.localEngineerSignature,
this.comment,
this.repairLocation,
this.travelingExpense,
// this.startDate,
this.reviewComment,
this.faultDescription,
this.returnToService});
Map<String,String> toMap(){ Map<String, dynamic> toMap(ServiceRequest request) {
Map<String,String> _map = {}; Map<String, dynamic> _map = {};
if(id != null) _map["id"] = id; if (id != null) _map["id"] = id;
if(visitDate != null) _map["visit_date"] = (visitDate.millisecondsSinceEpoch ~/ 1000).toString(); if (visitDate != null) _map["visitDate"] = visitDate.toIso8601String();
if(serviceType != null) _map["service_type"] = serviceType.id.toString(); if (returnToService != null) _map["replacementDate"] = returnToService.toIso8601String();
if(status != null) _map["status"] = status.id.toString();
if(type != null) _map["service_report_type"] = type.id.toString(); //if(serviceType != null) _map["service_type"] = serviceType.id.toString();
if(faultDescription != null && faultDescription.isNotEmpty) _map["fault_description"] = faultDescription; if (equipmentStatus != null) _map["equipmentStatus"] = equipmentStatus?.toMap();
if (type != null) _map["typeOfWO"] = type?.toMap();
if (assetType != null) _map["TypeOfWO"] = assetType?.toMap();
//if(faultDescriptionId != null && faultDescriptionId.isNotEmpty) _map["fault_description"] = faultDescriptionId;
//if(workHours != null && workHours.isNotEmpty) _map["working_hours"] = workHours; //if(workHours != null && workHours.isNotEmpty) _map["working_hours"] = workHours;
if(timer != null){ if (timer != null) {
_map["start_time"] = (timer.startAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0); _map["startofWorkTime"] = timer.startAt.toIso8601String();
_map["end_time"] = ((timer.endAt ?? DateTime.now()).millisecondsSinceEpoch / 1000).toStringAsFixed(0); _map["endofWorkTime"] = (timer.endAt ?? DateTime.now()).toIso8601String();
_map["working_hours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5); _map["workingHours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5);
}
if (travelingHours != null && travelingHours.toString().isNotEmpty) _map["travelingHours"] = travelingHours;
// if(workPreformed != null && workPreformed.isNotEmpty){
// _map["faultDescription"] = {
// "id":faultDescriptionId ?? 0,
// "workPerformed":workPreformed
// };
// }
_map["faultDescription"] = faultDescription?.id == null ? null : {"id": faultDescription?.id ?? 0, "workPerformed": faultDescription?.workPerformed};
if (travelingHours != null) _map["travelingHours"] = travelingHours;
// if (workingHours != null) _map["workingHours"] = workingHours;
// if (workPreformed != null && workPreformed.isNotEmpty) {
// _map["faultDescription"] = faultDescription.toJson();
// }
if (jobSheetNumber != null && jobSheetNumber.isNotEmpty) _map["job_sheet_no"] = jobSheetNumber;
if (parts != null && parts.isNotEmpty) {
_map["sparePartsWorkOrders"] = parts.map((e) => e.toJson()).toList();
} }
if(travelingHours != null && travelingHours.isNotEmpty) _map["traveling_hours"] = travelingHours; if (device != null && device.id != null) {
if(workPreformed != null && workPreformed.isNotEmpty) _map["work_performed"] = workPreformed; _map["callRequest"] = {
if(jobSheetNumber != null && jobSheetNumber.isNotEmpty) _map["job_sheet_no"] = jobSheetNumber; "id": request.id,
if(parts != null && parts.isNotEmpty){ "asset": device?.toMap(assetType),
Map<String,int> _partsMap = {}; };
parts.forEach((part) { _map["callRequest"]["asset"]["invoiceNumber"] = invoiceNumber;
if(part.id.isNotEmpty)
_partsMap[part.id] = part.quantity;
});
_map["parts"] = json.encode(_partsMap);
} }
if(device?.id != null && device.id != null) _map["eq_id"] = device.id; _map["AssignedEmployee"] = engineer?.toMap();
if(quantity != null && quantity.isNotEmpty) _map["qty"] = quantity; _map["repairLocation"] = repairLocation?.toMap();
if(endDate != null) _map["end_date"] = (endDate.millisecondsSinceEpoch ~/ 1000).toString(); //if(quantity != null && quantity.isNotEmpty) _map["qty"] = quantity;
if(reason != null) _map["reasons"] = reason.id.toString(); //if(endDate != null) _map["end_date"] = (endDate.millisecondsSinceEpoch ~/ 1000).toString();
if(operatingHours != null && operatingHours.isNotEmpty) _map["operation_hours"] = operatingHours; if (reason != null) _map["reason"] = reason.toMap();
if(callLastSituation != null) _map["call_last_situtation"] = callLastSituation.id.toString(); //if(operatingHours != null && operatingHours.isNotEmpty) _map["operation_hours"] = operatingHours;
if(image != null) _map["image"] = image; if (callLastSituation != null) _map["calllastSituation"] = callLastSituation.toMap();
if(invoiceCode != null) _map["invoice_no"] = invoiceCode; if (currentSituation != null) _map["currentSituation"] = currentSituation.toMap();
if(invoiceNumber != null) _map["invoice_code"] = invoiceNumber; //if(image != null) _map["image"] = image;
//if(invoiceCode != null) _map["invoice_no"] = invoiceCode;
//if(invoiceNumber != null) _map["invoice_code"] = invoiceNumber;
if (image != null) {
_map["attachmentsWorkOrder"] = image.map((e) => {"name": e}).toList();
print(_map["attachmentsWorkOrder"]);
}
_map["nurseSignature"] = signatureNurse;
_map["engSignature"] = signatureEngineer;
_map["comment"] = comment;
_map["travelingExpenses"] = travelingExpense;
// _map["startofWorkTime"] = startDate.toIso8601String();
// _map["endofWorkTime"] = endDate.toIso8601String();
// _map["workingHours"] = endDate?.difference(startDate)?.inHours ?? 0;
if (timer?.startAt != null) _map["startofWorkTime"] = timer?.startAt?.toIso8601String();
if (timer?.endAt != null) _map["endofWorkTime"] = timer?.endAt?.toIso8601String();
_map["workingHours"] = workingHours;
_map["reviewComment"] = reviewComment;
return _map; return _map;
} }
bool validate(){ Future<bool> validate() async {
if(visitDate == null) return false; if (visitDate == null) {
if(serviceType == null) return false; await Fluttertoast.showToast(msg: "Visit Date Required");
if(status == null) return false; return false;
if(type == null) return false; }
if(callLastSituation == null) return false; if (returnToService == null) {
if(callLastSituation?.id == 12){ await Fluttertoast.showToast(msg: "Return To Service Date Required");
if(invoiceCode != null || invoiceCode?.isEmpty == true) return false; return false;
if(invoiceNumber != null || invoiceNumber?.isEmpty== true ) return false; }
if (timer?.startAt == null) {
await Fluttertoast.showToast(msg: "Working Hours Required");
return false;
} }
if(parts == null) return false; if (timer?.endAt == null) {
await Fluttertoast.showToast(msg: "Please Stop The Timer");
return false;
}
//if(serviceType == null) return false;
if (equipmentStatus == null) return false;
//if (type == null && assetType == null) return false;
// if (engineer == null) return false;
if (callLastSituation == null) return false;
if (callLastSituation?.value == 12) {
// if(invoiceCode != null || invoiceCode?.isEmpty == true) return false;
if (invoiceNumber != null || invoiceNumber?.isEmpty == true) return false;
}
if (parts == null) return false;
//if(endDate == null) return false; //if(endDate == null) return false;
//if(reason == null) return false; if (reason == null) return false;
if((device?.id == null || device.id.isEmpty) && type?.id != 1) return false; //todo uncoment this line
//if((device?.id == null || device.id.isEmpty) && type?.id != 1) return false;
//if(quantity == null || quantity.isEmpty) return false; //if(quantity == null || quantity.isEmpty) return false;
//if(image == null) return false; //if(image == null) return false;
return true; return true;
} }
factory ServiceReport.fromJson(Map<String,dynamic> parsedJson,String id){ factory ServiceReport.fromJson(Map<String, dynamic> parsedJson, int id) {
List<Part> _parts = []; List<Part> _parts = [];
if(parsedJson["parts"] != null){ if (parsedJson["sparePartsWorkOrders"] != null) {
if(parsedJson["parts"][0]["id"] != null){ if ((parsedJson["sparePartsWorkOrders"] as List).isNotEmpty && parsedJson["sparePartsWorkOrders"][0]["id"] != null) {
List partsList = parsedJson["parts"]; List partsList = parsedJson["sparePartsWorkOrders"];
_parts = partsList.map((e) => Part.fromJson(e)).toList(); _parts = partsList.map((e) => Part.fromJson(e["sparePart"], reportJson: e)).toList();
}
} }
}
return ServiceReport( return ServiceReport(
id: id, id: id,
serviceType: Lookup.fromJson(parsedJson["service_type"]), assetType: Lookup.fromJson(parsedJson["assetType"]),
callLastSituation: Lookup.fromJson(parsedJson["call_last_situtation"]), callLastSituation: Lookup.fromJson(parsedJson["calllastSituation"]),
reason: Lookup.fromJson(parsedJson["reasons"]), currentSituation: Lookup.fromJson(parsedJson["currentSituation"]),
status: Lookup.fromJson(parsedJson["service_report_status"]), repairLocation: Lookup.fromJson(parsedJson["repairLocation"]),
type: Lookup.fromJson(parsedJson["service_report_type"]), reason: Lookup.fromJson(parsedJson["reason"]),
faultDescription: parsedJson["fault_description"], equipmentStatus: Lookup.fromJson(parsedJson["equipmentStatus"]),
endDate:getDate(parsedJson["end_date"]), type: Lookup.fromJson(parsedJson["typeOfWO"]),
invoiceCode: parsedJson["invoice_code"], faultDescription: parsedJson['faultDescription'] != null ? FaultDescription.fromJson(parsedJson['faultDescription']) : null,
invoiceNumber: parsedJson["invoice_no"],
jobSheetNumber: parsedJson["job_sheet_no"], // faultDescription: parsedJson["faultDescription"],
operatingHours: parsedJson["operation_hours"], // startDate: DateTime.tryParse(parsedJson["startofWorkTime"] ?? ""),
// endDate: DateTime.tryParse(parsedJson["endofWorkTime"] ?? ""),
//invoiceCode: parsedJson["invoice_code"],
//invoiceNumber: parsedJson["invoice_no"],
//jobSheetNumber: parsedJson["job_sheet_no"],
// workingHours: parsedJson["workingHours"],
engineer: Engineer.fromJson(parsedJson["assignedEmployee"]),
parts: _parts, parts: _parts,
quantity: parsedJson["nid"], //quantity: parsedJson["nid"],
travelingHours: parsedJson["traveling_hours"], travelingHours: parsedJson["travelingHours"],
visitDate: getDate(parsedJson["visit_date"]), travelingExpense: parsedJson["travelingExpenses"],
//workHours: parsedJson["working_hours"], visitDate: DateTime.tryParse(parsedJson["visitDate"]),
returnToService: DateTime.tryParse(parsedJson["replacementDate"] ?? ""),
workingHours: parsedJson["workingHours"],
timer: TimerModel( timer: TimerModel(
durationInSecond: (int.tryParse(parsedJson["working_hours"] ?? "") ?? 0) * 60 *60), startAt: DateTime.tryParse(parsedJson["startofWorkTime"] ?? ""),
workPreformed: parsedJson["work_performed"], endAt: DateTime.tryParse(parsedJson["endofWorkTime"] ?? ""),
device: parsedJson["eq_nid"] == null ? null : Device(id: parsedJson["eq_nid"],serialNumber: parsedJson["eq_serial"]) durationInSecond: ((parsedJson["workingHours"] ?? 0) * 60 * 60).toInt(),
),
//workPreformed: parsedJson["work_performed"],
device: Device.fromJson(parsedJson["callRequest"]["asset"]),
signatureNurse: URLs.getFileUrl(parsedJson["nurseSignature"]),
signatureEngineer: URLs.getFileUrl(parsedJson["engSignature"]),
comment: parsedJson['comment'],
reviewComment: parsedJson['reviewComment'],
); );
} }
static getDate(String date){ // static getDate(String date){
return date == null || date.isEmpty // return date == null || date.isEmpty
? null : DateTime.fromMillisecondsSinceEpoch(int.tryParse(date) * 1000); // ? null : DateTime.fromMillisecondsSinceEpoch(int.tryParse(date) * 1000);
} // }
} }

File diff suppressed because it is too large Load Diff

@ -1,22 +1,28 @@
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
class ServiceRequest{ class ServiceRequest {
String id; String id;
String requestCode; String requestCode;
String deviceSerialNumber; String deviceSerialNumber;
String deviceId; int deviceId;
String deviceArName; String deviceArName;
String deviceEnName; String deviceEnName;
List<String> devicePhotos; List<String> devicePhotos;
String maintenanceIssue; String callComments;
String hospitalName; String hospitalName;
String hospitalId; int hospitalId;
String departmentName; String departmentName;
String engineerName; String engineerName;
String engineerId;
String date; String date;
String audio; String audio;
int statusValue; int statusValue;
int statusId;
String statusLabel; String statusLabel;
String reviewComment;
String comments;
bool viewReport; bool viewReport;
String engineerMobile; String engineerMobile;
@ -26,10 +32,15 @@ class ServiceRequest{
String visitDate; String visitDate;
DateTime nextVisitDate; DateTime nextVisitDate;
String jobSheetNumber; String jobSheetNumber;
String reportID; int reportID;
String deviceNumber; String deviceNumber;
Lookup priority; Lookup priority;
Lookup defectType; Lookup defectType;
Lookup type;
Lookup requestedThrough;
Lookup firstAction;
Lookup loanAvailability;
Device device;
ServiceRequest({ ServiceRequest({
this.id, this.id,
@ -41,14 +52,15 @@ class ServiceRequest{
this.devicePhotos, this.devicePhotos,
this.hospitalId, this.hospitalId,
this.deviceSerialNumber, this.deviceSerialNumber,
this.maintenanceIssue, this.callComments,
this.statusLabel, this.statusLabel,
this.statusValue, this.statusValue,
this.statusId,
this.departmentName, this.departmentName,
this.deviceId, this.deviceId,
this.audio, this.audio,
this.engineerName, this.engineerName,
this.engineerId,
this.viewReport = false, this.viewReport = false,
this.deviceModel, this.deviceModel,
this.engineerMobile, this.engineerMobile,
@ -61,42 +73,60 @@ class ServiceRequest{
this.defectType, this.defectType,
this.priority, this.priority,
this.deviceNumber, this.deviceNumber,
this.type,
this.requestedThrough,
this.device,
this.reviewComment,
this.comments,
this.loanAvailability,
this.firstAction,
}); });
factory ServiceRequest.fromJson(Map<String,dynamic> parsedJson){ factory ServiceRequest.fromJson(Map<String, dynamic> parsedJson) {
List<String> images = [];
if (parsedJson["attachmentsCallRequest"] != null) if (parsedJson["attachmentsCallRequest"] is List) {
List list = parsedJson["attachmentsCallRequest"];
images = list.map((e) => URLs.getFileUrl(e["attachmentsCallRequest"])).toList();
}
return ServiceRequest( return ServiceRequest(
id: parsedJson["nid"], id: parsedJson["id"].toString(),
requestCode: parsedJson["call_id"] ?? parsedJson["jobcode"] , requestCode: parsedJson["callNo"].toString(),
hospitalName: parsedJson["call_client"], hospitalName: parsedJson["asset"]["site"]["custName"],
deviceNumber: parsedJson["device_no"], deviceNumber: parsedJson["asset"]["assetNumber"].toString(),
deviceId: parsedJson["deviceid"], deviceId: parsedJson["asset"]["id"],
audio: parsedJson["audio"] ?? "", audio: URLs.getFileUrl(parsedJson["voiceNote"] ?? ""),
deviceArName: parsedJson["equipment_arabic_name"] == false deviceArName: parsedJson["asset"]["modelDefinition"]["assetName"] ?? "",
? "No Name found" : parsedJson["equipment_arabic_name"], deviceEnName: parsedJson["asset"]["modelDefinition"]["assetName"] ?? "",
deviceEnName: parsedJson["equipment_english_name"] == false devicePhotos: images,
? "No Name found" : parsedJson["equipment_english_name"], deviceSerialNumber: parsedJson["asset"]["assetSerialNo"],
devicePhotos: List<String>.from(parsedJson["image"]), date: DateTime.tryParse(parsedJson["requestedDate"] ?? "").toString().split(" ").first,
deviceSerialNumber: parsedJson["call_sn"], // todo. add requeste time param for time
date: parsedJson["call_data"], callComments: parsedJson["callComments"],
maintenanceIssue: parsedJson["call_complaint"] ?? parsedJson["complaint"], comments: parsedJson["comments"],
statusLabel: parsedJson["status_value"], statusLabel: parsedJson["status"] == null ? null : parsedJson["status"]["name"],
statusValue: int.tryParse(parsedJson["status"]??"-1"), statusValue: parsedJson["status"] == null ? null : parsedJson["status"]["value"],
departmentName: parsedJson["department_name"], statusId: parsedJson["status"] == null ? null : parsedJson["status"]["id"],
engineerName: parsedJson["employee_name"], departmentName: parsedJson["asset"]["department"] != null ? parsedJson["asset"]["department"]["name"] : "",
hospitalId: parsedJson["client"], engineerName: parsedJson["assignedEmployee"] == null ? null : parsedJson["assignedEmployee"]["name"],
reportID: parsedJson["service_report_nid"] is String engineerId: parsedJson["assignedEmployee"] == null ? null : parsedJson["assignedEmployee"]["id"],
? parsedJson["service_report_nid"] hospitalId: parsedJson["asset"]["site"]["id"],
: null , reportID: parsedJson["workOrder"] != null ? parsedJson["workOrder"]["workOrderId"] : null,
viewReport: parsedJson["service_report_nid"] is bool ? false : true, viewReport: parsedJson["workOrder"] != null,
deviceModel: parsedJson["device_model"], deviceModel: parsedJson["asset"]["modelDefinition"]["modelName"],
engineerMobile: parsedJson["engineer_mobile"], engineerMobile: parsedJson["assignedEmployee"] == null ? null : parsedJson["assignedEmployee"]["phone"],
faultDescription: parsedJson["fault_desc"], faultDescription: parsedJson["workOrder"] != null ? parsedJson["workOrder"]["faultDescription"] : null,
jobSheetNumber: parsedJson["job_sheet_number"], jobSheetNumber: parsedJson["workOrder"] != null ? parsedJson["workOrder"]["jobSheetNumber"] : null,
visitDate: parsedJson["visit_date"], visitDate: DateTime.tryParse(parsedJson["visitDate"] ?? "").toString().split(" ").first,
nextVisitDate:parsedJson["next_visit_date"] == null nextVisitDate: DateTime.tryParse(parsedJson["nextVisitDate"] ?? ""),
? null : DateTime.fromMillisecondsSinceEpoch(int.tryParse(parsedJson["next_visit_date"]) * 1000), workPerformed: parsedJson["workOrder"] != null ? parsedJson["workOrder"]["workPerformed"] : null,
workPerformed: parsedJson["work_performed"], device: Device.fromJson(parsedJson["asset"]),
reviewComment: parsedJson["reviewComment"],
type: Lookup.fromJson(parsedJson['typeofRequest']),
defectType: Lookup.fromJson(parsedJson['defectType']),
loanAvailability: Lookup.fromJson(parsedJson['loanAvailability']),
firstAction: Lookup.fromJson(parsedJson['firstAction']),
requestedThrough: Lookup.fromJson(parsedJson['requestedThrough']),
priority: Lookup.fromJson(parsedJson['priority']),
); );
} }
} }

@ -1,46 +1,90 @@
class ServiceRequestSearch{ import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/lookup.dart';
import '../call_request_for_work_order_model.dart';
class ServiceRequestSearch {
String callId;
String deviceSerialNumber; String deviceSerialNumber;
String deviceNumber;
String deviceName; String deviceName;
String hospital; Hospital hospital;
String model; String model;
int statusValue; Lookup statusValue;
bool mostRecent;
String from, to;
Lookup dateOperator;
AssignedEmployee assignedEmployee;
ServiceRequestSearch({ ServiceRequestSearch({
this.deviceSerialNumber, this.deviceSerialNumber,
this.deviceNumber,
this.statusValue, this.statusValue,
this.deviceName, this.deviceName,
this.model, this.model,
this.hospital, this.hospital,
this.mostRecent,
this.callId,
this.from,
this.to,
this.assignedEmployee,
this.dateOperator,
}); });
fromSearch(ServiceRequestSearch newSearch){ fromSearch(ServiceRequestSearch newSearch) {
deviceSerialNumber = newSearch.deviceSerialNumber; deviceSerialNumber = newSearch.deviceSerialNumber;
deviceNumber = newSearch.deviceNumber;
statusValue = newSearch.statusValue; statusValue = newSearch.statusValue;
hospital = newSearch.hospital; hospital = newSearch.hospital;
model = newSearch.model; model = newSearch.model;
mostRecent = newSearch.mostRecent;
callId = newSearch.callId;
from = newSearch.from;
to = newSearch.to;
assignedEmployee = newSearch.assignedEmployee;
dateOperator = newSearch.dateOperator;
} }
String toSearchString(){ Map<String, dynamic> toMap() {
String _search = ""; Map<String, dynamic> search = {};
if(deviceSerialNumber != null && deviceSerialNumber.isNotEmpty){ if (deviceSerialNumber != null && deviceSerialNumber.isNotEmpty) {
_search += "&sn_id=$deviceSerialNumber"; search["assetSerialNumber"] = deviceSerialNumber;
}
if (deviceNumber != null && deviceNumber.isNotEmpty) {
search["assetNo"] = deviceNumber;
}
if (statusValue != null) {
search["status"] = statusValue.toMap();
}
if (deviceName != null && deviceName.isNotEmpty) {
search["assetName"] = deviceName;
} }
if(statusValue != null){ if (hospital != null) {
_search += "&status=$statusValue"; search["site"] = hospital.name;
} }
if(deviceName != null && deviceName.isNotEmpty){ if (model != null && model.isNotEmpty) {
_search += "&equipment_en_name=$deviceName"; search["modelDefinition"] = model;
} }
if(hospital != null && hospital.isNotEmpty){ if (callId != null && callId.isNotEmpty) {
_search += "&client=$hospital"; search["callId"] = callId;
}
if (dateOperator != null && from != null) {
search["requestedDateSymbol"] = dateOperator.toMap();
search["requestedDateFrom"] = from;
}
if (dateOperator != null && to != null) {
search["requestedDateTo"] = to;
} }
if(model != null && model.isNotEmpty){ if (assignedEmployee != null) {
_search += "&model=$model"; search["assignedEmployee"] = assignedEmployee.toJson();
} }
return _search; return search;
} }
} }

@ -1,6 +1,6 @@
import 'package:meta/meta.dart'; import 'package:meta/meta.dart';
class Subtitle{ class Subtitle {
// http requests status messages // http requests status messages
String currentlyServiceNotAvailable; String currentlyServiceNotAvailable;
String waitUntilYourRequestComplete; String waitUntilYourRequestComplete;
@ -84,6 +84,7 @@ class Subtitle{
String hospital; String hospital;
String device; String device;
String deviceImages; String deviceImages;
String deviceFiles;
String pickDevice; String pickDevice;
String maintenanceIssue; String maintenanceIssue;
String create; String create;
@ -112,7 +113,6 @@ class Subtitle{
String unite; String unite;
String unitRequired; String unitRequired;
String deviceArName; String deviceArName;
String deviceEnName;
String details; String details;
String general; String general;
String serviceRequestInformation; String serviceRequestInformation;
@ -197,7 +197,7 @@ class Subtitle{
String customer; String customer;
String reportType; String reportType;
String requiredWord; String requiredWord;
String serviceType; String assetType;
String reportStatus; String reportStatus;
String callLastSituation; String callLastSituation;
String invoiceNumber; String invoiceNumber;
@ -206,17 +206,39 @@ class Subtitle{
String reasons; String reasons;
String attachImage; String attachImage;
String operatingHours; String operatingHours;
String partNumber; String partNumberName;
String number; String number;
String quantity; String quantity;
String orderWorkNumber;
String assignedEmployee;
String assetSN;
String assetName;
String assetNumber;
String site;
String maintenanceSituation;
String currentSituation;
// all // all
String duplicateRequest; String duplicateRequest;
String duplicateAlert; String duplicateAlert;
String duplicateAlertMessage; String duplicateAlertMessage;
String alert; String alert;
String comment;
String updateServiceRequest;
String repairLocation;
String travelingExpense;
String startDate;
String endDate;
String requestedQuantity;
String deliveredQuantity;
String destinationSite;
String building;
String floor;
String department;
String room;
String actions;
void setIssues(List<String> issues){ void setIssues(List<String> issues) {
issues.clear(); issues.clear();
issues.add(reason1); issues.add(reason1);
issues.add(reason2); issues.add(reason2);
@ -226,6 +248,8 @@ class Subtitle{
} }
Subtitle({ Subtitle({
@required this.updateServiceRequest,
@required this.comment,
@required this.currentlyServiceNotAvailable, @required this.currentlyServiceNotAvailable,
@required this.waitUntilYourRequestComplete, @required this.waitUntilYourRequestComplete,
@required this.requestCompleteSuccessfully, @required this.requestCompleteSuccessfully,
@ -278,7 +302,6 @@ class Subtitle{
@required this.titleValidateMessage, @required this.titleValidateMessage,
@required this.to, @required this.to,
@required this.urlNotFound, @required this.urlNotFound,
@required this.nameExist, @required this.nameExist,
@required this.unitRequired, @required this.unitRequired,
@required this.unite, @required this.unite,
@ -328,7 +351,6 @@ class Subtitle{
@required this.twitter, @required this.twitter,
@required this.add, @required this.add,
@required this.code, @required this.code,
@required this.deviceEnName,
@required this.deviceName, @required this.deviceName,
@required this.serialNumber, @required this.serialNumber,
@required this.policy, @required this.policy,
@ -338,6 +360,7 @@ class Subtitle{
@required this.createServiceRequest, @required this.createServiceRequest,
@required this.delete, @required this.delete,
@required this.deviceImages, @required this.deviceImages,
@required this.deviceFiles,
@required this.deviceRequired, @required this.deviceRequired,
@required this.general, @required this.general,
@required this.maintenanceIssueRequired, @required this.maintenanceIssueRequired,
@ -384,7 +407,6 @@ class Subtitle{
@required this.pickImage, @required this.pickImage,
@required this.requiredImage, @required this.requiredImage,
@required this.activationAlert, @required this.activationAlert,
@required this.callId, @required this.callId,
@required this.requiredWord, @required this.requiredWord,
@required this.quantity, @required this.quantity,
@ -397,20 +419,42 @@ class Subtitle{
@required this.newServiceReport, @required this.newServiceReport,
@required this.number, @required this.number,
@required this.operatingHours, @required this.operatingHours,
@required this.partNumber, @required this.partNumberName,
@required this.reasons, @required this.reasons,
@required this.reportStatus, @required this.reportStatus,
@required this.reportType, @required this.reportType,
@required this.serviceType, @required this.assetType,
@required this.workPreformed, @required this.workPreformed,
@required this.alert, @required this.alert,
@required this.duplicateAlert, @required this.duplicateAlert,
@required this.duplicateAlertMessage, @required this.duplicateAlertMessage,
@required this.duplicateRequest, @required this.duplicateRequest,
@required this.orderWorkNumber,
@required this.assignedEmployee,
@required this.assetSN,
@required this.assetName,
@required this.site,
@required this.maintenanceSituation,
@required this.currentSituation,
@required this.repairLocation,
@required this.travelingExpense,
@required this.startDate,
@required this.endDate,
@required this.requestedQuantity,
@required this.deliveredQuantity,
@required this.assetNumber,
@required this.destinationSite,
@required this.building,
@required this.floor,
@required this.department,
@required this.room,
@required this.actions,
}); });
factory Subtitle.fromJson(Map<String,dynamic> parsedJson){ factory Subtitle.fromJson(Map<String, dynamic> parsedJson) {
return Subtitle( return Subtitle(
updateServiceRequest: parsedJson["updateServiceRequest"],
comment: parsedJson["comment"],
currentlyServiceNotAvailable: parsedJson["server_error_message"], currentlyServiceNotAvailable: parsedJson["server_error_message"],
failedToCompleteRequest: parsedJson["failed_request_message"], failedToCompleteRequest: parsedJson["failed_request_message"],
requestCompleteSuccessfully: parsedJson["successful_request_message"], requestCompleteSuccessfully: parsedJson["successful_request_message"],
@ -423,7 +467,6 @@ class Subtitle{
signOut: parsedJson["sign_out"], signOut: parsedJson["sign_out"],
signOutAlert: parsedJson["logout_alert"], signOutAlert: parsedJson["logout_alert"],
language: parsedJson["language"], language: parsedJson["language"],
name: parsedJson["name"], name: parsedJson["name"],
email: parsedJson["email"], email: parsedJson["email"],
phoneNumber: parsedJson["phone_number"], phoneNumber: parsedJson["phone_number"],
@ -437,7 +480,6 @@ class Subtitle{
passwordValidateMessage: parsedJson["password_validate_message"], passwordValidateMessage: parsedJson["password_validate_message"],
confirmPasswordValidateMessage: parsedJson["confirm_password_validate_message"], confirmPasswordValidateMessage: parsedJson["confirm_password_validate_message"],
phoneNumberValidateMessage: parsedJson["phone_number_validate_message"], phoneNumberValidateMessage: parsedJson["phone_number_validate_message"],
forgetPasswordWithMark: parsedJson["forget_password_with_mark"], forgetPasswordWithMark: parsedJson["forget_password_with_mark"],
showPassword: parsedJson["show_password"], showPassword: parsedJson["show_password"],
wrongEmailOrPassword: parsedJson["wrong_email_or_password"], wrongEmailOrPassword: parsedJson["wrong_email_or_password"],
@ -447,7 +489,6 @@ class Subtitle{
back: parsedJson["back"], back: parsedJson["back"],
search: parsedJson["search"], search: parsedJson["search"],
searchByName: parsedJson["search_by_name"], searchByName: parsedJson["search_by_name"],
address: parsedJson["address"], address: parsedJson["address"],
addressNotFound: parsedJson["address_not_found"], addressNotFound: parsedJson["address_not_found"],
addressValidateMessage: parsedJson["address_validate_message"], addressValidateMessage: parsedJson["address_validate_message"],
@ -466,7 +507,6 @@ class Subtitle{
titleNotFound: parsedJson["title_not_found"], titleNotFound: parsedJson["title_not_found"],
titleValidateMessage: parsedJson["title_validate_message"], titleValidateMessage: parsedJson["title_validate_message"],
urlNotFound: parsedJson["url_not_found"], urlNotFound: parsedJson["url_not_found"],
date: parsedJson["date"], date: parsedJson["date"],
status: parsedJson["status"], status: parsedJson["status"],
code: parsedJson["code"], code: parsedJson["code"],
@ -481,8 +521,8 @@ class Subtitle{
details: parsedJson["details"], details: parsedJson["details"],
device: parsedJson["device"], device: parsedJson["device"],
deviceArName: parsedJson["deviceArName"], deviceArName: parsedJson["deviceArName"],
deviceEnName: parsedJson["deviceEnName"],
deviceImages: parsedJson["deviceImages"], deviceImages: parsedJson["deviceImages"],
deviceFiles: parsedJson["deviceFiles"],
deviceModel: parsedJson["deviceModel"], deviceModel: parsedJson["deviceModel"],
deviceName: parsedJson["deviceName"], deviceName: parsedJson["deviceName"],
deviceRequired: parsedJson["deviceRequired"], deviceRequired: parsedJson["deviceRequired"],
@ -542,7 +582,6 @@ class Subtitle{
visitDate: parsedJson["visitDate"], visitDate: parsedJson["visitDate"],
whatsApp: parsedJson["whatsApp"], whatsApp: parsedJson["whatsApp"],
workPerformed: parsedJson["workPerformed"], workPerformed: parsedJson["workPerformed"],
actualDate: parsedJson["actualDate"], actualDate: parsedJson["actualDate"],
done: parsedJson["done"], done: parsedJson["done"],
expectDate: parsedJson["expectDate"], expectDate: parsedJson["expectDate"],
@ -573,7 +612,6 @@ class Subtitle{
requiredImage: parsedJson["requiredImage"], requiredImage: parsedJson["requiredImage"],
taskStatus: parsedJson["taskStatus"], taskStatus: parsedJson["taskStatus"],
activationAlert: parsedJson["activationAlert"], activationAlert: parsedJson["activationAlert"],
attachImage: parsedJson["attachImage"], attachImage: parsedJson["attachImage"],
callLastSituation: parsedJson["callLastSituation"], callLastSituation: parsedJson["callLastSituation"],
customer: parsedJson["customer"], customer: parsedJson["customer"],
@ -583,21 +621,39 @@ class Subtitle{
newServiceReport: parsedJson["newServiceReport"], newServiceReport: parsedJson["newServiceReport"],
number: parsedJson["number"], number: parsedJson["number"],
operatingHours: parsedJson["operatingHours"], operatingHours: parsedJson["operatingHours"],
partNumber: parsedJson["partNumber"], partNumberName: parsedJson["partNumberName"],
quantity: parsedJson["quantity"], quantity: parsedJson["quantity"],
reasons: parsedJson["reasons"], reasons: parsedJson["reasons"],
reportStatus: parsedJson["reportStatus"], reportStatus: parsedJson["reportStatus"],
reportType: parsedJson["reportType"], reportType: parsedJson["reportType"],
callId: parsedJson["callId"], callId: parsedJson["callId"],
requiredWord: parsedJson["requiredWord"], requiredWord: parsedJson["requiredWord"],
serviceType: parsedJson["serviceType"], assetType: parsedJson["AssetType"],
workPreformed: parsedJson["workPreformed"], workPreformed: parsedJson["workPreformed"],
alert: parsedJson["alert"], alert: parsedJson["alert"],
duplicateAlert: parsedJson["duplicateAlert"], duplicateAlert: parsedJson["duplicateAlert"],
duplicateAlertMessage: parsedJson["duplicateAlertMessage"], duplicateAlertMessage: parsedJson["duplicateAlertMessage"],
duplicateRequest: parsedJson["duplicateRequest"], duplicateRequest: parsedJson["duplicateRequest"],
orderWorkNumber: parsedJson["orderWorkNumber"],
assignedEmployee: parsedJson["assignedEmployee"],
assetSN: parsedJson["assetSN"],
assetName: parsedJson["assetName"],
assetNumber: parsedJson["assetNumber"],
site: parsedJson["site"],
maintenanceSituation: parsedJson["maintenanceSituation"],
currentSituation: parsedJson["currentSituation"],
repairLocation: parsedJson["repairLocation"],
travelingExpense: parsedJson["travelingExpense"],
startDate: parsedJson["startDate"],
endDate: parsedJson["endDate"],
requestedQuantity: parsedJson["requestedQuantity"],
deliveredQuantity: parsedJson["deliveredQuantity"],
destinationSite: parsedJson["destinationSite"],
building: parsedJson["building"],
floor: parsedJson["floor"],
department: parsedJson["department"],
room: parsedJson["room"],
actions: parsedJson["actions"],
); );
} }
}
}

@ -3,5 +3,7 @@ class TimerModel {
DateTime endAt; DateTime endAt;
int durationInSecond; int durationInSecond;
TimerModel({this.startAt,this.endAt,this.durationInSecond}); // bool stopped;
}
TimerModel({this.startAt, this.endAt, this.durationInSecond});
}

@ -1,111 +1,229 @@
import 'package:test_sa/controllers/notification/firebase_notification_manger.dart'; import 'package:test_sa/controllers/notification/firebase_notification_manger.dart';
import 'package:test_sa/models/department.dart';
import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/hospital.dart';
class User { class User {
int clientId;
String clientName;
List<int> departmentId;
List<String> departmentName;
String message;
String username;
String userID;
String email;
String password;
String token;
dynamic roles;
List<UserRoles> userRoles;
String tokenlife;
bool isAuthenticated;
bool hasError;
String profilePhotoName;
String id; String id;
String userName; String userName;
String password; String normalizedUserName;
String email; String normalizedEmail;
String image; bool emailConfirmed;
Hospital hospital; dynamic passwordHash;
Department department; String securityStamp;
UsersTypes type; String concurrencyStamp;
String phoneNumber; String phoneNumber;
String whatsApp; bool phoneNumberConfirmed;
String token; bool twoFactorEnabled;
bool isActive; dynamic lockoutEnd;
bool lockoutEnabled;
int accessFailedCount;
User( User({
{this.id, this.clientId,
this.userName = "", this.clientName,
this.email = "", this.departmentId,
this.password = "", this.departmentName,
this.phoneNumber = "", this.message,
this.hospital, this.username,
this.image, this.userID,
this.department, this.email,
this.type, this.password,
this.whatsApp, this.token,
this.token, this.roles,
this.isActive = false}); this.userRoles,
this.tokenlife,
this.isAuthenticated,
this.hasError,
this.profilePhotoName,
this.id,
this.userName,
this.normalizedUserName,
this.normalizedEmail,
this.emailConfirmed,
this.passwordHash,
this.securityStamp,
this.concurrencyStamp,
this.phoneNumber,
this.phoneNumberConfirmed,
this.twoFactorEnabled,
this.lockoutEnd,
this.lockoutEnabled,
this.accessFailedCount,
});
Future<Map<String, dynamic>> toLoginJson() async { Future<Map<String, dynamic>> toLoginJson() async {
if (FirebaseNotificationManger.token == null) await FirebaseNotificationManger.getToken(); if (FirebaseNotificationManger.token == null) await FirebaseNotificationManger.getToken();
return { return {
"username": userName, "username": userName,
"pass": password, "password": password,
"firebase_token": FirebaseNotificationManger?.token ?? "", "fireBaseToken": FirebaseNotificationManger?.token ?? "",
}; };
} }
UsersTypes get type {
switch (userRoles?.first?.name) {
case "Engineer":
return UsersTypes.engineer;
case "Hospital":
return UsersTypes.normal_user;
default:
return null;
}
}
Map<String, dynamic> toUpdateProfileJson() { Map<String, dynamic> toUpdateProfileJson() {
Map<String, dynamic> jsonObject = {}; Map<String, dynamic> jsonObject = {};
if (department?.id != null && department.id.isNotEmpty) jsonObject["department"] = department.id; // if (departmentId != null) jsonObject["department"] = departmentId;
if (whatsApp != null && whatsApp.isNotEmpty) jsonObject["whatsapp"] = whatsApp; // if (whatsApp != null && whatsApp.isNotEmpty) jsonObject["whatsapp"] = whatsApp;
if (phoneNumber != null && phoneNumber.isNotEmpty) jsonObject["phone"] = phoneNumber; // if (phoneNumber != null && phoneNumber.isNotEmpty) jsonObject["phone"] = phoneNumber;
return jsonObject; return jsonObject;
} }
Future<Map<String, dynamic>> toRegisterJson() async { Future<Map<String, dynamic>> toRegisterJson() async {
if (FirebaseNotificationManger.token == null) await FirebaseNotificationManger.getToken(); // if (FirebaseNotificationManger.token == null) await FirebaseNotificationManger.getToken();
return { return {
"username": userName, // "username": userName,
"email": email, // "email": email,
"whatsapp": whatsApp, // "whatsapp": whatsApp,
"client": hospital.id, // "client": hospital.id,
"department": department?.id, // "department": department?.id,
"phone": phoneNumber, // "phone": phoneNumber,
"pass": password, // "pass": password,
"firebase_token": FirebaseNotificationManger?.token ?? "", // "firebase_token": FirebaseNotificationManger?.token ?? "",
}; };
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
return { final map = <String, dynamic>{};
"uid": id, map['client_id'] = clientId;
"name": userName, map['client_name'] = clientName;
"email": email, map['department_id'] = departmentId;
"token": token, map['department_name'] = departmentName;
"phone": phoneNumber, map['message'] = message;
"whatsapp": whatsApp, map['username'] = username;
"client": hospital?.id, map['userID'] = userID;
"client_name": hospital?.name, map['email'] = email;
"department": department?.id, map['password'] = password;
"department_name": department?.name, map['token'] = token;
"password": password, map['roles'] = roles;
"picture": image, if (userRoles != null) {
"active": isActive ? 1 : 0, map['userRoles'] = userRoles.map((v) => v.toJson()).toList();
"role": type == UsersTypes.engineer ? "field_engineer" : "normal_user", }
// "token":token, pass is token map['tokenlife'] = tokenlife;
}; map['isAuthenticated'] = isAuthenticated;
map['hasError'] = hasError;
map['profilePhotoName'] = profilePhotoName;
map['id'] = id;
map['userName'] = userName;
map['normalizedUserName'] = normalizedUserName;
map['normalizedEmail'] = normalizedEmail;
map['emailConfirmed'] = emailConfirmed;
map['passwordHash'] = passwordHash;
map['securityStamp'] = securityStamp;
map['concurrencyStamp'] = concurrencyStamp;
map['phoneNumber'] = phoneNumber;
map['phoneNumberConfirmed'] = phoneNumberConfirmed;
map['twoFactorEnabled'] = twoFactorEnabled;
map['lockoutEnd'] = lockoutEnd;
map['lockoutEnabled'] = lockoutEnabled;
map['accessFailedCount'] = accessFailedCount;
return map;
} }
factory User.fromJson(Map<String, dynamic> parsedJson) { User.fromJson(dynamic json) {
UsersTypes type; clientId = json['client_id'];
switch (parsedJson["role"]) { clientName = json['client_name'];
case "field_engineer": if (json['department_id'] != null) {
type = UsersTypes.engineer; departmentId = [];
break; json['department_id'].forEach((v) {
default: departmentId.add(v);
type = UsersTypes.normal_user; });
break;
} }
return User( if (json['department_name'] != null) {
id: parsedJson["uid"], departmentId = [];
userName: parsedJson["name"] ?? parsedJson["title"], json['department_name'].forEach((v) {
email: parsedJson["mail"] ?? parsedJson["email"], departmentId.add(v);
hospital: Hospital(id: parsedJson["client"], name: parsedJson["client_name"]), });
department: Department( }
id: parsedJson["department"], message = json['message'];
name: parsedJson["department_name"], username = json['username'];
), userID = json['userID'];
image: parsedJson["picture"], email = json['email'];
phoneNumber: parsedJson["phone"], password = json['password'];
whatsApp: parsedJson["whatsapp"], token = json['token'];
token: parsedJson["token"], roles = json['roles'];
isActive: parsedJson["active"] == "1", if (json['userRoles'] != null) {
type: type); userRoles = [];
json['userRoles'].forEach((v) {
userRoles.add(UserRoles.fromJson(v));
});
}
tokenlife = json['tokenlife'];
isAuthenticated = json['isAuthenticated'];
hasError = json['hasError'];
profilePhotoName = json['profilePhotoName'];
id = json['id'];
userName = json['userName'];
normalizedUserName = json['normalizedUserName'];
normalizedEmail = json['normalizedEmail'];
emailConfirmed = json['emailConfirmed'];
passwordHash = json['passwordHash'];
securityStamp = json['securityStamp'];
concurrencyStamp = json['concurrencyStamp'];
phoneNumber = json['phoneNumber'];
phoneNumberConfirmed = json['phoneNumberConfirmed'];
twoFactorEnabled = json['twoFactorEnabled'];
lockoutEnd = json['lockoutEnd'];
lockoutEnabled = json['lockoutEnabled'];
accessFailedCount = json['accessFailedCount'];
}
}
class UserRoles {
UserRoles({
this.id,
this.name,
this.value,
});
UserRoles.fromJson(dynamic json) {
id = json['id'];
name = json['name'];
value = json['value'];
}
String id;
String name;
String value;
UserRoles copyWith({
String id,
String name,
String value,
}) =>
UserRoles(
id: id ?? this.id,
name: name ?? this.name,
value: value ?? this.value,
);
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['id'] = id;
map['name'] = name;
map['value'] = value;
return map;
} }
} }

@ -1,20 +1,23 @@
import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/pantry/pentry.dart';
class Visit{ class Visit {
String id; int id;
String serialNumber; String serialNumber;
String expectDate; String expectDate;
String actualDate; String actualDate;
String hospitalId; String createdOn;
int hospitalId;
String hospitalName; String hospitalName;
String deviceId; int deviceId;
int ppmScheduleId;
String deviceSerialNumber; String deviceSerialNumber;
String deviceArabicName; String deviceArabicName;
String deviceEnglishName; String deviceEnglishName;
String employId; String employId;
String employName; String employName;
String modelAndBrand; String modelAndBrand;
String contactStatus; Pentry pentry;
Lookup status; Lookup status;
String assignTo; String assignTo;
String deviceNumber; String deviceNumber;
@ -22,6 +25,7 @@ class Visit{
Visit({ Visit({
this.id, this.id,
this.ppmScheduleId,
this.serialNumber, this.serialNumber,
this.hospitalId, this.hospitalId,
this.hospitalName, this.hospitalName,
@ -35,35 +39,44 @@ class Visit{
this.actualDate, this.actualDate,
this.status, this.status,
this.modelAndBrand, this.modelAndBrand,
this.contactStatus, this.pentry,
this.images, this.images,
this.assignTo, this.assignTo,
this.deviceNumber, this.deviceNumber,
this.createdOn,
}); });
factory Visit.fromJson(Map<String,dynamic> parsedJson){ factory Visit.fromJson(Map<String, dynamic> parsedJson) {
List<String> images = [];
if (parsedJson["vAttachments"] is List) {
List list = parsedJson["vAttachments"];
images = list.map((e) => e["attachmentURL"].toString()).toList();
}
return Visit( return Visit(
id: parsedJson["nid"], id: parsedJson["id"],
serialNumber: parsedJson["title"], serialNumber: parsedJson["visitCode"],
hospitalId: parsedJson["client"], ppmScheduleId: parsedJson["ppmScheduleId"],
deviceNumber: parsedJson["device_no"], hospitalId: parsedJson["siteId"],
hospitalName: parsedJson["client_name"], deviceNumber: parsedJson["assetNumber"],
deviceId: parsedJson["medical_equipment_nid"], hospitalName: parsedJson["siteName"],
deviceSerialNumber: parsedJson["medical_equipment"], deviceId: parsedJson["assetId"],
deviceEnglishName: parsedJson["equipment_english_name"], deviceSerialNumber: parsedJson["assetSerialNo"],
deviceArabicName: parsedJson["equipment_arabic_name"], deviceEnglishName: parsedJson["assetName"],
employId: parsedJson["assigned_employee"], deviceArabicName: parsedJson["assetName"],
employName: parsedJson["assigned_employee_name"], employId: parsedJson["assignedEmployeeId"].toString(),
expectDate: parsedJson["expected_date"], employName: parsedJson["assignedEmployeeName"],
actualDate: parsedJson["actual_date"], expectDate: parsedJson["expectedDate"].toString().split("T").first,
modelAndBrand: parsedJson["mode_brand"], actualDate: parsedJson["actualDate"].toString().split("T").first,
contactStatus: parsedJson["contactStatus"], modelAndBrand: "${parsedJson["modelName"]} / ${parsedJson["manufacturerName"]}",
images: List<String>.from(parsedJson["images"] ?? []), // contactStatus: parsedJson["contactStatus"],
images: images,
status: Lookup( status: Lookup(
id: int.tryParse(parsedJson["status"] ?? "-1"), // actual value (0,1,2) id: parsedJson["visitStatusId"], // actual value (0,1,2)
label: parsedJson["status_value"] // text value name: parsedJson["visitStatusName"] // text value
), ),
assignTo: parsedJson["assigned_to"], assignTo: parsedJson["assignedToName"],
pentry: Pentry.fromMap(parsedJson),
createdOn: parsedJson['createdOn'],
); );
} }
} }

@ -1,45 +1,45 @@
import 'package:test_sa/models/engineer.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/models/visits/visit.dart';
class VisitsGroup{ class VisitsGroup {
String userId; // String userId;
String workingHours; // String workingHours;
String travelingHours; // String travelingHours;
String jobSheetNumber; // String jobSheetNumber;
String image; // String image;
Lookup status; // Lookup status;
Lookup taskStatus; // Lookup taskStatus;
DateTime date; // DateTime date;
Engineer engineer;
List<Visit> visits; List<Visit> visits;
VisitsGroup({ VisitsGroup({
this.userId, // this.userId,
this.status, // this.status,
this.date, // this.date,
this.jobSheetNumber, // this.jobSheetNumber,
this.travelingHours, // this.travelingHours,
this.workingHours, // this.workingHours,
this.visits, this.visits,
this.image, this.engineer,
this.taskStatus, // this.image,
// this.taskStatus,
}); });
Map<String,String> toJson(){ Map<String, dynamic> toJson() {
Map<String,String> jsonObject = {}; Map<String, dynamic> jsonObject = {};
jsonObject["nids"] = visits.map((e) => e.id).toList().join(','); jsonObject["ids"] = visits.map((e) => e.id).toList();
if(status != null) jsonObject["status"] = status.id.toString(); jsonObject["assignedEmployeeId"] = engineer?.id;
if(date != null) jsonObject["date"] = date.toString().split(" ").first; // if(status != null) jsonObject["taskStatusId"] = status.id.toString();
if(jobSheetNumber != null && jobSheetNumber.isNotEmpty) // if(date != null) jsonObject["actualDate"] = date.toIso8601String();
jsonObject["job_sheet_no"] = jobSheetNumber; // if(jobSheetNumber != null && jobSheetNumber.isNotEmpty)
if(travelingHours != null && travelingHours.isNotEmpty) // jsonObject["jobSheetNo"] = jobSheetNumber;
jsonObject["traveling_hours"] = travelingHours; // if(travelingHours != null && travelingHours.isNotEmpty)
if(workingHours != null && workingHours.isNotEmpty) // jsonObject["travelingHours"] = travelingHours;
jsonObject["working_hours"] = workingHours; // if(workingHours != null && workingHours.isNotEmpty)
if(image != null) jsonObject["image"] = image; // jsonObject["workingHours"] = workingHours;
if(taskStatus != null) jsonObject["task_status"] = taskStatus.id.toString(); // if(image != null) jsonObject["image"] = image;
// if(taskStatus != null) jsonObject["task_status"] = taskStatus.id.toString();
return jsonObject; return jsonObject;
} }
}
}

@ -1,32 +1,41 @@
class VisitsSearch{ import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/lookup.dart';
class VisitsSearch {
String deviceSerialNumber; String deviceSerialNumber;
String hospitalName; String deviceName;
String deviceNumber;
Hospital hospital;
String brand; String brand;
String model; Lookup model;
String contactStatus; Lookup contactStatus;
DateTime expectedDateFrom; DateTime expectedDateFrom;
DateTime expectedDateTo; DateTime expectedDateTo;
DateTime actualDateFrom; DateTime actualDateFrom;
DateTime actualDateTo; DateTime actualDateTo;
int statusValue; Lookup statusValue;
bool mostRecent;
VisitsSearch({ VisitsSearch({
this.deviceSerialNumber, this.deviceSerialNumber,
this.statusValue, this.statusValue,
this.brand, this.brand,
this.hospitalName, this.hospital,
this.actualDateTo, this.actualDateTo,
this.actualDateFrom, this.actualDateFrom,
this.model, this.model,
this.contactStatus, this.contactStatus,
this.expectedDateFrom, this.expectedDateFrom,
this.expectedDateTo, this.expectedDateTo,
this.deviceNumber,
this.deviceName,
this.mostRecent,
}); });
fromSearch(VisitsSearch newSearch){ fromSearch(VisitsSearch newSearch) {
deviceSerialNumber = newSearch.deviceSerialNumber; deviceSerialNumber = newSearch.deviceSerialNumber;
brand = newSearch.brand; brand = newSearch.brand;
hospitalName = newSearch.hospitalName; hospital = newSearch.hospital;
actualDateTo = newSearch.actualDateTo; actualDateTo = newSearch.actualDateTo;
actualDateFrom = newSearch.actualDateFrom; actualDateFrom = newSearch.actualDateFrom;
model = newSearch.model; model = newSearch.model;
@ -34,50 +43,53 @@ class VisitsSearch{
expectedDateFrom = newSearch.expectedDateFrom; expectedDateFrom = newSearch.expectedDateFrom;
expectedDateTo = newSearch.expectedDateTo; expectedDateTo = newSearch.expectedDateTo;
statusValue = newSearch.statusValue; statusValue = newSearch.statusValue;
mostRecent = newSearch.mostRecent;
deviceNumber = newSearch.deviceNumber;
deviceName = newSearch.deviceName;
} }
String toSearchString(){ Map<String, dynamic> toMap() {
String _search = ""; Map<String, dynamic> _search = {};
if(deviceSerialNumber != null && deviceSerialNumber.isNotEmpty){ if (deviceSerialNumber != null && deviceSerialNumber.isNotEmpty) {
_search += "&sn_id=$deviceSerialNumber"; _search["assetId"] = deviceSerialNumber;
} }
if(hospitalName != null && hospitalName.isNotEmpty){ if (hospital != null) {
_search += "&client=$hospitalName"; _search["siteId"] = hospital.id;
} }
if(brand != null && brand.isNotEmpty){ if (brand != null && brand.isNotEmpty) {
_search += "&brand=$brand"; // todo get new key
_search[""] = brand;
} }
if(model != null && model.isNotEmpty){ if (model != null) {
_search += "&model=$model"; _search["modelId"] = model.id;
} }
if(expectedDateFrom != null){ if (expectedDateFrom != null) {
_search += "&expected_date_from=${expectedDateFrom.millisecondsSinceEpoch ~/ 1000}"; _search["expectedDateFrom"] = expectedDateFrom.toIso8601String();
} }
if(expectedDateTo != null){ if (expectedDateTo != null) {
_search += "&expected_date_to=${expectedDateTo.millisecondsSinceEpoch~/1000}"; _search["expectedDateTo"] = expectedDateTo.toIso8601String();
} }
if(actualDateFrom != null){ if (actualDateFrom != null) {
_search += "&actual_date_from=${actualDateFrom.millisecondsSinceEpoch ~/ 1000}"; _search["actualDateFrom"] = actualDateFrom.toIso8601String();
} }
if(actualDateTo != null){ if (actualDateTo != null) {
_search += "&actual_date_to=${actualDateTo.millisecondsSinceEpoch~/1000}"; _search["actualDateTo"] = actualDateTo.toIso8601String();
} }
if(statusValue != null){ if (statusValue != null) {
_search += "&status=$statusValue"; _search["visitStatusId"] = statusValue.id;
} }
if(contactStatus != null){ if (contactStatus != null) {
_search += "&assigned_to=$contactStatus"; _search["assignedToId"] = contactStatus.id;
} }
return _search; return _search;
} }
} }

@ -1,41 +1,50 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/models/lookup.dart';
class AColors { class AColors {
AColors._(); AColors._();
static const Color white = Color(0xffffffff);
static const Color black = Color(0xff000000); static const Color white = Color(0xffffffff);
static const Color grey3A = Color(0xff2e303a); static const Color black = Color(0xff000000);
static const Color grey = Color(0xffe1e7e7); static const Color grey3A = Color(0xff2e303a);
static const green = Colors.green; static const Color grey = Color(0xffe1e7e7);
static const Color orange = Colors.orange; static const green = Colors.green;
static const Color deepOrange = Colors.deepOrangeAccent; static const Color orange = Colors.orange;
static const Color red = Colors.red; static const Color deepOrange = Colors.deepOrangeAccent;
static const Color deepRed = Color(0xFFD32F2F); static const Color red = Colors.red;
static const Color deepRed = Color(0xFFD32F2F);
static const Color scaffoldBackgroundColor = Color(0xffffffff); static const Color scaffoldBackgroundColor = Color(0xffffffff);
static const Color secondaryColor = Color(0xff111427); static const Color secondaryColor = Color(0xff111427);
static const Color primaryColor = Color(0xff5bb0da); static const Color primaryColor = Color(0xff5bb0da);
static const Color cyan = Color(0xff4A8DB7); static const Color cyan = Color(0xff4A8DB7);
static const Color onPrimaryColor = Color(0xffffffff); static const Color onPrimaryColor = Color(0xffffffff);
static Color inputFieldBackgroundColor = Color(0xfff5f5f5); static Color inputFieldBackgroundColor = Color(0xfff5f5f5);
static Color greyEF = Color(0xffEFEFEF); static Color greyEF = Color(0xffEFEFEF);
static Color getRequestStatusColor(int id){ static Color getRequestStatusColor(int id) {
switch(id){ switch (id) {
case 4: return AColors.deepRed; case 4:
case 6: return AColors.green; return AColors.deepRed;
case 5: return AColors.orange; case 6:
case 8: return AColors.green; return AColors.green;
case 9: return AColors.orange; case 5:
default : return AColors.grey; return AColors.orange;
case 8:
return AColors.green;
case 9:
return AColors.orange;
default:
return AColors.grey;
} }
} }
static Color getGasStatusColor(int id){ static Color getGasStatusColor(int id) {
switch(id){ switch (id) {
case 0: return AColors.orange; case 0:
case 1: return AColors.green; return AColors.orange;
default : return AColors.grey; case 1:
return AColors.green;
default:
return AColors.grey;
} }
} }
} }

@ -1,39 +1,31 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class AppStyle { class AppStyle {
AppStyle._(); AppStyle._();
static const double borderRadius = 10; static const double borderRadius = 10;
static const BoxShadow boxShadow = BoxShadow( static const BoxShadow boxShadow = BoxShadow(color: Colors.black26, blurRadius: 3, offset: Offset(0, 2));
color: Colors.black26,
blurRadius: 3,
offset: Offset(0,2)
);
static double getBorderRadius(BuildContext context){ static double getBorderRadius(BuildContext context) {
return borderRadius * getScaleFactor(context); return borderRadius * getScaleFactor(context);
} }
static double getScaleFactor(BuildContext context){ static double getScaleFactor(BuildContext context) {
return MediaQuery.of(context).orientation == Orientation.portrait return MediaQuery.of(context).orientation == Orientation.portrait
? MediaQuery.of(context).size.width/(360) > 1.5 ? MediaQuery.of(context).size.width / (360) > 1.5
? 1.5 : MediaQuery.of(context).size.width/(360) ? 1.5
: MediaQuery.of(context).size.height/(360) > 1.5 : MediaQuery.of(context).size.width / (360)
? 1.5 : MediaQuery.of(context).size.height/(360); : MediaQuery.of(context).size.height / (360) > 1.5
? 1.5
: MediaQuery.of(context).size.height / (360);
} }
static BorderRadius getCardBorder(BuildContext context){ static BorderRadius getCardBorder(BuildContext context) {
return BorderRadius.only( return BorderRadius.only(
topRight: Radius.circular( topRight: Radius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
AppStyle.borderRadius * AppStyle.getScaleFactor(context) topLeft: Radius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
), bottomRight: Radius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
topLeft: Radius.circular(
AppStyle.borderRadius * AppStyle.getScaleFactor(context)
),
bottomRight: Radius.circular(
AppStyle.borderRadius * AppStyle.getScaleFactor(context)
),
); );
} }
}
}

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

Loading…
Cancel
Save