Если альфа скорринг пройден, не показываем кнопка привязки карты при консультации.

This commit is contained in:
2026-08-17 15:10:33 +03:00
parent 388607190f
commit ca1caa4adb
6 changed files with 112 additions and 10 deletions

View File

@@ -17,6 +17,7 @@ import 'package:eatvio_app/features/chat/presentation/bloc/chat_room_cubit/chat_
import 'package:eatvio_app/features/chat/presentation/bloc/chats_cubit/chats_cubit.dart';
import 'package:eatvio_app/features/chat/repositories/chat_repository.dart';
import 'package:eatvio_app/features/chat/utils/chat_counterpart_utils.dart';
import 'package:eatvio_app/features/consultant/become_consultant/repositories/consultant_repository.dart';
import 'package:eatvio_app/features/my_finance/models/card_model.dart';
import 'package:eatvio_app/features/my_finance/repositories/cards_repository.dart';
import 'package:eatvio_app/features/plans/models/chosen_plan_model.dart';
@@ -27,6 +28,7 @@ import 'package:uuid/uuid.dart';
class ChatRoomCubit extends Cubit<ChatRoomState> {
final ChatRepository chatRepository;
final CardsRepository cardsRepository;
final ConsultantRepository consultantRepository;
final WsManager wsManager;
StreamSubscription<ChannelReadEvent>? typingSubscription;
@@ -39,7 +41,12 @@ class ChatRoomCubit extends Cubit<ChatRoomState> {
void Function(bool isOnline)? _presenceOnlineListener;
var uuid = const Uuid();
ChatRoomCubit({required this.chatRepository, required this.wsManager, required this.cardsRepository}) : super(const ChatRoomState.loading());
ChatRoomCubit({
required this.chatRepository,
required this.wsManager,
required this.cardsRepository,
required this.consultantRepository,
}) : super(const ChatRoomState.loading());
void setTimer() {
_timer?.cancel();
@@ -91,6 +98,18 @@ class ChatRoomCubit extends Cubit<ChatRoomState> {
}
}
Future<void> checkAlfaScoringStatus(String slug) async {
try {
final status = await consultantRepository.getMyRequestStatus(slug);
if (status.legalEntity?.alfaScoringStatus.isComplete == true) {
_emitLoaded((current) => current.copyWith(isAlfaScoringComplete: true));
}
} catch (e, st) {
await reportFrom(e, st, this);
log(e.toString(), stackTrace: st);
}
}
/// Инициализирует чат по [uuid] либо по [orderId] (resolve → conversation_uuid).
///
/// При наличии [orderId] сначала вызывается
@@ -137,8 +156,12 @@ class ChatRoomCubit extends Cubit<ChatRoomState> {
);
await _subscribeToPresenceChannel(chatId: chatRoom.id);
if (chosenPlan?.consultantId == chatRoom.users.sender.id) {
if (chosenPlan?.consultantId == wsManager.userId) {
final mySlug = chatRoom.users.sender.id == wsManager.userId
? chatRoom.users.sender.slug
: chatRoom.users.receiver.slug;
await checkCards();
await checkAlfaScoringStatus(mySlug);
}
return resolvedUuid;
} catch (e, st) {

View File

@@ -14,6 +14,7 @@ abstract class ChatRoomState with _$ChatRoomState {
required ChatRoomModel chatRoom,
required List<ChatMessageModel> chatMessages,
required bool hasCard,
@Default(false) bool isAlfaScoringComplete,
required bool isTyping,
required bool isLoading,
}) = ChatRoomStateLoaded;

View File

@@ -190,7 +190,10 @@ class _ChatScreenState extends State<ChatScreen> {
BannerType? bannerType;
if (chosenPlan == null || chosenPlan.chosenPlanState == ChosenPlanStateEnum.stateCanceledByTheInitiator) {
bannerType = null;
} else if (amIConsultant && !state.hasCard && chosenPlan.chosenPlanState == ChosenPlanStateEnum.stateInCoordination) {
} else if (amIConsultant &&
!state.hasCard &&
!state.isAlfaScoringComplete &&
chosenPlan.chosenPlanState == ChosenPlanStateEnum.stateInCoordination) {
bannerType = BannerType.card;
} else if (amIConsultant && chosenPlan.chosenPlanState == ChosenPlanStateEnum.stateInCoordination) {
bannerType = BannerType.date;