import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/core/enum/view_state.dart'; import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/core/model/procedure/ControlsModel.dart'; import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dart'; import 'package:doctor_app_flutter/core/model/procedure/update_procedure_request_model.dart'; import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/patients/profile/soap_update/shared_soap_widgets/bottom_sheet_title.dart'; import 'package:doctor_app_flutter/utils/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart'; import 'package:doctor_app_flutter/utils/utils.dart'; import 'package:doctor_app_flutter/widgets/bottom_sheet/custom_bottom_sheet_container.dart'; import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart'; import 'package:doctor_app_flutter/widgets/shared/text_fields/TextFields.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; void updateProcedureForm(context, {required String procedureName, required int orderNo, required int limetNo, required PatiantInformtion patient, required String orderType, required String procedureId, required String remarks, required ProcedureViewModel model, required String categoreId}) { TextEditingController remarksController = TextEditingController(); showModalBottomSheet( context: context, isScrollControlled: true, builder: (BuildContext bc) { return UpdateProcedureWidget( procedureName: procedureName, remarks: remarks, remarksController: remarksController, patient: patient, previousModel: model, procedureId: procedureId, categoryId: categoreId, orderNo: orderNo, limetNo: limetNo, selectedType: int.parse(orderType), ); }); } class UpdateProcedureWidget extends StatefulWidget { final PatiantInformtion? patient; final ProcedureViewModel? previousModel; final String? procedureName; final String? remarks; final TextEditingController? remarksController; final String? procedureId; final String? categoryId; final int? orderNo; final int? limetNo; int? selectedType; UpdateProcedureWidget({this.previousModel, this.procedureName, this.remarks, this.remarksController, this.patient, this.procedureId, this.categoryId, this.orderNo, this.limetNo, this.selectedType}); @override _UpdateProcedureWidgetState createState() => _UpdateProcedureWidgetState(); } class _UpdateProcedureWidgetState extends State { setSelectedType(int val) { setState(() { widget.selectedType = val; }); } void initState() { super.initState(); widget.remarksController!.text = widget.remarks!; } List entityList = []; dynamic selectedCategory; /// TODO Roaa Add translation and make sure it working fine @override Widget build(BuildContext context) { return BaseView( onModelReady: (model) => model.getCategory(), builder: (BuildContext context, ProcedureViewModel _model, Widget? child) => AppScaffold( baseViewModel: widget.previousModel!, isShowAppBar: true, appBar: BottomSheetTitle(title: "Update Procedure"), body: SingleChildScrollView( child: Container( height: MediaQuery.of(context).size.height * 0.9, child: Form( child: Padding( padding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 10.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ AppText( Utils.convertToTitleCase(widget.procedureName!), fontWeight: FontWeight.w700, ), SizedBox( height: 30.0, ), Container( child: Row( children: [ AppText(TranslationBase.of(context).orderType), Radio( activeColor: AppGlobal.appRedColor, value: 0, groupValue: widget.selectedType, onChanged: (value) { setSelectedType(value!); }, ), Text('routine'), Radio( activeColor: AppGlobal.appRedColor, groupValue: widget.selectedType, value: 1, onChanged: (value) { setSelectedType(value!); }, ), Text(TranslationBase.of(context).urgent), ], ), ), SizedBox( height: 12.0, ), Container( decoration: BoxDecoration(borderRadius: BorderRadius.all(Radius.circular(6.0)), border: Border.all(width: 1.0, color: HexColor("#CCCCCC"))), child: TextFields( fontSize: 15.0, controller: widget.remarksController!, hintText: widget.remarksController!.text.isEmpty ? 'No Remarks Added' : '', maxLines: 3, minLines: 2, onChanged: (value) {}, ), ), SizedBox( height: 70.0, ), ], ), ), )), ), bottomSheet: CustomBottomSheetContainer( label: TranslationBase.of(context).updateProcedure, onTap: () => updateProcedure( lineItemNo: widget.limetNo!, orderNo: widget.orderNo!, orderType: widget.selectedType.toString(), categoryId: widget.categoryId!, procedureId: widget.procedureId!, entityList: entityList, patient: widget.patient!, model: widget.previousModel!, remarks: widget.remarksController!.text), ), ), ); } updateProcedure( {required ProcedureViewModel model, required String remarks, required int lineItemNo, required int orderNo, String? newProcedureId, String? newCategoryId, required List entityList, required String orderType, required String procedureId, required PatiantInformtion patient, required String categoryId}) async { UpdateProcedureRequestModel updateProcedureReqModel = new UpdateProcedureRequestModel(); List controls = []; ProcedureDetail controlsProcedure = ProcedureDetail(); updateProcedureReqModel.appointmentNo = patient.appointmentNo; updateProcedureReqModel.episodeID = patient.episodeNo; updateProcedureReqModel.patientMRN = patient.patientMRN; updateProcedureReqModel.lineItemNo = lineItemNo; updateProcedureReqModel.orderNo = orderNo; { controls.add( Controls(code: "remarks", controlValue: remarks.isNotEmpty ? remarks : ""), ); controls.add( Controls(code: "ordertype", controlValue: orderType), ); controlsProcedure.procedure = procedureId; controlsProcedure.category = '0' + categoryId; controlsProcedure.controls = controls; } updateProcedureReqModel.procedureDetail = controlsProcedure; GifLoaderDialogUtils.showMyDialog(context); await widget.previousModel!.updateProcedure(updateProcedureRequestModel: updateProcedureReqModel, mrn: patient.patientMRN, isLocalBusy: true); if (model.state == ViewState.ErrorLocal) { Utils.showErrorToast(model.error); } else if (model.state == ViewState.Idle) { DrAppToastMsg.showSuccesToast('procedure has been updated'); await widget.previousModel!.getProcedure(mrn: patient.patientMRN!, isLocalBusy: true); Navigator.of(context).pop(); } GifLoaderDialogUtils.hideDialog(context); } }