diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index d274eebf..cbfd5adc 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -3,13 +3,13 @@ class URLs { static const String appReleaseBuildNumber = "40"; - static const host1 = "https://atomsm.hmg.com"; // production url + // static const host1 = "https://atomsm.hmg.com"; // production url // static const host1 = "https://atomsmdev.hmg.com"; // local DEV url - // static const host1 = "https://atomsmuat.hmg.com"; // local UAT url + static const host1 = "https://atomsmuat.hmg.com"; // local UAT url - // static final String _baseUrl = "$_host/mobile"; // host local UAT + static final String _baseUrl = "$_host/mobile"; // host local UAT // static final String _baseUrl = "$_host/v2/mobile"; // new V2 apis - static final String _baseUrl = "$_host/v3/mobile"; // v3 for production CM,PM,TM + // static final String _baseUrl = "$_host/v3/mobile"; // v3 for production CM,PM,TM // static final String _baseUrl = "$_host/v4/mobile"; // v4 for Demo module // static final String _baseUrl = "$_host/v5/mobile"; // v5 for data segregation // static final String _baseUrl = "$_host/v6/mobile"; // for asset delivery module diff --git a/lib/modules/traf_module/create_traf_request_page.dart b/lib/modules/traf_module/create_traf_request_page.dart index 8a7f5435..206d1350 100644 --- a/lib/modules/traf_module/create_traf_request_page.dart +++ b/lib/modules/traf_module/create_traf_request_page.dart @@ -1,3 +1,6 @@ +import 'dart:convert'; +import 'dart:io'; + import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; @@ -7,13 +10,13 @@ import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/helper/utils.dart'; import 'package:test_sa/models/device/asset.dart'; +import 'package:test_sa/models/generic_attachment_model.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/new_models/traf_department.dart'; import 'package:test_sa/models/new_models/users_based_on_search_model.dart'; +import 'package:test_sa/modules/cm_module/cm_request_utils.dart'; import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart'; import 'package:test_sa/modules/traf_module/asset_auto_complete_field.dart'; -import 'package:test_sa/modules/traf_module/traf_request_detail_page.dart'; -import 'package:test_sa/modules/traf_module/update_traf_request_page.dart'; import 'package:test_sa/modules/traf_module/users_auto_complete_field.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; @@ -21,11 +24,11 @@ import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/new_views/common_widgets/multiple_item_drop_down_menu.dart'; import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart'; -import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/providers/lookups/department_lookup_provider.dart'; import 'package:test_sa/providers/lookups/request_type_lookup_provider.dart'; import 'package:test_sa/providers/lookups/yes_no_lookup_provider.dart'; import 'package:test_sa/views/widgets/equipment/asset_picker.dart'; +import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; import 'traf_request_model.dart'; import 'traf_request_provider.dart'; @@ -58,6 +61,7 @@ class _CreateTRAFRequestPageState extends State { List departments = []; List userBasedOnSearch = []; + List attachments = []; FocusNode otherServicesEffectsNode = FocusNode(); FocusNode useInCombinationNode = FocusNode(); @@ -443,9 +447,21 @@ class _CreateTRAFRequestPageState extends State { trafRequest?.usedWithCombination = value; }, ), - ] + ], + 12.height, + AttachmentPicker( + label: context.translation.attachFiles, + attachment: attachments, + buttonColor: AppColor.black10, + onlyImages: false, + buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120), + onChange: (attachment) { + attachments = attachment; + }, + ), ], ).toShadowContainer(context, padding: 12, borderRadius: 20), + 16.height, Row( children: [ @@ -521,6 +537,17 @@ class _CreateTRAFRequestPageState extends State { return; } + // Process attachments similar to CreateCMRequest + trafRequest?.attachments = []; + for (var item in attachments) { + String fileName = CMRequestUtils.isLocalUrl(item.name ?? '') + ? ("${item.name ?? ''.split("/").last}|${base64Encode(File(item.name ?? '').readAsBytesSync())}") + : item.name ?? ''; + trafRequest?.attachments!.add( + Attachments(id: 0, trafId: 0, attachmentName: fileName), + ); + } + Utils.showLoading(context); bool isSuccess = await Provider.of(context, listen: false).addTraf(trafRequest!.toJson()); Utils.hideLoading(context); diff --git a/lib/modules/traf_module/traf_request_detail_page.dart b/lib/modules/traf_module/traf_request_detail_page.dart index 00f25512..e4a804c7 100644 --- a/lib/modules/traf_module/traf_request_detail_page.dart +++ b/lib/modules/traf_module/traf_request_detail_page.dart @@ -1,8 +1,11 @@ +import 'dart:io'; + import 'package:flutter/material.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/enums/user_types.dart'; @@ -12,9 +15,11 @@ import 'package:test_sa/modules/traf_module/update_traf_request_page.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; +import 'package:test_sa/views/widgets/images/files_list.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; +import '../../controllers/api_routes/urls.dart'; import 'asset_analytics_model.dart'; import 'traf_request_model.dart'; @@ -32,6 +37,8 @@ class TrafRequestDetailPage extends StatefulWidget { } class _TrafRequestDetailPageState extends State { + List _attachments = []; + @override void initState() { super.initState(); @@ -65,6 +72,15 @@ class _TrafRequestDetailPageState extends State { requestInformation(trafProvider.trafRequestDataModel!), 12.height, assetInformation(trafProvider.trafRequestDataModel!), + if (_attachments.isNotEmpty) ...[ + 12.height, + Text( + "Attachments".addTranslation, + style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + ), + 8.height, + FilesList(images: trafProvider.trafRequestDataModel?.attachments?.map((e) => URLs.getFileUrl(e.attachmentName ?? '') ?? '').toList() ?? []), + ], ], ).expanded, // // if (isEngineer) diff --git a/lib/modules/traf_module/traf_request_model.dart b/lib/modules/traf_module/traf_request_model.dart index af3977be..88295bdd 100644 --- a/lib/modules/traf_module/traf_request_model.dart +++ b/lib/modules/traf_module/traf_request_model.dart @@ -92,6 +92,7 @@ class TrafRequestDataModel { String? usedWithCombination; String? comment; List? attachments; + bool? isFromMobile; int? isBudgetId; String? isBudgetName; String? firstLineManagerId; @@ -189,6 +190,7 @@ class TrafRequestDataModel { this.isCombinationName, this.usedWithCombination, this.comment, + this.isFromMobile = true, this.attachments, this.isBudgetId, this.isBudgetName, @@ -302,6 +304,7 @@ class TrafRequestDataModel { isCombinationName = json['isCombinationName']; usedWithCombination = json['usedWithCombination']; comment = json['comment']; + isFromMobile = json['isFromMobile']; if (json['attachments'] != null) { attachments = []; json['attachments'].forEach((v) { @@ -418,6 +421,7 @@ class TrafRequestDataModel { data['isCombinationName'] = this.isCombinationName; data['usedWithCombination'] = this.usedWithCombination; data['comment'] = this.comment; + data['isFromMobile'] = this.isFromMobile; if (this.attachments != null) { data['attachments'] = this.attachments!.map((v) => v.toJson()).toList(); } else { diff --git a/pubspec.lock b/pubspec.lock index 5880d411..4f2f810a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -593,14 +593,6 @@ packages: url: "https://pub.dev" source: hosted version: "5.2.0" - flutter_vibrate: - dependency: "direct main" - description: - name: flutter_vibrate - sha256: "6eea0e94dd7dc8c7872e994a1139d55a8640e32fd5898ff59ee8bd53b8dea3b3" - url: "https://pub.dev" - source: hosted - version: "1.4.0" flutter_web_plugins: dependency: transitive description: flutter @@ -718,6 +710,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.2" + haptic_feedback: + dependency: "direct main" + description: + name: haptic_feedback + sha256: dcc2494994c41428823f8f2082fd17a4e89e372bd142e07681420cbfaf99dcad + url: "https://pub.dev" + source: hosted + version: "0.6.4+3" hooks: dependency: transitive description: @@ -1002,10 +1002,10 @@ packages: dependency: transitive description: name: matcher - sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6" + sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 url: "https://pub.dev" source: hosted - version: "0.12.18" + version: "0.12.19" material_color_utilities: dependency: transitive description: @@ -1074,10 +1074,10 @@ packages: dependency: "direct main" description: name: nfc_manager - sha256: "24c78b0e5702da53e7f8794d073624c0bee7cd99924f257cbd11f5d1c5866879" + sha256: "1b8d3788ed71bb34f59878a445e433891eb2268353289515c1542b2780151fe6" url: "https://pub.dev" source: hosted - version: "4.1.1" + version: "4.2.1" objective_c: dependency: transitive description: @@ -1719,10 +1719,10 @@ packages: dependency: transitive description: name: test_api - sha256: "93167629bfc610f71560ab9312acdda4959de4df6fac7492c89ff0d3886f6636" + sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a" url: "https://pub.dev" source: hosted - version: "0.7.9" + version: "0.7.10" timezone: dependency: transitive description: @@ -1940,5 +1940,5 @@ packages: source: hosted version: "3.1.3" sdks: - dart: ">=3.11.0 <4.0.0" - flutter: ">=3.38.5" + dart: ">=3.11.4 <4.0.0" + flutter: ">=3.38.4"