import 'package:flutter/material.dart'; import 'package:provider/provider.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/widget_extensions.dart'; import 'package:test_sa/helper/utils.dart'; import 'package:test_sa/models/enums/demo_request_step.dart'; import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart'; import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart'; import 'package:test_sa/modules/demo_module/demo_extension_bottom_sheet.dart'; import 'package:test_sa/modules/demo_module/models/demo_request_model.dart'; import 'package:test_sa/modules/demo_module/provider/demo_provider.dart'; import 'package:test_sa/modules/loan_module/models/loan_attachment_model.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/swipe_module/dialoge/acknowledge_work_dialog.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import '../../controllers/api_routes/urls.dart'; import '../../extensions/text_extensions.dart'; import '../../new_views/common_widgets/default_app_bar.dart'; 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"; final int demoId; DemoDetailViewPage({Key? key, required this.demoId}) : super(key: key); @override _DemoDetailViewPageState createState() { return _DemoDetailViewPageState(); } } class _DemoDetailViewPageState extends State { // bool isLoading = false; // DemoRequestModel? dataModel; DemoProvider? demoProvider; // List allAttachments = []; //Todo need to check about attachments. // bool loading = false; @override void initState() { demoProvider = Provider.of(context, listen: false); // WidgetsBinding.instance.addPostFrameCallback((_) { // getDetailsById(); // }); super.initState(); } // Future getDetailsById() async { // setState(() { // loading = true; // }); // dataModel = await demoProvider?.getDemoById(widget.demoId);// ?? DemoRequestModel(); // // allAttachments = dataModel?.demoAttachments ?? []; // setState(() { // loading = false; // }); // } @override void dispose() { super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: const DefaultAppBar(title: "Request Details"), 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! ?? []; List suppAttachments = snapshot.data!.supplierDemoAttachments! ?? []; 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: context.userProvider.isNurse ? demoData.endUserStatus?.name : demoData.status?.name, id: demoData.status?.value, radius: 4, textColor: AppColor.demoRequestStatusTextColor(context, context.userProvider.isNurse ? demoData.endUserStatus!.value! : demoData.status!.value!), backgroundColor: AppColor.demoRequestStatus(context, context.userProvider.isNurse ? demoData.endUserStatus!.value! : 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()), ], if (suppAttachments.isNotEmpty) ...[ const Divider().defaultStyle(context), Text( "Supplier Attachments".addTranslation, style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ), FilesList( showAsListView: true, images: suppAttachments.map((e) => URLs.getFileUrl(e.attachmentName ?? '') ?? '').toList(), types: suppAttachments.map((e) => e.documentType?.name ?? '').toList()), ], ], ).toShadowContainer(context, padding: 12), ).expanded, if (context.userProvider.isNurse && context.settingProvider.isUserFlowMedical && (demoData.status!.value == 2)) FooterActionButton.footerContainer( context: context, child: AppFilledButton( label: context.translation.cancel, buttonColor: AppColor.white60, textColor: AppColor.black10, loading: false, onPressed: () async { showDialog( context: context, builder: (BuildContext cxt) => AcknowledgeWorkDialog( message: "Are you sure, you want to cancel request?", confirmButtonText: 'Confirm', cancelButtonText: 'Cancel', onSave: () async { Utils.showLoading(context); DemoProvider demoProvider = Provider.of(context, listen: false); bool isSuccess = await demoProvider.cancelRequest(demoData.id!); Utils.hideLoading(context); if (isSuccess) { setState(() {}); } }, onDiscard: () {}, ), ); }, ), ) else FooterActionButton.demoRequestDetailsFooterWidget( demoRequestStage: demoData.status!.demoRequestStepEnum!, 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.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.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), ]; } List vendorDetails(BuildContext context, DemoRequestModel? model) { return [ 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.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), ]; } List doctorDetails(BuildContext context, DemoRequestModel? model) { return [ 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), ]; } List requesterDetails(BuildContext context, DemoRequestModel? model) { return [ 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), // 'Extension: ${loanData.requesterExtensionNo ?? "-"}'.bodyText(context), ]; } void _update() {} }