updated params

appointment_merge
FaizHashmiCS22 4 months ago
parent e685cc9575
commit 2e215f7a5e

@ -35,6 +35,12 @@ class AppColors {
static Color brownColor = const Color(0xFF460707); static Color brownColor = const Color(0xFF460707);
static Color blackColor = Colors.black54; static Color blackColor = Colors.black54;
static Color nebulizationColor = const Color(0xFF3C86D0);
static Color vitalSignColor = const Color(0xFFD02127);
static Color doctorColor = const Color(0xFF52964F);
static Color vaccinationColor = const Color(0xFFC99609);
static Color procedureColor = const Color(0xFF460707);
//Decoration //Decoration
static BoxDecoration configWidgetDecoration = BoxDecoration( static BoxDecoration configWidgetDecoration = BoxDecoration(
@ -95,10 +101,16 @@ class AppConstants {
static String apiKey = 'EE17D21C7943485D9780223CCE55DCE5'; static String apiKey = 'EE17D21C7943485D9780223CCE55DCE5';
static String testIP = '12.4.5.1'; // projectID.QlineType.ScreenType.AnyNumber (1 to 10) static String testIP = '12.4.5.1'; // projectID.QlineType.ScreenType.AnyNumber (1 to 10)
static int thresholdForListUI = 3; static int thresholdForListUI = 3;
static int currentBuildVersion = 1;
} }
class ApiConstants { class ApiConstants {
static String baseUrl = 'https://ms.hmg.com/nscapi2'; static String baseUrlLive = 'https://qline.hmg.com'; // LIVE
static String baseUrlUat = 'https://ms.hmg.com/nscapi'; // UAT
static String baseUrlDev = 'https://ms.hmg.com/nscapi2'; // DEV
static String baseUrl = baseUrlLive;
static String baseUrlHub = '$baseUrl/PatientCallingHub'; static String baseUrlHub = '$baseUrl/PatientCallingHub';
static String baseUrlApi = '$baseUrl/api'; static String baseUrlApi = '$baseUrl/api';
static String baseUrlApiGen = '$baseUrl/api/Gen'; static String baseUrlApiGen = '$baseUrl/api/Gen';
@ -148,3 +160,327 @@ class CacheConstants {
// "createdBy": 101, // "createdBy": 101,
// "apiKey": "EE17D21C7943485D9780223CCE55DCE5" // "apiKey": "EE17D21C7943485D9780223CCE55DCE5"
// } // }
class MockJsonRepo {
static Map<String, Object> globalConfigurationMockResponse = {
"id": 1,
"configType": 2,
"description": "Main Kiosk Config",
"counterStart": 1,
"counterEnd": 10,
"concurrentCallDelaySec": 5,
"voiceType": 1,
"voiceTypeText": "Standard Voice",
"screenLanguage": 1,
"screenLanguageText": "English",
"textDirection": 1,
"voiceLanguage": 1,
"voiceLanguageText": "English",
"screenMaxDisplayPatients": 8,
"isNotiReq": true,
"prioritySMS": 1,
"priorityWhatsApp": 2,
"priorityEmail": 3,
"ticketNoText": "Ticket Number",
"pleaseVisitCounterText": "Please Visit Counter",
"counterText": "Counter",
"roomText": "Room",
"roomNo": 101,
"isRoomNoRequired": true,
"queueNoText": "Queue Number",
"callForText": "Call For",
"currentServeText": "Current Serve",
"maxText": "Max Temp",
"minText": "Min Temp",
"nextPrayerText": "Next Prayer",
"weatherText": "Weather",
"fajarText": "Fajar",
"dhuhrText": "Dhuhr",
"asarText": "Asar",
"maghribText": "Maghrib",
"ishaText": "Isha",
"isActive": true,
"createdBy": 101,
"createdOn": "2025-07-15T08:00:00Z",
"editedBy": 102,
"editedOn": "2025-07-15T10:00:00Z",
"isToneReq": false,
"isVoiceReq": false,
"orientationType": 1,
"isTurnOn": true,
"waitingAreaType": 1,
"gender": 1,
"isWeatherReq": true,
"isPrayerTimeReq": true,
"isRssFeedReq": true,
"qType": 1,
"screenType": 1,
"projectID": 123,
"projectLatitude": 24.722136,
"projectLongitude": 46.774303,
"cityKey": 999,
"kioskQueue": [
{"id": 1, "name": "General Queue", "code": "GQ", "isActive": true},
{"id": 2, "name": "VIP Queue", "code": "VIP", "isActive": true}
],
"kioskConfig": [
{"id": 1, "languageCode": "en", "languageName": "English", "isDefault": true},
{"id": 2, "languageCode": "ar", "languageName": "Arabic", "isDefault": false}
]
};
static List<Map<String, Object>> mockPatientTicketResponse = [
{
"qType": 1,
"screenType": 2,
"connectionID": "abc-123-connection",
"data": [
{
"id": 101,
"patientID": 202,
"laB_QGroupID": 303,
"queueNo": "A13",
"counterBatchNo": 1,
"calledBy": 404,
"calledOn": "2025-07-15T08:30:00Z",
"servedOn": "2025-07-15T08:45:00Z",
"patientName": "John Doe",
"mobileNo": "+966500000000",
"patientEmail": "john@example.com",
"preferredLang": 1,
"ticketNoText": "Ticket No",
"pleaseVisitCounterText": "Please Visit Counter",
"patientGender": 1,
"roomNo": "R2",
"isActive": true,
"createdBy": 999,
"editedBy": 1000,
"editedOn": "2025-07-15T08:10:00Z",
"createdOn": "2025-07-15T08:00:00Z",
"doctorNameN": "Dr. Smith",
"callType": 2,
"queueNoM": "B45",
"callNoStr": "Call #1001",
"isQueue": true,
"isToneReq": true,
"isVoiceReq": true,
"orientationType": 1,
"isTurnOn": true,
"concurrentCallDelaySec": 3,
"crTypeAckIP": "192.168.1.100",
"voiceLanguage": 1,
"voiceLanguageText": "English",
"vitalSignText": "Vital Sign",
"doctorText": "Doctor",
"procedureText": "Procedure",
"vaccinationText": "Vaccination",
"nebulizationText": "Nebulization",
"callForVitalSignText": "Calling for Vital Sign",
"callForDoctorText": "Calling for Doctor",
"callForProcedureText": "Calling for Procedure",
"callForVaccinationText": "Calling for Vaccination",
"callForNebulizationText": "Calling for Nebulization",
"roomText": "Room",
"queueNoText": "Queue No",
"callForText": "Call For"
},
{
"id": 101,
"patientID": 202,
"laB_QGroupID": 303,
"queueNo": "B21",
"counterBatchNo": 1,
"calledBy": 404,
"calledOn": "2025-07-15T08:30:00Z",
"servedOn": "2025-07-15T08:45:00Z",
"patientName": "John Doe",
"mobileNo": "+966500000000",
"patientEmail": "john@example.com",
"preferredLang": 1,
"ticketNoText": "Ticket No",
"pleaseVisitCounterText": "Please Visit Counter",
"patientGender": 1,
"roomNo": "R3",
"isActive": true,
"createdBy": 999,
"editedBy": 1000,
"editedOn": "2025-07-15T08:10:00Z",
"createdOn": "2025-07-15T08:00:00Z",
"doctorNameN": "Dr. Smith",
"callType": 3,
"queueNoM": "B45",
"callNoStr": "Call #1001",
"isQueue": true,
"isToneReq": true,
"isVoiceReq": true,
"orientationType": 1,
"isTurnOn": true,
"concurrentCallDelaySec": 3,
"crTypeAckIP": "192.168.1.100",
"voiceLanguage": 1,
"voiceLanguageText": "English",
"vitalSignText": "Vital Sign",
"doctorText": "Doctor",
"procedureText": "Procedure",
"vaccinationText": "Vaccination",
"nebulizationText": "Nebulization",
"callForVitalSignText": "Calling for Vital Sign",
"callForDoctorText": "Calling for Doctor",
"callForProcedureText": "Calling for Procedure",
"callForVaccinationText": "Calling for Vaccination",
"callForNebulizationText": "Calling for Nebulization",
"roomText": "Room",
"queueNoText": "Queue No",
"callForText": "Call For"
},
{
"id": 101,
"patientID": 202,
"laB_QGroupID": 303,
"queueNo": "C07",
"counterBatchNo": 1,
"calledBy": 404,
"calledOn": "2025-07-15T08:30:00Z",
"servedOn": "2025-07-15T08:45:00Z",
"patientName": "John Doe",
"mobileNo": "+966500000000",
"patientEmail": "john@example.com",
"preferredLang": 1,
"ticketNoText": "Ticket No",
"pleaseVisitCounterText": "Please Visit Counter",
"patientGender": 1,
"roomNo": "R4",
"isActive": true,
"createdBy": 999,
"editedBy": 1000,
"editedOn": "2025-07-15T08:10:00Z",
"createdOn": "2025-07-15T08:00:00Z",
"doctorNameN": "Dr. Smith",
"callType": 4,
"queueNoM": "B45",
"callNoStr": "Call #1001",
"isQueue": true,
"isToneReq": true,
"isVoiceReq": true,
"orientationType": 1,
"isTurnOn": true,
"concurrentCallDelaySec": 3,
"crTypeAckIP": "192.168.1.100",
"voiceLanguage": 1,
"voiceLanguageText": "English",
"vitalSignText": "Vital Sign",
"doctorText": "Doctor",
"procedureText": "Procedure",
"vaccinationText": "Vaccination",
"nebulizationText": "Nebulization",
"callForVitalSignText": "Calling for Vital Sign",
"callForDoctorText": "Calling for Doctor",
"callForProcedureText": "Calling for Procedure",
"callForVaccinationText": "Calling for Vaccination",
"callForNebulizationText": "Calling for Nebulization",
"roomText": "Room",
"queueNoText": "Queue No",
"callForText": "Call For"
},
{
"id": 101,
"patientID": 202,
"laB_QGroupID": 303,
"queueNo": "D11",
"counterBatchNo": 1,
"calledBy": 404,
"calledOn": "2025-07-15T08:30:00Z",
"servedOn": "2025-07-15T08:45:00Z",
"patientName": "John Doe",
"mobileNo": "+966500000000",
"patientEmail": "john@example.com",
"preferredLang": 1,
"ticketNoText": "Ticket No",
"pleaseVisitCounterText": "Please Visit Counter",
"patientGender": 1,
"roomNo": "R5",
"isActive": true,
"createdBy": 999,
"editedBy": 1000,
"editedOn": "2025-07-15T08:10:00Z",
"createdOn": "2025-07-15T08:00:00Z",
"doctorNameN": "Dr. Smith",
"callType": 5,
"queueNoM": "B45",
"callNoStr": "Call #1001",
"isQueue": true,
"isToneReq": true,
"isVoiceReq": true,
"orientationType": 1,
"isTurnOn": true,
"concurrentCallDelaySec": 3,
"crTypeAckIP": "192.168.1.100",
"voiceLanguage": 1,
"voiceLanguageText": "English",
"vitalSignText": "Vital Sign",
"doctorText": "Doctor",
"procedureText": "Procedure",
"vaccinationText": "Vaccination",
"nebulizationText": "Nebulization",
"callForVitalSignText": "Calling for Vital Sign",
"callForDoctorText": "Calling for Doctor",
"callForProcedureText": "Calling for Procedure",
"callForVaccinationText": "Calling for Vaccination",
"callForNebulizationText": "Calling for Nebulization",
"roomText": "Room",
"queueNoText": "Queue No",
"callForText": "Call For"
},
{
"id": 101,
"patientID": 202,
"laB_QGroupID": 303,
"queueNo": "E20",
"counterBatchNo": 1,
"calledBy": 404,
"calledOn": "2025-07-15T08:30:00Z",
"servedOn": "2025-07-15T08:45:00Z",
"patientName": "John Doe",
"mobileNo": "+966500000000",
"patientEmail": "john@example.com",
"preferredLang": 1,
"ticketNoText": "Ticket No",
"pleaseVisitCounterText": "Please Visit Counter",
"patientGender": 1,
"roomNo": "R6",
"isActive": true,
"createdBy": 999,
"editedBy": 1000,
"editedOn": "2025-07-15T08:10:00Z",
"createdOn": "2025-07-15T08:00:00Z",
"doctorNameN": "Dr. Smith",
"callType": 6,
"queueNoM": "B45",
"callNoStr": "Call #1001",
"isQueue": true,
"isToneReq": true,
"isVoiceReq": true,
"orientationType": 1,
"isTurnOn": true,
"concurrentCallDelaySec": 3,
"crTypeAckIP": "192.168.1.100",
"voiceLanguage": 1,
"voiceLanguageText": "English",
"vitalSignText": "Vital Sign",
"doctorText": "Doctor",
"procedureText": "Procedure",
"vaccinationText": "Vaccination",
"nebulizationText": "Nebulization",
"callForVitalSignText": "Calling for Vital Sign",
"callForDoctorText": "Calling for Doctor",
"callForProcedureText": "Calling for Procedure",
"callForVaccinationText": "Calling for Vaccination",
"callForNebulizationText": "Calling for Nebulization",
"roomText": "Room",
"queueNoText": "Queue No",
"callForText": "Call For"
}
]
}
];
}

@ -55,7 +55,7 @@ class GlobalConfigurationsModel {
bool isWeatherReq = false; bool isWeatherReq = false;
bool isPrayerTimeReq = false; bool isPrayerTimeReq = false;
bool isRssFeedReq = false; bool isRssFeedReq = false;
QTypeEnum qTypeEnum = QTypeEnum.lab; QTypeEnum qTypeEnum = QTypeEnum.appointment;
ScreenTypeEnum screenTypeEnum = ScreenTypeEnum.waitingAreaScreen; ScreenTypeEnum screenTypeEnum = ScreenTypeEnum.waitingAreaScreen;
int? projectID; int? projectID;
double? projectLatitude; double? projectLatitude;
@ -64,6 +64,17 @@ class GlobalConfigurationsModel {
List<KioskQueueModel>? kioskQueueList; List<KioskQueueModel>? kioskQueueList;
List<KioskLanguageConfigModel>? kioskLanguageConfigList; List<KioskLanguageConfigModel>? kioskLanguageConfigList;
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";
GlobalConfigurationsModel({ GlobalConfigurationsModel({
this.id, this.id,
this.configType, this.configType,
@ -115,7 +126,7 @@ class GlobalConfigurationsModel {
this.isWeatherReq = false, this.isWeatherReq = false,
this.isPrayerTimeReq = false, this.isPrayerTimeReq = false,
this.isRssFeedReq = false, this.isRssFeedReq = false,
this.qTypeEnum = QTypeEnum.lab, this.qTypeEnum = QTypeEnum.appointment,
this.screenTypeEnum = ScreenTypeEnum.waitingAreaScreen, this.screenTypeEnum = ScreenTypeEnum.waitingAreaScreen,
this.projectID, this.projectID,
this.projectLatitude, this.projectLatitude,
@ -123,6 +134,16 @@ class GlobalConfigurationsModel {
this.cityKey, this.cityKey,
this.kioskQueueList, this.kioskQueueList,
this.kioskLanguageConfigList, this.kioskLanguageConfigList,
this.vitalSignText = "Vital Sign",
this.doctorText = "Doctor",
this.procedureText = "Procedure",
this.vaccinationText = "Vaccination",
this.nebulizationText = "Nebulization",
this.callForVitalSignText = "Call for Vital Sign",
this.callForDoctorText = "Call for Doctor",
this.callForProcedureText = "Call for Procedure",
this.callForVaccinationText = "Call for Vaccination",
this.callForNebulizationText = "Call for Nebulization",
}); });
GlobalConfigurationsModel.fromJson(Map<String, dynamic> json) { GlobalConfigurationsModel.fromJson(Map<String, dynamic> json) {
@ -149,7 +170,7 @@ class GlobalConfigurationsModel {
counterText = json['counterText']; counterText = json['counterText'];
roomText = json['roomText']; roomText = json['roomText'];
roomNo = json['roomNo']; roomNo = json['roomNo'];
isRoomNoRequired = json['isRoomNoRequired'] ?? true; isRoomNoRequired = json['isRoomNoReq'] ?? true;
queueNoText = json['queueNoText']; queueNoText = json['queueNoText'];
callForText = json['callForText']; callForText = json['callForText'];
currentServeText = json['currentServeText']; currentServeText = json['currentServeText'];
@ -169,8 +190,6 @@ class GlobalConfigurationsModel {
editedOn = json['editedOn']; editedOn = json['editedOn'];
isToneReq = json['isToneReq'] ?? false; isToneReq = json['isToneReq'] ?? false;
isVoiceReq = json['isVoiceReq'] ?? false; isVoiceReq = json['isVoiceReq'] ?? false;
// isToneReq = true;
// isVoiceReq = true;
orientationTypeEnum = ((json['orientationType'] ?? 1) as int).toScreenOrientationEnum(); orientationTypeEnum = ((json['orientationType'] ?? 1) as int).toScreenOrientationEnum();
isTurnOn = json['isTurnOn']; isTurnOn = json['isTurnOn'];
waitingAreaType = json['waitingAreaType']; waitingAreaType = json['waitingAreaType'];
@ -194,6 +213,16 @@ class GlobalConfigurationsModel {
} else { } else {
kioskLanguageConfigList = []; kioskLanguageConfigList = [];
} }
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'];
} }
} }

@ -8,7 +8,6 @@ class KioskQueueModel {
String? queueNameN; String? queueNameN;
int? kioskID; int? kioskID;
bool? isPharmacyQueue; bool? isPharmacyQueue;
String? kioskName; String? kioskName;
String? kioskNameN; String? kioskNameN;
String? ipAddress; String? ipAddress;

@ -1,50 +1,50 @@
class RoomTicketModel { // class RoomTicketModel {
int? rowID; // int? rowID;
int? id; // int? id;
int? floorID; // int? floorID;
int? buildingID; // int? buildingID;
int? projectID; // int? projectID;
String? roomName; // String? roomName;
String? roomNameN; // String? roomNameN;
int? roomNo; // int? roomNo;
String? roomQScreenIP; // String? roomQScreenIP;
bool? isActive; // bool? isActive;
int? createdBy; // int? createdBy;
String? createdOn; // String? createdOn;
String? editedBy; // String? editedBy;
String? editedOn; // String? editedOn;
//
RoomTicketModel({ // RoomTicketModel({
this.rowID, // this.rowID,
this.id, // this.id,
this.floorID, // this.floorID,
this.buildingID, // this.buildingID,
this.projectID, // this.projectID,
this.roomName, // this.roomName,
this.roomNameN, // this.roomNameN,
this.roomNo, // this.roomNo,
this.roomQScreenIP, // this.roomQScreenIP,
this.isActive, // this.isActive,
this.createdBy, // this.createdBy,
this.createdOn, // this.createdOn,
this.editedBy, // this.editedBy,
this.editedOn, // this.editedOn,
}); // });
//
RoomTicketModel.fromJson(Map<String, dynamic> json) { // RoomTicketModel.fromJson(Map<String, dynamic> json) {
rowID = json['rowID']; // rowID = json['rowID'];
id = json['id']; // id = json['id'];
floorID = json['floorID']; // floorID = json['floorID'];
buildingID = json['buildingID']; // buildingID = json['buildingID'];
projectID = json['projectID']; // projectID = json['projectID'];
roomName = json['roomName']; // roomName = json['roomName'];
roomNameN = json['roomNameN']; // roomNameN = json['roomNameN'];
roomNo = json['roomNo']; // roomNo = json['roomNo'];
roomQScreenIP = json['roomQScreenIP']; // roomQScreenIP = json['roomQScreenIP'];
isActive = json['isActive']; // isActive = json['isActive'];
createdBy = json['createdBy']; // createdBy = json['createdBy'];
createdOn = json['createdOn']; // createdOn = json['createdOn'];
editedBy = json['editedBy']; // editedBy = json['editedBy'];
editedOn = json['editedOn']; // editedOn = json['editedOn'];
} // }
} // }

@ -1,5 +1,3 @@
import 'dart:developer';
import 'package:hmg_qline/utilities/date_utils.dart'; import 'package:hmg_qline/utilities/date_utils.dart';
import 'package:hmg_qline/utilities/enums.dart'; import 'package:hmg_qline/utilities/enums.dart';
import 'package:hmg_qline/utilities/extensions.dart'; import 'package:hmg_qline/utilities/extensions.dart';
@ -49,6 +47,34 @@ class TicketData {
DateTime? editedOn; DateTime? editedOn;
DateTime? createdOn; DateTime? createdOn;
// New fields
String? doctorNameN;
int? callType;
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";
TicketData({ TicketData({
this.id, this.id,
this.patientID, this.patientID,
@ -72,6 +98,31 @@ class TicketData {
this.createdOn, this.createdOn,
this.editedBy, this.editedBy,
this.editedOn, this.editedOn,
this.doctorNameN,
this.callType,
this.queueNoM,
this.callNoStr,
this.isQueue,
this.isToneReq,
this.isVoiceReq,
this.orientationType,
this.isTurnOn,
this.concurrentCallDelaySec,
this.crTypeAckIP,
this.voiceLanguageText = "English",
this.vitalSignText = "Vital Sign",
this.doctorText = "Doctor",
this.procedureText = "Procedure",
this.vaccinationText = "Vaccination",
this.nebulizationText = "Nebulization",
this.callForVitalSignText = "Call for Vital Sign",
this.callForDoctorText = "Call for Doctor",
this.callForProcedureText = "Call for Procedure",
this.callForVaccinationText = "Call for Vaccination",
this.callForNebulizationText = "Call for Nebulization",
this.roomText = "Room",
this.queueNoText = "Counter",
this.callForText = "Call For",
}); });
TicketData.fromJson(Map<String, dynamic> json, {QTypeEnum? qTypeEnum}) { TicketData.fromJson(Map<String, dynamic> json, {QTypeEnum? qTypeEnum}) {
@ -86,19 +137,47 @@ class TicketData {
patientName = json['patientName']; patientName = json['patientName'];
mobileNo = json['mobileNo']; mobileNo = json['mobileNo'];
patientEmail = json['patientEmail']; patientEmail = json['patientEmail'];
preferredLang = (json['preferredLang'] != null && json['preferredLang'].trim() != "") ? int.parse(json['preferredLang']) : 1; preferredLang = (json['preferredLang'] != null && json['preferredLang'].toString().trim() != "") ? int.parse(json['preferredLang'].toString()) : 1;
voiceLanguageEnum = (json['preferredLang'] != null && json['preferredLang'].trim() != "") ? (int.parse(json['preferredLang'])).toLanguageEnum() : LanguageEnum.english; voiceLanguageEnum = (json['preferredLang'] != null && json['preferredLang'].toString().trim() != "") ? (int.parse(json['preferredLang'].toString())).toLanguageEnum() : LanguageEnum.english;
ticketNoText = json['ticketNoText'] ?? "Ticket Number"; ticketNoText = json['ticketNoText'] ?? "Ticket Number";
postVoiceText = json['pleaseVisitCounterText'] ?? "Please Visit Counter"; postVoiceText = json['pleaseVisitCounterText'] ?? "Please Visit Counter";
patientGender = json['patientGender'] ?? 1; patientGender = json['patientGender'] ?? 1;
roomNo = json['roomNo'].toString(); roomNo = json['roomNo']?.toString();
if (qTypeEnum != null && qTypeEnum == QTypeEnum.general) { if (qTypeEnum != null && qTypeEnum == QTypeEnum.general) {
roomNo = json['counterNo'].toString(); roomNo = json['counterNo']?.toString();
} }
isActive = json['isActive']; isActive = json['isActive'];
createdBy = json['createdBy']; createdBy = json['createdBy'];
editedBy = json['editedBy']; editedBy = json['editedBy'];
editedOn = json['editedOn'] != null ? (json['editedOn'] as String).toDateTime() : DateTime.now(); editedOn = json['editedOn'] != null ? (json['editedOn'] as String).toDateTime() : DateTime.now();
createdOn = json['createdOn'] != null ? (json['createdOn'] as String).toDateTime() : DateTime.now(); createdOn = json['createdOn'] != null ? (json['createdOn'] as String).toDateTime() : DateTime.now();
// New fields
doctorNameN = json['doctorNameN'];
callType = json['callType'];
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'];
voiceLanguageText = json['voiceLanguageText'];
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'];
} }
} }

@ -1,53 +1,53 @@
class WidgetsConfigModel { // class WidgetsConfigModel {
int? waitingAreaID; // int? waitingAreaID;
String? waitingAreaName; // String? waitingAreaName;
int? projectID; // int? projectID;
double? projectLatitude; // double? projectLatitude;
double? projectLongitude; // double? projectLongitude;
int? cityKey; // int? cityKey;
bool isWeatherReq = false; // bool isWeatherReq = false;
bool isPrayerTimeReq = false; // bool isPrayerTimeReq = false;
bool isRssFeedReq = false; // bool isRssFeedReq = false;
//
WidgetsConfigModel({ // WidgetsConfigModel({
this.waitingAreaID, // this.waitingAreaID,
this.waitingAreaName, // this.waitingAreaName,
this.isWeatherReq = false, // this.isWeatherReq = false,
this.isPrayerTimeReq = false, // this.isPrayerTimeReq = false,
this.isRssFeedReq = false, // this.isRssFeedReq = false,
this.projectID, // this.projectID,
this.projectLatitude, // this.projectLatitude,
this.projectLongitude, // this.projectLongitude,
this.cityKey, // this.cityKey,
}); // });
//
WidgetsConfigModel.fromJson(Map<String, dynamic> json) { // WidgetsConfigModel.fromJson(Map<String, dynamic> json) {
waitingAreaID = json['waitingAreaID']; // waitingAreaID = json['waitingAreaID'];
waitingAreaName = json['waitingAreaName']; // waitingAreaName = json['waitingAreaName'];
isRssFeedReq = json['isRssFeedReq'] ?? false; // isRssFeedReq = json['isRssFeedReq'] ?? false;
isWeatherReq = json['isWeatherReq'] ?? false; // isWeatherReq = json['isWeatherReq'] ?? false;
isPrayerTimeReq = json['isPrayerTimeReq'] ?? false; // isPrayerTimeReq = json['isPrayerTimeReq'] ?? false;
projectID = json['projectID']; // projectID = json['projectID'];
projectLatitude = json['projectLatitude']; // projectLatitude = json['projectLatitude'];
projectLongitude = json['projectLongitude']; // projectLongitude = json['projectLongitude'];
cityKey = json['cityKey']; // cityKey = json['cityKey'];
} // }
//
Map<String, dynamic> toJson() { // Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{}; // final Map<String, dynamic> data = <String, dynamic>{};
data['waitingAreaID'] = waitingAreaID; // data['waitingAreaID'] = waitingAreaID;
data['waitingAreaName'] = waitingAreaName; // data['waitingAreaName'] = waitingAreaName;
data['isWeatherReq'] = isWeatherReq; // data['isWeatherReq'] = isWeatherReq;
data['isPrayerTimeReq'] = isPrayerTimeReq; // data['isPrayerTimeReq'] = isPrayerTimeReq;
data['projectID'] = projectID; // data['projectID'] = projectID;
data['projectLatitude'] = projectLatitude; // data['projectLatitude'] = projectLatitude;
data['projectLongitude'] = projectLongitude; // data['projectLongitude'] = projectLongitude;
data['cityKey'] = cityKey; // data['cityKey'] = cityKey;
return data; // return data;
} // }
//
@override // @override
String toString() { // String toString() {
return 'WidgetsConfigModel{waitingAreaID: $waitingAreaID, waitingAreaName: $waitingAreaName, isWeatherReq: $isWeatherReq, isPrayerTimeReq: $isPrayerTimeReq, projectLatitude: $projectLatitude,projectLongitude: $projectLongitude, cityKey: $cityKey}'; // return 'WidgetsConfigModel{waitingAreaID: $waitingAreaID, waitingAreaName: $waitingAreaName, isWeatherReq: $isWeatherReq, isPrayerTimeReq: $isPrayerTimeReq, projectLatitude: $projectLatitude,projectLongitude: $projectLongitude, cityKey: $cityKey}';
} // }
} // }

@ -6,7 +6,6 @@ import 'package:hmg_qline/models/kiosk_ticket_model.dart';
import 'package:hmg_qline/models/prayers_widget_model.dart'; import 'package:hmg_qline/models/prayers_widget_model.dart';
import 'package:hmg_qline/models/rss_feed_model.dart'; import 'package:hmg_qline/models/rss_feed_model.dart';
import 'package:hmg_qline/models/weathers_widget_model.dart'; import 'package:hmg_qline/models/weathers_widget_model.dart';
import 'package:hmg_qline/models/widgets_config_model.dart';
import 'package:hmg_qline/utilities/enums.dart'; import 'package:hmg_qline/utilities/enums.dart';
import 'package:hmg_qline/utilities/extensions.dart'; import 'package:hmg_qline/utilities/extensions.dart';
import 'package:hmg_qline/views/view_helpers/info_components.dart'; import 'package:hmg_qline/views/view_helpers/info_components.dart';
@ -18,7 +17,7 @@ abstract class ScreenDetailsRepo {
Future<GenericRespModel?> createTicketFromKiosk({required int projectId, required int queueId, int patientId = 0}); Future<GenericRespModel?> createTicketFromKiosk({required int projectId, required int queueId, int patientId = 0});
Future<WidgetsConfigModel?> getScreenConfigurationsByIP({required String ipAddress}); // Future<WidgetsConfigModel?> getScreenConfigurationsByIP({required String ipAddress});
Future<WeathersWidgetModel?> getWeatherDetailsByCity({required String cityId}); Future<WeathersWidgetModel?> getWeatherDetailsByCity({required String cityId});
@ -41,13 +40,13 @@ class ScreenDetailsRepoImp implements ScreenDetailsRepo {
"ipAddress": ipAddress.toString(), "ipAddress": ipAddress.toString(),
"apiKey": AppConstants.apiKey.toString(), "apiKey": AppConstants.apiKey.toString(),
}; };
GenericRespModel adsGenericModel = await apiClientInstance.postJsonForObject( GenericRespModel genericModel = await apiClientInstance.postJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
ApiConstants.commonConfigGet, ApiConstants.commonConfigGet,
params, params,
); );
List<GlobalConfigurationsModel> globalConfigurationsModel = List.generate(adsGenericModel.data.length, (index) => GlobalConfigurationsModel.fromJson(adsGenericModel.data[index])); List<GlobalConfigurationsModel> globalConfigurationsModel = List.generate(genericModel.data.length, (index) => GlobalConfigurationsModel.fromJson(genericModel.data[index]));
if (globalConfigurationsModel.isNotEmpty) { if (globalConfigurationsModel.isNotEmpty) {
return globalConfigurationsModel.first; return globalConfigurationsModel.first;
} }
@ -71,12 +70,12 @@ class ScreenDetailsRepoImp implements ScreenDetailsRepo {
"createdBy": "101", "createdBy": "101",
"apiKey": AppConstants.apiKey, "apiKey": AppConstants.apiKey,
}; };
GenericRespModel adsGenericModel = await apiClientInstance.postJsonForObject( GenericRespModel genericModel = await apiClientInstance.postJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
ApiConstants.createTicket, ApiConstants.createTicket,
params, params,
); );
return adsGenericModel; return genericModel;
} catch (e) { } catch (e) {
logger.e(e.toString()); logger.e(e.toString());
InfoComponents.showToast(e.toString()); InfoComponents.showToast(e.toString());
@ -110,26 +109,26 @@ class ScreenDetailsRepoImp implements ScreenDetailsRepo {
} }
} }
@override // @override
Future<WidgetsConfigModel?> getScreenConfigurationsByIP({required String ipAddress}) async { // Future<WidgetsConfigModel?> getScreenConfigurationsByIP({required String ipAddress}) async {
try { // try {
final body = { // final body = {
"ipAddress": ipAddress.toString(), // "ipAddress": ipAddress.toString(),
}; // };
//
GenericRespModel genericRespModel = await apiClientInstance.postJsonForObject( // GenericRespModel genericRespModel = await apiClientInstance.postJsonForObject(
(json) => GenericRespModel.fromJson(json), // (json) => GenericRespModel.fromJson(json),
ApiConstants.waitingAreaScreenConfigGet, // ApiConstants.waitingAreaScreenConfigGet,
body, // body,
); // );
WidgetsConfigModel widgetsConfigModel = WidgetsConfigModel.fromJson(genericRespModel.data); // WidgetsConfigModel widgetsConfigModel = WidgetsConfigModel.fromJson(genericRespModel.data);
return widgetsConfigModel; // return widgetsConfigModel;
} catch (e) { // } catch (e) {
logger.e(e.toString()); // logger.e(e.toString());
InfoComponents.showToast(e.toString()); // InfoComponents.showToast(e.toString());
return null; // return null;
} // }
} // }
@override @override
Future<WeathersWidgetModel?> getWeatherDetailsByCity({required String cityId}) async { Future<WeathersWidgetModel?> getWeatherDetailsByCity({required String cityId}) async {
@ -206,12 +205,12 @@ class ScreenDetailsRepoImp implements ScreenDetailsRepo {
"ticketQueueID": ticketQueueID.toString(), "ticketQueueID": ticketQueueID.toString(),
"qType": qTypeEnum.getQTypeIDFromEnum().toString(), "qType": qTypeEnum.getQTypeIDFromEnum().toString(),
}; };
GenericRespModel adsGenericModel = await apiClientInstance.postJsonForObject( GenericRespModel genericModel = await apiClientInstance.postJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
ApiConstants.ticketAcknowledgementInsert, ApiConstants.ticketAcknowledgementInsert,
params, params,
); );
return adsGenericModel; return genericModel;
} catch (e) { } catch (e) {
logger.e(e.toString()); logger.e(e.toString());
InfoComponents.showToast(e.toString()); InfoComponents.showToast(e.toString());

@ -1,7 +1,7 @@
import 'package:just_audio/just_audio.dart'; import 'package:just_audio/just_audio.dart';
abstract class AudioService { abstract class AudioService {
Future<void> playTone({required String path}); Future<void> playTone({required String path, bool isMute = false});
Future<void> listenAudioPlayerEvents({required Function() onAudioCompleted}); Future<void> listenAudioPlayerEvents({required Function() onAudioCompleted});
@ -23,8 +23,11 @@ class AudioServiceImp implements AudioService {
} }
@override @override
Future<void> playTone({required String path}) async { Future<void> playTone({required String path, bool isMute = false}) async {
audioPlayerInstance.setAsset(path); audioPlayerInstance.setAsset(path);
if (isMute) {
audioPlayerInstance.setVolume(0.0);
}
await audioPlayerInstance.play(); await audioPlayerInstance.play();
} }

@ -10,6 +10,7 @@ abstract class TextToSpeechService {
Future<void> speechText({ Future<void> speechText({
required TicketDetailsModel ticket, required TicketDetailsModel ticket,
required GlobalConfigurationsModel globalConfigurationsModel, required GlobalConfigurationsModel globalConfigurationsModel,
bool isMute = false,
}); });
Future<void> speechTextTest(String test); Future<void> speechTextTest(String test);
@ -47,6 +48,7 @@ class TextToSpeechServiceImp implements TextToSpeechService {
Future<void> speechText({ Future<void> speechText({
required TicketDetailsModel ticket, required TicketDetailsModel ticket,
required GlobalConfigurationsModel globalConfigurationsModel, required GlobalConfigurationsModel globalConfigurationsModel,
bool isMute = false,
}) async { }) async {
const ttsGoogleEngine = 'com.google.android.tts'; const ttsGoogleEngine = 'com.google.android.tts';
// const ttsFlyTecEngine = 'com.iflytek.speechcloud'; // const ttsFlyTecEngine = 'com.iflytek.speechcloud';
@ -57,8 +59,11 @@ class TextToSpeechServiceImp implements TextToSpeechService {
await textToSpeechInstance.setEngine(ttsGoogleEngine); await textToSpeechInstance.setEngine(ttsGoogleEngine);
} }
textToSpeechInstance.setVolume(1.0); if (isMute) {
textToSpeechInstance.setVolume(0.0);
} else {
textToSpeechInstance.setVolume(1.0);
}
if (langEnum == LanguageEnum.arabic) { if (langEnum == LanguageEnum.arabic) {
await textToSpeechInstance.setLanguage(LanguageEnum.arabic.enumToString()); await textToSpeechInstance.setLanguage(LanguageEnum.arabic.enumToString());
textToSpeechInstance.setSpeechRate(0.45); textToSpeechInstance.setSpeechRate(0.45);

@ -1,4 +1,7 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:hmg_qline/constants/app_constants.dart';
import 'package:hmg_qline/models/global_config_model.dart';
import 'package:hmg_qline/utilities/enums.dart'; import 'package:hmg_qline/utilities/enums.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
@ -69,7 +72,7 @@ extension QTypeEnumExtension on int {
case 4: case 4:
return QTypeEnum.general; return QTypeEnum.general;
default: default:
return QTypeEnum.lab; return QTypeEnum.appointment;
} }
} }
} }
@ -146,3 +149,80 @@ extension LanguageEnumToString on LanguageEnum {
} }
} }
} }
enum CallTypeEnum { vitalSign, doctor, procedure, vaccination, nebulization, none }
extension XCallType on CallTypeEnum {
Color color() {
if (this == CallTypeEnum.vitalSign) {
return AppColors.vitalSignColor;
} else if (this == CallTypeEnum.doctor) {
return AppColors.doctorColor;
} else if (this == CallTypeEnum.procedure) {
return AppColors.procedureColor;
} else if (this == CallTypeEnum.vaccination) {
return AppColors.vaccinationColor;
} else if (this == CallTypeEnum.nebulization) {
return AppColors.nebulizationColor;
} else {
return Colors.black54;
}
}
String message(GlobalConfigurationsModel globalConfig, {bool isListView = false}) {
switch (this) {
case CallTypeEnum.vitalSign:
return isListView ? globalConfig.callForVitalSignText : globalConfig.vitalSignText;
case CallTypeEnum.doctor:
return isListView ? globalConfig.callForDoctorText : globalConfig.doctorText;
case CallTypeEnum.procedure:
return isListView ? globalConfig.callForProcedureText : globalConfig.procedureText;
case CallTypeEnum.vaccination:
return isListView ? globalConfig.callForVaccinationText : globalConfig.vaccinationText;
case CallTypeEnum.nebulization:
return isListView ? globalConfig.callForNebulizationText : globalConfig.nebulizationText;
case CallTypeEnum.none:
return isListView ? globalConfig.callForVitalSignText : globalConfig.vitalSignText;
default:
return globalConfig.callForVitalSignText;
}
}
SvgPicture icon(double height, {double? width, BoxFit fit = BoxFit.contain}) {
String iconPath = "";
if (this == CallTypeEnum.vitalSign) {
iconPath = AppAssets.vitalSignIcon;
} else if (this == CallTypeEnum.doctor) {
iconPath = AppAssets.doctorIcon;
} else if (this == CallTypeEnum.procedure) {
iconPath = AppAssets.procedureIcon;
} else if (this == CallTypeEnum.vaccination) {
iconPath = AppAssets.vaccinationIcon;
} else if (this == CallTypeEnum.nebulization) {
iconPath = AppAssets.nebulizationIcon;
}
return SvgPicture.asset(
iconPath.isEmpty ? "assets/images/wait.svg" : iconPath,
height: height,
width: width,
fit: fit,
);
}
String audio(String lang) {
if (this == CallTypeEnum.vitalSign) {
return "visit_nurse.mp3";
} else if (this == CallTypeEnum.doctor) {
return "visit_doctor.mp3";
} else if (this == CallTypeEnum.procedure) {
return "visit_doctor.mp3";
} else if (this == CallTypeEnum.vaccination) {
return "visit_doctor.mp3";
} else if (this == CallTypeEnum.nebulization) {
return "visit_doctor.mp3";
}
return "";
}
}

@ -67,7 +67,6 @@ class QueuingViewModel extends ChangeNotifier {
log("onHubConnected: $response"); log("onHubConnected: $response");
ScreenConfigViewModel screenConfigViewModel = getIt.get<ScreenConfigViewModel>(); ScreenConfigViewModel screenConfigViewModel = getIt.get<ScreenConfigViewModel>();
screenConfigViewModel.updateIsHubConnected(true); screenConfigViewModel.updateIsHubConnected(true);
log("screenConfigViewModel: ${screenConfigViewModel.isHubConnected}");
screenConfigViewModel.notifyListeners(); screenConfigViewModel.notifyListeners();
} }
@ -156,12 +155,13 @@ class QueuingViewModel extends ChangeNotifier {
screenConfigViewModel.acknowledgeTicket(ticketQueueID: ticketData.id!.toString()); screenConfigViewModel.acknowledgeTicket(ticketQueueID: ticketData.id!.toString());
if (globalConfigurationsModel.isToneReq) { if (globalConfigurationsModel.isToneReq) {
isCallingInProgress = true; isCallingInProgress = true;
await audioService.playTone(path: AppAssets.callTone); await audioService.playTone(path: AppAssets.callTone, isMute: false );
} else if (globalConfigurationsModel.isVoiceReq) { } else if (globalConfigurationsModel.isVoiceReq) {
isCallingInProgress = true; isCallingInProgress = true;
await textToSpeechService.speechText( await textToSpeechService.speechText(
globalConfigurationsModel: globalConfigurationsModel, globalConfigurationsModel: globalConfigurationsModel,
ticket: currentTickets.first, ticket: currentTickets.first,
isMute: false
); );
} else { } else {
waitAndCallNextTicketIfAvailable(); waitAndCallNextTicketIfAvailable();

@ -114,10 +114,9 @@ class ScreenConfigViewModel extends ChangeNotifier {
Future<void> getGlobalConfigurationsByIP() async { Future<void> getGlobalConfigurationsByIP() async {
GlobalConfigurationsModel? response = await screenDetailsRepo.getGlobalScreenConfigurations(ipAddress: currentScreenIP); GlobalConfigurationsModel? response = await screenDetailsRepo.getGlobalScreenConfigurations(ipAddress: currentScreenIP);
if (response == null) { log("response; $response");
log("response; $response");
return; response ??= GlobalConfigurationsModel.fromJson(MockJsonRepo.globalConfigurationMockResponse);
}
updateGlobalConfigurationsModel(value: response); updateGlobalConfigurationsModel(value: response);
updateCurrentScreenTypeEnum(globalConfigurationsModel.screenTypeEnum); updateCurrentScreenTypeEnum(globalConfigurationsModel.screenTypeEnum);
updateCurrentQTypeEnum(globalConfigurationsModel.qTypeEnum); updateCurrentQTypeEnum(globalConfigurationsModel.qTypeEnum);

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.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/view_models/screen_config_view_model.dart';
import 'package:marquee/marquee.dart'; import 'package:marquee/marquee.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -27,14 +28,19 @@ class AppFooter extends StatelessWidget {
Column( Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
AppText( InkWell(
AppStrings.poweredBy, onTap: () {
fontSize: SizeConfig.getWidthMultiplier() * 2, context.read<QueuingViewModel>().onHubTicketCall(MockJsonRepo.mockPatientTicketResponse);
},
child: AppText(
AppStrings.poweredBy,
fontSize: SizeConfig.getWidthMultiplier() * 2,
),
), ),
Text(screenConfigVM.currentScreenIP, Text("${screenConfigVM.currentScreenIP}_v${AppConstants.currentBuildVersion}",
style: TextStyle( style: TextStyle(
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
fontSize: SizeConfig.getWidthMultiplier() * 2.2, fontSize: SizeConfig.getWidthMultiplier() * 2,
)), )),
Row( Row(
children: [ children: [

@ -1,3 +1,5 @@
import 'dart:developer';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:hmg_qline/models/global_config_model.dart'; import 'package:hmg_qline/models/global_config_model.dart';
@ -61,13 +63,14 @@ class AppHeader extends StatelessWidget implements PreferredSizeWidget {
return Selector<ScreenConfigViewModel, GlobalConfigurationsModel>( return Selector<ScreenConfigViewModel, GlobalConfigurationsModel>(
selector: (context, screenConfigViewModel) => screenConfigViewModel.globalConfigurationsModel, selector: (context, screenConfigViewModel) => screenConfigViewModel.globalConfigurationsModel,
builder: (BuildContext context, GlobalConfigurationsModel globalConfigurationsModel, Widget? child) { builder: (BuildContext context, GlobalConfigurationsModel globalConfigurationsModel, Widget? child) {
log("globalConfigurationsModel.qTypeEnum: ${globalConfigurationsModel.qTypeEnum}");
return Column( return Column(
children: [ children: [
Container( Container(
alignment: Alignment.center, alignment: Alignment.center,
height: SizeConfig.getHeightMultiplier() * 0.6, height: SizeConfig.getHeightMultiplier() * 0.6,
padding: const EdgeInsets.symmetric(horizontal: 20), padding: const EdgeInsets.symmetric(horizontal: 20),
decoration: BoxDecoration(color: AppColors.greenColor), decoration: BoxDecoration(color: globalConfigurationsModel.qTypeEnum == QTypeEnum.appointment ? AppColors.redColor : AppColors.greenColor),
child: Directionality( child: Directionality(
textDirection: globalConfigurationsModel.textDirection, textDirection: globalConfigurationsModel.textDirection,
child: Row( child: Row(
@ -81,7 +84,7 @@ class AppHeader extends StatelessWidget implements PreferredSizeWidget {
fontFamily: globalConfigurationsModel.screenLanguageEnum == LanguageEnum.arabic ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins, fontFamily: globalConfigurationsModel.screenLanguageEnum == LanguageEnum.arabic ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins,
), ),
SvgPicture.asset( SvgPicture.asset(
AppAssets.hmgLogoPharmacy, globalConfigurationsModel.qTypeEnum == QTypeEnum.appointment ? AppAssets.hmgLogo : AppAssets.hmgLogoPharmacy,
height: SizeConfig.getHeightMultiplier() * 0.5, height: SizeConfig.getHeightMultiplier() * 0.5,
), ),
], ],

@ -7,12 +7,12 @@ import 'package:hmg_qline/views/common_widgets/app_texts_widget.dart';
import 'package:hmg_qline/views/main_queue_screen/components/priority_tickets.dart'; import 'package:hmg_qline/views/main_queue_screen/components/priority_tickets.dart';
import 'package:hmg_qline/views/view_helpers/size_config.dart'; import 'package:hmg_qline/views/view_helpers/size_config.dart';
class PriorityTicketsSidelist extends StatelessWidget { class PriorityTicketsWithSidelist extends StatelessWidget {
final List<TicketDetailsModel> tickets; final List<TicketDetailsModel> tickets;
final GlobalConfigurationsModel globalConfigurationsModel; final GlobalConfigurationsModel globalConfigurationsModel;
final ScreenOrientationEnum screenOrientationEnum; final ScreenOrientationEnum screenOrientationEnum;
const PriorityTicketsSidelist({ const PriorityTicketsWithSidelist({
super.key, super.key,
required this.tickets, required this.tickets,
required this.globalConfigurationsModel, required this.globalConfigurationsModel,

@ -34,7 +34,11 @@ class TicketItem extends StatelessWidget {
String getFormattedTicket(String ticketNo, bool isClinicAdded) { String getFormattedTicket(String ticketNo, bool isClinicAdded) {
if (isClinicAdded) { if (isClinicAdded) {
var formattedString = ticketNo.split(" "); var formattedString = ticketNo.split(" ");
return "${formattedString[0]} ${formattedString[1]}"; if (formattedString.length > 1) {
return "${formattedString[0]} ${formattedString[1]}";
} else {
return ticketNo;
}
} }
return ticketNo; return ticketNo;
} }
@ -56,7 +60,6 @@ class TicketItem extends StatelessWidget {
), ),
beginColor: Colors.black, beginColor: Colors.black,
endColor: blink ? Colors.black.withOpacity(0.1) : Colors.black, endColor: blink ? Colors.black.withOpacity(0.1) : Colors.black,
// endColor: blink ? AppGlobal.appRedColor : Colors.black,
times: 0, times: 0,
duration: const Duration(seconds: 1)), duration: const Duration(seconds: 1)),
const SizedBox(height: 20), const SizedBox(height: 20),

@ -65,7 +65,7 @@ class MainQueueScreen extends StatelessWidget {
], ],
); );
} else if (queuingViewModel.currentTickets.length > AppConstants.thresholdForListUI) { } else if (queuingViewModel.currentTickets.length > AppConstants.thresholdForListUI) {
widget = PriorityTicketsSidelist( widget = PriorityTicketsWithSidelist(
tickets: queuingViewModel.currentTickets, tickets: queuingViewModel.currentTickets,
globalConfigurationsModel: screenConfigViewModel.globalConfigurationsModel, globalConfigurationsModel: screenConfigViewModel.globalConfigurationsModel,
screenOrientationEnum: screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum, screenOrientationEnum: screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum,

@ -28,7 +28,7 @@ class SplashScreen extends StatelessWidget {
if (snapshot.connectionState == ConnectionState.waiting) { if (snapshot.connectionState == ConnectionState.waiting) {
return const Scaffold( return const Scaffold(
body: Center( body: Center(
child: CircularProgressIndicator(), // Loading indicator child: CircularProgressIndicator(),
), ),
); );
} }
@ -48,6 +48,7 @@ class SplashScreen extends StatelessWidget {
if (snapshot.connectionState == ConnectionState.done) { if (snapshot.connectionState == ConnectionState.done) {
Future.delayed(const Duration(seconds: 1)).whenComplete(() { Future.delayed(const Duration(seconds: 1)).whenComplete(() {
log("context.read<ScreenConfigViewModel>().currentScreenTypeEnum: ${context.read<ScreenConfigViewModel>().currentScreenTypeEnum}"); log("context.read<ScreenConfigViewModel>().currentScreenTypeEnum: ${context.read<ScreenConfigViewModel>().currentScreenTypeEnum}");
log("context.read<ScreenConfigViewModel>().currentQTypeEnum: ${context.read<ScreenConfigViewModel>().currentQTypeEnum}");
if (context.read<ScreenConfigViewModel>().currentScreenTypeEnum == ScreenTypeEnum.kioskScreen) { if (context.read<ScreenConfigViewModel>().currentScreenTypeEnum == ScreenTypeEnum.kioskScreen) {
context.navigateReplaceTo(AppRoutes.kioskMainScreen); context.navigateReplaceTo(AppRoutes.kioskMainScreen);
} else { } else {

Loading…
Cancel
Save