Compare commits

...

3 Commits

Author SHA1 Message Date
Sultan Khan 6c350960fd bug fixes 1 month ago
Sultan Khan bff09259d5 insurance approval issue fixed 1 month ago
Sultan Khan 7214dcaba7 search feature module improved. 1 month ago

@ -413,7 +413,7 @@ const TRANSACTION_NO = 0;
const LANGUAGE_ID = 2;
const STAMP = '2020-04-27T12:17:17.721Z';
const IP_ADDRESS = '9.9.9.9';
const VERSION_ID = 10.2;
const VERSION_ID = 20.5;
const CHANNEL = 9;
const SESSION_ID = 'BlUSkYymTt';
const IS_LOGIN_FOR_DOCTOR_APP = true;

@ -214,11 +214,11 @@ const Map<String, Map<String, String>> localizedValues = {
"en": "Search InsuranceApprovals",
"ar": "بحث عن موافقات التأمين"
},
"status": {"en": "STATUS", "ar": "الحالة"},
"status": {"en": "Status", "ar": "الحالة"},
"expiryDate": {"en": "EXPIRY DATE", "ar": "تاريخ الانتهاء"},
"producerName": {"en": "PRODUCER NAME", "ar": "اسم المنتج"},
"receiptOn": {"en": "RECEIPT ON", "ar": "تاريخ الاستلام"},
"approvalNo": {"en": "Approval No:", "ar": "رقم الموافقة:"},
"approvalNo": {"en": "Approval No", "ar": "رقم الموافقة:"},
"doctor": {"en": "Doctor", "ar": "الدكتور"},
"ext": {"en": "Ext#", "ar": "رقم التحويلة"},
"veryUrgent": {"en": "Very Urgent", "ar": "عاجل جدا"},
@ -683,7 +683,7 @@ const Map<String, Map<String, String>> localizedValues = {
"progressNoteSOAP": {"en": "Progress Note", "ar": "ملاحظة التقدم"},
"addProgressNote": {"en": "Add Progress Note", "ar": "أضف ملاحظة التقدم"},
"createdBy": {"en": "Created By :", "ar": "أضيفت عن طريق: "},
"createdBy": {"en": "Created By : ", "ar": "أضيفت عن طريق: "},
"createdOn": {"en": "Created On :", "ar": "تم إنشاؤه في: "},
"riskScore": {"en": "Risk Score :", "ar": "درجة المخاطر"},
"editedBy": {"en": "Edited By :", "ar": "عدلت من : "},
@ -822,9 +822,9 @@ const Map<String, Map<String, String>> localizedValues = {
"en": "Total approval unused",
"ar": "اجمالي الموافقات الغير مستخدمة"
},
"procedureStatus": {"en": "Procedure Status: ", "ar": "حالة الاجراء"},
"unusedCount": {"en": "Unused Count: ", "ar": "غير مستخدم: "},
"companyName": {"en": "Company Name ", "ar": "اسم الشركة: "},
"procedureStatus": {"en": "Procedure Status: ", "ar": "حالة الاجراء"},
"unusedCount": {"en": "Unused Count", "ar": "غير مستخدم: "},
"companyName": {"en": "Company Name", "ar": "اسم الشركة: "},
"procedureName": {"en": "Procedure Name", "ar": "اسم الاجراء"},
"usageStatus": {"en": "Usage Status", "ar": "حالة الاستخدام"},
"prescriptions": {"en": "Prescriptions", "ar": "الوصفات الطبية"},

@ -75,7 +75,7 @@ class GetDiagnosisForInPatientResponseModel {
createdOn = json['createdOn'];
editedBy = json['EditedBy'];
editedOn = json['EditedOn'];
createdByName = json['createdBy'];
createdByName =json['createdByName'] == null ? json['createdBy'] : json['createdByName'] ;
editedByName = json['EditedByName'];
}
}

@ -91,7 +91,7 @@ class InsuranceApprovalModel {
rceiptOn = json['ReceiptOn'];
expiryDate = json['ExpiryDate'];
//companyName = json['CompanyName'];
unUsedCount = json['TotaUnUsedCount'];
unUsedCount = json['UnUsedCount']; //change this as requested backend team since they are using unused count for patient app so changed this from total count to unusedcount
approvalStatusDescption = json['ApprovalStatusDescption'];
approvalNo = json['ApprovalNo'];
patientDescription = json['IsInOutPatientDescription'];
@ -143,7 +143,7 @@ class InsuranceApprovalModel {
data['TokenID'] = this.tokenID;
data['DoctorImageURL'] = this.doctorImage;
data['ProjectName'] = this.projectName;
data['UnUsedCount'] = this.unUsedCount;
data['PatientTypeID'] = this.patientTypeID;
data['PatientType'] = this.patientType;
if (appointmentNo == null) {

@ -494,9 +494,10 @@ class LstProcedure {
String? projectName;
String? setupID;
String? dispalyName;
String? cptCode;
LstProcedure(
{this.appointmentNo, this.episodeID, this.orderDate, this.patientID, this.patientType, this.procName, this.procedureId, this.projectID, this.projectName, this.setupID, this.dispalyName});
{this.appointmentNo, this.episodeID, this.orderDate, this.patientID, this.patientType, this.procName, this.procedureId, this.projectID, this.projectName, this.setupID, this.dispalyName, this.cptCode});
LstProcedure.fromJson(Map<String, dynamic> json) {
appointmentNo = json['AppointmentNo'];
@ -510,6 +511,7 @@ class LstProcedure {
projectName = json['ProjectName'];
setupID = json['SetupID'];
dispalyName = json['dispalyName'];
cptCode = json['CptCode'];
}
Map<String, dynamic> toJson() {
@ -525,6 +527,7 @@ class LstProcedure {
data['ProjectName'] = this.projectName;
data['SetupID'] = this.setupID;
data['dispalyName'] = this.dispalyName;
data['CptCode'] = this.dispalyName;
return data;
}
}

@ -4,6 +4,7 @@ import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/utils/date-utils.dart';
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
import 'package:doctor_app_flutter/utils/utils.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/app_bar/patient-profile-app-bar.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
@ -414,11 +415,21 @@ class _MedicalFileDetailsState extends State<MedicalFileDetails> {
AppText(
'CPT Code : ',
),
if(Utils.isVidaPlusProject(
projectViewModel,
model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstProcedure![index].projectID!,
))
AppText(
model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstProcedure![index].patientID
model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstProcedure![index].cptCode
.toString(),
fontWeight: FontWeight.w700,
),
)
else
AppText(
model.medicalFileList[0].entityList![0].timelines![encounterNumber!].timeLineEvents![0].consulations![0].lstProcedure![index].patientID
.toString(),
fontWeight: FontWeight.w700,
)
],
),
SizedBox(

@ -131,7 +131,7 @@ class _ProgressNoteState extends State<DiagnosisScreen> {
index]
.createdByName
.toString() ??
'',
'' ,
fontWeight:
FontWeight.w600,
fontSize: 12,

@ -114,7 +114,7 @@ class _ProgressNoteState extends State<OperationReportScreen> {
children: [
AppText(
model.reservationList[index].createdOn != null
? AppDateUtils.getDayMonthYearDateFormatted(AppDateUtils.getDateTimeFromServerFormat(model.reservationList[index].createdOn!),
? AppDateUtils.getDayMonthYearDateFormatted(AppDateUtils.getDateTimeFromServerFormat(model.reservationList[index].oTReservationDate!),
isArabic: projectViewModel.isArabic, isMonthShort: true)
: AppDateUtils.getDayMonthYearDateFormatted(DateTime.now(), isArabic: projectViewModel.isArabic),
fontWeight: FontWeight.w600,
@ -122,7 +122,7 @@ class _ProgressNoteState extends State<OperationReportScreen> {
),
AppText(
model.reservationList[index].createdOn != null
? AppDateUtils.getHour(AppDateUtils.getDateTimeFromServerFormat(model.reservationList[index].createdOn!))
? AppDateUtils.getHour(AppDateUtils.getDateTimeFromServerFormat(model.reservationList[index].oTReservationDate!))
: AppDateUtils.getHour(DateTime.now()),
fontWeight: FontWeight.w600,
fontSize: 14,

@ -1,3 +1,4 @@
import 'dart:async';
import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dart';
import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.dart';
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
@ -6,7 +7,7 @@ import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/divider_with_spaces_around.dart';
import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/TextFields.dart';
import 'package:eva_icons_flutter/eva_icons_flutter.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart';
import 'package:flutter/material.dart';
import '../../config/config.dart';
@ -39,8 +40,12 @@ class _EntityListCheckboxSearchWidgetState extends State<EntityListCheckboxSearc
String? selectedType;
int typeUrgent = 0;
int typeRegular = 0;
TextEditingController procedureName = TextEditingController();
Timer? _debounce;
bool _isSearching = false;
setSelectedType(String val) {
if (!mounted) return;
setState(() {
selectedType = val;
widget.selectedType(val);
@ -57,8 +62,159 @@ class _EntityListCheckboxSearchWidgetState extends State<EntityListCheckboxSearc
super.initState();
}
@override
void dispose() {
_debounce?.cancel();
procedureName.dispose();
remarksController.dispose();
super.dispose();
}
void _onSearchChanged(String query) {
if (_debounce?.isActive ?? false) _debounce!.cancel();
_debounce = Timer(const Duration(milliseconds: 500), () {
if (!mounted) return;
if (query.isEmpty) {
setState(() {
items.clear();
items.addAll(widget.masterList);
_isSearching = false;
});
} else if (query.length >= 3) {
setState(() {
_isSearching = true;
});
widget.model.filterSearchResults(query, widget.masterList, items);
if (mounted) {
setState(() {
_isSearching = false;
});
}
} else {
setState(() {
_isSearching = false;
});
}
});
}
TextEditingController remarksController = TextEditingController();
Widget _buildProcedureItem(EntityList historyInfo) {
return ExpansionTile(
key: ValueKey('${historyInfo.procedureId}_${historyInfo.procedureName}'),
title: Row(
children: [
Checkbox(
value: widget.isEntityListSelected(historyInfo),
activeColor: Color(0xffD02127),
onChanged: (bool? newValue) {
if (!mounted) return;
setState(() {
if (widget.isEntityListSelected(historyInfo)) {
widget.removeProcedure(historyInfo);
} else {
widget.addProcedure(historyInfo);
}
});
},
),
Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 0),
child: AppText(
Utils.convertToTitleCase(historyInfo.procedureName!),
fontSize: 14.0,
variant: "bodyText",
bold: true,
color: Color(0xff575757),
),
),
),
],
),
children: [
Container(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 11),
child: AppText(
TranslationBase.of(context).orderType,
fontWeight: FontWeight.w700,
color: Color(0xff2B353E),
),
),
],
),
Row(
children: [
Radio(
activeColor: Color(0xFFD02127),
value: '0',
groupValue: historyInfo.type,
onChanged: (value) {
if (!mounted) return;
setState(() {
historyInfo.type = value.toString();
setSelectedType(value!);
});
},
),
AppText(
'routine',
color: Color(0xff575757),
fontWeight: FontWeight.w600,
),
Radio(
activeColor: Color(0xFFD02127),
groupValue: historyInfo.type,
value: '1',
onChanged: (value) {
if (!mounted) return;
setState(() {
historyInfo.type = value.toString();
setSelectedType(value!);
});
},
),
AppText(
TranslationBase.of(context).urgent,
color: Color(0xff575757),
fontWeight: FontWeight.w600,
),
],
),
],
),
),
),
SizedBox(height: 2.0),
Padding(
padding: EdgeInsets.symmetric(horizontal: 12, vertical: 12.0),
child: TextFields(
hintText: TranslationBase.of(context).remarks,
onChanged: (value) {
historyInfo.remarks = value;
},
minLines: 3,
maxLines: 5,
borderWidth: 0.5,
borderColor: Colors.grey[500]!,
),
),
DividerWithSpacesAround(),
],
);
}
@override
Widget build(BuildContext context) {
return Container(
@ -70,136 +226,81 @@ class _EntityListCheckboxSearchWidgetState extends State<EntityListCheckboxSearc
height: MediaQuery.of(context).size.height * 0.75,
child: Center(
child: Container(
margin: EdgeInsets.only(top: 15),
// margin: EdgeInsets.only(top: 15),
decoration: BoxDecoration(borderRadius: BorderRadius.circular(8), color: Colors.white),
child: ListView(
padding: EdgeInsets.all(12),
children: [
TextFields(
hintText: TranslationBase.of(context).searchProcedures,
suffixIcon: EvaIcons.search,
suffixIconColor: Color(0xff2B353E),
onChanged: (value) {
widget.model.filterSearchResults(value, widget.masterList, items);
},
hasBorder: false,
),
SizedBox(
height: 15,
),
items.length != 0
? Column(
children: items.map((historyInfo) {
return Column(
children: [
ExpansionTile(
title: Row(
children: [
Checkbox(
value: widget.isEntityListSelected(historyInfo),
activeColor: Color(0xffD02127),
onChanged: (bool? newValue) {
setState(() {
if (widget.isEntityListSelected(historyInfo)) {
widget.removeProcedure(historyInfo);
} else {
widget.addProcedure(historyInfo);
}
});
}),
Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 0),
child: AppText(Utils.convertToTitleCase(historyInfo.procedureName!), fontSize: 14.0, variant: "bodyText", bold: true, color: Color(0xff575757)),
),
),
],
),
children: [
Container(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 11),
child: AppText(
TranslationBase.of(context).orderType,
fontWeight: FontWeight.w700,
color: Color(0xff2B353E),
),
),
],
),
Row(
children: [
Radio(
activeColor: Color(0xFFD02127),
value: '0',
groupValue: historyInfo.type,
onChanged: (value) {
historyInfo.type = setSelectedType(value!).toString();
historyInfo.type = value.toString();
},
),
AppText(
'routine',
color: Color(0xff575757),
fontWeight: FontWeight.w600,
),
Radio(
activeColor: Color(0xFFD02127),
groupValue: historyInfo.type,
value: '1',
onChanged: (value) {
historyInfo.type = setSelectedType(value!).toString();
historyInfo.type = value.toString();
},
),
AppText(
TranslationBase.of(context).urgent,
color: Color(0xff575757),
fontWeight: FontWeight.w600,
),
],
),
],
),
),
),
SizedBox(
height: 2.0,
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 12, vertical: 12.0),
child: TextFields(
hintText: TranslationBase.of(context).remarks,
//controller: remarksController,
onChanged: (value) {
historyInfo.remarks = value;
},
minLines: 3,
maxLines: 5,
borderWidth: 0.5,
borderColor: Colors.grey[500]!,
),
),
DividerWithSpacesAround(),
],
Padding(
padding: const EdgeInsets.only(bottom: 12.0),
child: AppTextFieldCustom(
suffixWidget: _isSearching
? Padding(
padding: const EdgeInsets.all(12.0),
child: SizedBox(
width: 20,
height: 20,
child: CircularProgressIndicator(
strokeWidth: 2,
valueColor: AlwaysStoppedAnimation<Color>(Color(0xFFD02127)),
),
],
);
}).toList(),
)
: Center(
child: Container(
child: AppText("Sorry , No Match", color: AppGlobal.appRedColor),
),
)
),
)
: InkWell(
onTap: () {
if (procedureName.text.length >= 3) {
widget.model.filterSearchResults(
procedureName.text, widget.masterList, items);
WidgetsBinding.instance.addPostFrameCallback((_) {
// if (mounted) {
// setState(() {});
// }
});
}
},
child: Icon(
Icons.search,
size: 25.0,
),
),
hintText: TranslationBase.of(context).searchProcedureHere,
isTextFieldHasSuffix: false,
maxLines: 1,
minLines: 1,
hasBorder: true,
controller: procedureName,
onChanged: (value) {
_onSearchChanged(value ?? '');
},
onFieldSubmitted: () {
if (procedureName.text.length >= 3) {
widget.model.filterSearchResults(
procedureName.text, widget.masterList, items);
WidgetsBinding.instance.addPostFrameCallback((_) {
if (mounted) {
setState(() {});
}
});
}
},
),
),
if (items.isEmpty && procedureName.text.length >= 3)
Center(
child: Padding(
padding: const EdgeInsets.all(20.0),
child: AppText("Sorry, No Match", color: AppGlobal.appRedColor),
),
)
else if (items.isEmpty && procedureName.text.length > 0 && procedureName.text.length < 3)
Center(
child: Padding(
padding: const EdgeInsets.all(20.0),
child: AppText("Please enter at least 3 characters to search", color: Colors.grey),
),
)
else
...items.map((historyInfo) => _buildProcedureItem(historyInfo)).toList(),
],
),
)),

Loading…
Cancel
Save