diff --git a/lib/api/api_client.dart b/lib/api/api_client.dart index a2fed80..18f982d 100644 --- a/lib/api/api_client.dart +++ b/lib/api/api_client.dart @@ -15,14 +15,11 @@ abstract class ApiClient { Future postJsonForObject(FactoryConstructor factoryConstructor, String url, T jsonObject, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}); - Future postJsonForResponse(String url, T jsonObject, - {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}); + Future postJsonForResponse(String url, T jsonObject, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}); - Future getJsonForObject(FactoryConstructor factoryConstructor, String url, - {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}); + Future getJsonForObject(FactoryConstructor factoryConstructor, String url, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}); - Future getJsonForResponse(String url, - {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}); + Future getJsonForResponse(String url, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}); } class ApiClientImp implements ApiClient { @@ -38,9 +35,11 @@ class ApiClientImp implements ApiClient { headers0.addAll(headers); } - var response = - await postJsonForResponse(url, jsonObject, token: token, queryParameters: queryParameters, headers: headers0, retryTimes: retryTimes); + var response = await postJsonForResponse(url, jsonObject, token: token, queryParameters: queryParameters, headers: headers0, retryTimes: retryTimes); try { + if (!kReleaseMode) { + log("responseBody:${response.body}"); + } if (!kReleaseMode) { log("statusCode:${response.statusCode}"); } @@ -54,8 +53,7 @@ class ApiClientImp implements ApiClient { } @override - Future postJsonForResponse(String url, T jsonObject, - {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { + Future postJsonForResponse(String url, T jsonObject, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { String? requestBody; if (jsonObject != null) { requestBody = jsonEncode(jsonObject); @@ -102,7 +100,6 @@ class ApiClientImp implements ApiClient { loggerService.logInfo(jsonDecode(requestBody).toString()); loggerService.logInfo("------Response------"); loggerService.logInfo(jsonDecode(response.body).toString()); - } if (response.statusCode >= 200 && response.statusCode < 500) { @@ -158,8 +155,7 @@ class ApiClientImp implements ApiClient { } } - Future _post(url, {Map? headers, body, Encoding? encoding}) => - _withClient((client) => client.post(url, headers: headers, body: body, encoding: encoding)); + Future _post(url, {Map? headers, body, Encoding? encoding}) => _withClient((client) => client.post(url, headers: headers, body: body, encoding: encoding)); @override Future getJsonForObject(FactoryConstructor factoryConstructor, String url, @@ -179,8 +175,7 @@ class ApiClientImp implements ApiClient { } @override - Future getJsonForResponse(String url, - {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { + Future getJsonForResponse(String url, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { if (headers == null) { headers = {'Content-Type': 'application/json'}; } else { @@ -191,8 +186,7 @@ class ApiClientImp implements ApiClient { bool isFirstCall = true; - Future _getForResponse(String url, - {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { + Future _getForResponse(String url, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { try { var headers0 = {}; if (token != null) { diff --git a/lib/constants/app_constants.dart b/lib/constants/app_constants.dart index 1f500a7..451bb9e 100644 --- a/lib/constants/app_constants.dart +++ b/lib/constants/app_constants.dart @@ -178,7 +178,7 @@ class ApiConstants { static String baseUrlUat = 'https://ms.hmg.com/nscapi'; // UAT static String baseUrlDev = 'https://ms.hmg.com/nscapi2'; // DEV - static String baseUrl = baseUrlDev; + static String baseUrl = baseUrlLive; static String baseUrlHub = '$baseUrl/PatientCallingHub'; static String baseUrlApi = '$baseUrl/api'; static String baseUrlApiGen = '$baseUrl/api/Gen'; @@ -236,7 +236,7 @@ class MockJsonRepo { id: 189805, patientID: 4292695, laBQGroupID: null, - queueNo: 'W-T-4', + queueNo: 'FMC W-T-4', counterBatchNo: null, calledBy: null, calledOn: null, @@ -257,8 +257,8 @@ class MockJsonRepo { createdOn: DateTime.parse('2025-08-18 15:06:07.363'), doctorNameN: null, callTypeEnum: CallTypeEnum.doctor, - queueNoM: 'W-T-4', - callNoStr: 'W_T-4', + queueNoM: 'FMC W-T-4', + callNoStr: 'FMC W-T-4', isQueue: false, isToneReq: false, isVoiceReq: false, @@ -281,6 +281,9 @@ class MockJsonRepo { queueNoText: 'رقم الانتظار', callForText: 'التوجه الى', ); + + + } // RAW DATA: diff --git a/lib/models/global_config_model.dart b/lib/models/global_config_model.dart index 1f3c59a..39ec807 100644 --- a/lib/models/global_config_model.dart +++ b/lib/models/global_config_model.dart @@ -69,6 +69,8 @@ class GlobalConfigurationsModel { bool isWeatherReq = false; bool isPrayerTimeReq = false; bool isRssFeedReq = false; + bool globalClinicPrefixReq = false; + bool clinicPrefixReq = true; QTypeEnum qTypeEnum = QTypeEnum.appointment; ScreenTypeEnum screenTypeEnum = ScreenTypeEnum.waitingAreaScreen; int? projectID; @@ -164,6 +166,8 @@ class GlobalConfigurationsModel { this.isWeatherReq = false, this.isPrayerTimeReq = false, this.isRssFeedReq = false, + this.globalClinicPrefixReq = false, + this.clinicPrefixReq = true, this.qTypeEnum = QTypeEnum.appointment, this.screenTypeEnum = ScreenTypeEnum.waitingAreaScreen, this.projectID, @@ -259,6 +263,8 @@ class GlobalConfigurationsModel { isWeatherReq = json['isWeatherReq'] ?? false; isPrayerTimeReq = json['isPrayerTimeReq'] ?? false; isRssFeedReq = json['isRssFeedReq'] ?? false; + globalClinicPrefixReq = json['globalClinicPrefixReq'] ?? false; + clinicPrefixReq = json['clinicPrefixReq'] ?? true; qTypeEnum = ((json['qType'] ?? qType) as int).toQTypeEnum(); screenTypeEnum = ((json['screenType'] ?? screenType) as int).toScreenTypeEnum(); projectID = json['projectID']; @@ -303,6 +309,6 @@ class GlobalConfigurationsModel { @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, 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, globalClinicPrefixReq: $globalClinicPrefixReq, clinicPrefixReq: $clinicPrefixReq, 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/views/common_widgets/app_footer.dart b/lib/views/common_widgets/app_footer.dart index b073f7e..c499956 100644 --- a/lib/views/common_widgets/app_footer.dart +++ b/lib/views/common_widgets/app_footer.dart @@ -1,6 +1,9 @@ import 'dart:async'; // Add this import +import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; +import 'package:hmg_qline/models/ticket_model.dart'; +import 'package:hmg_qline/view_models/queuing_view_model.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/common_widgets/date_display_widget.dart'; @@ -309,11 +312,16 @@ class _AppFooterState extends State { Padding( padding: EdgeInsets.only(top: SizeConfig.getHeightMultiplier()! * 0.1), child: Column(mainAxisAlignment: MainAxisAlignment.center, children: [ - AppText( - AppStrings.poweredBy, - fontSize: SizeConfig.getWidthMultiplier()! * 1.5, - fontWeight: FontWeight.w400, - color: AppColors.darkGreyTextColor, + InkWell( + onTap: () { + // context.read().addNewTicket(TicketDetailsModel(ticketModel: MockJsonRepo.ticket)); + }, + child: AppText( + AppStrings.poweredBy, + fontSize: SizeConfig.getWidthMultiplier()! * 1.5, + fontWeight: FontWeight.w400, + color: AppColors.darkGreyTextColor, + ), ), AppText( "v${screenConfigVM.currentScreenIP.replaceAll(".", "-")}(${AppConstants.currentBuildVersion})", diff --git a/lib/views/main_queue_screen/components/priority_tickets.dart b/lib/views/main_queue_screen/components/priority_tickets.dart index 6547a3b..b506ed1 100644 --- a/lib/views/main_queue_screen/components/priority_tickets.dart +++ b/lib/views/main_queue_screen/components/priority_tickets.dart @@ -103,7 +103,6 @@ class PriorityTickets extends StatelessWidget { roomNo: ticket.ticketModel?.roomNo ?? '', roomText: _getRoomText(), roomTextAr: _getRoomTextAr(), - isClinicAdded: false, callTypeEnum: ticket.ticketModel?.callTypeEnum ?? CallTypeEnum.vitalSign, textDirection: globalConfigurationsModel.textDirection, screenTypeEnum: globalConfigurationsModel.screenTypeEnum, @@ -150,7 +149,6 @@ class PriorityTickets extends StatelessWidget { roomNo: ticket.ticketModel?.roomNo ?? '', roomText: _getRoomText(), roomTextAr: _getRoomTextAr(), - isClinicAdded: false, callTypeEnum: ticket.ticketModel?.callTypeEnum ?? CallTypeEnum.vitalSign, textDirection: globalConfigurationsModel.textDirection, screenTypeEnum: globalConfigurationsModel.screenTypeEnum, diff --git a/lib/views/main_queue_screen/components/ticket_item_calling_card.dart b/lib/views/main_queue_screen/components/ticket_item_calling_card.dart index 78c4353..0806fff 100644 --- a/lib/views/main_queue_screen/components/ticket_item_calling_card.dart +++ b/lib/views/main_queue_screen/components/ticket_item_calling_card.dart @@ -1,3 +1,5 @@ +import 'dart:developer'; + import 'package:blinking_text/blinking_text.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -14,7 +16,6 @@ class QueueItemCallingCard extends StatelessWidget { final String roomNo; final bool blink; final double scale; - final bool isClinicAdded; final bool isGradientRequired; final bool isBorderRequired; final TextDirection textDirection; @@ -28,7 +29,6 @@ class QueueItemCallingCard extends StatelessWidget { const QueueItemCallingCard({ super.key, - required this.isClinicAdded, required this.ticketNo, required this.roomNo, required this.scale, @@ -45,16 +45,11 @@ class QueueItemCallingCard extends StatelessWidget { this.blink = false, }); - String getFormattedTicket(String ticketNo, bool isClinicAdded) { - if (isClinicAdded) { - var formattedString = ticketNo.split(" "); - if (formattedString.length > 1) { - return "${formattedString[0]} ${formattedString[1]}"; - } else { - return ticketNo; - } - } - return ticketNo; + bool shouldReduceSize(String ticketNo) { + // Use regex to check if ticket starts with exactly 3 letters followed by " W-" + final hasClinicPrefix = RegExp(r'^[A-Za-z]{3} W-').hasMatch(ticketNo); + + return hasClinicPrefix; } @override @@ -107,8 +102,8 @@ class QueueItemCallingCard extends StatelessWidget { top: SizeConfig.getHeightMultiplier() * 0.25, ), child: AppText( - getFormattedTicket(ticketNo, isClinicAdded), - fontSize: SizeConfig.getWidthMultiplier() * 7.4, + ticketNo, + fontSize: shouldReduceSize(ticketNo) ? SizeConfig.getWidthMultiplier() * 6 : SizeConfig.getWidthMultiplier() * 7.4, letterSpacing: -1, fontHeight: 0.5, color: AppColors.greyTextColor, 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..ee48fcb 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 @@ -11,7 +11,6 @@ import 'package:hmg_qline/views/view_helpers/size_config.dart'; class QueueItemNormalCard extends StatelessWidget { final String ticketNo; final String roomNo; - final bool isClinicAdded; final TextDirection textDirection; final String roomText; final String roomTextAr; @@ -24,7 +23,6 @@ class QueueItemNormalCard extends StatelessWidget { const QueueItemNormalCard({ super.key, - required this.isClinicAdded, required this.ticketNo, required this.roomNo, required this.textDirection, @@ -38,16 +36,11 @@ class QueueItemNormalCard extends StatelessWidget { this.width, }); - String getFormattedTicket(String ticketNo, bool isClinicAdded) { - if (isClinicAdded) { - var formattedString = ticketNo.split(" "); - if (formattedString.length > 1) { - return "${formattedString[0]} ${formattedString[1]}"; - } else { - return ticketNo; - } - } - return ticketNo; + bool shouldReduceSize(String ticketNo) { + // Use regex to check if ticket starts with exactly 3 letters followed by " W-" + final hasClinicPrefix = RegExp(r'^[A-Za-z]{3} W-').hasMatch(ticketNo); + + return hasClinicPrefix; } @override @@ -73,8 +66,8 @@ class QueueItemNormalCard extends StatelessWidget { flex: 3, child: Center( child: AppText( - getFormattedTicket(ticketNo, isClinicAdded), - fontSize: SizeConfig.getWidthMultiplier() * 5, + ticketNo, + fontSize: shouldReduceSize(ticketNo) ? SizeConfig.getWidthMultiplier() * 2.5 : SizeConfig.getWidthMultiplier() * 5, letterSpacing: -1, fontHeight: 0.5, color: AppColors.greyTextColor,