25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

331 lines
8.9 KiB

  1. import 'package:flutter/material.dart';
  2. import 'package:qadirneyriz/models/meetings/meetings_model.dart';
  3. import 'package:qadirneyriz/services/meetings/meetings.dart';
  4. import 'package:qadirneyriz/utils/enums/status.dart';
  5. class MeetingsState 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. MeetingsApi meetingsApi = MeetingsApi();
  35. // meetings list
  36. Status statusMeetings = Status.loading;
  37. Status paginationMeetings = Status.ready;
  38. MeetingsModel? meetingsModel;
  39. int pageMeetings = 1;
  40. int limitMeetings = 10;
  41. bool pageEndedMeetings = false;
  42. Future<Status> getMeetings(
  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. statusMeetings = Status.loading;
  52. notifyListeners();
  53. }
  54. if (meetingsModel != null && meetingsModel!.data!.isNotEmpty && !refresh) {
  55. statusMeetings = Status.ready;
  56. notifyListeners();
  57. pageMeetings = 1;
  58. pageEndedMeetings = false;
  59. paginationMeetings = Status.ready;
  60. meetingsModel = await meetingsApi.getMeetings(
  61. page: pageMeetings,
  62. count: limitMeetings,
  63. fromDate: fromDate,
  64. toDate: toDate,
  65. location: location,
  66. subject: subject,
  67. meetingManager: meetingManager,
  68. status: meetingStatus);
  69. } else {
  70. pageMeetings = 1;
  71. pageEndedMeetings = false;
  72. paginationMeetings = Status.ready;
  73. try {
  74. statusMeetings = Status.loading;
  75. notifyListeners();
  76. meetingsModel = await meetingsApi.getMeetings(
  77. page: pageMeetings,
  78. count: limitMeetings,
  79. fromDate: fromDate,
  80. toDate: toDate,
  81. location: location,
  82. subject: subject,
  83. meetingManager: meetingManager,
  84. status: meetingStatus);
  85. if (meetingsModel != null && meetingsModel!.data!.isNotEmpty) {
  86. if (meetingsModel!.data!.isNotEmpty) {
  87. statusMeetings = Status.ready;
  88. } else if (!meetingsModel!.hasData() && meetingsModel == null) {
  89. statusMeetings = Status.empty;
  90. } else if (meetingsModel!.data!.length < limitMeetings) {
  91. pageEndedMeetings = true;
  92. statusMeetings = Status.empty;
  93. }
  94. } else {
  95. statusMeetings = Status.empty;
  96. }
  97. } catch (e) {
  98. statusMeetings = Status.error;
  99. }
  100. notifyListeners();
  101. }
  102. notifyListeners();
  103. // print(statusMeetings);
  104. return statusMeetings;
  105. }
  106. Future<void> nextPageMeetings(
  107. {String? fromDate,
  108. String? toDate,
  109. int? location,
  110. int? subject,
  111. int? meetingManager,
  112. int? meetingStatus}) async {
  113. if (pageEndedMeetings == false && paginationMeetings == Status.ready) {
  114. paginationMeetings = Status.loading;
  115. notifyListeners();
  116. int p = pageMeetings;
  117. pageMeetings = p + 1;
  118. try {
  119. final adsPaginationModel = await meetingsApi.getMeetings(
  120. page: pageMeetings,
  121. count: limitMeetings,
  122. fromDate: fromDate,
  123. toDate: toDate,
  124. location: location,
  125. subject: subject,
  126. meetingManager: meetingManager,
  127. status: meetingStatus);
  128. if (adsPaginationModel.hasData()) {
  129. meetingsModel!.data!.addAll(adsPaginationModel.data!);
  130. if (adsPaginationModel.data!.length < limitMeetings) {
  131. pageEndedMeetings = true;
  132. paginationMeetings = Status.empty;
  133. } else {
  134. paginationMeetings = Status.ready;
  135. }
  136. } else if (!adsPaginationModel.hasData()) {
  137. pageEndedMeetings = true;
  138. paginationMeetings = Status.empty;
  139. }
  140. } catch (e) {
  141. pageEndedMeetings = true;
  142. paginationMeetings = Status.empty;
  143. }
  144. notifyListeners();
  145. }
  146. }
  147. // set date for filters
  148. String fromDate = '';
  149. String toDate = '';
  150. void setFromDates(String? newFromDate) {
  151. fromDate = newFromDate ?? '';
  152. notifyListeners();
  153. }
  154. void setToDates(String? newToDate) {
  155. toDate = newToDate ?? '';
  156. notifyListeners();
  157. }
  158. // clear filters
  159. void clearFilters() {
  160. selectedLocationId = null;
  161. selectedManagersId = null;
  162. selectedStatusId = null;
  163. selectedSubjectId = null;
  164. fromDate = '';
  165. toDate = '';
  166. notifyListeners();
  167. }
  168. // is filter Not empty
  169. bool hasActiveFilters() {
  170. return selectedLocationId != null ||
  171. selectedManagersId != null ||
  172. selectedStatusId != null ||
  173. selectedSubjectId != null ||
  174. fromDate.isNotEmpty ||
  175. toDate.isNotEmpty;
  176. }
  177. // get filters location meetings
  178. int? selectedLocationId;
  179. void selectLocation(int? locationId) {
  180. selectedLocationId = locationId;
  181. notifyListeners();
  182. }
  183. // get filters subjects meetings
  184. int? selectedSubjectId;
  185. void selectSubject(int? subjectId) {
  186. selectedSubjectId = subjectId;
  187. notifyListeners();
  188. }
  189. // get filters meeting managers
  190. int? selectedManagersId;
  191. void selectManager(int? managerId) {
  192. selectedManagersId = managerId;
  193. notifyListeners();
  194. }
  195. // all meeting status filters
  196. int? selectedStatusId;
  197. void selectStatusMeeting(int? statusId) {
  198. selectedStatusId = statusId;
  199. notifyListeners();
  200. }
  201. // cancel meeting
  202. Status statusCancelMeeting = Status.empty;
  203. String? messageCancelMeeting;
  204. Map? errorsCancelMeeting;
  205. Future<Status> cancelMeeting({
  206. required int id,
  207. }) async {
  208. statusCancelMeeting = Status.loading;
  209. notifyListeners();
  210. try {
  211. final result = await meetingsApi.cancelMeetingApi(
  212. id: id,
  213. );
  214. if (result.isOk) {
  215. statusCancelMeeting = Status.ready;
  216. messageCancelMeeting = result.message;
  217. } else if (result.isOk == false) {
  218. // print(result.isOk);
  219. errorsCancelMeeting = result.errors;
  220. messageCancelMeeting = result.message;
  221. statusCancelMeeting = Status.error;
  222. } else {
  223. statusCancelMeeting = Status.error;
  224. }
  225. notifyListeners();
  226. } catch (e) {
  227. statusCancelMeeting = Status.error;
  228. // print(e);
  229. }
  230. notifyListeners();
  231. // print(statusCancelMeeting);
  232. return statusCancelMeeting;
  233. }
  234. // delete meeting
  235. Status statusDeleteMeeting = Status.empty;
  236. String? messageDeleteMeeting;
  237. Map? errorsDeleteMeeting;
  238. Future<Status> deleteMeeting({
  239. required int id,
  240. }) async {
  241. statusDeleteMeeting = Status.loading;
  242. notifyListeners();
  243. try {
  244. final result = await meetingsApi.deleteMeetingApi(
  245. id: id,
  246. );
  247. if (result.isOk) {
  248. statusDeleteMeeting = Status.ready;
  249. messageDeleteMeeting = result.message;
  250. } else if (result.isOk == false) {
  251. print(result.isOk);
  252. errorsDeleteMeeting = result.errors;
  253. messageDeleteMeeting = result.message;
  254. statusDeleteMeeting = Status.error;
  255. } else {
  256. statusDeleteMeeting = Status.error;
  257. }
  258. notifyListeners();
  259. } catch (e) {
  260. statusDeleteMeeting = Status.error;
  261. // print(e);
  262. }
  263. notifyListeners();
  264. // print(statusDeleteMeeting);
  265. return statusDeleteMeeting;
  266. }
  267. // accept meeting
  268. Status statusAcceptMeeting = Status.empty;
  269. String? messageAcceptMeeting;
  270. Map? errorsAcceptMeeting;
  271. Future<Status> acceptMeeting({
  272. required int id,
  273. }) async {
  274. statusAcceptMeeting = Status.loading;
  275. notifyListeners();
  276. try {
  277. final result = await meetingsApi.acceptMeetingApi(
  278. id: id,
  279. );
  280. if (result.isOk) {
  281. statusAcceptMeeting = Status.ready;
  282. messageAcceptMeeting = result.message;
  283. } else if (result.isOk == false) {
  284. // print(result.isOk);
  285. errorsAcceptMeeting = result.errors;
  286. messageAcceptMeeting = result.message;
  287. statusAcceptMeeting = Status.error;
  288. } else {
  289. statusAcceptMeeting = Status.error;
  290. }
  291. notifyListeners();
  292. } catch (e) {
  293. statusAcceptMeeting = Status.error;
  294. // print(e);
  295. }
  296. notifyListeners();
  297. // print(statusAcceptMeeting);
  298. return statusAcceptMeeting;
  299. }
  300. }