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.
 
 
 
 
 
 

428 Zeilen
13 KiB

  1. import 'dart:io';
  2. import 'package:path_provider/path_provider.dart';
  3. import 'package:dio/dio.dart';
  4. import 'package:file_picker/file_picker.dart';
  5. import 'package:qadirneyriz/config/config.dart';
  6. import 'package:qadirneyriz/models/private_meeting/one_private_meeting_model.dart';
  7. import 'package:qadirneyriz/models/private_meeting/private_meetings_model.dart';
  8. import 'package:qadirneyriz/setting/setting.dart';
  9. import 'package:qadirneyriz/utils/result/result.dart';
  10. class PrivateMeetingsApi {
  11. // get all
  12. Future<PrivateMeetingsModel> getPrivateMeetings({
  13. required int count,
  14. required int page,
  15. String? fromDate,
  16. String? toDate,
  17. int? location,
  18. int? subject,
  19. int? meetingManager,
  20. int? status,
  21. }) async {
  22. Map<String, String> headers = {
  23. 'Accept': 'application/json',
  24. };
  25. String dataToken = setting.userLocalDb.getUser().token!;
  26. if (dataToken != '') {
  27. headers['Authorization'] = "Bearer $dataToken";
  28. }
  29. final String link =
  30. "${config.network.baseUrl}private_meetings?lang=${setting.userLocalDb.getUser().language}";
  31. // print(
  32. // 'Parameters: count: $count, page: $page, fromDate: $fromDate, toDate: $toDate, location: $location, subject: $subject, meetingManager: $meetingManager, status: $status');
  33. final response = await Dio().get(link,
  34. options: Options(
  35. headers: headers,
  36. ),
  37. queryParameters: {
  38. 'count': count,
  39. 'page': page,
  40. 'date_meeting_az': fromDate,
  41. 'date_meeting_ta': toDate,
  42. 'location': location,
  43. 'subject': subject,
  44. 'meeting_manager': meetingManager,
  45. 'status': status,
  46. });
  47. final PrivateMeetingsModel privateMeetingsList =
  48. PrivateMeetingsModel.fromJson(response.data);
  49. return privateMeetingsList;
  50. }
  51. // add private meeting
  52. Future<Result> addPrivateMeetingApi({
  53. int? locationId,
  54. int? subjectId,
  55. int? managerId,
  56. required String fromHour,
  57. required String toHour,
  58. required String dateMeeting,
  59. required String visitorName,
  60. required String visitorMobile,
  61. required String visitorRole,
  62. required String visitorCompany,
  63. }) async {
  64. try {
  65. Map<String, String> headers = {"Accept": "application/json"};
  66. String dataToken = setting.userLocalDb.getUser().token!;
  67. if (dataToken != '') {
  68. headers['Authorization'] = "Bearer $dataToken";
  69. }
  70. FormData? formData;
  71. if (managerId != null) {
  72. formData = FormData.fromMap({
  73. 'locations_id': locationId,
  74. 'subject_id': subjectId,
  75. 'manager_id': managerId,
  76. 'az_hour': fromHour,
  77. 'ta_hour': toHour,
  78. 'date_meeting': dateMeeting,
  79. 'visit_name': visitorName,
  80. 'visit_mobile': visitorMobile,
  81. 'visit_role': visitorRole,
  82. 'visit_company': visitorCompany
  83. });
  84. } else {
  85. formData = FormData.fromMap({
  86. 'locations_id': locationId,
  87. 'subject_id': subjectId,
  88. 'az_hour': fromHour,
  89. 'ta_hour': toHour,
  90. 'date_meeting': dateMeeting,
  91. 'visit_name': visitorName,
  92. 'visit_mobile': visitorMobile,
  93. 'visit_role': visitorRole,
  94. 'visit_company': visitorCompany
  95. });
  96. }
  97. final res = await Dio().post(
  98. "${config.network.baseUrl}admin/add-private-meeting",
  99. data: formData,
  100. options: Options(headers: headers));
  101. if (res.statusCode == 200 || res.statusCode == 201) {
  102. return Result(isOk: true, message: res.data['message']);
  103. }
  104. } on DioException catch (e) {
  105. return Result(
  106. isOk: false,
  107. errors: e.response!.data['errors'],
  108. message: e.response!.data['message']);
  109. }
  110. return const Result(isOk: false);
  111. }
  112. // cancel private meeting
  113. Future<Result> cancelPrivateMeetingApi({
  114. required int id,
  115. }) async {
  116. try {
  117. Map<String, String> headers = {"Accept": "application/json"};
  118. String dataToken = setting.userLocalDb.getUser().token!;
  119. if (dataToken != '') {
  120. headers['Authorization'] = "Bearer $dataToken";
  121. }
  122. FormData? formData;
  123. formData = FormData.fromMap({
  124. 'meeting_id': id,
  125. });
  126. final res = await Dio().post(
  127. "${config.network.baseUrl}cancel-private-meeting",
  128. data: formData,
  129. options: Options(headers: headers));
  130. if (res.statusCode == 200 || res.statusCode == 201) {
  131. return Result(isOk: true, message: res.data['message']);
  132. }
  133. } on DioException catch (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 private meeting
  142. Future<Result> acceptPrivateMeetingApi({
  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}accept-private-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. return Result(
  164. isOk: false,
  165. errors: e.response!.data['errors'],
  166. message: e.response!.data['message']);
  167. }
  168. return const Result(isOk: false);
  169. }
  170. // get one private meeting
  171. Future<OnePrivateMeetingModel> getOnePrivateMeeting(
  172. {required final int id}) async {
  173. Map<String, String> headers = {
  174. 'Accept': 'application/json',
  175. };
  176. String dataToken = setting.userLocalDb.getUser().token!;
  177. if (dataToken != '') {
  178. headers['Authorization'] = "Bearer $dataToken";
  179. }
  180. final String link =
  181. "${config.network.baseUrl}private-meeting/$id?lang=${setting.userLocalDb.getUser().language}";
  182. final response = await Dio().get(
  183. link,
  184. options: Options(
  185. headers: headers,
  186. ),
  187. );
  188. final OnePrivateMeetingModel onePrivateMeet =
  189. OnePrivateMeetingModel.fromJson(response.data);
  190. return onePrivateMeet;
  191. }
  192. // edit private meeting
  193. Future<Result> editPrivateMeetingApi({
  194. required int id,
  195. required int locationId,
  196. required int subjectId,
  197. required int managerId,
  198. required String fromHour,
  199. required String toHour,
  200. required String dateMeeting,
  201. required String visitorName,
  202. required String visitorMobile,
  203. required String visitorRole,
  204. required String visitorCompany,
  205. }) async {
  206. try {
  207. Map<String, String> headers = {"Accept": "application/json"};
  208. String dataToken = setting.userLocalDb.getUser().token!;
  209. if (dataToken != '') {
  210. headers['Authorization'] = "Bearer $dataToken";
  211. }
  212. FormData? formData;
  213. formData = FormData.fromMap({
  214. 'id': id,
  215. 'locations_id': locationId,
  216. 'subject_id': subjectId,
  217. 'manager_id': managerId,
  218. 'az_hour': fromHour,
  219. 'ta_hour': toHour,
  220. 'date_meeting': dateMeeting,
  221. 'visit_name': visitorName,
  222. 'visit_mobile': visitorMobile,
  223. 'visit_role': visitorRole,
  224. 'visit_company': visitorCompany
  225. });
  226. final res = await Dio().post(
  227. "${config.network.baseUrl}admin/edit-private-meeting",
  228. data: formData,
  229. options: Options(headers: headers));
  230. if (res.statusCode == 200 || res.statusCode == 201) {
  231. return Result(isOk: true, message: res.data['message']);
  232. }
  233. } on DioException catch (e) {
  234. return Result(
  235. isOk: false,
  236. errors: e.response!.data['errors'],
  237. message: e.response!.data['message']);
  238. }
  239. return const Result(isOk: false);
  240. }
  241. // add private meeting minutes
  242. Future<Result> addMeetingMinuteApi({
  243. required int id,
  244. required String description,
  245. required List<PlatformFile> meetingFiles, // List of PlatformFile
  246. }) async {
  247. try {
  248. Map<String, String> headers = {"Accept": "application/json"};
  249. String dataToken = setting.userLocalDb.getUser().token!;
  250. if (dataToken.isNotEmpty) {
  251. headers['Authorization'] = "Bearer $dataToken";
  252. }
  253. // Create FormData
  254. FormData formData = FormData();
  255. // Add id and description fields
  256. formData.fields.add(MapEntry('id', id.toString()));
  257. formData.fields.add(MapEntry('description', description));
  258. // Check if meetingFiles is not empty and add files to FormData
  259. if (meetingFiles.isNotEmpty) {
  260. for (var file in meetingFiles) {
  261. if (file.path != null) {
  262. // Ensure that the file path is not null
  263. formData.files.add(
  264. MapEntry(
  265. 'meeting_files[]', await MultipartFile.fromFile(file.path!)),
  266. );
  267. }
  268. }
  269. }
  270. // Send request
  271. final res = await Dio().post(
  272. "${config.network.baseUrl}admin/add-private-meeting-minutes",
  273. data: formData,
  274. options: Options(headers: headers),
  275. );
  276. // Check response status
  277. if (res.statusCode == 200 || res.statusCode == 201) {
  278. return Result(isOk: true, message: res.data['message']);
  279. }
  280. } on DioException catch (e) {
  281. return Result(
  282. isOk: false,
  283. errors: e.response?.data['errors'],
  284. message: e.response?.data['message'],
  285. );
  286. }
  287. return const Result(isOk: false);
  288. }
  289. // download meeting summary
  290. Future<Result?> downloadSummary(
  291. {required int id, String? format = 'zip'}) async {
  292. try {
  293. final Map<String, String> headers = {"Accept": "application/json"};
  294. String dataToken = setting.userLocalDb.getUser().token!;
  295. if (dataToken != '') {
  296. headers['Authorization'] = "Bearer $dataToken";
  297. }
  298. final Directory tempDir = await getApplicationDocumentsDirectory();
  299. final String tempPath = tempDir.path;
  300. final String savePath = '$tempPath/sammary_$id.$format';
  301. final res = await Dio().download(
  302. '${config.network.baseUrl}private-download-minutes/$id',
  303. savePath,
  304. options: Options(headers: headers),
  305. );
  306. if (res.statusCode == 200 || res.statusCode == 201) {
  307. return Result(isOk: true, message: savePath);
  308. } else {
  309. return Result(
  310. isOk: false, message: 'Failed with status code: ${res.statusCode}');
  311. }
  312. } on DioException catch (e) {
  313. return Result(
  314. isOk: false,
  315. errors: e.response?.data['errors'],
  316. message:
  317. e.response?.data['message'] ?? 'An error occurred during download.',
  318. );
  319. }
  320. }
  321. // get String file of summary
  322. Future<List<String>> getListStringFils({required int id}) async {
  323. Map<String, String> headers = {
  324. 'Accept': 'application/json',
  325. };
  326. String dataToken = setting.userLocalDb.getUser().token!;
  327. if (dataToken.isNotEmpty) {
  328. headers['Authorization'] = "Bearer $dataToken";
  329. }
  330. // ساخت لینک API
  331. final String link =
  332. "${config.network.baseUrl}admin/all-private-meeting-minutes/$id";
  333. // فراخوانی API
  334. final response = await Dio().get(
  335. link,
  336. options: Options(
  337. headers: headers,
  338. ),
  339. );
  340. print('${response.data} response.data');
  341. // بررسی ساختار پاسخ و تبدیل داده‌ها
  342. if (response.data is List) {
  343. return List<String>.from(response.data);
  344. } else {
  345. return [];
  346. }
  347. }
  348. // delete file of summary
  349. Future<Result> deleteFileSummary({
  350. required int id,
  351. required String text,
  352. }) async {
  353. try {
  354. Map<String, String> headers = {"Accept": "application/json"};
  355. String dataToken = setting.userLocalDb.getUser().token!;
  356. if (dataToken.isNotEmpty) {
  357. headers['Authorization'] = "Bearer $dataToken";
  358. }
  359. // Create FormData
  360. FormData formData = FormData();
  361. // Send request
  362. final link =
  363. "${config.network.baseUrl}admin/delete-private-meeting-minutes/$id/$text";
  364. print('${link}');
  365. final res = await Dio().get(
  366. link,
  367. data: formData,
  368. options: Options(headers: headers),
  369. );
  370. // Check response status
  371. if (res.statusCode == 200 || res.statusCode == 201) {
  372. return Result(isOk: true, message: res.data['message']);
  373. }
  374. } on DioException catch (e) {
  375. print(e);
  376. return Result(
  377. isOk: false,
  378. errors: e.response?.data['errors'],
  379. message: e.response?.data['message'],
  380. );
  381. }
  382. return const Result(isOk: false);
  383. }
  384. }