From dd19507fa1bf40abc997c21b906aef805c34f450 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Thu, 16 Oct 2025 09:02:31 +0300 Subject: [PATCH] add traf payload added. --- lib/controllers/api_routes/urls.dart | 1 + .../traf_module/create_traf_request_page.dart | 61 ++++++++++++------- .../traf_module/traf_request_model.dart | 2 + .../traf_module/traf_request_provider.dart | 18 ++++++ .../traf_module/update_traf_request_page.dart | 29 +++++++-- .../multiple_item_drop_down_menu.dart | 5 +- 6 files changed, 87 insertions(+), 29 deletions(-) diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index d7835fa9..6627c7c3 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -256,6 +256,7 @@ class URLs { static get attachmentBaseUrl => "https://atomsmdev.hmg.com/v2/mobile/Files/DownloadFile?fileName="; //Traf + static get addTRAF => "$_baseUrl/TRAF/AddTRAF"; // get static get getTRAFById => "$_baseUrl/TRAF/GetTRAFById"; // get static get getAssetNDAutoCompleteByDynamicCodes => "$_baseUrl/AssetNameDefinition/GetAssetNDAutoCompleteByDynamicCodes"; // get diff --git a/lib/modules/traf_module/create_traf_request_page.dart b/lib/modules/traf_module/create_traf_request_page.dart index b52287f4..012e7ab7 100644 --- a/lib/modules/traf_module/create_traf_request_page.dart +++ b/lib/modules/traf_module/create_traf_request_page.dart @@ -5,6 +5,7 @@ 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/helper/utils.dart'; import 'package:test_sa/models/device/asset.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/new_models/traf_department.dart'; @@ -25,6 +26,7 @@ import 'package:test_sa/providers/lookups/yes_no_lookup_provider.dart'; import 'package:test_sa/views/widgets/equipment/asset_picker.dart'; import 'traf_request_model.dart'; +import 'traf_request_provider.dart'; class CreateTRAFRequestPage extends StatefulWidget { static const String id = "/create-TRAF"; @@ -57,13 +59,13 @@ class _CreateTRAFRequestPageState extends State { @override void initState() { super.initState(); - trafRequest = TrafRequestDataModel(); + trafRequest = TrafRequestDataModel(id: 0); resetProviders(); } void resetProviders() { Provider.of(context, listen: false).reset(); - // Provider.of(context, listen: false).reset(); + Provider.of(context, listen: false).reset(); } @override @@ -102,7 +104,13 @@ class _CreateTRAFRequestPageState extends State { initialValue: requestType, onSelect: (value) { requestType = value; - trafRequest?.requestTypeId = value?.value; + trafRequest?.requestTypeId = value?.id; + if (requestType?.value == 1) { + trafRequest?.assetId = null; + trafRequest?.qty = null; + } else if (requestType?.value == 2) { + trafRequest?.assetNDId = null; + } setState(() {}); }, ), @@ -112,7 +120,8 @@ class _CreateTRAFRequestPageState extends State { clearAfterPick: false, byName: true, initialValue: "", - onPick: (part) { + onPick: (asset) { + trafRequest?.assetNDId = asset.id; // model.partCatalogItem = PartCatalogItem(id: part.sparePart?.id, partNumber: part.sparePart?.partNo, partName: part.sparePart?.partName, oracleCode: part.sparePart?.oracleCode); // setState(() {}); }, @@ -128,6 +137,8 @@ class _CreateTRAFRequestPageState extends State { backgroundColor: AppColor.white936, onPick: (asset) async { this.asset = asset; + trafRequest?.assetId = asset.id?.toInt(); + trafRequest?.qty = 1; setState(() {}); // pendingAssetServiceRequest = null; // _serviceRequest.device = asset; @@ -248,6 +259,7 @@ class _CreateTRAFRequestPageState extends State { trafRequest?.usingSolelyOrSharedId = value?.value; if (isUsedSolelyOrShared?.value != 1) { departments = []; + trafRequest?.departments = []; Provider.of(context, listen: false).reset(); } setState(() {}); @@ -266,9 +278,14 @@ class _CreateTRAFRequestPageState extends State { initialValue: departments, onSelect: (value) { departments = value ?? []; - // setState(() { - // - // }); + trafRequest?.departments = departments + .map((element) => Departments( + id: element.id!.toInt(), + trafId: element.id!.toInt(), + departmentId: element.id!.toInt(), + )) + .toList(); + // setState(() {}); }, ), ], @@ -284,6 +301,10 @@ class _CreateTRAFRequestPageState extends State { onSelect: (value) { otherServicesEffects = value; trafRequest?.isEffectedId = value?.value; + if (otherServicesEffects?.value != 1) { + trafRequest?.effectedServices = null; + } + setState(() {}); }, ), @@ -315,6 +336,9 @@ class _CreateTRAFRequestPageState extends State { onSelect: (value) { useInCombination = value; trafRequest?.isCombinationId = value?.value; + if (useInCombination?.value != 1) { + trafRequest?.usedWithCombination = null; + } setState(() {}); }, ), @@ -333,19 +357,6 @@ class _CreateTRAFRequestPageState extends State { }, ), ] - // 23.height, - // AttachmentPicker( - // label: context.translation.attachImage, - // attachment: attachments, - // buttonColor: AppColor.black10, - // onlyImages: false, - // buttonIcon: 'image-plus'.toSvgAsset(color: context.isDark ? AppColor.primary10 : AppColor.neutral120), - // //verify this if not required delete this .. - // onChange: (attachments) { - // attachments = attachments; - // setState(() {}); - // }, - // ), ], ).toShadowContainer(context, padding: 12, borderRadius: 20), 16.height, @@ -371,7 +382,8 @@ class _CreateTRAFRequestPageState extends State { child: AppFilledButton( buttonColor: AppColor.primary10, label: context.translation.submitRequest, - onPressed: _acknowledgement ? _submit : null, + disableButton: !_acknowledgement, + onPressed: _verifyAndSubmit, // buttonColor: AppColor.primary10, ), ), @@ -381,7 +393,12 @@ class _CreateTRAFRequestPageState extends State { ); } - void _submit() { + void _verifyAndSubmit() async { + trafRequest?.employeeId = context.userProvider.user?.userID; + trafRequest?.siteId = context.userProvider.user?.clientId; + // Utils.showLoading(context); + // await Provider.of(context, listen: false).addTraf(trafRequest!.toJson()); + // Utils.hideLoading(context); Navigator.push(context, MaterialPageRoute(builder: (context) => TrafRequestDetailPage(trafId: 27))); } } diff --git a/lib/modules/traf_module/traf_request_model.dart b/lib/modules/traf_module/traf_request_model.dart index 5705b6d0..c8a35cb4 100644 --- a/lib/modules/traf_module/traf_request_model.dart +++ b/lib/modules/traf_module/traf_request_model.dart @@ -393,6 +393,8 @@ class TrafRequestDataModel { data['comment'] = this.comment; if (this.attachments != null) { data['attachments'] = this.attachments!.map((v) => v.toJson()).toList(); + } else { + data['attachments'] = []; } data['isBudgetId'] = this.isBudgetId; data['isBudgetName'] = this.isBudgetName; diff --git a/lib/modules/traf_module/traf_request_provider.dart b/lib/modules/traf_module/traf_request_provider.dart index 85459f5c..1f1dd385 100644 --- a/lib/modules/traf_module/traf_request_provider.dart +++ b/lib/modules/traf_module/traf_request_provider.dart @@ -12,6 +12,24 @@ class TrafRequestProvider extends ChangeNotifier { TrafRequestDataModel? trafRequestDataModel; + Future addTraf(Map body) async { + try { + isLoading = true; + notifyListeners(); + Response response = await ApiManager.instance.post(URLs.addTRAF, body: body); + if (response.statusCode >= 200 && response.statusCode < 300) { + // trafRequestDataModel = TrafRequestDataModel.fromJson(json.decode(response.body)["data"]); + } + isLoading = false; + notifyListeners(); + return 0; + } catch (error) { + isLoading = false; + notifyListeners(); + return -1; + } + } + Future getTRAFById(int trafId) async { try { isLoading = true; diff --git a/lib/modules/traf_module/update_traf_request_page.dart b/lib/modules/traf_module/update_traf_request_page.dart index 4fcea820..77fab5a1 100644 --- a/lib/modules/traf_module/update_traf_request_page.dart +++ b/lib/modules/traf_module/update_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'; @@ -6,6 +9,7 @@ import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/generic_attachment_model.dart'; import 'package:test_sa/models/lookup.dart'; +import 'package:test_sa/modules/cm_module/utilities/service_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/traf_request_model.dart'; import 'package:test_sa/modules/traf_module/traf_request_provider.dart'; @@ -54,6 +58,7 @@ class _UpdateTrafRequestPageState extends State { Provider.of(context, listen: false).reset(); trafRequestProvider = Provider.of(context, listen: false); trafRequest = trafRequestProvider.trafRequestDataModel!; + attachments = trafRequest.attachments?.map((item) => GenericAttachmentModel(id: item.id, name: item.attachmentName)).toList() ?? []; } @override @@ -82,8 +87,8 @@ class _UpdateTrafRequestPageState extends State { initialValue: classificationType, onSelect: (value) { classificationType = value; - // trafRequest?.requestTypeId = value?.value; - setState(() {}); + trafRequest?.cla = value?.value; + // setState(() {}); }, ), 12.height, @@ -184,8 +189,9 @@ class _UpdateTrafRequestPageState extends State { initialValue: assessorRecommendation, onSelect: (value) { assessorRecommendation = value; + trafRequest?.requestTypeId = value?.value; // trafRequest?.requestTypeId = value?.value; - setState(() {}); + // setState(() {}); }, ), 12.height, @@ -208,13 +214,28 @@ class _UpdateTrafRequestPageState extends State { buttonColor: AppColor.black10, onlyImages: false, buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120), + onChange: (attachment) { + attachments = attachment; + }, ), ], ).toShadowContainer(context, borderRadius: 20, padding: 12), ).expanded, FooterActionButton.footerContainer( context: context, - child: AppFilledButton(buttonColor: AppColor.primary10, label: "Update", onPressed: () {} + child: AppFilledButton( + buttonColor: AppColor.primary10, + label: "Update", + onPressed: () { + trafRequest.attachments = []; + for (var item in attachments) { + String fileName = + ServiceRequestUtils.isLocalUrl(item.name ?? '') ? ("${item.name ?? ''.split("/").last}|${base64Encode(File(item.name ?? '').readAsBytesSync())}") : item.name ?? ''; + trafRequest.attachments!.add( + Attachments(id: item.id, trafId: item.id, attachmentName: fileName), + ); + } + } // buttonColor: AppColor.primary10, ), ), diff --git a/lib/new_views/common_widgets/multiple_item_drop_down_menu.dart b/lib/new_views/common_widgets/multiple_item_drop_down_menu.dart index 9c579f97..d0df92fa 100644 --- a/lib/new_views/common_widgets/multiple_item_drop_down_menu.dart +++ b/lib/new_views/common_widgets/multiple_item_drop_down_menu.dart @@ -71,7 +71,7 @@ class _MultipleItemDropDownMenuState widget.initialValue!.any((init) => init.identifier == element.identifier)).toList(); + final results = sourceList.where((element) => widget.initialValue!.any((init) => init.name == element.name)).toList(); if (results.isNotEmpty) { _selectedItem @@ -106,11 +106,10 @@ class _MultipleItemDropDownMenuState widget.initialValue!.any((init) => init.identifier == element.identifier)).toList(); + final results = sourceList.where((element) => widget.initialValue!.any((init) => init.name == element.name)).toList(); if (results.isNotEmpty) { _selectedItem ..clear()