Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 
 
 

244 Zeilen
7.2 KiB

  1. import 'package:dio/dio.dart';
  2. import 'package:file_picker/file_picker.dart';
  3. import 'package:qadirneyriz/config/config.dart';
  4. import 'package:qadirneyriz/models/meetings/meetings_model.dart';
  5. import 'package:qadirneyriz/models/meetings/one_meeting_model.dart';
  6. import 'package:qadirneyriz/setting/setting.dart';
  7. import 'package:qadirneyriz/utils/result/result.dart';
  8. class MeetingsApi {
  9. Future<MeetingsModel> getMeetings({
  10. required int count,
  11. required int page,
  12. String? fromDate,
  13. String? toDate,
  14. int? location,
  15. int? subject,
  16. int? meetingManager,
  17. int? status,
  18. }) async {
  19. Map<String, String> headers = {
  20. 'Accept': 'application/json',
  21. };
  22. String dataToken = setting.userLocalDb.getUser().token!;
  23. if (dataToken != '') {
  24. headers['Authorization'] = "Bearer $dataToken";
  25. }
  26. final String link = "${config.network.baseUrl}meetings";
  27. print(
  28. 'Parameters: count: $count, page: $page, fromDate: $fromDate, toDate: $toDate, location: $location, subject: $subject, meetingManager: $meetingManager, status: $status');
  29. final response = await Dio().get(link,
  30. options: Options(
  31. headers: headers,
  32. ),
  33. queryParameters: {
  34. 'count': count,
  35. 'page': page,
  36. 'date_meeting_az': fromDate,
  37. 'date_meeting_ta': toDate,
  38. 'location': location,
  39. 'subject': subject,
  40. 'meeting_manager': meetingManager,
  41. 'status': status,
  42. });
  43. // print('${response.data} response.data');
  44. final MeetingsModel meetingsList = MeetingsModel.fromJson(response.data);
  45. return meetingsList;
  46. }
  47. // one meeting
  48. Future<OneMeetingModel> getOneMeeting({required final int id}) async {
  49. Map<String, String> headers = {
  50. 'Accept': 'application/json',
  51. };
  52. String dataToken = setting.userLocalDb.getUser().token!;
  53. if (dataToken != '') {
  54. headers['Authorization'] = "Bearer $dataToken";
  55. }
  56. final String link = "${config.network.baseUrl}meeting/$id";
  57. final response = await Dio().get(
  58. link,
  59. options: Options(
  60. headers: headers,
  61. ),
  62. );
  63. print('${response.data} response.data');
  64. final OneMeetingModel oneMeet = OneMeetingModel.fromJson(response.data);
  65. return oneMeet;
  66. }
  67. // edit meeting
  68. Future<Result> editMeetingApi(
  69. {required int id,
  70. required int locationId,
  71. required int subjectId,
  72. required int managerId,
  73. required String fromHour,
  74. required String toHour,
  75. required String dateMeeting,
  76. required List<int> members}) async {
  77. try {
  78. Map<String, String> headers = {"Accept": "application/json"};
  79. String dataToken = setting.userLocalDb.getUser().token!;
  80. if (dataToken != '') {
  81. headers['Authorization'] = "Bearer $dataToken";
  82. }
  83. FormData? formData;
  84. formData = FormData.fromMap({
  85. 'id': id,
  86. 'locations_id': locationId,
  87. 'subject_id': subjectId,
  88. 'manager_id': managerId,
  89. 'az_hour': fromHour,
  90. 'ta_hour': toHour,
  91. 'members[]': members,
  92. 'date_meeting': dateMeeting,
  93. });
  94. print('${formData.fields} things to send');
  95. final res = await Dio().post(
  96. "${config.network.baseUrl}admin/edit-meeting",
  97. data: formData,
  98. options: Options(headers: headers));
  99. if (res.statusCode == 200 || res.statusCode == 201) {
  100. return Result(isOk: true, message: res.data['message']);
  101. }
  102. } on DioException catch (e) {
  103. print(e);
  104. return Result(
  105. isOk: false,
  106. errors: e.response!.data['errors'],
  107. message: e.response!.data['message']);
  108. }
  109. return const Result(isOk: false);
  110. }
  111. // cancel meeting
  112. Future<Result> cancelMeetingApi({
  113. required int id,
  114. }) async {
  115. try {
  116. Map<String, String> headers = {"Accept": "application/json"};
  117. String dataToken = setting.userLocalDb.getUser().token!;
  118. if (dataToken != '') {
  119. headers['Authorization'] = "Bearer $dataToken";
  120. }
  121. FormData? formData;
  122. formData = FormData.fromMap({
  123. 'meeting_id': id,
  124. });
  125. final res = await Dio().post(
  126. "${config.network.baseUrl}admin/cancel-meeting",
  127. data: formData,
  128. options: Options(headers: headers));
  129. if (res.statusCode == 200 || res.statusCode == 201) {
  130. return Result(isOk: true, message: res.data['message']);
  131. }
  132. } on DioException catch (e) {
  133. print(e);
  134. return Result(
  135. isOk: false,
  136. errors: e.response!.data['errors'],
  137. message: e.response!.data['message']);
  138. }
  139. return const Result(isOk: false);
  140. }
  141. // accept meeting
  142. Future<Result> acceptMeetingApi({
  143. required int id,
  144. }) async {
  145. try {
  146. Map<String, String> headers = {"Accept": "application/json"};
  147. String dataToken = setting.userLocalDb.getUser().token!;
  148. if (dataToken != '') {
  149. headers['Authorization'] = "Bearer $dataToken";
  150. }
  151. FormData? formData;
  152. formData = FormData.fromMap({
  153. 'meeting_id': id,
  154. });
  155. final res = await Dio().post(
  156. "${config.network.baseUrl}admin/accept-meeting",
  157. data: formData,
  158. options: Options(headers: headers));
  159. if (res.statusCode == 200 || res.statusCode == 201) {
  160. return Result(isOk: true, message: res.data['message']);
  161. }
  162. } on DioException catch (e) {
  163. print(e);
  164. return Result(
  165. isOk: false,
  166. errors: e.response!.data['errors'],
  167. message: e.response!.data['message']);
  168. }
  169. return const Result(isOk: false);
  170. }
  171. // add meeting minutes
  172. Future<Result> addMeetingMinuteApi({
  173. required int id,
  174. required String description,
  175. required List<PlatformFile> meetingFiles, // List of PlatformFile
  176. }) async {
  177. try {
  178. Map<String, String> headers = {"Accept": "application/json"};
  179. String dataToken = setting.userLocalDb.getUser().token!;
  180. if (dataToken.isNotEmpty) {
  181. headers['Authorization'] = "Bearer $dataToken";
  182. }
  183. // Create FormData
  184. FormData formData = FormData();
  185. // Add id and description fields
  186. formData.fields.add(MapEntry('id', id.toString()));
  187. formData.fields.add(MapEntry('description', description));
  188. // Check if meetingFiles is not empty and add files to FormData
  189. if (meetingFiles.isNotEmpty) {
  190. for (var file in meetingFiles) {
  191. if (file.path != null) {
  192. // Ensure that the file path is not null
  193. formData.files.add(
  194. MapEntry(
  195. 'meeting_files[]', await MultipartFile.fromFile(file.path!)),
  196. );
  197. }
  198. }
  199. }
  200. // Send request
  201. final res = await Dio().post(
  202. "${config.network.baseUrl}admin/add-meeting-minutes",
  203. data: formData,
  204. options: Options(headers: headers),
  205. );
  206. // Check response status
  207. if (res.statusCode == 200 || res.statusCode == 201) {
  208. return Result(isOk: true, message: res.data['message']);
  209. }
  210. } on DioException catch (e) {
  211. print(e);
  212. return Result(
  213. isOk: false,
  214. errors: e.response?.data['errors'],
  215. message: e.response?.data['message'],
  216. );
  217. }
  218. return const Result(isOk: false);
  219. }
  220. }