From 1a2845337ba9d45d75cdc134d45aaba51b9f179b Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 4 Feb 2026 16:12:49 +0300 Subject: [PATCH] improvements --- lib/controllers/api_routes/urls.dart | 11 +- .../widgets/request_category_list.dart | 15 +- lib/extensions/enum_extensions.dart | 43 +++-- .../action_button/footer_action_button.dart | 14 +- .../demo_module/create_demo_request_page.dart | 22 +-- .../demo_module/demo_detail_view_page.dart | 175 ++++++++++-------- .../demo_module/demo_request_item_view.dart | 10 +- .../models/demo_attachment_model.dart | 8 +- .../demo_module/models/demo_form_model.dart | 32 +++- .../demo_module/provider/demo_provider.dart | 2 +- .../demo_module/update_demo-request_view.dart | 25 +-- .../pages/loan_equipment_detail_page.dart | 24 +-- .../my_request/all_requests_filter_page.dart | 1 + .../my_request/my_requests_page.dart | 1 + .../widgets/request_item_view_list.dart | 9 +- lib/new_views/pages/splash_page.dart | 6 +- lib/views/widgets/images/files_list.dart | 5 +- 17 files changed, 219 insertions(+), 184 deletions(-) diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index 4dae1c4c..7940b05f 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -8,10 +8,10 @@ class URLs { static const host1 = "https://atomsmuat.hmg.com"; // local UAT url // 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/mobile"; // host local UAT and for internal audit dev // 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 const String chatHubUrl = "https://apiderichat.hmg.com/chathub"; @@ -492,11 +492,14 @@ class URLs { //Demo Request... static get addDemoRequest => "$_baseUrl/DemoRequest/AddDemoRequest"; + static get updateDemoRequest => "$_baseUrl/DemoRequest/UpdateDemoRequest"; + static get getDemoRequestById => "$_baseUrl/DemoRequest"; + static get updateDemoRequestByAssessor => "$_baseUrl/DemoRequest/UpdateDemoRequestByAssessor"; - static get updateDemoPeriodByRequester => "$_baseUrl/DemoRequest/UpdateDemoPeriodByRequester"; - //4104 attachment type lookup + static get updateDemoPeriodByRequester => "$_baseUrl/DemoRequest/UpdateDemoPeriodByRequester"; +//4104 attachment type lookup } diff --git a/lib/dashboard_latest/widgets/request_category_list.dart b/lib/dashboard_latest/widgets/request_category_list.dart index 9cea85b3..e48f9f7f 100644 --- a/lib/dashboard_latest/widgets/request_category_list.dart +++ b/lib/dashboard_latest/widgets/request_category_list.dart @@ -8,6 +8,7 @@ import 'package:test_sa/modules/asset_delivery_module/pages/asset_delivery_item_ import 'package:test_sa/modules/asset_inventory_module/pages/inventory_session_item_view.dart'; import 'package:test_sa/modules/demo_module/demo_request_item_view.dart'; import 'package:test_sa/modules/internal_audit_module/pages/equipment_internal_audit/equipment_internal_audit_item_view.dart'; +import 'package:test_sa/modules/loan_module/pages/loan_equipment_item_view.dart'; import 'package:test_sa/modules/medical_gas_inspection/medical_gas_inspection_item_view.dart'; import 'package:test_sa/modules/tm_module/tasks/task_request_item_view.dart'; import 'package:test_sa/modules/traf_module/traf_request_item_view.dart'; @@ -43,7 +44,7 @@ class RequestCategoryList extends StatelessWidget { } Widget _buildRequestItem(Data request) { - log('here with no ${request.transactionNo}'); + // log('here with no ${request.transactionNo}'); switch (request.transactionNo) { case 1: return ServiceRequestItemView(requestData: request); @@ -63,15 +64,17 @@ class RequestCategoryList extends StatelessWidget { return InventorySessionItemView(requestData: request); case 9: return TrafRequestItemView(requestData: request); - case 10: + case 10: return EquipmentInternalAuditItemView(requestData: request); - case 11: + case 11: return EquipmentInternalAuditItemView(requestData: request); - case 13: + case 12: + return LoanEquipmentItemView(requestData: request); + case 13: return AssetDeliveryItemView(requestData: request); - case 14: + case 14: return MedicalGasInspectionItemView(requestData: request); - case 15: + case 15: return DemoRequestItemView(requestData: request); default: return Container( diff --git a/lib/extensions/enum_extensions.dart b/lib/extensions/enum_extensions.dart index 36c824e5..0083aedf 100644 --- a/lib/extensions/enum_extensions.dart +++ b/lib/extensions/enum_extensions.dart @@ -100,30 +100,29 @@ extension IntExtensionsDemoRequest on int { DemoRequestStepEnum toDemoRequestStepEnum() { //Todo need to check exact stages switch (this) { - // { "id": 7690, "name": "Pending Assessor Acceptance", "value": 5 }, - // - // update request details - // - // - // { "id": 7692, "name": "Assessor Audit Doc Pending", "value": 7 }, - // - // Update request details - // - // - // { "id": 7766, "name": "Demo Period Expired", "value": 15 } - // - // request for extention - // - // - // { "id": 7769, "name": "Awaiting MD Evaluation", "value": 18 }, - // - // evaluation - - - case 5: + // { "id": 7690, "name": "Pending Assessor Acceptance", "value": 5 }, + // + // update request details + // + // + // { "id": 7692, "name": "Assessor Audit Doc Pending", "value": 7 }, + // + // Update request details + // + // + // { "id": 7766, "name": "Demo Period Expired", "value": 15 } + // + // request for extention + // + // + // { "id": 7769, "name": "Awaiting MD Evaluation", "value": 18 }, + // + // evaluation + + case 5: return DemoRequestStepEnum.qAuditorRejectAccept; case 7: - return DemoRequestStepEnum.updateRequest; + return DemoRequestStepEnum.qAuditorRejectAccept; case 5: return DemoRequestStepEnum.updateRequest; return DemoRequestStepEnum.viewOnly; diff --git a/lib/modules/cm_module/views/components/action_button/footer_action_button.dart b/lib/modules/cm_module/views/components/action_button/footer_action_button.dart index 808afad2..b3bcb6e4 100644 --- a/lib/modules/cm_module/views/components/action_button/footer_action_button.dart +++ b/lib/modules/cm_module/views/components/action_button/footer_action_button.dart @@ -372,7 +372,7 @@ class FooterActionButton { Lookup? status, required DemoRequestModel dataModel, required DemoRequestStepEnum demoRequestStage, - required Function(bool status) refreshData, + required VoidCallback refreshData, }) { DemoProvider demoProvider = Provider.of(context, listen: false); UserProvider userProvider = Provider.of(context, listen: false); @@ -401,9 +401,7 @@ class FooterActionButton { } }, ).expanded, - const SizedBox( - width: 20, - ), + const SizedBox(width: 16), AppFilledButton( label: context.translation.accept, maxWidth: true, @@ -413,7 +411,7 @@ class FooterActionButton { bool responseStatus = await demoProvider.acceptRejectRequest(requestId: dataModel.id!, status: true); Utils.hideLoading(context); if (responseStatus) { - refreshData(true); + refreshData(); } }, ).expanded, @@ -434,7 +432,7 @@ class FooterActionButton { dataModel: dataModel, ))); if (isRefresh == true) { - refreshData(true); + refreshData(); } }, ), @@ -454,7 +452,7 @@ class FooterActionButton { dataModel: dataModel, ))); if (isRefresh == true) { - refreshData(true); + refreshData(); } }, ), @@ -478,7 +476,7 @@ class FooterActionButton { ), ); if (isRefresh == true) { - refreshData(true); + refreshData(); } }, ), diff --git a/lib/modules/demo_module/create_demo_request_page.dart b/lib/modules/demo_module/create_demo_request_page.dart index 55e0547a..fffa24c7 100644 --- a/lib/modules/demo_module/create_demo_request_page.dart +++ b/lib/modules/demo_module/create_demo_request_page.dart @@ -59,10 +59,10 @@ class CreateDemoRequestPage extends StatefulWidget { } class _CreateDemoRequestPageState extends State with TickerProviderStateMixin { - final List attachments = []; + List _attachments = []; final GlobalKey _formKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); - final DemoFormModel _demoFormModel = DemoFormModel(); + final DemoFormModel _demoFormModel = DemoFormModel(id: 0); TextEditingController vendorEmailController = TextEditingController(); TextEditingController vendorPhoneController = TextEditingController(); @@ -72,13 +72,12 @@ class _CreateDemoRequestPageState extends State with Tick vendorPhoneController.dispose(); super.dispose(); } + Lookup? demoDocumentLookup; + @override void initState() { super.initState(); - // Provider.of(context, listen: false).reset(); - // Provider.of(context, listen: false).reset(); - // loanTypes = [Lookup(id: 0, name: "Standard", value: 1), Lookup(id: 1, name: "Backup", value: 2)]; } @override @@ -143,7 +142,7 @@ class _CreateDemoRequestPageState extends State with Tick 16.height, AttachmentPicker( label: context.translation.attachments, - attachment: attachments, + attachment: _attachments, buttonColor: AppColor.black10.withOpacity(demoDocumentLookup != null ? 1 : .4), onlyImages: false, enabled: demoDocumentLookup != null, @@ -151,7 +150,7 @@ class _CreateDemoRequestPageState extends State with Tick showAsListView: true, buttonIcon: 'image-plus'.toSvgAsset(color: (context.isDark ? AppColor.primary10 : AppColor.neutral120).withOpacity(demoDocumentLookup != null ? 1 : .4)), onChange: (attachments) { - attachments = attachments; + _attachments = attachments; setState(() {}); }, ), @@ -436,7 +435,7 @@ class _CreateDemoRequestPageState extends State with Tick 'Vendor Details'.addTranslation.bodyText(context).custom(color: AppColor.black10), 8.height, AppTextFormField( - labelText:'Vendor Name'.addTranslation, + labelText: 'Vendor Name'.addTranslation, style: Theme.of(context).textTheme.titleMedium, backgroundColor: AppColor.fieldBgColor(context), labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)), @@ -449,7 +448,7 @@ class _CreateDemoRequestPageState extends State with Tick ), 8.height, AppTextFormField( - labelText:'Representative Name'.addTranslation, + labelText: 'Representative Name'.addTranslation, style: Theme.of(context).textTheme.titleMedium, backgroundColor: AppColor.fieldBgColor(context), labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)), @@ -495,10 +494,11 @@ class _CreateDemoRequestPageState extends State with Tick FocusScope.of(context).unfocus(); if (_formKey.currentState!.validate()) { _formKey.currentState!.save(); + _demoFormModel.id = 0; _demoFormModel.demoAttachment = []; - for (var item in attachments) { + for (var item in _attachments) { String fileName = CMRequestUtils.isLocalUrl(item.name ?? '') ? ("${item.name ?? ''.split("/").last}|${base64Encode(File(item.name ?? '').readAsBytesSync())}") : item.name ?? ''; - _demoFormModel.demoAttachment?.add(DemoAttachments(id: 0, attachmentName: fileName, demoRequestId: 0,documentTypeId: 7748)); + _demoFormModel.demoAttachment?.add(DemoAttachments(id: 0, attachmentName: fileName, demoRequestId: 0, documentTypeId: item.documentTypeId!.id!)); } Utils.showLoading(context); DemoProvider demoProvider = Provider.of(context, listen: false); diff --git a/lib/modules/demo_module/demo_detail_view_page.dart b/lib/modules/demo_module/demo_detail_view_page.dart index 0bb1d6db..e5127315 100644 --- a/lib/modules/demo_module/demo_detail_view_page.dart +++ b/lib/modules/demo_module/demo_detail_view_page.dart @@ -22,6 +22,7 @@ import '../../views/widgets/images/files_list.dart'; import '../../views/widgets/requests/request_status.dart'; import '../loan_module/models/loan_request_model.dart'; import 'demo_activities_page.dart'; +import 'models/demo_attachment_model.dart'; class DemoDetailViewPage extends StatefulWidget { static const String id = "/demo-detail-page"; @@ -36,36 +37,37 @@ class DemoDetailViewPage extends StatefulWidget { } class _DemoDetailViewPageState extends State { - bool isLoading = false; + // bool isLoading = false; - DemoRequestModel? dataModel; + // DemoRequestModel? dataModel; DemoProvider? demoProvider; - List allAttachments = []; + + // List allAttachments = []; //Todo need to check about attachments. - bool loading = false; + // bool loading = false; @override void initState() { demoProvider = Provider.of(context, listen: false); - WidgetsBinding.instance.addPostFrameCallback((_) { - getDetailsById(); - }); + // WidgetsBinding.instance.addPostFrameCallback((_) { + // getDetailsById(); + // }); super.initState(); } - Future getDetailsById() async { - setState(() { - loading = true; - }); - dataModel = await demoProvider?.getDemoById(widget.demoId) ?? DemoRequestModel(); - - // _attachments = dataModel.demoAttachments.toList() ?? []; - setState(() { - loading = false; - }); - } + // Future getDetailsById() async { + // setState(() { + // loading = true; + // }); + // dataModel = await demoProvider?.getDemoById(widget.demoId);// ?? DemoRequestModel(); + // + // allAttachments = dataModel?.demoAttachments ?? []; + // setState(() { + // loading = false; + // }); + // } @override void dispose() { @@ -76,69 +78,78 @@ class _DemoDetailViewPageState extends State { Widget build(BuildContext context) { return Scaffold( appBar: const DefaultAppBar(title: "Request Details"), - body: loading - ? const CircularProgressIndicator(color: AppColor.primary10).center - : dataModel == null - ? const NoDataFound().center - : Column( - children: [ - SingleChildScrollView( - padding: const EdgeInsets.all(16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (dataModel?.status != null) ...[ - StatusLabel( - label: dataModel?.status?.name, - id: dataModel?.status?.value, - radius: 4, - textColor: AppColor.demoRequestStatusTextColor(context, dataModel!.status!.value!), - backgroundColor: AppColor.demoRequestStatus(context, dataModel!.status!.value!), - ), - 8.height, - ], - ...requesterDetails(context, dataModel), - 12.height, - ...requestDetails(context, dataModel), - 12.height, - ...doctorDetails(context, dataModel), - 12.height, - ...assetDetails(context, dataModel), - 12.height, - ...vendorDetails(context, dataModel), - if (allAttachments.isNotEmpty) ...[ - const Divider().defaultStyle(context), - Text( - "Attachments".addTranslation, - style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), - ), - FilesList(images: allAttachments.map((e) => URLs.getFileUrl(e.name ?? '') ?? '').toList() ?? []), - ], - ], - ).toShadowContainer(context, padding: 12), - ).expanded, - FooterActionButton.demoRequestDetailsFooterWidget( - demoRequestStage: dataModel!.status!.demoRequestStepEnum!, - // demoRequestStage: DemoRequestStepEnum.updateRequest, - dataModel: dataModel!, - status: dataModel!.status!, - context: context, - refreshData: (status) { - if (status) { - getDetailsById(); - } - }).toShadowContainer(context, padding: 0, showShadow: false, borderRadius: 0), - ], - )); + body: FutureBuilder( + future: Provider.of(context, listen: false).getDemoById(widget.demoId), + builder: (BuildContext context, AsyncSnapshot snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) return const CircularProgressIndicator(color: AppColor.primary10).center; + if (snapshot.data == null) return const NoDataFound().center; + + List allAttachments = snapshot.data!.demoAttachments! ?? []; + + DemoRequestModel demoData = snapshot.data!; + + return Column( + children: [ + SingleChildScrollView( + padding: const EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (demoData.status != null) ...[ + StatusLabel( + label: demoData.status?.name, + id: demoData.status?.value, + radius: 4, + textColor: AppColor.demoRequestStatusTextColor(context, demoData.status!.value!), + backgroundColor: AppColor.demoRequestStatus(context, demoData.status!.value!), + ), + 8.height, + ], + 12.height, + ...requesterDetails(context, demoData), + const Divider().defaultStyle(context), + ...requestDetails(context, demoData), + const Divider().defaultStyle(context), + ...doctorDetails(context, demoData), + const Divider().defaultStyle(context), + ...assetDetails(context, demoData), + const Divider().defaultStyle(context), + ...vendorDetails(context, demoData), + if (allAttachments.isNotEmpty) ...[ + const Divider().defaultStyle(context), + Text( + "Attachments".addTranslation, + style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + ), + FilesList( + showAsListView: true, + images: allAttachments.map((e) => URLs.getFileUrl(e.attachmentName ?? '') ?? '').toList(), + types: allAttachments.map((e) => e.documentType?.name ?? '').toList()), + ], + ], + ).toShadowContainer(context, padding: 12), + ).expanded, + FooterActionButton.demoRequestDetailsFooterWidget( + demoRequestStage: demoData.status!.demoRequestStepEnum!, + // demoRequestStage: DemoRequestStepEnum.updateRequest, + dataModel: demoData, + status: demoData.status!, + context: context, + refreshData: () => setState(() {})).toShadowContainer(context, padding: 0, showShadow: false, borderRadius: 0), + ], + ); + })); } List requestDetails(BuildContext context, DemoRequestModel? model) { return [ - Text("Request Details", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), + Text("Request Details", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), // 'Demo No: ${model. ?? "-"}'.bodyText(context), 'Demo Period: ${model?.demoPeriod?.name ?? "-"}'.bodyText(context), '${context.translation.site}: ${model?.site?.custName ?? "-"}'.bodyText(context), - '${context.translation.department}: ${model?.department?.name ?? "-"}'.bodyText(context), + '${context.translation.building}: ${model?.building?.name ?? "-"}'.bodyText(context), + '${context.translation.floor}: ${model?.floor?.name ?? "-"}'.bodyText(context), + '${context.translation.department}: ${model?.department?.departmentName ?? "-"}'.bodyText(context), 'Item Description: ${model?.itemDescription ?? "-"}'.bodyText(context), 'Request Description: ${model?.requestDescription ?? "-"}'.bodyText(context), ]; @@ -146,17 +157,17 @@ class _DemoDetailViewPageState extends State { List vendorDetails(BuildContext context, DemoRequestModel? model) { return [ - Text("Vendor Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), - 'Name: ${model?.supplier?.name ?? "-"}'.bodyText(context), - 'Representative Name: ${model?.suppPerson?.name ?? "-"}'.bodyText(context), - 'Contact: ${model?.supplier?.contact ?? "-"}'.bodyText(context), - 'Email: ${model?.supplier?.email ?? "-"}'.bodyText(context), + Text("Vendor Information", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), + 'Name: ${model?.supplier?.name ?? model?.vendorName ?? "-"}'.bodyText(context), + 'Representative Name: ${model?.suppPerson?.name ?? model?.vendorRepresentativeName ?? "-"}'.bodyText(context), + 'Contact: ${model?.supplier?.contact ?? model?.vendorContactNumber ?? "-"}'.bodyText(context), + 'Email: ${model?.supplier?.email ?? model?.vendorEmail ?? "-"}'.bodyText(context), ]; } List assetDetails(BuildContext context, DemoRequestModel? model) { return [ - Text("Asset Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), + Text("Asset Information", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), '${context.translation.assetName}: ${model?.assetName ?? "-"}'.bodyText(context), '${context.translation.manufacture}: ${model?.manufacturer ?? "-"}'.bodyText(context), '${context.translation.model}: ${model?.model ?? "-"}'.bodyText(context), @@ -165,7 +176,7 @@ class _DemoDetailViewPageState extends State { List doctorDetails(BuildContext context, DemoRequestModel? model) { return [ - Text("Doctor Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), + Text("Doctor Information", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), 'Name: ${model?.doctorName ?? "-"}'.bodyText(context), 'Contact: ${model?.doctorContactNumber ?? "-"}'.bodyText(context), 'Email: ${model?.doctorContactEmail ?? "-"}'.bodyText(context), @@ -174,7 +185,7 @@ class _DemoDetailViewPageState extends State { List requesterDetails(BuildContext context, DemoRequestModel? model) { return [ - Text("Requester Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), + Text("Requester Information", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), 'Name: ${model?.requesterUser?.requesterName ?? "-"}'.bodyText(context), 'Email: ${model?.requesterUser?.requesterEmail ?? "-"}'.bodyText(context), 'Contact: ${model?.requesterUser?.requesterMobile ?? "-"}'.bodyText(context), diff --git a/lib/modules/demo_module/demo_request_item_view.dart b/lib/modules/demo_module/demo_request_item_view.dart index 6d4bd7c3..4950c35f 100644 --- a/lib/modules/demo_module/demo_request_item_view.dart +++ b/lib/modules/demo_module/demo_request_item_view.dart @@ -60,10 +60,7 @@ class DemoRequestItemView extends StatelessWidget { ), ], ).toShadowContainer(context, withShadow: showShadow).onPress(() async { - Navigator.of(context).push(MaterialPageRoute( - builder: (_) => DemoDetailViewPage( - demoId: requestData!.id!, - ))); + Navigator.of(context).push(MaterialPageRoute(builder: (_) => DemoDetailViewPage(demoId: requestData!.id!))); }); } return Column( @@ -103,10 +100,7 @@ class DemoRequestItemView extends StatelessWidget { ), ], ).toShadowContainer(context, withShadow: showShadow).onPress(() async { - Navigator.of(context).push(MaterialPageRoute( - builder: (_) => DemoDetailViewPage( - demoId: requestDetails!.id!, - ))); + Navigator.of(context).push(MaterialPageRoute(builder: (_) => DemoDetailViewPage(demoId: requestDetails!.id!))); }); } diff --git a/lib/modules/demo_module/models/demo_attachment_model.dart b/lib/modules/demo_module/models/demo_attachment_model.dart index 024cde6e..ecc6475e 100644 --- a/lib/modules/demo_module/models/demo_attachment_model.dart +++ b/lib/modules/demo_module/models/demo_attachment_model.dart @@ -1,15 +1,19 @@ +import 'package:test_sa/models/lookup.dart'; + class DemoAttachments { int? id; num? demoRequestId; num? documentTypeId; + Lookup? documentType; String? attachmentName; String? originalName; - DemoAttachments({this.id, this.documentTypeId, this.attachmentName, this.demoRequestId, this.originalName}); + DemoAttachments({this.id, this.documentTypeId, this.documentType, this.attachmentName, this.demoRequestId, this.originalName}); DemoAttachments.fromJson(dynamic json) { id = json['id']; documentTypeId = json['documentTypeId']; + documentType = json['documentType'] != null ? Lookup.fromJson(json['documentType']) : null; demoRequestId = json['demoRequestId']; attachmentName = json['attachmentName']; originalName = json['originalName']; @@ -24,4 +28,4 @@ class DemoAttachments { map['originalName'] = originalName; return map; } -} \ No newline at end of file +} diff --git a/lib/modules/demo_module/models/demo_form_model.dart b/lib/modules/demo_module/models/demo_form_model.dart index eea60628..afe16908 100644 --- a/lib/modules/demo_module/models/demo_form_model.dart +++ b/lib/modules/demo_module/models/demo_form_model.dart @@ -58,7 +58,7 @@ class DemoFormModel { Map toJson() { return { - "id": 0, + "id": id ?? 0, 'siteId': site?.id, 'departmentId': department?.id, "buildingId": building?.id, @@ -80,7 +80,35 @@ class DemoFormModel { "supplierId": vendor?.id, "suppPersonId": supEngineer?.id, // "vendorEmail": vendorEmail, - "demoAttachments": demoAttachment != null ? demoAttachment!.map((v) => v.toJson()).toList() : [], + "demoAttachments": + // [ + // { + // "id": 3, + // // "documentType": { + // // "id": 7748, + // // "name": "February", + // // "value": 2 + // // }, + // "documentTypeId": 7748, + // "attachmentName": "6c9f50b0-1c92-4ae9-ae64-7c284c61ea72.jpg", + // "originalName": "scaled_d245df97-1289-4d0c-92a0-569abedfb0db8154518103327960943.jpg", + // "demoRequestId": 3 + // }, + // { + // "id": 4, + // // "documentType": { + // // "id": 7748, + // // "name": "February", + // // "value": 2 + // // }, + // "documentTypeId": 7748, + // "attachmentName": "346e04f6-0f9b-4004-ad85-4cdbf8318f7c.jpg", + // "originalName": "scaled_85790b6c-7b16-46e6-891c-11c316d5897a2973693360957767376.jpg", + // "demoRequestId": 3 + // } + // ] + + demoAttachment != null ? demoAttachment!.map((v) => v.toJson()).toList() : [], }; } diff --git a/lib/modules/demo_module/provider/demo_provider.dart b/lib/modules/demo_module/provider/demo_provider.dart index 002a06f8..221bda12 100644 --- a/lib/modules/demo_module/provider/demo_provider.dart +++ b/lib/modules/demo_module/provider/demo_provider.dart @@ -1,4 +1,3 @@ - import 'package:flutter/cupertino.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:http/http.dart'; @@ -106,6 +105,7 @@ class DemoProvider extends ChangeNotifier { notifyListeners(); return siteObj; } + Future addDemoTrialOutcome(Map body) async { try { Response response = await ApiManager.instance.post(URLs.addDemoTrialOutcome, body: body, showToast: false); diff --git a/lib/modules/demo_module/update_demo-request_view.dart b/lib/modules/demo_module/update_demo-request_view.dart index d22a68e9..7cf3adb0 100644 --- a/lib/modules/demo_module/update_demo-request_view.dart +++ b/lib/modules/demo_module/update_demo-request_view.dart @@ -47,7 +47,7 @@ class UpdateDemoRequestView extends StatefulWidget { } class _UpdateDemoRequestViewState extends State with TickerProviderStateMixin { - final List attachments = []; + final List attachments = []; final GlobalKey _formKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); DemoFormModel _demoFormModel = DemoFormModel(); @@ -161,7 +161,7 @@ class _UpdateDemoRequestViewState extends State with Tick for (final item in widget.dataModel.demoAttachments!) { if ((item.attachmentName ?? '').isNotEmpty) { attachments.add( - GenericAttachmentModel(name: item.attachmentName, id: item.id ?? 0, originalName: item.originalName), + DemoAttachments(attachmentName: item.attachmentName, id: item.id ?? 0, originalName: item.originalName), ); } } @@ -197,14 +197,14 @@ class _UpdateDemoRequestViewState extends State with Tick 16.height, ...vendorDetailsSection(), 16.height, - AttachmentPicker( - label: context.translation.attachments, - attachment: attachments, - buttonColor: AppColor.black10, - onlyImages: false, - showAsListView: true, - buttonIcon: 'image-plus'.toSvgAsset(color: context.isDark ? AppColor.primary10 : AppColor.neutral120), - ), + // AttachmentPicker( + // label: context.translation.attachments, + // attachment: attachments, + // buttonColor: AppColor.black10, + // onlyImages: false, + // showAsListView: true, + // buttonIcon: 'image-plus'.toSvgAsset(color: context.isDark ? AppColor.primary10 : AppColor.neutral120), + // ), ], ).toShadowContainer(context, borderRadius: 20), ).expanded, @@ -580,10 +580,11 @@ class _UpdateDemoRequestViewState extends State with Tick if (_formKey.currentState!.validate()) { _formKey.currentState!.save(); _demoFormModel.demoAttachment = []; + // _demoFormModel.id = 3; for (var item in attachments) { - String fileName = CMRequestUtils.isLocalUrl(item.name ?? '') ? ("${item.name ?? ''.split("/").last}|${base64Encode(File(item.name ?? '').readAsBytesSync())}") : item.name ?? ''; + // String fileName = CMRequestUtils.isLocalUrl(item.name ?? '') ? ("${item.name ?? ''.split("/").last}|${base64Encode(File(item.name ?? '').readAsBytesSync())}") : item.name ?? ''; //Todo need to pass attachmentType id as well. - _demoFormModel.demoAttachment?.add(DemoAttachments(id: item.id, demoRequestId: _demoFormModel.id ?? 0, attachmentName: fileName)); + // _demoFormModel.demoAttachment?.add(DemoAttachments(id: item.id, demoRequestId: _demoFormModel.id ?? 0, attachmentName: fileName)); } Utils.showLoading(context); DemoProvider demoProvider = Provider.of(context, listen: false); diff --git a/lib/modules/loan_module/pages/loan_equipment_detail_page.dart b/lib/modules/loan_module/pages/loan_equipment_detail_page.dart index f9ed2c0e..941547fd 100644 --- a/lib/modules/loan_module/pages/loan_equipment_detail_page.dart +++ b/lib/modules/loan_module/pages/loan_equipment_detail_page.dart @@ -70,21 +70,21 @@ class LoanEquipmentDetailPage extends StatelessWidget { ), 12.height, ...requesterDetails(context, snapshot.data!), - 12.height, + const Divider().defaultStyle(context), ...requestDetails(context, snapshot.data!), - 12.height, + const Divider().defaultStyle(context), ...assetDetails(context, snapshot.data!), - 12.height, + const Divider().defaultStyle(context), ...installationDetails(context, snapshot.data!), - 12.height, + const Divider().defaultStyle(context), ...doctorDetails(context, snapshot.data!), - 12.height, + const Divider().defaultStyle(context), ...vendorDetails(context, snapshot.data!), if (allAttachments.isNotEmpty) ...[ const Divider().defaultStyle(context), Text( "Attachments".addTranslation, - style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ), FilesList(images: allAttachments.map((e) => URLs.getFileUrl(e.attachmentName ?? '') ?? '').toList() ?? []), ], @@ -98,7 +98,7 @@ class LoanEquipmentDetailPage extends StatelessWidget { List requestDetails(BuildContext context, LoanRequestModel loanData) { return [ - Text("Request Details", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), + Text("Request Details", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), 'Loan Type: ${loanData.loanTypeName ?? "-"}'.bodyText(context), 'Loan No: ${loanData.reqCode ?? "-"}'.bodyText(context), 'Loan Period: ${loanData.loanPeriodName ?? "-"}'.bodyText(context), @@ -111,7 +111,7 @@ class LoanEquipmentDetailPage extends StatelessWidget { List vendorDetails(BuildContext context, LoanRequestModel loanData) { return [ - Text("Vendor Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), + Text("Vendor Information", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), 'Name: ${loanData.vendorName ?? "-"}'.bodyText(context), 'Representative Name: ${loanData.vendorRepName ?? "-"}'.bodyText(context), 'Contact: ${loanData.vendorContact ?? "-"}'.bodyText(context), @@ -121,7 +121,7 @@ class LoanEquipmentDetailPage extends StatelessWidget { List assetDetails(BuildContext context, LoanRequestModel loanData) { return [ - Text("Asset Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), + Text("Asset Information", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), '${context.translation.assetName}: ${loanData.assetName ?? "-"}'.bodyText(context), '${context.translation.assetNo}: ${loanData.assetNumber ?? "-"}'.bodyText(context), '${context.translation.serialNumber}: ${loanData.assetSerialNumber ?? "-"}'.bodyText(context), @@ -132,7 +132,7 @@ class LoanEquipmentDetailPage extends StatelessWidget { List installationDetails(BuildContext context, LoanRequestModel loanData) { return [ - Text("Installation & Pullout Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), + Text("Installation & Pullout Information", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), 'Installation EDD: ${loanData.installationEDD?.toServiceRequestDetailsFormat ?? "-"}'.bodyText(context), 'Installation Date: ${loanData.installationEDD?.toAssetDetailsFormat ?? "-"}'.bodyText(context), 'Pullout EDD: ${loanData.pulloutEDD?.toServiceRequestDetailsFormat ?? "-"}'.bodyText(context), @@ -142,7 +142,7 @@ class LoanEquipmentDetailPage extends StatelessWidget { List doctorDetails(BuildContext context, LoanRequestModel loanData) { return [ - Text("Doctor Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), + Text("Doctor Information", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), 'Name: ${loanData.doctorName ?? "-"}'.bodyText(context), 'Contact: ${loanData.doctorContact ?? "-"}'.bodyText(context), 'Email: ${loanData.doctorEmail ?? "-"}'.bodyText(context), @@ -151,7 +151,7 @@ class LoanEquipmentDetailPage extends StatelessWidget { List requesterDetails(BuildContext context, LoanRequestModel loanData) { return [ - Text("Requester Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), + Text("Requester Information", style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), 'Name: ${loanData.requestorUserIdForDisplay ?? "-"}'.bodyText(context), 'Email: ${loanData.requestorUserEmail ?? "-"}'.bodyText(context), 'Contact: ${loanData.requestorUserMobileNumber ?? "-"}'.bodyText(context), diff --git a/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart b/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart index 5fe5d4b2..2c50b2c1 100644 --- a/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart +++ b/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart @@ -75,6 +75,7 @@ class _AllRequestsFilterPageState extends State { context.translation.preventiveMaintenance: 4, context.translation.task: 6, "Loan Equipment": 12, + "Demo": 15, }; if (isEngineer) { diff --git a/lib/new_views/pages/land_page/my_request/my_requests_page.dart b/lib/new_views/pages/land_page/my_request/my_requests_page.dart index 2d2f5b3f..9e93c8f2 100644 --- a/lib/new_views/pages/land_page/my_request/my_requests_page.dart +++ b/lib/new_views/pages/land_page/my_request/my_requests_page.dart @@ -75,6 +75,7 @@ class _MyRequestsPageState extends State { } requestsList.add(Request(12, "Loan Equipment")); + requestsList.add(Request(15, "Demo")); if (context.userProvider.isAssessor) { requestsList = [ diff --git a/lib/new_views/pages/land_page/widgets/request_item_view_list.dart b/lib/new_views/pages/land_page/widgets/request_item_view_list.dart index 537b75c6..5d88ed9d 100644 --- a/lib/new_views/pages/land_page/widgets/request_item_view_list.dart +++ b/lib/new_views/pages/land_page/widgets/request_item_view_list.dart @@ -38,14 +38,7 @@ class RequestItemViewList extends StatelessWidget { shrinkWrap: true, itemBuilder: (cxt, index) { if (isLoading) return const SizedBox().toRequestShimmer(cxt, isLoading); - if (list[index].transactionType == 12) { - return DemoRequestItemView(requestDetails: list[index]);; - // return Container( - // height: 100, - // width: double.infinity, - // color: AppColor.neutral40, - // ); - } + switch (list[index].transactionType) { case 1: return ServiceRequestItemView(requestDetails: list[index]); diff --git a/lib/new_views/pages/splash_page.dart b/lib/new_views/pages/splash_page.dart index b62392cb..392ccb74 100644 --- a/lib/new_views/pages/splash_page.dart +++ b/lib/new_views/pages/splash_page.dart @@ -15,6 +15,7 @@ import 'package:test_sa/controllers/notification/firebase_notification_manger.da import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; +import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart'; import 'package:test_sa/new_views/pages/land_page/land_page.dart'; import 'package:test_sa/new_views/pages/login_page.dart'; @@ -193,10 +194,7 @@ class _SplashPageState extends State { child: SizedBox( width: 36, height: 36, - child: CircularProgressIndicator( - color: Color(0xff4A8DB7), - strokeWidth: 3, - ), + child: CircularProgressIndicator(color: AppColor.primary10, strokeWidth: 3), )), SizedBox( width: MediaQuery.of(context).size.width / 1.1, diff --git a/lib/views/widgets/images/files_list.dart b/lib/views/widgets/images/files_list.dart index 3c3a120c..851a19f7 100644 --- a/lib/views/widgets/images/files_list.dart +++ b/lib/views/widgets/images/files_list.dart @@ -16,10 +16,11 @@ import 'package:url_launcher/url_launcher.dart'; class FilesList extends StatelessWidget { final List images; + final List types; final EdgeInsets? padding; final bool showAsListView; - const FilesList({Key? key, this.images = const [], this.padding, this.showAsListView = false}) : super(key: key); + const FilesList({Key? key, this.images = const [], this.types = const [], this.padding, this.showAsListView = false}) : super(key: key); @override Widget build(BuildContext context) { @@ -75,7 +76,7 @@ class FilesList extends StatelessWidget { 4.height, RichText( text: TextSpan( - text: 'Asset Guide | ', + text: '${types.isEmpty ? "Asset Guide" : types[itemIndex]} | ', style: AppTextStyles.bodyText.copyWith(color: AppColor.neutral120), children: [ TextSpan(