Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 
 
 

337 lignes
9.6 KiB

  1. import 'package:flutter/material.dart';
  2. import 'package:qadirneyriz/models/private_meeting/private_meetings_model.dart';
  3. import 'package:qadirneyriz/services/private_meetings/private_meetings.dart';
  4. import 'package:qadirneyriz/utils/enums/status.dart';
  5. class PrivateMeetingsState extends ChangeNotifier {
  6. // ذخیره فیلترهای قبلی برای مقایسه
  7. String? previousFromDate;
  8. String? previousToDate;
  9. int? previousLocationId;
  10. int? previousSubjectId;
  11. int? previousManagersId;
  12. int? previousStatusId;
  13. void setAllFiltersForThen() {
  14. previousFromDate = fromDate;
  15. previousToDate = toDate;
  16. previousLocationId = selectedLocationId;
  17. previousSubjectId = selectedSubjectId;
  18. previousManagersId = selectedManagersId;
  19. previousStatusId = selectedStatusId;
  20. }
  21. bool isAnyChangesInFilters() {
  22. if (previousFromDate != fromDate ||
  23. previousToDate != toDate ||
  24. previousLocationId != selectedLocationId ||
  25. previousSubjectId != selectedSubjectId ||
  26. previousManagersId != selectedManagersId ||
  27. previousStatusId != selectedStatusId) {
  28. return true;
  29. } else {
  30. return false;
  31. }
  32. }
  33. // api meetings
  34. PrivateMeetingsApi privateMeetingsApi = PrivateMeetingsApi();
  35. // meetings list
  36. Status privateStatusMeetings = Status.loading;
  37. Status privatePaginationMeetings = Status.ready;
  38. PrivateMeetingsModel? privateMeetingsModel;
  39. int pagePrivateMeetings = 1;
  40. int limitPrivateMeetings = 10;
  41. bool pageEndedPrivateMeetings = false;
  42. Future<Status> getPrivateMeetings(
  43. {bool refresh = false,
  44. String? fromDate,
  45. String? toDate,
  46. int? location,
  47. int? subject,
  48. int? meetingManager,
  49. int? meetingStatus}) async {
  50. if (refresh) {
  51. privateStatusMeetings = Status.loading;
  52. notifyListeners();
  53. }
  54. if (privateMeetingsModel != null &&
  55. privateMeetingsModel!.data!.isNotEmpty &&
  56. !refresh) {
  57. privateStatusMeetings = Status.ready;
  58. notifyListeners();
  59. pagePrivateMeetings = 1;
  60. pageEndedPrivateMeetings = false;
  61. privatePaginationMeetings = Status.ready;
  62. privateMeetingsModel = await privateMeetingsApi.getPrivateMeetings(
  63. page: pagePrivateMeetings,
  64. count: limitPrivateMeetings,
  65. fromDate: fromDate,
  66. toDate: toDate,
  67. location: location,
  68. subject: subject,
  69. meetingManager: meetingManager,
  70. status: meetingStatus);
  71. } else {
  72. pagePrivateMeetings = 1;
  73. pageEndedPrivateMeetings = false;
  74. privatePaginationMeetings = Status.ready;
  75. try {
  76. privateStatusMeetings = Status.loading;
  77. notifyListeners();
  78. privateMeetingsModel = await privateMeetingsApi.getPrivateMeetings(
  79. page: pagePrivateMeetings,
  80. count: limitPrivateMeetings,
  81. fromDate: fromDate,
  82. toDate: toDate,
  83. location: location,
  84. subject: subject,
  85. meetingManager: meetingManager,
  86. status: meetingStatus);
  87. if (privateMeetingsModel != null &&
  88. privateMeetingsModel!.data!.isNotEmpty) {
  89. if (privateMeetingsModel!.data!.isNotEmpty) {
  90. privateStatusMeetings = Status.ready;
  91. } else if (!privateMeetingsModel!.hasData() &&
  92. privateMeetingsModel == null) {
  93. privateStatusMeetings = Status.empty;
  94. } else if (privateMeetingsModel!.data!.length <
  95. limitPrivateMeetings) {
  96. pageEndedPrivateMeetings = true;
  97. privateStatusMeetings = Status.empty;
  98. }
  99. } else {
  100. privateStatusMeetings = Status.empty;
  101. }
  102. } catch (e) {
  103. privateStatusMeetings = Status.error;
  104. // print('$e');
  105. }
  106. notifyListeners();
  107. }
  108. notifyListeners();
  109. // print(privateStatusMeetings);
  110. return privateStatusMeetings;
  111. }
  112. Future<void> nextPagePrivateMeetings(
  113. {String? fromDate,
  114. String? toDate,
  115. int? location,
  116. int? subject,
  117. int? meetingManager,
  118. int? meetingStatus}) async {
  119. if (pageEndedPrivateMeetings == false &&
  120. privatePaginationMeetings == Status.ready) {
  121. privatePaginationMeetings = Status.loading;
  122. notifyListeners();
  123. int p = pagePrivateMeetings;
  124. pagePrivateMeetings = p + 1;
  125. try {
  126. final adsPaginationModel = await privateMeetingsApi.getPrivateMeetings(
  127. page: pagePrivateMeetings,
  128. count: limitPrivateMeetings,
  129. fromDate: fromDate,
  130. toDate: toDate,
  131. location: location,
  132. subject: subject,
  133. meetingManager: meetingManager,
  134. status: meetingStatus);
  135. if (adsPaginationModel.hasData()) {
  136. privateMeetingsModel!.data!.addAll(adsPaginationModel.data!);
  137. if (adsPaginationModel.data!.length < limitPrivateMeetings) {
  138. pageEndedPrivateMeetings = true;
  139. privatePaginationMeetings = Status.empty;
  140. } else {
  141. privatePaginationMeetings = Status.ready;
  142. }
  143. } else if (!adsPaginationModel.hasData()) {
  144. pageEndedPrivateMeetings = true;
  145. privatePaginationMeetings = Status.empty;
  146. }
  147. } catch (e) {
  148. pageEndedPrivateMeetings = true;
  149. privatePaginationMeetings = Status.empty;
  150. }
  151. notifyListeners();
  152. }
  153. }
  154. // set date for filters
  155. String fromDate = '';
  156. String toDate = '';
  157. void setFromDates(String? newFromDate) {
  158. fromDate = newFromDate ?? '';
  159. notifyListeners();
  160. }
  161. void setToDates(String? newToDate) {
  162. toDate = newToDate ?? '';
  163. notifyListeners();
  164. }
  165. // clear filters
  166. void clearFilters() {
  167. selectedLocationId = null;
  168. selectedManagersId = null;
  169. selectedStatusId = null;
  170. selectedSubjectId = null;
  171. fromDate = '';
  172. toDate = '';
  173. notifyListeners();
  174. }
  175. // is filter Not empty
  176. bool hasActiveFilters() {
  177. return selectedLocationId != null ||
  178. selectedManagersId != null ||
  179. selectedStatusId != null ||
  180. selectedSubjectId != null ||
  181. fromDate.isNotEmpty ||
  182. toDate.isNotEmpty;
  183. }
  184. // get filters location meetings
  185. int? selectedLocationId;
  186. void selectLocation(int? locationId) {
  187. selectedLocationId = locationId;
  188. notifyListeners();
  189. }
  190. // get filters subjects meetings
  191. int? selectedSubjectId;
  192. void selectSubject(int? subjectId) {
  193. selectedSubjectId = subjectId;
  194. notifyListeners();
  195. }
  196. // get filters meeting managers
  197. int? selectedManagersId;
  198. void selectManager(int? managerId) {
  199. selectedManagersId = managerId;
  200. notifyListeners();
  201. }
  202. // all meeting status filters
  203. int? selectedStatusId;
  204. void selectStatusMeeting(int? statusId) {
  205. selectedStatusId = statusId;
  206. notifyListeners();
  207. }
  208. // cancel meeting
  209. Map<int, Status> statusCancelMeeting = {};
  210. String? messageCancelMeeting;
  211. Map? errorsCancelMeeting;
  212. Future<Status> cancelMeeting({
  213. required int id,
  214. }) async {
  215. statusCancelMeeting[id] = Status.loading;
  216. notifyListeners();
  217. try {
  218. final result = await privateMeetingsApi.cancelPrivateMeetingApi(
  219. id: id,
  220. );
  221. if (result.isOk) {
  222. statusCancelMeeting[id] = Status.ready;
  223. messageCancelMeeting = result.message;
  224. } else if (result.isOk == false) {
  225. // print(result.isOk);
  226. errorsCancelMeeting = result.errors;
  227. messageCancelMeeting = result.message;
  228. statusCancelMeeting[id] = Status.error;
  229. } else {
  230. statusCancelMeeting[id] = Status.error;
  231. }
  232. notifyListeners();
  233. } catch (e) {
  234. statusCancelMeeting[id] = Status.error;
  235. // print(e);
  236. }
  237. notifyListeners();
  238. // print(statusCancelMeeting);
  239. return statusCancelMeeting[id]!;
  240. }
  241. // delete meeting
  242. Map<int, Status> statusDeleteMeeting = {};
  243. String? messageDeleteMeeting;
  244. Map? errorsDeleteMeeting;
  245. Future<Status> deleteMeeting({
  246. required int id,
  247. }) async {
  248. statusDeleteMeeting[id] = Status.loading;
  249. notifyListeners();
  250. try {
  251. final result = await privateMeetingsApi.deletePrivateMeetingApi(
  252. id: id,
  253. );
  254. if (result.isOk) {
  255. statusDeleteMeeting[id] = Status.ready;
  256. messageDeleteMeeting = result.message;
  257. } else if (result.isOk == false) {
  258. // print(result.isOk);
  259. errorsDeleteMeeting = result.errors;
  260. messageDeleteMeeting = result.message;
  261. statusDeleteMeeting[id] = Status.error;
  262. } else {
  263. statusDeleteMeeting[id] = Status.error;
  264. }
  265. notifyListeners();
  266. } catch (e) {
  267. statusDeleteMeeting[id] = Status.error;
  268. // print(e);
  269. }
  270. notifyListeners();
  271. // print(statusDeleteMeeting);
  272. return statusDeleteMeeting[id]!;
  273. }
  274. // accept meeting
  275. Map<int, Status> statusAcceptMeeting = {};
  276. String? messageAcceptMeeting;
  277. Map? errorsAcceptMeeting;
  278. Future<Status> acceptMeeting({
  279. required int id,
  280. }) async {
  281. statusAcceptMeeting[id] = Status.loading;
  282. notifyListeners();
  283. try {
  284. final result = await privateMeetingsApi.acceptPrivateMeetingApi(
  285. id: id,
  286. );
  287. if (result.isOk) {
  288. statusAcceptMeeting[id] = Status.ready;
  289. messageAcceptMeeting = result.message;
  290. } else if (result.isOk == false) {
  291. // print(result.isOk);
  292. errorsAcceptMeeting = result.errors;
  293. messageAcceptMeeting = result.message;
  294. statusAcceptMeeting[id] = Status.error;
  295. } else {
  296. statusAcceptMeeting[id] = Status.error;
  297. }
  298. notifyListeners();
  299. } catch (e) {
  300. statusAcceptMeeting[id] = Status.error;
  301. // print(e);
  302. }
  303. notifyListeners();
  304. // print(statusAcceptMeeting);
  305. return statusAcceptMeeting[id]!;
  306. }
  307. }