diff --git a/android/app/build.gradle b/android/app/build.gradle
index 4f0659df..d8e93da8 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -49,30 +49,30 @@ android {
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
minSdkVersion 21
targetSdkVersion 33
- versionCode 1
- versionName '1.0.0'
+ versionCode 3
+ versionName '1.0.3'
}
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 {
- 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/android/build.gradle b/android/build.gradle
index 93d82389..419b3fd3 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -1,5 +1,5 @@
buildscript {
- ext.kotlin_version = '1.6.10'
+ ext.kotlin_version = '1.8.20'
repositories {
google()
mavenCentral()
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/subtitles/ar_subtitle.json b/assets/subtitles/ar_subtitle.json
index 16cad068..c8f3b057 100644
--- a/assets/subtitles/ar_subtitle.json
+++ b/assets/subtitles/ar_subtitle.json
@@ -167,7 +167,7 @@
"newServiceReport": "تقرير خدمة جديد",
"number": "رقم",
"operatingHours": "ساعات العمل",
- "partNumber": "رقم القطعة",
+ "partNumberName": "رقم/اسم القطعة",
"quantity": "كمية",
"reasons": "الاسباب",
"reportStatus": "حالة التقرير",
@@ -201,5 +201,9 @@
"floor": "طابق",
"department": "قسم",
"room": "غرفه",
- "actions": "اجراءات"
+ "actions": "اجراءات",
+ "deviceFiles": "ملفات الجهاز",
+ "pickFromFiles" : "اختر من الملفات",
+ "requiredFile" : "الملف مطلوب",
+ "pickFile" : "اختر ملف"
}
\ No newline at end of file
diff --git a/assets/subtitles/en_subtitle.json b/assets/subtitles/en_subtitle.json
index d1412bf5..a30908c9 100644
--- a/assets/subtitles/en_subtitle.json
+++ b/assets/subtitles/en_subtitle.json
@@ -73,7 +73,7 @@
"deviceImages": "Asset Images",
"deviceModel": "Asset Model",
"deviceRequired": "Asset Required",
- "deviceSN": "Asset SN",
+ "deviceSN": "Asset Serial Number",
"engineerName": "Engineer Name",
"engineerPhone": "Engineer Phone",
"facebook": "facebook",
@@ -167,7 +167,7 @@
"newServiceReport": "New Work Order",
"number": "Number",
"operatingHours": "Operating Hours",
- "partNumber": "Part Number",
+ "partNumberName": "Part Number/Name",
"quantity": "Quantity",
"reasons": "Reasons",
"reportStatus": "Report Status",
@@ -201,5 +201,9 @@
"floor": "Floor",
"department": "Department",
"room": "Room",
- "actions": "Actions"
+ "actions": "Actions",
+ "deviceFiles": "Asset Files",
+ "pickFromFiles" : "Pick From Files",
+ "requiredFile" : "File Required",
+ "pickFile" : "Pick File"
}
\ No newline at end of file
diff --git a/ios/Podfile b/ios/Podfile
index 0646ebd4..c0216e16 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -41,4 +41,16 @@ post_install do |installer|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
end
end
+ installer.generated_projects.each do |project|
+ project.targets.each do |target|
+ target.build_configurations.each do |config|
+ config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
+ config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
+ '$(inherited)',
+ ## dart: PermissionGroup.microphone
+ 'PERMISSION_MICROPHONE=1',
+ ]
+ end
+ end
+ end
end
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
new file mode 100644
index 00000000..82bdbf8e
--- /dev/null
+++ b/ios/Podfile.lock
@@ -0,0 +1,268 @@
+PODS:
+ - audioplayers_darwin (0.0.1):
+ - Flutter
+ - DKImagePickerController/Core (4.3.4):
+ - DKImagePickerController/ImageDataManager
+ - DKImagePickerController/Resource
+ - DKImagePickerController/ImageDataManager (4.3.4)
+ - DKImagePickerController/PhotoGallery (4.3.4):
+ - DKImagePickerController/Core
+ - DKPhotoGallery
+ - DKImagePickerController/Resource (4.3.4)
+ - DKPhotoGallery (0.0.17):
+ - DKPhotoGallery/Core (= 0.0.17)
+ - DKPhotoGallery/Model (= 0.0.17)
+ - DKPhotoGallery/Preview (= 0.0.17)
+ - DKPhotoGallery/Resource (= 0.0.17)
+ - SDWebImage
+ - SwiftyGif
+ - DKPhotoGallery/Core (0.0.17):
+ - DKPhotoGallery/Model
+ - DKPhotoGallery/Preview
+ - SDWebImage
+ - SwiftyGif
+ - DKPhotoGallery/Model (0.0.17):
+ - SDWebImage
+ - SwiftyGif
+ - DKPhotoGallery/Preview (0.0.17):
+ - DKPhotoGallery/Model
+ - DKPhotoGallery/Resource
+ - SDWebImage
+ - SwiftyGif
+ - DKPhotoGallery/Resource (0.0.17):
+ - SDWebImage
+ - SwiftyGif
+ - file_picker (0.0.1):
+ - DKImagePickerController/PhotoGallery
+ - Flutter
+ - Firebase/CoreOnly (10.12.0):
+ - FirebaseCore (= 10.12.0)
+ - Firebase/Messaging (10.12.0):
+ - Firebase/CoreOnly
+ - FirebaseMessaging (~> 10.12.0)
+ - firebase_core (2.15.0):
+ - Firebase/CoreOnly (= 10.12.0)
+ - Flutter
+ - firebase_messaging (14.6.5):
+ - Firebase/Messaging (= 10.12.0)
+ - firebase_core
+ - Flutter
+ - FirebaseCore (10.12.0):
+ - FirebaseCoreInternal (~> 10.0)
+ - GoogleUtilities/Environment (~> 7.8)
+ - GoogleUtilities/Logger (~> 7.8)
+ - FirebaseCoreInternal (10.12.0):
+ - "GoogleUtilities/NSData+zlib (~> 7.8)"
+ - FirebaseInstallations (10.12.0):
+ - FirebaseCore (~> 10.0)
+ - GoogleUtilities/Environment (~> 7.8)
+ - GoogleUtilities/UserDefaults (~> 7.8)
+ - PromisesObjC (~> 2.1)
+ - FirebaseMessaging (10.12.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.3):
+ - GoogleUtilities/Environment (~> 7.7)
+ - nanopb (< 2.30910.0, >= 2.30908.0)
+ - PromisesObjC (< 3.0, >= 1.2)
+ - GoogleUtilities/AppDelegateSwizzler (7.11.4):
+ - GoogleUtilities/Environment
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Network
+ - GoogleUtilities/Environment (7.11.4):
+ - PromisesObjC (< 3.0, >= 1.2)
+ - GoogleUtilities/Logger (7.11.4):
+ - GoogleUtilities/Environment
+ - GoogleUtilities/Network (7.11.4):
+ - GoogleUtilities/Logger
+ - "GoogleUtilities/NSData+zlib"
+ - GoogleUtilities/Reachability
+ - "GoogleUtilities/NSData+zlib (7.11.4)"
+ - GoogleUtilities/Reachability (7.11.4):
+ - GoogleUtilities/Logger
+ - GoogleUtilities/UserDefaults (7.11.4):
+ - 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_foundation (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - permission_handler_apple (9.1.1):
+ - Flutter
+ - PromisesObjC (2.3.1)
+ - qr_code_scanner (0.2.0):
+ - Flutter
+ - MTBBarcodeScanner
+ - SDWebImage (5.17.0):
+ - SDWebImage/Core (= 5.17.0)
+ - SDWebImage/Core (5.17.0)
+ - share (0.0.1):
+ - Flutter
+ - shared_preferences_foundation (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - speech_to_text (0.0.1):
+ - Flutter
+ - Try
+ - sqflite (0.0.3):
+ - Flutter
+ - FMDB (>= 2.7.5)
+ - SwiftyGif (5.4.4)
+ - Toast (4.0.0)
+ - Try (2.1.1)
+ - url_launcher_ios (0.0.1):
+ - Flutter
+
+DEPENDENCIES:
+ - audioplayers_darwin (from `.symlinks/plugins/audioplayers_darwin/ios`)
+ - file_picker (from `.symlinks/plugins/file_picker/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_foundation (from `.symlinks/plugins/path_provider_foundation/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_foundation (from `.symlinks/plugins/shared_preferences_foundation/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:
+ - DKImagePickerController
+ - DKPhotoGallery
+ - Firebase
+ - FirebaseCore
+ - FirebaseCoreInternal
+ - FirebaseInstallations
+ - FirebaseMessaging
+ - flutter_sound_core
+ - FMDB
+ - GoogleDataTransport
+ - GoogleUtilities
+ - MTBBarcodeScanner
+ - nanopb
+ - PromisesObjC
+ - SDWebImage
+ - SwiftyGif
+ - Toast
+ - Try
+
+EXTERNAL SOURCES:
+ audioplayers_darwin:
+ :path: ".symlinks/plugins/audioplayers_darwin/ios"
+ file_picker:
+ :path: ".symlinks/plugins/file_picker/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_foundation:
+ :path: ".symlinks/plugins/path_provider_foundation/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_foundation:
+ :path: ".symlinks/plugins/shared_preferences_foundation/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
+ DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
+ DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
+ file_picker: ce3938a0df3cc1ef404671531facef740d03f920
+ Firebase: 07150e75d142fb9399f6777fa56a187b17f833a0
+ firebase_core: e477125798fc37cd4ab43ca6a8536bf7e0929c00
+ firebase_messaging: 334d68c3a36b6d4d5cd91e4f42509e0d4ae49828
+ FirebaseCore: f86a1394906b97ac445ae49c92552a9425831bed
+ FirebaseCoreInternal: 950500ad8a08963657f6d8c67b579740c06d6aa1
+ FirebaseInstallations: 7b99ef103f013624444c614397038219c45f8e63
+ FirebaseMessaging: bb2c4f6422a753038fe137d90ae7c1af57251316
+ Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
+ flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069
+ flutter_local_notifications: 0c0b1ae97e741e1521e4c1629a459d04b9aec743
+ flutter_sound: c60effa2a350fb977885f0db2fbc4c1ad5160900
+ flutter_sound_core: 26c10e5832e76aaacfae252d8925232281c486ae
+ fluttertoast: fafc4fa4d01a6a9e4f772ecd190ffa525e9e2d9c
+ FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
+ GoogleDataTransport: f0308f5905a745f94fb91fea9c6cbaf3831cb1bd
+ GoogleUtilities: c63691989bf362ba0505507da00eeb326192e83e
+ image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5
+ MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
+ nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431
+ package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
+ path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
+ permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6
+ PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4
+ qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e
+ SDWebImage: 750adf017a315a280c60fde706ab1e552a3ae4e9
+ share: 0b2c3e82132f5888bccca3351c504d0003b3b410
+ shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
+ speech_to_text: b43a7d99aef037bd758ed8e45d79bbac035d2dfe
+ sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a
+ SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
+ Toast: 91b396c56ee72a5790816f40d3a94dd357abc196
+ Try: 5ef669ae832617b3cee58cb2c6f99fb767a4ff96
+ url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4
+
+PODFILE CHECKSUM: 9addd1ae6176ca7bfe24f8bac9acf6aeb76cd8f5
+
+COCOAPODS: 1.12.1
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 86b0405c..3f4e3439 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -7,7 +7,7 @@
CFBundleDevelopmentRegion
$(DEVELOPMENT_LANGUAGE)
CFBundleDisplayName
- Atoms SA
+ Atoms
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
@@ -15,7 +15,7 @@
CFBundleInfoDictionaryVersion
6.0
CFBundleName
- Atoms SA
+ Atoms
CFBundlePackageType
APPL
CFBundleShortVersionString
@@ -28,6 +28,8 @@
LSRequiresIPhoneOS
+ LSSupportsOpeningDocumentsInPlace
+
NSCameraUsageDescription
This app requires permission to access Camera to allow user to attach images
NSMicrophoneUsageDescription
@@ -36,6 +38,8 @@
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
+
UIBackgroundModes
fetch
@@ -58,9 +62,9 @@
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
+ UISupportsDocumentBrowser
+
UIViewControllerBasedStatusBarAppearance
- UIApplicationSupportsIndirectInputEvents
-
diff --git a/ios/Runner/Runner.entitlements b/ios/Runner/Runner.entitlements
index 903def2a..b3fdc75e 100644
--- a/ios/Runner/Runner.entitlements
+++ b/ios/Runner/Runner.entitlements
@@ -4,5 +4,7 @@
aps-environment
development
+ inter-app-audio
+
diff --git a/lib/controllers/api_routes/api_manager.dart b/lib/controllers/api_routes/api_manager.dart
index 3bbfed51..77adc8b5 100644
--- a/lib/controllers/api_routes/api_manager.dart
+++ b/lib/controllers/api_routes/api_manager.dart
@@ -1,7 +1,5 @@
import 'dart:convert';
-import 'dart:developer';
-import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:http/http.dart' as http;
@@ -23,6 +21,7 @@ class ApiManager {
Future get(
String url, {
Map headers,
+ enableToastMessage = true,
}) async {
headers ??= {};
@@ -34,7 +33,7 @@ class ApiManager {
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) {
+ if (message != null && message.toString().isNotEmpty && enableToastMessage) {
Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG);
}
}
diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart
index b4cb7226..64815ebc 100644
--- a/lib/controllers/api_routes/urls.dart
+++ b/lib/controllers/api_routes/urls.dart
@@ -1,8 +1,12 @@
class URLs {
URLs._();
- static const host2 = "http://194.163.164.213/atoms/api";
- static const host1 = "https://atomsuat.hmg.com"; // uat url
+ static const host2 = "http://194.163.164.213/atoms/api"; // todo @sikander will remove after confirmation
+
+ //static const host1 = "https://atomsuat.hmg.com"; // old uat url
+ //static const host1 = "https://atomsm.hmg.com"; // production url
+
+ static const host1 = "https://atomsmdev.hmg.com"; // local UAT url
// static const host1 = "http://109.123.243.118:9000";
@@ -12,7 +16,9 @@ class URLs {
set host(String value) => _host = value;
- static String getFileUrl(String file) => (file == null || file.isEmpty) ? null : (file.contains("/") ? file : "$_host/attachment/$file");
+ static String getFileUrl(String file) => (file == null || file.isEmpty) ? null : (file.contains("/") ? file : "$_baseUrl/Files/DownloadFile?fileName=$file");
+
+ // static String getFileUrl(String file) => (file == null || file.isEmpty) ? null :1 (file.contains("/") ? file : "$_host/attachment/$file");
// API Routes
static get login => "$_baseUrl/MobileAuth/LoginIntegration"; // post
@@ -50,6 +56,8 @@ class URLs {
static get updateRegularVisits => "$_baseUrl/Visit/UpdateVisits"; // get
static get getSingleServiceRequest => "$_baseUrl/return/call/information"; // get
+ static get getSuppliersAutoComplete => "$_baseUrl/Supplier/GetSuppliersAutoComplete";
+
static get getNotifications => "$_baseUrl/return/user/notification"; // get
static get getRecentNotifications => "$_baseUrl/return/user/recent/notification"; // get
static get createRequest => "$_baseUrl/CallRequest/AddCallRequest"; // get
@@ -63,13 +71,15 @@ class URLs {
static get createDuplicatedReport => "$_baseUrl/handle/duplicate/request"; // get
static get searchWorkOrders => "$_baseUrl/WorkOrder/SearchWorkOrders";
+ static get getSubWorkerInfoAccordingToPreviousStep => "$_baseUrl/WorkOrder/GetDataPreviousStep";
+
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 getServiceReportPriority => "$_baseUrl/Lookups/GetLookup?lookupEnum=4"; // get
static get getServiceReportDefectTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=601"; // get
static get getCallRequestForWorkOrder => "$_baseUrl/CallRequest/GetCallRequestForWorkOrder"; // get
@@ -87,6 +97,8 @@ class URLs {
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
+ static get getAssetTransferStatus => "$_baseUrl/Lookups/GetLookup?lookupEnum=406"; // get
// employee
static get getEmployees => "$_baseUrl/Lookups/GetLookup?lookupEnum=33"; // get
diff --git a/lib/controllers/providers/api/device_transfer_provider.dart b/lib/controllers/providers/api/device_transfer_provider.dart
index ca5234ce..52434818 100644
--- a/lib/controllers/providers/api/device_transfer_provider.dart
+++ b/lib/controllers/providers/api/device_transfer_provider.dart
@@ -1,4 +1,5 @@
import 'dart:convert';
+import 'dart:developer';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
@@ -6,6 +7,7 @@ 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';
import '../../../models/hospital.dart';
@@ -14,6 +16,8 @@ class DeviceTransferProvider extends ChangeNotifier {
// number of items call in each request
final pageItemNumber = 12;
+ DeviceTransferSearch deviceTransferSearch = DeviceTransferSearch();
+
//reset provider data
void reset() {
items = null;
@@ -63,16 +67,15 @@ class DeviceTransferProvider extends ChangeNotifier {
}) async {
if (isLoading == true) return -2;
isLoading = true;
+ if (items?.isEmpty ?? true) notifyListeners();
Response response;
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,
- );
+ response = await ApiManager.instance.post(URLs.getDeviceTransfer, body: body);
stateCode = response.statusCode;
if (stateCode >= 200 && stateCode < 300) {
@@ -80,8 +83,8 @@ class DeviceTransferProvider extends ChangeNotifier {
List listJson = json.decode(response.body)["data"];
List itemsPage = listJson.map((request) => DeviceTransfer.fromJson(request)).toList();
items ??= [];
- items.addAll(itemsPage);
- print(listJson);
+ items.addAll(itemsPage.toSet().toList());
+ notifyListeners();
if (itemsPage.length == pageItemNumber) {
nextPage = true;
} else {
@@ -99,6 +102,23 @@ class DeviceTransferProvider extends ChangeNotifier {
}
}
+ 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,
@@ -107,18 +127,22 @@ class DeviceTransferProvider extends ChangeNotifier {
Map body = {
"id": 0,
"assetId": model.device.id ?? "",
- "destSiteId": model.receiver.client.id ?? "",
- "destDepartmentId": model.receiver.department.id ?? "",
- "senderSiteId": model.receiver.client.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": 0,
- // "senderFloorId": 0,
- // "senderDepartmentId": 0,
- // "senderRoom": "string",
+ /////
+ "senderBuildingId": model.device.destBuildingId,
+ "senderFloorId": model.device.destFloorId,
+ "senderDepartmentId": model.device.destDepartmentId,
+ "senderRoom": model.device.destRoom,
+ if (model?.sender?.attachments?.isNotEmpty ?? false)
+ "senderAttachments":
+ model?.sender?.attachments?.map((file) => {"attachmentName": _isLocalUrl(file.path) ? ("${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}") : file.path})?.toList(),
// "senderAssignedEmployeeId": "string",
// "senderMachineStatusId": 0,
// "senderComment": "string",
@@ -181,17 +205,27 @@ class DeviceTransferProvider extends ChangeNotifier {
"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,
+ "senderEngSignature": newModel.engSignature,
+ if (newModel?.attachments?.isNotEmpty ?? false)
+ "senderAttachments":
+ newModel?.attachments?.map((file) => {"attachmentName": _isLocalUrl(file.path) ? ("${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}") : file.path})?.toList(),
+ "destSiteId": oldModel.receiver.client?.id,
+ "destDepartmentId": oldModel.receiver.department?.id,
+ "destBuildingId": oldModel.device?.destBuildingId,
+ "destFloorId": oldModel.device?.destFloorId,
+ "destRoom": oldModel.device?.destRoom,
"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 ?? "",
+ "receiverTravelingHours": oldModel.receiver?.travelingHours,
+ "receiverEngSignature": oldModel.receiver?.engSignature,
+ if (oldModel.receiver?.attachments?.isNotEmpty ?? false)
+ "receiverAttachments": oldModel.receiver?.attachments
+ ?.map((file) => {"attachmentName": _isLocalUrl(file.path) ? ("${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}") : file.path})
+ ?.toList(),
});
} else {
body.addAll({
@@ -203,10 +237,16 @@ class DeviceTransferProvider extends ChangeNotifier {
"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,
+ "senderTravelingHours": oldModel.sender?.travelingHours,
+ "senderEngSignature": oldModel.sender?.engSignature,
+ if (oldModel.sender?.attachments?.isNotEmpty ?? false)
+ "senderAttachments":
+ oldModel.sender?.attachments?.map((file) => {"attachmentName": _isLocalUrl(file.path) ? ("${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}") : file.path})?.toList(),
+ "destSiteId": newModel.client?.id,
+ "destDepartmentId": newModel.department?.id,
+ "destBuildingId": oldModel.device?.destBuildingId,
+ "destFloorId": oldModel.device?.destFloorId,
+ "destRoom": oldModel.device?.destRoom,
"receiverAssignedEmployeeId": newModel.userId,
"receiverMachineStatusId": newModel.status?.id ?? "",
"receiverComment": newModel.comment,
@@ -214,18 +254,20 @@ class DeviceTransferProvider extends ChangeNotifier {
"receiverStartDate": newModel.timer?.startAt?.toIso8601String(),
"receiverEndDate": newModel.timer?.endAt?.toIso8601String(),
"receiverTravelingHours": newModel.travelingHours,
- "receiverAttachmentName": newModel?.signature ?? "",
+ "receiverEngSignature": newModel.engSignature,
+ if (newModel?.attachments?.isNotEmpty ?? false)
+ "receiverAttachments":
+ newModel?.attachments?.map((file) => {"attachmentName": _isLocalUrl(file.path) ? ("${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}") : file.path})?.toList(),
});
}
-
//body.addAll(newModel.toJson(isSender));
- print(body);
+ log(body?.toString());
Response response;
try {
response = await ApiManager.instance.put(URLs.updateDeviceTransfer, body: body);
print(response.body);
- print("${newModel.signature}.png");
+ print("${newModel.engSignature}.png");
// response = await post(
// Uri.parse("$host${URLs.updateDeviceTransfer}/$requestId"),
// body: body,
@@ -246,4 +288,9 @@ class DeviceTransferProvider extends ChangeNotifier {
return -1;
}
}
+
+ bool _isLocalUrl(String url) {
+ if (url?.isEmpty != false) return false;
+ return url.startsWith("/") || url.startsWith("file://") || url.substring(1).startsWith(':\\');
+ }
}
diff --git a/lib/controllers/providers/api/devices_provider.dart b/lib/controllers/providers/api/devices_provider.dart
index 2d55a2a7..03a8228f 100644
--- a/lib/controllers/providers/api/devices_provider.dart
+++ b/lib/controllers/providers/api/devices_provider.dart
@@ -17,20 +17,25 @@ class DevicesProvider extends ChangeNotifier {
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 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) {
_loading = isLoading;
notifyListeners();
@@ -47,6 +52,7 @@ class DevicesProvider extends ChangeNotifier {
@required int hospitalId,
String serialNumber,
String number,
+ bool isQr = false,
}) async {
if (_loading == true) return -2;
_loading = true;
@@ -70,7 +76,15 @@ class DevicesProvider extends ChangeNotifier {
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List equipmentListJson = json.decode(response.body)["data"];
- _devices.addAll(equipmentListJson.map((device) => Device.fromJson(device)).toList());
+ var dList = equipmentListJson.map((device) => Device.fromJson(device, startKeyWithDest: false)).toList();
+ try {
+ if (isQr) {
+ dList = dList.where((element) => number?.toLowerCase() == element?.number?.toLowerCase())?.toList() ?? [];
+ }
+ } catch (e) {
+ print(e);
+ }
+ _devices.addAll(dList);
nextPage = true;
} else {
nextPage = false;
@@ -111,8 +125,8 @@ class DevicesProvider extends ChangeNotifier {
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List equipmentListJson = json.decode(response.body)["data"];
- page = equipmentListJson.map((device) => Device.fromJson(device)).toList();
- _devices.addAll(equipmentListJson.map((device) => Device.fromJson(device)).toList());
+ page = equipmentListJson.map((device) => Device.fromJson(device, startKeyWithDest: false)).toList();
+ _devices.addAll(equipmentListJson.map((device) => Device.fromJson(device, startKeyWithDest: false)).toList());
notifyListeners();
}
return page;
@@ -147,31 +161,31 @@ class DevicesProvider extends ChangeNotifier {
}
}
- // /// 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 [];
- // }
- // }
+// /// 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 faf84d66..9e24fcb6 100644
--- a/lib/controllers/providers/api/gas_refill_provider.dart
+++ b/lib/controllers/providers/api/gas_refill_provider.dart
@@ -1,4 +1,5 @@
import 'dart:convert';
+import 'dart:developer';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
@@ -6,6 +7,7 @@ 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 {
@@ -47,20 +49,19 @@ class GasRefillProvider extends ChangeNotifier {
Future getRequests({
@required String host,
@required User user,
+ @required bool mostRecent,
}) async {
if (isLoading == true) return -2;
isLoading = true;
+ if (items?.isEmpty ?? true) notifyListeners();
Response response;
Map body = {};
body["pageNumber"] = (items?.length ?? 0) ~/ pageItemNumber + 1;
body["pageSize"] = pageItemNumber;
- print("url:${URLs.getGasRefill}:body:$body");
+ body["mostRecent"] = mostRecent;
- response = await ApiManager.instance.post(
- 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
@@ -68,6 +69,7 @@ class GasRefillProvider extends ChangeNotifier {
List itemsPage = requestsListJson.map((request) => GasRefillModel.fromJson(request)).toList();
items ??= [];
items.addAll(itemsPage);
+ notifyListeners();
if (itemsPage.length == pageItemNumber) {
nextPage = true;
} else {
@@ -91,24 +93,22 @@ class GasRefillProvider extends ChangeNotifier {
@required User user,
@required GasRefillModel model,
}) async {
- print("ss");
Map body = {
"uid": user.id.toString(),
"token": user.token ?? "",
"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) "expectedDate": expectedDateTime?.toIso8601String(),
if (expectedDateTime != null) "expectedTime": expectedDateTime?.toIso8601String(),
- if (startDate != null) "startDate": startDate?.toIso8601String(),
- if (startDate != null) "startTime": startDate?.toIso8601String(),
- if (endDate != null) "endDate": endDate?.toIso8601String(),
- if (endDate != null) "endTime": endDate?.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(),
};
- print("ss1");
body["gazRefillDetails"] = model.details
.map((model) => {
"gasType": model.type.toMap(),
@@ -121,7 +121,6 @@ class GasRefillProvider extends ChangeNotifier {
Response response;
try {
response = await ApiManager.instance.post(URLs.requestGasRefill, body: body);
- print("ss2");
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
if (items != null) {
@@ -146,13 +145,14 @@ class GasRefillProvider extends ChangeNotifier {
"id": newModel.id,
"gazRefillNo": newModel.title ?? "",
"status": newModel.status.toMap(),
- "expectedDate": oldModel.expectedDate?.toIso8601String(),
- "expectedTime": oldModel.expectedDate?.toIso8601String(),
- "startDate": startDate?.toIso8601String(),
- "startTime": startDate?.toIso8601String(),
- "endDate": endDate?.toIso8601String(),
- "endTime": endDate?.toIso8601String(),
- "workingHours": ((endDate?.difference(startDate)?.inMinutes ?? 0) / 60),
+ //"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),
@@ -171,7 +171,7 @@ class GasRefillProvider extends ChangeNotifier {
"deliverdQty": model.deliveredQuantity,
})
.toList();
-
+ log(body.toString());
Response response;
try {
response = await ApiManager.instance.put(URLs.updateGasRefill, body: body);
@@ -196,6 +196,5 @@ class GasRefillProvider extends ChangeNotifier {
Floors floor;
Departments department;
DateTime expectedDateTime;
- DateTime startDate;
- DateTime endDate;
+ TimerModel timer;
}
diff --git a/lib/controllers/providers/api/hospitals_provider.dart b/lib/controllers/providers/api/hospitals_provider.dart
index a52a750e..da0e2cd7 100644
--- a/lib/controllers/providers/api/hospitals_provider.dart
+++ b/lib/controllers/providers/api/hospitals_provider.dart
@@ -22,22 +22,27 @@ 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) {
_loading = isLoading;
notifyListeners();
diff --git a/lib/controllers/providers/api/parts_provider.dart b/lib/controllers/providers/api/parts_provider.dart
index c0ae098c..de14ce42 100644
--- a/lib/controllers/providers/api/parts_provider.dart
+++ b/lib/controllers/providers/api/parts_provider.dart
@@ -22,22 +22,27 @@ 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) {
_loading = isLoading;
notifyListeners();
@@ -85,17 +90,21 @@ 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, num assetId, String title}) async {
Response response;
try {
- response = await ApiManager.instance.post(URLs.getPartNumber, body: {if (title != null && title.isNotEmpty) "partName": title});
- List _page = [];
+ if (int.tryParse(title) != null) {
+ response = await ApiManager.instance.post(URLs.getPartNumber, body: {if (title != null && title.isNotEmpty) "partNo": title, "assetId": assetId});
+ } else {
+ response = await ApiManager.instance.post(URLs.getPartNumber, body: {if (title != null && title.isNotEmpty) "partName": title, "assetId": assetId});
+ }
+ 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((part) => Part.fromJson(part)).toList();
+ page = categoriesListJson.map((part) => Part.fromJson(part)).toList();
}
- return _page;
+ return page;
} catch (error) {
return [];
}
diff --git a/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart b/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart
index 59bf347a..53c3756d 100644
--- a/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart
+++ b/lib/controllers/providers/api/preventive_maintenance_visits_provider.dart
@@ -69,7 +69,7 @@ class PreventiveMaintenanceVisitsProvider extends ChangeNotifier {
// 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 = [];
+ visits ??= [];
visits.addAll(_visits);
if (_visits.length == pageItemNumber) {
nextPage = true;
diff --git a/lib/controllers/providers/api/regular_visits_provider.dart b/lib/controllers/providers/api/regular_visits_provider.dart
index 42fb1dd9..7209c08a 100644
--- a/lib/controllers/providers/api/regular_visits_provider.dart
+++ b/lib/controllers/providers/api/regular_visits_provider.dart
@@ -13,7 +13,7 @@ import 'package:test_sa/models/visits/visits_search.dart';
class RegularVisitsProvider extends ChangeNotifier {
// number of items call in each request
- final pageItemNumber = 20;
+ final pageItemNumber = 12;
//reset provider data
void reset() {
@@ -52,7 +52,7 @@ class RegularVisitsProvider extends ChangeNotifier {
}) async {
if (isLoading == true) return -2;
isLoading = true;
- if (visits == null) notifyListeners();
+ if (visits?.isEmpty ?? true) notifyListeners();
Response response;
//userId = 397.toString(); // testing id to view data
@@ -77,10 +77,11 @@ class RegularVisitsProvider extends ChangeNotifier {
// client's request was successfully received
try {
List requestsListJson = json.decode(response.body)["data"];
- List _visits = requestsListJson.map((request) => Visit.fromJson(request)).toList();
- visits ??= [];
- visits.addAll(_visits);
- if (_visits.length == pageItemNumber) {
+ List visits = requestsListJson.map((request) => Visit.fromJson(request)).toList();
+ this.visits ??= [];
+ this.visits.addAll(visits);
+ notifyListeners();
+ if (visits.length == pageItemNumber) {
nextPage = true;
} else {
nextPage = false;
diff --git a/lib/controllers/providers/api/service_requests_provider.dart b/lib/controllers/providers/api/service_requests_provider.dart
index 8b014f83..5aee9c12 100644
--- a/lib/controllers/providers/api/service_requests_provider.dart
+++ b/lib/controllers/providers/api/service_requests_provider.dart
@@ -16,6 +16,7 @@ import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/models/timer_model.dart';
import '../../../models/service_request/search_work_order.dart';
+import '../../../models/service_request/sub_work_order_details.dart';
import '../../../models/user.dart';
class ServiceRequestsProvider extends ChangeNotifier {
@@ -57,7 +58,7 @@ class ServiceRequestsProvider extends ChangeNotifier {
Future getRequests({@required int hospitalId}) async {
if (isLoading == true) return -2;
isLoading = true;
- if (serviceRequests == null) notifyListeners();
+ if (serviceRequests?.isEmpty ?? false) notifyListeners();
Response response;
try {
Map body = {};
@@ -77,6 +78,7 @@ class ServiceRequestsProvider extends ChangeNotifier {
List serviceRequestsPage = requestsListJson.map((request) => ServiceRequest.fromJson(request)).toList();
serviceRequests ??= [];
serviceRequests.addAll(serviceRequestsPage);
+ notifyListeners();
if (serviceRequestsPage.length == pageItemNumber) {
nextPage = true;
} else {
@@ -144,10 +146,10 @@ class ServiceRequestsProvider extends ChangeNotifier {
"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(),
+ "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": [
@@ -176,17 +178,26 @@ class ServiceRequestsProvider extends ChangeNotifier {
body["voiceNote"] = serviceRequest.audio;
}
Response response;
- 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]));
- notifyListeners();
+ //try {
+ response = await ApiManager.instance.post(URLs.createRequest, body: body);
+ stateCode = response.statusCode;
+ if (response.statusCode >= 200 && response.statusCode < 300) {
+ if (serviceRequests != null) {
+ var data = json.decode(utf8.decode(response.bodyBytes));
+ if (data is List) {
+ serviceRequests.insert(0, ServiceRequest.fromJson(data[0]));
+ } else {
+ if (data["data"] != null && data["data"] == true) {
+ // serviceRequests.insert(0, ServiceRequest.fromJson(data[0]));
+ }
+ }
}
- return response.statusCode;
- } catch (error) {
- return -1;
+ notifyListeners();
}
+ return response.statusCode;
+ // } catch (error) {
+ // return -1;
+ // }
}
Future createIssueReport({
@@ -221,7 +232,6 @@ class ServiceRequestsProvider extends ChangeNotifier {
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;
var body = {
"id": request.id,
@@ -305,7 +315,7 @@ class ServiceRequestsProvider extends ChangeNotifier {
},
"assetType": report.assetType?.toMap(),
"assignedEmployee": {"id": report.engineer?.id, "name": report.engineer?.name ?? ""},
- "visitDate": report.visitDate?.toIso8601String() ?? "",
+ "visitDate": report.returnToService?.toIso8601String() ?? "",
// "assistantEmployees": [
// {"id": report.engineer.id, "name": report.engineer.name},
// ],
@@ -337,7 +347,7 @@ class ServiceRequestsProvider extends ChangeNotifier {
?.map(
(p) => {
"id": p.reportPartID ?? 0,
- "sparePart": {"id": p.id, "partNo": p.code, "partName": p.name},
+ "sparePart": {"id": p.id, "partNo": p.partNo, "partName": p.partName},
"qty": p.quantity
},
)
@@ -354,7 +364,6 @@ class ServiceRequestsProvider extends ChangeNotifier {
// 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),
@@ -380,8 +389,6 @@ class ServiceRequestsProvider extends ChangeNotifier {
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();
@@ -432,7 +439,6 @@ class ServiceRequestsProvider extends ChangeNotifier {
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;
@@ -446,6 +452,23 @@ class ServiceRequestsProvider extends ChangeNotifier {
}
}
+ Future getSubWorkOrderDetails({@required String parentId}) async {
+ Response response;
+ try {
+ response = await ApiManager.instance.get(URLs.getSubWorkerInfoAccordingToPreviousStep + "?parentId=$parentId");
+ stateCode = response.statusCode;
+ if (response.statusCode >= 200 && response.statusCode < 300) {
+ // client's request was successfully received
+ final workOrderJson = json.decode(response.body)["data"];
+ return SubWorkOrderDetails.fromJson(workOrderJson);
+ }
+ return null;
+ } catch (e) {
+ print("getSubWorkOrderDetails [error] : $e");
+ return null;
+ }
+ }
+
Future createDuplicatedReport({
@required String host,
@required User user,
@@ -595,6 +618,19 @@ class ServiceRequestsProvider extends ChangeNotifier {
}
}
+ Future getServiceRequestObjectById({@required String requestId}) async {
+ try {
+ Response response = await ApiManager.instance.get(URLs.getServiceRequestById + "?callRequestId=$requestId");
+ if (response.statusCode >= 200 && response.statusCode < 300) {
+ return ServiceRequest.fromJson(json.decode(response.body)["data"]);
+ } else {
+ return null;
+ }
+ } catch (error) {
+ return null;
+ }
+ }
+
Future