import 'package:doctor_app_flutter/config/size_config.dart'; import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart'; import 'package:doctor_app_flutter/core/enum/viewstate.dart'; import 'package:doctor_app_flutter/core/viewModel/patient-ucaf-viewmodel.dart'; import 'package:doctor_app_flutter/models/SOAP/GetAssessmentResModel.dart'; import 'package:doctor_app_flutter/models/SOAP/master_key_model.dart'; import 'package:doctor_app_flutter/models/SOAP/order-procedure.dart'; import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/util/helpers.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:doctor_app_flutter/widgets/patients/profile/PatientHeaderWidgetNoAvatar.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/borderedButton.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; import '../../../../routes.dart'; class UcafDetailScreen extends StatefulWidget { @override _UcafDetailScreenState createState() => _UcafDetailScreenState(); } class _UcafDetailScreenState extends State { int _activeTap = 0; @override Widget build(BuildContext context) { final routeArgs = ModalRoute.of(context).settings.arguments as Map; PatiantInformtion patient = routeArgs['patient']; final screenSize = MediaQuery.of(context).size; return BaseView( onModelReady: (model) async { await model.getLanguage(); await model.getPatientAssessment(patient); }, builder: (_, model, w) => AppScaffold( baseViewModel: model, appBarTitle: TranslationBase.of(context).ucaf, body: Column( children: [ Expanded( child: Container( child: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ PatientHeaderWidgetNoAvatar(patient), SizedBox( height: 10, ), Container( margin: EdgeInsets.symmetric(vertical: 16, horizontal: 16), child: Column( children: [ treatmentStepsBar( context, model, screenSize, patient), SizedBox( height: 16, ), ...getSelectedTreatmentStepItem(context, model), ], ), ), ], ), ), ), ), Container( margin: EdgeInsets.symmetric(vertical: 8, horizontal: 16), child: BorderedButton( TranslationBase.of(context).save, hasBorder: true, vPadding: 8, hPadding: 8, borderColor: HexColor("#B8382B"), backgroundColor: HexColor("#B8382B"), textColor: Colors.white, fontSize: SizeConfig.textMultiplier * 2.0, handler: () async { await model.postUCAF(patient); if(model.state == ViewState.Idle){ DrAppToastMsg.showSuccesToast(TranslationBase.of(context).postUcafSuccessMsg); Navigator.of(context).popUntil((route){ return route.settings.name == PATIENTS_PROFILE; }); } else { DrAppToastMsg.showErrorToast(model.error); } }, ), ), Container( margin: EdgeInsets.only(left: 16, right: 16, top: 0.0, bottom: 8), child: BorderedButton( TranslationBase.of(context).cancel, hasBorder: true, vPadding: 8, hPadding: 8, borderColor: Colors.white, backgroundColor: Colors.white, textColor: HexColor("#B8382B"), fontSize: SizeConfig.textMultiplier * 2.2, handler: () { Navigator.of(context).popUntil((route){ return route.settings.name == PATIENTS_PROFILE; }); }, ), ), ], ), )); } Widget treatmentStepsBar(BuildContext _context, UcafViewModel model, Size screenSize, PatiantInformtion patient) { List __treatmentSteps = [ TranslationBase.of(context).diagnosis.toUpperCase(), TranslationBase.of(context).medications.toUpperCase(), TranslationBase.of(context).procedures.toUpperCase(), ]; return Container( height: screenSize.height * 0.070, decoration: Helpers.containerBorderDecoration( Color(0Xffffffff), Color(0xFFCCCCCC)), child: Row( mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.center, children: __treatmentSteps.map((item) { bool _isActive = __treatmentSteps[_activeTap] == item ? true : false; return Expanded( child: InkWell( child: Center( child: Container( height: screenSize.height * 0.070, decoration: Helpers.containerBorderDecoration( _isActive ? HexColor("#B8382B") : Colors.white, _isActive ? HexColor("#B8382B") : Colors.white), child: Center( child: Text( item, style: TextStyle( fontSize: 12, color: _isActive ? Colors.white : Colors.black, //Colors.black, fontWeight: FontWeight.bold, ), ), )), ), onTap: () async { print(__treatmentSteps.indexOf(item)); if (__treatmentSteps.indexOf(item) == 0) { await model.getPatientAssessment(patient); } else if (__treatmentSteps.indexOf(item) == 1) { print("call Medications"); } if (__treatmentSteps.indexOf(item) == 2) { await model.getOrderProcedures(patient); } setState(() { _activeTap = __treatmentSteps.indexOf(item); }); }, ), ); }).toList(), ), ); } List getSelectedTreatmentStepItem( BuildContext _context, UcafViewModel model) { switch (_activeTap) { case 0: if (model.patientAssessmentList != null) { return [ ...List.generate( model.patientAssessmentList.length, (index) => DiagnosisWidget( model, model.patientAssessmentList[index])).toList() ]; } else { return [ Container(), ]; } break; case 1: return [...List.generate(2, (index) => MedicationWidget()).toList()]; break; case 2: if (model.orderProcedures != null) { return [ ...List.generate( model.orderProcedures.length, (index) => ProceduresWidget(model, model.orderProcedures[index])) .toList() ]; } else { return [ Container(), ]; } break; default: return [ Container(), ]; } } } class DiagnosisWidget extends StatelessWidget { final UcafViewModel model; final GetAssessmentResModel diagnosis; DiagnosisWidget(this.model, this.diagnosis); @override Widget build(BuildContext context) { MasterKeyModel diagnosisType = model.findMasterDataById( masterKeys: MasterKeysService.DiagnosisType, id: diagnosis.diagnosisTypeID); MasterKeyModel diagnosisCondition = model.findMasterDataById( masterKeys: MasterKeysService.DiagnosisCondition, id: diagnosis.conditionID); return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ AppText( "${TranslationBase.of(context).diagnoseType}: ", fontWeight: FontWeight.bold, fontSize: SizeConfig.textMultiplier * 2.0, ), AppText( diagnosisType != null ? model.selectedLanguage == 'ar' ? diagnosisType.nameAr : diagnosisType.nameEn : "-", fontWeight: FontWeight.normal, fontSize: SizeConfig.textMultiplier * 2.0, ), ], ), SizedBox( height: 4, ), Row( children: [ Expanded( child: AppText( diagnosis.asciiDesc, fontWeight: FontWeight.bold, fontSize: SizeConfig.textMultiplier * 2.0, ), ), ], ), SizedBox( height: 4, ), Row( children: [ AppText( "${TranslationBase.of(context).condition}: ", fontWeight: FontWeight.bold, fontSize: SizeConfig.textMultiplier * 2.0, ), AppText( "${diagnosisCondition != null ? model.selectedLanguage == 'ar' ? diagnosisCondition.nameAr : diagnosisCondition.nameEn : "-"}", fontWeight: FontWeight.normal, fontSize: SizeConfig.textMultiplier * 2.0, ), ], ), SizedBox( height: 4, ), Row( children: [ AppText( "${TranslationBase.of(context).icd}: ", fontWeight: FontWeight.bold, fontSize: SizeConfig.textMultiplier * 2.0, ), AppText( "${diagnosis.icdCode10ID}}", fontWeight: FontWeight.normal, fontSize: SizeConfig.textMultiplier * 2.0, ), ], ), SizedBox( height: 16, ), const Divider( color: Color(0xffCCCCCC), height: 1, thickness: 1, indent: 0, endIndent: 0, ), SizedBox( height: 16, ), ], ); } } class MedicationWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ AppText( "${TranslationBase.of(context).id}: ", fontWeight: FontWeight.bold, fontSize: SizeConfig.textMultiplier * 2.0, ), AppText( "6", fontWeight: FontWeight.normal, fontSize: SizeConfig.textMultiplier * 2.0, ), SizedBox( width: 16, ), AppText( "${TranslationBase.of(context).price}: ", fontWeight: FontWeight.bold, fontSize: SizeConfig.textMultiplier * 2.0, ), AppText( "35.6", fontWeight: FontWeight.normal, fontSize: SizeConfig.textMultiplier * 2.0, ), SizedBox( width: 16, ), AppText( "${TranslationBase.of(context).quantity}: ", fontWeight: FontWeight.bold, fontSize: SizeConfig.textMultiplier * 2.0, ), AppText( "3", fontWeight: FontWeight.normal, fontSize: SizeConfig.textMultiplier * 2.0, ), ], ), SizedBox( height: 4, ), Row( children: [ Expanded( child: AppText( "EVE SKIN CREAM WITH HONEY -170GM", fontWeight: FontWeight.bold, fontSize: SizeConfig.textMultiplier * 2.0, ), ), ], ), SizedBox( height: 4, ), Row( children: [ Expanded( child: AppText( "Every other day for 5 days", fontWeight: FontWeight.normal, fontSize: SizeConfig.textMultiplier * 2.0, ), ), ], ), SizedBox( height: 16, ), const Divider( color: Color(0xffCCCCCC), height: 1, thickness: 1, indent: 0, endIndent: 0, ), SizedBox( height: 16, ), ], ); } } class ProceduresWidget extends StatelessWidget { final UcafViewModel model; final OrderProcedure procedure; ProceduresWidget(this.model, this.procedure); @override Widget build(BuildContext context) { return Column( children: [ Row( children: [ AppText( "${TranslationBase.of(context).codeNo}: ", fontWeight: FontWeight.bold, fontSize: SizeConfig.textMultiplier * 2.0, ), AppText( procedure.achiCode, fontWeight: FontWeight.normal, fontSize: SizeConfig.textMultiplier * 2.0, ), Expanded( child: Row( mainAxisAlignment: MainAxisAlignment.end, children: [ AppText( "${TranslationBase.of(context).quantity}: ", fontWeight: FontWeight.bold, fontSize: SizeConfig.textMultiplier * 2.0, ), AppText( "${procedure.lineItemNo}", fontWeight: FontWeight.normal, fontSize: SizeConfig.textMultiplier * 2.0, ), ], ), ), ], ), SizedBox( height: 4, ), Row( children: [ Expanded( child: AppText( procedure.procedureName, fontWeight: FontWeight.bold, fontSize: SizeConfig.textMultiplier * 2.0, ), ), ], ), SizedBox( height: 4, ), Row( children: [ AppText( "${TranslationBase.of(context).covered}: ", fontWeight: FontWeight.bold, fontSize: SizeConfig.textMultiplier * 2.0, ), AppText( "${procedure.isCovered}", fontWeight: FontWeight.normal, color: procedure.isCovered ? Colors.green : Colors.red, fontSize: SizeConfig.textMultiplier * 2.0, ), SizedBox( width: 16, ), AppText( "${TranslationBase.of(context).approvalRequired}: ", fontWeight: FontWeight.bold, fontSize: SizeConfig.textMultiplier * 2.0, ), AppText( "${procedure.isApprovalRequired}", fontWeight: FontWeight.normal, fontSize: SizeConfig.textMultiplier * 2.0, ), ], ), SizedBox( height: 4, ), Row( children: [ AppText( "${TranslationBase.of(context).uncoveredByDoctor}: ", fontWeight: FontWeight.bold, fontSize: SizeConfig.textMultiplier * 2.0, ), AppText( "${procedure.isUncoveredByDoctor}", fontWeight: FontWeight.normal, fontSize: SizeConfig.textMultiplier * 2.0, ), ], ), SizedBox( height: 16, ), const Divider( color: Color(0xffCCCCCC), height: 1, thickness: 1, indent: 0, endIndent: 0, ), SizedBox( height: 16, ), ], ); } }