qLine Lab integration started.

qline_lab_integration
Faiz Hashmi 1 day ago
parent 1f5c681e78
commit 81b6117161

@ -0,0 +1,4 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.8333 3.99984C15.8333 3.26346 16.4303 2.6665 17.1667 2.6665H29.1667C29.903 2.6665 30.5 3.26346 30.5 3.99984C30.5 4.73622 29.903 5.33317 29.1667 5.33317L29.1667 23.3332C29.1667 26.6469 26.4804 29.3332 23.1667 29.3332C19.853 29.3332 17.1667 26.6469 17.1667 23.3332L17.1667 9.33405C17.1667 9.33376 17.1667 9.33434 17.1667 9.33405C17.1667 9.33376 17.1667 9.33259 17.1667 9.33229V5.33317C16.4303 5.33317 15.8333 4.73622 15.8333 3.99984ZM19.8333 7.99984V5.33317H26.5L26.5 13.0676C26.1378 13.317 25.8055 13.5125 25.4733 13.6324C25.0059 13.8012 24.5708 13.8095 24.0425 13.4925C22.6945 12.6837 21.4241 12.879 20.3715 13.4052C20.1897 13.4961 20.0098 13.5996 19.8333 13.7111V10.6665H22.5C23.2364 10.6665 23.8333 10.0695 23.8333 9.33317C23.8333 8.59679 23.2364 7.99984 22.5 7.99984H19.8333Z" fill="#2E3039"/>
<path d="M7.14104 12.6116C7.52794 12.2404 8.13873 12.2404 8.52562 12.6116L8.53329 12.6193C8.69353 12.7817 9.1478 13.2422 9.40228 13.5185C9.91854 14.0791 10.6087 14.8721 11.3012 15.7994C11.9917 16.7239 12.6985 17.8007 13.2361 18.9287C13.7693 20.0478 14.1667 21.2805 14.1667 22.4998C14.1667 24.7601 13.4124 26.4319 12.1558 27.5235C10.9246 28.5931 9.33325 28.9998 7.83333 28.9998C6.33342 28.9998 4.74203 28.5931 3.51084 27.5235C2.25425 26.4319 1.5 24.7601 1.5 22.4998C1.5 21.2805 1.89732 20.0478 2.4306 18.9287C2.96813 17.8007 3.67498 16.7239 4.36544 15.7994C5.05795 14.8721 5.74813 14.0791 6.26439 13.5185C6.51888 13.2422 6.97318 12.7817 7.1334 12.6193L7.14104 12.6116Z" fill="#2E3039"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

@ -95,7 +95,8 @@ class ApiClientImp implements ApiClient {
loggerService.logInfo("------Payload------");
loggerService.logInfo(jsonDecode(requestBody).toString());
loggerService.logInfo("------Response------");
loggerService.logInfo(jsonDecode(response.body).toString());
log(jsonDecode(response.body).toString());
// loggerService.logInfo(jsonDecode(response.body).toString());
}
if (response.statusCode >= 200 && response.statusCode < 500) {
var jsonData = jsonDecode(response.body);

@ -157,6 +157,7 @@ class AppAssets {
static String newVitalSignIcon = "assets/images/vitalsign_icon.svg";
static String newDoctorIcon = "assets/images/doctor_icon.svg";
static String textBgLeaf = "assets/new_design_icons/text_bg_leaf.svg";
static String labIcon = "assets/new_design_icons/lab_icon.svg";
}
class AppConstants {
@ -169,6 +170,7 @@ class AppConstants {
static int thresholdForListUI = 5;
static double currentBuildVersion = 9.2;
static double clearLogsHoursThreshold = 48;
// Maximum log file size in bytes before rotation/clearing. Default 2 MB.
static int maxLogFileSizeBytes = 2 * 1024 * 1024;
}
@ -178,7 +180,8 @@ class ApiConstants {
static String baseUrlUat = 'https://ms.hmg.com/nscapi'; // UAT
static String baseUrlDev = 'https://ms.hmg.com/nscapi2'; // DEV
static String baseUrl = baseUrlLive;
// static String baseUrl = baseUrlLive;
static String baseUrl = baseUrlDev;
static String baseUrlHub = '$baseUrl/PatientCallingHub';
static String baseUrlApi = '$baseUrl/api';
static String baseUrlApiGen = '$baseUrl/api/Gen';
@ -235,13 +238,7 @@ class MockJsonRepo {
static TicketData ticket = TicketData(
id: 189805,
patientID: 4292695,
laBQGroupID: null,
queueNo: 'W-T-4',
counterBatchNo: null,
calledBy: null,
calledOn: null,
servedOn: null,
patientName: null,
mobileNo: '0598544522',
patientEmail: 'munira.ali@hotmail.com',
preferredLang: 2,
@ -250,12 +247,8 @@ class MockJsonRepo {
postVoiceText: 'Call for Vital Signs',
patientGender: 2,
roomNo: 'D 12',
isActive: null,
createdBy: null,
editedBy: null,
editedOn: DateTime.parse('2025-08-18 15:09:03.633'),
createdOn: DateTime.parse('2025-08-18 15:06:07.363'),
doctorNameN: null,
callTypeEnum: CallTypeEnum.doctor,
queueNoM: 'W-T-4',
callNoStr: 'W_T-4',
@ -265,7 +258,6 @@ class MockJsonRepo {
orientationType: 0,
isTurnOn: false,
concurrentCallDelaySec: 0,
crTypeAckIP: null,
voiceLanguageText: 'English',
vitalSignText: 'علامة حيوية',
doctorText: 'الطبيب',

@ -25,7 +25,8 @@ class GlobalConfigurationsModel {
int? priorityWhatsApp;
int? priorityEmail;
String ticketNoText = "Ticket Number";
String postVoiceText = "Please Visit Counter";
String pleaseVisitCounterTextEn = "Please Visit Counter";
String pleaseVisitCounterTextAr = "Please Visit Counter";
int? roomNo;
bool? isRoomNoRequired;
@ -37,12 +38,12 @@ class GlobalConfigurationsModel {
String? counterTextArb;
String? queueNoTextArb;
String? callForTextArb;
String? currentServeTextEng;
String? currentServeTextEng = "Current Serving";
String? currentServeTextArb;
String maxText = "";
String minText = "";
String nextPrayerTextEng = "Next Prayer";
String nextPrayerTextArb = "الصلا<EFBFBD><EFBFBD> القادمة";
String nextPrayerTextArb = "الصلاة القادمة";
String weatherText = "Weather";
String? fajarTextEng;
String? dhuhrTextEng;
@ -77,7 +78,6 @@ class GlobalConfigurationsModel {
List<KioskQueueModel>? kioskQueueList;
List<KioskLanguageConfigModel>? kioskLanguageConfigList;
// Indicates whether the screen belongs to Takhasusi main (based on its IP)
bool isFromTakhasusiMain = false;
String vitalSignTextEng = "Vital Sign";
@ -102,6 +102,12 @@ class GlobalConfigurationsModel {
String callForVaccinationTextArb = "الرجاء التوجّه إلى غرفة التطعيم";
String callForNebulizationTextArb = "الرجاء التوجّه إلى غرفة البخاخة";
static String defaultIfNullOrEmpty(dynamic value, String def) {
if (value == null) return def;
if (value is String && value.trim().isEmpty) return def;
return value.toString();
}
GlobalConfigurationsModel({
this.id,
this.configType,
@ -122,7 +128,8 @@ class GlobalConfigurationsModel {
this.priorityWhatsApp,
this.priorityEmail,
this.ticketNoText = "Ticket Number",
this.postVoiceText = "Please Visit Counter",
this.pleaseVisitCounterTextEn = "Please Visit Counter",
this.pleaseVisitCounterTextAr = "يرجى زيارة الكاونتر",
this.roomTextEng,
this.roomNo,
this.isRoomNoRequired = true,
@ -132,7 +139,7 @@ class GlobalConfigurationsModel {
this.counterTextArb,
this.queueNoTextArb,
this.callForTextArb,
this.currentServeTextEng,
this.currentServeTextEng = "Current Serving",
this.currentServeTextArb,
this.maxText = "",
this.minText = "",
@ -195,74 +202,73 @@ class GlobalConfigurationsModel {
});
GlobalConfigurationsModel.fromJson({required Map<String, dynamic> json, int qType = 1, int screenType = 1}) {
id = json['id'];
configType = json['configType'];
description = json['description'];
counterStart = json['counterStart'];
counterEnd = json['counterEnd'];
id = json['id'] ?? 0;
configType = json['configType'] ?? 0;
description = defaultIfNullOrEmpty(json['description'], "");
counterStart = json['counterStart'] ?? 0;
counterEnd = json['counterEnd'] ?? 0;
concurrentCallDelaySec = json['concurrentCallDelaySec'] ?? 1;
voiceType = json['voiceType'];
voiceTypeText = json['voiceTypeText'];
screenLanguageEnum = (json['screenLanguage'] as int).toLanguageEnum();
screenLanguageText = json['screenLanguageText'];
// textDirection = json['textDirection'] == 2 ? TextDirection.rtl : TextDirection.ltr;
textDirection = TextDirection.rtl;
voiceType = json['voiceType'] ?? 0;
voiceTypeText = defaultIfNullOrEmpty(json['voiceTypeText'], "");
screenLanguageEnum = ((json['screenLanguage'] ?? 1) as int).toLanguageEnum();
screenLanguageText = defaultIfNullOrEmpty(json['screenLanguageText'], "English");
textDirection = json['textDirection'] == 2 ? TextDirection.rtl : TextDirection.ltr;
voiceLanguageEnum = ((json['voiceLanguage'] ?? 1) as int).toLanguageEnum();
voiceLanguageText = defaultIfNullOrEmpty(json['voiceLanguageText'], "English");
screenMaxDisplayPatients = json['screenMaxDisplayPatients'] ?? 16;
// screenMaxDisplayPatients = 15;
voiceLanguageEnum = (json['voiceLanguage'] as int).toLanguageEnum();
voiceLanguageText = json['voiceLanguageText'];
isNotiReq = json['isNotiReq'];
prioritySMS = json['prioritySMS'];
priorityWhatsApp = json['priorityWhatsApp'];
priorityEmail = json['priorityEmail'];
ticketNoText = json['ticketNoText'] ?? "Ticket Number";
postVoiceText = json['pleaseVisitCounterText'] ?? "Please Visit Counter";
roomNo = json['roomNo'];
isNotiReq = json['isNotiReq'] ?? false;
prioritySMS = json['prioritySMS'] ?? 0;
priorityWhatsApp = json['priorityWhatsApp'] ?? 0;
priorityEmail = json['priorityEmail'] ?? 0;
ticketNoText = defaultIfNullOrEmpty(json['ticketNoText'], "Ticket Number");
pleaseVisitCounterTextEn = defaultIfNullOrEmpty(json['pleaseVisitCounterText'], "Please Visit Counter");
pleaseVisitCounterTextAr = defaultIfNullOrEmpty(json['pleaseVisitCounterTextAr'], "يرجى زيارة الكاونتر");
roomNo = json['roomNo'] ?? 0;
isRoomNoRequired = json['isRoomNoReq'] ?? true;
queueNoTextEng = json['queueNoText'];
callForTextEng = json['callForText'];
counterTextEng = json['counterText'];
roomTextEng = json['roomText'];
queueNoTextArb = json['queueNoTextAr'] ?? "الرقم";
callForTextArb = json['callForTextAr'] ?? "التوجه إلى";
counterTextArb = json['counterTextAr'] ?? "";
roomTextArb = json['roomTextAr'] ?? "الغرفة";
currentServeTextEng = json['currentServeText'];
currentServeTextArb = json['currentServeTextAr'] ?? "يتم خدمة";
maxText = json['maxText'] ?? "";
minText = json['minText'] ?? "";
nextPrayerTextEng = json['nextPrayerText'] ?? "Next Prayer";
nextPrayerTextArb = json['nextPrayerTextArb'] ?? "الصلاة القادمة";
weatherText = json['weatherText'] ?? "Weather";
fajarTextEng = json['fajarText'];
dhuhrTextEng = json['dhuhrText'];
asarTextEng = json['asarText'];
maghribTextEng = json['maghribText'];
ishaTextEng = json['ishaText'];
fajarTextArb = json['fajarTextAr'] ?? AppStrings.prayersArray[0];
dhuhrTextArb = json['dhuhrTextAr'] ?? AppStrings.prayersArray[1];
asarTextArb = json['asarTextAr'] ?? AppStrings.prayersArray[2];
maghribTextArb = json['maghribTextAr'] ?? AppStrings.prayersArray[3];
ishaTextArb = json['ishaTextAr'] ?? AppStrings.prayersArray[4];
isActive = json['isActive'];
createdBy = json['createdBy'];
createdOn = json['createdOn'];
queueNoTextEng = defaultIfNullOrEmpty(json['queueNoText'], "Queue Number");
callForTextEng = defaultIfNullOrEmpty(json['callForText'], "Please Proceed");
counterTextEng = defaultIfNullOrEmpty(json['counterText'], "Counter");
roomTextEng = defaultIfNullOrEmpty(json['roomText'], "Room");
queueNoTextArb = defaultIfNullOrEmpty(json['queueNoTextAr'], "الرقم");
callForTextArb = defaultIfNullOrEmpty(json['callForTextAr'], "التوجه إلى");
counterTextArb = defaultIfNullOrEmpty(json['counterTextAr'], "الكاونتر");
roomTextArb = defaultIfNullOrEmpty(json['roomTextAr'], "الغرفة");
currentServeTextEng = defaultIfNullOrEmpty(json['currentServeText'], "Current Serving");
currentServeTextArb = defaultIfNullOrEmpty(json['currentServeTextAr'], "يتم خدمة");
maxText = defaultIfNullOrEmpty(json['maxText'], "");
minText = defaultIfNullOrEmpty(json['minText'], "");
nextPrayerTextEng = defaultIfNullOrEmpty(json['nextPrayerText'], "Next Prayer");
nextPrayerTextArb = defaultIfNullOrEmpty(json['nextPrayerTextArb'], "الصلاة القادمة");
weatherText = defaultIfNullOrEmpty(json['weatherText'], "Weather");
fajarTextEng = defaultIfNullOrEmpty(json['fajarText'], "Fajr");
dhuhrTextEng = defaultIfNullOrEmpty(json['dhuhrText'], "Dhuhr");
asarTextEng = defaultIfNullOrEmpty(json['asarText'], "Asar");
maghribTextEng = defaultIfNullOrEmpty(json['maghribText'], "Maghrib");
ishaTextEng = defaultIfNullOrEmpty(json['ishaText'], "Isha");
fajarTextArb = defaultIfNullOrEmpty(json['fajarTextAr'], AppStrings.prayersArray[0]);
dhuhrTextArb = defaultIfNullOrEmpty(json['dhuhrTextAr'], AppStrings.prayersArray[1]);
asarTextArb = defaultIfNullOrEmpty(json['asarTextAr'], AppStrings.prayersArray[2]);
maghribTextArb = defaultIfNullOrEmpty(json['maghribTextAr'], AppStrings.prayersArray[3]);
ishaTextArb = defaultIfNullOrEmpty(json['ishaTextAr'], AppStrings.prayersArray[4]);
isActive = json['isActive'] ?? true;
createdBy = json['createdBy'] ?? 0;
createdOn = defaultIfNullOrEmpty(json['createdOn'], "");
editedBy = json['editedBy'];
editedOn = json['editedOn'];
isToneReq = json['isToneReq'] ?? false;
isVoiceReq = json['isVoiceReq'] ?? false;
orientationTypeEnum = ((json['orientationType'] ?? 1) as int).toScreenOrientationEnum();
isTurnOn = json['isTurnOn'];
waitingAreaType = json['waitingAreaType'];
gender = json['gender'];
isTurnOn = json['isTurnOn'] ?? true;
waitingAreaType = json['waitingAreaType'] ?? 0;
gender = json['gender'] ?? 0;
isWeatherReq = json['isWeatherReq'] ?? false;
isPrayerTimeReq = json['isPrayerTimeReq'] ?? false;
isRssFeedReq = json['isRssFeedReq'] ?? false;
qTypeEnum = ((json['qType'] ?? qType) as int).toQTypeEnum();
screenTypeEnum = ((json['screenType'] ?? screenType) as int).toScreenTypeEnum();
projectID = json['projectID'];
projectLatitude = json['projectLatitude'] == 0 ? 0.0 : json['projectLatitude'];
projectLongitude = json['projectLongitude'] == 0 ? 0.0 : json['projectLongitude'];
projectID = json['projectID'] ?? 0;
projectLatitude = json['projectLatitude']?.toDouble() ?? 0.0;
projectLongitude = json['projectLongitude']?.toDouble() ?? 0.0;
cityKey = json['cityKey'] ?? 0;
if (json['kioskQueue'] != null) {
kioskQueueList = List<KioskQueueModel>.from(json['kioskQueue'].map((kioskQueueJson) => KioskQueueModel.fromJson(kioskQueueJson)));
@ -274,33 +280,31 @@ class GlobalConfigurationsModel {
} else {
kioskLanguageConfigList = [];
}
// Default to false; actual value (based on device IP) is set in ViewModel after loading config
isFromTakhasusiMain = false;
vitalSignTextEng = json['vitalSignText'];
doctorTextEng = json['doctorText'];
procedureTextEng = json['procedureText'];
vaccinationTextEng = json['vaccinationText'];
nebulizationTextEng = json['nebulizationText'];
callForVitalSignTextEng = json['callForVitalSignText'];
callForDoctorTextEng = json['callForDoctorText'];
callForProcedureTextEng = json['callForProcedureText'];
callForVaccinationTextEng = json['callForVaccinationText'];
callForNebulizationTextEng = json['callForNebulizationText'];
vitalSignTextArb = json['vitalSignTextAr'] ?? "غرفة العلامات الحيوية";
doctorTextArb = json['doctorTextAr'] ?? " غرفة الطبيب";
procedureTextArb = json['procedureTextAr'] ?? "غرفة الإجراء";
vaccinationTextArb = json['vaccinationTextAr'] ?? "غرفة التطعيم";
nebulizationTextArb = json['nebulizationTextAr'] ?? "غرفة البخاخة";
callForVitalSignTextArb = json['callForVitalSignTextAr'] ?? " غرفة استدعاء للعلامات الحيوية";
callForDoctorTextArb = json['callForDoctorTextAr'] ?? "الرجاء التوجّه إلى غرفة الطبيب";
callForProcedureTextArb = json['callForProcedureTextAr'] ?? "الرجاء التوجّه إلى غرفة الإجراء";
callForVaccinationTextArb = json['callForVaccinationTextAr'] ?? "الرجاء لتوجّه إلى غرفة التطعيم";
callForNebulizationTextArb = json['callForNebulizationTextAr'] ?? "الرجاء التوجّه إلى غرفة البخاخة";
vitalSignTextEng = defaultIfNullOrEmpty(json['vitalSignText'], "Vital Sign");
doctorTextEng = defaultIfNullOrEmpty(json['doctorText'], "Doctor");
procedureTextEng = defaultIfNullOrEmpty(json['procedureText'], "Procedure");
vaccinationTextEng = defaultIfNullOrEmpty(json['vaccinationText'], "Vaccination");
nebulizationTextEng = defaultIfNullOrEmpty(json['nebulizationText'], "Nebulization");
callForVitalSignTextEng = defaultIfNullOrEmpty(json['callForVitalSignText'], "Call for Vital Sign");
callForDoctorTextEng = defaultIfNullOrEmpty(json['callForDoctorText'], "Call for Doctor");
callForProcedureTextEng = defaultIfNullOrEmpty(json['callForProcedureText'], "Call for Procedure");
callForVaccinationTextEng = defaultIfNullOrEmpty(json['callForVaccinationText'], "Call for Vaccination");
callForNebulizationTextEng = defaultIfNullOrEmpty(json['callForNebulizationText'], "Call for Nebulization");
vitalSignTextArb = defaultIfNullOrEmpty(json['vitalSignTextAr'], "العلامات الحيوية");
doctorTextArb = defaultIfNullOrEmpty(json['doctorTextAr'], "الطبيب");
procedureTextArb = defaultIfNullOrEmpty(json['procedureTextAr'], "الإجراء");
vaccinationTextArb = defaultIfNullOrEmpty(json['vaccinationTextAr'], "التطعيم");
nebulizationTextArb = defaultIfNullOrEmpty(json['nebulizationTextAr'], "البخاخة");
callForVitalSignTextArb = defaultIfNullOrEmpty(json['callForVitalSignTextAr'], "الرجاء التوجّه إلى غرفة العلامات الحيوية");
callForDoctorTextArb = defaultIfNullOrEmpty(json['callForDoctorTextAr'], "الرجاء التوجّه إلى غرفة الطبيب");
callForProcedureTextArb = defaultIfNullOrEmpty(json['callForProcedureTextAr'], "الرجاء التوجّه إلى غرفة الإجراء");
callForVaccinationTextArb = defaultIfNullOrEmpty(json['callForVaccinationTextAr'], "الرجاء التوجّه إلى غرفة التطعيم");
callForNebulizationTextArb = defaultIfNullOrEmpty(json['callForNebulizationTextAr'], "الرجاء التوجّه إلى غرفة البخاخة");
}
@override
String toString() {
return 'GlobalConfigurationsModel{id: $id, isFromTakhasusiMain: $isFromTakhasusiMain, configType: $configType, description: $description, counterStart: $counterStart, counterEnd: $counterEnd, concurrentCallDelaySec: $concurrentCallDelaySec, voiceType: $voiceType, voiceTypeText: $voiceTypeText, screenLanguageEnum: $screenLanguageEnum, screenLanguageText: $screenLanguageText, textDirection: $textDirection, voiceLanguageEnum: $voiceLanguageEnum, voiceLanguageText: $voiceLanguageText, screenMaxDisplayPatients: $screenMaxDisplayPatients, isNotiReq: $isNotiReq, prioritySMS: $prioritySMS, priorityWhatsApp: $priorityWhatsApp, priorityEmail: $priorityEmail, ticketNoText: $ticketNoText, postVoiceText: $postVoiceText, roomText: $roomTextEng, roomNo: $roomNo, isRoomNoRequired: $isRoomNoRequired, counterText: $counterTextEng, queueNoText: $queueNoTextEng, callForText: $callForTextEng, currentServeTextArb: $currentServeTextArb,, currentServeTextEng: $currentServeTextEng, maxText: $maxText, minText: $minText, nextPrayerTextEng: $nextPrayerTextEng, nextPrayerTextArb: $nextPrayerTextArb, weatherText: $weatherText, fajarText: $fajarTextEng, dhuhrText: $dhuhrTextEng, asarText: $asarTextEng, maghribText: $maghribTextEng, ishaText: $ishaTextEng, isActive: $isActive, createdBy: $createdBy, createdOn: $createdOn, editedBy: $editedBy, editedOn: $editedOn, isToneReq: $isToneReq, isVoiceReq: $isVoiceReq, orientationTypeEnum: $orientationTypeEnum, isTurnOn: $isTurnOn, waitingAreaType: $waitingAreaType, gender: $gender, isWeatherReq: $isWeatherReq, isPrayerTimeReq: $isPrayerTimeReq, isRssFeedReq: $isRssFeedReq, qTypeEnum: $qTypeEnum, screenTypeEnum: $screenTypeEnum, projectID: $projectID, projectLatitude: $projectLatitude, projectLongitude: $projectLongitude, cityKey: $cityKey, kioskQueueList: $kioskQueueList, kioskLanguageConfigList: $kioskLanguageConfigList, vitalSignText: $vitalSignTextEng, doctorText: $doctorTextEng, procedureText: $procedureTextEng, vaccinationText: $vaccinationTextEng, nebulizationText: $nebulizationTextEng, callForVitalSignText: $callForVitalSignTextEng, callForDoctorText: $callForDoctorTextEng, callForProcedureText: $callForProcedureTextEng, callForVaccinationText: $callForVaccinationTextEng, callForNebulizationText: $callForNebulizationTextEng, vitalSignTextArb: $vitalSignTextArb, doctorTextArb: $doctorTextArb, procedureTextArb: $procedureTextArb, vaccinationTextArb: $vaccinationTextArb, nebulizationTextArb: $nebulizationTextArb, callForVitalSignTextArb: $callForVitalSignTextArb, callForDoctorTextArb: $callForDoctorTextArb, callForProcedureTextArb: $callForProcedureTextArb, callForVaccinationTextArb: $callForVaccinationTextArb, callForNebulizationTextArb: $callForNebulizationTextArb}';
return 'GlobalConfigurationsModel{id: $id, isFromTakhasusiMain: $isFromTakhasusiMain, configType: $configType, description: $description, counterStart: $counterStart, counterEnd: $counterEnd, concurrentCallDelaySec: $concurrentCallDelaySec, voiceType: $voiceType, voiceTypeText: $voiceTypeText, screenLanguageEnum: $screenLanguageEnum, screenLanguageText: $screenLanguageText, textDirection: $textDirection, voiceLanguageEnum: $voiceLanguageEnum, voiceLanguageText: $voiceLanguageText, screenMaxDisplayPatients: $screenMaxDisplayPatients, isNotiReq: $isNotiReq, prioritySMS: $prioritySMS, priorityWhatsApp: $priorityWhatsApp, priorityEmail: $priorityEmail, ticketNoText: $ticketNoText, pleaseVisitCounterTextEn: $pleaseVisitCounterTextEn,pleaseVisitCounterTextAr: $pleaseVisitCounterTextAr, roomText: $roomTextEng, roomNo: $roomNo, isRoomNoRequired: $isRoomNoRequired, counterText: $counterTextEng, queueNoText: $queueNoTextEng, callForText: $callForTextEng, currentServeTextArb: $currentServeTextArb,, currentServeTextEng: $currentServeTextEng, maxText: $maxText, minText: $minText, nextPrayerTextEng: $nextPrayerTextEng, nextPrayerTextArb: $nextPrayerTextArb, weatherText: $weatherText, fajarText: $fajarTextEng, dhuhrText: $dhuhrTextEng, asarText: $asarTextEng, maghribText: $maghribTextEng, ishaText: $ishaTextEng, isActive: $isActive, createdBy: $createdBy, createdOn: $createdOn, editedBy: $editedBy, editedOn: $editedOn, isToneReq: $isToneReq, isVoiceReq: $isVoiceReq, orientationTypeEnum: $orientationTypeEnum, isTurnOn: $isTurnOn, waitingAreaType: $waitingAreaType, gender: $gender, isWeatherReq: $isWeatherReq, isPrayerTimeReq: $isPrayerTimeReq, isRssFeedReq: $isRssFeedReq, qTypeEnum: $qTypeEnum, screenTypeEnum: $screenTypeEnum, projectID: $projectID, projectLatitude: $projectLatitude, projectLongitude: $projectLongitude, cityKey: $cityKey, kioskQueueList: $kioskQueueList, kioskLanguageConfigList: $kioskLanguageConfigList, vitalSignText: $vitalSignTextEng, doctorText: $doctorTextEng, procedureText: $procedureTextEng, vaccinationText: $vaccinationTextEng, nebulizationText: $nebulizationTextEng, callForVitalSignText: $callForVitalSignTextEng, callForDoctorText: $callForDoctorTextEng, callForProcedureText: $callForProcedureTextEng, callForVaccinationText: $callForVaccinationTextEng, callForNebulizationText: $callForNebulizationTextEng, vitalSignTextArb: $vitalSignTextArb, doctorTextArb: $doctorTextArb, procedureTextArb: $procedureTextArb, vaccinationTextArb: $vaccinationTextArb, nebulizationTextArb: $nebulizationTextArb, callForVitalSignTextArb: $callForVitalSignTextArb, callForDoctorTextArb: $callForDoctorTextArb, callForProcedureTextArb: $callForProcedureTextArb, callForVaccinationTextArb: $callForVaccinationTextArb, callForNebulizationTextArb: $callForNebulizationTextArb}';
}
}

@ -11,104 +11,105 @@ class TicketDetailsModel {
TicketDetailsModel({this.qTypeEnum, this.screenTypeEnum, this.connectionID, this.ticketModel});
TicketDetailsModel.fromJson(Map<String, dynamic> json) {
qTypeEnum = json['qType'] != null ? (json['qType'] as int).toQTypeEnum() : null;
screenTypeEnum = json['screenType'] != null ? (json['screenType'] as int).toScreenTypeEnum() : null;
connectionID = json['connectionID'];
qTypeEnum = json['qType'] != null ? (json['qType'] as int).toQTypeEnum() : QTypeEnum.appointment;
screenTypeEnum = json['screenType'] != null ? (json['screenType'] as int).toScreenTypeEnum() : ScreenTypeEnum.waitingAreaScreen;
connectionID = json['connectionID'] ?? '';
ticketModel = json['data'] != null
? TicketData.fromJson(
json['data'],
qTypeEnum: json['qType'] != null ? (json['qType'] as int).toQTypeEnum() : null,
qTypeEnum: qTypeEnum,
)
: null;
: TicketData(); // Use default empty TicketData if null
}
}
class TicketData {
int? id;
int? patientID;
int? laBQGroupID;
String? queueNo;
int? counterBatchNo;
int? calledBy;
String? calledOn;
String? servedOn;
String? patientName;
String? mobileNo;
String? patientEmail;
int? preferredLang;
LanguageEnum voiceLanguageEnum = LanguageEnum.english;
String ticketNoText = "Ticket Number";
String postVoiceText = "Please Visit Counter";
int? patientGender;
String? roomNo;
bool? isActive;
int? createdBy;
int? editedBy;
int id;
int patientID;
int laBQGroupID;
String queueNo;
int counterBatchNo;
int calledBy;
String calledOn;
String servedOn;
String patientName;
String mobileNo;
String patientEmail;
int preferredLang;
LanguageEnum voiceLanguageEnum;
String ticketNoText;
String postVoiceText;
int patientGender;
String roomNo;
bool isActive;
int createdBy;
int editedBy;
DateTime? editedOn;
DateTime? createdOn;
// New fields
String? doctorNameN;
CallTypeEnum callTypeEnum = CallTypeEnum.vitalSign;
String? queueNoM;
String? callNoStr;
bool? isQueue;
bool? isToneReq;
bool? isVoiceReq;
int? orientationType;
bool? isTurnOn;
int? concurrentCallDelaySec;
String? crTypeAckIP;
int voiceLanguage = 1;
String voiceLanguageText = "English";
String vitalSignText = "Vital Sign";
String doctorText = "Doctor";
String procedureText = "Procedure";
String vaccinationText = "Vaccination";
String nebulizationText = "Nebulization";
String callForVitalSignText = "Call for Vital Sign";
String callForDoctorText = "Call for Doctor";
String callForProcedureText = "Call for Procedure";
String callForVaccinationText = "Call for Vaccination";
String callForNebulizationText = "Call for Nebulization";
String roomText = "Room";
String queueNoText = "Counter";
String callForText = "Call For";
String doctorNameN;
CallTypeEnum callTypeEnum;
String queueNoM;
String callNoStr;
bool isQueue;
bool isToneReq;
bool isVoiceReq;
int orientationType;
bool isTurnOn;
int concurrentCallDelaySec;
String crTypeAckIP;
int voiceLanguage;
String voiceLanguageText;
String vitalSignText;
String doctorText;
String procedureText;
String vaccinationText;
String nebulizationText;
String callForVitalSignText;
String callForDoctorText;
String callForProcedureText;
String callForVaccinationText;
String callForNebulizationText;
String roomText;
String queueNoText;
String callForText;
TicketData({
this.id,
this.patientID,
this.laBQGroupID,
this.queueNo,
this.counterBatchNo,
this.calledBy,
this.calledOn,
this.servedOn,
this.patientName,
this.mobileNo,
this.patientEmail,
this.preferredLang,
this.id = 0,
this.patientID = 0,
this.laBQGroupID = 0,
this.queueNo = "",
this.counterBatchNo = 0,
this.calledBy = 0,
this.calledOn = "",
this.servedOn = "",
this.patientName = "",
this.mobileNo = "",
this.patientEmail = "",
this.preferredLang = 1,
this.voiceLanguageEnum = LanguageEnum.english,
this.ticketNoText = "Ticket Number",
this.postVoiceText = "Please Visit Counter",
this.patientGender,
this.roomNo,
this.isActive,
this.createdBy,
this.createdOn,
this.editedBy,
this.editedOn,
this.doctorNameN,
this.callTypeEnum = CallTypeEnum.vitalSign,
this.queueNoM,
this.callNoStr,
this.isQueue,
this.isToneReq,
this.isVoiceReq,
this.orientationType,
this.isTurnOn,
this.concurrentCallDelaySec,
this.crTypeAckIP,
this.patientGender = 1,
this.roomNo = "",
this.isActive = true,
this.createdBy = 0,
this.createdOn, // will fallback in fromJson (see below)
this.editedBy = 0,
this.editedOn, // will fallback in fromJson (see below)
this.doctorNameN = "",
this.callTypeEnum = CallTypeEnum.none,
this.queueNoM = "",
this.callNoStr = "",
this.isQueue = false,
this.isToneReq = false,
this.isVoiceReq = false,
this.orientationType = 1,
this.isTurnOn = true,
this.concurrentCallDelaySec = 1,
this.crTypeAckIP = "",
this.voiceLanguage = 1,
this.voiceLanguageText = "English",
this.vitalSignText = "Vital Sign",
this.doctorText = "Doctor",
@ -125,63 +126,61 @@ class TicketData {
this.callForText = "Call For",
});
TicketData.fromJson(Map<String, dynamic> json, {QTypeEnum? qTypeEnum}) {
id = json['id'];
patientID = json['patientID'];
laBQGroupID = json['laB_QGroupID'];
queueNo = json['queueNoM'];
counterBatchNo = json['counterBatchNo'];
calledBy = json['calledBy'];
calledOn = json['calledOn'];
servedOn = json['servedOn'];
patientName = json['patientName'];
mobileNo = json['mobileNo'];
patientEmail = json['patientEmail'];
preferredLang = (json['preferredLang'] != null && json['preferredLang'].toString().trim() != "") ? int.parse(json['preferredLang'].toString()) : 1;
voiceLanguageEnum = (json['preferredLang'] != null && json['preferredLang'].toString().trim() != "") ? (int.parse(json['preferredLang'].toString())).toLanguageEnum() : LanguageEnum.english;
ticketNoText = json['ticketNoText'] ?? "Ticket Number";
postVoiceText = json['pleaseVisitCounterText'] ?? "Please Visit Counter";
patientGender = json['patientGender'] ?? 1;
roomNo = json['roomNo']?.toString();
if (qTypeEnum != null && qTypeEnum == QTypeEnum.general) {
roomNo = json['counterNo']?.toString();
}
isActive = json['isActive'];
createdBy = json['createdBy'];
editedBy = json['editedBy'];
editedOn = json['editedOn'] != null ? (json['editedOn'] as String).toDateTime() : DateTime.now();
createdOn = json['createdOn'] != null ? (json['createdOn'] as String).toDateTime() : DateTime.now();
doctorNameN = json['doctorNameN'];
callTypeEnum = ((json['callType'] ?? 1) as int).toCallTypeEnum();
queueNoM = json['queueNoM'];
callNoStr = json['callNoStr'];
isQueue = json['isQueue'];
isToneReq = json['isToneReq'];
isVoiceReq = json['isVoiceReq'];
orientationType = json['orientationType'];
isTurnOn = json['isTurnOn'];
concurrentCallDelaySec = json['concurrentCallDelaySec'];
crTypeAckIP = json['crTypeAckIP'];
voiceLanguage = json['voiceLanguage'] ?? 1;
voiceLanguageText = json['voiceLanguageText'] ?? "English";
vitalSignText = json['vitalSignText'];
doctorText = json['doctorText'];
procedureText = json['procedureText'];
vaccinationText = json['vaccinationText'];
nebulizationText = json['nebulizationText'];
callForVitalSignText = json['callForVitalSignText'];
callForDoctorText = json['callForDoctorText'];
callForProcedureText = json['callForProcedureText'];
callForVaccinationText = json['callForVaccinationText'];
callForNebulizationText = json['callForNebulizationText'];
roomText = json['roomText'];
queueNoText = json['queueNoText'];
callForText = json['callForText'];
}
TicketData.fromJson(Map<String, dynamic> json, {QTypeEnum? qTypeEnum})
: id = json['id'] ?? 0,
patientID = json['patientID'] ?? 0,
laBQGroupID = json['laB_QGroupID'] ?? 0,
queueNo = json['queueNo'] ?? "",
counterBatchNo = json['counterBatchNo'] ?? 0,
calledBy = json['calledBy'] ?? 0,
calledOn = json['calledOn'] ?? "",
servedOn = json['servedOn'] ?? "",
patientName = json['patientName'] ?? "",
mobileNo = json['mobileNo'] ?? "",
patientEmail = json['patientEmail'] ?? "",
preferredLang = (json['preferredLang'] != null && json['preferredLang'].toString().trim() != "") ? int.parse(json['preferredLang'].toString()) : 1,
voiceLanguageEnum = (json['preferredLang'] != null && json['preferredLang'].toString().trim() != "") ? (int.parse(json['preferredLang'].toString())).toLanguageEnum() : LanguageEnum.english,
ticketNoText = json['ticketNoText'] ?? "Ticket Number",
postVoiceText = json['pleaseVisitCounterText'] ?? "Please Visit Counter",
patientGender = json['patientGender'] ?? 1,
roomNo = (() {
if (qTypeEnum != null && qTypeEnum == QTypeEnum.general) {
return json['counterNo']?.toString() ?? "";
}
return json['roomNo']?.toString() ?? "";
})(),
isActive = json['isActive'] ?? true,
createdBy = json['createdBy'] ?? 0,
editedBy = json['editedBy'] ?? 0,
createdOn = json['createdOn'] != null ? (json['createdOn'] as String).toDateTime() : DateTime.now(),
editedOn = json['editedOn'] != null ? (json['editedOn'] as String).toDateTime() : DateTime.now(),
doctorNameN = json['doctorNameN'] ?? "",
callTypeEnum = ((json['callType'] ?? 0) as int).toCallTypeEnum(),
queueNoM = json['queueNoM'] ?? "",
callNoStr = json['callNoStr'] ?? "",
isQueue = json['isQueue'] ?? false,
isToneReq = json['isToneReq'] ?? false,
isVoiceReq = json['isVoiceReq'] ?? false,
orientationType = json['orientationType'] ?? 1,
isTurnOn = json['isTurnOn'] ?? true,
concurrentCallDelaySec = json['concurrentCallDelaySec'] ?? 1,
crTypeAckIP = json['crTypeAckIP'] ?? "",
voiceLanguage = json['voiceLanguage'] ?? 1,
voiceLanguageText = json['voiceLanguageText'] ?? "English",
vitalSignText = json['vitalSignText'] ?? "Vital Sign",
doctorText = json['doctorText'] ?? "Doctor",
procedureText = json['procedureText'] ?? "Procedure",
vaccinationText = json['vaccinationText'] ?? "Vaccination",
nebulizationText = json['nebulizationText'] ?? "Nebulization",
callForVitalSignText = json['callForVitalSignText'] ?? "Call for Vital Sign",
callForDoctorText = json['callForDoctorText'] ?? "Call for Doctor",
callForProcedureText = json['callForProcedureText'] ?? "Call for Procedure",
callForVaccinationText = json['callForVaccinationText'] ?? "Call for Vaccination",
callForNebulizationText = json['callForNebulizationText'] ?? "Call for Nebulization",
roomText = json['roomText'] ?? "Room",
queueNoText = json['queueNoText'] ?? "Counter",
callForText = json['callForText'] ?? "Call For";
@override
String toString() {
return 'TicketData{id: $id, patientID: $patientID, laBQGroupID: $laBQGroupID, queueNo: $queueNo, counterBatchNo: $counterBatchNo, calledBy: $calledBy, calledOn: $calledOn, servedOn: $servedOn, patientName: $patientName, mobileNo: $mobileNo, patientEmail: $patientEmail, preferredLang: $preferredLang, voiceLanguageEnum: $voiceLanguageEnum, ticketNoText: $ticketNoText, postVoiceText: $postVoiceText, patientGender: $patientGender, roomNo: $roomNo, isActive: $isActive, createdBy: $createdBy, editedBy: $editedBy, editedOn: $editedOn, createdOn: $createdOn, doctorNameN: $doctorNameN, callTypeEnum: $callTypeEnum, queueNoM: $queueNoM, callNoStr: $callNoStr, isQueue: $isQueue, isToneReq: $isToneReq, isVoiceReq: $isVoiceReq, orientationType: $orientationType, isTurnOn: $isTurnOn, concurrentCallDelaySec: $concurrentCallDelaySec, crTypeAckIP: $crTypeAckIP, voiceLanguage: $voiceLanguage, voiceLanguageText: $voiceLanguageText, vitalSignText: $vitalSignText, doctorText: $doctorText, procedureText: $procedureText, vaccinationText: $vaccinationText, nebulizationText: $nebulizationText, callForVitalSignText: $callForVitalSignText, callForDoctorText: $callForDoctorText, callForProcedureText: $callForProcedureText, callForVaccinationText: $callForVaccinationText, callForNebulizationText: $callForNebulizationText, roomText: $roomText, queueNoText: $queueNoText, callForText: $callForText}';
}
String toString() => 'TicketData{id: $id, patientID: $patientID, laBQGroupID: $laBQGroupID, queueNo: $queueNo, ...}';
}

@ -95,7 +95,7 @@ class LoggerServiceImp implements LoggerService {
try {
ScreenConfigViewModel screenConfigViewModel = getIt.get<ScreenConfigViewModel>();
final timestamp = DateFormat('yyyy-MM-dd hh:mm:ss a').format(DateTime.now());
final sep = '==================== CRASH ====================';
const sep = '==================== CRASH ====================';
final contextStr = context ?? 'No context provided';
final errorMsg = error.toString();
final stack = stackTrace?.toString() ?? 'No stack trace available';

@ -166,6 +166,7 @@ extension LanguageEnumToString on LanguageEnum {
extension XCallType on CallTypeEnum {
Color getColorByCallType() {
log("getColorByCallType: $this");
if (this == CallTypeEnum.vitalSign) {
return AppColors.newVitalSignColor;
} else if (this == CallTypeEnum.doctor) {
@ -176,9 +177,10 @@ extension XCallType on CallTypeEnum {
return AppColors.vaccinationColor;
} else if (this == CallTypeEnum.nebulization) {
return AppColors.nebulizationColor;
} else {
return Colors.black54;
} else if (this == CallTypeEnum.none) {
return AppColors.newDoctorColor;
}
return AppColors.newDoctorColor;
}
String getMessageByCallTypeForEnglish(GlobalConfigurationsModel globalConfig, {bool isListView = false}) {
@ -194,7 +196,7 @@ extension XCallType on CallTypeEnum {
case CallTypeEnum.nebulization:
return !isListView ? globalConfig.callForNebulizationTextEng : globalConfig.nebulizationTextEng;
case CallTypeEnum.none:
return !isListView ? globalConfig.callForVitalSignTextEng : globalConfig.vitalSignTextEng;
return !isListView ? (globalConfig.pleaseVisitCounterTextEn ?? '') : (globalConfig.counterTextEng ?? '');
}
}
@ -211,11 +213,15 @@ extension XCallType on CallTypeEnum {
case CallTypeEnum.nebulization:
return !isListView ? globalConfig.callForNebulizationTextArb : globalConfig.nebulizationTextArb;
case CallTypeEnum.none:
return !isListView ? globalConfig.callForVitalSignTextArb : globalConfig.vitalSignTextArb;
return !isListView ? (globalConfig.pleaseVisitCounterTextAr ?? '') : (globalConfig.counterTextArb ?? '');
}
}
SvgPicture getIconByCallType(double height, {double? width, BoxFit fit = BoxFit.contain}) {
Widget getIconByCallType(double height, QTypeEnum qType, {double? width, BoxFit fit = BoxFit.contain}) {
if (this == CallTypeEnum.vitalSign) {
return const SizedBox.shrink();
}
String iconPath = "";
if (this == CallTypeEnum.vitalSign) {
iconPath = AppAssets.newVitalSignIcon;
@ -229,6 +235,10 @@ extension XCallType on CallTypeEnum {
iconPath = AppAssets.nebulizationIcon;
}
if (qType == QTypeEnum.lab) {
iconPath = AppAssets.labIcon;
}
return SvgPicture.asset(
iconPath.isEmpty ? "assets/images/wait.svg" : iconPath,
height: height,
@ -251,7 +261,7 @@ extension XCallType on CallTypeEnum {
case CallTypeEnum.nebulization:
return 5;
case CallTypeEnum.none:
return 1;
return 0;
}
}
@ -268,7 +278,7 @@ extension XCallType on CallTypeEnum {
case CallTypeEnum.nebulization:
return AppColors.gradientBorderComboForVitalSigns;
case CallTypeEnum.none:
return AppColors.gradientBorderComboForVitalSigns;
return AppColors.gradientBorderComboForDoctor;
}
}
@ -284,8 +294,8 @@ extension XCallType on CallTypeEnum {
return ticket.callForVaccinationText;
case CallTypeEnum.nebulization:
return ticket.callForNebulizationText;
default:
return ticket.callForVitalSignText;
case CallTypeEnum.none:
return '';
}
}
}
@ -297,7 +307,7 @@ extension XCallTypeInt on int {
if (this == 3) return CallTypeEnum.procedure;
if (this == 4) return CallTypeEnum.vaccination;
if (this == 5) return CallTypeEnum.nebulization;
return CallTypeEnum.vitalSign;
return CallTypeEnum.none;
}
}

@ -215,7 +215,9 @@ class QueuingViewModel extends ChangeNotifier {
callTypeEnum: ticketData.callTypeEnum,
);
} else {
screenConfigViewModel.acknowledgeTicket(ticketQueueID: ticketData.id ?? 0);
screenConfigViewModel.acknowledgeTicket(ticketQueueID: ticketData.id ?? 0,
ipAddress: screenConfigViewModel.currentScreenIP,
);
}
log("globalConfigurationsModel: ${globalConfigurationsModel.toString()}");

@ -477,9 +477,9 @@ class ScreenConfigViewModel extends ChangeNotifier {
}
}
Future<void> acknowledgeTicket({required int ticketQueueID}) async {
Future<void> acknowledgeTicket({required int ticketQueueID, required String ipAddress}) async {
GenericRespModel? response = await screenDetailsRepo.acknowledgeTicket(
ipAddress: currentScreenIP,
ipAddress: ipAddress,
ticketQueueID: ticketQueueID,
qTypeEnum: globalConfigurationsModel.qTypeEnum,
);

@ -1,3 +1,5 @@
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:hmg_qline/constants/app_constants.dart';
@ -128,7 +130,7 @@ Widget counterNoText({required int counterNo, required bool isRoomNoRequired, re
fontFamily: AppStrings.fontNamePoppins,
textAlign: TextAlign.center,
fontWeight: FontWeight.bold,
color: isRoomNoRequired ? Colors.black : Colors.transparent,
color: isRoomNoRequired ? AppColors.greyTextColor : Colors.transparent,
fontSize: SizeConfig.getWidthMultiplier() * 8,
);
}

@ -3,10 +3,12 @@ import 'package:flutter/material.dart';
import 'package:hmg_qline/models/global_config_model.dart';
import 'package:hmg_qline/models/ticket_model.dart';
import 'package:hmg_qline/utilities/enums.dart';
import 'package:hmg_qline/view_models/screen_config_view_model.dart';
import 'package:hmg_qline/views/common_widgets/app_general_widgets.dart';
import 'package:hmg_qline/views/main_queue_screen/components/ticket_item_calling_card.dart';
import 'package:hmg_qline/views/main_queue_screen/components/ticket_item_normal_card.dart';
import 'package:hmg_qline/views/view_helpers/size_config.dart';
import 'package:provider/provider.dart';
class PriorityTickets extends StatelessWidget {
final List<TicketDetailsModel> tickets;
@ -93,7 +95,10 @@ class PriorityTickets extends StatelessWidget {
}
Widget _buildPrimaryTicket(BuildContext context, TicketDetailsModel ticket, {bool isFullWidth = false, bool isHalf = false}) {
final screenConfigViewModel = context.read<ScreenConfigViewModel>();
Widget primaryCallingCard = QueueItemCallingCard(
qTypeEnum: screenConfigViewModel.currentQTypeEnum,
isGradientRequired: true,
isBorderRequired: true,
isSingleTicket: isFullWidth,
@ -104,7 +109,7 @@ class PriorityTickets extends StatelessWidget {
roomText: _getRoomText(),
roomTextAr: _getRoomTextAr(),
isClinicAdded: false,
callTypeEnum: ticket.ticketModel?.callTypeEnum ?? CallTypeEnum.vitalSign,
callTypeEnum: ticket.ticketModel?.callTypeEnum ?? CallTypeEnum.none,
textDirection: globalConfigurationsModel.textDirection,
screenTypeEnum: globalConfigurationsModel.screenTypeEnum,
langTypeEnum: globalConfigurationsModel.screenLanguageEnum,
@ -131,7 +136,7 @@ class PriorityTickets extends StatelessWidget {
child: ConstrainedBox(
constraints: BoxConstraints(
maxWidth: MediaQuery.of(context).size.width * 0.6, // 60% of screen width
minHeight: SizeConfig.getHeightMultiplier() * 2.5, // Minimum height
minHeight: SizeConfig.getHeightMultiplier() * 2, // Minimum height
),
child: Transform.scale(
scale: _getTicketScale() + 0.2,
@ -145,13 +150,15 @@ class PriorityTickets extends StatelessWidget {
}
Widget _buildSecondaryTicket(BuildContext context, TicketDetailsModel ticket, {EdgeInsets? margin, bool isHalf = false}) {
final screenConfigViewModel = context.read<ScreenConfigViewModel>();
Widget secondaryCallingCard = QueueItemNormalCard(
qTypeEnum: screenConfigViewModel.currentQTypeEnum,
ticketNo: ticket.ticketModel?.queueNo ?? '',
roomNo: ticket.ticketModel?.roomNo ?? '',
roomText: _getRoomText(),
roomTextAr: _getRoomTextAr(),
isClinicAdded: false,
callTypeEnum: ticket.ticketModel?.callTypeEnum ?? CallTypeEnum.vitalSign,
callTypeEnum: ticket.ticketModel?.callTypeEnum ?? CallTypeEnum.none,
textDirection: globalConfigurationsModel.textDirection,
screenTypeEnum: globalConfigurationsModel.screenTypeEnum,
langTypeEnum: globalConfigurationsModel.screenLanguageEnum,
@ -187,7 +194,7 @@ class PriorityTickets extends StatelessWidget {
// Helper methods to reduce repetition
double _getTicketScale() {
return globalConfigurationsModel.screenTypeEnum == ScreenTypeEnum.roomLevelScreen
? 2.0
? 1.5
: globalConfigurationsModel.isFromTakhasusiMain
? 0.8
: 1.2;

@ -48,62 +48,62 @@ class PriorityTicketsWithSideSection extends StatelessWidget {
),
),
),
if (globalConfigurationsModel.qTypeEnum == QTypeEnum.appointment) ...[
Expanded(
flex: 8,
child: SizedBox(
height: SizeConfig.getHeightMultiplier() * 0.25,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
flex: 2,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ticketModel.callTypeEnum.getIconByCallType(SizeConfig.getHeightMultiplier() * 0.2),
],
),
// if (globalConfigurationsModel.qTypeEnum == QTypeEnum.appointment) ...[
Expanded(
flex: 8,
child: SizedBox(
height: SizeConfig.getHeightMultiplier() * 0.25,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
flex: 2,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ticketModel.callTypeEnum.getIconByCallType(SizeConfig.getHeightMultiplier() * 0.2, globalConfigurationsModel.qTypeEnum),
],
),
Expanded(
flex: 9,
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
),
Expanded(
flex: 9,
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
flex: 3,
child: AppText(
callMessageAr,
color: ticketModel.callTypeEnum.getColorByCallType(),
fontSize: SizeConfig.getWidthMultiplier() * 1.8,
fontWeight: FontWeight.bold,
fontFamily: AppStrings.fontNameGesTwo,
fontHeight: 1,
textOverflow: TextOverflow.clip,
maxLines: 1,
),
),
SizedBox(width: SizeConfig.getWidthMultiplier()),
if (callMessageEng.isNotEmpty) ...[
Expanded(
flex: 3,
flex: 2,
child: AppText(
callMessageAr,
"($callMessageEng)",
color: ticketModel.callTypeEnum.getColorByCallType(),
fontSize: SizeConfig.getWidthMultiplier() * 1.8,
fontWeight: FontWeight.bold,
fontFamily: AppStrings.fontNameGesTwo,
fontFamily: AppStrings.fontNamePoppins,
fontHeight: 1,
textOverflow: TextOverflow.clip,
maxLines: 1,
),
),
SizedBox(width: SizeConfig.getWidthMultiplier()),
if (callMessageEng.isNotEmpty) ...[
Expanded(
flex: 2,
child: AppText(
"($callMessageEng)",
color: ticketModel.callTypeEnum.getColorByCallType(),
fontSize: SizeConfig.getWidthMultiplier() * 1.8,
fontFamily: AppStrings.fontNamePoppins,
fontHeight: 1,
),
),
]
],
),
]
],
),
],
),
),
],
),
),
],
),
// ],
Expanded(
flex: 2,
child: Center(
@ -124,8 +124,6 @@ class PriorityTicketsWithSideSection extends StatelessWidget {
);
}
@override
Widget build(BuildContext context) {
List<TicketDetailsModel> priorityTickets = [];

@ -18,6 +18,7 @@ class QueueItemNormalCard extends StatelessWidget {
final GlobalConfigurationsModel globalConfigurationsModel;
final CallTypeEnum callTypeEnum;
final ScreenTypeEnum screenTypeEnum;
final QTypeEnum qTypeEnum;
final LanguageEnum langTypeEnum;
final double? height;
final double? width;
@ -34,6 +35,7 @@ class QueueItemNormalCard extends StatelessWidget {
required this.callTypeEnum,
required this.screenTypeEnum,
required this.langTypeEnum,
required this.qTypeEnum,
this.height,
this.width,
});
@ -52,7 +54,8 @@ class QueueItemNormalCard extends StatelessWidget {
@override
Widget build(BuildContext context) {
final text = "${callTypeEnum.getMessageByCallTypeForEnglish(globalConfigurationsModel, isListView: false)} | $roomText $roomNo";
final text = callTypeEnum.getMessageByCallTypeForEnglish(globalConfigurationsModel, isListView: false) + (qTypeEnum == QTypeEnum.appointment ? ("| $roomText $roomNo") : "");
return Stack(
children: [
customShadowSmoothContainer(
@ -87,12 +90,12 @@ class QueueItemNormalCard extends StatelessWidget {
flex: 3,
child: Row(
children: [
callTypeEnum.getIconByCallType(SizeConfig.getHeightMultiplier() * 0.35),
callTypeEnum.getIconByCallType(SizeConfig.getHeightMultiplier() * 0.35, qTypeEnum),
],
),
),
Flexible(
flex: 4,
flex: 2,
child: Center(
child: AppText(
textAlign: TextAlign.center,
@ -115,7 +118,7 @@ class QueueItemNormalCard extends StatelessWidget {
padding: EdgeInsets.all(SizeConfig.getHeightMultiplier() * 0.05),
color: callTypeEnum.getColorByCallType(),
child: engArabicTextWithSeparatorWidget(
fontSize: SizeConfig.getWidthMultiplier()! * 1.8,
fontSize: qTypeEnum != QTypeEnum.appointment ? SizeConfig.getWidthMultiplier()! * 1.9 : SizeConfig.getWidthMultiplier()! * 1.8,
englishText: roomNo.extractNumbersIfLong(),
arabicText: roomTextAr,
color: AppColors.whiteColor,

@ -69,7 +69,7 @@ class _MainQueueScreenState extends State<MainQueueScreen> {
// counterNo: 0,
// roomText: '',
// );
log("screenConfigViewModel: ${screenConfigViewModel.currentScreenIP}");
if (screenConfigViewModel.currentQTypeEnum == QTypeEnum.general) {
text = AppStrings.awaitingQueueNumberEng;
}
@ -204,3 +204,4 @@ class _MainQueueScreenState extends State<MainQueueScreen> {
);
}
}

Loading…
Cancel
Save