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

351 lines
9.9 KiB

  1. import 'package:flutter/material.dart';
  2. import 'package:qadirneyriz/models/meetings/meetings_location_model.dart';
  3. import 'package:qadirneyriz/models/meetings/meetings_managers_model.dart';
  4. import 'package:qadirneyriz/models/meetings/meetings_subjects_model.dart';
  5. import 'package:qadirneyriz/models/meetings/meetings_users_model.dart';
  6. import 'package:qadirneyriz/screens/meeting/diolog_meetings_filters.dart';
  7. import 'package:qadirneyriz/setting/setting.dart';
  8. import 'package:qadirneyriz/utils/enums/status.dart';
  9. class GlobalState extends ChangeNotifier {
  10. // users meetings
  11. Status usersStatus = Status.empty;
  12. List<UsersModel>? usersModel;
  13. Future<Status> getUsers({bool refresh = false}) async {
  14. usersStatus = Status.loading;
  15. notifyListeners();
  16. if (refresh) {
  17. usersStatus = Status.loading;
  18. notifyListeners();
  19. }
  20. if (usersModel != null && usersModel!.isNotEmpty) {
  21. usersStatus = Status.ready;
  22. try {
  23. usersModel = await setting.globalServices.getUsers();
  24. if (usersModel != null) {
  25. usersStatus = Status.ready;
  26. } else {
  27. usersStatus = Status.empty;
  28. }
  29. } catch (e) {
  30. usersStatus = Status.error;
  31. // print('$e error usersModel');
  32. }
  33. notifyListeners();
  34. } else {
  35. try {
  36. usersModel = await setting.globalServices.getUsers();
  37. if (usersModel != null) {
  38. usersStatus = Status.ready;
  39. } else {
  40. usersStatus = Status.empty;
  41. }
  42. notifyListeners();
  43. } catch (e) {
  44. usersStatus = Status.error;
  45. // print('$e error usersModel');
  46. }
  47. }
  48. notifyListeners();
  49. // print('$usersStatus usersModel');
  50. return usersStatus;
  51. }
  52. // locations meetings
  53. Status locationsStatus = Status.empty;
  54. List<LocationsModel>? locationsModel;
  55. Future<Status> getLocations({bool refresh = false}) async {
  56. locationsStatus = Status.loading;
  57. notifyListeners();
  58. if (refresh) {
  59. locationsStatus = Status.loading;
  60. notifyListeners();
  61. }
  62. if (locationsModel != null && locationsModel!.isNotEmpty) {
  63. locationsStatus = Status.ready;
  64. try {
  65. locationsModel = await setting.globalServices.getLocation();
  66. if (locationsModel != null) {
  67. locationsStatus = Status.ready;
  68. } else {
  69. locationsStatus = Status.empty;
  70. }
  71. } catch (e) {
  72. locationsStatus = Status.error;
  73. // print(e);
  74. }
  75. notifyListeners();
  76. } else {
  77. try {
  78. locationsModel = await setting.globalServices.getLocation();
  79. if (locationsModel != null) {
  80. locationsStatus = Status.ready;
  81. } else {
  82. locationsStatus = Status.empty;
  83. }
  84. notifyListeners();
  85. } catch (e) {
  86. locationsStatus = Status.error;
  87. // print(e);
  88. }
  89. }
  90. notifyListeners();
  91. // print(locationsStatus);
  92. return locationsStatus;
  93. }
  94. // subjects meetings
  95. Status subjectsStatus = Status.empty;
  96. List<SubjectsModel>? subjectsModel;
  97. Future<Status> getSubjects({bool refresh = false}) async {
  98. subjectsStatus = Status.loading;
  99. notifyListeners();
  100. if (refresh) {
  101. subjectsStatus = Status.loading;
  102. notifyListeners();
  103. }
  104. if (subjectsModel != null && subjectsModel!.isNotEmpty) {
  105. subjectsStatus = Status.ready;
  106. try {
  107. subjectsModel = await setting.globalServices.getSubjects();
  108. if (subjectsModel != null) {
  109. subjectsStatus = Status.ready;
  110. } else {
  111. subjectsStatus = Status.empty;
  112. }
  113. } catch (e) {
  114. subjectsStatus = Status.error;
  115. // print(e);
  116. }
  117. notifyListeners();
  118. } else {
  119. try {
  120. subjectsModel = await setting.globalServices.getSubjects();
  121. if (subjectsModel != null) {
  122. subjectsStatus = Status.ready;
  123. } else {
  124. subjectsStatus = Status.empty;
  125. }
  126. notifyListeners();
  127. } catch (e) {
  128. subjectsStatus = Status.error;
  129. // print(e);
  130. }
  131. }
  132. notifyListeners();
  133. // print(subjectsStatus);
  134. return subjectsStatus;
  135. }
  136. // managers meetings
  137. Status meetingsManagerStatus = Status.empty;
  138. List<MeetingsMangersModel>? meetingsManagerModel;
  139. Future<Status> getMeetingsManager({bool refresh = false}) async {
  140. meetingsManagerStatus = Status.loading;
  141. notifyListeners();
  142. if (refresh) {
  143. meetingsManagerStatus = Status.loading;
  144. notifyListeners();
  145. }
  146. if (meetingsManagerModel != null && meetingsManagerModel!.isNotEmpty) {
  147. meetingsManagerStatus = Status.ready;
  148. try {
  149. meetingsManagerModel = await setting.globalServices.getManagers();
  150. if (meetingsManagerModel != null) {
  151. meetingsManagerStatus = Status.ready;
  152. } else {
  153. meetingsManagerStatus = Status.empty;
  154. }
  155. } catch (e) {
  156. meetingsManagerStatus = Status.error;
  157. // print(e);
  158. }
  159. notifyListeners();
  160. } else {
  161. try {
  162. meetingsManagerModel = await setting.globalServices.getManagers();
  163. if (meetingsManagerModel != null) {
  164. meetingsManagerStatus = Status.ready;
  165. } else {
  166. meetingsManagerStatus = Status.empty;
  167. }
  168. notifyListeners();
  169. } catch (e) {
  170. meetingsManagerStatus = Status.error;
  171. // print(e);
  172. }
  173. }
  174. notifyListeners();
  175. // print(meetingsManagerStatus);
  176. return meetingsManagerStatus;
  177. }
  178. // load all items together
  179. Status allFiltersStatus = Status.empty;
  180. Future<Status> getAllFiltersItems({bool refresh = false}) async {
  181. final int role = setting.userLocalDb.getUser().role ?? -1;
  182. allFiltersStatus = Status.loading;
  183. notifyListeners();
  184. if (_isDataAlreadyLoaded(role) && !refresh) {
  185. allFiltersStatus = Status.ready;
  186. } else {
  187. allFiltersStatus = Status.loading;
  188. }
  189. notifyListeners();
  190. await _fetchAllData(role: role, refresh: refresh);
  191. _updateAllFiltersStatus(role);
  192. notifyListeners();
  193. return allFiltersStatus;
  194. }
  195. bool _isDataAlreadyLoaded(int role) {
  196. return locationsModel != null &&
  197. locationsModel!.isNotEmpty &&
  198. subjectsModel != null &&
  199. subjectsModel!.isNotEmpty &&
  200. (role == 1 || (usersModel != null && usersModel!.isNotEmpty)) &&
  201. (role == 1 ||
  202. (meetingsManagerModel != null && meetingsManagerModel!.isNotEmpty));
  203. }
  204. Future<void> _fetchAllData({required int role, required bool refresh}) async {
  205. final List<Future<void>> tasks = [
  206. getLocations(refresh: refresh),
  207. getSubjects(refresh: refresh),
  208. ];
  209. // Only add getUsers if role is not 1
  210. if (role != 1) {
  211. tasks.add(getUsers(refresh: refresh));
  212. }
  213. // Only add getMeetingsManager if role is not 1
  214. if (role != 1) {
  215. tasks.add(getMeetingsManager(refresh: refresh));
  216. }
  217. await Future.wait(tasks);
  218. }
  219. void _updateAllFiltersStatus(int role) {
  220. if (locationsStatus == Status.ready &&
  221. subjectsStatus == Status.ready &&
  222. (role == 1 || usersStatus == Status.ready) &&
  223. (role == 1 || meetingsManagerStatus == Status.ready)) {
  224. allFiltersStatus = Status.ready;
  225. } else {
  226. allFiltersStatus = Status.error;
  227. }
  228. }
  229. // add new subject
  230. Status statusAddNewSubject = Status.empty;
  231. String? messageAddNewSubject;
  232. Map? errorsAddNewSubject;
  233. Future<Status> addNewSubject(
  234. {required String subject, required String enSubject}) async {
  235. statusAddNewSubject = Status.loading;
  236. notifyListeners();
  237. try {
  238. final result = await setting.globalServices
  239. .addNewSubject(subject: subject, enSubject: enSubject);
  240. if (result.isOk) {
  241. statusAddNewSubject = Status.ready;
  242. messageAddNewSubject = result.message;
  243. } else if (result.isOk == false) {
  244. errorsAddNewSubject = result.errors;
  245. messageAddNewSubject = result.message;
  246. statusAddNewSubject = Status.error;
  247. } else {
  248. statusAddNewSubject = Status.error;
  249. }
  250. notifyListeners();
  251. } catch (e) {
  252. statusAddNewSubject = Status.error;
  253. }
  254. notifyListeners();
  255. return statusAddNewSubject;
  256. }
  257. // add new address
  258. Status statusAddNewAddress = Status.empty;
  259. String? messageAddNewAddress;
  260. Map? errorsAddNewAddress;
  261. Future<Status> addNewAddress(
  262. {required String address, required String addressEn}) async {
  263. statusAddNewAddress = Status.loading;
  264. notifyListeners();
  265. try {
  266. final result = await setting.globalServices
  267. .addNewLocation(address: address, addressEn: addressEn);
  268. if (result.isOk) {
  269. statusAddNewAddress = Status.ready;
  270. messageAddNewAddress = result.message;
  271. } else if (result.isOk == false) {
  272. errorsAddNewAddress = result.errors;
  273. messageAddNewAddress = result.message;
  274. statusAddNewAddress = Status.error;
  275. } else {
  276. statusAddNewAddress = Status.error;
  277. }
  278. notifyListeners();
  279. } catch (e) {
  280. statusAddNewAddress = Status.error;
  281. }
  282. notifyListeners();
  283. return statusAddNewAddress;
  284. }
  285. // add new user
  286. Status statusAddNewUser = Status.empty;
  287. String? messageAddNewUser;
  288. Map? errorsAddNewUser;
  289. Future<Status> addNewUser(
  290. {required String name,
  291. required String mobile,
  292. required String password,
  293. required int role}) async {
  294. statusAddNewUser = Status.loading;
  295. notifyListeners();
  296. try {
  297. final result = await setting.globalServices.addNewUser(
  298. mobile: mobile, name: name, password: password, role: role);
  299. if (result.isOk) {
  300. statusAddNewUser = Status.ready;
  301. messageAddNewUser = result.message;
  302. } else if (result.isOk == false) {
  303. errorsAddNewUser = result.errors;
  304. messageAddNewUser = result.message;
  305. statusAddNewUser = Status.error;
  306. } else {
  307. statusAddNewUser = Status.error;
  308. }
  309. notifyListeners();
  310. } catch (e) {
  311. statusAddNewUser = Status.error;
  312. }
  313. notifyListeners();
  314. return statusAddNewUser;
  315. }
  316. }