National Day offer implementation done.

master
haroon amjad 2 months ago
parent 2d4b93d264
commit 618f967073

@ -109,7 +109,7 @@
"size" : "83.5x83.5"
},
{
"filename" : "1024x1024bb.png",
"filename" : "icon 1.jpg",
"idiom" : "ios-marketing",
"scale" : "1x",
"size" : "1024x1024"

@ -20,8 +20,8 @@ var PACKAGES_SHOPPING_CART = '/api/shopping_cart_items';
var PACKAGES_ORDERS = '/api/orders';
var PACKAGES_ORDER_HISTORY = '/api/orders/items';
var PACKAGES_TAMARA_OPT = '/api/orders/paymentoptions/tamara';
// var BASE_URL = 'http://10.50.100.198:2018/';
// var BASE_URL = 'https://uat.hmgwebservices.com/';
// var BASE_URL = 'http://10.50.100.198:2018/';
// var BASE_URL = 'https://uat.hmgwebservices.com/';
var BASE_URL = 'https://hmgwebservices.com/';
// var BASE_URL = 'http://10.201.204.103/';
// var BASE_URL = 'https://orash.cloudsolutions.com.sa/';
@ -276,6 +276,9 @@ var EMAIL_QR_APPOINTMENT = "Services/Notifications.svc/REST/sendEmailForOnLineCh
//URL check payment status
var CHECK_PAYMENT_STATUS = "Services/PayFort_Serv.svc/REST/GetRequestStatusByRequestID";
//URL Purchase Offer
var PURCHASE_OFFER = "Services/PayFort_Serv.svc/REST/Purchase_Offer_ND";
//URL create advance payment
var CREATE_ADVANCE_PAYMENT = "Services/Doctors.svc/REST/CreateAdvancePayment";
@ -354,7 +357,7 @@ var CAN_PAY_FOR_FOR_WALKIN_APPOINTMENT = 'Services/Doctors.svc/REST/CanPayForWal
var CHANNEL = 3;
var GENERAL_ID = 'Cs2020@2016\$2958';
var IP_ADDRESS = '10.20.10.20';
var VERSION_ID = 19.0;
var VERSION_ID = 19.1;
var SETUP_ID = '91877';
var LANGUAGE = 2;
// var PATIENT_OUT_SA = 0;
@ -698,6 +701,8 @@ var GET_PATIENT_OCCUPATION_LIST = 'Services/Authentication.svc/REST/GetPatientOc
var IS_DOCTOR_AVAILABLE_BY_CALENDAR_SCHEDULE = 'Services/OUTPs.svc/REST/HIS_IsDoctorAvailableByCalendarSchedule';
var GET_OFFER_DETAILS = 'Services/Authentication.svc/REST/GetNDOfferData';
//PAYFORT
var getPayFortProjectDetails = "Services/PayFort_Serv.svc/REST/GetPayFortProjectDetails";
var addPayFortApplePayResponse = "Services/PayFort_Serv.svc/REST/AddResponse";

@ -187,7 +187,7 @@ class BaseAppClient {
// body['IdentificationNo'] = 1023854217;
// body['MobileNo'] = "531940021"; //0560717232
// body['PatientID'] = 2007395; //4609100
// body['PatientID'] = 4767477; //4609100
// body['TokenID'] = "@dm!n";
// Patient ID: 3027574

@ -12,6 +12,22 @@ class PrivilegeService extends BaseService {
List<HMCProjectListModel> hMCProjectListModel = [];
List<ProjectDetailListModel> projectDetailListModel = [];
dynamic hisOffersList;
Future<Map> offerDetailsAPICall() async {
Map<String, dynamic> request = {"LanguageID": 1};
dynamic localRes;
await baseAppClient.post(GET_OFFER_DETAILS, onSuccess: (response, statusCode) async {
localRes = response;
hisOffersList = localRes['HISProject_Offers'];
}, onFailure: (String error, int statusCode) {
localRes = {"error": error};
// throw error;
}, body: request);
return Future.value(localRes);
}
Future getPrivilege() async {
Map<String, dynamic> body = Map();
body['PatientType'] = 4;

@ -13,6 +13,7 @@ import 'package:hmg_patient_app/models/Appointments/laser_body_parts.dart';
import 'package:hmg_patient_app/models/Authentication/register_info_response.dart';
import 'package:hmg_patient_app/models/InPatientServices/get_admission_info_response_model.dart';
import 'package:hmg_patient_app/models/InPatientServices/get_admission_request_info_response_model.dart';
import 'package:hmg_patient_app/models/his_project_offers_list.dart';
import 'package:hmg_patient_app/uitl/PlatformBridge.dart';
import 'package:hmg_patient_app/uitl/app_shared_preferences.dart';
import 'package:flutter/cupertino.dart';
@ -55,6 +56,9 @@ class ProjectViewModel extends BaseViewModel {
DoctorList? waitingAppointmentDoctor;
String waitingAppointmentNFCCode = "";
bool hasOffers = false;
List<HISProjectOffersList> hisProjectOffers = [];
setWaitingAppointmentDoctor(DoctorList waitingAppointmentDoctor) {
this.waitingAppointmentDoctor = waitingAppointmentDoctor;
notifyListeners();
@ -75,6 +79,21 @@ class ProjectViewModel extends BaseViewModel {
notifyListeners();
}
void setHasOffers(bool value) {
hasOffers = value;
notifyListeners();
}
void setHISOffersProjectList(dynamic hisProjectOffersList) {
hisProjectOffers = [];
if (hisProjectOffersList != null && hisProjectOffersList.isNotEmpty) {
hisProjectOffersList.forEach((item) {
hisProjectOffers.add(HISProjectOffersList.fromJson(item));
});
}
notifyListeners();
}
RegisterInfoResponse _registerInfo = RegisterInfoResponse();
RegisterInfoResponse get registerInfo => _registerInfo;

@ -12,12 +12,15 @@ import 'package:hmg_patient_app/core/viewModels/pharmacyModule/MostViewedViewMod
import 'package:hmg_patient_app/core/viewModels/pharmacyModule/PharmacyAddressesViewModel.dart';
import 'package:hmg_patient_app/core/viewModels/product_categories_view_model.dart';
import 'package:hmg_patient_app/core/viewModels/pharmacyModule/order_model_view_model.dart';
import 'package:hmg_patient_app/core/viewModels/project_view_model.dart';
import 'package:hmg_patient_app/core/viewModels/weather/weather_view_model.dart';
import 'package:hmg_patient_app/services/appointment_services/GetDoctorsList.dart';
import 'package:hmg_patient_app/services/payfort_services/payfort_service.dart';
import 'package:hmg_patient_app/services/payfort_services/payfort_view_model.dart';
import 'package:hmg_patient_app/services/pharmacy_services/cancelOrder_service.dart';
import 'package:hmg_patient_app/services/pharmacy_services/order_service.dart';
import 'package:hmg_patient_app/services/pharmacy_services/recommendedProduct_service.dart';
// import 'package:hmg_patient_app/core/viewModels/pharmacyModule/PharmacyAddressesViewModel.dart';
// import 'package:hmg_patient_app/core/viewModels/pharmacyModule/order_model_view_model.dart';
// import 'package:hmg_patient_app/services/pharmacy_services/order_service.dart';
@ -158,6 +161,7 @@ void setupLocator() {
/// Services
locator.registerLazySingleton(() => AuthenticatedUserObject());
locator.registerLazySingleton(() => DoctorsListService());
locator.registerLazySingleton(() => HospitalService());
locator.registerLazySingleton(() => PharmacyService());
locator.registerLazySingleton(() => MyDoctorService());
@ -232,7 +236,7 @@ void setupLocator() {
locator.registerLazySingleton(() => CancelOrderService());
locator.registerLazySingleton(() => PrescriptionService());
locator.registerLazySingleton(() => RecommendedProductService());
locator.registerFactory(() => ProjectViewModel());
locator.registerLazySingleton(() => PrivilegeService());
locator.registerLazySingleton(() => WeatherService());
locator.registerLazySingleton(() => TermsConditionsService());
@ -273,6 +277,7 @@ void setupLocator() {
locator.registerFactory(() => PharmacyAddressesViewModel());
locator.registerFactory(() => TermsConditionViewModel());
locator.registerFactory(() => AddNewChildViewModel());
locator.registerFactory(() => H2OViewModel());
locator.registerFactory(() => BloodSugarViewMode());
@ -316,10 +321,8 @@ void setupLocator() {
// Offer And Packages
//----------------------
locator.registerLazySingleton(
() => OffersAndPackagesServices()); // offerPackagesServices Service
locator.registerFactory(
() => OfferCategoriesViewModel()); // Categories View Model
locator.registerLazySingleton(() => OffersAndPackagesServices()); // offerPackagesServices Service
locator.registerFactory(() => OfferCategoriesViewModel()); // Categories View Model
locator.registerFactory(() => PackagesViewModel()); // Products View Model
//pharmacy
@ -327,12 +330,10 @@ void setupLocator() {
// locator.registerFactory(() => OffersCategoriseViewModel());
// Geofencing
// ---------------------
locator.registerLazySingleton(
() => GeofencingServices()); // Geofencing Services
locator.registerLazySingleton(() => GeofencingServices()); // Geofencing Services
locator.registerFactory(() => TermsConditionsViewModel());
locator.registerFactory(() => AnciallryOrdersViewModel());
// Google/Firebase Analytics
// ---------------------------
locator.registerFactory(() => GAnalytics());

@ -137,12 +137,12 @@ class _MyApp extends State<MyApp> {
SizeConfig().init(constraints, orientation);
return MultiProvider(
providers: [
ChangeNotifierProvider<PharmacyPagesViewModel>(
create: (context) => PharmacyPagesViewModel(),
),
ChangeNotifierProvider<ProjectViewModel>(
create: (context) => ProjectViewModel(),
),
ChangeNotifierProvider<PharmacyPagesViewModel>(
create: (context) => PharmacyPagesViewModel(),
),
ChangeNotifierProvider<DashboardViewModel>(
create: (context) => DashboardViewModel(),
),

@ -62,6 +62,7 @@ class AuthenticatedUser {
dynamic zipCode;
dynamic isFamily;
dynamic cRSVerificationStatus;
dynamic HISProject_Offers;
// dynamic patientPayType;
// dynamic patientType;
// dynamic status;
@ -126,7 +127,7 @@ class AuthenticatedUser {
this.tempAddress,
this.zipCode,
this.isFamily,
this.cRSVerificationStatus});
this.cRSVerificationStatus, this.HISProject_Offers});
AuthenticatedUser.fromJson(Map<String, dynamic> json) {
setupID = json['SetupID'];
@ -195,6 +196,7 @@ class AuthenticatedUser {
zipCode = json['ZipCode'];
isFamily = json['IsFamily'];
cRSVerificationStatus = json['CRSVerificationStatus'];
HISProject_Offers = json['HISProject_Offers'];
}
Map<String, dynamic> toJson() {

@ -0,0 +1,88 @@
class HISProjectOffersList {
int? id;
int? projectId;
String? projectEnglish;
String? projectArabic;
String? titleArabic;
String? titleName;
String? descriptionArabic;
String? descriptionEnglish;
String? detailsArabic;
String? detailsEnglish;
num? amount;
num? amountWithTax;
String? validTo;
bool? isActive;
String? procedureId;
bool? isTax;
int? serviceId;
bool? isGenerateInvoice;
num? taxAmount;
HISProjectOffersList(
{this.id,
this.projectId,
this.projectEnglish,
this.projectArabic,
this.titleArabic,
this.titleName,
this.descriptionArabic,
this.descriptionEnglish,
this.detailsArabic,
this.detailsEnglish,
this.amount,
this.amountWithTax,
this.validTo,
this.isActive,
this.procedureId,
this.isTax,
this.serviceId,
this.isGenerateInvoice,
this.taxAmount});
HISProjectOffersList.fromJson(Map<String, dynamic> json) {
id = json['Id'];
projectId = json['ProjectId'];
projectEnglish = json['ProjectEnglish'];
projectArabic = json['ProjectArabic'];
titleArabic = json['TitleArabic'];
titleName = json['TitleName'];
descriptionArabic = json['DescriptionArabic'];
descriptionEnglish = json['DescriptionEnglish'];
detailsArabic = json['DetailsArabic'];
detailsEnglish = json['DetailsEnglish'];
amount = json['Amount'];
amountWithTax = json['AmountWithTax'];
validTo = json['ValidTo'];
isActive = json['IsActive'];
procedureId = json['ProcedureId'];
isTax = json['IsTax'];
serviceId = json['ServiceId'];
isGenerateInvoice = json['IsGenerateInvoice'];
taxAmount = json['TaxAmount'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['Id'] = this.id;
data['ProjectId'] = this.projectId;
data['ProjectEnglish'] = this.projectEnglish;
data['ProjectArabic'] = this.projectArabic;
data['TitleArabic'] = this.titleArabic;
data['TitleName'] = this.titleName;
data['DescriptionArabic'] = this.descriptionArabic;
data['DescriptionEnglish'] = this.descriptionEnglish;
data['DetailsArabic'] = this.detailsArabic;
data['DetailsEnglish'] = this.detailsEnglish;
data['Amount'] = this.amount;
data['AmountWithTax'] = this.amountWithTax;
data['ValidTo'] = this.validTo;
data['IsActive'] = this.isActive;
data['ProcedureId'] = this.procedureId;
data['IsTax'] = this.isTax;
data['ServiceId'] = this.serviceId;
data['IsGenerateInvoice'] = this.isGenerateInvoice;
data['TaxAmount'] = this.taxAmount;
return data;
}
}

@ -149,11 +149,22 @@ class _HomePageFragment2State extends State<HomePageFragment2> {
// height: MediaQuery.of(context).size.width / 2.6,
),
),
InkWell(
onTap: (){
Navigator.push(context, MaterialPageRoute(builder: (context) => OfferDetailsPage(title: "25% discount",)));
},
child: DiscountCardWidget()),
(projectViewModel.havePrivilege(111) && projectViewModel.hisProjectOffers.isNotEmpty)
? InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => OfferDetailsPage(
title: projectViewModel.isArabic ? projectViewModel.hisProjectOffers.first.titleArabic! : projectViewModel.hisProjectOffers.first.titleName!,
onLoginClick: widget.onLoginClick!,
),
),
);
},
child: DiscountCardWidget(),
)
: SizedBox.shrink(),
projectViewModel.isLogin
? Column(
children: [

@ -1,22 +1,34 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
class DiscountCardWidget extends StatelessWidget {
import 'package:hmg_patient_app/core/viewModels/project_view_model.dart';
import 'package:hmg_patient_app/uitl/date_uitl.dart';
import 'package:provider/provider.dart';
class DiscountCardWidget extends StatefulWidget {
@override
State<DiscountCardWidget> createState() => _DiscountCardWidgetState();
}
class _DiscountCardWidgetState extends State<DiscountCardWidget> {
late ProjectViewModel projectViewModel;
@override
Widget build(BuildContext context) {
return Directionality(
projectViewModel = Provider.of(context);
return Directionality(
textDirection: TextDirection.ltr,
child: Container(
padding: EdgeInsets.only(left: 16,right: 16, top:8),
padding: EdgeInsets.only(left: 16, right: 16, top: 8),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(24),
),
child: Stack(
children: [
// Left icon (replace with your asset if needed)
SvgPicture.asset("assets/images/svg/main_banner.svg", height: 170 ,width: MediaQuery.sizeOf(context).width,fit: BoxFit.fill),
SvgPicture.asset("assets/images/svg/main_banner.svg", height: 170, width: MediaQuery.sizeOf(context).width, fit: BoxFit.fill),
// Main content
Padding(
padding: const EdgeInsets.only(right:8.0, left: 8.0),
padding: const EdgeInsets.only(right: 8.0, left: 8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@ -32,9 +44,9 @@ class DiscountCardWidget extends StatelessWidget {
/// Arabic Section (top-right)
Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: const [
children: [
Text(
"خصم %25",
projectViewModel.hisProjectOffers.first.titleArabic!,
style: TextStyle(
fontSize: 20,
fontFamily: 'Cairo',
@ -43,7 +55,7 @@ class DiscountCardWidget extends StatelessWidget {
),
),
Text(
"عرض على الفحوصات الطبية",
projectViewModel.hisProjectOffers.first.descriptionArabic!,
style: TextStyle(
fontSize: 12,
fontFamily: 'Cairo',
@ -59,9 +71,9 @@ class DiscountCardWidget extends StatelessWidget {
/// English Section (middle-left)
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: const [
children: [
Text(
"25% Discount",
projectViewModel.hisProjectOffers.first.titleName!,
style: TextStyle(
fontFamily: 'Poppins',
fontSize: 20,
@ -70,31 +82,27 @@ class DiscountCardWidget extends StatelessWidget {
),
),
Text(
"On a medical examination or test",
projectViewModel.hisProjectOffers.first.descriptionEnglish!,
style: TextStyle(
fontSize: 12,
fontFamily: 'Poppins',
color: Colors.white,
),
),
],
),
],
),
],
),
SizedBox(height: 16),
// Bottom row
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'This Offer is valid till 1st Oct 2025',
'This Offer is valid till ${DateUtil.getMonthDayYearDateFormatted(DateUtil.convertStringToDate(projectViewModel.hisProjectOffers.first.validTo))}',
style: TextStyle(
fontFamily: 'Poppins',
fontSize: 11,
@ -102,9 +110,10 @@ class DiscountCardWidget extends StatelessWidget {
),
),
Text(
'يسري العرض حتى 1 أكتوبر 2025',
"يسري العرض حتى ${DateUtil.getMonthDayYearDateFormattedAr(DateUtil.convertStringToDate(projectViewModel.hisProjectOffers.first.validTo))}",
style: TextStyle(
fontFamily: 'Cairo', fontSize: 11,
fontFamily: 'Cairo',
fontSize: 11,
fontWeight: FontWeight.w300,
color: Colors.white,
),
@ -119,4 +128,4 @@ class DiscountCardWidget extends StatelessWidget {
),
);
}
}
}

@ -1,22 +1,45 @@
import 'dart:developer';
import 'dart:ui';
import 'package:auto_size_text/auto_size_text.dart' show AutoSizeText;
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:hmg_patient_app/config/config.dart';
import 'package:hmg_patient_app/config/shared_pref_kay.dart';
import 'package:hmg_patient_app/core/enum/PayfortEnums.dart';
import 'package:hmg_patient_app/core/model/hospitals/hospitals_model.dart';
import 'package:hmg_patient_app/core/viewModels/project_view_model.dart';
import 'package:hmg_patient_app/models/Appointments/AppoimentAllHistoryResultList.dart';
import 'package:hmg_patient_app/models/Authentication/authenticated_user.dart';
import 'package:hmg_patient_app/models/LiveCare/ApplePayInsertRequest.dart';
import 'package:hmg_patient_app/pages/landing/landing_page.dart';
import 'package:hmg_patient_app/services/appointment_services/GetDoctorsList.dart';
import 'package:hmg_patient_app/services/livecare_services/livecare_provider.dart';
import 'package:hmg_patient_app/services/payfort_services/payfort_project_details_resp_model.dart';
import 'package:hmg_patient_app/services/payfort_services/payfort_view_model.dart';
import 'package:hmg_patient_app/uitl/app_shared_preferences.dart';
import 'package:hmg_patient_app/uitl/app_toast.dart';
import 'package:hmg_patient_app/uitl/gif_loader_dialog_utils.dart';
import 'package:hmg_patient_app/uitl/translations_delegate_base.dart';
import 'package:hmg_patient_app/uitl/utils.dart';
import 'package:hmg_patient_app/uitl/utils_new.dart';
import 'package:hmg_patient_app/widgets/buttons/custom_text_button.dart';
import 'package:hmg_patient_app/widgets/buttons/defaultButton.dart';
import 'package:hmg_patient_app/widgets/dialogs/alert_dialog.dart';
import 'package:hmg_patient_app/widgets/dialogs/location_selection_dialog.dart' show LocationSelectionDialog;
import 'package:hmg_patient_app/widgets/in_app_browser/InAppBrowser.dart';
import 'package:hmg_patient_app/widgets/others/app_scaffold_widget.dart';
import 'package:hmg_patient_app/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart';
import '../../../widgets/dialogs/confirm_dialog.dart';
import '../../ToDoList/payment_method_select.dart';
class OfferDetailsPage extends StatefulWidget {
final String title;
VoidCallback? onLoginClick;
const OfferDetailsPage({super.key, required this.title});
OfferDetailsPage({super.key, required this.title, required this.onLoginClick});
@override
State<OfferDetailsPage> createState() => _OfferDetailsPageState();
@ -24,12 +47,23 @@ class OfferDetailsPage extends StatefulWidget {
class _OfferDetailsPageState extends State<OfferDetailsPage> {
HospitalsModel? selectedHospital;
late ProjectViewModel projectViewModel;
String selectedPaymentMethod = "VISA";
String transID = "";
late String tamaraPaymentStatus;
late String tamaraOrderID;
late MyInAppBrowser browser;
@override
Widget build(BuildContext context) {
projectViewModel = Provider.of(context);
return Directionality(
// lock the whole page to LTR
textDirection: TextDirection.ltr,
child:AppScaffold(
child: AppScaffold(
isShowDecPage: false,
isShowAppBar: false,
showNewAppBar: true,
@ -38,200 +72,187 @@ class _OfferDetailsPageState extends State<OfferDetailsPage> {
appBarTitle: widget.title,
body: Column(
children: [
Expanded(child: SingleChildScrollView(
child: Column(
children: [
/// Banner
SvgPicture.asset(
"assets/images/svg/details_page_banner.svg",
height: 120,
fit: BoxFit.fill,
),
Expanded(
child: SingleChildScrollView(
child: Column(
children: [
/// Banner
SvgPicture.asset(
"assets/images/svg/details_page_banner.svg",
height: 120,
fit: BoxFit.fill,
),
/// Arabic Offer Section
Padding(
padding: const EdgeInsets.symmetric(
horizontal: 24.0, vertical: 32.0),
child: Column(
children: [
Padding(
padding: const EdgeInsets.only(top: 32),
child: Directionality(
textDirection: TextDirection.rtl,
/// Arabic Offer Section
Padding(
padding: const EdgeInsets.symmetric(horizontal: 24.0, vertical: 32.0),
child: Column(
children: [
Padding(
padding: const EdgeInsets.only(top: 32),
child: Directionality(
textDirection: TextDirection.rtl,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
projectViewModel.hisProjectOffers.first.titleArabic!,
style: TextStyle(
fontFamily: 'Cairo',
fontSize: 22,
fontWeight: FontWeight.bold,
color: Color(0xff008b4c),
),
),
Text(
projectViewModel.hisProjectOffers.first.descriptionArabic!,
style: TextStyle(
fontFamily: 'Cairo',
fontWeight: FontWeight.w300,
fontSize: 16,
),
),
SizedBox(height: 12),
Text(
projectViewModel.hisProjectOffers.first.detailsArabic!,
style: TextStyle(
fontFamily: 'Cairo',
fontWeight: FontWeight.w300,
fontSize: 14,
),
),
],
),
),
),
const SizedBox(height: 20),
const Divider(thickness: 1, color: Color(0xff008b4c)),
const SizedBox(height: 20),
/// English Offer Section
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: const [
children: [
Text(
"خصم %25",
projectViewModel.hisProjectOffers.first.titleName!,
style: TextStyle(
fontFamily: 'Cairo',
fontSize: 22,
fontWeight: FontWeight.bold,
color: Color(0xff008b4c),
),
),
Text(
"عرض على الفحوصات الطبية",
projectViewModel.hisProjectOffers.first.descriptionEnglish!,
style: TextStyle(
fontFamily: 'Cairo',
fontWeight: FontWeight.w300,
fontFamily: 'Poppins',
fontSize: 16,
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 12),
Text(
"تفاصيل العرض هنا تفاصيل العرض هنا تفاصيل العرض هنا تفاصيل العرض هنا تفاصيل العرض هنا تفاصيل العرض هنا تفاصيل العرض هنا تفاصيل العرض هنا تفاصيل العرض هنا",
projectViewModel.hisProjectOffers.first.detailsEnglish!,
style: TextStyle(
fontFamily: 'Cairo',
fontWeight: FontWeight.w300,
fontSize: 14,
fontFamily: 'Poppins',
),
),
],
),
),
),
const SizedBox(height: 20),
const Divider(thickness: 1, color: Colors.green),
const SizedBox(height: 20),
/// English Offer Section
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: const [
Text(
"25% Discount",
style: TextStyle(
fontSize: 22,
fontWeight: FontWeight.bold,
color: Colors.green,
),
),
Text(
"On a medical examination or test",
style: TextStyle(
fontFamily: 'Poppins',
fontSize: 16,
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 12),
Text(
"OFFER DETAILS HERE OFFER DETAILS HERE OFFER DETAILS HERE OFFER DETAILS HERE OFFER DETAILS HERE",
style: TextStyle(
fontSize: 14,
fontFamily: 'Poppins',
),
const SizedBox(height: 24),
/// Hospital Dropdown (mock UI)
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
decoration: BoxDecoration(
color: Colors.grey.shade300,
borderRadius: BorderRadius.circular(12),
),
],
),
),
const SizedBox(height: 24),
/// Hospital Dropdown (mock UI)
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Container(
padding: const EdgeInsets.symmetric(
horizontal: 16, vertical: 12),
decoration: BoxDecoration(
color: Colors.grey.shade300,
borderRadius: BorderRadius.circular(12),
),
child: InkWell(
onTap: (){
openHospitalSelection(context);
},
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Column(
children: [
Directionality(
textDirection: TextDirection.rtl,
child: Text(
selectedHospital?.nameN ??"مستشفى المحمدية",
child: InkWell(
onTap: () {
openHospitalSelection(context);
},
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Column(
children: [
Directionality(
textDirection: TextDirection.rtl,
child: Text(
selectedHospital?.nameN ?? TranslationBase.of(context).selectHospital,
style: TextStyle(
fontWeight: FontWeight.bold,
fontFamily: 'Cairo',
),
),
),
Text(
selectedHospital?.name ?? TranslationBase.of(context).selectHospital,
style: TextStyle(
fontWeight: FontWeight.bold,
fontFamily: 'Cairo',
fontFamily: 'Poppins',
),
),
),
Text(
selectedHospital?.name??"Al Muhammadiya Hospital",
style: TextStyle(
fontWeight: FontWeight.bold,
fontFamily: 'Poppins',
),
),
],
],
),
),
),
Icon(Icons.arrow_drop_down),
],
Icon(Icons.arrow_drop_down),
],
),
),
),
),
),
const SizedBox(height: 24),
const SizedBox(height: 24),
/// Buttons
],
/// Buttons
],
),
),
),
const SizedBox(height: 30),
],
const SizedBox(height: 30),
],
),
),
),),
),
Padding(
padding: const EdgeInsets.only(
left: 12.0, right:12, bottom: 8),
padding: const EdgeInsets.only(left: 12.0, right: 12.0, bottom: 8),
child: Row(
children: [
SizedBox(
width: MediaQuery.of(context).size.width-24,
height: 56,
child: CustomTextButton(
shape: cardRadiusNew(8),
//shape: OutlinedBorder(),
backgroundColor: Color(0xFFFBF2E31),
elevation: 0,
onPressed: () {},
child: Center(
child: RichText(
text: TextSpan(
text: "Pay Now",
style: TextStyle(
fontFamily: 'Poppins',
),
children: [
TextSpan(
text:" ادفع الآن",
style: TextStyle(
fontWeight: FontWeight.w300,
fontFamily: 'Cairo',
),
),
]
),
),
),
),
width: MediaQuery.of(context).size.width - 24,
height: 50,
child: DefaultButton("Pay Now ادفع الآن", () {
if (projectViewModel.isLogin) {
if (selectedHospital != null) {
startPaymentProcess(context);
} else {
AppToast.showErrorToast(message: TranslationBase.of(context).selectHospital);
}
} else {
ConfirmDialog dialog = new ConfirmDialog(
context: context,
confirmMessage: TranslationBase.of(context).loginToUseService,
okText: TranslationBase.of(context).confirm,
cancelText: TranslationBase.of(context).cancel_nocaps,
okFunction: () {
Navigator.of(context).pop();
widget.onLoginClick!();
},
cancelFunction: () => {});
dialog.showAlertDialog(context);
}
}),
),
],
),
),
@ -241,26 +262,281 @@ class _OfferDetailsPageState extends State<OfferDetailsPage> {
);
}
startPaymentProcess(BuildContext context) {
Navigator.push(
context,
FadePage(
page: PaymentMethod(
onSelectedMethod: (String metohd, [String? selectedInstallmentPlan]) {
selectedPaymentMethod = metohd;
},
patientShare: projectViewModel.hisProjectOffers.first.amountWithTax,
isShowInstallments: false,
isFromAdvancePayment: false),
),
).then((value) {
if (selectedPaymentMethod == "ApplePay") {
if (projectViewModel.havePrivilege(103)) {
startApplePay(context);
} else {
openPayment(selectedPaymentMethod, projectViewModel.authenticatedUserObject.user, projectViewModel.hisProjectOffers.first.amountWithTax!, AppoitmentAllHistoryResultList());
}
} else {
openPayment(selectedPaymentMethod, projectViewModel.authenticatedUserObject.user, projectViewModel.hisProjectOffers.first.amountWithTax!, AppoitmentAllHistoryResultList());
}
});
}
void startApplePay(BuildContext context) async {
transID = Utils.getAdvancePaymentTransID(selectedHospital!.iD!, projectViewModel.authenticatedUserObject.user.patientID!);
print("TransactionID: $transID");
GifLoaderDialogUtils.showMyDialog(context);
LiveCareService service = new LiveCareService();
ApplePayInsertRequest applePayInsertRequest = new ApplePayInsertRequest();
PayfortProjectDetailsRespModel? payfortProjectDetailsRespModel;
await context.read<PayfortViewModel>().getProjectDetailsForPayfort(projectId: selectedHospital!.iD!, serviceId: projectViewModel.hisProjectOffers.first.serviceId).then((value) {
payfortProjectDetailsRespModel = value!;
});
applePayInsertRequest.clientRequestID = transID;
applePayInsertRequest.clinicID = 0;
applePayInsertRequest.currency = projectViewModel.authenticatedUserObject.user.outSA == 1 ? "AED" : "SAR";
// applePayInsertRequest.customerEmail = projectViewModel.authenticatedUserObject.user.emailAddress;
applePayInsertRequest.customerEmail = "CustID_${projectViewModel.authenticatedUserObject.user.patientID}@HMG.com";
applePayInsertRequest.customerID = projectViewModel.authenticatedUserObject.user.patientID;
applePayInsertRequest.customerName = projectViewModel.authenticatedUserObject.user.firstName! + " " + projectViewModel.authenticatedUserObject.user.lastName!;
applePayInsertRequest.deviceToken = await AppSharedPreferences().getString(PUSH_TOKEN);
applePayInsertRequest.voipToken = await AppSharedPreferences().getString(ONESIGNAL_APNS_TOKEN);
applePayInsertRequest.doctorID = 0;
applePayInsertRequest.projectID = selectedHospital!.iD.toString();
applePayInsertRequest.serviceID = projectViewModel.hisProjectOffers.first.serviceId.toString();
applePayInsertRequest.channelID = 3;
applePayInsertRequest.patientID = projectViewModel.authenticatedUserObject.user.patientID;
applePayInsertRequest.patientTypeID = projectViewModel.authenticatedUserObject.user.patientType;
applePayInsertRequest.patientOutSA = projectViewModel.authenticatedUserObject.user.outSA;
applePayInsertRequest.appointmentDate = null;
applePayInsertRequest.appointmentNo = 0;
applePayInsertRequest.orderDescription = "Advance Payment";
applePayInsertRequest.liveServiceID = "0";
applePayInsertRequest.latitude = "0.0";
applePayInsertRequest.longitude = "0.0";
applePayInsertRequest.amount = projectViewModel.hisProjectOffers.first.amountWithTax.toString();
applePayInsertRequest.isSchedule = "0";
applePayInsertRequest.language = projectViewModel.isArabic ? 'ar' : 'en';
applePayInsertRequest.languageID = projectViewModel.isArabic ? 1 : 2;
applePayInsertRequest.userName = projectViewModel.authenticatedUserObject.user.patientID;
applePayInsertRequest.responseContinueURL = "http://hmg.com/Documents/success.html";
applePayInsertRequest.backClickUrl = "http://hmg.com/Documents/success.html";
applePayInsertRequest.paymentOption = "ApplePay";
applePayInsertRequest.isMobSDK = true;
applePayInsertRequest.merchantReference = transID;
applePayInsertRequest.merchantIdentifier = payfortProjectDetailsRespModel!.merchantIdentifier;
applePayInsertRequest.commandType = "PURCHASE";
applePayInsertRequest.signature = payfortProjectDetailsRespModel!.signature;
applePayInsertRequest.accessCode = payfortProjectDetailsRespModel!.accessCode;
applePayInsertRequest.shaRequestPhrase = payfortProjectDetailsRespModel!.shaRequest;
applePayInsertRequest.shaResponsePhrase = payfortProjectDetailsRespModel!.shaResponse;
applePayInsertRequest.returnURL = "";
service.applePayInsertRequest(applePayInsertRequest, context).then((res) async {
GifLoaderDialogUtils.hideDialog(context);
if (res["MessageStatus"] == 1) {
await context.read<PayfortViewModel>().initiateApplePayWithPayfort(
customerName: projectViewModel.authenticatedUserObject.user.firstName! + " " + projectViewModel.authenticatedUserObject.user.lastName!,
// customerEmail: projectViewModel.authenticatedUserObject.user.emailAddress,
customerEmail: "CustID_${projectViewModel.authenticatedUserObject.user.patientID}@HMG.com",
orderDescription: "Advance Payment",
orderAmount: projectViewModel.hisProjectOffers.first.amountWithTax,
merchantReference: transID,
payfortProjectDetailsRespModel: payfortProjectDetailsRespModel,
currency: projectViewModel.authenticatedUserObject.user.outSA == 1 ? "AED" : "SAR",
onFailed: (failureResult) async {
// GifLoaderDialogUtils.hideDialog(context);
log("failureResult: ${failureResult.message.toString()}");
AppToast.showErrorToast(message: failureResult.message.toString());
},
onSuccess: (successResult) async {
// GifLoaderDialogUtils.hideDialog(context);
GifLoaderDialogUtils.showMyDialog(context);
log("Payfort: ${successResult.responseMessage}");
await context.read<PayfortViewModel>().addPayfortApplePayResponse(projectViewModel.authenticatedUserObject.user.patientID!, result: successResult);
await Future.delayed(Duration(milliseconds: 300));
GifLoaderDialogUtils.hideDialog(context);
await Future.delayed(Duration(milliseconds: 300));
checkPaymentStatus(AppoitmentAllHistoryResultList());
},
projectId: selectedHospital!.iD,
serviceTypeEnum: ServiceTypeEnum.advancePayment,
);
} else {
GifLoaderDialogUtils.hideDialog(context);
AppToast.showErrorToast(message: "An error occurred while processing your request");
}
}).catchError((err) {
print(err);
GifLoaderDialogUtils.hideDialog(context);
AppToast.showErrorToast(message: err);
});
}
openPayment(String paymentMethod, AuthenticatedUser authenticatedUser, num amount, AppoitmentAllHistoryResultList appo) {
browser = new MyInAppBrowser(onExitCallback: onBrowserExit, appo: appo, onLoadStartCallback: onBrowserLoadStart);
transID = Utils.getAdvancePaymentTransID(selectedHospital!.iD, projectViewModel.authenticatedUserObject.user.patientID!);
browser.openPaymentBrowser(
amount,
"Advance Payment",
transID,
selectedHospital!.iD.toString(),
projectViewModel.authenticatedUserObject.user.emailAddress!,
paymentMethod,
projectViewModel.authenticatedUserObject.user.patientType,
"${projectViewModel.authenticatedUserObject.user.firstName} ${projectViewModel.authenticatedUserObject.user.lastName}",
projectViewModel.authenticatedUserObject.user.patientID,
authenticatedUser,
browser,
false,
"3",
"0",
context,
"",
"",
"",
"",
3);
}
onBrowserLoadStart(String url) {
print("onBrowserLoadStart");
print(url);
if (selectedPaymentMethod == "TAMARA") {
Uri uri = new Uri.dataFromString(url);
tamaraPaymentStatus = uri.queryParameters['paymentStatus']!;
tamaraOrderID = uri.queryParameters['orderId']!;
print(tamaraPaymentStatus);
print(tamaraOrderID);
}
MyInAppBrowser.successURLS.forEach((element) {
if (url.contains(element)) {
if (browser.isOpened()) browser.close();
MyInAppBrowser.isPaymentDone = true;
return;
}
});
MyInAppBrowser.errorURLS.forEach((element) {
if (url.contains(element)) {
if (browser.isOpened()) browser.close();
MyInAppBrowser.isPaymentDone = false;
return;
}
});
}
onBrowserExit(AppoitmentAllHistoryResultList appo, bool isPaymentMade) {
print("onBrowserExit Called");
if (selectedPaymentMethod == "TAMARA" && tamaraPaymentStatus != null && tamaraPaymentStatus == "approved") {
var res = {
"Amount": projectViewModel.hisProjectOffers.first.amountWithTax!,
"ErrorMessage": null,
"Fort_id": tamaraOrderID,
"Merchant_Reference": "5058637919318707883366",
"PaymentMethod": "TAMARA",
"Response_Message": "Success"
};
purchaseOfferAPICall(res);
} else {
checkPaymentStatus(appo);
}
}
checkPaymentStatus(AppoitmentAllHistoryResultList appo) {
String txn_ref;
String amount;
String payment_method;
final currency = projectViewModel.user!.outSA == 0 ? "sar" : 'aed';
GifLoaderDialogUtils.showMyDialog(context);
DoctorsListService service = new DoctorsListService();
service.checkPaymentStatus(transID, false, context).then((res) {
String paymentInfo = res['Response_Message'];
if (paymentInfo == 'Success') {
txn_ref = res['Merchant_Reference'];
amount = res['Amount'].toString();
payment_method = res['PaymentMethod'];
purchaseOfferAPICall(res);
} else {
GifLoaderDialogUtils.hideDialog(AppGlobal.context);
AppToast.showErrorToast(message: res['Response_Message']);
amount = projectViewModel.hisProjectOffers.first.amountWithTax!.toString();
payment_method = selectedPaymentMethod;
}
}).catchError((err) {
GifLoaderDialogUtils.hideDialog(AppGlobal.context);
AppToast.showErrorToast(message: err);
print(err);
});
}
purchaseOfferAPICall(res) {
DoctorsListService service = new DoctorsListService();
String paymentReference = res['Fort_id'].toString();
service.purchaseOfferAPICall(transID, selectedHospital!.iD!).then((res) {
GifLoaderDialogUtils.hideDialog(AppGlobal.context);
if (res['MessageStatus'] == 1) {
// AppToast.showSuccessToast(message: "Your payment has been made successfully");
// Navigator.pop(context, true);
AlertDialogBox(
context: context,
confirmMessage: projectViewModel.isArabic
? "تمت عملية الدفع بنجاح. بإمكانك زيارة ${selectedHospital!.nameN!} والإستفاده من العرض. نتمنى لك الصحة والعافية"
: "Your payment has been successfully received. Please visit ${selectedHospital!.name!} to avail the offer. Wishing you good health & wellness.",
okText: TranslationBase.of(context).ok,
okFunction: () {
AlertDialogBox.closeAlertDialog(context);
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => LandingPage()), (Route<dynamic> r) => false);
}).showAlertDialog(context);
} else {
AppToast.showErrorToast(message: res['Message'] ?? "");
}
}).catchError((err) {
GifLoaderDialogUtils.hideDialog(AppGlobal.context);
AppToast.showErrorToast(message: err);
print(err);
});
}
openHospitalSelection(BuildContext context) {
var projectViewModel = Provider.of<ProjectViewModel>(context, listen: false);
int _selectedHospitalIndex = 0;
List<HospitalsModel> projectsListLocal = [];
Utils.navigationProjectsList.forEach((v) {
projectsListLocal.add(new HospitalsModel.fromJson(v));
projectViewModel.hisProjectOffers.forEach((project) {
projectsListLocal.add(new HospitalsModel(
iD: project.projectId,
name: project.projectEnglish,
nameN: project.projectArabic,
));
});
showDialog(
context: context,
builder: (cxt) => LocationSelectionDialog(
isArabic: projectViewModel.isArabic,
data: projectsListLocal,
title: TranslationBase.of(context).selectHospital,
selectedIndex: _selectedHospitalIndex,
onValueSelected: (index) {
_selectedHospitalIndex = index;
setState(() {
selectedHospital = projectsListLocal[index];
});
setState(() {
selectedHospital = projectsListLocal[index];
});
},
),
);

@ -679,6 +679,7 @@ class _ConfirmLogin extends State<ConfirmLogin> {
loginTokenID = result.logInTokenID,
await sharedPref.setObject(LOGIN_TOKEN_ID, result.logInTokenID),
await sharedPref.setString(TOKEN, result.authenticationTokenID),
projectViewModel.setHISOffersProjectList(authenticatedUserObject.user.HISProject_Offers),
checkIfUserAgreedBefore(result),
projectViewModel.analytics.loginRegistration.login_successful(),
}

@ -60,13 +60,10 @@ class _LaboratoryResultPageState extends State<LaboratoryResultPage> {
showConfirmMessageDialog: false,
billNo: widget.patientLabOrders!.invoiceNo,
// details: model.patientLabSpecialResult[index].resultDataHTML,
details: model.patientLabSpecialResult.isEmpty
? null
: getSpecialResults(model),
details: model.patientLabSpecialResult.isEmpty ? null : getSpecialResults(model),
orderNo: widget.patientLabOrders!.orderNo,
patientLabOrder: widget.patientLabOrders,
labmodel: model
),
labmodel: model),
],
),
),

@ -34,6 +34,8 @@ class DoctorsListService extends BaseService {
String? tokenID;
List<LaserBodyPart> selectedBodyPartList = [];
dynamic hisOffersList;
Future<Map> getDoctorsList(int clinicID, int projectID, bool isNearest, int languageID, BuildContext? context, {doctorId, doctorName, isContinueDentalPlan = false}) async {
Map<String, dynamic> request;
@ -49,14 +51,8 @@ class DoctorsListService extends BaseService {
// Request req = appGlobal.getPublicRequest();
request = {
//
// "IPAdress": "10.20.10.20",
// "VersionID": req.VersionID,
// "Channel": req.Channel,
// "generalid": 'Cs2020@2016\$2958',
"PatientOutSA": authProvider.isLogin ? authUser.outSA : 0,
"TokenID": "",
// "DeviceTypeID": req.DeviceTypeID,
"SessionID": "YckwoXhUmWBsnHKEKig",
"ClinicID": clinicID,
"ProjectID": projectID,
@ -133,8 +129,7 @@ class DoctorsListService extends BaseService {
dynamic localRes = response;
await baseAppClient.post(GET_DOCTORS_LIST_URL,
onSuccess: (response, statusCode) async {
await baseAppClient.post(GET_DOCTORS_LIST_URL, onSuccess: (response, statusCode) async {
localRes = response;
}, onFailure: (String error, int statusCode) {
throw error;
@ -1422,7 +1417,6 @@ class DoctorsListService extends BaseService {
"LanguageID": authUser.patientType,
"PatientType": authUser.patientType,
"IsDownload": isDownload,
};
dynamic localRes;
@ -1884,7 +1878,8 @@ class DoctorsListService extends BaseService {
return Future.value(localRes);
}
Future<Map> autoGenerateInvoiceERClinic(int? projectID, int? paymentMethod, String? paymentReferenceNo, num? amount, String? cardType, String? cardNumber, String? orderID, String? rrn, bool isAdvanceAvailable) async {
Future<Map> autoGenerateInvoiceERClinic(
int? projectID, int? paymentMethod, String? paymentReferenceNo, num? amount, String? cardType, String? cardNumber, String? orderID, String? rrn, bool isAdvanceAvailable) async {
Map<String, dynamic> request;
request = {
"ProjectID": projectID,
@ -1998,4 +1993,17 @@ class DoctorsListService extends BaseService {
return Future.value(localRes);
}
Future<Map> purchaseOfferAPICall(String clientRequestID, int projectId) async {
Map<String, dynamic> request;
request = {"ClientRequestID": clientRequestID, "ProjectId": projectId};
dynamic localRes;
await baseAppClient.post(PURCHASE_OFFER, onSuccess: (response, statusCode) async {
localRes = response;
}, onFailure: (String error, int statusCode) {
throw error;
}, body: request);
return Future.value(localRes);
}
}

@ -7,6 +7,7 @@ import 'package:hmg_patient_app/config/shared_pref_kay.dart';
import 'package:hmg_patient_app/models/Appointments/DoctorListResponse.dart';
import 'package:hmg_patient_app/pages/BookAppointment/SearchResultsByRegion.dart';
import 'package:hmg_patient_app/pages/landing/landing_page.dart';
import 'package:hmg_patient_app/services/appointment_services/GetDoctorsList.dart';
import 'package:hmg_patient_app/theme/theme_notifier.dart';
import 'package:hmg_patient_app/theme/theme_value.dart';
import 'package:hmg_patient_app/uitl/LocalNotification.dart';
@ -36,6 +37,8 @@ class SplashScreen extends StatefulWidget {
class _SplashScreenState extends State<SplashScreen> {
PrivilegeService _privilegeService = locator<PrivilegeService>();
late ProjectViewModel projectProvider;
@override
void initState() {
AppGlobal.context = context;
@ -71,14 +74,18 @@ class _SplashScreenState extends State<SplashScreen> {
// });
}
offerDetailsAPICall() {}
/// load the Privilege from service
Future loadPrivilege() async {
await _privilegeService.getPrivilege();
ProjectViewModel projectProvider = Provider.of<ProjectViewModel>(context, listen: false);
projectProvider.setPrivilegeModelList(privilege: _privilegeService.privilegeModelList);
projectProvider.setVidaPlusProjectList(_privilegeService.vidaPlusProjectListModel);
projectProvider.setHMCProjectList(_privilegeService.hMCProjectListModel);
projectProvider.setProjectsDetailList(_privilegeService.projectDetailListModel);
await _privilegeService.offerDetailsAPICall();
projectProvider.setHISOffersProjectList(_privilegeService.hisOffersList);
double lat = await AppSharedPreferences().getDouble(USER_LAT) ?? 0.0;
double long = await AppSharedPreferences().getDouble(USER_LONG) ?? 0.0;
AppSharedPreferences().clear(); // Clearing Shared Preferences On App Launch
@ -87,6 +94,7 @@ class _SplashScreenState extends State<SplashScreen> {
AppSharedPreferences().setString(APP_LANGUAGE, projectProvider.isArabic ? "ar" : "en");
var themeNotifier = Provider.of<ThemeNotifier>(context, listen: false);
themeNotifier.setTheme(defaultTheme(fontName: projectProvider.isArabic ? 'Cairo' : 'Poppins'));
PushNotificationHandler().init(context); // Asyncronously
AppSharedPreferences().getAll().then((value) {
// debugPrint("ALL SHARED PREFERENCES!!!!!");
@ -98,6 +106,7 @@ class _SplashScreenState extends State<SplashScreen> {
@override
Widget build(BuildContext context) {
projectProvider = Provider.of<ProjectViewModel>(context, listen: false);
return Scaffold(
backgroundColor: Color(0xffF8F8F8),
body: Stack(

@ -163,9 +163,9 @@ class DateUtil {
static getMonth(int month) {
switch (month) {
case 1:
return "January";
return "Jan";
case 2:
return "February";
return "Feb";
case 3:
return "March";
case 4:
@ -179,13 +179,13 @@ class DateUtil {
case 8:
return "August";
case 9:
return "September";
return "Sep";
case 10:
return "October";
return "Oct";
case 11:
return "November";
return "Nov";
case 12:
return "December";
return "Dec";
}
}

@ -39,8 +39,6 @@ class _LaboratoryResultWidgetState extends State<LaboratoryResultWidget> {
void initState() {
super.initState();
this.model = widget.labmodel;
labSpecialResult = widget.details ?? "No Data Available";
}
@ -67,6 +65,7 @@ class _LaboratoryResultWidgetState extends State<LaboratoryResultWidget> {
Widget build(BuildContext context) {
isTabletScreen = isTablet(context);
projectViewModel = Provider.of(context);
labSpecialResult = widget.details ?? "No Data Available";
return BaseView<LabsViewModel>(
onModelReady: (_) {
print("the length of in on model Ready ${model?.patientLabSpecialResult.length}");

@ -290,7 +290,8 @@ class MyInAppBrowser extends InAppBrowser {
form = form.replaceFirst('PATIENT_TYPE_ID', patientData == null ? patientType.toString() : "1");
Platform.isIOS
? form = form.replaceFirst('DEVICE_TOKEN', await AppSharedPreferences().getStringWithDefaultValue(PUSH_TOKEN, "") + "," + await AppSharedPreferences().getStringWithDefaultValue(ONESIGNAL_APNS_TOKEN, ""))
? form = form.replaceFirst(
'DEVICE_TOKEN', await AppSharedPreferences().getStringWithDefaultValue(PUSH_TOKEN, "") + "," + await AppSharedPreferences().getStringWithDefaultValue(ONESIGNAL_APNS_TOKEN, ""))
: form = form.replaceFirst('DEVICE_TOKEN', await sharedPref.getStringWithDefaultValue(PUSH_TOKEN, "") ?? "");
// form = form.replaceFirst('DEVICE_TOKEN', await AppSharedPreferences().getString(PUSH_TOKEN) + "," + await AppSharedPreferences().getString(ONESIGNAL_APNS_TOKEN));

@ -1,8 +1,8 @@
name: hmg_patient_app
description: A new Flutter application.
#version: 4.6.015+2
version: 4.6.0971+40500971
version: 4.6.017+1
#version: 4.6.0972+40500972
environment:
# sdk: ">=3.0.0 <3.13.0"

Loading…
Cancel
Save