Merge branch 'update_flutter_3.16.0' of http://34.17.52.180/Haroon6138/doctor_app_flutter into update_3.16.0_CR5439_Pharmacy_Intervention

# Conflicts:
#	lib/config/localized_values.dart
#	lib/screens/home/home_screen.dart
update_3.16.0_CR5439_Pharmacy_Intervention
taha.alam 9 months ago
commit d0debd5d5f

@ -59,7 +59,7 @@ android {
buildTypes {
release {
// TODO: Add your own signing config for the release build.
signingConfig signingConfigs.debug
signingConfig signingConfigs.release
}
debug {

@ -27,6 +27,19 @@ rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
afterEvaluate { project ->
if (project.plugins.hasPlugin("com.android.application") ||
project.plugins.hasPlugin("com.android.library")) {
project.android {
compileSdkVersion 34
buildToolsVersion "34.0.0"
}
}
}
}
// to here
subprojects {
project.evaluationDependsOn(':app')
}

@ -4,7 +4,7 @@ import OpenTok
// Created by Mohammad Aljammal & Elham Rababah on 24/06/20.
// Copyright © 2020 Cloud. All rights reserved.
@UIApplicationMain
@main
@objc class AppDelegate: FlutterAppDelegate ,ICallProtocol {
var result: FlutterResult?

@ -7,9 +7,9 @@ const ONLY_DATE = "[0-9/]";
const BASE_URL_LIVE_CARE = 'https://livecare.hmg.com/';
const DOCTOR_ROTATION = 'https://doctorrota.hmg.com/';
// const BASE_URL_LIVE_CARE = 'https://livecareuat.hmg.com/';
// const BASE_URL = 'https://hmgwebservices.com/';
const BASE_URL = 'https://hmgwebservices.com/';
const BASE_URL = 'https://uat.hmgwebservices.com/';
// const BASE_URL = 'https://uat.hmgwebservices.com/';
// const BASE_URL = 'https://webservices.hmg.com/';
@ -407,7 +407,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 = 9.3;
const VERSION_ID = 9.4;
const CHANNEL = 9;
const SESSION_ID = 'BlUSkYymTt';
const IS_LOGIN_FOR_DOCTOR_APP = true;

@ -1245,6 +1245,7 @@ const Map<String, Map<String, String>> localizedValues = {
"authorizedBy": {"en": "Authorized By", "ar":"مرخص من قبل"},
"dosageDetails": {"en": "Dosage Details", "ar":"تفاصيل الجرعة"},
"accessLevel": {"en": "Access Level", "ar":"مستوى الوصول"},
"stable": {"en": "Stable", "ar":"مستقر"},
"resolved": {"en": "Resolved", "ar":"تم الحل"},
"diagnosisAlreadyDeleted": {"en": "Diagnosis Already Deleted", "ar":"تم حذف التشخيص بالفعل"},
"diagnosisAlreadyResolved": {"en": "Diagnosis Already Resolved", "ar":"تم حل التشخيص بالفعل"},

@ -6,6 +6,7 @@ class AuditDiagnosis {
String? deletedBy;
String? deletedOn;
String? deletedRemarks;
String? doctorName;
String? diagnosisType;
bool? isEventIdentifiedExternally;
bool? isResolved;
@ -23,6 +24,7 @@ class AuditDiagnosis {
createdOn = json['createdOn'];
deletedBy = json['deletedBy'];
deletedOn = json['deletedOn'];
doctorName = json['doctorName'];
deletedRemarks = json['deletedRemarks'];
diagnosisType = json['diagnosisType'];
isEventIdentifiedExternally = json['isEventIdentifiedExternally'];

@ -37,8 +37,12 @@ class ProjectViewModel with ChangeNotifier {
List<VidaPlusProjectListModel> _vidaPlusProjectListModel = [];
List<VidaPlusProjectListModel> _vidaPlusInPatientsProjectListModel = [];
List<VidaPlusProjectListModel> get vidaPlusProjectList => _vidaPlusProjectListModel;
List<VidaPlusProjectListModel> get vidaPlusInPatientsProjectListModel => _vidaPlusInPatientsProjectListModel;
ProjectViewModel() {
loadSharedPrefLanguage();
@ -63,6 +67,11 @@ class ProjectViewModel with ChangeNotifier {
notifyListeners();
}
setVidaPlusInPatientProjectList(List<VidaPlusProjectListModel> vidaPlusInPatientProjectListModelInput) {
_vidaPlusInPatientsProjectListModel = vidaPlusInPatientProjectListModelInput;
notifyListeners();
}
void loadSharedPrefLanguage() async {
currentLanguage = await sharedPref.getString(APP_Language);
_appLocale = Locale(currentLanguage ?? 'en');
@ -117,6 +126,15 @@ class ProjectViewModel with ChangeNotifier {
});
setVidaPlusProjectList(_vidaPlusProjectListModel);
}
_vidaPlusInPatientsProjectListModel.clear();
if (response['ProjectListHMCForDoctorAppInPatient'].length != 0) {
response['ProjectListHMCForDoctorAppInPatient'].forEach((item) {
_vidaPlusInPatientsProjectListModel.add(VidaPlusProjectListModel.fromJson(item));
});
setVidaPlusInPatientProjectList(_vidaPlusInPatientsProjectListModel);
}
localRes = response;
}, onFailure: (String error, int statusCode) {
throw error;

@ -125,117 +125,69 @@ class _HomeScreenState extends State<HomeScreen> {
children: [
Container(
width: MediaQuery.of(context).size.width * .6,
child: projectsProvider.doctorClinicsList.length >
0
child: projectsProvider.doctorClinicsList.length > 0
? Stack(
children: [
DropdownButtonHideUnderline(
child: DropdownButton(
dropdownColor: Colors.white,
iconEnabledColor:
AppGlobal.appTextColor,
iconEnabledColor: AppGlobal.appTextColor,
icon: Icon(Icons.keyboard_arrow_down),
isExpanded: true,
value: clinicId == null
? projectsProvider
.doctorClinicsList[0].clinicID
: clinicId,
value: clinicId == null ? projectsProvider.doctorClinicsList[0].clinicID : clinicId,
iconSize: 25,
elevation: 16,
selectedItemBuilder:
(BuildContext context) {
return projectsProvider
.doctorClinicsList
.map((item) {
selectedItemBuilder: (BuildContext context) {
return projectsProvider.doctorClinicsList.map((item) {
return Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Column(
mainAxisAlignment:
MainAxisAlignment
.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
padding:
EdgeInsets.all(0),
margin:
EdgeInsets.all(2),
decoration:
new BoxDecoration(
color: AppGlobal
.appRedColor,
borderRadius:
BorderRadius
.circular(
20),
padding: EdgeInsets.all(0),
margin: EdgeInsets.all(2),
decoration: new BoxDecoration(
color: AppGlobal.appRedColor,
borderRadius: BorderRadius.circular(20),
),
constraints:
BoxConstraints(
constraints: BoxConstraints(
minWidth: 20,
minHeight: 20,
),
child: Center(
child: AppText(
projectsProvider
.doctorClinicsList
.length
.toString(),
color:
Colors.white,
letterSpacing:
-0.72,
fontWeight:
FontWeight
.w600,
fontSize:
projectsProvider
.isArabic
? 10
: 12,
textAlign:
TextAlign
.center,
projectsProvider.doctorClinicsList.length.toString(),
color: Colors.white,
letterSpacing: -0.72,
fontWeight: FontWeight.w600,
fontSize: projectsProvider.isArabic ? 10 : 12,
textAlign: TextAlign.center,
),
)),
],
),
AppText(
Utils.convertToTitleCase(
item.clinicName),
fontSize: 14,
letterSpacing: -0.96,
color: AppGlobal
.appTextColor,
fontWeight:
FontWeight.bold,
textAlign: TextAlign.end),
AppText(Utils.convertToTitleCase(item.clinicName),
fontSize: 14, letterSpacing: -0.96, color: AppGlobal.appTextColor, fontWeight: FontWeight.bold, textAlign: TextAlign.end),
],
);
}).toList();
},
onChanged: (newValue) async {
clinicId = newValue;
GifLoaderDialogUtils.showMyDialog(
context);
await model.changeClinic(newValue,
authenticationViewModel);
GifLoaderDialogUtils.hideDialog(
context);
if (model.state ==
ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(
model.error);
GifLoaderDialogUtils.showMyDialog(context);
await model.changeClinic(newValue, authenticationViewModel);
GifLoaderDialogUtils.hideDialog(context);
if (model.state == ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(model.error);
}
},
items: projectsProvider
.doctorClinicsList
.map((item) {
items: projectsProvider.doctorClinicsList.map((item) {
return DropdownMenuItem(
child: AppText(
Utils.convertToTitleCase(
item.clinicName),
Utils.convertToTitleCase(item.clinicName),
fontSize: 14,
letterSpacing: -0.96,
color: AppGlobal.appTextColor,
@ -248,8 +200,7 @@ class _HomeScreenState extends State<HomeScreen> {
)),
],
)
: AppText(
TranslationBase.of(context).noClinic),
: AppText(TranslationBase.of(context).noClinic),
),
],
),
@ -279,22 +230,16 @@ class _HomeScreenState extends State<HomeScreen> {
? FractionallySizedBox(
widthFactor: 0.90,
child: Container(
child: Column(
mainAxisAlignment:
MainAxisAlignment.start,
children: <Widget>[
SizedBox(
height: 10,
),
sliderActiveIndex == 1
? DashboardSliderItemWidget(
model.dashboardItemsList[4])
: sliderActiveIndex == 0
? DashboardSliderItemWidget(
model.dashboardItemsList[3])
: DashboardSliderItemWidget(
model.dashboardItemsList[6]),
])))
child: Column(mainAxisAlignment: MainAxisAlignment.start, children: <Widget>[
SizedBox(
height: 10,
),
sliderActiveIndex == 1
? DashboardSliderItemWidget(model.dashboardItemsList[4])
: sliderActiveIndex == 0
? DashboardSliderItemWidget(model.dashboardItemsList[3])
: DashboardSliderItemWidget(model.dashboardItemsList[6]),
])))
: SizedBox(),
],
)
@ -333,12 +278,9 @@ class _HomeScreenState extends State<HomeScreen> {
: SizeConfig.isHeightLarge
? 15
: 13),
child: ListView(
scrollDirection: Axis.horizontal,
children: [
...homePatientsCardsWidget(
model, projectsProvider),
])),
child: ListView(scrollDirection: Axis.horizontal, children: [
...homePatientsCardsWidget(model, projectsProvider),
])),
SizedBox(
height: 20,
),
@ -469,25 +411,29 @@ class _HomeScreenState extends State<HomeScreen> {
));
changeColorIndex();
patientCards.add(HomePatientCard(
gradient: backgroundColors[colorIndex],
backgroundIconColor: backgroundIconColors[colorIndex],
cardIcon: DoctorApp.inpatient,
textColor: textColors[colorIndex],
text: TranslationBase.of(context).myInPatient,
onTap: () {
Navigator.push(
context,
FadePage(
page: InPatientScreen(
specialClinic: model.getSpecialClinic(
if (!Utils.isVidaPlusInPatientProject(projectsProvider, model.doctorProfile!.projectID!)) {
patientCards.add(HomePatientCard(
gradient: backgroundColors[colorIndex],
backgroundIconColor: backgroundIconColors[colorIndex],
cardIcon: DoctorApp.inpatient,
textColor: textColors[colorIndex],
text: TranslationBase
.of(context)
.myInPatient,
onTap: () {
Navigator.push(
context,
FadePage(
page: InPatientScreen(
specialClinic: model.getSpecialClinic(
clinicId ?? projectsProvider.doctorClinicsList[0].clinicID),
),
),
),
);
},
));
changeColorIndex();
);
},
));
changeColorIndex();
}
if (model.isInfectiousDiseaseConsultant) {
patientCards.add(HomePatientCard(

@ -20,7 +20,7 @@ class AuditItem extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
AppText(
auditDiagnosis.createdBy ?? '',
auditDiagnosis.doctorName ?? '',
fontWeight: FontWeight.w600,
fontSize: 12,
color: Color(0xFF2B353E),

@ -28,7 +28,7 @@ class ListOfExamination extends StatelessWidget {
///todo handle the event as per the actiion
/// the action is [SoapDetailItemActions]
},
status: 'active',
status: TranslationBase.of(context).active,
showActions: false,
),
separatorBuilder: (_, __) => Divider(),

@ -5,6 +5,7 @@ import 'package:doctor_app_flutter/core/model/SOAP/selected_items/my_selected_al
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/subjective/allergies/reactions_selection.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/subjective/chief_complaint/widgets/add_soap_item.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/widgets/SoapDetailItem.dart';
import 'package:doctor_app_flutter/utils/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
import 'package:doctor_app_flutter/utils/utils.dart';
@ -102,11 +103,23 @@ class _UpdateAllergiesWidgetState extends State<UpdateAllergiesWidgetVidaPlus> {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
selectedAllergy.allergyName!,
fontSize: 12,
fontWeight: FontWeight.w800,
letterSpacing: -0.48,
Row(
children: [
Expanded(
child: AppText(
selectedAllergy.allergyName!,
fontSize: 12,
fontWeight: FontWeight.w800,
letterSpacing: -0.48,
),
),
SizedBox(
width: 8,
),
Status(
status: (selectedAllergy.isActivePatientsAllergy == true ) ? TranslationBase.of(context).active : TranslationBase.of(context).resolved,
)
],
),
selectedAllergy.patientsAllergyReactionsDTOs!
.isNotEmpty &&

@ -6,6 +6,7 @@ import 'package:doctor_app_flutter/screens/patients/profile/soap_update/subjecti
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/subjective/chief_complaint/AddChiefComplaints.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/subjective/chief_complaint/widgets/add_soap_item.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/subjective/chief_complaint/widgets/complaint_items.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update_vida_plus/subjective/chief_complaint/widgets/empty_complaints.dart';
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart';
@ -50,24 +51,27 @@ class UpdateChiefComplaints extends StatelessWidget {
title: TranslationBase.of(context).addChiefComplaint,
),
SizedBox(height: 16),
Container(width: MediaQuery.of(context).size.width,
height: 40,
child:
ListView.builder(
shrinkWrap: true,
scrollDirection: Axis.horizontal,
itemCount: model.getChiefComplaintListVidaPlus.length,
itemBuilder: (_, index) =>
ComplaintItems(
complaint: model.getChiefComplaintListVidaPlus[index]!,
onCrossClicked: (complaints) {
})
)),
]),
));
if (model.getChiefComplaintListVidaPlus.isEmpty) ...{
SizedBox(
width: MediaQuery.sizeOf(context).width,
child: EmptyComplaints(),
)
} else ...{
Container(
width: MediaQuery.of(context).size.width,
height: 40,
child: ListView.builder(
shrinkWrap: true,
scrollDirection: Axis.horizontal,
itemCount:
model.getChiefComplaintListVidaPlus.length,
itemBuilder: (_, index) => ComplaintItems(
complaint: model
.getChiefComplaintListVidaPlus[index]!,
onCrossClicked: (complaints) {}))),
}
]),
));
}
getChiefComplaints(SOAPViewModel model){
model.getChiefComplaint(patientInfo);

@ -16,6 +16,7 @@ class EmptyComplaints extends StatelessWidget{
TranslationBase.of(context).noComplaintsFound,
fontSize: 12,
fontWeight: FontWeight.w400,
textAlign: TextAlign.center,
color: Color(0xFFADADAD),
)
],

@ -204,16 +204,23 @@ class Status extends StatelessWidget {
borderRadius: BorderRadius.circular(3),
),
// color: Color(0xFF359846),
color: (status.toLowerCase() == 'active' ||
status.toLowerCase() == 'stable')
color: (status.toLowerCase() ==
TranslationBase.of(context).active.toLowerCase() ||
status.toLowerCase() ==
TranslationBase.of(context).stable.toLowerCase())
? Color(0xFFD8E8DB)
: Color(0x98d02127),
: (status.toLowerCase() ==
TranslationBase.of(context).resolved.toLowerCase())
? Colors.lightBlue
: Color(0x98d02127),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 6),
child: AppText(
status,
color: (status.toLowerCase() == 'active' ||
status.toLowerCase() == 'stable')
color: (status.toLowerCase() ==
TranslationBase.of(context).active.toLowerCase() ||
status.toLowerCase() ==
TranslationBase.of(context).stable.toLowerCase())
? Color(0xFF359846)
: Colors.white,
fontSize: 8,

@ -39,16 +39,10 @@ class ProcedureScreen extends StatelessWidget {
bool isInpatient = routeArgs['isInpatient'];
return BaseView<ProcedureViewModel>(
onModelReady: (model) {
model.getProcedure(
mrn: patient.patientId,
patientType: patientType,
appointmentNo: patient.appointmentNo);
model.getProcedure(mrn: patient.patientId, patientType: patientType, appointmentNo: patient.appointmentNo);
model.isPrincipalCovered(patient: patient);
},
builder: (BuildContext context, ProcedureViewModel model, Widget? child) =>
AppScaffold(
builder: (BuildContext context, ProcedureViewModel model, Widget? child) => AppScaffold(
isShowAppBar: true,
backgroundColor: Colors.grey[100]!,
baseViewModel: model,
@ -64,23 +58,16 @@ class ProcedureScreen extends StatelessWidget {
SizedBox(
height: 12,
),
if ((model.procedureList.length == 0 &&
patient.patientStatusType != 43) ||
patient.patientStatusType != null &&
patient.patientStatusType == 43)
if ((model.procedureList.length == 0 && patient.patientStatusType != 43) || patient.patientStatusType != null && patient.patientStatusType == 43)
ServiceTitle(
title: TranslationBase.of(context).orderTestOr,
subTitle: TranslationBase.of(context).procedure,
),
if ((patient.patientStatusType != null &&
patient.patientStatusType == 43) ||
(isFromLiveCare && patient.appointmentNo != null))
if ((patient.patientStatusType != null && patient.patientStatusType == 43) || (isFromLiveCare && patient.appointmentNo != null))
AddNewOrder(
onTap: () async {
GifLoaderDialogUtils.showMyDialog(context);
await model.getProcedureTemplate(
categoryID: ProcedureType.PROCEDURE.getCategoryId(),
isLocalBusy: true);
await model.getProcedureTemplate(categoryID: ProcedureType.PROCEDURE.getCategoryId(), isLocalBusy: true);
GifLoaderDialogUtils.hideDialog(context);
Navigator.push(
@ -96,9 +83,17 @@ class ProcedureScreen extends StatelessWidget {
},
label: TranslationBase.of(context).addMoreProcedure,
),
!model.isPrincipalCovered_ ? Center(child: AppText(TranslationBase.of(context).principalCoveredOrNot,color: Colors.red, textAlign: TextAlign.center, )) :SizedBox(),
SizedBox(height: 20,),
!model.isPrincipalCovered_
? Center(
child: AppText(
TranslationBase.of(context).principalCoveredOrNot,
color: Colors.red,
textAlign: TextAlign.center,
))
: SizedBox(),
SizedBox(
height: 20,
),
if (model.procedureList.isNotEmpty)
ListView.builder(
scrollDirection: Axis.vertical,
@ -107,45 +102,28 @@ class ProcedureScreen extends StatelessWidget {
physics: BouncingScrollPhysics(),
itemBuilder: (BuildContext ctxt, int index) {
return ProcedureCard(
categoryID: model
.procedureList[0].entityList![index].categoryID,
categoryID: model.procedureList[0].entityList![index].categoryID,
entityList: model.procedureList[0].entityList![index],
onTap: () {
if (model.procedureList[0].entityList![index]
.categoryID ==
2 ||
model.procedureList[0].entityList![index]
.categoryID ==
4)
if (model.procedureList[0].entityList![index].categoryID == 2 || model.procedureList[0].entityList![index].categoryID == 4)
updateProcedureForm(
context,
model: model,
patient: patient,
remarks: model.procedureList[0]
.entityList![index].remarks!,
orderType: model.procedureList[0]
.entityList![index].orderType
.toString(),
orderNo: model.procedureList[0]
.entityList![index].orderNo!,
procedureName: model.procedureList[0]
.entityList![index].procedureName!,
categoreId: model.procedureList[0]
.entityList![index].categoryID
.toString(),
procedureId: model.procedureList[0]
.entityList![index].procedureId!,
limetNo: model.procedureList[0]
.entityList![index].lineItemNo!,
remarks: model.procedureList[0].entityList![index].remarks!,
orderType: model.procedureList[0].entityList![index].orderType.toString(),
orderNo: model.procedureList[0].entityList![index].orderNo!,
procedureName: model.procedureList[0].entityList![index].procedureName!,
categoreId: model.procedureList[0].entityList![index].categoryID.toString(),
procedureId: model.procedureList[0].entityList![index].procedureId!,
limetNo: model.procedureList[0].entityList![index].lineItemNo!,
);
},
patient: patient,
doctorID: model.doctorProfile?.doctorID,
);
}),
if (model.state == ViewState.ErrorLocal ||
(model.procedureList.isNotEmpty &&
model.procedureList[0].entityList!.isEmpty))
if (model.state == ViewState.ErrorLocal || (model.procedureList.isNotEmpty && model.procedureList[0].entityList!.isEmpty))
Center(
child: ErrorMessage(
error: TranslationBase.of(context).noDataAvailable,

@ -1186,6 +1186,7 @@ class TranslationBase {
localizedValues['onlyOfftimeHoliday']![locale.languageCode]!;
String get active => localizedValues['active']![locale.languageCode]!;
String get stable => localizedValues['stable']![locale.languageCode]!;
String get hold => localizedValues['hold']![locale.languageCode]!;

@ -349,4 +349,14 @@ class Utils {
});
return isVidaPlus;
}
static bool isVidaPlusInPatientProject(ProjectViewModel projectViewModel, int projectID) {
bool isVidaPlusInPatientProject = false;
projectViewModel.vidaPlusInPatientsProjectListModel.forEach((element) {
if (element.projectID == projectID) {
isVidaPlusInPatientProject = true;
}
});
return isVidaPlusInPatientProject;
}
}

@ -11,7 +11,7 @@ description: A new Flutter project.
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.4.16+1
version: 1.4.17+1
environment:
@ -57,7 +57,7 @@ dependencies:
barcode_scan2: ^4.3.0
# permissions
permission_handler: ^11.1.0
device_info: ^2.0.2
# device_info: ^2.0.2
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.

Loading…
Cancel
Save