WD: vida 3 api changes

update_flutter_3.24_vida_plus_episode_MDS
taha.alam 1 year ago
parent 7dde65f8d8
commit 6e6cb20487

@ -242,6 +242,8 @@ const GET_DIET_TYPES = 'Services/DoctorApplication.svc/REST/DietTypes';
const GET_ICD_CODES = 'Services/DoctorApplication.svc/REST/GetICDCodes'; const GET_ICD_CODES = 'Services/DoctorApplication.svc/REST/GetICDCodes';
const POST_ADMISSION_REQUEST = const POST_ADMISSION_REQUEST =
'Services/DoctorApplication.svc/REST/PostAdmissionRequest'; 'Services/DoctorApplication.svc/REST/PostAdmissionRequest';
const IS_KSA_PROJECT =
'Services/DoctorApplication.svc/REST/IsKsaProject';
const GET_ITEM_BY_MEDICINE = const GET_ITEM_BY_MEDICINE =
'Services/DoctorApplication.svc/REST/GetItemByMedicineCode'; 'Services/DoctorApplication.svc/REST/GetItemByMedicineCode';

@ -1291,6 +1291,7 @@ const Map<String, Map<String, String>> localizedValues = {
}, },
"noRemarks": {"en": "No Remarks", "ar": "لا ملاحظات"}, "noRemarks": {"en": "No Remarks", "ar": "لا ملاحظات"},
"event": {"en": "Event: ", "ar": "حدث: "}, "event": {"en": "Event: ", "ar": "حدث: "},
"morphology": {"en": "Morphology: ", "ar": "مورفولوجيا: "},
"editDiagnosis": {"en": "Edit Diagnosis ", "ar": "تحرير التشخيص"}, "editDiagnosis": {"en": "Edit Diagnosis ", "ar": "تحرير التشخيص"},
"selectedDiagnosis": { "selectedDiagnosis": {
"en": "Kindly Select Diagnosis", "en": "Kindly Select Diagnosis",
@ -1334,4 +1335,5 @@ const Map<String, Map<String, String>> localizedValues = {
"ar": "ملاحظة التقدم لا يمكن أن تكون فارغة" "ar": "ملاحظة التقدم لا يمكن أن تكون فارغة"
}, },
"morphologyCode": {"en": "Morphology Code", "ar": "كود الشكل"}, "morphologyCode": {"en": "Morphology Code", "ar": "كود الشكل"},
"intendedLengthOfStay": {"en": "Intended Length Of Stay", "ar": "مدة الإقامة المقصودة"},
}; };

@ -21,7 +21,8 @@ enum MasterKeysService {
MedicationIndications, MedicationIndications,
AdmissionRequestType, AdmissionRequestType,
DiagnosisSelectionType, DiagnosisSelectionType,
MorphologyCode MorphologyCode,
IntendedLengthOfStay
} }
extension SelectedMasterKeysService on MasterKeysService { extension SelectedMasterKeysService on MasterKeysService {
@ -93,6 +94,8 @@ extension SelectedMasterKeysService on MasterKeysService {
case MasterKeysService.MorphologyCode: case MasterKeysService.MorphologyCode:
return 1097; return 1097;
break; break;
case MasterKeysService.IntendedLengthOfStay:
return 4048;
} }
} }
} }

@ -3,10 +3,11 @@ class PostAssessmentRequestModel {
int? appointmentNo; int? appointmentNo;
int? episodeId; int? episodeId;
String? createdByName; String? createdByName;
bool? isOPD;
int? createdBy; int? createdBy;
List<IcdCodeDetails>? icdCodeDetails; List<IcdCodeDetails>? icdCodeDetails;
PostAssessmentRequestModel({this.patientMRN, this.appointmentNo, this.episodeId, this.createdByName, this.createdBy, this.icdCodeDetails}); PostAssessmentRequestModel({this.patientMRN, this.appointmentNo, this.episodeId, this.createdByName, this.createdBy, this.icdCodeDetails, this.isOPD});
PostAssessmentRequestModel.fromJson(Map<String, dynamic> json) { PostAssessmentRequestModel.fromJson(Map<String, dynamic> json) {
patientMRN = json['PatientMRN']; patientMRN = json['PatientMRN'];
@ -14,6 +15,7 @@ class PostAssessmentRequestModel {
episodeId = json['EpisodeID']; episodeId = json['EpisodeID'];
createdByName = json['CreatedByName']; createdByName = json['CreatedByName'];
createdBy = json['CreatedBy']; createdBy = json['CreatedBy'];
isOPD = json['isOPD'] ?? false;
if (json['icdCodeDetails'] != null) { if (json['icdCodeDetails'] != null) {
icdCodeDetails = <IcdCodeDetails>[]; icdCodeDetails = <IcdCodeDetails>[];
json['icdCodeDetails'].forEach((v) { json['icdCodeDetails'].forEach((v) {
@ -29,6 +31,7 @@ class PostAssessmentRequestModel {
data['EpisodeID'] = this.episodeId; data['EpisodeID'] = this.episodeId;
data['CreatedByName'] = this.createdByName; data['CreatedByName'] = this.createdByName;
data['CreatedBy'] = this.createdBy; data['CreatedBy'] = this.createdBy;
data['isOPD'] = this.isOPD ?? false;
if (this.icdCodeDetails != null) { if (this.icdCodeDetails != null) {
data['icdCodeDetails'] = this.icdCodeDetails!.map((v) => v.toJson()).toList(); data['icdCodeDetails'] = this.icdCodeDetails!.map((v) => v.toJson()).toList();
} }
@ -42,8 +45,9 @@ class IcdCodeDetails {
int? diagnosisTypeId; int? diagnosisTypeId;
bool? complexDiagnosis; bool? complexDiagnosis;
String? remarks; String? remarks;
String? morphologyCode;
IcdCodeDetails({this.icdcode10Id, this.conditionId, this.diagnosisTypeId, this.complexDiagnosis, this.remarks}); IcdCodeDetails({this.icdcode10Id, this.conditionId, this.diagnosisTypeId, this.complexDiagnosis, this.remarks, this.morphologyCode});
IcdCodeDetails.fromJson(Map<String, dynamic> json) { IcdCodeDetails.fromJson(Map<String, dynamic> json) {
icdcode10Id = json['icdcode10Id']; icdcode10Id = json['icdcode10Id'];
@ -51,6 +55,7 @@ class IcdCodeDetails {
diagnosisTypeId = json['diagnosisTypeId']; diagnosisTypeId = json['diagnosisTypeId'];
complexDiagnosis = json['complexDiagnosis']; complexDiagnosis = json['complexDiagnosis'];
remarks = json['remarks']; remarks = json['remarks'];
morphologyCode = json['morphologyCode'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
@ -60,6 +65,7 @@ class IcdCodeDetails {
data['diagnosisTypeId'] = this.diagnosisTypeId; data['diagnosisTypeId'] = this.diagnosisTypeId;
data['complexDiagnosis'] = this.complexDiagnosis; data['complexDiagnosis'] = this.complexDiagnosis;
data['remarks'] = this.remarks; data['remarks'] = this.remarks;
data['morphologyCode'] = this.morphologyCode;
return data; return data;
} }
} }

@ -41,6 +41,7 @@ class AdmissionRequest {
int? appointmentNo; int? appointmentNo;
int? episodeID; int? episodeID;
int? admissionRequestNo; int? admissionRequestNo;
dynamic? intendedLengthOfStayId;
AdmissionRequest( AdmissionRequest(
{this.patientMRN, {this.patientMRN,
@ -84,7 +85,8 @@ class AdmissionRequest {
this.admissionRequestProcedures, this.admissionRequestProcedures,
this.appointmentNo, this.appointmentNo,
this.episodeID, this.episodeID,
this.admissionRequestNo}); this.admissionRequestNo,
this.intendedLengthOfStayId});
AdmissionRequest.fromJson(Map<String, dynamic> json) { AdmissionRequest.fromJson(Map<String, dynamic> json) {
patientMRN = json['patientMRN']; patientMRN = json['patientMRN'];
@ -124,6 +126,7 @@ class AdmissionRequest {
otherProcedures = json['otherProcedures']; otherProcedures = json['otherProcedures'];
pastMedicalHistory = json['pastMedicalHistory']; pastMedicalHistory = json['pastMedicalHistory'];
pastSurgicalHistory = json['pastSurgicalHistory']; pastSurgicalHistory = json['pastSurgicalHistory'];
intendedLengthOfStayId = json['intendedLengthOfStayId'];
if (json['admissionRequestDiagnoses'] != null) { if (json['admissionRequestDiagnoses'] != null) {
admissionRequestDiagnoses = []; admissionRequestDiagnoses = [];
json['admissionRequestDiagnoses'].forEach((v) { json['admissionRequestDiagnoses'].forEach((v) {
@ -194,6 +197,7 @@ class AdmissionRequest {
data['appointmentNo'] = this.appointmentNo; data['appointmentNo'] = this.appointmentNo;
data['episodeID'] = this.episodeID; data['episodeID'] = this.episodeID;
data['admissionRequestNo'] = this.admissionRequestNo; data['admissionRequestNo'] = this.admissionRequestNo;
data['intendedLengthOfStayId'] = this.intendedLengthOfStayId;
return data; return data;
} }
} }

@ -54,7 +54,8 @@ class LookupService extends BaseService {
List<MasterKeyModel> listOfSpeciality = []; List<MasterKeyModel> listOfSpeciality = [];
List<dynamic> listOfAdmissionType = []; List<dynamic> listOfAdmissionType = [];
List<dynamic> listOfDiagnosisSelectionTypes = []; List<dynamic> listOfDiagnosisSelectionTypes = [];
List<dynamic> morphologyList = []; List<MasterKeyModel> morphologyList = [];
List<MasterKeyModel> intendedLengthOfStay = [];
Future getMasterLookup(MasterKeysService masterKeys, Future getMasterLookup(MasterKeysService masterKeys,
{String searchKey = ""}) async { {String searchKey = ""}) async {
@ -217,8 +218,16 @@ class LookupService extends BaseService {
case MasterKeysService.MorphologyCode: case MasterKeysService.MorphologyCode:
morphologyList.clear(); morphologyList.clear();
entryList.forEach((v) { entryList.forEach((v) {
morphologyList.add(v); morphologyList.add(MasterKeyModel.fromJson(v));
}); });
break;
case MasterKeysService.IntendedLengthOfStay:
intendedLengthOfStay.clear();
entryList.forEach((v) {
intendedLengthOfStay.add(MasterKeyModel.fromJson(v));
});
break;
} }
} }
} }

@ -1,4 +1,5 @@
import 'package:doctor_app_flutter/config/config.dart'; import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/enum/master_lookup_key.dart';
import 'package:doctor_app_flutter/core/model/admissionRequest/admission-request.dart'; import 'package:doctor_app_flutter/core/model/admissionRequest/admission-request.dart';
import 'package:doctor_app_flutter/core/service/base/lookup-service.dart'; import 'package:doctor_app_flutter/core/service/base/lookup-service.dart';
@ -13,6 +14,7 @@ class AdmissionRequestService extends LookupService {
List<dynamic> allergiesLookupList = []; List<dynamic> allergiesLookupList = [];
List<dynamic> dietTypesList = []; List<dynamic> dietTypesList = [];
List<dynamic> icdCodes = []; List<dynamic> icdCodes = [];
bool isKSAProject = false;
setSpecialityList() { setSpecialityList() {
specialityList.clear(); specialityList.clear();
@ -229,4 +231,35 @@ class AdmissionRequestService extends LookupService {
body: body, body: body,
); );
} }
Future<bool> getKSAProjectValue() async {
hasError = false;
Map<String, dynamic> body = Map();
await baseAppClient.post(
IS_KSA_PROJECT,
onSuccess: (dynamic response, int statusCode) {
isKSAProject = response['isKSAProject'] ?? false;
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
body: body,
);
return isKSAProject;
}
Future getMasterKeyItems() async {
hasError = false;
await baseAppClient.post(GET_MASTER_LOOKUP_LIST,
onSuccess: (dynamic response, int statusCode) {
setMasterLookupInCorrectArray(response['MasterLookUpList']['entityList'],
MasterKeysService.IntendedLengthOfStay);
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: {"MasterInput": 1047});
}
} }

@ -184,6 +184,9 @@ class SOAPService extends LookupService {
Future postAssessment( Future postAssessment(
PostAssessmentRequestModel postAssessmentRequestModel) async { PostAssessmentRequestModel postAssessmentRequestModel) async {
var request = {
'AssessmenttRequestViewModel':postAssessmentRequestModel.toJson()
};
hasError = false; hasError = false;
await baseAppClient.post(POST_ASSESSMENT, await baseAppClient.post(POST_ASSESSMENT,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
@ -191,7 +194,7 @@ class SOAPService extends LookupService {
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
hasError = true; hasError = true;
super.error = error; super.error = error;
}, body: postAssessmentRequestModel.toJson()); }, body: request );
} }
Future patchAllergy(PostAllergyRequestModel patchAllergyRequestModel) async { Future patchAllergy(PostAllergyRequestModel patchAllergyRequestModel) async {
@ -1558,17 +1561,21 @@ class SOAPService extends LookupService {
}, body: finalRequest); }, body: finalRequest);
} }
Future isMorphology(String icd10Code) async { Future<bool> isMorphology(String icd10Code) async {
hasError = false; hasError = false;
await baseAppClient.post(IS_MORPHOLOGY, await baseAppClient.post(IS_MORPHOLOGY,
onSuccess: (dynamic response, int statusCode) { onSuccess: (dynamic response, int statusCode) {
print("Success"); print("Success");
isMorphology_ = response['Ismorphology']; isMorphology_ = response['Ismorphology'];
return isMorphology_;
}, onFailure: (String error, int statusCode) { }, onFailure: (String error, int statusCode) {
hasError = true; hasError = true;
super.error = error; super.error = error;
return false;
}, body: {"selectedIcdCode": icd10Code}); }, body: {"selectedIcdCode": icd10Code});
return false;
} }
Future getMorphologyDiagnosis() async { Future getMorphologyDiagnosis() async {

@ -67,6 +67,8 @@ class SOAPViewModel extends BaseViewModel {
List<MasterKeyModel> get allergiesList => _SOAPService.allergiesList; List<MasterKeyModel> get allergiesList => _SOAPService.allergiesList;
List<MasterKeyModel> get morphologyList => _SOAPService.morphologyList;
List<MasterKeyModel> get allergySeverityList => List<MasterKeyModel> get allergySeverityList =>
_SOAPService.allergySeverityList; _SOAPService.allergySeverityList;
@ -514,6 +516,8 @@ class SOAPViewModel extends BaseViewModel {
return result.first; return result.first;
} }
break; break;
case MasterKeysService.IntendedLengthOfStay:
return MasterKeyModel();
case MasterKeysService.AllergySeverity: case MasterKeysService.AllergySeverity:
List<MasterKeyModel> result = allergySeverityList.where((element) { List<MasterKeyModel> result = allergySeverityList.where((element) {
return element.id == id && return element.id == id &&
@ -1501,6 +1505,19 @@ class SOAPViewModel extends BaseViewModel {
return result; return result;
} }
Future getMorphologyDiagnosis(String icdCode10) async {
setState(ViewState.BusyLocal);
bool isMorphologyRequired = await _SOAPService.isMorphology(icdCode10);
if (isMorphologyRequired) {
await _SOAPService.getMorphologyDiagnosis();
}
if (_SOAPService.hasError) {
error = _SOAPService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
void changeCurrentCategorySelectedState( void changeCurrentCategorySelectedState(
GeneralSpeciality selectedExamination, bool status) { GeneralSpeciality selectedExamination, bool status) {
final item = speciality.firstWhere( final item = speciality.firstWhere(

@ -25,6 +25,8 @@ class AdmissionRequestViewModel extends BaseViewModel {
List<dynamic> get diagnosisTypesList => _admissionRequestService.diagnosisTypesList; List<dynamic> get diagnosisTypesList => _admissionRequestService.diagnosisTypesList;
List<dynamic> get intendedStayLength => _admissionRequestService.intendedLengthOfStay;
List<dynamic> get allergiesList => _admissionRequestService.allergiesLookupList; List<dynamic> get allergiesList => _admissionRequestService.allergiesLookupList;
List<dynamic> get dietTypesList => _admissionRequestService.dietTypesList; List<dynamic> get dietTypesList => _admissionRequestService.dietTypesList;
@ -150,4 +152,18 @@ class AdmissionRequestViewModel extends BaseViewModel {
setState(ViewState.Idle); setState(ViewState.Idle);
} }
} }
Future getIsKSAProject() async {
setState(ViewState.BusyLocal);
bool result = await _admissionRequestService.getKSAProjectValue();
if(result){
await _admissionRequestService.getMasterKeyItems();
}
if (_admissionRequestService.hasError) {
error = _admissionRequestService.error;
setState(ViewState.ErrorLocal);
} else {
setState(ViewState.Idle);
}
}
} }

@ -2,6 +2,7 @@ import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/size_config.dart'; 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/master_lookup_key.dart';
import 'package:doctor_app_flutter/core/enum/view_state.dart'; import 'package:doctor_app_flutter/core/enum/view_state.dart';
import 'package:doctor_app_flutter/core/model/SOAP/master_key_model.dart';
import 'package:doctor_app_flutter/core/model/admissionRequest/admission-request.dart'; import 'package:doctor_app_flutter/core/model/admissionRequest/admission-request.dart';
import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/core/service/AnalyticsService.dart'; import 'package:doctor_app_flutter/core/service/AnalyticsService.dart';
@ -31,10 +32,12 @@ import '../../../../routes.dart';
class AdmissionRequestSecondScreen extends StatefulWidget { class AdmissionRequestSecondScreen extends StatefulWidget {
@override @override
_AdmissionRequestSecondScreenState createState() => _AdmissionRequestSecondScreenState(); _AdmissionRequestSecondScreenState createState() =>
_AdmissionRequestSecondScreenState();
} }
class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScreen> { class _AdmissionRequestSecondScreenState
extends State<AdmissionRequestSecondScreen> {
final _postPlansEstimatedCostController = TextEditingController(); final _postPlansEstimatedCostController = TextEditingController();
final _estimatedCostController = TextEditingController(); final _estimatedCostController = TextEditingController();
final _expectedDaysController = TextEditingController(); final _expectedDaysController = TextEditingController();
@ -49,6 +52,7 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
dynamic _selectedWard; dynamic _selectedWard;
dynamic _selectedRoomCategory; dynamic _selectedRoomCategory;
dynamic _selectedAdmissionType; dynamic _selectedAdmissionType;
dynamic _selectedIntendedStayLength;
String costError = '', String costError = '',
plansError = '', plansError = '',
@ -60,7 +64,9 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
treatmentsError = '', treatmentsError = '',
complicationsError = '', complicationsError = '',
proceduresError = '', proceduresError = '',
admissionTypeError = ''; admissionTypeError = '',
stayLengthError = '';
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -74,9 +80,16 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
ProjectViewModel projectViewModel = Provider.of(context); ProjectViewModel projectViewModel = Provider.of(context);
return BaseView<AdmissionRequestViewModel>( return BaseView<AdmissionRequestViewModel>(
onModelReady: (model){
WidgetsBinding.instance.addPostFrameCallback((_) async {
await model.getIsKSAProject();
//todo handle get diagnosis list
});
},
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
baseViewModel: model, baseViewModel: model,
isShowAppBar: true, isShowAppBar: true,
isLoading: model.state == ViewState.BusyLocal,
appBar: PatientProfileAppBar(patient), appBar: PatientProfileAppBar(patient),
appBarTitle: TranslationBase.of(context).admissionRequest, appBarTitle: TranslationBase.of(context).admissionRequest,
body: GestureDetector( body: GestureDetector(
@ -104,13 +117,15 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
height: 15, height: 15,
), ),
Container( Container(
margin: EdgeInsets.symmetric(vertical: 0, horizontal: 16), margin:
EdgeInsets.symmetric(vertical: 0, horizontal: 16),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
AppText( AppText(
Utils.convertToTitleCase( Utils.convertToTitleCase(
TranslationBase.of(context).postPlansEstimatedCost, TranslationBase.of(context)
.postPlansEstimatedCost,
), ),
color: Color(0xFF2E303A), color: Color(0xFF2E303A),
fontSize: SizeConfig.textMultiplier! * 1.8, fontSize: SizeConfig.textMultiplier! * 1.8,
@ -121,11 +136,15 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
), ),
AppTextFieldCustom( AppTextFieldCustom(
height: screenSize.height * 0.075, height: screenSize.height * 0.075,
hintText: TranslationBase.of(context).estimatedCost, hintText:
TranslationBase.of(context).estimatedCost,
controller: _estimatedCostController, controller: _estimatedCostController,
validationError: costError, validationError: costError,
inputType: TextInputType.number, inputType: TextInputType.number,
inputFormatters: [FilteringTextInputFormatter.allow(RegExp(ONLY_NUMBERS))], inputFormatters: [
FilteringTextInputFormatter.allow(
RegExp(ONLY_NUMBERS))
],
onClick: () {}, onClick: () {},
onChanged: (value) {}, onChanged: (value) {},
onFieldSubmitted: () {}, onFieldSubmitted: () {},
@ -148,8 +167,10 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
height: 10, height: 10,
), ),
AppTextFieldCustom( AppTextFieldCustom(
hintText: TranslationBase.of(context).otherDepartmentsInterventions, hintText: TranslationBase.of(context)
controller: _otherDepartmentsInterventionsController, .otherDepartmentsInterventions,
controller:
_otherDepartmentsInterventionsController,
inputType: TextInputType.multiline, inputType: TextInputType.multiline,
validationError: otherInterventionsError, validationError: otherInterventionsError,
minLines: 2, minLines: 2,
@ -172,7 +193,8 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
), ),
AppTextFieldCustom( AppTextFieldCustom(
height: screenSize.height * 0.075, height: screenSize.height * 0.075,
hintText: TranslationBase.of(context).expectedDays, hintText:
TranslationBase.of(context).expectedDays,
controller: _expectedDaysController, controller: _expectedDaysController,
validationError: expectedDaysError, validationError: expectedDaysError,
inputType: TextInputType.number, inputType: TextInputType.number,
@ -190,8 +212,11 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
), ),
AppTextFieldCustom( AppTextFieldCustom(
height: screenSize.height * 0.075, height: screenSize.height * 0.075,
hintText: TranslationBase.of(context).expectedAdmissionDate, hintText: TranslationBase.of(context)
dropDownText: _expectedAdmissionDate != null ? "${AppDateUtils.convertStringToDateFormat(_expectedAdmissionDate.toString(), "yyyy-MM-dd")}" : "", .expectedAdmissionDate,
dropDownText: _expectedAdmissionDate != null
? "${AppDateUtils.convertStringToDateFormat(_expectedAdmissionDate.toString(), "yyyy-MM-dd")}"
: "",
enabled: false, enabled: false,
isTextFieldHasSuffix: true, isTextFieldHasSuffix: true,
validationError: expectedDatesError, validationError: expectedDatesError,
@ -206,7 +231,8 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
if (_expectedAdmissionDate == null) { if (_expectedAdmissionDate == null) {
_expectedAdmissionDate = DateTime.now(); _expectedAdmissionDate = DateTime.now();
} }
_selectDate(context, _expectedAdmissionDate!, (picked) { _selectDate(context, _expectedAdmissionDate!,
(picked) {
setState(() { setState(() {
_expectedAdmissionDate = picked; _expectedAdmissionDate = picked;
}); });
@ -215,37 +241,123 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
onChanged: (value) {}, onChanged: (value) {},
onFieldSubmitted: () {}, onFieldSubmitted: () {},
), ),
if (model.intendedStayLength != null &&
model.intendedStayLength.isNotEmpty) ...{
SizedBox( SizedBox(
height: 10, height: 10,
), ),
AppTextFieldCustom(
height: screenSize.height * 0.075,
hintText: TranslationBase.of(context)
.intendedLengthOfStay,
dropDownText:
_selectedIntendedStayLength != null
? _selectedIntendedStayLength['nameEn']
: null,
enabled: false,
isTextFieldHasSuffix: true,
validationError: stayLengthError,
onClick: model.intendedStayLength != null &&
model.intendedStayLength.length > 0
? () {
var attributeName =
projectViewModel.isArabic
? 'nameEn'
: 'nameAr';
openListDialogField(attributeName, 'id',
model.intendedStayLength,
(selectedValue) {
setState(() {
_selectedIntendedStayLength =
selectedValue;
});
});
}
: () async {
GifLoaderDialogUtils.showMyDialog(
context);
await model.getDiagnosis().then((_) =>
GifLoaderDialogUtils.hideDialog(
context));
if (model.state == ViewState.Idle &&
model.intendedStayLength
.isNotEmpty) {
var attributeName =
projectViewModel.isArabic
? 'nameEn'
: 'nameAr';
openListDialogField(attributeName,
'id', model.intendedStayLength,
(selectedValue) {
setState(() {
_selectedIntendedStayLength =
selectedValue;
});
});
} else if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else {
DrAppToastMsg.showErrorToast(
"Empty List");
}
},
onChanged: (value) {},
onFieldSubmitted: () {},
),
SizedBox(
height: 10,
)
} else ...{
SizedBox(
height: 10,
),
},
AppTextFieldCustom( AppTextFieldCustom(
height: screenSize.height * 0.075, height: screenSize.height * 0.075,
hintText: TranslationBase.of(context).floor, hintText: TranslationBase.of(context).floor,
dropDownText: _selectedFloor != null ? _selectedFloor['description'] : null, dropDownText: _selectedFloor != null
? _selectedFloor['description']
: null,
enabled: false, enabled: false,
isTextFieldHasSuffix: true, isTextFieldHasSuffix: true,
validationError: floorError, validationError: floorError,
onClick: model.floorList != null && model.floorList.length > 0 onClick: model.floorList != null &&
model.floorList.length > 0
? () { ? () {
openListDialogField('description', 'floorID', model.floorList, (selectedValue) { openListDialogField(
'description',
'floorID',
model.floorList, (selectedValue) {
setState(() { setState(() {
_selectedFloor = selectedValue; _selectedFloor = selectedValue;
}); });
}); });
} }
: () async { : () async {
GifLoaderDialogUtils.showMyDialog(context); GifLoaderDialogUtils.showMyDialog(
await model.getFloors().then((_) => GifLoaderDialogUtils.hideDialog(context)); context);
if (model.state == ViewState.Idle && model.floorList.length > 0) { await model.getFloors().then((_) =>
openListDialogField('description', 'floorID', model.floorList, (selectedValue) { GifLoaderDialogUtils.hideDialog(
context));
if (model.state == ViewState.Idle &&
model.floorList.length > 0) {
openListDialogField(
'description',
'floorID',
model.floorList, (selectedValue) {
setState(() { setState(() {
_selectedFloor = selectedValue; _selectedFloor = selectedValue;
}); });
}); });
} else if (model.state == ViewState.ErrorLocal) { } else if (model.state ==
DrAppToastMsg.showErrorToast(model.error); ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else { } else {
DrAppToastMsg.showErrorToast("Empty List"); DrAppToastMsg.showErrorToast(
"Empty List");
} }
}, },
onChanged: (value) {}, onChanged: (value) {},
@ -257,30 +369,46 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
AppTextFieldCustom( AppTextFieldCustom(
height: screenSize.height * 0.075, height: screenSize.height * 0.075,
hintText: TranslationBase.of(context).ward, hintText: TranslationBase.of(context).ward,
dropDownText: _selectedWard != null ? _selectedWard['description'] : null, dropDownText: _selectedWard != null
? _selectedWard['description']
: null,
enabled: false, enabled: false,
isTextFieldHasSuffix: true, isTextFieldHasSuffix: true,
onClick: model.wardList != null && model.wardList.length > 0 onClick: model.wardList != null &&
model.wardList.length > 0
? () { ? () {
openListDialogField('description', 'nursingStationID', model.wardList, (selectedValue) { openListDialogField(
'description',
'nursingStationID',
model.wardList, (selectedValue) {
setState(() { setState(() {
_selectedWard = selectedValue; _selectedWard = selectedValue;
}); });
}); });
} }
: () async { : () async {
GifLoaderDialogUtils.showMyDialog(context); GifLoaderDialogUtils.showMyDialog(
await model.getWards().then((_) => GifLoaderDialogUtils.hideDialog(context)); context);
if (model.state == ViewState.Idle && model.wardList.length > 0) { await model.getWards().then((_) =>
openListDialogField('description', 'nursingStationID', model.wardList, (selectedValue) { GifLoaderDialogUtils.hideDialog(
context));
if (model.state == ViewState.Idle &&
model.wardList.length > 0) {
openListDialogField(
'description',
'nursingStationID',
model.wardList, (selectedValue) {
setState(() { setState(() {
_selectedWard = selectedValue; _selectedWard = selectedValue;
}); });
}); });
} else if (model.state == ViewState.ErrorLocal) { } else if (model.state ==
DrAppToastMsg.showErrorToast(model.error); ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else { } else {
DrAppToastMsg.showErrorToast("Empty List"); DrAppToastMsg.showErrorToast(
"Empty List");
} }
}, },
onChanged: (value) {}, onChanged: (value) {},
@ -291,32 +419,51 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
), ),
AppTextFieldCustom( AppTextFieldCustom(
height: screenSize.height * 0.075, height: screenSize.height * 0.075,
hintText: TranslationBase.of(context).roomCategory, hintText:
dropDownText: _selectedRoomCategory != null ? _selectedRoomCategory['description'] : null, TranslationBase.of(context).roomCategory,
dropDownText: _selectedRoomCategory != null
? _selectedRoomCategory['description']
: null,
enabled: false, enabled: false,
isTextFieldHasSuffix: true, isTextFieldHasSuffix: true,
validationError: roomError, validationError: roomError,
onClick: model.roomCategoryList != null && model.roomCategoryList.length > 0 onClick: model.roomCategoryList != null &&
model.roomCategoryList.length > 0
? () { ? () {
openListDialogField('description', 'categoryID', model.roomCategoryList, (selectedValue) { openListDialogField('description',
'categoryID', model.roomCategoryList,
(selectedValue) {
setState(() { setState(() {
_selectedRoomCategory = selectedValue; _selectedRoomCategory = selectedValue;
}); });
}); });
} }
: () async { : () async {
GifLoaderDialogUtils.showMyDialog(context); GifLoaderDialogUtils.showMyDialog(
await model.getRoomCategories().then((_) => GifLoaderDialogUtils.hideDialog(context)); context);
if (model.state == ViewState.Idle && model.roomCategoryList.length > 0) { await model.getRoomCategories().then(
openListDialogField('description', 'categoryID', model.roomCategoryList, (selectedValue) { (_) =>
GifLoaderDialogUtils.hideDialog(
context));
if (model.state == ViewState.Idle &&
model.roomCategoryList.length > 0) {
openListDialogField(
'description',
'categoryID',
model.roomCategoryList,
(selectedValue) {
setState(() { setState(() {
_selectedRoomCategory = selectedValue; _selectedRoomCategory =
selectedValue;
}); });
}); });
} else if (model.state == ViewState.ErrorLocal) { } else if (model.state ==
DrAppToastMsg.showErrorToast(model.error); ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else { } else {
DrAppToastMsg.showErrorToast("Empty List"); DrAppToastMsg.showErrorToast(
"Empty List");
} }
}, },
onChanged: (value) {}, onChanged: (value) {},
@ -326,7 +473,8 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
height: 10, height: 10,
), ),
AppTextFieldCustom( AppTextFieldCustom(
hintText: TranslationBase.of(context).treatmentLine, hintText:
TranslationBase.of(context).treatmentLine,
controller: _treatmentLineController, controller: _treatmentLineController,
inputType: TextInputType.multiline, inputType: TextInputType.multiline,
validationError: treatmentsError, validationError: treatmentsError,
@ -340,7 +488,8 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
height: 10, height: 10,
), ),
AppTextFieldCustom( AppTextFieldCustom(
hintText: TranslationBase.of(context).complications, hintText:
TranslationBase.of(context).complications,
controller: _complicationsController, controller: _complicationsController,
inputType: TextInputType.multiline, inputType: TextInputType.multiline,
validationError: complicationsError, validationError: complicationsError,
@ -354,7 +503,8 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
height: 10, height: 10,
), ),
AppTextFieldCustom( AppTextFieldCustom(
hintText: TranslationBase.of(context).otherProcedure, hintText:
TranslationBase.of(context).otherProcedure,
controller: _otherProceduresController, controller: _otherProceduresController,
inputType: TextInputType.multiline, inputType: TextInputType.multiline,
validationError: proceduresError, validationError: proceduresError,
@ -369,32 +519,52 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
), ),
AppTextFieldCustom( AppTextFieldCustom(
height: screenSize.height * 0.075, height: screenSize.height * 0.075,
hintText: TranslationBase.of(context).admissionType, hintText:
dropDownText: _selectedAdmissionType != null ? _selectedAdmissionType['nameEn'] : null, TranslationBase.of(context).admissionType,
dropDownText: _selectedAdmissionType != null
? _selectedAdmissionType['nameEn']
: null,
enabled: false, enabled: false,
isTextFieldHasSuffix: true, isTextFieldHasSuffix: true,
validationError: admissionTypeError, validationError: admissionTypeError,
onClick: model.admissionTypeList != null && model.admissionTypeList.length > 0 onClick: model.admissionTypeList != null &&
model.admissionTypeList.length > 0
? () { ? () {
openListDialogField('nameEn', 'id', model.admissionTypeList, (selectedValue) { openListDialogField('nameEn', 'id',
model.admissionTypeList,
(selectedValue) {
setState(() { setState(() {
_selectedAdmissionType = selectedValue; _selectedAdmissionType =
selectedValue;
}); });
}); });
} }
: () async { : () async {
GifLoaderDialogUtils.showMyDialog(context); GifLoaderDialogUtils.showMyDialog(
await model.getMasterLookup(MasterKeysService.AdmissionRequestType).then((_) => GifLoaderDialogUtils.hideDialog(context)); context);
if (model.state == ViewState.Idle && model.admissionTypeList.length > 0) { await model
openListDialogField('nameEn', 'id', model.admissionTypeList, (selectedValue) { .getMasterLookup(MasterKeysService
.AdmissionRequestType)
.then((_) =>
GifLoaderDialogUtils.hideDialog(
context));
if (model.state == ViewState.Idle &&
model.admissionTypeList.length > 0) {
openListDialogField('nameEn', 'id',
model.admissionTypeList,
(selectedValue) {
setState(() { setState(() {
_selectedAdmissionType = selectedValue; _selectedAdmissionType =
selectedValue;
}); });
}); });
} else if (model.state == ViewState.ErrorLocal) { } else if (model.state ==
DrAppToastMsg.showErrorToast(model.error); ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
} else { } else {
DrAppToastMsg.showErrorToast("Empty List"); DrAppToastMsg.showErrorToast(
"Empty List");
} }
}, },
onChanged: (value) {}, onChanged: (value) {},
@ -447,34 +617,55 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
_expectedAdmissionDate != null && _expectedAdmissionDate != null &&
_otherDepartmentsInterventionsController.text != "" && _otherDepartmentsInterventionsController.text != "" &&
_selectedFloor != null && _selectedFloor != null &&
_selectedRoomCategory != null /*_selectedWard is not required*/ && _selectedRoomCategory !=
null /*_selectedWard is not required*/ &&
_treatmentLineController.text != "" && _treatmentLineController.text != "" &&
_complicationsController.text != "" && _complicationsController.text != "" &&
_otherProceduresController.text != "" && _otherProceduresController.text != "" &&
_selectedAdmissionType != null) { _selectedAdmissionType != null && _selectedIntendedStayLength != null ) {
model.admissionRequestData = admissionRequest; model.admissionRequestData = admissionRequest;
model.admissionRequestData!.estimatedCost = int.parse(_estimatedCostController.text); model.admissionRequestData!.estimatedCost =
model.admissionRequestData!.elementsForImprovement = _postPlansEstimatedCostController.text; int.parse(_estimatedCostController.text);
model.admissionRequestData!.elementsForImprovement =
_postPlansEstimatedCostController.text;
model.admissionRequestData!.expectedDays = int.parse(_expectedDaysController.text); model.admissionRequestData!.expectedDays =
model.admissionRequestData!.admissionDate = _expectedAdmissionDate!.toIso8601String(); int.parse(_expectedDaysController.text);
model.admissionRequestData.otherDepartmentinterventions = _otherDepartmentsInterventionsController.text; model.admissionRequestData!.admissionDate =
model.admissionRequestData!.admissionLocationID = _selectedFloor['floorID']; _expectedAdmissionDate!.toIso8601String();
model.admissionRequestData!.wardID = _selectedWard != null ? _selectedWard['nursingStationID'] : 0; model.admissionRequestData.otherDepartmentinterventions =
model.admissionRequestData!.roomCategoryID = _selectedRoomCategory['categoryID']; _otherDepartmentsInterventionsController.text;
model.admissionRequestData!.admissionLocationID =
_selectedFloor['floorID'];
model.admissionRequestData!.wardID = _selectedWard != null
? _selectedWard['nursingStationID']
: 0;
model.admissionRequestData!.roomCategoryID =
_selectedRoomCategory['categoryID'];
model.admissionRequestData!.admissionRequestProcedures = []; model.admissionRequestData!.admissionRequestProcedures = [];
model.admissionRequestData!.mainLineOfTreatment = _treatmentLineController.text; model.admissionRequestData!.mainLineOfTreatment =
model.admissionRequestData!.complications = _complicationsController.text; _treatmentLineController.text;
model.admissionRequestData!.otherProcedures = _otherProceduresController.text; model.admissionRequestData!.complications =
model.admissionRequestData!.admissionType = _selectedAdmissionType['id']; _complicationsController.text;
model.admissionRequestData!.otherProcedures =
_otherProceduresController.text;
model.admissionRequestData!.admissionType =
_selectedAdmissionType['id'];
model.admissionRequestData.intendedLengthOfStayId = (_selectedIntendedStayLength as MasterKeyModel).id;
Navigator.of(context) Navigator.of(context)
.pushNamed(PATIENT_ADMISSION_REQUEST_3, arguments: {'patient': patient, 'patientType': patientType, 'arrivalType': arrivalType, 'admission-data': model.admissionRequestData}); .pushNamed(PATIENT_ADMISSION_REQUEST_3, arguments: {
'patient': patient,
'patientType': patientType,
'arrivalType': arrivalType,
'admission-data': model.admissionRequestData
});
} else { } else {
DrAppToastMsg.showErrorToast(TranslationBase.of(context).pleaseFill); DrAppToastMsg.showErrorToast(
TranslationBase.of(context).pleaseFill);
setState(() { setState(() {
if (_estimatedCostController.text == "") { if (_estimatedCostController.text == "") {
@ -490,23 +681,33 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
} }
if (_expectedDaysController.text == "") { if (_expectedDaysController.text == "") {
expectedDaysError = TranslationBase.of(context).fieldRequired; expectedDaysError =
TranslationBase.of(context).fieldRequired;
} else { } else {
expectedDaysError = ""; expectedDaysError = "";
} }
if (_expectedAdmissionDate == null) { if (_expectedAdmissionDate == null) {
expectedDatesError = TranslationBase.of(context).fieldRequired; expectedDatesError =
TranslationBase.of(context).fieldRequired;
} else { } else {
expectedDatesError = ""; expectedDatesError = "";
} }
if (_otherDepartmentsInterventionsController.text == "") { if (_otherDepartmentsInterventionsController.text == "") {
otherInterventionsError = TranslationBase.of(context).fieldRequired; otherInterventionsError =
TranslationBase.of(context).fieldRequired;
} else { } else {
otherInterventionsError = ""; otherInterventionsError = "";
} }
if (_selectedIntendedStayLength == null ) {
stayLengthError =
TranslationBase.of(context).fieldRequired;
} else {
stayLengthError = "";
}
if (_selectedFloor == null) { if (_selectedFloor == null) {
floorError = TranslationBase.of(context).fieldRequired; floorError = TranslationBase.of(context).fieldRequired;
} else { } else {
@ -520,25 +721,29 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
} }
if (_treatmentLineController.text == "") { if (_treatmentLineController.text == "") {
treatmentsError = TranslationBase.of(context).fieldRequired; treatmentsError =
TranslationBase.of(context).fieldRequired;
} else { } else {
treatmentsError = ""; treatmentsError = "";
} }
if (_complicationsController.text == "") { if (_complicationsController.text == "") {
complicationsError = TranslationBase.of(context).fieldRequired; complicationsError =
TranslationBase.of(context).fieldRequired;
} else { } else {
complicationsError = ""; complicationsError = "";
} }
if (_otherProceduresController.text == "") { if (_otherProceduresController.text == "") {
proceduresError = TranslationBase.of(context).fieldRequired; proceduresError =
TranslationBase.of(context).fieldRequired;
} else { } else {
proceduresError = ""; proceduresError = "";
} }
if (_selectedAdmissionType == null) { if (_selectedAdmissionType == null) {
admissionTypeError = TranslationBase.of(context).fieldRequired; admissionTypeError =
TranslationBase.of(context).fieldRequired;
} else { } else {
admissionTypeError = ""; admissionTypeError = "";
} }
@ -553,7 +758,8 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
); );
} }
Future _selectDate(BuildContext context, DateTime dateTime, Function(DateTime picked) updateDate) async { Future _selectDate(BuildContext context, DateTime dateTime,
Function(DateTime picked) updateDate) async {
final DateTime? picked = await showDatePicker( final DateTime? picked = await showDatePicker(
context: context, context: context,
initialDate: dateTime, initialDate: dateTime,
@ -566,7 +772,8 @@ class _AdmissionRequestSecondScreenState extends State<AdmissionRequestSecondScr
} }
} }
void openListDialogField(String attributeName, String attributeValueId, List<dynamic> list, Function(dynamic selectedValue) okFunction) { void openListDialogField(String attributeName, String attributeValueId,
List<dynamic> list, Function(dynamic selectedValue) okFunction) {
ListSelectDialog dialog = ListSelectDialog( ListSelectDialog dialog = ListSelectDialog(
list: list, list: list,
attributeName: attributeName, attributeName: attributeName,

@ -35,7 +35,13 @@ class _AdmissionRequestThirdScreenState extends State<AdmissionRequestThirdScree
dynamic _selectedIcd; dynamic _selectedIcd;
dynamic _selectedDiagnosisType; dynamic _selectedDiagnosisType;
String diagnosisError = '', icdError = '', diagnosisTypeError = ''; String diagnosisError = '', icdError = '', diagnosisTypeError = '',stayLengthError = '';
@override
void initState() {
super.initState();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

@ -27,11 +27,18 @@ import '../../../../../core/model/SOAP/assessment/patch_assessment_req_model.dar
class AddAssessmentDetails extends StatefulWidget { class AddAssessmentDetails extends StatefulWidget {
final MySelectedAssessment mySelectedAssessment; final MySelectedAssessment mySelectedAssessment;
final List<MySelectedAssessment> mySelectedAssessmentList; final List<MySelectedAssessment> mySelectedAssessmentList;
final Function(MySelectedAssessment mySelectedAssessment, bool isUpdate) addSelectedAssessment; final Function(MySelectedAssessment mySelectedAssessment, bool isUpdate)
addSelectedAssessment;
final PatiantInformtion patientInfo; final PatiantInformtion patientInfo;
final bool isUpdate; final bool isUpdate;
AddAssessmentDetails({Key? key, required this.mySelectedAssessment, required this.addSelectedAssessment, required this.patientInfo, this.isUpdate = false, required this.mySelectedAssessmentList}); AddAssessmentDetails(
{Key? key,
required this.mySelectedAssessment,
required this.addSelectedAssessment,
required this.patientInfo,
this.isUpdate = false,
required this.mySelectedAssessmentList});
@override @override
_AddAssessmentDetailsState createState() => _AddAssessmentDetailsState(); _AddAssessmentDetailsState createState() => _AddAssessmentDetailsState();
@ -43,38 +50,66 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
TextEditingController conditionController = TextEditingController(); TextEditingController conditionController = TextEditingController();
TextEditingController typeController = TextEditingController(); TextEditingController typeController = TextEditingController();
TextEditingController icdNameController = TextEditingController(); TextEditingController icdNameController = TextEditingController();
TextEditingController morphologyController = TextEditingController();
String? selectedMorphologyCode = null;
GlobalKey key = new GlobalKey<AutoCompleteTextFieldState<MasterKeyModel>>(); GlobalKey key = new GlobalKey<AutoCompleteTextFieldState<MasterKeyModel>>();
bool isFormSubmitted = false; bool isFormSubmitted = false;
bool complexDiagnosis = true; bool complexDiagnosis = true;
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context); ProjectViewModel projectViewModel = Provider.of(context);
remarkController.text = widget.mySelectedAssessment.remark ?? ""; remarkController.text = widget.mySelectedAssessment.remark ?? "";
appointmentIdController.text = widget.mySelectedAssessment.appointmentId.toString(); appointmentIdController.text =
widget.mySelectedAssessment.appointmentId.toString();
if (widget.isUpdate) { if (widget.isUpdate) {
if (widget.mySelectedAssessment.selectedDiagnosisCondition != null) if (widget.mySelectedAssessment.selectedDiagnosisCondition != null)
conditionController.text = projectViewModel.isArabic ? widget.mySelectedAssessment.selectedDiagnosisCondition!.nameAr! : widget.mySelectedAssessment.selectedDiagnosisCondition!.nameEn!; conditionController.text = projectViewModel.isArabic
? widget.mySelectedAssessment.selectedDiagnosisCondition!.nameAr!
: widget.mySelectedAssessment.selectedDiagnosisCondition!.nameEn!;
if (widget.mySelectedAssessment.selectedDiagnosisType != null) if (widget.mySelectedAssessment.selectedDiagnosisType != null)
typeController.text = projectViewModel.isArabic ? widget.mySelectedAssessment.selectedDiagnosisType!.nameAr! : widget.mySelectedAssessment.selectedDiagnosisType!.nameEn!; typeController.text = projectViewModel.isArabic
if (widget.mySelectedAssessment.selectedICD != null) icdNameController.text = widget.mySelectedAssessment.selectedICD!.code; ? widget.mySelectedAssessment.selectedDiagnosisType!.nameAr!
: widget.mySelectedAssessment.selectedDiagnosisType!.nameEn!;
if (widget.mySelectedAssessment.selectedICD != null)
icdNameController.text = widget.mySelectedAssessment.selectedICD!.code;
} }
InputDecoration textFieldSelectorDecoration(String hintText, String? selectedText, bool isDropDown, {IconData? icon, String? validationError}) { InputDecoration textFieldSelectorDecoration(
String hintText, String? selectedText, bool isDropDown,
{IconData? icon, String? validationError}) {
return new InputDecoration( return new InputDecoration(
fillColor: Colors.white, fillColor: Colors.white,
contentPadding: EdgeInsets.symmetric(vertical: 15, horizontal: 10), contentPadding: EdgeInsets.symmetric(vertical: 15, horizontal: 10),
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: (validationError != null ? Colors.red.shade700 : Color(0xFFEFEFEF)), width: 2.5), borderSide: BorderSide(
color: (validationError != null
? Colors.red.shade700
: Color(0xFFEFEFEF)),
width: 2.5),
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
), ),
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: (validationError != null ? Colors.red.shade700 : Color(0xFFEFEFEF)), width: 2.5), borderSide: BorderSide(
color: (validationError != null
? Colors.red.shade700
: Color(0xFFEFEFEF)),
width: 2.5),
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
), ),
disabledBorder: OutlineInputBorder( disabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: (validationError != null ? Colors.red.shade700 : Color(0xFFEFEFEF)), width: 2.5), borderSide: BorderSide(
color: (validationError != null
? Colors.red.shade700
: Color(0xFFEFEFEF)),
width: 2.5),
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
), ),
hintText: selectedText != null ? selectedText : hintText, hintText: selectedText != null ? selectedText : hintText,
@ -95,8 +130,12 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
}, },
builder: (_, model, w) => AppScaffold( builder: (_, model, w) => AppScaffold(
baseViewModel: model, baseViewModel: model,
isLoading: model.state == ViewState.BusyLocal,
isShowAppBar: true, isShowAppBar: true,
appBar: BottomSheetTitle(title: widget.isUpdate ? TranslationBase.of(context).updateAssessmentDetails : TranslationBase.of(context).addAssessmentDetails), appBar: BottomSheetTitle(
title: widget.isUpdate
? TranslationBase.of(context).updateAssessmentDetails
: TranslationBase.of(context).addAssessmentDetails),
backgroundColor: Theme.of(context).scaffoldBackgroundColor, backgroundColor: Theme.of(context).scaffoldBackgroundColor,
body: SingleChildScrollView( body: SingleChildScrollView(
child: Center( child: Center(
@ -105,7 +144,9 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
FractionallySizedBox( FractionallySizedBox(
widthFactor: 0.9, widthFactor: 0.9,
child: Container( child: Container(
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox( SizedBox(
height: 16, height: 16,
), ),
@ -131,7 +172,8 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
child: AppTextFieldCustom( child: AppTextFieldCustom(
// height: 55.0, // height: 55.0,
height: Utils.getTextFieldHeight(), height: Utils.getTextFieldHeight(),
hintText: TranslationBase.of(context).appointmentNumber, hintText:
TranslationBase.of(context).appointmentNumber,
isTextFieldHasSuffix: false, isTextFieldHasSuffix: false,
enabled: false, enabled: false,
controller: appointmentIdController, controller: appointmentIdController,
@ -147,7 +189,8 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
onTap: model.listOfICD10 != null onTap: model.listOfICD10 != null
? () { ? () {
setState(() { setState(() {
widget.mySelectedAssessment.selectedICD = null; widget.mySelectedAssessment
.selectedICD = null;
icdNameController.text = 'null'; icdNameController.text = 'null';
}); });
} }
@ -162,12 +205,14 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
onClick: model.listOfICD10 != null onClick: model.listOfICD10 != null
? () { ? () {
setState(() { setState(() {
widget.mySelectedAssessment.selectedICD = null; widget.mySelectedAssessment
.selectedICD = null;
icdNameController.text = 'null'; icdNameController.text = 'null';
}); });
} }
: null, : null,
hintText: TranslationBase.of(context).nameOrICD, hintText:
TranslationBase.of(context).nameOrICD,
maxLines: 1, maxLines: 1,
minLines: 1, minLines: 1,
controller: icdNameController, controller: icdNameController,
@ -175,11 +220,16 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
isTextFieldHasSuffix: true, isTextFieldHasSuffix: true,
suffixIcon: IconButton( suffixIcon: IconButton(
onPressed: () { onPressed: () {
if (icdNameController.text.length <= 2) { if (icdNameController.text.length <=
DrAppToastMsg.showErrorToast("Please enter 3 or more characters"); 2) {
DrAppToastMsg.showErrorToast(
"Please enter 3 or more characters");
} else { } else {
model.listOfICD10!.clear(); model.listOfICD10!.clear();
model.callAddAssessmentLookupsServices(searchKey: icdNameController.text); model
.callAddAssessmentLookupsServices(
searchKey:
icdNameController.text);
} }
}, },
icon: Icon( icon: Icon(
@ -189,19 +239,39 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
onFieldSubmitted: () {}, onFieldSubmitted: () {},
)), )),
model.listOfICD10.length > 0 && icdNameController.text.isNotEmpty model.listOfICD10.length > 0 &&
icdNameController.text.isNotEmpty
? Container( ? Container(
color: Colors.white, color: Colors.white,
height: MediaQuery.of(context).size.height * 0.4, //height to 9% of screen height, height: MediaQuery.of(context).size.height *
0.4,
//height to 9% of screen height,
child: ListView.builder( child: ListView.builder(
shrinkWrap: true, shrinkWrap: true,
itemCount: model.listOfICD10.length, itemCount: model.listOfICD10.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
return InkWell( return InkWell(
child: ListTile(title: AppText(model.listOfICD10[index].description + " / " + model.listOfICD10[index].code.toString(), fontSize: 12.0)), child: ListTile(
title: AppText(
model.listOfICD10[index]
.description +
" / " +
model.listOfICD10[index]
.code
.toString()
.trim(),
fontSize: 12.0)),
onTap: () { onTap: () {
widget.mySelectedAssessment.selectedICD = model.listOfICD10[index]; model.getMorphologyDiagnosis(model
icdNameController.text = model.listOfICD10[index].description; .listOfICD10[index].code
.toString()
.trim());
widget.mySelectedAssessment
.selectedICD =
model.listOfICD10[index];
icdNameController.text = model
.listOfICD10[index]
.description;
model.listOfICD10.clear(); model.listOfICD10.clear();
setState(() {}); setState(() {});
}); });
@ -255,6 +325,56 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
// ), // ),
// ) // )
]), ]),
if ((model.morphologyList != null &&
model.morphologyList.isNotEmpty) ||
morphologyController.text.isNotEmpty) ...{
AppTextFieldCustom(
height: Utils.getTextFieldHeight(),
onClick: model.morphologyList != null
? () {
MasterKeyDailog dialog = MasterKeyDailog(
list: model.listOfDiagnosisCondition!,
okText: TranslationBase.of(context).ok,
selectedStringValue: widget
.mySelectedAssessment
.morphologyCode,
okFunction:
(MasterKeyModel selectedValue) {
setState(() {
widget.mySelectedAssessment
.morphologyCode =
selectedValue.code;
morphologyController.text =
selectedValue.code;
});
},
);
showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context) {
return dialog;
},
);
}
: null,
hintText: TranslationBase.of(context).morphology,
maxLines: 1,
minLines: 1,
controller: morphologyController,
isTextFieldHasSuffix: true,
enabled: false,
hasBorder: true,
validationError: isFormSubmitted &&
widget.mySelectedAssessment
.morphologyCode ==
null
? TranslationBase.of(context).emptyMessage
: null,
onChanged: (value) {},
onFieldSubmitted: () {},
),
},
if (widget.mySelectedAssessment.selectedICD != null) if (widget.mySelectedAssessment.selectedICD != null)
Column( Column(
children: [ children: [
@ -262,9 +382,12 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
height: 3, height: 3,
), ),
Container( Container(
width: MediaQuery.of(context).size.width * 0.7, width:
MediaQuery.of(context).size.width * 0.7,
child: AppText( child: AppText(
widget.mySelectedAssessment.selectedICD!.description + (' (${widget.mySelectedAssessment.selectedICD!.code} )'), widget.mySelectedAssessment.selectedICD!
.description +
(' (${widget.mySelectedAssessment.selectedICD!.code} )'),
color: Color(0xFF575757), color: Color(0xFF575757),
fontSize: 10, fontSize: 10,
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,
@ -283,12 +406,25 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
MasterKeyDailog dialog = MasterKeyDailog( MasterKeyDailog dialog = MasterKeyDailog(
list: model.listOfDiagnosisCondition!, list: model.listOfDiagnosisCondition!,
okText: TranslationBase.of(context).ok, okText: TranslationBase.of(context).ok,
selectedValue: widget.mySelectedAssessment.selectedDiagnosisCondition, selectedValue: widget.mySelectedAssessment
okFunction: (MasterKeyModel selectedValue) { .selectedDiagnosisCondition,
okFunction:
(MasterKeyModel selectedValue) {
setState(() { setState(() {
widget.mySelectedAssessment.selectedDiagnosisCondition = selectedValue; widget.mySelectedAssessment
conditionController.text = .selectedDiagnosisCondition =
projectViewModel.isArabic ? widget.mySelectedAssessment.selectedDiagnosisCondition!.nameAr! : widget.mySelectedAssessment.selectedDiagnosisCondition!.nameEn!; selectedValue;
conditionController
.text = projectViewModel
.isArabic
? widget
.mySelectedAssessment
.selectedDiagnosisCondition!
.nameAr!
: widget
.mySelectedAssessment
.selectedDiagnosisCondition!
.nameEn!;
}); });
}, },
); );
@ -308,7 +444,12 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
isTextFieldHasSuffix: true, isTextFieldHasSuffix: true,
enabled: false, enabled: false,
hasBorder: true, hasBorder: true,
validationError: isFormSubmitted && widget.mySelectedAssessment.selectedDiagnosisCondition == null ? TranslationBase.of(context).emptyMessage : null, validationError: isFormSubmitted &&
widget.mySelectedAssessment
.selectedDiagnosisCondition ==
null
? TranslationBase.of(context).emptyMessage
: null,
onChanged: (value) {}, onChanged: (value) {},
onFieldSubmitted: () {}, onFieldSubmitted: () {},
), ),
@ -322,11 +463,22 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
MasterKeyDailog dialog = MasterKeyDailog( MasterKeyDailog dialog = MasterKeyDailog(
list: model.listOfDiagnosisType!, list: model.listOfDiagnosisType!,
okText: TranslationBase.of(context).ok, okText: TranslationBase.of(context).ok,
selectedValue: widget.mySelectedAssessment.selectedDiagnosisType !=null ? widget.mySelectedAssessment.selectedDiagnosisType : null, selectedValue: widget.mySelectedAssessment
okFunction: (MasterKeyModel selectedValue) { .selectedDiagnosisType !=
null
? widget.mySelectedAssessment
.selectedDiagnosisType
: null,
okFunction:
(MasterKeyModel selectedValue) {
setState(() { setState(() {
widget.mySelectedAssessment.selectedDiagnosisType = selectedValue; widget.mySelectedAssessment
typeController.text = projectViewModel.isArabic ? selectedValue.nameAr! : selectedValue.nameEn!; .selectedDiagnosisType =
selectedValue;
typeController.text =
projectViewModel.isArabic
? selectedValue.nameAr!
: selectedValue.nameEn!;
}); });
}, },
); );
@ -346,7 +498,12 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
isTextFieldHasSuffix: true, isTextFieldHasSuffix: true,
controller: typeController, controller: typeController,
hasBorder: true, hasBorder: true,
validationError: isFormSubmitted && widget.mySelectedAssessment.selectedDiagnosisType == null ? TranslationBase.of(context).emptyMessage : null, validationError: isFormSubmitted &&
widget.mySelectedAssessment
.selectedDiagnosisType ==
null
? TranslationBase.of(context).emptyMessage
: null,
onChanged: (value) {}, onChanged: (value) {},
onFieldSubmitted: () {}, onFieldSubmitted: () {},
), ),
@ -362,7 +519,8 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
inputType: TextInputType.multiline, inputType: TextInputType.multiline,
controller: remarkController, controller: remarkController,
onChanged: (value) { onChanged: (value) {
widget.mySelectedAssessment.remark = remarkController.text; widget.mySelectedAssessment.remark =
remarkController.text;
}, },
onFieldSubmitted: () {}, onFieldSubmitted: () {},
), ),
@ -386,17 +544,26 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
height: 0, height: 0,
) )
: CustomBottomSheetContainer( : CustomBottomSheetContainer(
label: (widget.isUpdate ? TranslationBase.of(context).updateAssessmentDetails : TranslationBase.of(context).addAssessmentDetails), label: (widget.isUpdate
? TranslationBase.of(context).updateAssessmentDetails
: TranslationBase.of(context).addAssessmentDetails),
onTap: () async { onTap: () async {
setState(() { setState(() {
isFormSubmitted = true; isFormSubmitted = true;
}); });
widget.mySelectedAssessment.remark = remarkController.text; widget.mySelectedAssessment.remark = remarkController.text;
widget.mySelectedAssessment.appointmentId = int.parse(appointmentIdController.text); widget.mySelectedAssessment.appointmentId =
if (widget.mySelectedAssessment.selectedDiagnosisCondition != null && int.parse(appointmentIdController.text);
widget.mySelectedAssessment.selectedDiagnosisType != null && if (widget.mySelectedAssessment
.selectedDiagnosisCondition !=
null &&
widget.mySelectedAssessment.selectedDiagnosisType !=
null &&
widget.mySelectedAssessment.selectedICD != null) { widget.mySelectedAssessment.selectedICD != null) {
await submitAssessment(isUpdate: widget.isUpdate, model: model, mySelectedAssessment: widget.mySelectedAssessment); await submitAssessment(
isUpdate: widget.isUpdate,
model: model,
mySelectedAssessment: widget.mySelectedAssessment);
} }
}, },
), ),
@ -405,12 +572,16 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
); );
} }
submitAssessment({SOAPViewModel? model, MySelectedAssessment? mySelectedAssessment, bool isUpdate = false}) async { submitAssessment(
{SOAPViewModel? model,
MySelectedAssessment? mySelectedAssessment,
bool isUpdate = false}) async {
Map<String, dynamic> profile = await sharedPref.getObj(DOCTOR_PROFILE); Map<String, dynamic> profile = await sharedPref.getObj(DOCTOR_PROFILE);
DoctorProfileModel doctorProfile = DoctorProfileModel.fromJson(profile); DoctorProfileModel doctorProfile = DoctorProfileModel.fromJson(profile);
GifLoaderDialogUtils.showMyDialog(context); GifLoaderDialogUtils.showMyDialog(context);
if (isUpdate) { if (isUpdate) {
PostAssessmentRequestUpdateModel patchAssessmentReqModel = PostAssessmentRequestUpdateModel( PostAssessmentRequestUpdateModel patchAssessmentReqModel =
PostAssessmentRequestUpdateModel(
patientMRN: widget.patientInfo.patientMRN, patientMRN: widget.patientInfo.patientMRN,
episodeId: widget.patientInfo.episodeNo, episodeId: widget.patientInfo.episodeNo,
appointmentNo: widget.patientInfo.appointmentNo, appointmentNo: widget.patientInfo.appointmentNo,
@ -420,29 +591,35 @@ class _AddAssessmentDetailsState extends State<AddAssessmentDetails> {
new IcdCodeDetailsUpdate( new IcdCodeDetailsUpdate(
remarks: mySelectedAssessment!.remark, remarks: mySelectedAssessment!.remark,
complexDiagnosis: complexDiagnosis, complexDiagnosis: complexDiagnosis,
conditionId: mySelectedAssessment!.selectedDiagnosisCondition!.id, conditionId:
mySelectedAssessment!.selectedDiagnosisCondition!.id,
prevIcdCode10ID: mySelectedAssessment.icdCode10ID, prevIcdCode10ID: mySelectedAssessment.icdCode10ID,
diagnosisTypeId: mySelectedAssessment.selectedDiagnosisType!.id, diagnosisTypeId: mySelectedAssessment.selectedDiagnosisType!.id,
icdcode10Id: mySelectedAssessment.selectedICD!.code) icdcode10Id: mySelectedAssessment.selectedICD!.code,
//todo will update the morphology here
)
]); ]);
await model?.patchAssessment(patchAssessmentReqModel); await model?.patchAssessment(patchAssessmentReqModel);
} else { } else {
// Map profile = await sharedPref.getObj(DOCTOR_PROFILE); // Map profile = await sharedPref.getObj(DOCTOR_PROFILE);
// DoctorProfileModel doctorProfile = DoctorProfileModel.fromJson(profile); // DoctorProfileModel doctorProfile = DoctorProfileModel.fromJson(profile);
PostAssessmentRequestModel postAssessmentRequestModel = new PostAssessmentRequestModel( PostAssessmentRequestModel postAssessmentRequestModel =
PostAssessmentRequestModel(
patientMRN: widget.patientInfo.patientMRN, patientMRN: widget.patientInfo.patientMRN,
episodeId: widget.patientInfo.episodeNo, episodeId: widget.patientInfo.episodeNo,
appointmentNo: widget.patientInfo.appointmentNo, appointmentNo: widget.patientInfo.appointmentNo,
createdByName: doctorProfile.doctorName, createdByName: doctorProfile.doctorName,
createdBy: doctorProfile.doctorID, createdBy: doctorProfile.doctorID,
icdCodeDetails: [ icdCodeDetails: [
new IcdCodeDetails( IcdCodeDetails(
remarks: mySelectedAssessment!.remark, remarks: mySelectedAssessment!.remark,
complexDiagnosis: complexDiagnosis, complexDiagnosis: complexDiagnosis,
conditionId: mySelectedAssessment!.selectedDiagnosisCondition!.id, conditionId: mySelectedAssessment!.selectedDiagnosisCondition!.id,
diagnosisTypeId: mySelectedAssessment.selectedDiagnosisType!.id, diagnosisTypeId: mySelectedAssessment.selectedDiagnosisType!.id,
icdcode10Id: mySelectedAssessment.selectedICD!.code) icdcode10Id: mySelectedAssessment.selectedICD!.code,
morphologyCode: mySelectedAssessment.morphologyCode,
)
]); ]);
await model?.postAssessment(postAssessmentRequestModel); await model?.postAssessment(postAssessmentRequestModel);
} }

@ -30,16 +30,23 @@ class UpdateAssessmentPage extends StatefulWidget {
final Function changeLoadingState; final Function changeLoadingState;
final int currentIndex; final int currentIndex;
UpdateAssessmentPage({Key? key, required this.changePageViewIndex, required this.patientInfo, required this.changeLoadingState, required this.currentIndex}); UpdateAssessmentPage(
{Key? key,
required this.changePageViewIndex,
required this.patientInfo,
required this.changeLoadingState,
required this.currentIndex});
@override @override
_UpdateAssessmentPageState createState() => _UpdateAssessmentPageState(); _UpdateAssessmentPageState createState() => _UpdateAssessmentPageState();
} }
class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> implements AssessmentCallBack { class _UpdateAssessmentPageState extends State<UpdateAssessmentPage>
implements AssessmentCallBack {
bool isAssessmentExpand = false; bool isAssessmentExpand = false;
List<MySelectedAssessment> mySelectedAssessmentList = []; List<MySelectedAssessment> mySelectedAssessmentList = [];
bool isPrescriptionOrder =false; bool isPrescriptionOrder = false;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context); ProjectViewModel projectViewModel = Provider.of(context);
@ -65,8 +72,11 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> implements
masterKeys: MasterKeysService.DiagnosisCondition, masterKeys: MasterKeysService.DiagnosisCondition,
id: element.conditionID!, id: element.conditionID!,
); );
if (diagnosisCondition != null && diagnosisType != null && diagnosisCondition != null) { if (diagnosisCondition != null &&
MySelectedAssessment temMySelectedAssessment = SoapUtils.generateMySelectedAssessment( diagnosisType != null &&
diagnosisCondition != null) {
MySelectedAssessment temMySelectedAssessment =
SoapUtils.generateMySelectedAssessment(
appointmentNo: element.appointmentNo, appointmentNo: element.appointmentNo,
remark: element.remarks, remark: element.remarks,
diagnosisType: diagnosisType, diagnosisType: diagnosisType,
@ -76,7 +86,8 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> implements
doctorName: element.doctorName, doctorName: element.doctorName,
createdBy: element.createdBy, createdBy: element.createdBy,
createdOn: element.createdOn, createdOn: element.createdOn,
icdCode10ID: element.icdCode10ID); icdCode10ID: element.icdCode10ID,
morphology: element.morphologyCode);
mySelectedAssessmentList.add(temMySelectedAssessment); mySelectedAssessmentList.add(temMySelectedAssessment);
} }
@ -117,18 +128,22 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> implements
Column( Column(
children: [ children: [
SOAPOpenItems( SOAPOpenItems(
label: "${TranslationBase.of(context).addAssessment}", label:
"${TranslationBase.of(context).addAssessment}",
onTap: () { onTap: () {
openAssessmentDialog(context, isUpdate: false, model: model); openAssessmentDialog(context,
isUpdate: false, model: model);
}, },
), ),
SizedBox( SizedBox(
height: 20, height: 20,
), ),
Column( Column(
children: mySelectedAssessmentList.map((assessment) { children:
mySelectedAssessmentList.map((assessment) {
return Container( return Container(
margin: EdgeInsets.only(left: 5, right: 5, top: 15, bottom: 15), margin: EdgeInsets.only(
left: 5, right: 5, top: 15, bottom: 15),
child: Column( child: Column(
children: [ children: [
Row( Row(
@ -136,7 +151,9 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> implements
RichText( RichText(
text: new TextSpan( text: new TextSpan(
style: new TextStyle( style: new TextStyle(
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3.6, fontSize: SizeConfig
.getTextMultiplierBasedOnWidth() *
3.6,
color: Color(0xFF2E303A), color: Color(0xFF2E303A),
fontFamily: 'Poppins', fontFamily: 'Poppins',
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
@ -145,53 +162,102 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> implements
new TextSpan( new TextSpan(
text: "ICD : ".toUpperCase(), text: "ICD : ".toUpperCase(),
), ),
new TextSpan(text: (assessment != null && assessment.selectedICD != null) ? assessment.selectedICD!.code.trim().toUpperCase() ?? "" : ""), new TextSpan(
text: (assessment != null &&
assessment
.selectedICD !=
null)
? assessment
.selectedICD!
.code
.trim()
.toUpperCase() ??
""
: ""),
], ],
), ),
), ),
Column( Column(
crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment:
CrossAxisAlignment.end,
children: [ children: [
AppText( AppText(
assessment.createdOn != null assessment.createdOn != null
? AppDateUtils.getDayMonthYearDateFormatted(DateTime.parse(assessment.createdOn!), isMonthShort: true) ? AppDateUtils
: AppDateUtils.getDayMonthYearDateFormatted(DateTime.now()), .getDayMonthYearDateFormatted(
DateTime.parse(
assessment
.createdOn!),
isMonthShort: true)
: AppDateUtils
.getDayMonthYearDateFormatted(
DateTime.now()),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3.6, fontSize: SizeConfig
.getTextMultiplierBasedOnWidth() *
3.6,
), ),
AppText( AppText(
assessment.createdOn != null ? AppDateUtils.getHour(DateTime.parse(assessment.createdOn!)) : AppDateUtils.getHour(DateTime.now()), assessment.createdOn != null
? AppDateUtils.getHour(
DateTime.parse(
assessment
.createdOn!))
: AppDateUtils.getHour(
DateTime.now()),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
color: Color(0xFF575757), color: Color(0xFF575757),
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3.6, fontSize: SizeConfig
.getTextMultiplierBasedOnWidth() *
3.6,
), ),
], ],
), ),
], ],
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment:
crossAxisAlignment: CrossAxisAlignment.start, MainAxisAlignment.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.start,
), ),
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment:
crossAxisAlignment: CrossAxisAlignment.start, MainAxisAlignment.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [ children: [
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment:
CrossAxisAlignment.start,
children: [ children: [
Container( Container(
width: MediaQuery.of(context).size.width * 0.50, width: MediaQuery.of(context)
.size
.width *
0.50,
child: RichText( child: RichText(
text: new TextSpan( text: new TextSpan(
style: new TextStyle( style: new TextStyle(
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 4.3, fontSize: SizeConfig
.getTextMultiplierBasedOnWidth() *
4.3,
color: Color(0xFF2E303A), color: Color(0xFF2E303A),
fontFamily: 'Poppins', fontFamily: 'Poppins',
fontWeight: FontWeight.w600, fontWeight:
FontWeight.w600,
letterSpacing: -0.64, letterSpacing: -0.64,
), ),
children: <TextSpan>[ children: <TextSpan>[
new TextSpan( new TextSpan(
text: (assessment != null && assessment.selectedICD != null) ? assessment.selectedICD!.description.toString() : "", text: (assessment !=
null &&
assessment
.selectedICD !=
null)
? assessment
.selectedICD!
.description
.toString()
: "",
// text: assessment.selectedICD.description.toString(), // text: assessment.selectedICD.description.toString(),
), ),
], ],
@ -201,26 +267,39 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> implements
RichText( RichText(
text: new TextSpan( text: new TextSpan(
style: new TextStyle( style: new TextStyle(
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3.5, fontSize: SizeConfig
.getTextMultiplierBasedOnWidth() *
3.5,
color: Color(0xFF2E303A), color: Color(0xFF2E303A),
fontFamily: 'Poppins', fontFamily: 'Poppins',
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
children: <TextSpan>[ children: <TextSpan>[
new TextSpan( new TextSpan(
text: TranslationBase.of(context).appointmentNo, text: TranslationBase.of(
context)
.appointmentNo,
style: new TextStyle( style: new TextStyle(
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3, fontSize: SizeConfig
.getTextMultiplierBasedOnWidth() *
3,
letterSpacing: -0.4, letterSpacing: -0.4,
color: Color(0xFF575757), color:
Color(0xFF575757),
), ),
), ),
new TextSpan( new TextSpan(
text: assessment.appointmentId.toString() ?? "", text: assessment
.appointmentId
.toString() ??
"",
style: new TextStyle( style: new TextStyle(
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3.6, fontSize: SizeConfig
.getTextMultiplierBasedOnWidth() *
3.6,
letterSpacing: -0.48, letterSpacing: -0.48,
color: Color(0xFF2B353E), color:
Color(0xFF2B353E),
), ),
), ),
], ],
@ -229,21 +308,41 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> implements
RichText( RichText(
text: new TextSpan( text: new TextSpan(
style: new TextStyle( style: new TextStyle(
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3, color: Color(0xFF2E303A), fontFamily: 'Poppins', fontWeight: FontWeight.w600), fontSize: SizeConfig
.getTextMultiplierBasedOnWidth() *
3,
color: Color(0xFF2E303A),
fontFamily: 'Poppins',
fontWeight:
FontWeight.w600),
children: <TextSpan>[ children: <TextSpan>[
new TextSpan( new TextSpan(
text: TranslationBase.of(context).condition + " : ", text: TranslationBase.of(
context)
.condition +
" : ",
style: new TextStyle( style: new TextStyle(
letterSpacing: -0.4, letterSpacing: -0.4,
color: Color(0xFF575757), color:
Color(0xFF575757),
), ),
), ),
new TextSpan( new TextSpan(
text: projectViewModel.isArabic ? assessment.selectedDiagnosisCondition!.nameAr : assessment.selectedDiagnosisCondition!.nameEn, text: projectViewModel
.isArabic
? assessment
.selectedDiagnosisCondition!
.nameAr
: assessment
.selectedDiagnosisCondition!
.nameEn,
style: new TextStyle( style: new TextStyle(
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3.6, fontSize: SizeConfig
.getTextMultiplierBasedOnWidth() *
3.6,
letterSpacing: -0.48, letterSpacing: -0.48,
color: Color(0xFF2B353E), color:
Color(0xFF2B353E),
), ),
), ),
], ],
@ -252,21 +351,75 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> implements
RichText( RichText(
text: new TextSpan( text: new TextSpan(
style: new TextStyle( style: new TextStyle(
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3, color: Color(0xFF2E303A), fontFamily: 'Poppins', fontWeight: FontWeight.w600), fontSize: SizeConfig
.getTextMultiplierBasedOnWidth() *
3,
color: Color(0xFF2E303A),
fontFamily: 'Poppins',
fontWeight:
FontWeight.w600),
children: <TextSpan>[ children: <TextSpan>[
new TextSpan( new TextSpan(
text: TranslationBase.of(context).dType + ' : ', text: TranslationBase.of(
context).morphology,
style: new TextStyle( style: new TextStyle(
letterSpacing: -0.4, letterSpacing: -0.4,
color: Color(0xFF575757), color:
Color(0xFF575757),
),
),
new TextSpan(
text: assessment.morphologyCode,
style: new TextStyle(
fontSize: SizeConfig
.getTextMultiplierBasedOnWidth() *
3.6,
letterSpacing: -0.48,
color:
Color(0xFF2B353E),
),
),
],
), ),
), ),
RichText(
text: new TextSpan(
style: new TextStyle(
fontSize: SizeConfig
.getTextMultiplierBasedOnWidth() *
3,
color: Color(0xFF2E303A),
fontFamily: 'Poppins',
fontWeight:
FontWeight.w600),
children: <TextSpan>[
new TextSpan( new TextSpan(
text: projectViewModel.isArabic ? assessment.selectedDiagnosisType!.nameAr : assessment.selectedDiagnosisType!.nameEn, text: TranslationBase.of(
context)
.dType +
' : ',
style: new TextStyle( style: new TextStyle(
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3.6, letterSpacing: -0.4,
color:
Color(0xFF575757),
),
),
new TextSpan(
text: projectViewModel
.isArabic
? assessment
.selectedDiagnosisType!
.nameAr
: assessment
.selectedDiagnosisType!
.nameEn,
style: new TextStyle(
fontSize: SizeConfig
.getTextMultiplierBasedOnWidth() *
3.6,
letterSpacing: -0.48, letterSpacing: -0.48,
color: Color(0xFF2B353E), color:
Color(0xFF2B353E),
), ),
), ),
], ],
@ -276,22 +429,41 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> implements
RichText( RichText(
text: new TextSpan( text: new TextSpan(
style: new TextStyle( style: new TextStyle(
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3.6, color: Color(0xFF2E303A), fontFamily: 'Poppins', fontWeight: FontWeight.w600), fontSize: SizeConfig
.getTextMultiplierBasedOnWidth() *
3.6,
color:
Color(0xFF2E303A),
fontFamily: 'Poppins',
fontWeight:
FontWeight.w600),
children: <TextSpan>[ children: <TextSpan>[
new TextSpan( new TextSpan(
text: TranslationBase.of(context).doctor + ' : ', text:
TranslationBase.of(
context)
.doctor +
' : ',
style: new TextStyle( style: new TextStyle(
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3, fontSize: SizeConfig
.getTextMultiplierBasedOnWidth() *
3,
letterSpacing: -0.4, letterSpacing: -0.4,
color: Color(0xFF575757), color:
Color(0xFF575757),
), ),
), ),
new TextSpan( new TextSpan(
text: assessment.doctorName ?? '', text: assessment
.doctorName ??
'',
style: new TextStyle( style: new TextStyle(
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3.6, fontSize: SizeConfig
.getTextMultiplierBasedOnWidth() *
3.6,
letterSpacing: -0.48, letterSpacing: -0.48,
color: Color(0xFF2B353E), color:
Color(0xFF2B353E),
), ),
), ),
], ],
@ -301,43 +473,80 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> implements
height: 6, height: 6,
), ),
Row( Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment:
crossAxisAlignment: CrossAxisAlignment.start, MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [ children: [
SizedBox( SizedBox(
height: 6, height: 6,
), ),
AppText((assessment.remark != null && assessment.remark != '') ? TranslationBase.of(context).remarks + " : " : '', AppText(
fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 3, color: Color(0xFF2E303A), fontFamily: 'Poppins', fontWeight: FontWeight.w600), (assessment.remark !=
null &&
assessment
.remark !=
'')
? TranslationBase.of(
context)
.remarks +
" : "
: '',
fontSize: SizeConfig
.getTextMultiplierBasedOnWidth() *
3,
color: Color(0xFF2E303A),
fontFamily: 'Poppins',
fontWeight:
FontWeight.w600),
RemarkText( RemarkText(
remark: assessment.remark ?? "", remark:
assessment.remark ?? "",
), ),
], ],
), ),
], ],
), ),
Column( Column(
crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment:
CrossAxisAlignment.end,
children: [ children: [
SizedBox( SizedBox(
height: MediaQuery.of(context).size.height * 0.05, height: MediaQuery.of(context)
.size
.height *
0.05,
), ),
InkWell( InkWell(
onTap: () { onTap: () {
if(model.isPrescriptionOrder && assessment.selectedDiagnosisType!.id ==2) { if (model
Utils.showErrorToast(TranslationBase.of(context).principalDiagnosisCannot); .isPrescriptionOrder &&
}else{ assessment
.selectedDiagnosisType!
.id ==
2) {
Utils.showErrorToast(
TranslationBase.of(
context)
.principalDiagnosisCannot);
} else {
openAssessmentDialog( openAssessmentDialog(
context, isUpdate: true, context,
isUpdate: true,
assessment: assessment, assessment: assessment,
model: model); model: model);
} }
}, },
child: Icon( child: Icon(
DoctorApp.edit, DoctorApp.edit,
size: 18, size: 18,
color: model.isPrescriptionOrder && assessment.selectedDiagnosisType!.id ==2 ? Colors.grey : Colors.black , color: model.isPrescriptionOrder &&
assessment
.selectedDiagnosisType!
.id ==
2
? Colors.grey
: Colors.black,
), ),
) )
], ],
@ -367,9 +576,13 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> implements
); );
} }
openAssessmentDialog(BuildContext context, {MySelectedAssessment? assessment, bool isUpdate = false, required SOAPViewModel model}) { openAssessmentDialog(BuildContext context,
{MySelectedAssessment? assessment,
bool isUpdate = false,
required SOAPViewModel model}) {
if (assessment == null) { if (assessment == null) {
assessment = SoapUtils.generateMySelectedAssessment(remark: '', appointmentNo: widget.patientInfo.appointmentNo); assessment = SoapUtils.generateMySelectedAssessment(
remark: '', appointmentNo: widget.patientInfo.appointmentNo);
} }
showModalBottomSheet( showModalBottomSheet(
backgroundColor: Colors.white, backgroundColor: Colors.white,
@ -381,9 +594,11 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> implements
patientInfo: widget.patientInfo, patientInfo: widget.patientInfo,
isUpdate: isUpdate, isUpdate: isUpdate,
mySelectedAssessmentList: mySelectedAssessmentList, mySelectedAssessmentList: mySelectedAssessmentList,
addSelectedAssessment: (MySelectedAssessment mySelectedAssessment, bool isUpdate) async { addSelectedAssessment: (MySelectedAssessment mySelectedAssessment,
bool isUpdate) async {
setState(() { setState(() {
if (!isUpdate) mySelectedAssessmentList.add(mySelectedAssessment); if (!isUpdate)
mySelectedAssessmentList.add(mySelectedAssessment);
}); });
}); });
}); });
@ -393,17 +608,24 @@ class _UpdateAssessmentPageState extends State<UpdateAssessmentPage> implements
nextFunction(model) { nextFunction(model) {
if (mySelectedAssessmentList.isEmpty) { if (mySelectedAssessmentList.isEmpty) {
Utils.showErrorToast(TranslationBase.of(context).assessmentErrorMsg); Utils.showErrorToast(TranslationBase.of(context).assessmentErrorMsg);
} else if(!checkPrimaryDiagnosis()) { } else if (!checkPrimaryDiagnosis()) {
Utils.showErrorToast(TranslationBase.of(context).onePrimaryDiagnosis); Utils.showErrorToast(TranslationBase.of(context).onePrimaryDiagnosis);
}else{ } else {
widget.changeLoadingState(true); widget.changeLoadingState(true);
widget.changePageViewIndex(3); widget.changePageViewIndex(3);
} }
} }
bool checkPrimaryDiagnosis(){
ProjectViewModel projectViewModel = Provider.of<ProjectViewModel>(context, listen: false); bool checkPrimaryDiagnosis() {
bool isVidaPlus = Utils.isVidaPlusProject(projectViewModel, widget.patientInfo.projectId!); ProjectViewModel projectViewModel =
List<MySelectedAssessment> type = mySelectedAssessmentList.where((element) => (element.selectedDiagnosisType!.id==2 && isVidaPlus ==false) || (element.selectedDiagnosisType!.code=='3' && isVidaPlus==true)).toList(); Provider.of<ProjectViewModel>(context, listen: false);
bool isVidaPlus = Utils.isVidaPlusProject(
projectViewModel, widget.patientInfo.projectId!);
List<MySelectedAssessment> type = mySelectedAssessmentList
.where((element) =>
(element.selectedDiagnosisType!.id == 2 && isVidaPlus == false) ||
(element.selectedDiagnosisType!.code == '3' && isVidaPlus == true))
.toList();
return type.isEmpty ? false : true; return type.isEmpty ? false : true;
} }
} }

@ -32,7 +32,7 @@ class SoapUtils {
return mySelectedExamination; return mySelectedExamination;
} }
static MySelectedAssessment generateMySelectedAssessment({appointmentNo, remark, diagnosisType, diagnosisCondition, selectedICD, doctorID, doctorName, createdBy, createdOn, icdCode10ID}) { static MySelectedAssessment generateMySelectedAssessment({appointmentNo, remark, diagnosisType, diagnosisCondition, selectedICD, doctorID, doctorName, createdBy, createdOn, icdCode10ID, morphology}) {
MySelectedAssessment mySelectedAssessment = MySelectedAssessment( MySelectedAssessment mySelectedAssessment = MySelectedAssessment(
appointmentId: appointmentNo, appointmentId: appointmentNo,
remark: remark, remark: remark,
@ -43,7 +43,9 @@ class SoapUtils {
doctorName: doctorName, doctorName: doctorName,
createdBy: createdBy, createdBy: createdBy,
createdOn: createdOn, createdOn: createdOn,
icdCode10ID: icdCode10ID); icdCode10ID: icdCode10ID,
morphologyCode: morphology
);
return mySelectedAssessment; return mySelectedAssessment;
} }
} }

@ -1956,7 +1956,8 @@ class TranslationBase {
String get progressNoteCanNotBeEmpty => localizedValues['progressNoteCanNotBeEmpty']![locale.languageCode]!; String get progressNoteCanNotBeEmpty => localizedValues['progressNoteCanNotBeEmpty']![locale.languageCode]!;
String get diagnosisAlreadyResolved => localizedValues['diagnosisAlreadyResolved']![locale.languageCode]!; String get diagnosisAlreadyResolved => localizedValues['diagnosisAlreadyResolved']![locale.languageCode]!;
String get diagnosisAlreadyDeleted => localizedValues['diagnosisAlreadyDeleted']![locale.languageCode]!; String get diagnosisAlreadyDeleted => localizedValues['diagnosisAlreadyDeleted']![locale.languageCode]!;
String get morphology => localizedValues['morphology']![locale.languageCode]!;
String get intendedLengthOfStay => localizedValues['intendedLengthOfStay']![locale.languageCode]!;
} }
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> { class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

@ -13,9 +13,10 @@ class MasterKeyDailog extends StatefulWidget {
final okText; final okText;
final Function(MasterKeyModel) okFunction; final Function(MasterKeyModel) okFunction;
MasterKeyModel? selectedValue; MasterKeyModel? selectedValue;
String? selectedStringValue;
final bool isICD; final bool isICD;
MasterKeyDailog({required this.list, required this.okText, required this.okFunction, this.selectedValue, this.isICD = false}); MasterKeyDailog({required this.list, required this.okText, required this.okFunction, this.selectedValue, this.isICD = false, this.selectedStringValue});
@override @override
_MasterKeyDailogState createState() => _MasterKeyDailogState(); _MasterKeyDailogState createState() => _MasterKeyDailogState();
@ -81,7 +82,7 @@ class _MasterKeyDailogState extends State<MasterKeyDailog> {
groupValue: widget.isICD ? widget.selectedValue!.code.toString() : widget.selectedValue!.id.toString(), groupValue: widget.isICD ? widget.selectedValue!.code.toString() : widget.selectedValue!.id.toString(),
value: widget.isICD ? widget.selectedValue!.code.toString() : item.id.toString(), value: widget.isICD ? widget.selectedValue!.code.toString() : item.id.toString(),
activeColor: Colors.blue.shade700, activeColor: Colors.blue.shade700,
selected: widget.isICD ? item.code.toString() == widget.selectedValue!.code.toString() : item.id.toString() == widget.selectedValue!.id.toString(), selected: widget.isICD ? item.code.toString() == widget.selectedValue!.code.toString() : (item.id.toString() == widget.selectedValue!.id.toString() || item.code.toString() == widget.selectedStringValue ),
onChanged: (val) { onChanged: (val) {
setState(() { setState(() {
widget.selectedValue = item; widget.selectedValue = item;

Loading…
Cancel
Save