diff --git a/assets/new_design_icons/lab_icon.svg b/assets/new_design_icons/lab_icon.svg new file mode 100644 index 0000000..245048d --- /dev/null +++ b/assets/new_design_icons/lab_icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/lib/api/api_client.dart b/lib/api/api_client.dart index 44489d6..4e07f60 100644 --- a/lib/api/api_client.dart +++ b/lib/api/api_client.dart @@ -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); diff --git a/lib/constants/app_constants.dart b/lib/constants/app_constants.dart index 9223e46..59fa923 100644 --- a/lib/constants/app_constants.dart +++ b/lib/constants/app_constants.dart @@ -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: 'الطبيب', diff --git a/lib/models/global_config_model.dart b/lib/models/global_config_model.dart index 60820db..20b5c79 100644 --- a/lib/models/global_config_model.dart +++ b/lib/models/global_config_model.dart @@ -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 = "الصلا�� القادمة"; + String nextPrayerTextArb = "الصلاة القادمة"; String weatherText = "Weather"; String? fajarTextEng; String? dhuhrTextEng; @@ -77,7 +78,6 @@ class GlobalConfigurationsModel { List? kioskQueueList; List? 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 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.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}'; } } diff --git a/lib/models/ticket_model.dart b/lib/models/ticket_model.dart index 7a75d75..9408e01 100644 --- a/lib/models/ticket_model.dart +++ b/lib/models/ticket_model.dart @@ -11,104 +11,105 @@ class TicketDetailsModel { TicketDetailsModel({this.qTypeEnum, this.screenTypeEnum, this.connectionID, this.ticketModel}); TicketDetailsModel.fromJson(Map 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 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 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, ...}'; } diff --git a/lib/services/logger_service.dart b/lib/services/logger_service.dart index 24cb012..6c0732a 100644 --- a/lib/services/logger_service.dart +++ b/lib/services/logger_service.dart @@ -95,7 +95,7 @@ class LoggerServiceImp implements LoggerService { try { ScreenConfigViewModel screenConfigViewModel = getIt.get(); 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'; diff --git a/lib/utilities/extensions.dart b/lib/utilities/extensions.dart index 859567f..13f26fb 100644 --- a/lib/utilities/extensions.dart +++ b/lib/utilities/extensions.dart @@ -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; } } diff --git a/lib/view_models/queuing_view_model.dart b/lib/view_models/queuing_view_model.dart index d37f396..99a7611 100644 --- a/lib/view_models/queuing_view_model.dart +++ b/lib/view_models/queuing_view_model.dart @@ -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()}"); diff --git a/lib/view_models/screen_config_view_model.dart b/lib/view_models/screen_config_view_model.dart index d5c8665..9e72288 100644 --- a/lib/view_models/screen_config_view_model.dart +++ b/lib/view_models/screen_config_view_model.dart @@ -477,9 +477,9 @@ class ScreenConfigViewModel extends ChangeNotifier { } } - Future acknowledgeTicket({required int ticketQueueID}) async { + Future acknowledgeTicket({required int ticketQueueID, required String ipAddress}) async { GenericRespModel? response = await screenDetailsRepo.acknowledgeTicket( - ipAddress: currentScreenIP, + ipAddress: ipAddress, ticketQueueID: ticketQueueID, qTypeEnum: globalConfigurationsModel.qTypeEnum, ); diff --git a/lib/views/common_widgets/app_general_widgets.dart b/lib/views/common_widgets/app_general_widgets.dart index b9c2a02..143147c 100644 --- a/lib/views/common_widgets/app_general_widgets.dart +++ b/lib/views/common_widgets/app_general_widgets.dart @@ -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, ); } diff --git a/lib/views/main_queue_screen/components/priority_tickets.dart b/lib/views/main_queue_screen/components/priority_tickets.dart index 6547a3b..83eef4d 100644 --- a/lib/views/main_queue_screen/components/priority_tickets.dart +++ b/lib/views/main_queue_screen/components/priority_tickets.dart @@ -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 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(); + 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(); 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; diff --git a/lib/views/main_queue_screen/components/priority_tickets_sidelist.dart b/lib/views/main_queue_screen/components/priority_tickets_sidelist.dart index c7fbc91..adf76f3 100644 --- a/lib/views/main_queue_screen/components/priority_tickets_sidelist.dart +++ b/lib/views/main_queue_screen/components/priority_tickets_sidelist.dart @@ -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 priorityTickets = []; diff --git a/lib/views/main_queue_screen/components/ticket_item_normal_card.dart b/lib/views/main_queue_screen/components/ticket_item_normal_card.dart index 87b49fa..b6dd2c1 100644 --- a/lib/views/main_queue_screen/components/ticket_item_normal_card.dart +++ b/lib/views/main_queue_screen/components/ticket_item_normal_card.dart @@ -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, diff --git a/lib/views/main_queue_screen/main_queue_screen.dart b/lib/views/main_queue_screen/main_queue_screen.dart index 1915e2d..e9b05d3 100644 --- a/lib/views/main_queue_screen/main_queue_screen.dart +++ b/lib/views/main_queue_screen/main_queue_screen.dart @@ -69,7 +69,7 @@ class _MainQueueScreenState extends State { // counterNo: 0, // roomText: '', // ); - +log("screenConfigViewModel: ${screenConfigViewModel.currentScreenIP}"); if (screenConfigViewModel.currentQTypeEnum == QTypeEnum.general) { text = AppStrings.awaitingQueueNumberEng; } @@ -204,3 +204,4 @@ class _MainQueueScreenState extends State { ); } } +