diff --git a/android/app/build.gradle b/android/app/build.gradle
index e55e2b22..4f0659df 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -54,22 +54,25 @@ android {
}
signingConfigs {
- release {
- keyAlias keystoreProperties['keyAlias']
- keyPassword keystoreProperties['keyPassword']
- storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
- storePassword keystoreProperties['storePassword']
- }
+// release {
+// keyAlias keystoreProperties['keyAlias']
+// keyPassword keystoreProperties['keyPassword']
+// storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
+// storePassword keystoreProperties['storePassword']
+// }
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
- minifyEnabled true
- shrinkResources true
- signingConfig signingConfigs.release
+ signingConfig signingConfigs.debug
}
+// release {
+// minifyEnabled true
+// shrinkResources true
+// signingConfig signingConfigs.release
+// }
}
}
diff --git a/assets/images/cloud_logo.png b/assets/images/cloud_logo.png
new file mode 100644
index 00000000..a1f1aaed
Binary files /dev/null and b/assets/images/cloud_logo.png differ
diff --git a/assets/images/doc.png b/assets/images/doc.png
new file mode 100644
index 00000000..e7418db8
Binary files /dev/null and b/assets/images/doc.png differ
diff --git a/assets/images/excel.png b/assets/images/excel.png
new file mode 100644
index 00000000..470e1be5
Binary files /dev/null and b/assets/images/excel.png differ
diff --git a/assets/images/pdf.png b/assets/images/pdf.png
new file mode 100644
index 00000000..3102284f
Binary files /dev/null and b/assets/images/pdf.png differ
diff --git a/assets/images/sub_workorder_icon.svg b/assets/images/sub_workorder_icon.svg
new file mode 100644
index 00000000..4400caae
--- /dev/null
+++ b/assets/images/sub_workorder_icon.svg
@@ -0,0 +1,7 @@
+
diff --git a/assets/subtitles/ar_subtitle.json b/assets/subtitles/ar_subtitle.json
index ada5f900..e419c327 100644
--- a/assets/subtitles/ar_subtitle.json
+++ b/assets/subtitles/ar_subtitle.json
@@ -3,8 +3,6 @@
"failed_request_message": "الفشل في إكمال الطلب",
"successful_request_message": "تم إكمال الطلب بنجاح",
"request_lock_message": "انتظر حتى إكمال الطلب",
-
-
"cancel": "إلغاء",
"confirm": "تاكيد",
"done": "تم",
@@ -13,7 +11,6 @@
"sign_out": "تسجيل الخروج",
"logout_alert": "هل انت متاكد من رغبتك في تسجيل الخروج؟",
"language": "اللغة",
-
"name": "الاسم",
"email": "البريد الالكتروني",
"phone_number": "رقم الهاتف",
@@ -29,7 +26,6 @@
"confirm_password_validate_message": "كلمة المرور و تاكيد كلمة المرور غير متطابقان",
"phone_number_validate_message": "رقم الهاتف غير صالح",
"terms_and_conditions_validate_message": "موافقة علي الشروط والاحكام مطاوبة",
-
"update": "تحديث",
"step": "خطوة",
"forget_password_with_mark": "نسيت كلمة المرور؟",
@@ -59,7 +55,6 @@
"title_not_found": "لا يوجد عنوان",
"title_validate_message": "العنوان مطلوب",
"url_not_found": "لا يوجد رابط",
-
"date": "تاريخ",
"status": "الحالة",
"code": "كود",
@@ -74,10 +69,9 @@
"details": "تفاصيل",
"device": "جهاز",
"deviceArName": "اسم الجهاز بعربي",
- "deviceEnName": "اسم الجهاز بالانجليزية",
+ "deviceName": "اسم الجهاز",
"deviceImages": "صور الجهاز",
"deviceModel": "مركة الجهاز",
- "deviceName": "اسم الجهاز",
"deviceRequired": "الجهاز مطلوب",
"deviceSN": "رقم تسلسلي للجهاز",
"engineerName": "اسم المهندس",
@@ -135,9 +129,7 @@
"visitDate": "تاريخ الزيارة",
"whatsApp": "واتساب",
"workPerformed": "العمل انجز",
-
"actualDate": "تاريخ الفعلي",
- "done": "تم الانتهاء",
"expectDate": "التاريخ المتوقع",
"images": "الصور",
"imagesRequired": "الصور مطلوبة",
@@ -166,7 +158,6 @@
"requiredImage": "الصورة مطلوبة",
"taskStatus": "حالة الطلب",
"activationAlert": "الحساب قيد المراجعة يرجى الانتظار حتى يتم تفعيله",
-
"attachImage": "ارفق صورة",
"callLastSituation": "اخر موقف للطلب",
"customer": "العميل",
@@ -176,17 +167,40 @@
"newServiceReport": "تقرير خدمة جديد",
"number": "رقم",
"operatingHours": "ساعات العمل",
- "partNumber": "رقم القطعة",
+ "partNumberName": "رقم/اسم القطعة",
"quantity": "كمية",
"reasons": "الاسباب",
"reportStatus": "حالة التقرير",
"reportType": "نوع التقرير",
"callId": "رقم الطلب",
"requiredWord": "مطلوب",
- "serviceType": "نوع الخدمة",
+ "AssetType": "نوع الاصل",
"workPreformed": "العمل المنجز",
"alert": "تنبيه",
"duplicateAlert": "تنبيه التكرار",
"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": "ملفات الجهاز"
}
\ No newline at end of file
diff --git a/assets/subtitles/en_subtitle.json b/assets/subtitles/en_subtitle.json
index 2ce29fb9..33ff94b5 100644
--- a/assets/subtitles/en_subtitle.json
+++ b/assets/subtitles/en_subtitle.json
@@ -3,7 +3,6 @@
"failed_request_message": "Failed to complete request",
"successful_request_message": "Request complete successfully",
"request_lock_message": "Wait until your request complete",
-
"cancel": "Cancel",
"confirm": "Confirm",
"done": "Done",
@@ -12,7 +11,6 @@
"sign_out": "Sign Out",
"logout_alert": "Are you sure you want to Sign Out?",
"language": "English",
-
"name": "Name",
"email": "Email",
"phone_number": "Phone Number",
@@ -28,7 +26,6 @@
"confirm_password_validate_message": "Password and confirm password not match",
"phone_number_validate_message": "Not valid phone number",
"terms_and_conditions_validate_message": "Accept terms and conditions is required",
-
"update": "Update",
"step": "Step",
"forget_password_with_mark": "Forget Password?",
@@ -58,7 +55,6 @@
"title_not_found": "Title not found",
"title_validate_message": "Title Can't be empty",
"url_not_found": "URL not found",
-
"date": "Date",
"status": "Status",
"code": "Code",
@@ -73,12 +69,11 @@
"details": "Details",
"device": "Asset",
"deviceArName": "Asset Ar Name",
- "deviceEnName": "Asset En Name",
+ "deviceName": "Asset Name",
"deviceImages": "Asset Images",
"deviceModel": "Asset Model",
- "deviceName": "Asset Name",
"deviceRequired": "Asset Required",
- "deviceSN": "Asset SN",
+ "deviceSN": "Asset Serial Number",
"engineerName": "Engineer Name",
"engineerPhone": "Engineer Phone",
"facebook": "facebook",
@@ -134,9 +129,7 @@
"visitDate": "Visit Date",
"whatsApp": "WhatsApp",
"workPerformed": "Work Performed",
-
"actualDate": "Actual Date",
- "done": "Done",
"expectDate": "Expect Date",
"images": "Images",
"imagesRequired": "Images Required",
@@ -165,7 +158,6 @@
"requiredImage": "Image Required",
"taskStatus": "Task Status",
"activationAlert": "Account under reviewing please wait until be activated",
-
"attachImage": "Attach Image",
"callLastSituation": "Call's Last Situation",
"customer": "Customer",
@@ -175,18 +167,40 @@
"newServiceReport": "New Work Order",
"number": "Number",
"operatingHours": "Operating Hours",
- "partNumber": "Part Number",
+ "partNumberName": "Part Number/Name",
"quantity": "Quantity",
"reasons": "Reasons",
"reportStatus": "Report Status",
"reportType": "Report Type",
"callId": "Call Id",
"requiredWord": "required",
- "serviceType": "Service Type",
+ "AssetType": "Asset Type",
"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",
"duplicateAlert": "Duplicate Alert",
"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"
}
\ No newline at end of file
diff --git a/ios/Podfile b/ios/Podfile
index 2c068c40..2dff4172 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -38,4 +38,16 @@ post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
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
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
deleted file mode 100644
index cbf76fea..00000000
--- a/ios/Podfile.lock
+++ /dev/null
@@ -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
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index a5559bc2..471a4caa 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 51;
+ objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
@@ -160,6 +160,7 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
+ BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1300;
ORGANIZATIONNAME = "";
TargetAttributes = {
@@ -227,6 +228,7 @@
};
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -258,6 +260,7 @@
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -308,6 +311,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
@@ -361,6 +365,7 @@
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
@@ -439,16 +444,12 @@
"-framework",
"\"package_info\"",
"-framework",
- "\"path_provider_ios\"",
- "-framework",
"\"permission_handler_apple\"",
"-framework",
"\"qr_code_scanner\"",
"-framework",
"\"share\"",
"-framework",
- "\"shared_preferences_ios\"",
- "-framework",
"\"speech_to_text\"",
"-framework",
"\"sqflite\"",
@@ -470,6 +471,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
@@ -527,6 +529,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
@@ -582,6 +585,7 @@
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
@@ -660,16 +664,12 @@
"-framework",
"\"package_info\"",
"-framework",
- "\"path_provider_ios\"",
- "-framework",
"\"permission_handler_apple\"",
"-framework",
"\"qr_code_scanner\"",
"-framework",
"\"share\"",
"-framework",
- "\"shared_preferences_ios\"",
- "-framework",
"\"speech_to_text\"",
"-framework",
"\"sqflite\"",
@@ -693,6 +693,7 @@
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
@@ -771,16 +772,12 @@
"-framework",
"\"package_info\"",
"-framework",
- "\"path_provider_ios\"",
- "-framework",
"\"permission_handler_apple\"",
"-framework",
"\"qr_code_scanner\"",
"-framework",
"\"share\"",
"-framework",
- "\"shared_preferences_ios\"",
- "-framework",
"\"speech_to_text\"",
"-framework",
"\"sqflite\"",
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 339d7ae2..4d661d08 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -7,7 +7,7 @@
CFBundleDevelopmentRegion
$(DEVELOPMENT_LANGUAGE)
CFBundleDisplayName
- Atoms
+ Atoms SA
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
@@ -15,7 +15,7 @@
CFBundleInfoDictionaryVersion
6.0
CFBundleName
- Atoms
+ Atoms SA
CFBundlePackageType
APPL
CFBundleShortVersionString
@@ -36,8 +36,10 @@
This app requires permission to access photo gallery to allow user to attach images
NSSpeechRecognitionUsageDescription
This app requires permission for Speech Recognition for speech to text functionality.
- UIApplicationSupportsIndirectInputEvents
-
+ LSSupportsOpeningDocumentsInPlace
+
+ UISupportsDocumentBrowser
+
UIBackgroundModes
fetch
@@ -62,5 +64,7 @@
UIViewControllerBasedStatusBarAppearance
+ UIApplicationSupportsIndirectInputEvents
+
diff --git a/lib/controllers/api_routes/api_manager.dart b/lib/controllers/api_routes/api_manager.dart
new file mode 100644
index 00000000..77adc8b5
--- /dev/null
+++ b/lib/controllers/api_routes/api_manager.dart
@@ -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 get _headers => {
+ 'Content-Type': 'application/json',
+ if (user != null) 'Authorization': 'Bearer ${user.token}',
+ };
+
+ static ApiManager instance = ApiManager._();
+
+ User user;
+
+ Future get(
+ String url, {
+ Map 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) {
+ final message = jsonDecode(response.body)["message"];
+ if (message != null && message.toString().isNotEmpty && enableToastMessage) {
+ Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG);
+ }
+ }
+
+ return response;
+ }
+
+ Future post(
+ String url, {
+ Map headers,
+ @required Map 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) {
+ final message = jsonDecode(response.body)["message"];
+ if (message != null && message.toString().isNotEmpty) {
+ Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG);
+ }
+ }
+
+ return response;
+ }
+
+ Future put(
+ String url, {
+ Map headers,
+ @required Map 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) {
+ final message = jsonDecode(response.body)["message"];
+ if (message != null && message.toString().isNotEmpty) {
+ Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG);
+ }
+ }
+ return response;
+ }
+
+ Future multiPart(
+ String url, {
+ Map headers,
+ @required Map body,
+ @required List> files,
+ }) async {
+ Map _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) {
+ final message = jsonDecode(response.body)["message"];
+ if (message != null && message.toString().isNotEmpty) {
+ Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG);
+ }
+ }
+ return response;
+ }
+}
diff --git a/lib/controllers/http_status_manger/http_status_manger.dart b/lib/controllers/api_routes/http_status_manger.dart
similarity index 79%
rename from lib/controllers/http_status_manger/http_status_manger.dart
rename to lib/controllers/api_routes/http_status_manger.dart
index 012a9a23..f9405f62 100644
--- a/lib/controllers/http_status_manger/http_status_manger.dart
+++ b/lib/controllers/api_routes/http_status_manger.dart
@@ -1,40 +1,39 @@
-import 'package:test_sa/models/subtitle.dart';
import 'package:meta/meta.dart';
+import 'package:test_sa/models/subtitle.dart';
-class HttpStatusManger{
+class HttpStatusManger {
static String getStatusMessage({
@required int status,
@required Subtitle subtitle,
String messageFor400,
String messageFor200,
- }){
- if(status == null)
+ }) {
+ if (status == null)
// no status code - code error no need for subtitle
return "careful null status";
- if(status == -1)
+ if (status == -1)
// client's request in process
return subtitle.currentlyServiceNotAvailable;
- if(status == -2){
+ if (status == -2) {
// client's request in process
return subtitle.waitUntilYourRequestComplete;
- }else if(status >= 200 && status < 300){
+ } else if (status >= 200 && status < 300) {
// client's request was successfully received
return messageFor200 ?? subtitle.requestCompleteSuccessfully;
- } else if(status >= 400 && status < 500){
+ } else if (status >= 400 && status < 500) {
// client's request have error
- switch(status){
+ switch (status) {
case 400:
return messageFor400 ?? subtitle.failedToCompleteRequest;
default:
return subtitle.failedToCompleteRequest;
}
- } else if(status >= 500){
+ } else if (status >= 500) {
// server error
return subtitle.currentlyServiceNotAvailable;
} else {
// no error match so return default error
return subtitle.failedToCompleteRequest;
}
-
}
-}
\ No newline at end of file
+}
diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart
index f2e26591..a587fb7f 100644
--- a/lib/controllers/api_routes/urls.dart
+++ b/lib/controllers/api_routes/urls.dart
@@ -1,67 +1,105 @@
-class URLs{
+class URLs {
URLs._();
+
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
- static const login = "/handle/user/login"; // post
- static const register = "/handle/create/user"; // post
- static const updateProfile = "/update/user/profile"; // post
- static const getHospitals = "/handle/return/all/clients"; // get
- static const getDepartments = "/handle/return/all/departments"; // get
- static const getEquipment = "/handle/return/all/client/equipments"; // get ?client=208051
- static const getServiceRequests = "/return/user/calls"; // get
-
- static const getPreventiveMaintenanceVisits = "/return/user/calibrations"; // get
- static const updatePreventiveMaintenanceVisits = "/update/user/calibrations"; // get
-
- static const getRegularVisits = "/return/user/ppm"; // get
- static const updateRegularVisits = "/update/user/ppm"; // get
-
- static const getSingleServiceRequest = "/return/call/information"; // get
- static const getNotifications = "/return/user/notification"; // get
- static const getRecentNotifications = "/return/user/recent/notification"; // get
- static const createRequest = "/handle/create/request"; // get
- static const createReport = "/handle/create/report/issue"; // get
- static const updateRequestDate = "/handle/update/request"; // get
+ static get login => "$_baseUrl/MobileAuth/LoginIntegration"; // post
+ static get register => "$_baseUrl/handle/create/user"; // post
+ static get updateProfile => "$_baseUrl/update/user/profile"; // post
+ static get getHospitals => "$_baseUrl/Customer/GetCustomers"; // get
+ static get getHospitalsAutoComplete => "$_baseUrl/Customer/GetCustomersAutoComplete"; // get
+
+ static get getDepartments => "$_baseUrl/Customer/GetDepartmentLookup"; // get
+ static get getEquipment => "$_baseUrl/Asset/GetAssets"; // get ?client=208051
+ static get getModels => "$_baseUrl/ModelDefinition/GetModelDefinitionAsset"; // get ?client=2
+ // 08051
+ static get getServiceRequests => "$_baseUrl/CallRequest/GetCallRequests"; // get
+ static get getServiceRequestById => "$_baseUrl/CallRequest/GetCallRequestById"; // get
+ static get getServiceRequestThrough => "$_baseUrl/Lookups/GetLookup?lookupEnum=603"; // get
+ static get getServiceLoanAvailability => "$_baseUrl/Lookups/GetLookup?lookupEnum=4"; // get
+ static get getServiceFirstAction => "$_baseUrl/Lookups/GetLookup?lookupEnum=700"; // get
+ static get getServiceRequestTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=604"; // get
+ static get getServiceRequestStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=503";
+
+ static get getRepairLocation => "$_baseUrl/Lookups/GetLookup?lookupEnum=504";
+
+ 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
- static const createServiceReport = "/handle/create/service/report"; // get
- static const updateServiceReport = "/handle/update/service/report"; // get
- static const getServiceReport = "/handle/view/service/report"; // get
- static const createDuplicatedReport = "/handle/duplicate/request"; // get
-
- static const getServiceReportReasons = "/return/service/report/reasons"; // get
- static const getServiceReportTypes = "/return/service/report/type"; // get
- static const getServiceReportStatus = "/return/service/report/status"; // get
- static const getServiceReportLastCalls = "/return/call/last/situation"; // get
- static const getServiceTypes = "/return/service/type"; // get
- static const getPartNumber = "/handle/return/all/parts"; // get
- static const getServiceReportPriority = "/return/call/priority/list"; // get
- static const getServiceReportDefectTypes = "/return/call/defect/type/list"; // get
+ static get createServiceReport => "$_baseUrl/WorkOrder/AddWorkOrder"; // get
+ static get updateServiceReport => "$_baseUrl/WorkOrder/UpdateWorkOrder"; // get
+ static get getServiceReport => "$_baseUrl/WorkOrder/GetWorkOrderById"; // get
+ static get createDuplicatedReport => "$_baseUrl/handle/duplicate/request"; // get
+ static get searchWorkOrders => "$_baseUrl/WorkOrder/SearchWorkOrders";
+
+ static get getServiceReportReasons => "$_baseUrl/Lookups/GetLookup?lookupEnum=522"; // get
+ static get getServiceReportTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=501"; // get
+ static get getServiceReportStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=521"; // get
+ static get getServiceReportLastCalls => "$_baseUrl/WorkOrder/GetLookupCallLastSituationBasedOnCase"; // get
+ static get getAssetTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=500"; // get
+ static get getPartNumber => "$_baseUrl/PartCatalog/GetPartAutoComplete"; // 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
- static const getGasTypes = "/return/gas/refill/types"; // get
- static const getGasCylinderSize = "/return/gas/refill/size/cylinder"; // get
- static const getGasStatus = "/return/gas/refill/status"; // get
- static const requestGasRefill = "/create/gas/refill"; // get
- static const updateGasRefill = "/update/gas/refill/"; // get
- static const getGasRefill = "/search/gas/refill"; // get
+ static get getGasTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=606"; // get
+ // todo check edits with backend
+ static get getGasCylinderSize => "$_baseUrl/Lookups/GetLookup?lookupEnum=608"; // get
+ static get getGasCylinderType => "$_baseUrl/Lookups/GetLookup?lookupEnum=607"; // get
+ static get getGasStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=609"; // get
+ static get requestGasRefill => "$_baseUrl/GazRefill/AddGazRefill"; // get
+ static get updateGasRefill => "$_baseUrl/GazRefill/UpdateGazRefill"; // get
+ static get getGasRefill => "$_baseUrl/GazRefill/GetGazRefills"; // get
//device transfer
- static const requestDeviceTransfer = "/create/transfer/asset"; // get
- static const updateDeviceTransfer = "/update/transfer/asset"; // get
- static const getDeviceTransfer = "/search/transfer/asset"; // get
+ static get requestDeviceTransfer => "$_baseUrl/AssetTransfer/AddAssetTransfer"; // get
+ static get updateDeviceTransfer => "$_baseUrl/AssetTransfer/UpdateAssetTransfer"; // get
+ static get getDeviceTransfer => "$_baseUrl/AssetTransfer/GetAssetTransfers"; // get
+ static get getAssetTransferById => "$_baseUrl/AssetTransfer/GetAssetTransferById"; // get
// 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
- static const getPentry = "/return/pentry/details"; // get
- static const updatePentry = "/update/pentry/details"; // get
- static const getPentryTaskStatus = "/return/pentry/task/status"; // get
- static const getPentryVisitStatus = "/return/pentry/visit/status/list"; // get
- static const getPentryStatus = "/return/pentry/status/list"; // get
+ static get getPentry => "$_baseUrl/return/pentry/details"; // get
+ static get updatePentry => "$_baseUrl/Visit/UpdateVisit"; // get
+ static get getPentryTaskStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=403"; // get
+ static get getPentryVisitStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=402"; // get
+ static get getPentryStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=401"; // get
// contacts
- static const getPentryContacts = "/handle/return/all/contacts"; // get
-
-}
\ No newline at end of file
+ static get getPentryContacts => "$_baseUrl/handle/return/all/contacts"; // get
+}
diff --git a/lib/controllers/localization/localization.dart b/lib/controllers/localization/localization.dart
index a6e7fe82..182833e2 100644
--- a/lib/controllers/localization/localization.dart
+++ b/lib/controllers/localization/localization.dart
@@ -4,7 +4,6 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:test_sa/models/subtitle.dart';
-
class AppLocalization {
AppLocalization(this.locale);
@@ -17,23 +16,20 @@ class AppLocalization {
Subtitle get subtitle => _subtitle;
Future load() async {
- String jsonStringValues =
- await rootBundle.loadString('assets/subtitles/${locale.languageCode}_subtitle.json');
+ String jsonStringValues = await rootBundle.loadString('assets/subtitles/${locale.languageCode}_subtitle.json');
_subtitle = Subtitle.fromJson(json.decode(jsonStringValues));
}
// static member to have simple access to the delegate from Material App
- static const LocalizationsDelegate delegate =
- _DemoLocalizationsDelegate();
+ static const LocalizationsDelegate delegate = _DemoLocalizationsDelegate();
}
-class _DemoLocalizationsDelegate
- extends LocalizationsDelegate {
+class _DemoLocalizationsDelegate extends LocalizationsDelegate {
const _DemoLocalizationsDelegate();
@override
bool isSupported(Locale locale) {
- return ['en','ar'].contains(locale.languageCode);
+ return ['en', 'ar'].contains(locale.languageCode);
}
@override
@@ -45,4 +41,4 @@ class _DemoLocalizationsDelegate
@override
bool shouldReload(LocalizationsDelegate old) => false;
-}
\ No newline at end of file
+}
diff --git a/lib/controllers/notification/firebase_notification_manger.dart b/lib/controllers/notification/firebase_notification_manger.dart
index 153d28fa..7e92b918 100644
--- a/lib/controllers/notification/firebase_notification_manger.dart
+++ b/lib/controllers/notification/firebase_notification_manger.dart
@@ -7,8 +7,7 @@ import 'package:test_sa/models/app_notification.dart';
import 'notification_manger.dart';
-class FirebaseNotificationManger{
-
+class FirebaseNotificationManger {
static FirebaseMessaging messaging = FirebaseMessaging.instance;
static String token;
@@ -23,7 +22,7 @@ class FirebaseNotificationManger{
sound: true,
);
- if(settings.authorizationStatus == AuthorizationStatus.authorized){
+ if (settings.authorizationStatus == AuthorizationStatus.authorized) {
token = await messaging.getToken();
}
return token;
@@ -32,7 +31,7 @@ class FirebaseNotificationManger{
static initialized(BuildContext context) async {
await Firebase.initializeApp();
NotificationSettings settings;
- try{
+ try {
settings = await messaging.requestPermission(
alert: true,
announcement: false,
@@ -42,11 +41,11 @@ class FirebaseNotificationManger{
provisional: false,
sound: true,
);
- }catch(error){
+ } catch (error) {
return;
}
- if(settings.authorizationStatus != AuthorizationStatus.authorized){
+ if (settings.authorizationStatus != AuthorizationStatus.authorized) {
return;
}
@@ -56,28 +55,17 @@ class FirebaseNotificationManger{
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
AppNotification notification = AppNotification.fromJson(message.data);
- if(notification.path == null
- || notification.path.isEmpty)
- return;
- Navigator.pushNamed(
- context,
- notification.path,
- arguments: notification.requestId
- );
+ if (notification.path == null || notification.path.isEmpty) return;
+ Navigator.pushNamed(context, notification.path, arguments: notification.requestId);
});
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
AppNotification notification = AppNotification.fromJson(message.data);
NotificationManger.showNotification(
- title: message.notification.title,
- subtext: message.notification.body,
- hashcode: int.tryParse(notification.requestId ?? "") ?? 1,
- payload: json.encode(message.data)
- );
+ title: message.notification.title, subtext: message.notification.body, hashcode: int.tryParse(notification.requestId ?? "") ?? 1, payload: json.encode(message.data));
return;
});
}
}
-Future firebaseMessagingBackgroundHandler(RemoteMessage message) async {
-}
\ No newline at end of file
+Future firebaseMessagingBackgroundHandler(RemoteMessage message) async {}
diff --git a/lib/controllers/notification/notification_manger.dart b/lib/controllers/notification/notification_manger.dart
index a568d5d3..3038f784 100644
--- a/lib/controllers/notification/notification_manger.dart
+++ b/lib/controllers/notification/notification_manger.dart
@@ -2,7 +2,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:test_sa/views/app_style/colors.dart';
-class NotificationManger{
+class NotificationManger {
// private constructor to avoid create object
NotificationManger._();
@@ -12,43 +12,26 @@ class NotificationManger{
/// onNotificationPressed action when notification pressed to open tap
/// onIOSNotificationPressed action when notification pressed
/// to open tap in iOS versions older than 10
- static initialisation(
- Function(NotificationResponse) onNotificationPressed,
- DidReceiveLocalNotificationCallback onIOSNotificationPressed
- ) async {
- FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
- FlutterLocalNotificationsPlugin();
+ static initialisation(Function(NotificationResponse) onNotificationPressed, 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
- const AndroidInitializationSettings initializationSettingsAndroid =
- AndroidInitializationSettings('app_icon',);
+ const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings(
+ 'app_icon',
+ );
- final DarwinInitializationSettings initializationSettingsDarwin =
- DarwinInitializationSettings(
- onDidReceiveLocalNotification: onIOSNotificationPressed);
+ final DarwinInitializationSettings initializationSettingsDarwin = DarwinInitializationSettings(onDidReceiveLocalNotification: onIOSNotificationPressed);
- final InitializationSettings initializationSettings = InitializationSettings(
- android: initializationSettingsAndroid,
- iOS: initializationSettingsDarwin,
- macOS: initializationSettingsDarwin);
+ final InitializationSettings initializationSettings = InitializationSettings(android: initializationSettingsAndroid, iOS: initializationSettingsDarwin, macOS: initializationSettingsDarwin);
- await flutterLocalNotificationsPlugin.initialize(
- initializationSettings,
- onDidReceiveNotificationResponse: onNotificationPressed);
+ await flutterLocalNotificationsPlugin.initialize(initializationSettings, onDidReceiveNotificationResponse: onNotificationPressed);
}
// push new notification
- static Future showNotification(
- {
- @required String title,
- @required String subtext,
- @required int hashcode,
- String payload
- }) async {
-
+ static Future showNotification({@required String title, @required String subtext, @required int hashcode, String payload}) async {
const AndroidNotificationDetails androidChannel = AndroidNotificationDetails(
'com.newtrack.testsa',
'Test SA',
- channelDescription:'Push notification service for Test SA',
+ channelDescription: 'Push notification service for Test SA',
importance: Importance.max,
priority: Priority.max,
playSound: true,
@@ -62,8 +45,7 @@ class NotificationManger{
groupKey: 'com.newtrack.testsa',
);
- const DarwinNotificationDetails iosNotificationDetails =
- DarwinNotificationDetails(
+ const DarwinNotificationDetails iosNotificationDetails = DarwinNotificationDetails(
categoryIdentifier: "testSA",
);
@@ -81,5 +63,4 @@ class NotificationManger{
payload: payload,
);
}
-
-}
\ No newline at end of file
+}
diff --git a/lib/controllers/providers/api/departments_provider.dart b/lib/controllers/providers/api/departments_provider.dart
index 0bcd0f02..b5ca6387 100644
--- a/lib/controllers/providers/api/departments_provider.dart
+++ b/lib/controllers/providers/api/departments_provider.dart
@@ -2,13 +2,13 @@ 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/models/department.dart';
-class DepartmentsProvider extends ChangeNotifier{
-
+class DepartmentsProvider extends ChangeNotifier {
//reset provider data
- void reset(){
+ void reset() {
departments = null;
stateCode = null;
}
@@ -18,7 +18,6 @@ class DepartmentsProvider extends ChangeNotifier{
// 500 service not available
int stateCode;
-
// contain user data
// when user not login or register _user = null
List departments;
@@ -28,40 +27,35 @@ class DepartmentsProvider extends ChangeNotifier{
// failed _loading = false
bool isLoading;
-
/// 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 getDepartment (String host) async {
- if(isLoading == true)
- return -2;
+ Future getDepartment(String host) async {
+ if (isLoading == true) return -2;
isLoading = true;
notifyListeners();
Response response;
- try{
- response = await get(
- Uri.parse(host + URLs.getDepartments),
- headers: {
- "Content-Type":"application/json; charset=utf-8"
- }
- );
- } catch(error) {
+ try {
+ response = await ApiManager.instance.post(URLs.getDepartments, body: {
+ "pageSize": 50,
+ // if(title != null && title.isNotEmpty) "name":title,
+ });
+ } catch (error) {
isLoading = false;
stateCode = -1;
notifyListeners();
return -1;
}
stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ if (response.statusCode >= 200 && response.statusCode < 300) {
// 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();
}
isLoading = false;
notifyListeners();
return response.statusCode;
}
-
-}
\ No newline at end of file
+}
diff --git a/lib/controllers/providers/api/device_transfer_provider.dart b/lib/controllers/providers/api/device_transfer_provider.dart
index 1d433c11..cdd685bd 100644
--- a/lib/controllers/providers/api/device_transfer_provider.dart
+++ b/lib/controllers/providers/api/device_transfer_provider.dart
@@ -2,21 +2,33 @@ 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/models/device/device_transfer.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';
-class DeviceTransferProvider extends ChangeNotifier{
+import '../../../models/hospital.dart';
+class DeviceTransferProvider extends ChangeNotifier {
// number of items call in each request
- final pageItemNumber = 50;
+ final pageItemNumber = 12;
+
+ DeviceTransferSearch deviceTransferSearch = DeviceTransferSearch();
//reset provider data
- void reset(){
+ void reset() {
items = null;
nextPage = true;
stateCode = null;
+ hospital = null;
+ building = null;
+ floor = null;
+ department = null;
+ room = "";
+ startDate = null;
+ endDate = null;
}
// state code of current request to defied error message
@@ -35,136 +47,224 @@ class DeviceTransferProvider extends ChangeNotifier{
// failed _loading = false
bool isLoading;
+ Hospital hospital;
+ Buildings building;
+ Floors floor;
+ Departments department;
+ String room;
+ DateTime startDate;
+ DateTime endDate;
+
/// 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 getRequests ({
+ Future getRequests({
@required String host,
@required User user,
}) async {
- if(isLoading == true)
- return -2;
+ if (isLoading == true) return -2;
isLoading = true;
-
- // 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;
+ if (items?.isEmpty ?? true) notifyListeners();
Response response;
- try{
- response = await get(
- Uri.parse(
- "$host${URLs.getDeviceTransfer}?uid=${user.id}"
- "&token=${user.token}&page=${(items?.length ?? 0) ~/pageItemNumber}"
- ),
- headers: {
- "Content-Type":"application/json; charset=utf-8"
- }
+ try {
+ Map body = {};
+ body["pageNumber"] = (items?.length ?? 0) ~/ pageItemNumber + 1;
+ body["pageSize"] = pageItemNumber;
+ body.addAll(deviceTransferSearch.toMap());
+
+ response = await ApiManager.instance.post(
+ URLs.getDeviceTransfer,
+ body: body,
);
+
stateCode = response.statusCode;
- if(stateCode >= 200 && stateCode < 300) {
+ if (stateCode >= 200 && stateCode < 300) {
// client's request was successfully received
- List listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", ""));
- List itemsPage = listJson.map(
- (request) => DeviceTransfer.fromJson(request)).toList();
+ List listJson = json.decode(response.body)["data"];
+ List itemsPage = listJson.map((request) => DeviceTransfer.fromJson(request)).toList();
items ??= [];
- items.addAll(itemsPage);
- if(itemsPage.length == pageItemNumber){
+ items.addAll(itemsPage.toSet().toList());
+ sortMostRecent(items, deviceTransferSearch.mostRecent);
+
+ print(listJson);
+ if (itemsPage.length == pageItemNumber) {
nextPage = true;
- }else{
+ } else {
nextPage = false;
}
}
isLoading = false;
notifyListeners();
return response.statusCode;
-
- } catch(error) {
+ } catch (error) {
isLoading = false;
stateCode = -1;
notifyListeners();
return -1;
}
+ }
+ void sortMostRecent(List 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 createRequest ({
+ Future 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 createRequest({
@required String host,
@required User user,
@required DeviceTransfer model,
}) async {
- Map body = {
- "uid": user.id.toString(),
- "token": user.token ?? "",
- "serial_id": model.device.id ?? "",
- "destination_client": model.receiver.client.id ?? "",
- "destination_department": model.receiver.department.id ?? "",
+ Map body = {
+ "id": 0,
+ "assetId": model.device.id ?? "",
+ "destSiteId": hospital.id ?? "",
+ "destDepartmentId": 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;
- try{
- response = await post(
- Uri.parse(
- host+URLs.requestDeviceTransfer),
- body: body,
- );
+ try {
+ response = await ApiManager.instance.post(URLs.requestDeviceTransfer, body: body);
stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
- if(items != null) {
- items.insert(
- 0,
- DeviceTransfer.fromJson(
- json.decode(utf8.decode(response.bodyBytes))[0]
- )
- );
+ if (response.statusCode >= 200 && response.statusCode < 300) {
+ if (items != null) {
+ items.insert(0, DeviceTransfer.fromJson(json.decode(utf8.decode(response.bodyBytes))[0]));
+ reset();
notifyListeners();
}
}
return response.statusCode;
-
- } catch(error) {
+ } catch (error) {
return -1;
}
-
}
- Future updateRequest ({
+ Future updateRequest({
@required String host,
@required User user,
@required bool isSender,
- @required String requestId,
+ @required int requestId,
@required DeviceTransfer oldModel,
@required DeviceTransferInfo newModel,
}) async {
-
- Map body = {
- "uid": user.id.toString(),
- "token": user.token ?? "",
- "current_user": user.id ?? "",
+ Map body = {
+ "id": oldModel.id,
+ "assetId": oldModel.device.id ?? "",
+ "senderSiteId": oldModel.sender.client.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;
- try{
- response = await post(
- Uri.parse("$host${URLs.updateDeviceTransfer}/$requestId"),
- body: body,
- );
+ try {
+ response = await ApiManager.instance.put(URLs.updateDeviceTransfer, body: body);
+
+ print(response.body);
+ print("${newModel.signature}.png");
+ // response = await post(
+ // Uri.parse("$host${URLs.updateDeviceTransfer}/$requestId"),
+ // body: body,
+ // );
+
stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ if (response.statusCode >= 200 && response.statusCode < 300) {
reset();
// oldModel.fromDeviceTransfer(
// DeviceTransfer.fromJson(
@@ -174,10 +274,8 @@ class DeviceTransferProvider extends ChangeNotifier{
notifyListeners();
}
return response.statusCode;
-
- } catch(error) {
+ } catch (error) {
return -1;
}
-
}
-}
\ No newline at end of file
+}
diff --git a/lib/controllers/providers/api/devices_provider.dart b/lib/controllers/providers/api/devices_provider.dart
index b55d1733..4908b573 100644
--- a/lib/controllers/providers/api/devices_provider.dart
+++ b/lib/controllers/providers/api/devices_provider.dart
@@ -2,33 +2,41 @@ 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/models/device/device.dart';
+import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
-class DevicesProvider extends ChangeNotifier{
-
+class DevicesProvider extends ChangeNotifier {
//reset provider data
- void reset(){
- _devices = null;
+ void reset() {
+ _devices = [];
_stateCode = null;
}
+ final pageItemNumber = 10;
+ bool nextPage = true;
+
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int _stateCode;
+
int get stateCode => _stateCode;
- List _devices;
+ List _devices = [];
+
List get devices => _devices;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
+
bool get isLoading => _loading;
- set isLoading(bool isLoading){
+
+ set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
@@ -38,34 +46,39 @@ class DevicesProvider extends ChangeNotifier{
/// 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 getEquipment ({
+ Future getEquipment({
@required String host,
@required User user,
- @required String hospitalId
+ @required int hospitalId,
+ String serialNumber,
+ String number,
}) async {
- if(_loading == true)
- return -2;
+ if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
- try{
- response = await get(
- Uri.parse(host + URLs.getEquipment+"?client=$hospitalId"),
- headers: {
- "Content-Type":"application/json; charset=utf-8"
- }
- );
- } catch(error) {
+ try {
+ response = await ApiManager.instance.post(URLs.getEquipment, body: {
+ "pageSize": pageItemNumber,
+ "pageNumber": devices.length ~/ pageItemNumber + 1,
+ "siteId": hospitalId,
+ if (serialNumber?.isEmpty == false) "assetSerialNumber": serialNumber,
+ if (number?.isEmpty == false) "assetNo": number,
+ });
+ } catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
_stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
- List equipmentListJson = json.decode(utf8.decode(response.bodyBytes));
- _devices = equipmentListJson.map((device) => Device.fromJson(device)).toList();
+ List equipmentListJson = json.decode(response.body)["data"];
+ _devices.addAll(equipmentListJson.map((device) => Device.fromJson(device, startKeyWithDest: false)).toList());
+ nextPage = true;
+ } else {
+ nextPage = false;
}
_loading = false;
notifyListeners();
@@ -77,66 +90,93 @@ class DevicesProvider extends ChangeNotifier{
/// 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> getDevicesList ({
+ Future> getDevicesList({
@required String host,
@required User user,
- @required String hospitalId,
+ @required int hospitalId,
String serialNumber,
String number,
}) async {
Response response;
- try{
- response = await get(
- Uri.parse("$host${URLs.getEquipment}?client=$hospitalId"
- "${serialNumber?.isEmpty == false ? "&name=$serialNumber" :""}"
- "${number?.isEmpty == false ? "&number=$number" : ""}"
- ),
- );
- List page = [];
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ try {
+ response = await ApiManager.instance.post(URLs.getEquipment, body: {
+ "pageSize": pageItemNumber,
+ "pageNumber": devices.length ~/ pageItemNumber + 1,
+ "siteId": devices.length ~/ pageItemNumber + 1,
+ if (serialNumber?.isEmpty == false) "assetSerialNumber": serialNumber,
+ if (number?.isEmpty == false) "assetNo": number,
+ });
+ // response = await get(
+ // Uri.parse("$host${URLs.getEquipment}?siteId=$hospitalId"
+ // "${serialNumber?.isEmpty == false ? "&assetSerialNumber=$serialNumber" :""}"
+ // "${number?.isEmpty == false ? "&assetNo=$number" : ""}"
+ // ),
+ // );
+ List 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();
+ List equipmentListJson = json.decode(response.body)["data"];
+ page = equipmentListJson.map((device) => Device.fromJson(device, startKeyWithDest: false)).toList();
+ _devices.addAll(equipmentListJson.map((device) => Device.fromJson(device, startKeyWithDest: false)).toList());
+ notifyListeners();
}
return page;
- } catch(error) {
+ } catch (error) {
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> getDevicesListBySN ({
- @required String host,
- @required User user,
- @required String hospitalId,
- @required String sn
+ Future> getModels({
+ String code,
}) async {
Response response;
- try{
- response = await get(
- Uri.parse(host + URLs.getEquipment+"?client=$hospitalId"
- + ( sn == null || sn.isEmpty ? "" : "&serial_qr=$sn" )),
+ try {
+ response = await ApiManager.instance.get(
+ URLs.getModels + "?code=$code",
);
-
- _stateCode = response.statusCode;
- List _page = [];
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ List 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();
+ List categoriesListJson = json.decode(response.body)["data"];
+ page = categoriesListJson
+ .map((json) => Lookup(
+ name: json["modelDefCode"],
+ id: json["id"],
+ value: json["id"],
+ ))
+ .toList();
}
- return _page;
- } catch(error) {
- _loading = false;
- _stateCode = -1;
- notifyListeners();
+ return page;
+ } catch (error) {
return [];
}
-
}
-}
\ No newline at end of file
+
+// /// 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> 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 _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 [];
+// }
+// }
+}
diff --git a/lib/controllers/providers/api/gas_refill_provider.dart b/lib/controllers/providers/api/gas_refill_provider.dart
index 7dba6a8c..40a96203 100644
--- a/lib/controllers/providers/api/gas_refill_provider.dart
+++ b/lib/controllers/providers/api/gas_refill_provider.dart
@@ -1,21 +1,28 @@
import 'dart:convert';
+import 'dart:developer';
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/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';
-class GasRefillProvider extends ChangeNotifier{
-
+class GasRefillProvider extends ChangeNotifier {
// number of items call in each request
- final pageItemNumber = 50;
+ final pageItemNumber = 12;
//reset provider data
- void reset(){
+ void reset() {
items = null;
nextPage = true;
stateCode = null;
+ hospital = null;
+ building = null;
+ floor = null;
+ department = null;
}
// 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
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
- Future getRequests ({
+ Future getRequests({
@required String host,
@required User user,
+ bool mostRecent,
}) async {
- if(isLoading == true)
- return -2;
+ if (isLoading == true) return -2;
isLoading = true;
+ if (items?.isEmpty ?? true) notifyListeners();
Response response;
- try{
- response = await get(
- Uri.parse(
- "$host${URLs.getGasRefill}?uid=${user.id}"
- "&token=${user.token}&page=${(items?.length ?? 0) ~/pageItemNumber}"
- ),
- headers: {
- "Content-Type":"application/json; charset=utf-8"
- }
- );
- stateCode = response.statusCode;
- if(stateCode >= 200 && stateCode < 300) {
- // client's request was successfully received
- List requestsListJson = json.decode(utf8.decode(response.bodyBytes));
- List itemsPage = requestsListJson.map(
- (request) => GasRefillModel.fromJson(request)).toList();
+
+ Map body = {};
+ body["pageNumber"] = (items?.length ?? 0) ~/ pageItemNumber + 1;
+ body["pageSize"] = pageItemNumber;
+ print("url:${URLs.getGasRefill}:body:$body");
+
+ response = await ApiManager.instance.post(
+ URLs.getGasRefill,
+ body: body,
+ );
+ stateCode = response.statusCode;
+ if (stateCode >= 200 && stateCode < 300) {
+ // client's request was successfully received
+ List requestsListJson = json.decode(response.body)["data"];
+ List itemsPage = requestsListJson.map((request) => GasRefillModel.fromJson(request)).toList();
+ if (mostRecent != null) {
+ items = [];
+ } else {
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;
notifyListeners();
return response.statusCode;
-
- } catch(error) {
+ } catch (error) {
isLoading = false;
stateCode = -1;
notifyListeners();
return -1;
}
+ }
+ void sortMostRecent(List models, bool mostRecent) {
+ if (mostRecent != null) {
+ models.sort((prev, next) => (mostRecent ?? false) ? next.title.compareTo(prev.title) : prev.title.compareTo(next.title));
+ }
}
- Future createModel ({
+ Future createModel({
@required String host,
@required User user,
@required GasRefillModel model,
}) async {
- Map body = {
+ Map body = {
"uid": user.id.toString(),
"token": user.token ?? "",
- "title": model.title ?? "",
- "status": "0",//model.status.value.toString(),
+ "site": hospital?.toMap(),
+ "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["details"] = jsonEncode(model.details.map((model) => {
- "type": model.type.id?.toString(),
- "size": model.cylinderSize?.id.toString(),
- "requsted_qty": model.requestedQuantity.toString(),
- }).toList());
+ body["gazRefillDetails"] = model.details
+ .map((model) => {
+ "gasType": model.type.toMap(),
+ "cylinderSize": model.cylinderSize.toMap(),
+ "cylinderType": model.cylinderType.toMap(),
+ "requestedQty": model.requestedQuantity,
+ })
+ .toList();
Response response;
- try{
- response = await post(
- Uri.parse(
- host+URLs.requestGasRefill),
- body: body,
- );
-
+ try {
+ response = await ApiManager.instance.post(URLs.requestGasRefill, body: body);
stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
- if(items != null) {
- items.insert(
- 0,
- GasRefillModel.fromJson(
- json.decode(utf8.decode(response.bodyBytes))[0]
- )
- );
+ if (response.statusCode >= 200 && response.statusCode < 300) {
+ if (items != null) {
+ reset();
notifyListeners();
}
}
return response.statusCode;
-
- } catch(error) {
+ } catch (error) {
+ print(error);
return -1;
}
-
}
- Future updateModel ({
+ Future updateModel({
@required String host,
@required User user,
@required GasRefillModel oldModel,
@required GasRefillModel newModel,
}) async {
- Map body = {
- "uid": user.id.toString(),
- "token": user.token ?? "",
- "title": newModel.title ?? "",
- "status": newModel.status.id.toString(),
+ Map body = {
+ "id": newModel.id,
+ "gazRefillNo": newModel.title ?? "",
+ "status": newModel.status.toMap(),
+ "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) => {
- "type": model.type.id.toString(),
- "size": model.cylinderSize.id.toString(),
- "requsted_qty": model.requestedQuantity.toString(),
- "deliverd_qty": model.deliveredQuantity.toString(),
- }).toList());
-
- Response response;
- try{
- response = await post(
- Uri.parse("$host${URLs.updateGasRefill}/${newModel.id}"),
- body: body,
- );
-
- stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
- oldModel.fromGasRefillModel(newModel);
- notifyListeners();
- }
- return response.statusCode;
-
- } catch(error) {
- return -1;
- }
-
+ body["gazRefillDetails"] = newModel.details
+ .map((model) => {
+ "gasType": model.type.toMap(),
+ "cylinderSize": model.cylinderSize.toMap(),
+ "cylinderType": model.cylinderType.toMap(),
+ "requestedQty": model.requestedQuantity,
+ "deliverdQty": model.deliveredQuantity,
+ })
+ .toList();
+ log(body.toString());
+ return -1;
+ // Response response;
+ // try {
+ // response = await ApiManager.instance.put(URLs.updateGasRefill, body: body);
+ // // response = await post(
+ // // Uri.parse("$host${URLs.updateGasRefill}/${newModel.id}"),
+ // // body: body,
+ // // );
+ //
+ // stateCode = response.statusCode;
+ // if (response.statusCode >= 200 && response.statusCode < 300) {
+ // oldModel.fromGasRefillModel(newModel);
+ // notifyListeners();
+ // }
+ // return response.statusCode;
+ // } catch (error) {
+ // return -1;
+ // }
}
-}
\ No newline at end of file
+
+ Hospital hospital;
+ Buildings building;
+ Floors floor;
+ Departments department;
+ DateTime expectedDateTime;
+ TimerModel timer;
+}
diff --git a/lib/controllers/providers/api/hospitals_provider.dart b/lib/controllers/providers/api/hospitals_provider.dart
index df70994f..da0e2cd7 100644
--- a/lib/controllers/providers/api/hospitals_provider.dart
+++ b/lib/controllers/providers/api/hospitals_provider.dart
@@ -3,17 +3,17 @@ 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/hospital.dart';
import 'package:test_sa/models/user.dart';
-class HospitalsProvider extends ChangeNotifier{
-
+class HospitalsProvider extends ChangeNotifier {
// number of items call in each request
- final pageItemNumber = 50;
+ final pageItemNumber = 12;
//reset provider data
- void reset(){
+ void reset() {
_hospitals = null;
_stateCode = null;
}
@@ -22,23 +22,28 @@ class HospitalsProvider extends ChangeNotifier{
// like 400 customer request failed
// 500 service not available
int _stateCode;
+
int get stateCode => _stateCode;
// true if there is next page in product list and false if not
bool _nextPage = true;
+
bool get nextPage => _nextPage;
// contain user data
// when user not login or register _user = null
List _hospitals;
+
List get hospitals => _hospitals;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
+
bool get isLoading => _loading;
- set isLoading(bool isLoading){
+
+ set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
@@ -48,77 +53,101 @@ class HospitalsProvider extends ChangeNotifier{
/// 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 getHospitals ({String host,User user,String title}) async {
- if(_loading == true)
- return -2;
+ Future getHospitals({String host, User user, String title}) async {
+ if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
- try{
- response = await get(
- Uri.parse(
- host + URLs.getHospitals
- + "?page=${(_hospitals?.length ?? 0) ~/pageItemNumber}"
- + ( title == null || title.isEmpty ? "" : "&name=$title" )
- ),
- headers: {
- "Content-Type":"application/json; charset=utf-8"
- }
- );
+ try {
+ response = await ApiManager.instance.post(URLs.getHospitals, body: {
+ "pageNumber": (hospitals?.length ?? 0) ~/ pageItemNumber + 1,
+ "pageSize": 50,
+ if (title != null && title.isNotEmpty) "name": title,
+ });
_stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
- List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
- List _page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList();
- if(hospitals == null)
- _hospitals = [];
+ List categoriesListJson = json.decode(response.body)["data"];
+ List _page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList();
+ if (hospitals == null) _hospitals = [];
_hospitals.addAll(_page);
- if(_page.length >= pageItemNumber){
+ if (_page.length >= pageItemNumber) {
_nextPage = true;
- }else{
+ } else {
_nextPage = false;
}
}
_loading = false;
notifyListeners();
return response.statusCode;
- } catch(error) {
+ } catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
-
}
- Future> getHospitalsList ({String host,User user,String title}) async {
+ Future> getHospitalsList({String host, User user, String title}) async {
Response response;
- try{
-
- response = await get(
- Uri.parse(host + URLs.getHospitals
- + ( title == null || title.isEmpty ? "" : "?name=$title" )),
- headers: {
- "Content-Type":"application/json; charset=utf-8"
- }
- );
+ try {
+ response = await ApiManager.instance.post(URLs.getHospitals, body: {
+ "pageSize": 50,
+ if (title != null && title.isNotEmpty) "name": title,
+ });
+ // 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 _page = [];
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ List _page = [];
+ if (response.statusCode >= 200 && response.statusCode < 300) {
// 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();
}
return _page;
- } catch(error) {
+ } catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return [];
}
-
}
-}
\ No newline at end of file
+ Future> 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 _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 [];
+ }
+ }
+}
diff --git a/lib/controllers/providers/api/notifications_provider.dart b/lib/controllers/providers/api/notifications_provider.dart
index d21ec77b..b7683ab5 100644
--- a/lib/controllers/providers/api/notifications_provider.dart
+++ b/lib/controllers/providers/api/notifications_provider.dart
@@ -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/user.dart';
-class NotificationsProvider extends ChangeNotifier{
-
+class NotificationsProvider extends ChangeNotifier {
// number of items call in each request
- final pageItemNumber = 20;
+ final pageItemNumber = 12;
//reset provider data
- void reset(){
+ void reset() {
notifications = null;
nextPage = true;
stateCode = null;
@@ -34,58 +33,50 @@ class NotificationsProvider extends ChangeNotifier{
// failed _loading = false
bool isLoading;
-
/// 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 getNotifications ({
+ Future getNotifications({
@required String host,
@required User user,
- @required String hospitalId,
+ @required int hospitalId,
}) async {
- if(isLoading == true)
- return -2;
+ if (isLoading == true) return -2;
isLoading = true;
notifyListeners();
Response response;
- // userId = 397.toString(); // testing id to view data
- try{
+ // userId = 397.toString(); // testing id to view data
+ try {
response = await get(
- Uri.parse(host+URLs.getNotifications
- +"?uid=${user.id}"
- "&token=${user.token}"
- "&page=${(notifications?.length ?? 0) ~/pageItemNumber}"),
- headers: {
- "Content-Type":"application/json; charset=utf-8"
- }
- );
+ Uri.parse(URLs.getNotifications +
+ "?uid=${user.id}"
+ "&token=${user.token}"
+ "&page=${(notifications?.length ?? 0) ~/ pageItemNumber}"),
+ headers: {"Content-Type": "application/json; charset=utf-8"});
stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List requestsListJson = json.decode(utf8.decode(response.bodyBytes));
- List _serviceRequestsPage = requestsListJson.map(
- (request) => AppNotification.fromJson(request)).toList();
- if(notifications == null)
- notifications = [];
+ List _serviceRequestsPage = requestsListJson.map((request) => AppNotification.fromJson(request)).toList();
+ if (notifications == null) notifications = [];
notifications.addAll(_serviceRequestsPage);
- if(_serviceRequestsPage.length == pageItemNumber){
+ if (_serviceRequestsPage.length == pageItemNumber) {
nextPage = true;
- }else{
+ } else {
nextPage = false;
}
}
isLoading = false;
notifyListeners();
return response.statusCode;
- } catch(error) {
+ } catch (error) {
isLoading = false;
stateCode = -1;
notifyListeners();
return -1;
}
-
}
/// 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
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
- Future> getRecentNotifications ({
+ Future> getRecentNotifications({
@required String host,
@required User user,
}) async {
Response response;
//userId = 397.toString(); // testing id to view data
- try{
- response = await get(
- Uri.parse(host+URLs.getNotifications
- +"?uid=${user.id}&token=${user.token}"),
- headers: {
- "Content-Type":"application/json; charset=utf-8"
- }
- );
+ try {
+ response = await get(Uri.parse(host + URLs.getNotifications + "?uid=${user.id}&token=${user.token}"), headers: {"Content-Type": "application/json; charset=utf-8"});
stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List requestsListJson = json.decode(utf8.decode(response.bodyBytes));
- List _recentNotifications = requestsListJson.map(
- (request) => AppNotification.fromJson(request)).toList();
+ List _recentNotifications = requestsListJson.map((request) => AppNotification.fromJson(request)).toList();
return _recentNotifications;
}
return null;
-
- } catch(error) {
+ } catch (error) {
return null;
}
-
}
-}
\ No newline at end of file
+}
diff --git a/lib/controllers/providers/api/parts_provider.dart b/lib/controllers/providers/api/parts_provider.dart
index 6f763f77..fbe7a319 100644
--- a/lib/controllers/providers/api/parts_provider.dart
+++ b/lib/controllers/providers/api/parts_provider.dart
@@ -1,19 +1,19 @@
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/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/part.dart';
+import 'package:test_sa/models/user.dart';
-class PartsProvider extends ChangeNotifier{
-
+class PartsProvider extends ChangeNotifier {
// number of items call in each request
- final pageItemNumber = 50;
+ final pageItemNumber = 20;
//reset provider data
- void reset(){
+ void reset() {
_parts = null;
_stateCode = null;
}
@@ -22,23 +22,28 @@ class PartsProvider extends ChangeNotifier{
// like 400 customer request failed
// 500 service not available
int _stateCode;
+
int get stateCode => _stateCode;
// true if there is next page in product list and false if not
bool _nextPage = true;
+
bool get nextPage => _nextPage;
// contain user data
// when user not login or register _user = null
List _parts;
+
List get parts => _parts;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool _loading;
+
bool get isLoading => _loading;
- set isLoading(bool isLoading){
+
+ set isLoading(bool isLoading) {
_loading = isLoading;
notifyListeners();
}
@@ -48,48 +53,36 @@ class PartsProvider extends ChangeNotifier{
/// 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 getParts ({String host,User user,String title}) async {
- if(_loading == true)
- return -2;
+ Future getParts({String host, User user, String title}) async {
+ if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
- try{
- response = await get(
- Uri.parse(
- host + URLs.getPartNumber
- + "?page=${(_parts?.length ?? 0) ~/pageItemNumber}"
- + ( title == null || title.isEmpty ? "" : "&name=$title" )
- ),
- headers: {
- "Content-Type":"application/json; charset=utf-8"
- }
- );
+ try {
+ response = await ApiManager.instance.post(URLs.getPartNumber, body: {if (title != null && title.isNotEmpty) "partName": title});
_stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
- List _page = categoriesListJson.map((part) => Part.fromJson(part)).toList();
- if(parts == null)
- _parts = [];
+ List _page = categoriesListJson.map((part) => Part.fromJson(part)).toList();
+ if (parts == null) _parts = [];
_parts.addAll(_page);
- if(_page.length >= pageItemNumber){
+ if (_page.length >= pageItemNumber) {
_nextPage = true;
- }else{
+ } else {
_nextPage = false;
}
}
_loading = false;
notifyListeners();
return response.statusCode;
- } catch(error) {
+ } catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
-
}
/// 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
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
- Future> getPartsList ({String host,User user,String title}) async {
+ Future> getPartsList({String host, User user, String title}) async {
Response response;
- try{
-
- response = await get(
- Uri.parse(
- host + URLs.getPartNumber
- + ( title == null || title.isEmpty ? "" : "?name=$title" )
- ),
- headers: {
- "Content-Type":"application/json; charset=utf-8"
- }
- );
- List _page = [];
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ try {
+ if (int.tryParse(title) != null) {
+ response = await ApiManager.instance.post(URLs.getPartNumber, body: {if (title != null && title.isNotEmpty) "partNo": title});
+ } else {
+ response = await ApiManager.instance.post(URLs.getPartNumber, body: {if (title != null && title.isNotEmpty) "partName": title});
+ }
+ List 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((part) => Part.fromJson(part)).toList();
+ List categoriesListJson = json.decode(response.body)["data"];
+ page = categoriesListJson.map((part) => Part.fromJson(part)).toList();
}
- return _page;
- } catch(error) {
+ return page;
+ } catch (error) {
return [];
}
-
}
-
-}
\ No newline at end of file
+}
diff --git a/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart b/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart
index 14103fd6..59bf347a 100644
--- a/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart
+++ b/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart
@@ -1,20 +1,20 @@
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/models/user.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_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
- final pageItemNumber = 50;
+ final pageItemNumber = 10;
//reset provider data
- void reset(){
+ void reset() {
visits = null;
nextPage = true;
stateCode = null;
@@ -43,47 +43,37 @@ class PreventiveMaintenanceVisitsProvider extends ChangeNotifier{
/// 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 getVisits ({
+ Future getVisits({
@required String host,
@required User user,
- // VisitsSearch visitsSearch,
+ // VisitsSearch visitsSearch,
}) async {
- if(isLoading == true)
- return -2;
+ if (isLoading == true) return -2;
isLoading = true;
Response response;
//userId = 397.toString(); // testing id to view data
- try{
+ try {
response = await get(
Uri.parse(
- host + URLs.getPreventiveMaintenanceVisits
- +"?uid=${user.id}"
- "&token=${user.token}"
- "&page=${(visits?.length ?? 0) ~/pageItemNumber}"
- +visitsSearch?.toSearchString() ?? ""
+ "${host + URLs.getPreventiveMaintenanceVisits}?uid=${user.id}&token=${user.token}&page=${(visits?.length ?? 0) ~/ pageItemNumber}${visitsSearch?.toMap()}",
),
- headers: {
- "Content-Type":"application/json; charset=utf-8"
- }
- );
- } catch(error) {
+ headers: {"Content-Type": "application/json; charset=utf-8"});
+ } catch (error) {
isLoading = false;
stateCode = -1;
notifyListeners();
return -1;
}
stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List requestsListJson = json.decode(utf8.decode(response.bodyBytes));
- List _visits = requestsListJson.map(
- (request) => Visit.fromJson(request)).toList();
- if(visits == null)
- visits = [];
+ List _visits = requestsListJson.map((request) => Visit.fromJson(request)).toList();
+ if (visits == null) visits = [];
visits.addAll(_visits);
- if(_visits.length == pageItemNumber){
+ if (_visits.length == pageItemNumber) {
nextPage = true;
- }else{
+ } else {
nextPage = false;
}
}
@@ -97,41 +87,36 @@ class PreventiveMaintenanceVisitsProvider extends ChangeNotifier{
/// 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 updateGroupOfVisits ({
+ Future updateGroupOfVisits({
@required String host,
@required User user,
VisitsGroup group,
}) async {
Response response;
- Map body = group.toJson();
- body["token"] = user.token ?? "";
- body["uid"] = user.id;
+ Map body = group.toJson();
+ // body["token"] = user.token ?? "";
+ // body["uid"] = user.id;
//userId = 397.toString(); // testing id to view data
- try{
- response = await post(
- Uri.parse(
- host+URLs.updatePreventiveMaintenanceVisits
- ),
- body: body,
- );
+ try {
+ response = await ApiManager.instance.put(URLs.updatePreventiveMaintenanceVisits, body: body);
stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
- group.visits.forEach((visit) {
- visit.status = group.status;
- visit.actualDate = group.date.toString().split(" ").first;
- });
+ // group.visits.forEach((visit) {
+ // visit.status = group.status;
+ // visit.actualDate = group.date.toString().split(" ").first;
+ // });
group.visits.clear();
notifyListeners();
}
return response.statusCode;
- } catch(error) {
+ } catch (error) {
isLoading = false;
stateCode = -1;
notifyListeners();
return -1;
}
}
-}
\ No newline at end of file
+}
diff --git a/lib/controllers/providers/api/regular_visits_provider.dart b/lib/controllers/providers/api/regular_visits_provider.dart
index 03737f73..25e330f7 100644
--- a/lib/controllers/providers/api/regular_visits_provider.dart
+++ b/lib/controllers/providers/api/regular_visits_provider.dart
@@ -1,21 +1,22 @@
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/models/pantry/pentry.dart';
import 'package:test_sa/models/user.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_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
- final pageItemNumber = 50;
+ final pageItemNumber = 20;
//reset provider data
- void reset(){
+ void reset() {
visits = null;
nextPage = true;
stateCode = null;
@@ -44,93 +45,94 @@ class RegularVisitsProvider extends ChangeNotifier{
/// 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 getVisits ({
+ Future getVisits({
@required String host,
@required User user,
- // VisitsSearch visitsSearch,
+ // VisitsSearch visitsSearch,
}) async {
- if(isLoading == true)
- return -2;
+ if (isLoading == true) return -2;
isLoading = true;
+ if (visits == null) notifyListeners();
Response response;
//userId = 397.toString(); // testing id to view data
- try{
- response = await get(
- Uri.parse(
- host+URLs.getRegularVisits
- +"?uid=${user.id}"
- "&token=${user.token}"
- "&page=${(visits?.length ?? 0) ~/pageItemNumber}"
- +visitsSearch?.toSearchString() ?? ""
- ),
- headers: {
- "Content-Type":"application/json; charset=utf-8"
- }
+
+ try {
+ Map body = {};
+ body.addAll(visitsSearch.toMap());
+ body["pageNumber"] = (visits?.length ?? 0) ~/ pageItemNumber + 1;
+ body["pageSize"] = pageItemNumber;
+
+ response = await ApiManager.instance.post(
+ URLs.getRegularVisits,
+ body: body,
);
- } catch(error) {
+ } catch (error) {
isLoading = false;
stateCode = -1;
notifyListeners();
return -1;
}
stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
- try{
- List requestsListJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", ""));
- List _visits = requestsListJson.map(
- (request) => Visit.fromJson(request)
- ).toList();
- if(visits == null)
- visits = [];
+ try {
+ List requestsListJson = json.decode(response.body)["data"];
+ List _visits = requestsListJson.map((request) => Visit.fromJson(request)).toList();
+ visits ??= [];
+ sortMostRecent(_visits);
visits.addAll(_visits);
- if(_visits.length == pageItemNumber){
+ if (_visits.length == pageItemNumber) {
nextPage = true;
- }else{
+ } else {
nextPage = false;
}
- }catch(error){
+ } catch (error) {
+ Logger().e(error);
isLoading = false;
stateCode = -1;
notifyListeners();
return -1;
}
-
}
isLoading = false;
notifyListeners();
return response.statusCode;
}
+ void sortMostRecent(List 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 -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 updateGroupOfVisits ({
+ Future updateGroupOfVisits({
@required String host,
@required User user,
VisitsGroup group,
}) async {
Response response;
- Map body = group.toJson();
- body["token"] = user.token ?? "";
- body["uid"] = user.id;
- //userId = 397.toString(); // testing id to view data
- try{
- response = await post(
- Uri.parse(host+URLs.updateRegularVisits),
- body: body,
+
+ try {
+ Map body = group.toJson();
+
+ response = await ApiManager.instance.post(
+ URLs.getRegularVisits,
+ body: body,
);
stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
reset();
notifyListeners();
}
return response.statusCode;
- } catch(error) {
+ } catch (error) {
isLoading = false;
stateCode = -1;
notifyListeners();
@@ -138,46 +140,46 @@ class RegularVisitsProvider extends ChangeNotifier{
}
}
- Future getPently({String host,User user,String id}) async {
+ Future getPently({String host, User user, int id}) async {
Response response;
- response = await get(
- Uri.parse("$host${URLs.getPentry}/$id"),
- headers: {
- "Content-Type":"application/json; charset=utf-8"
- }
- );
+ response = await get(Uri.parse("$host${URLs.getPentry}/$id"), headers: {"Content-Type": "application/json; charset=utf-8"});
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)));
}
return pantry;
}
- Future updatePentry ({
+ Future updatePentry({
@required String host,
@required User user,
@required Pentry pentry,
@required Visit visit,
}) async {
- try{
+ try {
Response response;
- Map body = pentry.toMap();
- body["uid"] = user.id;
- body["token"] = user.token;
- response = await post(
- Uri.parse(host+URLs.updatePentry + "/${visit.id}"),
- body: body,
- );
- if(response.statusCode >= 200 && response.statusCode < 300) {
- visit.status = pentry.ppmVisitStatus;
+ Map body = pentry.toMap(visit.id);
+ body["id"] = visit.id;
+ body["assetId"] = visit.deviceId;
+ body["ppmScheduleId"] = visit.ppmScheduleId;
+ // body["token"] = user.token;
+ // body["vChecklists"]?.addAll({});
+ // body["vCalibrationTools"]?.addAll({"visitId": visit.id,});
+ // body["vKits"]?.add({"visitId": visit.id,});
+ 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();
}
return response.statusCode;
-
- } catch(error) {
+ } catch (error) {
return -1;
}
-
}
-}
\ No newline at end of file
+}
diff --git a/lib/controllers/providers/api/service_requests_provider.dart b/lib/controllers/providers/api/service_requests_provider.dart
index 040ed855..ea03c7ee 100644
--- a/lib/controllers/providers/api/service_requests_provider.dart
+++ b/lib/controllers/providers/api/service_requests_provider.dart
@@ -1,9 +1,12 @@
import 'dart:convert';
+import 'dart:developer';
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/http_status_manger.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/lookup.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/subtitle.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
- final pageItemNumber = 50;
+ final pageItemNumber = 10;
//reset provider data
- void reset(){
+ void reset() {
+ workOrders = [];
serviceRequests = null;
nextPage = true;
stateCode = null;
@@ -35,6 +40,7 @@ class ServiceRequestsProvider extends ChangeNotifier{
// list of user requests
List serviceRequests;
+ List workOrders = [];
// when requests in-process _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
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
- Future getRequests ({
- @required String host,
- @required User user,
- @required String hospitalId,
- }) async {
- if(isLoading == true)
- return -2;
+ Future getRequests({@required int hospitalId}) async {
+ if (isLoading == true) return -2;
isLoading = true;
+ if (serviceRequests == null) notifyListeners();
Response response;
- try{
- response = await get(
- Uri.parse(
- host+URLs.getServiceRequests
- +"?uid=${user.id}"
- +(hospitalId == null? "" :"&client_nid=$hospitalId")
- +"&token=${user.token}"
- "&page=${(serviceRequests?.length ?? 0) ~/pageItemNumber}"
- +search?.toSearchString() ?? ""
- ),
- headers: {
- "Content-Type":"application/json; charset=utf-8"
- }
+ try {
+ Map body = {};
+ body.addAll(search.toMap());
+ body["pageNumber"] = (serviceRequests?.length ?? 0) ~/ pageItemNumber + 1;
+ body["pageSize"] = pageItemNumber;
+
+ response = await ApiManager.instance.post(
+ URLs.getServiceRequests,
+ body: body,
);
+
stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
- List requestsListJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", ""));
- List _serviceRequestsPage = requestsListJson.map(
- (request) => ServiceRequest.fromJson(request)).toList();
- if(serviceRequests == null)
- serviceRequests = [];
- serviceRequests.addAll(_serviceRequestsPage);
- if(_serviceRequestsPage.length == pageItemNumber){
+ List requestsListJson = json.decode(response.body)["data"];
+ List serviceRequestsPage = requestsListJson.map((request) => ServiceRequest.fromJson(request)).toList();
+ serviceRequests ??= [];
+ sortMostRecent(serviceRequestsPage);
+ serviceRequests.addAll(serviceRequestsPage);
+ if (serviceRequestsPage.length == pageItemNumber) {
nextPage = true;
- }else{
+ } else {
nextPage = false;
}
}
isLoading = false;
notifyListeners();
return response.statusCode;
-
- } catch(error) {
+ } catch (error) {
isLoading = false;
stateCode = -1;
notifyListeners();
return -1;
}
+ }
+ void sortMostRecent(List 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 getSingleServiceRequest({
@@ -106,317 +108,569 @@ class ServiceRequestsProvider extends ChangeNotifier{
@required Subtitle subtitle,
}) async {
String userData = '';
- if(user != null){
- userData += "&uid="+user.id;
- userData += "&token="+user.token;
+ if (user != null) {
+ userData += "&uid=" + user.id;
+ userData += "&token=" + user.token;
}
Response response;
- try{
- response = await get(
- Uri.parse(
- host+URLs.getSingleServiceRequest
- +'?call_nid=$requestId'
- '$userData',)
- );
- }catch(error){
- throw(HttpStatusManger.getStatusMessage(
- status: -1, subtitle: subtitle));
+ try {
+ response = await get(Uri.parse(
+ host +
+ URLs.getSingleServiceRequest +
+ '?call_nid=$requestId'
+ '$userData',
+ ));
+ } catch (error) {
+ throw (HttpStatusManger.getStatusMessage(status: -1, subtitle: subtitle));
}
// 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.
List jsonList = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", ""));
List _requests = jsonList.map((i) => ServiceRequest.fromJson(i)).toList();
return _requests[0];
- }else{
- throw(HttpStatusManger.getStatusMessage(
- status: response.statusCode, subtitle: subtitle));
+ } else {
+ throw (HttpStatusManger.getStatusMessage(status: response.statusCode, subtitle: subtitle));
}
-
}
- Future createRequest ({
+ Future createRequest({
@required String host,
@required User user,
@required ServiceRequest serviceRequest,
}) async {
-
var body = {
- "uid": user.id,
- "token": user.token ?? "",
- "sn_id": serviceRequest.deviceId ?? "",
- "date": (DateTime.now().millisecondsSinceEpoch).toString(),
- "client": user.hospital.id ?? '',
- "complaint": serviceRequest.maintenanceIssue,
- "image": json.encode(serviceRequest.devicePhotos),
- "priority": (serviceRequest.priority?.id).toString(),
- "defect_types": (serviceRequest.defectType?.id).toString(),
+ "id": 0,
+ "calNo": "",
+ "callCreatedBy": {"id": user.userID, "name": user.userName ?? ""},
+ "assets": serviceRequest.deviceId == null ? [] : [serviceRequest.deviceId],
+ "requestedDate": DateTime.now().toIso8601String(),
+ "requestedTime": DateTime.now().toIso8601String(),
+ "client": user.clientId,
+ "callComments": serviceRequest.callComments,
+ 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){
- body["audio"] = serviceRequest.audio;
+ if (serviceRequest.audio != null) {
+ body["voiceNote"] = serviceRequest.audio;
}
Response response;
- try{
- response = await post(
- Uri.parse(
- host+URLs.createRequest),
- body: body,
- );
+ try {
+ response = await ApiManager.instance.post(URLs.createRequest, body: body);
stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
- if(serviceRequests != null)
- serviceRequests.insert(
- 0,
- ServiceRequest.fromJson(
- json.decode(utf8.decode(response.bodyBytes))[0]
- )
- );
+ if (response.statusCode >= 200 && response.statusCode < 300) {
+ if (serviceRequests != null) serviceRequests.insert(0, ServiceRequest.fromJson(json.decode(utf8.decode(response.bodyBytes))[0]));
notifyListeners();
}
return response.statusCode;
-
- } catch(error) {
+ } catch (error) {
return -1;
}
-
}
- Future createIssueReport ({
+ Future createIssueReport({
@required String host,
@required User user,
@required Issue issue,
}) async {
Response response;
- Map body = issue.toMap();
+ Map body = issue.toMap();
body["uid"] = user.id;
body["token"] = user.token;
- try{
+ try {
response = await post(
- Uri.parse(host+URLs.createReport),
+ Uri.parse(host + URLs.createReport),
body: body,
);
stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
-
- }
+ if (response.statusCode >= 200 && response.statusCode < 300) {}
return response.statusCode;
-
- } catch(error) {
+ } catch (error) {
return -1;
}
-
}
- Future updateDate ({
+ Future updateDate({
@required String host,
@required User user,
- @required String newDate,
- @required Lookup employee,
@required ServiceRequest request,
+ DateTime date,
}) async {
+ Map serviceRequest = await getServiceRequestById(requestId: request.id) ?? "";
+ final List callSiteContacts = (serviceRequest['callSiteContactPerson'] as List);
+ final Map callSiteContactPerson = callSiteContacts.isEmpty ? {} : callSiteContacts[0];
+ print(callSiteContactPerson);
Response response;
- Map body = {};
- body["uid"] = user.id;
- body["token"] = user.token;
- body["nid"] = request.id;
- if(newDate != null) body["date"] = newDate;
- if(employee != null) body["ass_emp"] = employee.id.toString();
- try{
- response = await post(
- Uri.parse(
- host+URLs.updateRequestDate),
+ var body = {
+ "id": request.id,
+ "callNo": serviceRequest['callNo'],
+ "callCreatedBy": serviceRequest['callCreatedBy'],
+ "requestedDate": request.date ?? "",
+ "requestedTime": request.date ?? "",
+ "priority": request.priority?.toMap(),
+ "defectType": request.defectType?.toMap(),
+ "typeofRequest": request.type?.toMap(),
+ "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,
);
stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
- request.engineerName = employee.label;
+ if (response.statusCode >= 200 && response.statusCode < 300) {
+ // request.engineerName = employee.name;
notifyListeners();
}
return response.statusCode;
-
- } catch(error) {
+ } catch (error) {
return -1;
}
-
}
- Future createServiceReport ({
+ Future createServiceReport({
@required String host,
@required User user,
@required ServiceReport report,
@required ServiceRequest request,
}) async {
Response response;
- Map body = report.toMap();
- body["uid"] = user.id;
- body["token"] = user.token;
- body["job_id"] = request.id;
- try{
- response = await post(
- Uri.parse(
- host+URLs.createServiceReport),
- body: body,
- );
+ try {
+ Map body = {
+ "id": 0,
+ "parentWOId": null,
+ "workOrderNo": "",
+ "workOrderYear": null,
+ "workOrderSequennce": null,
+ "callRequest": {
+ "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;
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ if (response.statusCode >= 200 && response.statusCode < 300) {
reset();
notifyListeners();
}
return response.statusCode;
+ } catch (error) {
+ print(error);
+ return -1;
+ }
+ }
- } catch(error) {
+ Future createSubWorkOrder({
+ @required SearchWorkOrder workOrder,
+ }) async {
+ Response response;
+ try {
+ Map 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;
}
+ }
+
+ CallRequestForWorkOrder callRequestForWorkOrder;
+
+ Future 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 listJson = json.decode(response.body)["data"];
+ log(listJson?.toString());
+ callRequestForWorkOrder = CallRequestForWorkOrder.fromJson(listJson);
+ }
+ notifyListeners();
+ return callRequestForWorkOrder;
+ } catch (error) {
+ print(error);
+ return null;
+ }
}
- Future createDuplicatedReport ({
+ Future> 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((request) => SearchWorkOrder.fromJson(request)).toList();
+ if (workOrders.length == pageItemNumber) {
+ nextPage = true;
+ } else {
+ nextPage = false;
+ }
+ }
+ return workOrders;
+ } catch (e) {
+ return [];
+ }
+ }
+
+ Future createDuplicatedReport({
@required String host,
@required User user,
@required ServiceRequest request,
}) async {
Response response;
String userData = '';
- if(user != null){
- userData += "&uid="+user.id;
- userData += "&token="+user.token;
+ if (user != null) {
+ userData += "&uid=" + user.id;
+ userData += "&token=" + user.token;
}
- try{
+ try {
response = await get(
- Uri.parse(
- host+URLs.createDuplicatedReport
- +"?nid=${request.id}"
- +userData),
+ Uri.parse(host + URLs.createDuplicatedReport + "?nid=${request.id}" + userData),
);
stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ if (response.statusCode >= 200 && response.statusCode < 300) {
reset();
notifyListeners();
}
return response.statusCode;
-
- } catch(error) {
-
+ } catch (error) {
return -1;
}
-
}
- Future updateServiceReport ({
- @required String host,
- @required User user,
+ Future updateServiceReport({
@required ServiceReport report,
- @required ServiceRequest request,
+ String host,
+ User user,
+ ServiceRequest request,
}) async {
Response response;
- Map body = report.toMap();
- body["uid"] = user.id;
- body["token"] = user.token;
- body["job_id"] = request.id;
- body["report_id"] = request.reportID;
- try{
- response = await post(
- Uri.parse(
- host+URLs.updateServiceReport),
- body: body,
- );
- stateCode = response.statusCode;
+ //Map body = report.toMap(request);
+ // body["uid"] = user.id;
+ // body["token"] = user.token;
+ // body["job_id"] = request.id;
+ // body["report_id"] = request.reportID;
+ // try {
+ Map body = report.toMap(request);
+ // 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();
+ notifyListeners();
+ }
+ return response.statusCode;
+ // } catch (error) {
+ // print(error);
+ // return -1;
+ // }
+ }
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ Future updateWorkOrderDetails({@required SearchWorkOrder workOrder}) async {
+ Response response;
+ //Map body = report.toMap(request);
+ // body["uid"] = user.id;
+ // body["token"] = user.token;
+ // body["job_id"] = request.id;
+ // body["report_id"] = request.reportID;
+ try {
+ Map 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();
notifyListeners();
}
return response.statusCode;
-
- } catch(error) {
-
+ } catch (error) {
return -1;
}
-
}
- Future updateServiceReportTimer ({
+ Future updateServiceReportTimer({
@required String host,
@required User user,
@required TimerModel timer,
@required ServiceRequest request,
}) async {
Response response;
- Map body = {};
+ Map body = {};
body["uid"] = user.id;
body["token"] = user.token;
body["job_id"] = request.id;
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["report_id"] = request.reportID;
- try{
+ try {
response = await post(
- Uri.parse(
- host+URLs.updateServiceReport),
+ Uri.parse(host + URLs.updateServiceReport),
body: body,
);
//stateCode = response.statusCode;
- if(response.statusCode >= 200 && response.statusCode < 300) {
+ if (response.statusCode >= 200 && response.statusCode < 300) {
// reset();
// notifyListeners();
}
return response.statusCode;
-
- } catch(error) {
-
+ } catch (error) {
return -1;
}
-
}
Future getSingleServiceReport({
- @required String reportId,
+ @required int reportId,
@required String host,
@required User user,
@required Subtitle subtitle,
}) async {
- String userData = '';
- if(user != null){
- userData += "&uid="+user.id;
- userData += "&token="+user.token;
+ Response response;
+ try {
+ response = await ApiManager.instance.get(
+ URLs.getServiceReport + "?workOrderId=$reportId",
+ );
+ } catch (error) {
+ throw (HttpStatusManger.getStatusMessage(status: -1, subtitle: subtitle));
}
- Response response;
- try{
+ // If the call to the server was successful, parse the JSON.
+ 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(
- Uri.parse(
- host+URLs.getServiceReport
- +'?report_id=$reportId'
- '$userData',)
+ Future