Update iOS deployment target to 13.0, enhance Flutter integration, and improve tender submission flow

- Changed the iOS deployment target from 12.0 to 13.0 in Podfile and project settings.
- Updated AppDelegate to support implicit Flutter engine initialization.
- Modified Info.plist to include scene configuration for multiple scenes.
- Enhanced CompletionOfDocumentsRouteData to accept a tenderId parameter.
- Implemented tender submission functionality in TenderDetailViewModel and updated UI components to reflect loading states and success/error messages.
- Added new strings for submission success and error notifications.
This commit is contained in:
AmirReza Jamali
2026-05-30 16:48:05 +03:30
parent ae08b946f6
commit e6b4720dcd
19 changed files with 445 additions and 55 deletions
@@ -6,6 +6,7 @@ import 'package:tm_app/data/services/model/tender_data/tender_data.dart';
import 'package:tm_app/data/services/model/tender_detail_response/tender_detail_response_model.dart';
import '../core/constants/tender_approval_status.dart';
import '../core/constants/tender_submision_mode.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';
import '../data/services/model/tender_approvals_toggle_response/tender_approvals_toggle_response.dart';
@@ -143,4 +144,33 @@ class TenderDetailViewModel with ChangeNotifier {
_errorMessage = null;
notifyListeners();
}
/// Submits the tender for completion via the self-apply flow.
/// POSTs to /api/v1/tender-approvals with status "submitted" and
/// submission_mode "self-apply". Returns true on success.
Future<bool> submitForCompletion({required String tenderId}) async {
_isSubmitApprovalLoading = true;
_errorMessage = null;
notifyListeners();
bool success = false;
final result = await _tendersRepository.toggleApprovals(
tenderId: tenderId,
status: TenderApprovalStatus.submitted.value,
submissionMode: TenderSubmissionMode.selfApply.value,
);
switch (result) {
case Ok<TenderApprovalsToggleResponse>():
success = true;
_status = result.value.data?.status ?? '';
break;
case Error<TenderApprovalsToggleResponse>():
_errorMessage = result.error.toString();
break;
}
_isSubmitApprovalLoading = false;
notifyListeners();
return success;
}
}
+13 -4
View File
@@ -206,7 +206,9 @@ class YourTendersViewModel with ChangeNotifier {
offset: _tendersOffset,
);
await getTenders(requestModel: requestModel);
} else if (selectedStatus == YourTendersStrings.tendersSubmitted) {
} else if (selectedStatus == YourTendersStrings.tendersSubmitted ||
selectedStatus == TenderApprovalStatus.submitted.value ||
selectedStatus == TenderApprovalStatus.approved.value) {
final requestModel = GetTendersRequestModel(
status: TenderApprovalStatus.submitted.value,
createdFrom: startDateUnix,
@@ -299,10 +301,17 @@ class YourTendersViewModel with ChangeNotifier {
reset: true,
);
} else if (selectedStatus == TenderApprovalStatus.approved.value) {
await getTendersFeedback(
feedbackType: TenderApprovalStatus.approved.value,
reset: true,
// "Approved tenders" maps to submitted tender-approvals. The API has no
// `approved` value; approved tenders are the ones a company has submitted
// for pursuit (GET /api/v1/tender-approvals?status=submitted).
final requestModel = GetTendersRequestModel(
status: TenderApprovalStatus.submitted.value,
createdFrom: startDateUnix,
createdTo: endDateUnix,
limit: _tendersLimit,
offset: _tendersOffset,
);
await getTenders(requestModel: requestModel, reset: true);
}
}