From 9d04133b8da09cafb216bb3e73c24917c8f41e36 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Tue, 5 May 2026 12:36:32 +0300 Subject: [PATCH] Lakum integration completed --- assets/images/png/lakum_logo_white.png | Bin 0 -> 15851 bytes lib/core/app_assets.dart | 1 + .../habib_wallet/habib_wallet_view_model.dart | 47 ++ .../prescriptions_view_model.dart | 5 +- lib/generated/locale_keys.g.dart | 1 + .../habib_wallet/habib_wallet_page.dart | 2 + .../home/lakum_wallet_details.dart | 430 ++++++++++++++++++ .../home/widgets/lakum_wallet_card.dart | 13 +- lib/theme/colors.dart | 1 + 9 files changed, 493 insertions(+), 7 deletions(-) create mode 100644 assets/images/png/lakum_logo_white.png create mode 100644 lib/presentation/home/lakum_wallet_details.dart diff --git a/assets/images/png/lakum_logo_white.png b/assets/images/png/lakum_logo_white.png new file mode 100644 index 0000000000000000000000000000000000000000..b05c90a238079b2fac79cb6b4f225a7f1ddc2a3d GIT binary patch literal 15851 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 F{y+2|JPH5+ literal 0 HcmV?d00001 diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart index 7f8e175c..f11de07f 100644 --- a/lib/core/app_assets.dart +++ b/lib/core/app_assets.dart @@ -420,6 +420,7 @@ class AppAssets { static const String maleIcon = '$pngBasePath/male_icon.png'; static const String femaleIcon = '$pngBasePath/female_icon.png'; static const String lakumLogo = '$pngBasePath/lakum_logo.png'; + static const String lakumLogoWhite = '$pngBasePath/lakum_logo_white.png'; static const String fullBodyFrontMale = '$pngBasePath/full_body_front_male.png'; static const String fullBodyBackMale = '$pngBasePath/full_body_back_male.png'; diff --git a/lib/features/habib_wallet/habib_wallet_view_model.dart b/lib/features/habib_wallet/habib_wallet_view_model.dart index a99c8351..3a10ad2d 100644 --- a/lib/features/habib_wallet/habib_wallet_view_model.dart +++ b/lib/features/habib_wallet/habib_wallet_view_model.dart @@ -2,6 +2,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/dependencies.dart'; +import 'package:hmg_patient_app_new/core/utils/date_util.dart'; import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_repo.dart'; import 'package:hmg_patient_app_new/features/habib_wallet/models/lakum_inquiry_information_response_model.dart'; import 'package:hmg_patient_app_new/features/habib_wallet/models/patient_advance_balance_response_model.dart'; @@ -49,6 +50,52 @@ class HabibWalletViewModel extends ChangeNotifier { bool isLakumAccountInfoLoading = false; late LakumInquiryInformationResponseModel lakumAccountInfo; + // Get all flattened transactions sorted by date descending + List getAllLakumTransactions() { + if (lakumAccountInfo.gainedPointsAmountPerYear == null) { + return []; + } + + List allTransactions = []; + + // Flatten the nested structure + for (var yearData in lakumAccountInfo.gainedPointsAmountPerYear!) { + if (yearData.pointsAmountPerMonth != null) { + for (var monthData in yearData.pointsAmountPerMonth!) { + if (monthData.pointsAmountPerday != null) { + for (var dayData in monthData.pointsAmountPerday!) { + if (dayData.pointsDetails != null) { + allTransactions.addAll(dayData.pointsDetails!); + } + } + } + } + } + } + + // Sort by transaction date DESCENDING (latest/most recent transactions first, older transactions last) + allTransactions.sort((a, b) { + // Null dates go to the end + if (a.transactionDate == null && b.transactionDate == null) return 0; + if (a.transactionDate == null) return 1; // a goes after b + if (b.transactionDate == null) return -1; // a goes before b + + try { + DateTime dateA = DateUtil.convertStringToDate(a.transactionDate!); + DateTime dateB = DateUtil.convertStringToDate(b.transactionDate!); + + // Compare dateB to dateA (not dateA to dateB) for DESCENDING order + // This puts newer dates (larger values) at the top of the list + return dateB.compareTo(dateA); + } catch (e) { + // If date parsing fails, maintain current order + return 0; + } + }); + + return allTransactions; + } + // Clear amount error void clearAmountError() { _amountError = null; diff --git a/lib/features/prescriptions/prescriptions_view_model.dart b/lib/features/prescriptions/prescriptions_view_model.dart index ad44d33f..475368f0 100644 --- a/lib/features/prescriptions/prescriptions_view_model.dart +++ b/lib/features/prescriptions/prescriptions_view_model.dart @@ -347,8 +347,11 @@ class PrescriptionsViewModel extends ChangeNotifier { result.fold( (failure) async { isPrescriptionsDeliveryOrdersLoading = false; + prescriptionsOrderList.clear(); notifyListeners(); - onError!(failure.message); + if(onError != null) { + onError(failure.message); + } }, (apiResponse) { if (apiResponse.messageStatus == 2) { diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index 0e694d29..839be537 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -1840,5 +1840,6 @@ abstract class LocaleKeys { static const submitEReferral = 'submitEReferral'; static const redeem = 'redeem'; static const points = 'points'; + static const transactions = 'transactions'; } diff --git a/lib/presentation/habib_wallet/habib_wallet_page.dart b/lib/presentation/habib_wallet/habib_wallet_page.dart index c21e7a62..42ad5984 100644 --- a/lib/presentation/habib_wallet/habib_wallet_page.dart +++ b/lib/presentation/habib_wallet/habib_wallet_page.dart @@ -33,6 +33,7 @@ class _HabibWalletState extends State { scheduleMicrotask(() async { habibWalletVM.initHabibWalletProvider(); habibWalletVM.getPatientBalanceAmount(); + habibWalletVM.getLakumAccountInformation(); }); super.initState(); @@ -123,6 +124,7 @@ class _HabibWalletState extends State { .then((val) { habibWalletVM.initHabibWalletProvider(); habibWalletVM.getPatientBalanceAmount(); + habibWalletVM.getLakumAccountInformation(); }); }, ), diff --git a/lib/presentation/home/lakum_wallet_details.dart b/lib/presentation/home/lakum_wallet_details.dart new file mode 100644 index 00000000..ce3133ec --- /dev/null +++ b/lib/presentation/home/lakum_wallet_details.dart @@ -0,0 +1,430 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/api_consts.dart'; +import 'package:hmg_patient_app_new/core/app_assets.dart'; +import 'package:hmg_patient_app_new/core/app_state.dart'; +import 'package:hmg_patient_app_new/core/dependencies.dart'; +import 'package:hmg_patient_app_new/core/utils/date_util.dart'; +import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; +import 'package:hmg_patient_app_new/core/utils/utils.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; +import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_model.dart'; +import 'package:hmg_patient_app_new/features/habib_wallet/models/lakum_inquiry_information_response_model.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; +import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; +import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; +import 'package:provider/provider.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class LakumWalletDetails extends StatelessWidget { + const LakumWalletDetails({super.key}); + + @override + Widget build(BuildContext context) { + AppState appState = getIt.get(); + + return CollapsingListView( + title: LocaleKeys.lakumPoints.tr(context: context), + child: Consumer( + builder: (context, viewModel, child) { + // Check if loading + if (viewModel.isLakumAccountInfoLoading) { + return Center( + child: Padding( + padding: EdgeInsets.all(32.w), + child: CircularProgressIndicator( + color: AppColors.primaryRedColor, + ), + ), + ); + } + + // Check if account number is not available + if (viewModel.yahalaAccountNumber == "0" || viewModel.yahalaAccountNumber.isEmpty) { + return Center( + child: Padding( + padding: EdgeInsets.all(32.w), + child: LocaleKeys.lakumMsg.tr().toText14( + color: AppColors.greyTextColor, + ), + ), + ); + } + + // Get all transactions + List transactions = viewModel.getAllLakumTransactions(); + + // Display main UI + return SingleChildScrollView( + child: Padding( + padding: EdgeInsets.all(16.w), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + // Main Lakum Card with gradient and user info + _buildLakumMainCard(viewModel.lakumAccountInfo, appState), + SizedBox(height: 24.h), + + // Redeem Button + _buildRedeemButton(context), + SizedBox(height: 24.h), + + // Transaction List Header + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + LocaleKeys.transactions.tr(context: context).toText16(isBold: true), + if (transactions.isNotEmpty) "${transactions.length} Records".toText12(color: AppColors.greyTextColor), + ], + ), + SizedBox(height: 12.h), + + // Transaction List Container + if (transactions.isEmpty) _buildEmptyTransactions() else _buildTransactionsList(transactions), + + SizedBox(height: 24.h), + ], + ), + ), + ); + }, + ), + ); + } + + Widget _buildLakumMainCard(LakumInquiryInformationResponseModel accountInfo, AppState appState) { + return Container( + decoration: BoxDecoration( + gradient: LinearGradient( + colors: [ + AppColors.habibPharmacyColor, + AppColors.habibPharmacyColor.withAlpha(220), + ], + begin: Alignment.topLeft, + end: Alignment.bottomRight, + ), + borderRadius: BorderRadius.circular(24.r), + boxShadow: [ + BoxShadow( + color: AppColors.habibPharmacyColor.withAlpha(76), + blurRadius: 16, + offset: Offset(0, 8), + ), + ], + ), + child: Padding( + padding: EdgeInsets.all(20.w), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Top Row: User Info and Grid Icon + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + "${appState.getAuthenticatedUser()?.firstName ?? ''} ${appState.getAuthenticatedUser()?.lastName ?? ''}".toText18( + isBold: true, + color: Colors.white, + ), + SizedBox(height: 4.h), + (accountInfo.accountNumber ?? 0).toString().toText14( + color: Colors.white.withAlpha(230), + ), + ], + ), + ), + Utils.buildImgWithAssets( + icon: AppAssets.lakumLogoWhite, + width: 80.h, + height: 80.h, + ), + ], + ), + // SizedBox(height: 24.h), + LocaleKeys.lakumPoints.tr().toText18(color: Colors.white.withAlpha(230), isBold: true), + SizedBox(height: 8.h), + + // Points Balance + Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + (accountInfo.pointsBalance?.toString() ?? "0").toText44( + isBold: true, + color: Colors.white, + ), + SizedBox(width: 8.w), + LocaleKeys.points + .tr() + .toText18( + color: Colors.white.withAlpha(230), + isBold: true, + ) + .paddingOnly(bottom: 8.h), + ], + ), + SizedBox(height: 4.h), + + // Balance Amount in SAR + "≈ ${accountInfo.pointsBalanceAmount?.toStringAsFixed(2) ?? "0.00"} SAR".toText18( + color: Colors.white.withAlpha(204), + ), + SizedBox(height: 20.h), + + // Stats Row + Row( + children: [ + Expanded( + child: _buildStatChip( + LocaleKeys.gained.tr(), + accountInfo.gainedPoints?.toString() ?? "0", + Icons.arrow_circle_up, + ), + ), + SizedBox(width: 8.w), + Expanded( + child: _buildStatChip( + LocaleKeys.consumed.tr(), + accountInfo.consumedPoints?.toString() ?? "0", + Icons.arrow_circle_down, + ), + ), + ], + ), + ], + ), + ), + ); + } + + Widget _buildStatChip(String label, String value, IconData icon) { + return Container( + padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 10.h), + decoration: BoxDecoration( + color: Colors.white.withAlpha(51), + borderRadius: BorderRadius.circular(12.r), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(icon, color: Colors.white, size: 16.f), + SizedBox(width: 6.w), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + value.toText14(color: Colors.white, isBold: true), + label.toText10(color: Colors.white.withAlpha(204)), + ], + ), + ], + ), + ); + } + + Widget _buildRedeemButton(BuildContext context) { + return CustomButton( + height: 46.h, + icon: AppAssets.redeem_icon, + iconColor: AppColors.whiteColor, + iconSize: 24.h, + backgroundColor: AppColors.habibPharmacyColor, + textColor: AppColors.whiteColor, + text: LocaleKeys.redeem.tr(context: context), + borderWidth: 0.w, + fontWeight: FontWeight.w600, + borderColor: AppColors.habibPharmacyColor.withAlpha(15), + padding: EdgeInsets.fromLTRB(4, 0, 12, 0), + fontSize: 14.f, + onPressed: () { + Uri uri = Uri.parse(PHARMACY_REDIRECT_URL); + launchUrl(uri, mode: LaunchMode.externalApplication); + }, + ); + } + + Widget _buildEmptyTransactions() { + return Container( + padding: EdgeInsets.all(32.w), + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 16.r, + hasShadow: false, + ), + child: Center( + child: Column( + children: [ + Icon(Icons.receipt_long_outlined, size: 48.f, color: AppColors.greyTextColor), + SizedBox(height: 12.h), + "No transactions found".toText14( + color: AppColors.greyTextColor, + isCenter: true, + ), + ], + ), + ), + ); + } + + Widget _buildTransactionsList(List transactions) { + return Container( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 16.r, + hasShadow: false, + ), + child: ListView.separated( + padding: EdgeInsets.all(16.w), + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + itemCount: transactions.length, + separatorBuilder: (context, index) => Divider( + color: AppColors.dividerColor, + height: 24.h, + ), + itemBuilder: (context, index) { + return _buildTransactionItem(transactions[index]); + }, + ), + ); + } + + Widget _buildTransactionItem(PointsDetails transaction) { + // Determine if points were gained or used + bool isGained = transaction.operationType?.toLowerCase() == 'gain' || transaction.operationType?.toLowerCase() == 'credit' || (transaction.points ?? 0) > 0; + + Color transactionColor = isGained ? AppColors.habibPharmacyColor : AppColors.primaryRedColor; + String pointsText = "${isGained ? '+' : '-'}${transaction.points?.abs() ?? 0}"; + + // Format date + String formattedDate = ""; + if (transaction.transactionDate != null) { + try { + formattedDate = DateUtil.formatDateToDate( + DateUtil.convertStringToDate(transaction.transactionDate!), + false, + ); + } catch (e) { + formattedDate = transaction.transactionDate ?? ""; + } + } + + return Row( + children: [ + // Transaction Icon + Container( + width: 44.w, + height: 44.h, + decoration: BoxDecoration( + color: transactionColor.withAlpha(25), + borderRadius: BorderRadius.circular(12.r), + ), + child: Icon( + isGained ? Icons.add_rounded : Icons.remove_rounded, + color: transactionColor, + size: 24.f, + ), + ), + SizedBox(width: 12.w), + + // Transaction Details + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + (transaction.subTransactionTypeDescription ?? transaction.operationType ?? "Transaction").toText14( + isBold: true, + maxlines: 2, + ), + SizedBox(height: 2.h), + formattedDate.toText12(color: AppColors.greyTextColor), + ], + ), + ), + + // Points Value + Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + pointsText.toText18( + isBold: true, + color: transactionColor, + ), + if (transaction.amount != null && transaction.amount! > 0) + "${transaction.amount?.toStringAsFixed(2) ?? "0.00"} SAR".toText11( + color: AppColors.greyTextColor, + ), + ], + ), + ], + ); + } +} + +// Custom painter for wavy background pattern +class _WavyBackgroundPainter extends CustomPainter { + @override + void paint(Canvas canvas, Size size) { + // Base color from AppColors + final baseColor = AppColors.habibPharmacyColor; + + final paint = Paint() + ..color = Colors.white.withAlpha(25) + ..style = PaintingStyle.fill; + + // Draw multiple wave patterns + final path1 = Path(); + path1.moveTo(0, size.height * 0.3); + path1.quadraticBezierTo( + size.width * 0.25, + size.height * 0.2, + size.width * 0.5, + size.height * 0.3, + ); + path1.quadraticBezierTo( + size.width * 0.75, + size.height * 0.4, + size.width, + size.height * 0.3, + ); + path1.lineTo(size.width, 0); + path1.lineTo(0, 0); + path1.close(); + canvas.drawPath(path1, paint); + + // Second wave with darker shade + paint.color = Colors.black.withAlpha(15); + final path2 = Path(); + path2.moveTo(0, size.height * 0.6); + path2.quadraticBezierTo( + size.width * 0.3, + size.height * 0.5, + size.width * 0.6, + size.height * 0.6, + ); + path2.quadraticBezierTo( + size.width * 0.8, + size.height * 0.7, + size.width, + size.height * 0.6, + ); + path2.lineTo(size.width, size.height); + path2.lineTo(0, size.height); + path2.close(); + canvas.drawPath(path2, paint); + + // Decorative circles with white overlay + paint.color = Colors.white.withAlpha(20); + canvas.drawCircle(Offset(size.width * 0.85, size.height * 0.15), 30, paint); + paint.color = Colors.white.withAlpha(10); + canvas.drawCircle(Offset(size.width * 0.15, size.height * 0.75), 40, paint); + } + + @override + bool shouldRepaint(covariant CustomPainter oldDelegate) => false; +} diff --git a/lib/presentation/home/widgets/lakum_wallet_card.dart b/lib/presentation/home/widgets/lakum_wallet_card.dart index f8abbeae..cda3c064 100644 --- a/lib/presentation/home/widgets/lakum_wallet_card.dart +++ b/lib/presentation/home/widgets/lakum_wallet_card.dart @@ -12,6 +12,7 @@ import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_mode import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/habib_wallet/habib_wallet_page.dart'; import 'package:hmg_patient_app_new/presentation/habib_wallet/recharge_wallet_page.dart'; +import 'package:hmg_patient_app_new/presentation/home/lakum_wallet_details.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart'; @@ -66,7 +67,7 @@ class LakumWalletCard extends StatelessWidget { // mainAxisAlignment: MainAxisAlignment.spaceBetween, // children: [ // LocaleKeys.habibWallet.tr(context: context).toText16(isBold: true, letterSpacing: -0.2), - "Lakum Wallet".toText16(isBold: true, letterSpacing: -0.2), + LocaleKeys.lakumPoints.tr(context: context).toText16(isBold: true, letterSpacing: -0.2), // Container( // height: 40.h, // width: 40.h, @@ -121,14 +122,14 @@ class LakumWalletCard extends StatelessWidget { child: CustomButton( height: 40.h, icon: AppAssets.redeem_icon, - iconColor: AppColors.successColor, + iconColor: AppColors.habibPharmacyColor, iconSize: 24.h, - backgroundColor: AppColors.successColor.withAlpha(15), - textColor: AppColors.successColor, + backgroundColor: AppColors.habibPharmacyColor.withAlpha(15), + textColor: AppColors.habibPharmacyColor, text: LocaleKeys.redeem.tr(context: context), borderWidth: 0.w, fontWeight: FontWeight.w600, - borderColor: AppColors.successColor.withAlpha(15), + borderColor: AppColors.habibPharmacyColor.withAlpha(15), padding: EdgeInsets.fromLTRB(4, 0, 12, 0), fontSize: 14.f, onPressed: () { @@ -164,7 +165,7 @@ class LakumWalletCard extends StatelessWidget { ).onPress(() { Navigator.of(context).push( CustomPageRoute( - page: HabibWalletPage(), + page: LakumWalletDetails(), ), ); }), diff --git a/lib/theme/colors.dart b/lib/theme/colors.dart index 1e39eac8..1ecbcb61 100644 --- a/lib/theme/colors.dart +++ b/lib/theme/colors.dart @@ -40,6 +40,7 @@ class AppColors { static Color get lightGreenColor => isDarkMode ? dark.lightGreenColor : const Color(0xFF0ccedde); static Color get ratingColorYellow => isDarkMode ? dark.ratingColorYellow : const Color(0xFFFFAF15); static Color get spacerLineColor => isDarkMode ? dark.spacerLineColor : const Color(0x2E30391A); + static Color get habibPharmacyColor => const Color(0xFF2d9137); // ── Doctor Rating Colors ────────────────────────────────────────────────── static const Color ratingStarIconColor = Color(0xFFFFA726); // Orange-amber for star icons