From 926f0de450636fce9e27d52f2dba98f943328474 Mon Sep 17 00:00:00 2001 From: Username1548 Date: Tue, 10 Jun 2025 19:57:20 +0700 Subject: [PATCH] feat(userPurchases, consultantFinances): added status to models and layout for status --- .../models/consultant_finance_model.dart | 7 ++--- .../models/user_purchases_model.dart | 6 ++-- .../consultant_finances_screen.dart | 14 +++++++-- .../consultations_archive_screen.dart | 12 +++++++- .../presentation/user_purchases_screen.dart | 21 ++++++++++---- .../presentation/widgets/status_widget.dart | 29 ++++++++++++------- .../menu/presentation/pages/menu_screen.dart | 1 - 7 files changed, 61 insertions(+), 29 deletions(-) diff --git a/lib/features/finances_and_consultations_archive/models/consultant_finance_model.dart b/lib/features/finances_and_consultations_archive/models/consultant_finance_model.dart index 41161f22..9e8cc751 100644 --- a/lib/features/finances_and_consultations_archive/models/consultant_finance_model.dart +++ b/lib/features/finances_and_consultations_archive/models/consultant_finance_model.dart @@ -13,6 +13,7 @@ abstract class ConsultantFinanceModel with _$ConsultantFinanceModel { @JsonKey(name: 'clientName') required String clientName, @JsonKey(name: 'duration') required int duration, @JsonKey(name: 'payment_price', fromJson: _parsePayment) required String paymentPrice, + required PaymentStatus? paymentStatus, }) = _ConsultantFinanceModel; factory ConsultantFinanceModel.fromJson(Map json) => _$ConsultantFinanceModelFromJson(json); @@ -28,9 +29,5 @@ enum PaymentStatus { @JsonValue('REJECTED') rejected, @JsonValue('CHECKED') - checked, - @JsonValue('CREDIT_CHECKING') - creditChecking, - @JsonValue('COMPLETING') - completing; + checked } diff --git a/lib/features/finances_and_consultations_archive/models/user_purchases_model.dart b/lib/features/finances_and_consultations_archive/models/user_purchases_model.dart index deaf42dc..10c89545 100644 --- a/lib/features/finances_and_consultations_archive/models/user_purchases_model.dart +++ b/lib/features/finances_and_consultations_archive/models/user_purchases_model.dart @@ -1,4 +1,5 @@ import 'package:eatvio_app/features/feed/models/feed_blog_post_model.dart'; +import 'package:eatvio_app/features/plans/enums/chosen_plan_state_enum.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; part 'user_purchases_model.freezed.dart'; @@ -8,12 +9,13 @@ part 'user_purchases_model.g.dart'; abstract class UserPurchasesModel with _$UserPurchasesModel { factory UserPurchasesModel({ @JsonKey(name: 'start_date', fromJson: parseDate) required DateTime startDate, - @JsonKey(name: 'bank_id') required String? bankId, + @JsonKey(name: 'bank_id') required String bankId, @JsonKey(name: 'title') required String title, @JsonKey(name: 'consultantName') required String consultantName, @JsonKey(name: 'duration') required int duration, @JsonKey(name: 'price') required int paymentPrice, + @JsonKey(name: 'chosen_plan_last_state') required ChosenPlanStateEnum chosenPlanState, }) = _UserPurchasesModel; factory UserPurchasesModel.fromJson(Map json) => _$UserPurchasesModelFromJson(json); -} \ No newline at end of file +} diff --git a/lib/features/finances_and_consultations_archive/presentation/consultant_finances_screen.dart b/lib/features/finances_and_consultations_archive/presentation/consultant_finances_screen.dart index 9d1769c4..7e731474 100644 --- a/lib/features/finances_and_consultations_archive/presentation/consultant_finances_screen.dart +++ b/lib/features/finances_and_consultations_archive/presentation/consultant_finances_screen.dart @@ -7,7 +7,9 @@ import 'package:eatvio_app/core/widgets/custom_drop_down_button.dart'; import 'package:eatvio_app/core/widgets/loader.dart'; import 'package:eatvio_app/features/finances_and_consultations_archive/cubit/consultant_finances/consultant_finances_cubit.dart'; import 'package:eatvio_app/features/finances_and_consultations_archive/cubit/consultant_finances/consultant_finances_state.dart'; +import 'package:eatvio_app/features/finances_and_consultations_archive/models/consultant_finance_model.dart'; import 'package:eatvio_app/features/finances_and_consultations_archive/period_enum.dart'; +import 'package:eatvio_app/features/finances_and_consultations_archive/presentation/widgets/status_widget.dart'; import 'package:eatvio_app/features/my_finance/presentation/pages/card_settings.dart'; import 'package:eatvio_app/generated/l10n.dart'; import 'package:flutter/material.dart'; @@ -102,6 +104,12 @@ class _ConsultantFinancesScreenState extends State { shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), itemBuilder: (context, index) { + final Status modelStatus = switch (state.financesModels[index].paymentStatus) { + null => Status.inProgress, + PaymentStatus.completed => Status.success, + PaymentStatus.rejected => Status.canceled, + PaymentStatus.checked => Status.success, + }; return Material( color: const Color(0xFFF6F6F6), borderRadius: BorderRadius.circular(20), @@ -181,9 +189,9 @@ class _ConsultantFinancesScreenState extends State { fontWeight: FontWeight.w600, ), ), - // StatusWidget( - // status: state.consultations[index].chosenPlanState, - // ), + StatusWidget( + status: modelStatus, + ), ], ), ], diff --git a/lib/features/finances_and_consultations_archive/presentation/consultations_archive_screen.dart b/lib/features/finances_and_consultations_archive/presentation/consultations_archive_screen.dart index 9bdecd59..ec2d4900 100644 --- a/lib/features/finances_and_consultations_archive/presentation/consultations_archive_screen.dart +++ b/lib/features/finances_and_consultations_archive/presentation/consultations_archive_screen.dart @@ -9,6 +9,7 @@ import 'package:eatvio_app/features/finances_and_consultations_archive/cubit/arc import 'package:eatvio_app/features/finances_and_consultations_archive/cubit/archive/consultations_archive_state.dart'; import 'package:eatvio_app/features/finances_and_consultations_archive/period_enum.dart'; import 'package:eatvio_app/features/finances_and_consultations_archive/presentation/widgets/status_widget.dart'; +import 'package:eatvio_app/features/plans/enums/chosen_plan_state_enum.dart'; import 'package:eatvio_app/generated/l10n.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -165,6 +166,15 @@ class _ConsultationsArchiveScreenState extends State shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), itemBuilder: (context, index) { + final Status consultationStatus; + if (state.consultations[index].chosenPlanState == ChosenPlanStateEnum.stateCanceledByTheInitiator) { + consultationStatus = Status.canceled; + } else if (state.consultations[index].chosenPlanState == ChosenPlanStateEnum.stateChargeWasCollected) { + consultationStatus = Status.success; + } else { + consultationStatus = Status.inProgress; + } + return Material( color: const Color(0xFFF6F6F6), borderRadius: BorderRadius.circular(20), @@ -246,7 +256,7 @@ class _ConsultationsArchiveScreenState extends State ), ), StatusWidget( - status: state.consultations[index].chosenPlanState, + status: consultationStatus, ), ], ), diff --git a/lib/features/finances_and_consultations_archive/presentation/user_purchases_screen.dart b/lib/features/finances_and_consultations_archive/presentation/user_purchases_screen.dart index e1f9f036..6f137211 100644 --- a/lib/features/finances_and_consultations_archive/presentation/user_purchases_screen.dart +++ b/lib/features/finances_and_consultations_archive/presentation/user_purchases_screen.dart @@ -8,6 +8,8 @@ import 'package:eatvio_app/core/widgets/loader.dart'; import 'package:eatvio_app/features/finances_and_consultations_archive/cubit/user_purchases/user_purchases_cubit.dart'; import 'package:eatvio_app/features/finances_and_consultations_archive/cubit/user_purchases/user_purchases_state.dart'; import 'package:eatvio_app/features/finances_and_consultations_archive/period_enum.dart'; +import 'package:eatvio_app/features/finances_and_consultations_archive/presentation/widgets/status_widget.dart'; +import 'package:eatvio_app/features/plans/enums/chosen_plan_state_enum.dart'; import 'package:eatvio_app/generated/l10n.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -84,6 +86,14 @@ class _UserPurchasesScreen extends State { shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), itemBuilder: (context, index) { + final Status purchaseStatus; + if (state.purchasesModels[index].chosenPlanState == ChosenPlanStateEnum.stateCanceledByTheInitiator) { + purchaseStatus = Status.canceled; + } else if (state.purchasesModels[index].chosenPlanState == ChosenPlanStateEnum.stateChargeWasCollected) { + purchaseStatus = Status.success; + } else { + purchaseStatus = Status.inProgress; + } return Material( color: const Color(0xFFF6F6F6), borderRadius: BorderRadius.circular(20), @@ -96,10 +106,9 @@ class _UserPurchasesScreen extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Builder(builder: (context) { - // final idLen = state.purchasesModels[index].bankId.length; - final bankId = state.purchasesModels[index].bankId; + final idLen = state.purchasesModels[index].bankId.length; return Text( - '$bankId', + '${state.purchasesModels[index].bankId.substring(0, 4)}...${state.purchasesModels[index].bankId.substring(idLen - 4, idLen)} ', style: TextStyles.textSMedium.copyWith(color: appTheme.black), ); }), @@ -164,9 +173,9 @@ class _UserPurchasesScreen extends State { fontWeight: FontWeight.w600, ), ), - // StatusWidget( - // status: state.consultations[index].chosenPlanState, - // ), + StatusWidget( + status: purchaseStatus, + ), ], ), ], diff --git a/lib/features/finances_and_consultations_archive/presentation/widgets/status_widget.dart b/lib/features/finances_and_consultations_archive/presentation/widgets/status_widget.dart index d53c254a..fab1fc21 100644 --- a/lib/features/finances_and_consultations_archive/presentation/widgets/status_widget.dart +++ b/lib/features/finances_and_consultations_archive/presentation/widgets/status_widget.dart @@ -1,15 +1,15 @@ import 'package:eatvio_app/core/theme/theme_helper.dart'; -import 'package:eatvio_app/features/plans/enums/chosen_plan_state_enum.dart'; import 'package:flutter/material.dart'; class StatusWidget extends StatelessWidget { const StatusWidget({super.key, required this.status}); - final ChosenPlanStateEnum status; + final Status status; @override Widget build(BuildContext context) { - if (status == ChosenPlanStateEnum.stateCanceledByTheInitiator) { - return Material( + return switch (status){ + + Status.canceled => Material( color: appTheme.lightRed, borderRadius: BorderRadius.circular(8), child: Padding( @@ -24,9 +24,9 @@ class StatusWidget extends StatelessWidget { ), ), ), - ); - } else if (status == ChosenPlanStateEnum.stateChargeWasCollected) { - return Material( + ), + + Status.success => Material( color: const Color(0xFF0BB450).withAlpha(11), borderRadius: BorderRadius.circular(8), child: const Padding( @@ -41,9 +41,9 @@ class StatusWidget extends StatelessWidget { ), ), ), - ); - } - return Material( + ), + + Status.inProgress => Material( color: appTheme.transparentBlue, borderRadius: BorderRadius.circular(8), child: Padding( @@ -58,6 +58,13 @@ class StatusWidget extends StatelessWidget { ), ), ), - ); + ), + }; } } + +enum Status { + canceled, + success, + inProgress +} \ No newline at end of file diff --git a/lib/features/menu/presentation/pages/menu_screen.dart b/lib/features/menu/presentation/pages/menu_screen.dart index 8b3506ed..f657c6a7 100644 --- a/lib/features/menu/presentation/pages/menu_screen.dart +++ b/lib/features/menu/presentation/pages/menu_screen.dart @@ -44,7 +44,6 @@ class MenuScreen extends StatelessWidget { onTap: () { if (profileModel.roles.contains('consultant')) { GoRouter.of(context).push(ConsultantFinancesScreen.path); - GoRouter.of(context).push(UserPurchasesScreen.path); return; } GoRouter.of(context).push(UserPurchasesScreen.path);