Medical Gas Inspection completed
parent
7dd8fff34e
commit
c2068544db
@ -0,0 +1,295 @@
|
||||
|
||||
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/text_extensions.dart';
|
||||
import 'package:test_sa/extensions/widget_extensions.dart';
|
||||
import 'package:test_sa/models/generic_attachment_model.dart';
|
||||
import 'package:test_sa/models/lookup.dart';
|
||||
import 'package:test_sa/models/new_models/site.dart';
|
||||
import 'package:test_sa/models/new_models/task_request/task_type_model.dart';
|
||||
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/models/medical_gas_data_model.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/models/medical_gas_form_model.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/models/medical_gas_supplier_model.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/providers/item_type_provider.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/providers/medical_gas_inspection_provider.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/providers/medical_gas_supplier_provider.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/providers/order_type_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/app_lazy_loading.dart';
|
||||
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
|
||||
import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
|
||||
import 'package:test_sa/providers/gas_request_providers/site_provider.dart';
|
||||
import '../../../../../../new_views/common_widgets/default_app_bar.dart';
|
||||
|
||||
class CreateMedicalGasRequestPage extends StatefulWidget {
|
||||
static const String id = "/create-medical-gas";
|
||||
final MedicalGasDataModel? dataModel;
|
||||
|
||||
CreateMedicalGasRequestPage({Key? key, this.dataModel}) : super(key: key);
|
||||
|
||||
@override
|
||||
_CreateMedicalGasRequestPageState createState() => _CreateMedicalGasRequestPageState();
|
||||
}
|
||||
|
||||
class _CreateMedicalGasRequestPageState extends State<CreateMedicalGasRequestPage> with TickerProviderStateMixin {
|
||||
final List<GenericAttachmentModel> attachments = [];
|
||||
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
|
||||
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
|
||||
TaskType? selectedType;
|
||||
MedicalGasFormModel _medicalGasFormModel = MedicalGasFormModel();
|
||||
MedicalGasSupplierModel? medicalGasInfo;
|
||||
late MedicalGasInspectionProvider medicalGasInspectionProvider;
|
||||
bool isGasInfoLoading = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
// Provider.of<MedicalGasSupplierProvider>(context, listen: false).reset();
|
||||
medicalGasInspectionProvider = Provider.of<MedicalGasInspectionProvider>(context, listen: false);
|
||||
_populateFormData();
|
||||
}
|
||||
|
||||
_populateFormData() {
|
||||
if (widget.dataModel != null) {
|
||||
MedicalGasDataModel dataModel = widget.dataModel!;
|
||||
_medicalGasFormModel = MedicalGasFormModel(
|
||||
id: dataModel.id,
|
||||
orderType: Lookup(id: dataModel.requestOrderTypeId, name: dataModel.requestOrderType),
|
||||
itemType: Lookup(id: dataModel.itemTypeId, name: dataModel.itemType),
|
||||
site: Site(id: dataModel.siteId, custName: dataModel.site),
|
||||
supplier: MedicalGasSupplierModel(id: dataModel.supplierId, supplier: dataModel.supplier),
|
||||
);
|
||||
List<AttributeInfo> attributeInfo = [];
|
||||
dataModel.requestDetailDtos.forEach((v) {
|
||||
attributeInfo.add(AttributeInfo.fromJson(v.toJson()));
|
||||
});
|
||||
medicalGasInfo = MedicalGasSupplierModel(
|
||||
supplierContact: dataModel.contact,
|
||||
supplierEmail: dataModel.email,
|
||||
attributeInfo: attributeInfo,
|
||||
);
|
||||
setState(() {});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
key: _scaffoldKey,
|
||||
appBar: DefaultAppBar(title: 'Medical Gas Inspection'.addTranslation),
|
||||
body: Form(
|
||||
key: _formKey,
|
||||
child: Column(
|
||||
children: [
|
||||
SingleChildScrollView(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
SingleItemDropDownMenu<Lookup, MedicalGasOrderTypeProvider>(
|
||||
context: context,
|
||||
title: "Order Type",
|
||||
validator: (value) {
|
||||
if (value == null) return "Mandatory";
|
||||
return null;
|
||||
},
|
||||
initialValue: _medicalGasFormModel.orderType,
|
||||
showShadow: false,
|
||||
backgroundColor: AppColor.fieldBgColor(context),
|
||||
showAsBottomSheet: true,
|
||||
onSelect: (value) {
|
||||
_medicalGasFormModel.orderType = value;
|
||||
},
|
||||
),
|
||||
8.height,
|
||||
SingleItemDropDownMenu<Lookup, MedicalGasItemTypeProvider>(
|
||||
context: context,
|
||||
title: "Item Type",
|
||||
validator: (value) {
|
||||
if (value == null) return "Mandatory";
|
||||
return null;
|
||||
},
|
||||
initialValue: _medicalGasFormModel.itemType,
|
||||
showShadow: false,
|
||||
backgroundColor: AppColor.fieldBgColor(context),
|
||||
showAsBottomSheet: true,
|
||||
onSelect: (value) {
|
||||
_medicalGasFormModel.itemType = value;
|
||||
setState(() {});
|
||||
setGasInfo();
|
||||
},
|
||||
),
|
||||
8.height,
|
||||
SingleItemDropDownMenu<Site, SiteProvider>(
|
||||
context: context,
|
||||
title: context.translation.site,
|
||||
initialValue: _medicalGasFormModel.site,
|
||||
showShadow: false,
|
||||
validator: (value) {
|
||||
if (value == null) return "Please select a site";
|
||||
return null;
|
||||
},
|
||||
backgroundColor: AppColor.fieldBgColor(context),
|
||||
showAsBottomSheet: true,
|
||||
onSelect: (value) {
|
||||
_medicalGasFormModel.site = value;
|
||||
setState(() {});
|
||||
setGasInfo();
|
||||
},
|
||||
),
|
||||
8.height,
|
||||
// 8.height,
|
||||
// SingleItemDropDownMenu<MedicalDepartmentModel, MedicalDepartmentProvider>(
|
||||
// context: context,
|
||||
// title: context.translation.department,
|
||||
// showShadow: false,
|
||||
// validator: (value) {
|
||||
// if (value == null) return "Please select a department";
|
||||
// return null;
|
||||
// },
|
||||
// showAsBottomSheet: true,
|
||||
// initialValue: _medicalGasFormModel.department,
|
||||
// requestById: context.userProvider.user?.clientId,
|
||||
// backgroundColor: AppColor.fieldBgColor(context),
|
||||
// onSelect: (value) {
|
||||
// _medicalGasFormModel.department = value;
|
||||
// setState(() {});
|
||||
// },
|
||||
// ),
|
||||
// 8.height,
|
||||
SingleItemDropDownMenu<MedicalGasSupplierModel, MedicalGasSupplierProvider>(
|
||||
context: context,
|
||||
title: context.translation.supplier,
|
||||
initialValue: _medicalGasFormModel.supplier,
|
||||
showAsBottomSheet: true,
|
||||
backgroundColor: AppColor.fieldBgColor(context),
|
||||
showShadow: false,
|
||||
onSelect: (value) {
|
||||
setState(() {
|
||||
_medicalGasFormModel.supplier = value;
|
||||
});
|
||||
setGasInfo();
|
||||
},
|
||||
),
|
||||
|
||||
if (medicalGasInfo != null) medicalGasInfoWidget(),
|
||||
],
|
||||
).toShadowContainer(context, borderRadius: 20),
|
||||
).expanded,
|
||||
FooterActionButton.footerContainer(
|
||||
context: context,
|
||||
child: Row(
|
||||
children: [
|
||||
AppFilledButton(
|
||||
buttonColor: AppColor.primary10,
|
||||
label: 'Save'.addTranslation,
|
||||
onPressed: () {
|
||||
_update(isSubmitted: false);
|
||||
},
|
||||
// buttonColor: AppColor.primary10,
|
||||
).expanded,
|
||||
8.width,
|
||||
AppFilledButton(
|
||||
buttonColor: AppColor.primary10,
|
||||
label: 'Submit'.addTranslation,
|
||||
onPressed: () {
|
||||
_update(isSubmitted: true);
|
||||
},
|
||||
// buttonColor: AppColor.primary10,
|
||||
).expanded,
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void setGasInfo() async {
|
||||
if (_medicalGasFormModel.itemType != null && _medicalGasFormModel.site != null && _medicalGasFormModel.supplier != null) {
|
||||
setState(() {
|
||||
isGasInfoLoading = true;
|
||||
});
|
||||
medicalGasInfo =
|
||||
await medicalGasInspectionProvider.getMedicalGasInfo(itemTypeId: _medicalGasFormModel.itemType!.id, supplierId: _medicalGasFormModel.supplier!.id, siteId: _medicalGasFormModel.site!.id);
|
||||
setState(() {
|
||||
isGasInfoLoading = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Widget medicalGasInfoWidget() {
|
||||
return isGasInfoLoading
|
||||
? const CircularProgressIndicator(color: AppColor.primary10).center
|
||||
: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
8.height,
|
||||
'Supplier Contact: ${medicalGasInfo?.supplierContact ?? "-"}'.bodyText(context).custom(color: AppColor.black10),
|
||||
8.height,
|
||||
'Supplier Email: ${medicalGasInfo?.supplierEmail ?? "-"}'.bodyText(context).custom(color: AppColor.black10),
|
||||
8.height,
|
||||
'Items'.addTranslation.bodyText(context).custom(color: AppColor.textColor(context)),
|
||||
8.height,
|
||||
// MedicalGasItemsListView(
|
||||
// itemsList: medicalGasInfo?.attributeInfo ?? [],
|
||||
// ),
|
||||
if (medicalGasInfo!.attributeInfo!.isNotEmpty)
|
||||
ListView.separated(
|
||||
separatorBuilder: (_, __) => 12.height,
|
||||
itemCount: medicalGasInfo!.attributeInfo!.length,
|
||||
shrinkWrap: true,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
itemBuilder: (context, index) {
|
||||
AttributeInfo model = medicalGasInfo!.attributeInfo![index];
|
||||
return AppTextFormField(
|
||||
labelText: model.itemName,
|
||||
hintText: 'Enter Quantity'.addTranslation,
|
||||
backgroundColor: AppColor.fieldBgColor(context),
|
||||
initialValue: model.requestedQuantity != null ? model.requestedQuantity.toString() : '',
|
||||
textAlign: TextAlign.center,
|
||||
enable: true,
|
||||
textInputType: TextInputType.number,
|
||||
labelStyle: AppTextStyles.textFieldLabelStyle,
|
||||
showShadow: false,
|
||||
onChange: (value) {
|
||||
if (value.isNotEmpty) {
|
||||
model.requestedQuantity = int.tryParse(value);
|
||||
}
|
||||
},
|
||||
style: Theme.of(context).textTheme.titleMedium,
|
||||
);
|
||||
},
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _update({bool isSubmitted = false}) async {
|
||||
if (medicalGasInfo != null && medicalGasInfo!.attributeInfo!.isNotEmpty) {
|
||||
_medicalGasFormModel.gasRequestDetail = [];
|
||||
for (var item in medicalGasInfo!.attributeInfo!) {
|
||||
_medicalGasFormModel.gasRequestDetail?.add(MedicalGasFormDetailModel(
|
||||
id: widget.dataModel != null ? item.id : 0,
|
||||
medicalGasAttributeId: item.medicalGasAttributeId ?? item.id,
|
||||
requestedQuantity: item.requestedQuantity,
|
||||
));
|
||||
}
|
||||
}
|
||||
_medicalGasFormModel.isSubmitted = isSubmitted;
|
||||
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
|
||||
await medicalGasInspectionProvider.saveMedicalGas(model: _medicalGasFormModel).then((status) async {
|
||||
Navigator.pop(context);
|
||||
if (status) {
|
||||
Navigator.pop(context, true);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,152 @@
|
||||
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/medical_gas_inspection/create_medical_gas_request_page.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/models/medical_gas_data_model.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/providers/medical_gas_inspection_provider.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/update_delivery_notes_page.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/no_data_found.dart';
|
||||
import 'package:test_sa/views/widgets/requests/request_status.dart';
|
||||
|
||||
class MedicalGasInspectionDetailPage extends StatefulWidget {
|
||||
static const String id = "/medical-gas-inspection-detail-page";
|
||||
final int inspectionId;
|
||||
final String? prority;
|
||||
|
||||
MedicalGasInspectionDetailPage({Key? key, required this.inspectionId, this.prority}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<MedicalGasInspectionDetailPage> createState() => _MedicalGasInspectionDetailPageState();
|
||||
}
|
||||
|
||||
class _MedicalGasInspectionDetailPageState extends State<MedicalGasInspectionDetailPage> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
_loadData();
|
||||
});
|
||||
}
|
||||
|
||||
MedicalGasDataModel? model;
|
||||
bool _isLoading = true;
|
||||
|
||||
Future<void> _loadData() async {
|
||||
final result = await context.read<MedicalGasInspectionProvider>().getMedicalGasById(requestId: widget.inspectionId);
|
||||
setState(() {
|
||||
model = result;
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: const DefaultAppBar(title: "Request Details"),
|
||||
body: SafeArea(
|
||||
child: _isLoading
|
||||
? SizedBox.expand(child: const CircularProgressIndicator(color: AppColor.primary10).center)
|
||||
: model == null
|
||||
? const NoDataFound().center
|
||||
: Column(
|
||||
children: [
|
||||
ListView(
|
||||
padding: const EdgeInsets.all(16),
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
//Need to return the status form api backend
|
||||
Row(
|
||||
children: [
|
||||
if (widget.prority != null) ...[
|
||||
StatusLabel(
|
||||
label: widget.prority,
|
||||
textColor: AppColor.getRequestStatusTextColorByName(context, widget.prority),
|
||||
backgroundColor: AppColor.getRequestStatusColorByName(context, widget.prority),
|
||||
),
|
||||
8.width,
|
||||
],
|
||||
StatusLabel(
|
||||
label: model?.requestStatus?.name,
|
||||
textColor: AppColor.getHistoryLogStatusTextColorByName(model?.requestStatus?.name ?? ''),
|
||||
backgroundColor: AppColor.getHistoryLogStatusColorByName(model?.requestStatus?.name ?? ''),
|
||||
),
|
||||
1.width.expanded,
|
||||
Text(model!.requestedDate!.toServiceRequestCardFormat,
|
||||
textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50))
|
||||
],
|
||||
),
|
||||
8.height,
|
||||
Text("Request Details", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
|
||||
'${context.translation.requestNo}: ${model?.requestNumber ?? '-'}'.bodyText(context),
|
||||
'Order Type: ${model?.requestOrderType ?? '-'}'.bodyText(context),
|
||||
'Item Type: ${model?.itemType ?? '-'}'.bodyText(context),
|
||||
'Site: ${model?.site ?? '-'}'.bodyText(context),
|
||||
'Supplier Name: ${model?.supplier ?? '-'}'.bodyText(context),
|
||||
'Supplier Contact: ${model?.contact ?? '-'}'.bodyText(context),
|
||||
'Supplier Email: ${model?.email ?? '-'}'.bodyText(context),
|
||||
if (model!.deliveryNoteAttachmentDto.isNotEmpty) ...[
|
||||
const Divider().defaultStyle(context),
|
||||
Text(
|
||||
"Attachments".addTranslation,
|
||||
style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
|
||||
),
|
||||
FilesList(images: model!.deliveryNoteAttachmentDto.map((e) => URLs.getFileUrl(e.name ?? '') ?? '').toList() ?? []),
|
||||
],
|
||||
],
|
||||
).toShadowContainer(context, padding: 12),
|
||||
],
|
||||
).expanded,
|
||||
if (model?.requestStatus?.value != null && model!.requestStatus!.value! < 3)
|
||||
FooterActionButton.footerContainer(
|
||||
context: context,
|
||||
child: AppFilledButton(
|
||||
buttonColor: AppColor.primary10,
|
||||
label: model?.isSubmitted == true ? "Upload Delivery Note" : 'Update',
|
||||
onPressed: () async {
|
||||
if (model?.isSubmitted == true) {
|
||||
bool? isRefresh = await Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateDeliveryNotes(dataModel: model)));
|
||||
if (isRefresh == true) {
|
||||
_loadData();
|
||||
}
|
||||
return;
|
||||
}
|
||||
bool? isRefresh = await Navigator.of(context).push(MaterialPageRoute(
|
||||
builder: (_) => CreateMedicalGasRequestPage(
|
||||
dataModel: model,
|
||||
)));
|
||||
if (isRefresh == true) {
|
||||
_loadData();
|
||||
}
|
||||
}),
|
||||
),
|
||||
],
|
||||
),
|
||||
));
|
||||
}
|
||||
|
||||
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,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,130 @@
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:flutter/material.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/models/all_requests_and_count_model.dart';
|
||||
import 'package:test_sa/models/new_models/dashboard_detail.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/medical_gas_inspection_detail_page.dart';
|
||||
import 'package:test_sa/new_views/app_style/app_color.dart';
|
||||
import 'package:test_sa/views/widgets/requests/request_status.dart';
|
||||
|
||||
class MedicalGasInspectionItemView extends StatelessWidget {
|
||||
final Data? requestData;
|
||||
final RequestsDetails? requestDetails;
|
||||
final bool showShadow;
|
||||
|
||||
const MedicalGasInspectionItemView({Key? key, this.requestData, this.requestDetails, this.showShadow = true}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (requestData != null) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
if (requestData!.priorityName != null) ...[
|
||||
StatusLabel(
|
||||
label: requestData!.priorityName!,
|
||||
textColor: AppColor.getRequestStatusTextColorByName(context, requestData!.priorityName!),
|
||||
backgroundColor: AppColor.getRequestStatusColorByName(context, requestData!.priorityName!),
|
||||
),
|
||||
8.width,
|
||||
],
|
||||
StatusLabel(
|
||||
label: requestData!.statusName!,
|
||||
textColor: AppColor.getHistoryLogStatusTextColorByName(requestData!.statusName!),
|
||||
backgroundColor: AppColor.getHistoryLogStatusColorByName(requestData!.statusName!),
|
||||
),
|
||||
1.width.expanded,
|
||||
Text(requestData!.transactionDate!.toServiceRequestCardFormat,
|
||||
textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50)),
|
||||
],
|
||||
),
|
||||
(requestData?.typeTransaction ?? 'Medical Gas Request').heading5(context),
|
||||
infoWidget(label: 'Request Number'.addTranslation, value: requestData?.requestNo ?? '-', context: context),
|
||||
infoWidget(label: 'Request Type'.addTranslation, value: requestData?.requestType ?? '-', context: context),
|
||||
// infoWidget(label: 'Site'.addTranslation, value: requestData?.si ?? '-', context: context),
|
||||
// infoWidget(label: 'Gas Type'.addTranslation, value: requestDetails?.gasType ?? '-', context: context),
|
||||
8.height,
|
||||
Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text(
|
||||
context.translation.viewDetails,
|
||||
style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context)),
|
||||
),
|
||||
4.width,
|
||||
Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14)
|
||||
],
|
||||
),
|
||||
],
|
||||
).toShadowContainer(context, withShadow: showShadow).onPress(() async {
|
||||
Navigator.of(context).push(MaterialPageRoute(
|
||||
builder: (_) => MedicalGasInspectionDetailPage(
|
||||
inspectionId: requestData!.id!,
|
||||
prority: requestData?.priorityName,
|
||||
)));
|
||||
});
|
||||
}
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
if (requestDetails!.priority != null) ...[
|
||||
StatusLabel(
|
||||
label: requestDetails!.priority!,
|
||||
textColor: AppColor.getRequestStatusTextColorByName(context, requestDetails!.priority!),
|
||||
backgroundColor: AppColor.getRequestStatusColorByName(context, requestDetails!.priority!),
|
||||
),
|
||||
8.width,
|
||||
],
|
||||
StatusLabel(
|
||||
label: requestDetails!.status!,
|
||||
textColor: AppColor.getHistoryLogStatusTextColorByName(requestDetails!.status!),
|
||||
backgroundColor: AppColor.getHistoryLogStatusColorByName(requestDetails!.status!),
|
||||
),
|
||||
1.width.expanded,
|
||||
Text(requestDetails!.date!.toServiceRequestCardFormat, textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50)),
|
||||
],
|
||||
),
|
||||
(requestDetails?.nameOfType ?? 'Medical Gas Request').heading5(context),
|
||||
infoWidget(label: 'Request Number'.addTranslation, value: requestDetails?.requestNo ?? '-', context: context),
|
||||
infoWidget(label: 'Request Type'.addTranslation, value: requestDetails?.requestType ?? '-', context: context),
|
||||
infoWidget(label: 'Site'.addTranslation, value: requestDetails?.site ?? '-', context: context),
|
||||
8.height,
|
||||
Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text(
|
||||
context.translation.viewDetails,
|
||||
style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context)),
|
||||
),
|
||||
4.width,
|
||||
Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14)
|
||||
],
|
||||
),
|
||||
],
|
||||
).toShadowContainer(context, withShadow: showShadow).onPress(() async {
|
||||
Navigator.of(context).push(MaterialPageRoute(
|
||||
builder: (_) => MedicalGasInspectionDetailPage(
|
||||
inspectionId: requestDetails!.id!,
|
||||
prority: requestDetails?.priority,
|
||||
)));
|
||||
});
|
||||
}
|
||||
|
||||
Widget infoWidget({required String label, String? value, required BuildContext context}) {
|
||||
if (value != null && value.isNotEmpty) {
|
||||
return '$label: $value'.bodyText(context);
|
||||
}
|
||||
return const SizedBox();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,94 @@
|
||||
// import 'dart:developer';
|
||||
//
|
||||
// import 'package:flutter/material.dart';
|
||||
// import 'package:provider/provider.dart';
|
||||
// import 'package:test_sa/extensions/context_extension.dart';
|
||||
// import 'package:test_sa/extensions/enum_extensions.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/models/lookup.dart';
|
||||
// import 'package:test_sa/modules/asset_delivery_module/models/cost_center_model.dart';
|
||||
// import 'package:test_sa/modules/asset_delivery_module/provider/asset_delivery_provider.dart';
|
||||
// import 'package:test_sa/modules/asset_delivery_module/provider/cost_center_provider.dart';
|
||||
// import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
|
||||
// import 'package:test_sa/modules/medical_gas_inspection/models/medical_gas_supplier_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/common_widgets/app_lazy_loading.dart';
|
||||
// import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
|
||||
// import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
|
||||
// import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
|
||||
//
|
||||
// class MedicalGasItemsListView extends StatelessWidget {
|
||||
// final List<AttributeInfo> itemsList;
|
||||
//
|
||||
// MedicalGasItemsListView({
|
||||
// super.key,
|
||||
// required this.itemsList,
|
||||
// });
|
||||
//
|
||||
// late AssetDeliveryProvider assetDeliveryProvider;
|
||||
//
|
||||
// @override
|
||||
// Widget build(BuildContext context) {
|
||||
// // return ListView.separated(
|
||||
// // separatorBuilder: (_, __) => 12.height,
|
||||
// // itemCount: itemsList.length,
|
||||
// // shrinkWrap: true,
|
||||
// // itemBuilder: (context, index) {
|
||||
// // AttributeInfo model = itemsList[index];
|
||||
// // return AppTextFormField(
|
||||
// // labelText: model.itemName,
|
||||
// // hintText: 'Enter Quantity'.addTranslation,
|
||||
// // backgroundColor: AppColor.fieldBgColor(context),
|
||||
// // initialValue: model.requestedQuantity != null ? model.requestedQuantity.toString() : '',
|
||||
// // textAlign: TextAlign.center,
|
||||
// // enable: true,
|
||||
// // textInputType: TextInputType.number,
|
||||
// // labelStyle: AppTextStyles.textFieldLabelStyle,
|
||||
// // showShadow: false,
|
||||
// // onChange: (value) {
|
||||
// // if (value.isNotEmpty) {
|
||||
// // model.requestedQuantity = int.tryParse(value);
|
||||
// // }
|
||||
// // },
|
||||
// // style: Theme.of(context).textTheme.titleMedium,
|
||||
// // );
|
||||
// // },
|
||||
// // );
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // class ItemCard extends StatelessWidget {
|
||||
// // final AttributeInfo model;
|
||||
// // final int index;
|
||||
// //
|
||||
// // const ItemCard({
|
||||
// // super.key,
|
||||
// // required this.model,
|
||||
// // required this.index,
|
||||
// // });
|
||||
// //
|
||||
// // @override
|
||||
// // Widget build(BuildContext context) {
|
||||
// // return AppTextFormField(
|
||||
// // labelText: model.itemName,
|
||||
// // hintText: 'Enter Quantity'.addTranslation,
|
||||
// // backgroundColor: AppColor.fieldBgColor(context),
|
||||
// // initialValue: model.requestedQuantity != null ? model.requestedQuantity.toString() : '',
|
||||
// // textAlign: TextAlign.center,
|
||||
// // enable: true,
|
||||
// // textInputType: TextInputType.number,
|
||||
// // labelStyle: AppTextStyles.textFieldLabelStyle,
|
||||
// // showShadow: false,
|
||||
// // onChange: (value) {
|
||||
// // if (value.isNotEmpty) {
|
||||
// // model.requestedQuantity = int.tryParse(value);
|
||||
// // }
|
||||
// // },
|
||||
// // style: Theme.of(context).textTheme.titleMedium,
|
||||
// // );
|
||||
// // }
|
||||
// // }
|
||||
@ -0,0 +1,92 @@
|
||||
import 'package:test_sa/models/generic_attachment_model.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/models/medical_gas_data_model.dart';
|
||||
|
||||
class DeliveryNotesFormModel {
|
||||
int? id;
|
||||
DateTime? deliveredDate;
|
||||
String? deliveryNoteNumber;
|
||||
bool? isPressureChecked;
|
||||
bool? isInspectedGasLeak;
|
||||
bool? isSubmitted;
|
||||
|
||||
List<GasDeliveredQuantityModel> gasDeliveredQuantityDtos = [];
|
||||
List<MedicalGasRequestDetailModel> deliveredItemList = [];
|
||||
List<GenericAttachmentModel> attachments = [];
|
||||
|
||||
DeliveryNotesFormModel({
|
||||
this.id,
|
||||
this.deliveredDate,
|
||||
this.deliveryNoteNumber,
|
||||
this.isPressureChecked,
|
||||
this.isInspectedGasLeak,
|
||||
this.isSubmitted,
|
||||
List<GasDeliveredQuantityModel>? gasDeliveredQuantityDtos,
|
||||
List<MedicalGasRequestDetailModel>? deliveredItemList,
|
||||
List<GenericAttachmentModel>? attachments,
|
||||
}) {
|
||||
this.gasDeliveredQuantityDtos = gasDeliveredQuantityDtos ?? [];
|
||||
this.deliveredItemList = deliveredItemList ?? [];
|
||||
this.attachments = attachments ?? [];
|
||||
}
|
||||
|
||||
DeliveryNotesFormModel.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
deliveredDate = json['deliveredDate'] != null ? DateTime.parse(json['deliveredDate']) : null;
|
||||
deliveryNoteNumber = json['deliveryNoteNumber'];
|
||||
isPressureChecked = json['isPressureChecked'];
|
||||
isInspectedGasLeak = json['isInspectedGasLeak'];
|
||||
isSubmitted = json['isSubmitted'];
|
||||
if (json['gasDeliveredQuantityDtos'] != null) {
|
||||
gasDeliveredQuantityDtos = [];
|
||||
json['gasDeliveredQuantityDtos'].forEach((v) {
|
||||
gasDeliveredQuantityDtos.add(GasDeliveredQuantityModel.fromJson(v));
|
||||
});
|
||||
}
|
||||
|
||||
if (json['cUMedicalGasDeliveryNoteAttachmentDtos'] != null) {
|
||||
attachments = [];
|
||||
json['cUMedicalGasDeliveryNoteAttachmentDtos'].forEach((v) {
|
||||
attachments.add(GenericAttachmentModel.fromJson(v));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'id': id,
|
||||
'deliveredDate': deliveredDate?.toIso8601String(),
|
||||
'deliveryNoteNumber': deliveryNoteNumber,
|
||||
'isPressureChecked': isPressureChecked,
|
||||
'isInspectedGasLeak': isInspectedGasLeak,
|
||||
'isSubmitted': isSubmitted,
|
||||
'gasDeliveredQuantityDtos': gasDeliveredQuantityDtos.map((e) => e.toJson()).toList(),
|
||||
'cUMedicalGasDeliveryNoteAttachmentDtos': attachments.map((e) => e.toJson()).toList(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class GasDeliveredQuantityModel {
|
||||
int? id;
|
||||
num? medicalGasAttributeId;
|
||||
num? deliveredQuantity;
|
||||
|
||||
GasDeliveredQuantityModel({
|
||||
this.id,
|
||||
this.medicalGasAttributeId,
|
||||
this.deliveredQuantity,
|
||||
});
|
||||
|
||||
GasDeliveredQuantityModel.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
medicalGasAttributeId = json['medicalGasAttributeId'];
|
||||
deliveredQuantity = json['deliveredQuantity'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'id': id,
|
||||
'medicalGasAttributeId': medicalGasAttributeId,
|
||||
'deliveredQuantity': deliveredQuantity,
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,169 @@
|
||||
import 'package:test_sa/models/base.dart';
|
||||
import 'package:test_sa/models/generic_attachment_model.dart';
|
||||
import 'package:test_sa/models/lookup.dart';
|
||||
|
||||
class MedicalGasDataModel {
|
||||
int? id;
|
||||
String? requestNumber;
|
||||
String? requestedBy;
|
||||
String? requestedDate;
|
||||
int? requestOrderTypeId;
|
||||
String? requestOrderType;
|
||||
int? itemTypeId;
|
||||
String? itemType;
|
||||
int? siteId;
|
||||
String? site;
|
||||
int? supplierId;
|
||||
String? supplier;
|
||||
String? contact;
|
||||
String? email;
|
||||
bool? isSubmitted;
|
||||
String? requestOrderStatus;
|
||||
bool? isPressureChecked;
|
||||
bool? isInspectedGasLeak;
|
||||
Lookup? requestStatus;
|
||||
DateTime? deliveredDate;
|
||||
String? deliveryNote;
|
||||
|
||||
/// ✅ non-nullable lists
|
||||
List<MedicalGasRequestDetailModel> requestDetailDtos = [];
|
||||
List<GenericAttachmentModel> deliveryNoteAttachmentDto = [];
|
||||
|
||||
MedicalGasDataModel({
|
||||
this.id,
|
||||
this.requestNumber,
|
||||
this.requestedBy,
|
||||
this.requestedDate,
|
||||
this.requestOrderTypeId,
|
||||
this.requestOrderType,
|
||||
this.itemTypeId,
|
||||
this.itemType,
|
||||
this.siteId,
|
||||
this.site,
|
||||
this.requestStatus,
|
||||
this.supplierId,
|
||||
this.supplier,
|
||||
this.contact,
|
||||
this.email,
|
||||
this.isSubmitted,
|
||||
this.requestOrderStatus,
|
||||
this.isPressureChecked,
|
||||
this.isInspectedGasLeak,
|
||||
this.deliveredDate,
|
||||
this.deliveryNote,
|
||||
List<MedicalGasRequestDetailModel>? requestDetailDtos,
|
||||
List<GenericAttachmentModel>? deliveryNoteAttachmentDto,
|
||||
}) {
|
||||
this.requestDetailDtos = requestDetailDtos ?? [];
|
||||
this.deliveryNoteAttachmentDto = deliveryNoteAttachmentDto ?? [];
|
||||
}
|
||||
|
||||
MedicalGasDataModel.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
requestNumber = json['requestNumber'];
|
||||
requestedBy = json['requestedBy'];
|
||||
requestedDate = json['requestedDate'];
|
||||
requestOrderTypeId = json['requestOrderTypeId'];
|
||||
requestOrderType = json['requestOrderType'];
|
||||
itemTypeId = json['itemTypeId'];
|
||||
itemType = json['itemType'];
|
||||
siteId = json['siteId'];
|
||||
site = json['site'];
|
||||
supplierId = json['supplierId'];
|
||||
supplier = json['supplier'];
|
||||
contact = json['contact'];
|
||||
email = json['email'];
|
||||
isSubmitted = json['isSubmitted'];
|
||||
deliveryNote = json['deliveryNote'];
|
||||
requestOrderStatus = json['requestOrderStatus'];
|
||||
isPressureChecked = json['isPressureChecked'];
|
||||
isInspectedGasLeak = json['isInspectedGasLeak'];
|
||||
deliveredDate = json['deliveredDate'] != null ? DateTime.parse(json['deliveredDate']) : null;
|
||||
requestStatus = json['requestOrderStatusDto'] != null ? Lookup.fromJson(json['requestOrderStatusDto']) : null;
|
||||
if (json['requestDetailDtos'] != null) {
|
||||
requestDetailDtos = [];
|
||||
json['requestDetailDtos'].forEach((v) {
|
||||
requestDetailDtos.add(MedicalGasRequestDetailModel.fromJson(v));
|
||||
});
|
||||
}
|
||||
|
||||
if (json['deliveryNoteAttachmentDto'] != null) {
|
||||
deliveryNoteAttachmentDto = [];
|
||||
json['deliveryNoteAttachmentDto'].forEach((v) {
|
||||
deliveryNoteAttachmentDto.add(GenericAttachmentModel.fromJson(v));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'id': id,
|
||||
'requestNumber': requestNumber,
|
||||
'requestedBy': requestedBy,
|
||||
'requestedDate': requestedDate,
|
||||
'requestOrderTypeId': requestOrderTypeId,
|
||||
'requestOrderType': requestOrderType,
|
||||
'itemTypeId': itemTypeId,
|
||||
'itemType': itemType,
|
||||
'siteId': siteId,
|
||||
'site': site,
|
||||
'supplierId': supplierId,
|
||||
'deliveryNote': deliveryNote,
|
||||
'supplier': supplier,
|
||||
'contact': contact,
|
||||
'email': email,
|
||||
'isSubmitted': isSubmitted,
|
||||
'requestOrderStatus': requestOrderStatus,
|
||||
'isPressureChecked': isPressureChecked,
|
||||
'isInspectedGasLeak': isInspectedGasLeak,
|
||||
'deliveredDate': deliveredDate?.toIso8601String(),
|
||||
'requestDetailDtos': requestDetailDtos.map((e) => e.toJson()).toList(),
|
||||
'requestOrderStatusDto': requestStatus?.toJson(),
|
||||
'deliveryNoteAttachmentDto': deliveryNoteAttachmentDto.map((e) => e.toJson()).toList(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class MedicalGasRequestDetailModel extends Base {
|
||||
int? id;
|
||||
int? medicalGasAttributeId;
|
||||
String? itemName;
|
||||
String? oracleName;
|
||||
String? oracleCode;
|
||||
num? requestedQuantity;
|
||||
num? deliveredQuantity;
|
||||
|
||||
MedicalGasRequestDetailModel({
|
||||
this.id,
|
||||
this.medicalGasAttributeId,
|
||||
this.itemName,
|
||||
this.oracleName,
|
||||
this.oracleCode,
|
||||
this.requestedQuantity,
|
||||
this.deliveredQuantity,
|
||||
}) : super(identifier: id?.toString(), name: itemName);
|
||||
|
||||
MedicalGasRequestDetailModel.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
medicalGasAttributeId = json['medicalGasAttributeId'];
|
||||
itemName = json['itemName'];
|
||||
identifier = id.toString();
|
||||
name = itemName;
|
||||
oracleName = json['oracleName'];
|
||||
oracleCode = json['oracleCode'];
|
||||
requestedQuantity = json['requestedQuantity'];
|
||||
deliveredQuantity = json['deliveredQuantity'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'id': id,
|
||||
'medicalGasAttributeId': medicalGasAttributeId,
|
||||
'itemName': itemName,
|
||||
'oracleName': oracleName,
|
||||
'oracleCode': oracleCode,
|
||||
'requestedQuantity': requestedQuantity,
|
||||
'deliveredQuantity': deliveredQuantity,
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,87 @@
|
||||
import 'package:test_sa/models/lookup.dart';
|
||||
import 'package:test_sa/models/new_models/site.dart';
|
||||
import 'package:test_sa/modules/loan_module/models/medical_department_model.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/models/medical_gas_supplier_model.dart';
|
||||
|
||||
class MedicalGasFormModel {
|
||||
int? id;
|
||||
int? requestOrderTypeId;
|
||||
Lookup? orderType;
|
||||
Lookup? itemType;
|
||||
int? itemTypeId;
|
||||
int? siteId;
|
||||
Site? site;
|
||||
MedicalDepartmentModel? department;
|
||||
MedicalGasSupplierModel? supplier;
|
||||
int? supplierId;
|
||||
bool? isSubmitted;
|
||||
List<MedicalGasFormDetailModel>? gasRequestDetail;
|
||||
|
||||
MedicalGasFormModel({
|
||||
this.id,
|
||||
this.requestOrderTypeId,
|
||||
this.itemTypeId,
|
||||
this.siteId,
|
||||
this.supplierId,
|
||||
this.supplier,
|
||||
this.isSubmitted,
|
||||
this.orderType,
|
||||
this.itemType,
|
||||
this.site,
|
||||
this.department,
|
||||
this.gasRequestDetail,
|
||||
});
|
||||
|
||||
MedicalGasFormModel.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
requestOrderTypeId = json['requestOrderTypeId'];
|
||||
itemTypeId = json['itemTypeId'];
|
||||
siteId = json['siteId'];
|
||||
supplierId = json['supplierId'];
|
||||
isSubmitted = json['isSubmitted'];
|
||||
if (json['gasRequestDetailDtos'] != null) {
|
||||
gasRequestDetail = [];
|
||||
json['gasRequestDetailDtos'].forEach((v) {
|
||||
gasRequestDetail!.add(MedicalGasFormDetailModel.fromJson(v));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'id': id ?? 0,
|
||||
'requestOrderTypeId': orderType?.id,
|
||||
'itemTypeId': itemType?.id,
|
||||
'siteId': site?.id,
|
||||
'supplierId': supplier?.id,
|
||||
'isSubmitted': isSubmitted,
|
||||
'gasRequestDetailDtos': gasRequestDetail?.map((e) => e.toJson()).toList(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class MedicalGasFormDetailModel {
|
||||
int? id;
|
||||
int? medicalGasAttributeId;
|
||||
num? requestedQuantity;
|
||||
|
||||
MedicalGasFormDetailModel({
|
||||
this.id,
|
||||
this.medicalGasAttributeId,
|
||||
this.requestedQuantity,
|
||||
});
|
||||
|
||||
MedicalGasFormDetailModel.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
medicalGasAttributeId = json['medicalGasAttributeId'];
|
||||
requestedQuantity = json['requestedQuantity'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'id': id,
|
||||
'medicalGasAttributeId': medicalGasAttributeId,
|
||||
'requestedQuantity': requestedQuantity??0,
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,72 @@
|
||||
|
||||
|
||||
import 'package:test_sa/models/base.dart';
|
||||
|
||||
class MedicalGasSupplierModel extends Base {
|
||||
int? id;
|
||||
String? supplier;
|
||||
String? supplierEmail;
|
||||
String? supplierContact;
|
||||
List<AttributeInfo>? attributeInfo;
|
||||
|
||||
MedicalGasSupplierModel({this.id, this.supplier, this.supplierContact, this.supplierEmail, this.attributeInfo}) : super(identifier: id?.toString() ?? '', name: supplier);
|
||||
|
||||
MedicalGasSupplierModel.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
identifier = id?.toString() ?? '';
|
||||
supplier = json['supplier'];
|
||||
name=supplier;
|
||||
supplierEmail = json['supplierEmail'];
|
||||
supplierContact = json['supplierContact'];
|
||||
if (json['attributeInfoDtos'] != null) {
|
||||
attributeInfo = [];
|
||||
json['attributeInfoDtos'].forEach((v) {
|
||||
attributeInfo!.add(AttributeInfo.fromJson(v));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'id': id,
|
||||
'supplier': supplier,
|
||||
'supplierEmail': supplierEmail,
|
||||
'supplierContact': supplierContact,
|
||||
'attributeInfoDtos': attributeInfo?.map((e) => e.toJson()).toList(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class AttributeInfo {
|
||||
int? id;
|
||||
int? medicalGasAttributeId;
|
||||
num? requestedQuantity;
|
||||
String? itemName;
|
||||
String? oracleName;
|
||||
String? oracleCode;
|
||||
|
||||
AttributeInfo({this.id, this.medicalGasAttributeId, this.requestedQuantity, this.itemName, this.oracleName, this.oracleCode});
|
||||
|
||||
AttributeInfo.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
medicalGasAttributeId = json['medicalGasAttributeId'];
|
||||
requestedQuantity = json['requestedQuantity'];
|
||||
itemName = json['itemName'];
|
||||
oracleName = json['oracleName'];
|
||||
oracleCode = json['oracleCode'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
//{
|
||||
// "id": 0,
|
||||
// "medicalGasAttributeId": 0,
|
||||
// "requestedQuantity": 0
|
||||
// }
|
||||
return {
|
||||
'id': id,
|
||||
'medicalGasAttributeId': medicalGasAttributeId,
|
||||
'requestedQuantity': requestedQuantity,
|
||||
// 'oracleCode': oracleCode,
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,33 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart';
|
||||
import 'package:test_sa/controllers/api_routes/api_manager.dart';
|
||||
import 'package:test_sa/controllers/api_routes/urls.dart';
|
||||
import 'package:test_sa/models/lookup.dart';
|
||||
import 'package:test_sa/providers/loading_list_notifier.dart';
|
||||
|
||||
class MedicalGasItemTypeProvider extends LoadingListNotifier<Lookup> {
|
||||
@override
|
||||
Future getData({int? id}) async {
|
||||
if (loading == true) return -2;
|
||||
loading = true;
|
||||
notifyListeners();
|
||||
loading = true;
|
||||
notifyListeners();
|
||||
try {
|
||||
Response response = await ApiManager.instance.get(URLs.itemTypeLookUp);
|
||||
stateCode = response.statusCode;
|
||||
if (response.statusCode >= 200 && response.statusCode < 300) {
|
||||
List categoriesListJson = json.decode(response.body)["data"];
|
||||
items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList();
|
||||
}
|
||||
loading = false;
|
||||
notifyListeners();
|
||||
return response.statusCode;
|
||||
} catch (error) {
|
||||
loading = false;
|
||||
stateCode = -1;
|
||||
notifyListeners();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,119 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:developer';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:test_sa/controllers/api_routes/api_manager.dart';
|
||||
import 'package:test_sa/controllers/api_routes/urls.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/models/delivery_notes_form_model.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/models/medical_gas_data_model.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/models/medical_gas_form_model.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/models/medical_gas_supplier_model.dart';
|
||||
|
||||
class MedicalGasInspectionProvider extends ChangeNotifier {
|
||||
final pageItemNumber = 10;
|
||||
final searchPageItemNumber = 10;
|
||||
int pageNo = 1;
|
||||
|
||||
void reset() {
|
||||
pageNo = 1;
|
||||
stateCode = null;
|
||||
}
|
||||
|
||||
int? stateCode;
|
||||
bool isDetailLoading = false;
|
||||
bool nextPage = false;
|
||||
bool isLoading = false;
|
||||
bool isGasInfoLoading = false;
|
||||
|
||||
Future<MedicalGasDataModel?> getMedicalGasById({int? requestId}) async {
|
||||
MedicalGasDataModel? assetDeliveryDataModel = MedicalGasDataModel();
|
||||
|
||||
try {
|
||||
isLoading = true;
|
||||
notifyListeners();
|
||||
final response = await ApiManager.instance.get(URLs.getMedicalGasById + "?medicalGasRequestId=$requestId");
|
||||
stateCode = response.statusCode;
|
||||
if (response.statusCode >= 200 && response.statusCode < 300) {
|
||||
assetDeliveryDataModel = MedicalGasDataModel.fromJson(json.decode(response.body)["data"]);
|
||||
} else {
|
||||
assetDeliveryDataModel = null;
|
||||
}
|
||||
isLoading = false;
|
||||
notifyListeners();
|
||||
return assetDeliveryDataModel;
|
||||
} catch (e) {
|
||||
log("getMedicalGas details [error] : $e");
|
||||
isLoading = false;
|
||||
assetDeliveryDataModel = null;
|
||||
notifyListeners();
|
||||
return assetDeliveryDataModel;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> saveMedicalGas({
|
||||
required MedicalGasFormModel model,
|
||||
}) async {
|
||||
isLoading = true;
|
||||
try {
|
||||
final response = await ApiManager.instance.post(URLs.addMedicalGasRequest, body: model.toJson());
|
||||
stateCode = response.statusCode;
|
||||
if (response.statusCode >= 200 && response.statusCode < 300) {
|
||||
isLoading = false;
|
||||
notifyListeners();
|
||||
return true;
|
||||
} else {
|
||||
isLoading = false;
|
||||
notifyListeners();
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
isLoading = false;
|
||||
notifyListeners();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<MedicalGasSupplierModel?> getMedicalGasInfo({int? supplierId, int? itemTypeId, num? siteId}) async {
|
||||
MedicalGasSupplierModel? supplierInfo;
|
||||
Map<String, dynamic> payload = {"supplierId": supplierId, "itemTypeId": itemTypeId, "siteId": siteId};
|
||||
try {
|
||||
isGasInfoLoading = true;
|
||||
notifyListeners();
|
||||
final response = await ApiManager.instance.post("${URLs.getMedicalGasInfoBySupplier}", body: payload);
|
||||
stateCode = response.statusCode;
|
||||
if (response.statusCode >= 200 && response.statusCode < 300) {
|
||||
final jsonData = json.decode(response.body)["data"];
|
||||
supplierInfo = MedicalGasSupplierModel.fromJson(jsonData);
|
||||
}
|
||||
isGasInfoLoading = false;
|
||||
notifyListeners();
|
||||
return supplierInfo;
|
||||
} catch (e) {
|
||||
log("get Supplier List [error] : $e");
|
||||
isGasInfoLoading = false;
|
||||
notifyListeners();
|
||||
return supplierInfo;
|
||||
}
|
||||
}
|
||||
Future<bool> updatedDeliveryNotes({
|
||||
required DeliveryNotesFormModel model,
|
||||
}) async {
|
||||
isLoading = true;
|
||||
try {
|
||||
final response = await ApiManager.instance.post(URLs.updateDeliveryNote, body: model.toJson());
|
||||
stateCode = response.statusCode;
|
||||
if (response.statusCode >= 200 && response.statusCode < 300) {
|
||||
isLoading = false;
|
||||
notifyListeners();
|
||||
return true;
|
||||
} else {
|
||||
isLoading = false;
|
||||
notifyListeners();
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
isLoading = false;
|
||||
notifyListeners();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:http/http.dart';
|
||||
import 'package:test_sa/controllers/api_routes/api_manager.dart';
|
||||
import 'package:test_sa/controllers/api_routes/urls.dart';
|
||||
import 'package:test_sa/models/lookup.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/models/medical_gas_supplier_model.dart';
|
||||
import 'package:test_sa/providers/loading_list_notifier.dart';
|
||||
|
||||
class MedicalGasSupplierProvider extends LoadingListNotifier<MedicalGasSupplierModel> {
|
||||
@override
|
||||
Future getData({int? id}) async {
|
||||
loading = true;
|
||||
notifyListeners();
|
||||
Response response;
|
||||
try {
|
||||
response = await ApiManager.instance.get(URLs.getMedicalGasSupplierList);
|
||||
} catch (error) {
|
||||
loading = false;
|
||||
stateCode = -1;
|
||||
notifyListeners();
|
||||
return -1;
|
||||
}
|
||||
stateCode = response.statusCode;
|
||||
if (response.statusCode >= 200 && response.statusCode < 300) {
|
||||
List listJson = json.decode(response.body)["data"];
|
||||
items = listJson.map((supplier) => MedicalGasSupplierModel.fromJson(supplier)).toList();
|
||||
}
|
||||
loading = false;
|
||||
notifyListeners();
|
||||
return response.statusCode;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,33 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart';
|
||||
import 'package:test_sa/controllers/api_routes/api_manager.dart';
|
||||
import 'package:test_sa/controllers/api_routes/urls.dart';
|
||||
import 'package:test_sa/models/lookup.dart';
|
||||
import 'package:test_sa/providers/loading_list_notifier.dart';
|
||||
|
||||
class MedicalGasOrderTypeProvider extends LoadingListNotifier<Lookup> {
|
||||
@override
|
||||
Future getData({int? id}) async {
|
||||
if (loading == true) return -2;
|
||||
loading = true;
|
||||
notifyListeners();
|
||||
loading = true;
|
||||
notifyListeners();
|
||||
try {
|
||||
Response response = await ApiManager.instance.get(URLs.orderTypeLookUp);
|
||||
stateCode = response.statusCode;
|
||||
if (response.statusCode >= 200 && response.statusCode < 300) {
|
||||
List categoriesListJson = json.decode(response.body)["data"];
|
||||
items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList();
|
||||
}
|
||||
loading = false;
|
||||
notifyListeners();
|
||||
return response.statusCode;
|
||||
} catch (error) {
|
||||
loading = false;
|
||||
stateCode = -1;
|
||||
notifyListeners();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,288 @@
|
||||
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/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/medical_gas_inspection/models/delivery_notes_form_model.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/models/medical_gas_data_model.dart';
|
||||
import 'package:test_sa/modules/medical_gas_inspection/providers/medical_gas_inspection_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/app_lazy_loading.dart';
|
||||
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
|
||||
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
|
||||
import 'package:test_sa/new_views/common_widgets/multiple_item_drop_down_menu.dart';
|
||||
import 'package:test_sa/providers/loading_list_notifier.dart';
|
||||
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
|
||||
import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
|
||||
|
||||
class UpdateDeliveryNotes extends StatefulWidget {
|
||||
final MedicalGasDataModel? dataModel;
|
||||
|
||||
UpdateDeliveryNotes({Key? key, required this.dataModel}) : super(key: key);
|
||||
|
||||
@override
|
||||
_UpdateDeliveryNotesState createState() {
|
||||
return _UpdateDeliveryNotesState();
|
||||
}
|
||||
}
|
||||
|
||||
class _UpdateDeliveryNotesState extends State<UpdateDeliveryNotes> {
|
||||
DeliveryNotesFormModel formModel = DeliveryNotesFormModel();
|
||||
late MedicalGasInspectionProvider medicalGasInspectionProvider;
|
||||
bool pressureTestAcknowledgement = false;
|
||||
bool leakTestAcknowledgement = false;
|
||||
List<MedicalGasRequestDetailModel> selectedItemList = [];
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
medicalGasInspectionProvider = Provider.of<MedicalGasInspectionProvider>(context, listen: false);
|
||||
_populateFormData();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
_populateFormData() {
|
||||
if (widget.dataModel != null) {
|
||||
MedicalGasDataModel dataModel = widget.dataModel!;
|
||||
formModel = DeliveryNotesFormModel(
|
||||
id: dataModel.id,
|
||||
deliveredItemList: dataModel.requestDetailDtos,
|
||||
isInspectedGasLeak: dataModel.isInspectedGasLeak,
|
||||
isPressureChecked: dataModel.isPressureChecked,
|
||||
deliveredDate: dataModel.deliveredDate,
|
||||
attachments: dataModel.deliveryNoteAttachmentDto,
|
||||
isSubmitted: dataModel.isSubmitted,
|
||||
deliveryNoteNumber: dataModel.deliveryNote);
|
||||
//Need to Confirm this condition
|
||||
selectedItemList = dataModel.requestDetailDtos.where((item) => item.deliveredQuantity != null && item.deliveredQuantity! > 0).toList();
|
||||
setState(() {});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: const DefaultAppBar(
|
||||
title: "Upload Delivery Note",
|
||||
// onWillPopScope: () {
|
||||
// _update(context: context);
|
||||
// },
|
||||
),
|
||||
body: SafeArea(
|
||||
child: Column(
|
||||
children: [
|
||||
ListView(
|
||||
padding: const EdgeInsets.all(16),
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
ADatePicker(
|
||||
label: "Delivered Date",
|
||||
hideShadow: true,
|
||||
backgroundColor: AppColor.fieldBgColor(context),
|
||||
from: DateTime.now().subtract(const Duration(days: 365 * 3)),
|
||||
date: formModel.deliveredDate,
|
||||
formatDateWithTime: true,
|
||||
onDatePicker: (selectedDate) {
|
||||
showTimePicker(
|
||||
context: context,
|
||||
initialTime: TimeOfDay.now(),
|
||||
).then((selectedTime) {
|
||||
if (selectedTime != null) {
|
||||
formModel.deliveredDate = DateTime(selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute);
|
||||
setState(() {});
|
||||
}
|
||||
});
|
||||
},
|
||||
),
|
||||
16.height,
|
||||
MultipleItemDropDownMenu<MedicalGasRequestDetailModel, NullableLoadingProvider>(
|
||||
context: context,
|
||||
showAsBottomSheet: true,
|
||||
backgroundColor: AppColor.neutral100,
|
||||
showShadow: false,
|
||||
showCancel: true,
|
||||
requestById: context.userProvider.user?.clientId,
|
||||
title: 'Delivered Items'.addTranslation,
|
||||
staticData: formModel.deliveredItemList,
|
||||
initialValue: selectedItemList,
|
||||
onSelect: (value) {
|
||||
if ((value ?? []).isNotEmpty) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
if (!mounted) return;
|
||||
setState(() {
|
||||
selectedItemList = value ?? [];
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
),
|
||||
if (selectedItemList.isNotEmpty) ...[
|
||||
8.height,
|
||||
ListView.separated(
|
||||
separatorBuilder: (_, __) => 12.height,
|
||||
itemCount: selectedItemList.length,
|
||||
shrinkWrap: true,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
itemBuilder: (context, index) {
|
||||
MedicalGasRequestDetailModel model = selectedItemList[index];
|
||||
return AppTextFormField(
|
||||
labelText: '${model.name} (Req Qty =${model.requestedQuantity})',
|
||||
hintText: 'Enter Delivered Quantity'.addTranslation,
|
||||
backgroundColor: AppColor.fieldBgColor(context),
|
||||
initialValue: model.deliveredQuantity != null ? model.deliveredQuantity?.toInt().toString() : '',
|
||||
textAlign: TextAlign.center,
|
||||
enable: true,
|
||||
textInputType: TextInputType.number,
|
||||
labelStyle: AppTextStyles.textFieldLabelStyle,
|
||||
showShadow: false,
|
||||
onChange: (value) {
|
||||
if (value.isNotEmpty) {
|
||||
model.deliveredQuantity = double.tryParse(value);
|
||||
}
|
||||
},
|
||||
style: Theme.of(context).textTheme.titleMedium,
|
||||
);
|
||||
},
|
||||
)
|
||||
],
|
||||
16.height,
|
||||
AppTextFormField(
|
||||
initialValue: formModel.deliveryNoteNumber,
|
||||
labelText: "Delivery Notes",
|
||||
validator: (value) {
|
||||
if ((value ?? "").isEmpty) return "Mandatory";
|
||||
return null;
|
||||
},
|
||||
backgroundColor: AppColor.fieldBgColor(context),
|
||||
labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
|
||||
floatingLabelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
|
||||
showShadow: false,
|
||||
textInputType: TextInputType.multiline,
|
||||
makeMultiLinesNull: true,
|
||||
onChange: (value) {
|
||||
formModel.deliveryNoteNumber = value;
|
||||
},
|
||||
),
|
||||
16.height,
|
||||
AttachmentPicker(
|
||||
label: 'Upload Attachment',
|
||||
attachment: formModel.attachments,
|
||||
buttonColor: AppColor.primary10,
|
||||
// showAsListView: true,
|
||||
onlyImages: false,
|
||||
buttonIcon: 'attachment_icon'.toSvgAsset(
|
||||
color: AppColor.primary10,
|
||||
),
|
||||
),
|
||||
16.height,
|
||||
//should create a reusable widget.
|
||||
Row(
|
||||
children: [
|
||||
Checkbox(
|
||||
value: formModel.isPressureChecked,
|
||||
visualDensity: const VisualDensity(horizontal: -4.0, vertical: -4.0),
|
||||
activeColor: AppColor.blueStatus(context),
|
||||
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
formModel.isPressureChecked = value!;
|
||||
});
|
||||
}),
|
||||
12.width,
|
||||
"I Acknowledge that the received medical gases cylinders have been tested for pressure."
|
||||
.addTranslation
|
||||
.bodyText(context)
|
||||
.custom(color: context.isDark ? AppColor.primary50 : AppColor.neutral120)
|
||||
.expanded,
|
||||
],
|
||||
),
|
||||
8.height,
|
||||
Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.start,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Checkbox(
|
||||
value: formModel.isInspectedGasLeak,
|
||||
visualDensity: const VisualDensity(horizontal: -4.0, vertical: -4.0),
|
||||
activeColor: AppColor.blueStatus(context),
|
||||
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
formModel.isInspectedGasLeak = value!;
|
||||
});
|
||||
}),
|
||||
12.width,
|
||||
"I Acknowledge that the received medical gases cylinders have been inspected for leak test."
|
||||
.addTranslation
|
||||
.bodyText(context)
|
||||
.custom(color: context.isDark ? AppColor.primary50 : AppColor.neutral120)
|
||||
.expanded,
|
||||
],
|
||||
),
|
||||
],
|
||||
).toShadowContainer(context, padding: 12),
|
||||
],
|
||||
).expanded,
|
||||
FooterActionButton.footerContainer(
|
||||
context: context,
|
||||
child: Row(
|
||||
children: [
|
||||
AppFilledButton(
|
||||
buttonColor: AppColor.primary10,
|
||||
label: 'Save'.addTranslation,
|
||||
onPressed: () {
|
||||
_update(context: context);
|
||||
},
|
||||
// buttonColor: AppColor.primary10,
|
||||
).expanded,
|
||||
8.width,
|
||||
AppFilledButton(
|
||||
buttonColor: AppColor.primary10,
|
||||
label: 'Submit'.addTranslation,
|
||||
onPressed: () {
|
||||
_update(context: context, isSubmitted: true);
|
||||
},
|
||||
// buttonColor: AppColor.primary10,
|
||||
).expanded,
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
));
|
||||
// .handlePopScope(
|
||||
// cxt: context,
|
||||
// onSave: () {
|
||||
// _update(context: context);
|
||||
// });
|
||||
}
|
||||
|
||||
void _update({required BuildContext context, bool isSubmitted = false}) async {
|
||||
formModel.gasDeliveredQuantityDtos = [];
|
||||
formModel.isSubmitted = isSubmitted;
|
||||
for (var item in selectedItemList) {
|
||||
formModel.gasDeliveredQuantityDtos.add(GasDeliveredQuantityModel(
|
||||
id: widget.dataModel != null ? item.id : 0,
|
||||
medicalGasAttributeId: item.medicalGasAttributeId ?? item.id,
|
||||
deliveredQuantity: item.deliveredQuantity,
|
||||
));
|
||||
}
|
||||
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
|
||||
await medicalGasInspectionProvider.updatedDeliveryNotes(model: formModel).then((status) async {
|
||||
Navigator.pop(context);
|
||||
if (status) {
|
||||
Navigator.pop(context, true);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue