You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

395 lines
11 KiB

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