You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cloudsolutions-atoms/lib/modules/loan_module/pages/loan_equipment_detail_page....

296 lines
13 KiB
Dart

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<LoanEquipmentDetailPage> {
bool isWoType = true;
late LoanProvider _loanProvider;
List<InternalAuditAttachments> allAttachments = [];
@override
void initState() {
super.initState();
_loanProvider = Provider.of<LoanProvider>(context, listen: false);
WidgetsBinding.instance.addPostFrameCallback((_) {
_loanProvider.getLoanById(widget.loanId);
});
}
// Future<void> 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<LoanProvider, bool>(
selector: (_, provider) => provider.isLoading,
builder: (_, isLoading, __) {
if (isLoading) return const CircularProgressIndicator(color: AppColor.primary10).center;
LoanRequestModel? model = Provider.of<LoanProvider>(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<Widget> 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<Widget> 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<Widget> 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<Widget> 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<Widget> 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),
],
);
}
}