diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index 22f6caa2..2cac62b1 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -293,4 +293,6 @@ class URLs { //comments static get getComments => "$_baseUrl/CallRequest/GetHistoryComments"; // get static get addComment => "$_baseUrl/CallRequest/AddHistoryComment"; // add + + static get getSiteContactInfo => "$_baseUrl/AssetGroupSiteContactInfo"; // add } diff --git a/lib/controllers/providers/api/user_provider.dart b/lib/controllers/providers/api/user_provider.dart index afc67620..6e6fc577 100644 --- a/lib/controllers/providers/api/user_provider.dart +++ b/lib/controllers/providers/api/user_provider.dart @@ -11,6 +11,7 @@ import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/new_models/general_response_model.dart'; import 'package:test_sa/models/new_models/update_password.dart'; import 'package:test_sa/models/new_models/verify_otp_model.dart'; +import 'package:test_sa/models/site_contact_info_model.dart'; import 'package:test_sa/models/user.dart'; import 'package:test_sa/new_views/swipe_module/models/swipe_model.dart'; import 'package:test_sa/new_views/swipe_module/models/swipe_transaction_history.dart'; @@ -41,12 +42,15 @@ class UserProvider extends ChangeNotifier { VerifyOtpModel _verifyOtpModel = VerifyOtpModel(); SwipeTransaction _swipeTransactionModel = SwipeTransaction(); List _swipeHistory = []; + List _siteContactList = []; UserContactInfoModel userInfoModel = UserContactInfoModel(); SwipeTransaction get swipeTransactionModel => _swipeTransactionModel; List get swipeHistory => _swipeHistory; + List get siteContactList => _siteContactList; + set swipeHistory(List value) { _swipeHistory = value; notifyListeners(); @@ -57,6 +61,11 @@ class UserProvider extends ChangeNotifier { notifyListeners(); } + set siteContactList(List value) { + _siteContactList = value; + notifyListeners(); + } + VerifyOtpModel get verifyOtpModel => _verifyOtpModel; set verifyOtpModel(VerifyOtpModel value) { @@ -369,6 +378,21 @@ class UserProvider extends ChangeNotifier { } } + Future getSiteContactInfo() async { + Response response; + try { + response = await ApiManager.instance.get(URLs.getSiteContactInfo); + if (response.statusCode >= 200 && response.statusCode < 300) { + List dataList = GeneralResponseModel.fromJson(json.decode(response.body)).data; + _siteContactList = List.generate(dataList.length, (index) => SiteContactInfoModel.fromJson(dataList[index])); + } + return response.statusCode; + } catch (error) { + _siteContactList = []; + return -1; + } + } + Future getSwipeTransactionHistory({required String userId, required DateTime dateFrom, required DateTime dateTo}) async { isLoading = true; notifyListeners(); diff --git a/lib/models/new_models/task_request/task_request_model.dart b/lib/models/new_models/task_request/task_request_model.dart index 2d561614..d28cbc13 100644 --- a/lib/models/new_models/task_request/task_request_model.dart +++ b/lib/models/new_models/task_request/task_request_model.dart @@ -202,6 +202,50 @@ class TaskData { room = json["room"] == null ? null : Rooms.fromJson(json["room"]); } + TaskData.copyWith(TaskData taskData) { + id = taskData.id; + statusValue = taskData.statusValue; + taskJobNo = taskData.taskJobNo; + userCreated = taskData.userCreated; + taskJobContactPersons = taskData.taskJobContactPersons; + taskType = taskData.taskType; + taskJobStatus = taskData.taskJobStatus; + callComment = taskData.callComment; + taskJobAttachments = taskData.taskJobAttachments; + assignedEngineer = taskData.assignedEngineer; + asset = taskData.asset; + taskJobAssistantEmployees = taskData.taskJobAssistantEmployees; + taskJobActivityEngineerTimers = taskData.taskJobActivityEngineerTimers; + taskJobHistories = taskData.taskJobHistories; + serialNo = taskData.serialNo; + installationDate = taskData.installationDate; + completedAction = taskData.completedAction; + impactStatus = taskData.impactStatus; + actionNeeded = taskData.actionNeeded; + typeOfAlert = taskData.typeOfAlert; + installationBuilding = taskData.installationBuilding; + installationDepartment = taskData.installationDepartment; + installationFloor = taskData.installationFloor; + isUserAcknowledge = taskData.isUserAcknowledge; + riskLevel = taskData.riskLevel; + resource = taskData.resource; + alertNo = taskData.alertNo; + estimationDeliveryDate = taskData.estimationDeliveryDate; + reasonOfFSCA = taskData.reasonOfFSCA; + correctiveActionDescription = taskData.correctiveActionDescription; + evaluatorUser = taskData.evaluatorUser; + site = taskData.site; + building = taskData.building; + floor = taskData.floor; + department = taskData.department; + room = taskData.room; + + taskTimerModel = taskData.taskTimerModel; + totalWorkingHours = taskData.totalWorkingHours; + timerModelList = taskData.timerModelList; + taskTimePicker = taskData.taskTimePicker; + } + Map toJson() { final Map data = {}; @@ -400,7 +444,7 @@ class TaskData { data['serialNo'] = serialNo; data['installationDate'] = installationDate; //this is not for recall and alert type.. - if(taskType?.isRecallAndAlert==true&&(typeOfAlert?.value==2||typeOfAlert?.value==3)){ + if (taskType?.isRecallAndAlert == true && (typeOfAlert?.value == 2 || typeOfAlert?.value == 3)) { data['completedActionId'] = actionNeeded?.id; } data['impactStatusId'] = impactStatus?.id; diff --git a/lib/models/site_contact_info_model.dart b/lib/models/site_contact_info_model.dart new file mode 100644 index 00000000..82693a8d --- /dev/null +++ b/lib/models/site_contact_info_model.dart @@ -0,0 +1,27 @@ +class SiteContactInfoModel { + int? id; + int? assetGroupId; + int? siteId; + String? siteName; + String? phoneNumber; + + SiteContactInfoModel({this.id, this.assetGroupId, this.siteId, this.siteName, this.phoneNumber}); + + SiteContactInfoModel.fromJson(Map json) { + id = json['id']; + assetGroupId = json['assetGroupId']; + siteId = json['siteId']; + siteName = json['siteName']; + phoneNumber = json['phoneNumber']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['assetGroupId'] = this.assetGroupId; + data['siteId'] = this.siteId; + data['siteName'] = this.siteName; + data['phoneNumber'] = this.phoneNumber; + return data; + } +} diff --git a/lib/modules/tm_module/tasks_wo/update_task_request_view.dart b/lib/modules/tm_module/tasks_wo/update_task_request_view.dart index e30de6b1..bc2294c2 100644 --- a/lib/modules/tm_module/tasks_wo/update_task_request_view.dart +++ b/lib/modules/tm_module/tasks_wo/update_task_request_view.dart @@ -201,14 +201,13 @@ class _UpdateTaskRequestState extends State { void _updateTask({required BuildContext context, required int status}) async { TaskRequestProvider taskRequestProvider = Provider.of(context, listen: false); - TaskData? taskModel = TaskData.fromJson(taskRequestProvider.taskRequestModel!.toJson()); - + TaskData? taskModel = TaskData.copyWith(taskRequestProvider.taskRequestModel!); taskModel?.statusValue = status; - taskModel.taskTimePicker = taskRequestProvider.taskRequestModel?.taskTimePicker; - taskModel.totalWorkingHours = taskRequestProvider.taskRequestModel?.totalWorkingHours; - taskModel.taskTimerModel = taskRequestProvider.taskRequestModel?.taskTimerModel; - taskModel.timerModelList = taskRequestProvider.taskRequestModel?.timerModelList; + // taskModel.taskTimePicker = taskRequestProvider.taskRequestModel?.taskTimePicker; + // taskModel.totalWorkingHours = taskRequestProvider.taskRequestModel?.totalWorkingHours; + // taskModel.taskTimerModel = taskRequestProvider.taskRequestModel?.taskTimerModel; + // taskModel.timerModelList = taskRequestProvider.taskRequestModel?.timerModelList; if (validate(model: taskModel)) { showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); diff --git a/lib/new_views/pages/land_page/contact_us_bottom_sheet.dart b/lib/new_views/pages/land_page/contact_us_bottom_sheet.dart index b5240379..3d35de8e 100644 --- a/lib/new_views/pages/land_page/contact_us_bottom_sheet.dart +++ b/lib/new_views/pages/land_page/contact_us_bottom_sheet.dart @@ -1,9 +1,15 @@ +import 'package:clipboard/clipboard.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; +import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; +import 'package:test_sa/models/site_contact_info_model.dart'; +import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import 'package:url_launcher/url_launcher_string.dart'; import '../../app_style/app_color.dart'; @@ -15,8 +21,11 @@ class ContactUsBottomSheet extends StatelessWidget { Widget build(BuildContext context) { // String contactNumber = "+966 546345567"; String contactNumber = ""; + List sites = Provider.of(context, listen: false).siteContactList; + return Container( clipBehavior: Clip.antiAlias, + height: MediaQuery.sizeOf(context).height * .5, decoration: BoxDecoration( color: Theme.of(context).scaffoldBackgroundColor, borderRadius: const BorderRadius.only( @@ -25,38 +34,76 @@ class ContactUsBottomSheet extends StatelessWidget { ), ), padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - width: 40.toScreenWidth, - height: 5.toScreenHeight, - decoration: BoxDecoration(color: AppColor.neutral40, borderRadius: BorderRadius.circular(30)), - ), - 16.height, - Align( - alignment: AlignmentDirectional.centerStart, - child: Text( - context.translation.contact, - style: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w600, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + child: SafeArea( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + width: 40.toScreenWidth, + height: 5.toScreenHeight, + decoration: BoxDecoration(color: AppColor.neutral40, borderRadius: BorderRadius.circular(30)), + ), + 16.height, + Align( + alignment: AlignmentDirectional.centerStart, + child: Text( + context.translation.contact, + style: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w600, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + ), ), - ), - 16.height, - // Row( - // children: [ - // contactItem(context, context.isDark, "phone", context.translation.callUs, contactNumber).onPress(() { - // - // return; - // launchUrlString("tel://$contactNumber"); - // }).expanded, - // 16.width, - // contactItem(context, context.isDark, "whatsapp", context.translation.liveChat, context.translation.openWhatsapp).onPress(() { - // _launchWhatsapp(contactNumber); - // }).expanded, - // ], - // ), - 32.height, - ], + 4.height, + if (sites.isNotEmpty) + ListView.separated( + padding: const EdgeInsets.only(top: 12, bottom: 12), + itemBuilder: (cxt, index) => Row( + children: [ + 8.width, + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + sites[index].siteName ?? "", + style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + ), + 4.height, + Text( + sites[index].phoneNumber ?? "", + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), + ), + ], + ).expanded, + IconButton( + icon: const Icon(Icons.copy_rounded), + padding: EdgeInsets.zero, + iconSize: 20, + onPressed: () { + FlutterClipboard.copy('Hello Flutter friends'); + }, + ) + ], + ).toShadowContainer(context, padding: 8), + separatorBuilder: (cxt, index) => 12.height, + itemCount: sites.length) + .expanded + else + const NoDataFound().paddingOnly(top: 80).center + + // Row( + // children: [ + // contactItem(context, context.isDark, "phone", context.translation.callUs, contactNumber).onPress(() { + // + // return; + // launchUrlString("tel://$contactNumber"); + // }).expanded, + // 16.width, + // contactItem(context, context.isDark, "whatsapp", context.translation.liveChat, context.translation.openWhatsapp).onPress(() { + // _launchWhatsapp(contactNumber); + // }).expanded, + // ], + // ), + // 32.height, + ], + ), ), ); } diff --git a/lib/new_views/pages/land_page/land_page.dart b/lib/new_views/pages/land_page/land_page.dart index a4ed3dd5..0aebe82e 100644 --- a/lib/new_views/pages/land_page/land_page.dart +++ b/lib/new_views/pages/land_page/land_page.dart @@ -108,6 +108,7 @@ class _LandPageState extends State { if (_userProvider!.user != null && _userProvider!.user!.employeeIsHMG == false) { WidgetsBinding.instance.addPostFrameCallback((_) { _userProvider!.getSwipeLastTransaction(userId: _userProvider!.user!.userID!); + _userProvider!.getSiteContactInfo(); Provider.of(context, listen: false).getData(); }); } diff --git a/lib/new_views/swipe_module/models/swipe_transaction_history.dart b/lib/new_views/swipe_module/models/swipe_transaction_history.dart index 7bb0137a..2805d9c7 100644 --- a/lib/new_views/swipe_module/models/swipe_transaction_history.dart +++ b/lib/new_views/swipe_module/models/swipe_transaction_history.dart @@ -1,22 +1,22 @@ class SwipeHistory { - final int ?id; + final int? id; final String? swipeTypeName; final String? userName; - final String ?siteName; - final String ?pointName; - final String ?swipeTime; - final bool ?isSuccess; + final String? siteName; + final String? pointName; + final String? swipeTime; + final bool? isSuccess; final String? errorMessage; SwipeHistory({ - this.id, - this.swipeTypeName, - this.userName, - this.siteName, - this.pointName, - this.swipeTime, - this.isSuccess, - this.errorMessage, + this.id, + this.swipeTypeName, + this.userName, + this.siteName, + this.pointName, + this.swipeTime, + this.isSuccess, + this.errorMessage, }); factory SwipeHistory.fromJson(Map json) { @@ -26,7 +26,7 @@ class SwipeHistory { userName: json['userName'], siteName: json['siteName'], pointName: json['pointName'], - swipeTime: json['swipeTime']!=null? DateTime.parse(json['swipeTime']).toIso8601String():'', + swipeTime: json['swipeTime'] != null ? DateTime.parse(json['swipeTime']).toIso8601String() : '', isSuccess: json['isSuccess'], errorMessage: json['errorMessage'], ); diff --git a/pubspec.yaml b/pubspec.yaml index 1f67dfc8..a3bbe508 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -94,6 +94,7 @@ dependencies: just_audio: ^0.9.30 safe_device: ^1.2.1 toggle_switch: ^2.3.0 + clipboard: ^2.0.2 local_auth_darwin: any dev_dependencies: