removed submit and reject tender ability every where except tender details
This commit is contained in:
@@ -4,14 +4,10 @@ import 'package:tm_app/data/repositories/liked_tenders_repository.dart';
|
||||
import 'package:tm_app/data/repositories/tenders_repository.dart';
|
||||
import 'package:tm_app/data/services/model/liked_tender_feedback/liked_tender_feedback.dart';
|
||||
import 'package:tm_app/data/services/model/liked_tenders_response/liked_tenders_response.dart';
|
||||
import 'package:tm_app/data/services/model/tender_approvals_toggle_response/tender_approvals_toggle_response.dart';
|
||||
import 'package:tm_app/view_models/home_view_model.dart';
|
||||
|
||||
import '../core/constants/tender_approval_status.dart';
|
||||
import '../data/services/model/feedback_response/feedback_response.dart';
|
||||
import '../data/services/model/request_models/tender_feedback_request_model/tender_feedback_request_model.dart';
|
||||
import '../data/services/model/tender_approvals_by_id_response/tender_approvals_by_id_response.dart';
|
||||
import '../data/services/model/tender_approvals_data/tender_approvals_data.dart';
|
||||
|
||||
class LikedTendersViewModel with ChangeNotifier {
|
||||
final LikedTendersRepository _likedTendersRepository;
|
||||
@@ -30,11 +26,6 @@ class LikedTendersViewModel with ChangeNotifier {
|
||||
bool hasMore = true;
|
||||
String? errorMessage;
|
||||
LikedTendersResponse? data;
|
||||
TenderApprovalsData? _tenderApprovalData;
|
||||
|
||||
TenderApprovalsData? get tenderApprovalData => _tenderApprovalData;
|
||||
|
||||
List<TenderApprovalsData> tenderApprovals = [];
|
||||
|
||||
int _offset = 0;
|
||||
final int _limit = 7;
|
||||
@@ -43,10 +34,10 @@ class LikedTendersViewModel with ChangeNotifier {
|
||||
|
||||
// Approval status properties
|
||||
bool approvalStatus = false;
|
||||
String _status = '';
|
||||
final String _status = '';
|
||||
String? _errorMessage;
|
||||
bool _isSubmitApprovalLoading = false;
|
||||
bool _isRejectApprovalLoading = false;
|
||||
final bool _isSubmitApprovalLoading = false;
|
||||
final bool _isRejectApprovalLoading = false;
|
||||
|
||||
String get status => _status;
|
||||
String? get approvalErrorMessage => _errorMessage;
|
||||
@@ -100,10 +91,6 @@ class LikedTendersViewModel with ChangeNotifier {
|
||||
final incoming = result.value;
|
||||
final incomingList = incoming.data?.feedback ?? [];
|
||||
|
||||
for (var element in incomingList) {
|
||||
await getTenderApproval(element.tenderId!);
|
||||
}
|
||||
|
||||
if (reset) {
|
||||
data = incoming;
|
||||
} else {
|
||||
@@ -195,203 +182,4 @@ class LikedTendersViewModel with ChangeNotifier {
|
||||
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<void> getTenderApproval(String tenderId) async {
|
||||
errorMessage = null;
|
||||
notifyListeners();
|
||||
|
||||
final result = await _tendersRepository.getTenderApprovals(
|
||||
tenderId: tenderId,
|
||||
);
|
||||
|
||||
switch (result) {
|
||||
case Ok<TenderApprovalsByIdResponse>():
|
||||
_tenderApprovalData = result.value.data;
|
||||
tenderApprovals.add(_tenderApprovalData!);
|
||||
break;
|
||||
case Error<TenderApprovalsByIdResponse>():
|
||||
errorMessage = result.error.toString();
|
||||
break;
|
||||
}
|
||||
|
||||
notifyListeners();
|
||||
errorMessage = null;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
TenderApprovalsData? getApprovalStatusForTender(String tenderId) {
|
||||
try {
|
||||
return tenderApprovals.firstWhere((a) => a.tenderId == tenderId);
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// Check if tender approval exists for a specific tender
|
||||
bool hasTenderApprovalForTender(String tenderId) {
|
||||
return tenderApprovals.any((a) => a.tenderId == tenderId);
|
||||
}
|
||||
|
||||
/// Get approval status for a tender safely
|
||||
String? getApprovalStatusForTenderId(String tenderId) {
|
||||
try {
|
||||
final approval = tenderApprovals.firstWhere(
|
||||
(a) => a.tenderId == tenderId,
|
||||
);
|
||||
return approval.status;
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// Check if tender is submitted
|
||||
bool isTenderSubmitted(String tenderId) {
|
||||
return getApprovalStatusForTenderId(tenderId) ==
|
||||
TenderApprovalStatus.submitted.value;
|
||||
}
|
||||
|
||||
/// Check if tender is rejected
|
||||
bool isTenderRejected(String tenderId) {
|
||||
return getApprovalStatusForTenderId(tenderId) ==
|
||||
TenderApprovalStatus.rejected.value;
|
||||
}
|
||||
|
||||
Future<void> submitTenderApproval({
|
||||
required String tenderId,
|
||||
required String submissionMode,
|
||||
}) async {
|
||||
_isSubmitApprovalLoading = true;
|
||||
_errorMessage = null;
|
||||
notifyListeners();
|
||||
|
||||
// Store original state for rollback
|
||||
final originalApprovals = List<TenderApprovalsData>.of(tenderApprovals);
|
||||
|
||||
// Check current approval status and update optimistically
|
||||
final existingApproval = getApprovalStatusForTender(tenderId);
|
||||
|
||||
if (existingApproval != null) {
|
||||
if (existingApproval.status == TenderApprovalStatus.submitted.value) {
|
||||
// Remove from list if already submitted
|
||||
tenderApprovals.removeWhere((a) => a.tenderId == tenderId);
|
||||
} else if (existingApproval.status ==
|
||||
TenderApprovalStatus.rejected.value) {
|
||||
// Change rejected to submitted
|
||||
final updatedApproval = existingApproval.copyWith(
|
||||
status: TenderApprovalStatus.submitted.value,
|
||||
);
|
||||
final index = tenderApprovals.indexWhere((a) => a.tenderId == tenderId);
|
||||
if (index != -1) {
|
||||
tenderApprovals[index] = updatedApproval;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Add new approval with submitted status
|
||||
final newApproval = TenderApprovalsData(
|
||||
id: null,
|
||||
status: TenderApprovalStatus.submitted.value,
|
||||
tenderId: tenderId,
|
||||
companyId: null,
|
||||
submissionMode: submissionMode,
|
||||
createdAt: null,
|
||||
tender: null,
|
||||
);
|
||||
tenderApprovals.add(newApproval);
|
||||
}
|
||||
|
||||
notifyListeners();
|
||||
|
||||
// Make server request
|
||||
final result = await _tendersRepository.toggleApprovals(
|
||||
tenderId: tenderId,
|
||||
status: TenderApprovalStatus.submitted.value,
|
||||
submissionMode: submissionMode,
|
||||
);
|
||||
|
||||
switch (result) {
|
||||
case Ok<TenderApprovalsToggleResponse>():
|
||||
approvalStatus = true;
|
||||
_status = result.value.data?.status ?? '';
|
||||
break;
|
||||
case Error<TenderApprovalsToggleResponse>():
|
||||
// Rollback changes on error
|
||||
tenderApprovals = originalApprovals;
|
||||
_errorMessage = result.error.toString();
|
||||
approvalStatus = false;
|
||||
break;
|
||||
}
|
||||
approvalStatus = false;
|
||||
_isSubmitApprovalLoading = false;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<void> rejectTenderApproval({
|
||||
required String tenderId,
|
||||
required String submissionMode,
|
||||
}) async {
|
||||
_isRejectApprovalLoading = true;
|
||||
_errorMessage = null;
|
||||
notifyListeners();
|
||||
|
||||
// Store original state for rollback
|
||||
final originalApprovals = List<TenderApprovalsData>.of(tenderApprovals);
|
||||
|
||||
// Check current approval status and update optimistically
|
||||
final existingApproval = getApprovalStatusForTender(tenderId);
|
||||
|
||||
if (existingApproval != null) {
|
||||
if (existingApproval.status == TenderApprovalStatus.rejected.value) {
|
||||
// Remove from list if already rejected
|
||||
tenderApprovals.removeWhere((a) => a.tenderId == tenderId);
|
||||
} else if (existingApproval.status ==
|
||||
TenderApprovalStatus.submitted.value) {
|
||||
// Change submitted to rejected
|
||||
final updatedApproval = existingApproval.copyWith(
|
||||
status: TenderApprovalStatus.rejected.value,
|
||||
);
|
||||
final index = tenderApprovals.indexWhere((a) => a.tenderId == tenderId);
|
||||
if (index != -1) {
|
||||
tenderApprovals[index] = updatedApproval;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Add new approval with rejected status
|
||||
final newApproval = TenderApprovalsData(
|
||||
id: null,
|
||||
status: TenderApprovalStatus.rejected.value,
|
||||
tenderId: tenderId,
|
||||
companyId: null,
|
||||
submissionMode: submissionMode,
|
||||
createdAt: null,
|
||||
tender: null,
|
||||
);
|
||||
tenderApprovals.add(newApproval);
|
||||
}
|
||||
|
||||
notifyListeners();
|
||||
|
||||
// Make server request
|
||||
final result = await _tendersRepository.toggleApprovals(
|
||||
tenderId: tenderId,
|
||||
status: TenderApprovalStatus.rejected.value,
|
||||
submissionMode: submissionMode,
|
||||
);
|
||||
|
||||
switch (result) {
|
||||
case Ok<TenderApprovalsToggleResponse>():
|
||||
approvalStatus = true;
|
||||
_status = result.value.data?.status ?? '';
|
||||
break;
|
||||
case Error<TenderApprovalsToggleResponse>():
|
||||
// Rollback changes on error
|
||||
tenderApprovals = originalApprovals;
|
||||
_errorMessage = result.error.toString();
|
||||
approvalStatus = false;
|
||||
break;
|
||||
}
|
||||
|
||||
approvalStatus = false;
|
||||
_isRejectApprovalLoading = false;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user