import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/api_routes/urls.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/modules/cm_module/views/components/action_button/footer_action_button.dart'; import 'package:test_sa/modules/internal_audit_module/models/internal_audit_attachment_model.dart'; import 'package:test_sa/modules/internal_audit_module/models/system_internal_audit_data_model.dart'; import 'package:test_sa/modules/internal_audit_module/pages/equipment_internal_audit/update_equipment_internal_audit_page.dart'; import 'package:test_sa/modules/internal_audit_module/pages/system_internal_audit/update_system_internal_audit_page.dart'; import 'package:test_sa/modules/internal_audit_module/provider/internal_audit_provider.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/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 'package:test_sa/views/widgets/requests/request_status.dart'; import '../models/loan_request_model.dart'; class LoanEquipmentDetailPage extends StatefulWidget { static const String id = "/loan-equipment-detail-page"; final int loanId; LoanEquipmentDetailPage({Key? key, required this.loanId}) : super(key: key); @override _LoanEquipmentDetailPageState createState() { return _LoanEquipmentDetailPageState(); } } class _LoanEquipmentDetailPageState extends State { bool isWoType = true; late LoanProvider _loanProvider; List allAttachments = []; @override void initState() { super.initState(); _loanProvider = Provider.of(context, listen: false); WidgetsBinding.instance.addPostFrameCallback((_) { _loanProvider.getLoanById(widget.loanId); }); } // Future getLoanData() async { // model = await _loanProvider.getLoanById(widget.loanId); // allAttachments.clear(); // allAttachments = [ // // ...(model?.attachments ?? []), // // ...(model?.engineerData?.attachments ?? []), // ]; // } @override void dispose() { super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: const DefaultAppBar(title: "Request Details"), body: Selector( selector: (_, provider) => provider.isLoading, builder: (_, isLoading, __) { if (isLoading) return const CircularProgressIndicator(color: AppColor.primary10).center; LoanRequestModel? model = Provider.of(context, listen: false).loanData; if (model == null) const NoDataFound().center; return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SingleChildScrollView( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ // StatusLabel( // label: model.priority!, // textColor: AppColor.getRequestStatusTextColorByName(context, widget.requestDetails?.priority!), // backgroundColor: AppColor.getRequestStatusColorByName(context, widget.requestDetails?.priority!), // ), // 8.width, StatusLabel( label: model?.loanStatusName!, textColor: AppColor.getRequestStatusTextColorByName(context, model?.loanStatusName!), backgroundColor: AppColor.getRequestStatusColorByName(context, model?.loanStatusName!), ), 1.width.expanded, Text( model?.createdDate?.toServiceRequestCardFormat ?? "-", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50), ), ], ), 12.height, ...requestDetails(model!), 12.height, ...assetDetails(model), 12.height, ...requesterDetails(model), 12.height, ...doctorDetails(model), 12.height, ...vendorDetails(model), // assetInformation(), // 8.height, // workOrderInformation(), // 8.height, // //TODO need to check for comments // if (model?.findingDescription?.isNotEmpty ?? false) ...[ // const Divider().defaultStyle(context), // // Text( // // "Comments".addTranslation, // // style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), // // ), // model!.findingDescription!.bodyText(context), // ], //TODO need to check for attachments if (allAttachments.isNotEmpty) ...[ const Divider().defaultStyle(context), Text( "Attachments".addTranslation, style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ), 8.height, FilesList(images: allAttachments.map((e) => URLs.getFileUrl(e.name ?? '') ?? '').toList() ?? []), ], ], ).paddingAll(0).toShadowContainer(context), ).expanded, // if (context.userProvider.isEngineer) // FooterActionButton.footerContainer( // context: context, // child: AppFilledButton( // buttonColor: AppColor.primary10, // label: "Update", // onPressed: () async { // final result = await Navigator.of(context).push( // MaterialPageRoute( // builder: (_) => UpdateSystemInternalAuditPage(model: model), // ), // ); // if (result == true) { // // await getAuditData(); // // setState(() {}); // refresh UI with new model // } // }), // ), ], ); }, )); } // Widget workOrderInformation() { // final details = model?.workOrderDetails; // return Column( // mainAxisSize: MainAxisSize.min, // crossAxisAlignment: CrossAxisAlignment.start, // children: [ // const Divider().defaultStyle(context), // Text( // "WO Info", // style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), // ), // 6.height, // labelValueText(context, context.translation.woNumber, details?.workOrderNo), // labelValueText(context, 'WO Type'.addTranslation, model?.workOrderType?.name), // labelValueText(context, context.translation.site, details?.woSite), // labelValueText(context, context.translation.assetName, details?.woAssetName), // labelValueText(context, context.translation.manufacture, details?.woManufacturer), // labelValueText(context, context.translation.model, details?.woModel), // ], // ); // } List requestDetails(LoanRequestModel loanData) { return [ Text("Request Details", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), 6.height, 'Loan Type: ${loanData.loanTypeName ?? "-"}'.bodyText(context), 'Loan No: ${loanData.reqCode ?? "-"}'.bodyText(context), 'Loan Period: ${loanData.loanPeriodName ?? "-"}'.bodyText(context), 'Item Description: ${loanData.itemDescription ?? "-"}'.bodyText(context), 'Request Description: ${loanData.requestDescription ?? "-"}'.bodyText(context), '${context.translation.site}: ${loanData.siteName ?? "-"}'.bodyText(context), '${context.translation.department}: ${loanData.departmentName ?? "-"}'.bodyText(context), ]; } List vendorDetails(LoanRequestModel loanData) { return [ Text("Vendor Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), 'Name: ${loanData.vendorName ?? "-"}'.bodyText(context), 'Representative Name: ${loanData.vendorRepName ?? "-"}'.bodyText(context), 'Contact: ${loanData.vendorContact ?? "-"}'.bodyText(context), 'Email: ${loanData.vendorEmail ?? "-"}'.bodyText(context), ]; } List assetDetails(LoanRequestModel loanData) { return [ Text("Asset Information", style: AppTextStyles.heading4.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), '${context.translation.manufacture}: ${loanData.manufacturer ?? "-"}'.bodyText(context), '${context.translation.model}: ${loanData.model ?? "-"}'.bodyText(context), ]; } List doctorDetails(LoanRequestModel loanData) { return [ Text("Doctor Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), 'Name: ${loanData.doctorName ?? "-"}'.bodyText(context), 'Contact: ${loanData.doctorContact ?? "-"}'.bodyText(context), 'Email: ${loanData.doctorEmail ?? "-"}'.bodyText(context), ]; } List requesterDetails(LoanRequestModel loanData) { return [ Text("Requester Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)), 'Name: ${loanData.requestorUserIdForDisplay ?? "-"}'.bodyText(context), 'Email: ${loanData.requestorUserEmail ?? "-"}'.bodyText(context), 'Contact: ${loanData.requestorUserMobileNumber ?? "-"}'.bodyText(context), 'Extension: ${loanData.requesterExtensionNo ?? "-"}'.bodyText(context), ]; } // Widget assetInformation() { // final details = model?.workOrderDetails; // return Column( // mainAxisSize: MainAxisSize.min, // crossAxisAlignment: CrossAxisAlignment.start, // children: [ // Text( // "Asset Details", // style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), // ), // 6.height, // labelValueText(context, context.translation.assetName, details?.woAssetName), // labelValueText(context, context.translation.assetNo, details?.woAssetNo), // labelValueText(context, context.translation.manufacture, details?.woManufacturer), // labelValueText(context, context.translation.model, details?.woModel), // ], // ); // } Widget labelValueText(BuildContext context, String label, String? value) { if (value == null || value.isEmpty) return const SizedBox.shrink(); return Padding( padding: const EdgeInsets.only(bottom: 4), child: Text( '$label: $value', style: AppTextStyles.bodyText.copyWith( color: context.isDark ? AppColor.neutral30 : AppColor.neutral120, ), ), ); } Widget checklistWidget({required String value}) { return Row( mainAxisSize: MainAxisSize.min, children: [ Checkbox( value: true, activeColor: AppColor.neutral120, materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, visualDensity: const VisualDensity(horizontal: -4, vertical: -3), onChanged: (value) {}, ), value.bodyText(context), ], ); } }