No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 
 

266 líneas
7.1 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. // api meetings
  7. MeetingsApi meetingsApi = MeetingsApi();
  8. // meetings list
  9. Status statusMeetings = Status.loading;
  10. Status paginationMeetings = Status.ready;
  11. MeetingsModel? meetingsModel;
  12. int pageMeetings = 1;
  13. int limitMeetings = 10;
  14. bool pageEndedMeetings = false;
  15. Future<Status> getMeetings(
  16. {bool refresh = false,
  17. String? fromDate,
  18. String? toDate,
  19. int? location,
  20. int? subject,
  21. int? meetingManager,
  22. int? meetingStatus}) async {
  23. if (refresh) {
  24. statusMeetings = Status.loading;
  25. notifyListeners();
  26. }
  27. if (meetingsModel != null && meetingsModel!.data!.isNotEmpty && !refresh) {
  28. statusMeetings = Status.ready;
  29. notifyListeners();
  30. pageMeetings = 1;
  31. pageEndedMeetings = false;
  32. paginationMeetings = Status.ready;
  33. meetingsModel = await meetingsApi.getMeetings(
  34. page: pageMeetings,
  35. count: limitMeetings,
  36. fromDate: fromDate,
  37. toDate: toDate,
  38. location: location,
  39. subject: subject,
  40. meetingManager: meetingManager,
  41. status: meetingStatus);
  42. } else {
  43. pageMeetings = 1;
  44. pageEndedMeetings = false;
  45. paginationMeetings = Status.ready;
  46. try {
  47. statusMeetings = Status.loading;
  48. notifyListeners();
  49. meetingsModel = await meetingsApi.getMeetings(
  50. page: pageMeetings,
  51. count: limitMeetings,
  52. fromDate: fromDate,
  53. toDate: toDate,
  54. location: location,
  55. subject: subject,
  56. meetingManager: meetingManager,
  57. status: meetingStatus);
  58. if (meetingsModel != null && meetingsModel!.data!.isNotEmpty) {
  59. if (meetingsModel!.data!.isNotEmpty) {
  60. statusMeetings = Status.ready;
  61. } else if (!meetingsModel!.hasData() && meetingsModel == null) {
  62. statusMeetings = Status.empty;
  63. } else if (meetingsModel!.data!.length < limitMeetings) {
  64. pageEndedMeetings = true;
  65. statusMeetings = Status.empty;
  66. }
  67. } else {
  68. statusMeetings = Status.empty;
  69. }
  70. } catch (e) {
  71. statusMeetings = Status.error;
  72. }
  73. notifyListeners();
  74. }
  75. notifyListeners();
  76. print(statusMeetings);
  77. return statusMeetings;
  78. }
  79. Future<void> nextPageMeetings(
  80. {String? fromDate,
  81. String? toDate,
  82. int? location,
  83. int? subject,
  84. int? meetingManager,
  85. int? meetingStatus}) async {
  86. if (pageEndedMeetings == false && paginationMeetings == Status.ready) {
  87. paginationMeetings = Status.loading;
  88. notifyListeners();
  89. int p = pageMeetings;
  90. pageMeetings = p + 1;
  91. try {
  92. final adsPaginationModel = await meetingsApi.getMeetings(
  93. page: pageMeetings,
  94. count: limitMeetings,
  95. fromDate: fromDate,
  96. toDate: toDate,
  97. location: location,
  98. subject: subject,
  99. meetingManager: meetingManager,
  100. status: meetingStatus);
  101. if (adsPaginationModel.hasData()) {
  102. meetingsModel!.data!.addAll(adsPaginationModel.data!);
  103. if (adsPaginationModel.data!.length < limitMeetings) {
  104. pageEndedMeetings = true;
  105. paginationMeetings = Status.empty;
  106. } else {
  107. paginationMeetings = Status.ready;
  108. }
  109. } else if (!adsPaginationModel.hasData()) {
  110. pageEndedMeetings = true;
  111. paginationMeetings = Status.empty;
  112. }
  113. } catch (e) {
  114. pageEndedMeetings = true;
  115. paginationMeetings = Status.empty;
  116. }
  117. notifyListeners();
  118. }
  119. }
  120. // set date for filters
  121. String fromDate = '';
  122. String toDate = '';
  123. void setFromDates(String? newFromDate) {
  124. fromDate = newFromDate ?? '';
  125. notifyListeners();
  126. }
  127. void setToDates(String? newToDate) {
  128. toDate = newToDate ?? '';
  129. notifyListeners();
  130. }
  131. // clear filters
  132. void clearFilters() {
  133. selectedLocationId = null;
  134. selectedManagersId = null;
  135. selectedStatusId = null;
  136. selectedSubjectId = null;
  137. fromDate = '';
  138. toDate = '';
  139. notifyListeners();
  140. }
  141. // is filter Not empty
  142. bool hasActiveFilters() {
  143. return selectedLocationId != null ||
  144. selectedManagersId != null ||
  145. selectedStatusId != null ||
  146. selectedSubjectId != null ||
  147. fromDate.isNotEmpty ||
  148. toDate.isNotEmpty;
  149. }
  150. // get filters location meetings
  151. int? selectedLocationId;
  152. void selectLocation(int? locationId) {
  153. selectedLocationId = locationId;
  154. notifyListeners();
  155. }
  156. // get filters subjects meetings
  157. int? selectedSubjectId;
  158. void selectSubject(int? subjectId) {
  159. selectedSubjectId = subjectId;
  160. notifyListeners();
  161. }
  162. // get filters meeting managers
  163. int? selectedManagersId;
  164. void selectManager(int? managerId) {
  165. selectedManagersId = managerId;
  166. notifyListeners();
  167. }
  168. // all meeting status filters
  169. int? selectedStatusId;
  170. void selectStatusMeeting(int? statusId) {
  171. selectedStatusId = statusId;
  172. notifyListeners();
  173. }
  174. // cancel meeting
  175. Status statusCancelMeeting = Status.empty;
  176. String? messageCancelMeeting;
  177. Map? errorsCancelMeeting;
  178. Future<Status> cancelMeeting({
  179. required int id,
  180. }) async {
  181. statusCancelMeeting = Status.loading;
  182. notifyListeners();
  183. try {
  184. final result = await meetingsApi.cancelMeetingApi(
  185. id: id,
  186. );
  187. if (result.isOk) {
  188. statusCancelMeeting = Status.ready;
  189. messageCancelMeeting = result.message;
  190. } else if (result.isOk == false) {
  191. print(result.isOk);
  192. errorsCancelMeeting = result.errors;
  193. messageCancelMeeting = result.message;
  194. statusCancelMeeting = Status.error;
  195. } else {
  196. statusCancelMeeting = Status.error;
  197. }
  198. notifyListeners();
  199. } catch (e) {
  200. statusCancelMeeting = Status.error;
  201. print(e);
  202. }
  203. notifyListeners();
  204. print(statusCancelMeeting);
  205. return statusCancelMeeting;
  206. }
  207. // accept meeting
  208. Status statusAcceptMeeting = Status.empty;
  209. String? messageAcceptMeeting;
  210. Map? errorsAcceptMeeting;
  211. Future<Status> acceptMeeting({
  212. required int id,
  213. }) async {
  214. statusAcceptMeeting = Status.loading;
  215. notifyListeners();
  216. try {
  217. final result = await meetingsApi.acceptMeetingApi(
  218. id: id,
  219. );
  220. if (result.isOk) {
  221. statusAcceptMeeting = Status.ready;
  222. messageAcceptMeeting = result.message;
  223. } else if (result.isOk == false) {
  224. print(result.isOk);
  225. errorsAcceptMeeting = result.errors;
  226. messageAcceptMeeting = result.message;
  227. statusAcceptMeeting = Status.error;
  228. } else {
  229. statusAcceptMeeting = Status.error;
  230. }
  231. notifyListeners();
  232. } catch (e) {
  233. statusAcceptMeeting = Status.error;
  234. print(e);
  235. }
  236. notifyListeners();
  237. print(statusAcceptMeeting);
  238. return statusAcceptMeeting;
  239. }
  240. }