You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

127 rivejä
3.8 KiB

  1. import 'dart:io';
  2. import 'package:path_provider/path_provider.dart';
  3. import 'package:dio/dio.dart';
  4. import 'package:qadirneyriz/config/config.dart';
  5. import 'package:qadirneyriz/setting/setting.dart';
  6. import 'package:qadirneyriz/utils/result/result.dart';
  7. class ReportApi {
  8. Future<Result?> downloadReportMeetings(
  9. {String? fromDate,
  10. String? toDate,
  11. int? location,
  12. int? subject,
  13. int? meetingManager,
  14. int? status,
  15. required String format}) async {
  16. try {
  17. final Map<String, String> headers = {"Accept": "application/json"};
  18. String dataToken = setting.userLocalDb.getUser().token!;
  19. if (dataToken != '') {
  20. headers['Authorization'] = "Bearer $dataToken";
  21. }
  22. final Directory tempDir = await getApplicationDocumentsDirectory();
  23. final String tempPath = tempDir.path;
  24. final String savePath = '$tempPath/report.$format';
  25. final res = await Dio().download(
  26. '${config.network.baseUrl}statistic',
  27. savePath,
  28. queryParameters: {
  29. 'date_meeting_az': fromDate,
  30. 'date_meeting_ta': toDate,
  31. 'location': location,
  32. 'subject': subject,
  33. 'meeting_manager': meetingManager,
  34. 'status': status,
  35. 'format': format
  36. },
  37. options: Options(headers: headers),
  38. );
  39. if (res.statusCode == 200 || res.statusCode == 201) {
  40. return Result(isOk: true, message: savePath);
  41. } else {
  42. return Result(
  43. isOk: false, message: 'Failed with status code: ${res.statusCode}');
  44. }
  45. } on DioException catch (e) {
  46. // print(e);
  47. return Result(
  48. isOk: false,
  49. errors: e.response?.data['errors'],
  50. message:
  51. e.response?.data['message'] ?? 'An error occurred during download.',
  52. );
  53. }
  54. }
  55. Future<Result?> downloadReportPrivateMeetings(
  56. {String? fromDate,
  57. String? toDate,
  58. int? location,
  59. int? subject,
  60. int? meetingManager,
  61. int? status,
  62. required String format}) async {
  63. try {
  64. final Map<String, String> headers = {"Accept": "application/json"};
  65. String dataToken = setting.userLocalDb.getUser().token!;
  66. if (dataToken != '') {
  67. headers['Authorization'] = "Bearer $dataToken";
  68. }
  69. final Directory tempDir = await getApplicationDocumentsDirectory();
  70. final String tempPath = tempDir.path;
  71. final String savePath = '$tempPath/reportprivatemeeting.$format';
  72. // print("Download path: $savePath");
  73. final String url = '${config.network.baseUrl}private_meetings/export';
  74. // print("Download URL: $url");
  75. final Map<String, dynamic> params = {
  76. 'date_meeting_az': fromDate,
  77. 'date_meeting_ta': toDate,
  78. 'location': location,
  79. 'subject': subject,
  80. 'meeting_manager': meetingManager,
  81. 'status': status,
  82. 'format': format
  83. };
  84. // print("Request parameters: $params");
  85. final res = await Dio().download(
  86. url,
  87. savePath,
  88. queryParameters: params,
  89. options: Options(headers: headers),
  90. );
  91. // print("Response status: ${res.statusCode}");
  92. // print("Response headers: ${res.headers}");
  93. if (res.statusCode == 200 || res.statusCode == 201) {
  94. // print("File downloaded successfully: $savePath");
  95. return Result(isOk: true, message: savePath);
  96. } else {
  97. print("Failed with status code: ${res.statusCode}");
  98. return Result(
  99. isOk: false, message: 'Failed with status code: ${res.statusCode}');
  100. }
  101. } on DioException catch (e) {
  102. print("DioException: $e");
  103. print("Error response data: ${e.response?.data}");
  104. return Result(
  105. isOk: false,
  106. errors: e.response?.data['errors'],
  107. message:
  108. e.response?.data['message'] ?? 'An error occurred during download.',
  109. );
  110. }
  111. }
  112. }