traf request attachement added

main_production_ai_enhancement
WaseemAbbasi22 3 weeks ago
parent eea2f6b4e9
commit 850846f227

@ -3,13 +3,13 @@ class URLs {
static const String appReleaseBuildNumber = "40"; 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://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/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/v4/mobile"; // v4 for Demo module
// static final String _baseUrl = "$_host/v5/mobile"; // v5 for data segregation // static final String _baseUrl = "$_host/v5/mobile"; // v5 for data segregation
// static final String _baseUrl = "$_host/v6/mobile"; // for asset delivery module // static final String _baseUrl = "$_host/v6/mobile"; // for asset delivery module

@ -1,3 +1,6 @@
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/extensions/context_extension.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/extensions/widget_extensions.dart';
import 'package:test_sa/helper/utils.dart'; import 'package:test_sa/helper/utils.dart';
import 'package:test_sa/models/device/asset.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/lookup.dart';
import 'package:test_sa/models/new_models/traf_department.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/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/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/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/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/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/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/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/multiple_item_drop_down_menu.dart';
import 'package:test_sa/new_views/common_widgets/single_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/department_lookup_provider.dart';
import 'package:test_sa/providers/lookups/request_type_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/providers/lookups/yes_no_lookup_provider.dart';
import 'package:test_sa/views/widgets/equipment/asset_picker.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_model.dart';
import 'traf_request_provider.dart'; import 'traf_request_provider.dart';
@ -58,6 +61,7 @@ class _CreateTRAFRequestPageState extends State<CreateTRAFRequestPage> {
List<TrafDepartment> departments = []; List<TrafDepartment> departments = [];
List<UsersBasedOnSearchModel> userBasedOnSearch = []; List<UsersBasedOnSearchModel> userBasedOnSearch = [];
List<GenericAttachmentModel> attachments = [];
FocusNode otherServicesEffectsNode = FocusNode(); FocusNode otherServicesEffectsNode = FocusNode();
FocusNode useInCombinationNode = FocusNode(); FocusNode useInCombinationNode = FocusNode();
@ -443,9 +447,21 @@ class _CreateTRAFRequestPageState extends State<CreateTRAFRequestPage> {
trafRequest?.usedWithCombination = value; 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), ).toShadowContainer(context, padding: 12, borderRadius: 20),
16.height, 16.height,
Row( Row(
children: [ children: [
@ -521,6 +537,17 @@ class _CreateTRAFRequestPageState extends State<CreateTRAFRequestPage> {
return; 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); Utils.showLoading(context);
bool isSuccess = await Provider.of<TrafRequestProvider>(context, listen: false).addTraf(trafRequest!.toJson()); bool isSuccess = await Provider.of<TrafRequestProvider>(context, listen: false).addTraf(trafRequest!.toJson());
Utils.hideLoading(context); Utils.hideLoading(context);

@ -1,8 +1,11 @@
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/user_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/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.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/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/user_types.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/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/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.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/app_loading.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
import '../../controllers/api_routes/urls.dart';
import 'asset_analytics_model.dart'; import 'asset_analytics_model.dart';
import 'traf_request_model.dart'; import 'traf_request_model.dart';
@ -32,6 +37,8 @@ class TrafRequestDetailPage extends StatefulWidget {
} }
class _TrafRequestDetailPageState extends State<TrafRequestDetailPage> { class _TrafRequestDetailPageState extends State<TrafRequestDetailPage> {
List<File> _attachments = [];
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@ -65,6 +72,15 @@ class _TrafRequestDetailPageState extends State<TrafRequestDetailPage> {
requestInformation(trafProvider.trafRequestDataModel!), requestInformation(trafProvider.trafRequestDataModel!),
12.height, 12.height,
assetInformation(trafProvider.trafRequestDataModel!), 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, ).expanded,
// // if (isEngineer) // // if (isEngineer)

@ -92,6 +92,7 @@ class TrafRequestDataModel {
String? usedWithCombination; String? usedWithCombination;
String? comment; String? comment;
List<Attachments>? attachments; List<Attachments>? attachments;
bool? isFromMobile;
int? isBudgetId; int? isBudgetId;
String? isBudgetName; String? isBudgetName;
String? firstLineManagerId; String? firstLineManagerId;
@ -189,6 +190,7 @@ class TrafRequestDataModel {
this.isCombinationName, this.isCombinationName,
this.usedWithCombination, this.usedWithCombination,
this.comment, this.comment,
this.isFromMobile = true,
this.attachments, this.attachments,
this.isBudgetId, this.isBudgetId,
this.isBudgetName, this.isBudgetName,
@ -302,6 +304,7 @@ class TrafRequestDataModel {
isCombinationName = json['isCombinationName']; isCombinationName = json['isCombinationName'];
usedWithCombination = json['usedWithCombination']; usedWithCombination = json['usedWithCombination'];
comment = json['comment']; comment = json['comment'];
isFromMobile = json['isFromMobile'];
if (json['attachments'] != null) { if (json['attachments'] != null) {
attachments = <Attachments>[]; attachments = <Attachments>[];
json['attachments'].forEach((v) { json['attachments'].forEach((v) {
@ -418,6 +421,7 @@ class TrafRequestDataModel {
data['isCombinationName'] = this.isCombinationName; data['isCombinationName'] = this.isCombinationName;
data['usedWithCombination'] = this.usedWithCombination; data['usedWithCombination'] = this.usedWithCombination;
data['comment'] = this.comment; data['comment'] = this.comment;
data['isFromMobile'] = this.isFromMobile;
if (this.attachments != null) { if (this.attachments != null) {
data['attachments'] = this.attachments!.map((v) => v.toJson()).toList(); data['attachments'] = this.attachments!.map((v) => v.toJson()).toList();
} else { } else {

@ -593,14 +593,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.2.0" 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: flutter_web_plugins:
dependency: transitive dependency: transitive
description: flutter description: flutter
@ -718,6 +710,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.2" 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: hooks:
dependency: transitive dependency: transitive
description: description:
@ -1002,10 +1002,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6" sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.12.18" version: "0.12.19"
material_color_utilities: material_color_utilities:
dependency: transitive dependency: transitive
description: description:
@ -1074,10 +1074,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: nfc_manager name: nfc_manager
sha256: "24c78b0e5702da53e7f8794d073624c0bee7cd99924f257cbd11f5d1c5866879" sha256: "1b8d3788ed71bb34f59878a445e433891eb2268353289515c1542b2780151fe6"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.1.1" version: "4.2.1"
objective_c: objective_c:
dependency: transitive dependency: transitive
description: description:
@ -1719,10 +1719,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: "93167629bfc610f71560ab9312acdda4959de4df6fac7492c89ff0d3886f6636" sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.9" version: "0.7.10"
timezone: timezone:
dependency: transitive dependency: transitive
description: description:
@ -1940,5 +1940,5 @@ packages:
source: hosted source: hosted
version: "3.1.3" version: "3.1.3"
sdks: sdks:
dart: ">=3.11.0 <4.0.0" dart: ">=3.11.4 <4.0.0"
flutter: ">=3.38.5" flutter: ">=3.38.4"

Loading…
Cancel
Save