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.
209 lines
9.8 KiB
Dart
209 lines
9.8 KiB
Dart
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/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/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<DemoDetailViewPage> {
|
|
// bool isLoading = false;
|
|
|
|
// DemoRequestModel? dataModel;
|
|
DemoProvider? demoProvider;
|
|
|
|
// List<DemoAttachments> allAttachments = [];
|
|
|
|
//Todo need to check about attachments.
|
|
|
|
// bool loading = false;
|
|
|
|
@override
|
|
void initState() {
|
|
demoProvider = Provider.of<DemoProvider>(context, listen: false);
|
|
// WidgetsBinding.instance.addPostFrameCallback((_) {
|
|
// getDetailsById();
|
|
// });
|
|
super.initState();
|
|
}
|
|
|
|
// Future<void> 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<DemoRequestModel?>(
|
|
future: Provider.of<DemoProvider>(context, listen: false).getDemoById(widget.demoId),
|
|
builder: (BuildContext context, AsyncSnapshot<DemoRequestModel?> snapshot) {
|
|
if (snapshot.connectionState == ConnectionState.waiting) return const CircularProgressIndicator(color: AppColor.primary10).center;
|
|
if (snapshot.data == null) return const NoDataFound().center;
|
|
|
|
List<DemoAttachments> allAttachments = snapshot.data!.demoAttachments! ?? [];
|
|
List<DemoAttachments> 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: 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()),
|
|
],
|
|
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,
|
|
FooterActionButton.demoRequestDetailsFooterWidget(
|
|
demoRequestStage: demoData.status!.demoRequestStepEnum!,
|
|
dataModel: demoData,
|
|
status: demoData.status!,
|
|
context: context,
|
|
refreshData: () => setState(() {})).toShadowContainer(context, padding: 0, showShadow: false, borderRadius: 0),
|
|
],
|
|
);
|
|
}));
|
|
}
|
|
|
|
List<Widget> 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<Widget> 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<Widget> 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<Widget> 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<Widget> 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() {}
|
|
}
|