From 8f2e9db0628ad0b15f303a4d3dba7b0da474d681 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 28 Jan 2026 15:22:01 +0300 Subject: [PATCH] existing loan check api added. --- lib/controllers/api_routes/urls.dart | 1 + lib/modules/cm_module/cm_detail_page.dart | 82 +++++++++++++++---- .../pages/create_loan_request_page.dart | 8 +- .../pages/loan_equipment_detail_page.dart | 38 ++++----- .../loan_module/provider/loan_provider.dart | 13 +++ 5 files changed, 103 insertions(+), 39 deletions(-) diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index 2bbf315e..f4bf299a 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -390,6 +390,7 @@ class URLs { static get getMedDepartmentBasedOnSite => "$_baseUrl/TRAFDataSource/GetDepartmentBasedOnSite"; static get getLoanById => '$_baseUrl/Loan/GetLoanById'; + static get getLoanByWorkOrderId => '$_baseUrl/Loan/GetLoanByWorkOrderId'; static get addLoan => '$_baseUrl/Loan/AddLoan'; } diff --git a/lib/modules/cm_module/cm_detail_page.dart b/lib/modules/cm_module/cm_detail_page.dart index 15b1b503..452f3138 100644 --- a/lib/modules/cm_module/cm_detail_page.dart +++ b/lib/modules/cm_module/cm_detail_page.dart @@ -6,6 +6,7 @@ import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_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/enums/user_types.dart'; import 'package:test_sa/models/enums/work_order_next_step.dart'; import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart'; @@ -16,6 +17,8 @@ import 'package:test_sa/modules/cx_module/chat/chat_provider.dart'; import 'package:test_sa/modules/cx_module/chat/chat_widget.dart'; import 'package:test_sa/modules/cx_module/survey/survey_page.dart'; import 'package:test_sa/modules/loan_module/pages/create_loan_request_page.dart'; +import 'package:test_sa/modules/loan_module/pages/loan_equipment_detail_page.dart'; +import 'package:test_sa/modules/loan_module/provider/loan_provider.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; @@ -104,7 +107,9 @@ class _CMDetailPageState extends State { (provider.currentWorkOrder?.data?.workOrderContactPerson?.isNotEmpty ?? false)) { return ChatWidget( moduleId: widget.moduleId, - isShow: context.settingProvider.isUserFlowMedical && (context.userProvider.isEngineer || context.userProvider.isNurse) && provider.currentWorkOrder?.data?.assignedEmployee != null, + isShow: context.settingProvider.isUserFlowMedical && + (context.userProvider.isEngineer || context.userProvider.isNurse) && + provider.currentWorkOrder?.data?.assignedEmployee != null, isReadOnly: _requestProvider.isReadOnlyRequest, requestId: widget.requestId.toInt(), assigneeEmployeeNumber: provider.currentWorkOrder?.data?.assignedEmployee!.employeeId!, @@ -115,23 +120,64 @@ class _CMDetailPageState extends State { return const SizedBox(); } }), - isNurse - ? IconButton( - icon: 'qr'.toSvgAsset( - height: 24, - width: 24, - ), - onPressed: () { - ServiceRequestBottomSheet.getQRCodeBottomSheet(context: context); - }, - ) - : IconButton( - icon: const Icon(Icons.home), - onPressed: () { - // stopTimer(); - Navigator.pop(context); - }, - ), + if (isNurse) + IconButton( + icon: 'qr'.toSvgAsset(height: 24, width: 24), + onPressed: () { + ServiceRequestBottomSheet.getQRCodeBottomSheet(context: context); + }, + ) + else ...[ + Selector( + selector: (_, myModel) => myModel.isLoading, // Selects only the userName + builder: (_, isLoading, __) { + if (isLoading) { + return const SizedBox(); + } else { + CMDetailProvider provider = Provider.of(context, listen: false); + //TODO need to verify the check with backend workOrderNextStepEnum + int? statusValue = provider.currentWorkOrder?.data?.status?.value; + WorkOrderNextStepEnum? workOrderNextStepEnum = provider.currentWorkOrder?.data?.nextStep?.workOrderNextStepEnum; + if (statusValue == 2 && workOrderNextStepEnum == WorkOrderNextStepEnum.activity) { + return Container( + padding: const EdgeInsets.symmetric(vertical: 4, horizontal: 6), + margin: const EdgeInsets.only(left: 2), + decoration: BoxDecoration(color: context.isDark ? AppColor.neutral50 : AppColor.neutral30, borderRadius: BorderRadius.circular(16)), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon(Icons.add, size: 20, color: AppColor.black1E), + Text( + "Loan", + style: AppTextStyles.bodyText2.copyWith(color: AppColor.black1E), + ), + 4.width, + ], + ), + ).onPress(() async { + LoanProvider loanProvider = Provider.of(context, listen: false); + Utils.showLoading(context); + var data = await loanProvider.getLoanByWorkOrderId(widget.requestId); + Utils.hideLoading(context); + if (data == null) { + CMDetailProvider cmProvider = Provider.of(context, listen: false); + Navigator.push(context, MaterialPageRoute(builder: (context) => CreateLoanRequestPage(workOrderId: widget.requestId, workOrder: cmProvider.currentWorkOrder!.data))); + } else { + Navigator.push(context, MaterialPageRoute(builder: (context) => LoanEquipmentDetailPage(loanId: data.id!))); + } + }); + } + return const SizedBox(); + } + }), + IconButton( + icon: const Icon(Icons.home), + onPressed: () { + // stopTimer(); + Navigator.pop(context); + }, + ) + ], ], ), body: DefaultTabController( diff --git a/lib/modules/loan_module/pages/create_loan_request_page.dart b/lib/modules/loan_module/pages/create_loan_request_page.dart index b544eb99..0b2dc53e 100644 --- a/lib/modules/loan_module/pages/create_loan_request_page.dart +++ b/lib/modules/loan_module/pages/create_loan_request_page.dart @@ -453,8 +453,8 @@ class _CreateLoanRequestPageState extends State with Tick color: AppColor.primary10, // or AppColor.blueStatus(context) ), alignment: Alignment.center, - child: Icon( - !_loanFormModel.isNewVendor? Icons.add:Icons.search, + child: Icon( + !_loanFormModel.isNewVendor ? Icons.add : Icons.search, color: Colors.white, size: 16, ), @@ -469,6 +469,10 @@ class _CreateLoanRequestPageState extends State with Tick ), ], ).onPress(() async { + _loanFormModel.supplier = null; + _loanFormModel.vendorName = null; + _loanFormModel.supEngineer = null; + _loanFormModel.vendorRepresentativeName = null; setState(() { _loanFormModel.isNewVendor = !_loanFormModel.isNewVendor; }); 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 00dc04eb..8506292c 100644 --- a/lib/modules/loan_module/pages/loan_equipment_detail_page.dart +++ b/lib/modules/loan_module/pages/loan_equipment_detail_page.dart @@ -87,25 +87,25 @@ class LoanEquipmentDetailPage extends StatelessWidget { ).toShadowContainer(context, padding: 12), ], ).expanded, - if (context.userProvider.isEngineer && (snapshot.data?.loanStatusValue == 5 || snapshot.data?.loanStatusValue == 8)) - FooterActionButton.footerContainer( - context: context, - child: AppFilledButton( - onPressed: () async { - if (snapshot.data?.loanStatusValue == 5) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => PullOutDetailsPage( - loanData: snapshot.data, - ))); - return; - } - Navigator.push(context, MaterialPageRoute(builder: (context) => const InstallationPullOutFormView(isPullout: false))); - }, - label: snapshot.data?.loanStatusValue == 5 ? 'Installation Report' : 'PullOut Report', - ), - ) + // if (context.userProvider.isEngineer && (snapshot.data?.loanStatusValue == 5 || snapshot.data?.loanStatusValue == 8)) + // FooterActionButton.footerContainer( + // context: context, + // child: AppFilledButton( + // onPressed: () async { + // if (snapshot.data?.loanStatusValue == 5) { + // Navigator.push( + // context, + // MaterialPageRoute( + // builder: (context) => PullOutDetailsPage( + // loanData: snapshot.data, + // ))); + // return; + // } + // Navigator.push(context, MaterialPageRoute(builder: (context) => const InstallationPullOutFormView(isPullout: false))); + // }, + // label: snapshot.data?.loanStatusValue == 5 ? 'Installation Report' : 'PullOut Report', + // ), + // ) ], ); }), diff --git a/lib/modules/loan_module/provider/loan_provider.dart b/lib/modules/loan_module/provider/loan_provider.dart index b2a3a5e3..01153eef 100644 --- a/lib/modules/loan_module/provider/loan_provider.dart +++ b/lib/modules/loan_module/provider/loan_provider.dart @@ -35,4 +35,17 @@ class LoanProvider extends ChangeNotifier { } return loanData; } + + Future getLoanByWorkOrderId(int id) async { + LoanRequestModel? loanData; + try { + Response response = await ApiManager.instance.get(URLs.getLoanByWorkOrderId + "?woId=$id", enableToastMessage: false); + if (response.statusCode >= 200 && response.statusCode < 300) { + loanData = LoanRequestModel.fromJson(json.decode(response.body)["data"]); + } + } catch (error) { + print(error); + } + return loanData; + } }