您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

166 行
5.2 KiB

  1. import 'package:flutter/material.dart';
  2. import 'package:qadirneyriz/global/global_class/selected_item.dart';
  3. import 'package:qadirneyriz/models/private_meeting/one_private_meeting_model.dart';
  4. import 'package:qadirneyriz/services/private_meetings/private_meetings.dart';
  5. import 'package:qadirneyriz/utils/enums/status.dart';
  6. class EditPrivateMeetingState extends ChangeNotifier {
  7. PrivateMeetingsApi privateMeetingApi = PrivateMeetingsApi();
  8. Map<int, Status> onePrivateMeetingStatus = {};
  9. Map<int, OnePrivateMeetingModel>? onePrivateMeetingModel = {};
  10. Future<Status> getOnePrivateMeeting(
  11. {bool refresh = false, required int id}) async {
  12. onePrivateMeetingStatus[id] = Status.loading;
  13. notifyListeners();
  14. // Ensure the status map is initialized
  15. if (onePrivateMeetingStatus[id] == null || refresh) {
  16. onePrivateMeetingStatus[id] = Status.loading;
  17. notifyListeners();
  18. }
  19. // Initialize the model map if it's null
  20. onePrivateMeetingModel ??= {};
  21. // If not refreshing and data exists, return the current state
  22. if (!refresh && onePrivateMeetingModel![id] != null) {
  23. onePrivateMeetingStatus[id] = Status.ready;
  24. notifyListeners();
  25. return onePrivateMeetingStatus[id]!;
  26. }
  27. // Otherwise, fetch new data from API
  28. try {
  29. onePrivateMeetingModel![id] =
  30. await privateMeetingApi.getOnePrivateMeeting(id: id);
  31. if (onePrivateMeetingModel![id] != null) {
  32. onePrivateMeetingStatus[id] = Status.ready;
  33. } else {
  34. onePrivateMeetingStatus[id] = Status.empty;
  35. }
  36. } catch (e) {
  37. onePrivateMeetingStatus[id] = Status.error;
  38. // print(e);
  39. }
  40. notifyListeners();
  41. return onePrivateMeetingStatus[id]!;
  42. }
  43. // date
  44. String? fromDate;
  45. void setFromDate(String date) {
  46. fromDate = date;
  47. notifyListeners();
  48. }
  49. // subject
  50. ItemSelected selectedSubject = ItemSelected();
  51. // location
  52. ItemSelected selectedLocation = ItemSelected();
  53. // manager
  54. ItemSelected selectedManager = ItemSelected();
  55. // time
  56. TimeOfDay? selectedStartTime;
  57. TimeOfDay? selectedEndTime;
  58. // فیلد های مخصوص ملاقات ها
  59. String createdName = '';
  60. String createdRole = '';
  61. String createdPhoneNumber = '';
  62. String createdCompanyName = '';
  63. // function at start
  64. void setAllVariablesAtStart({required int id}) {
  65. if (onePrivateMeetingStatus[id] == Status.ready) {
  66. final item = onePrivateMeetingModel![id]!;
  67. selectedLocation = ItemSelected(
  68. id: item.locationsId ?? -1,
  69. text: item.location != null ? item.location!.address ?? '' : '');
  70. selectedSubject = ItemSelected(
  71. text: item.subject != null ? item.subject!.subject ?? '' : '',
  72. id: item.subject!.id ?? -1);
  73. selectedManager = ItemSelected(
  74. id: item.managerId ?? -1,
  75. text: item.manager != null ? item.manager!.name ?? '' : '');
  76. fromDate = item.dateJalali;
  77. String timeStart = item.azHour ?? ':';
  78. List<String> timeParts = timeStart.split(':');
  79. int hourStart = int.parse(timeParts[0]);
  80. int minuteStart = int.parse(timeParts[1]);
  81. selectedStartTime = TimeOfDay(hour: hourStart, minute: minuteStart);
  82. String timeEnd = item.taHour ?? ':';
  83. List<String> timeEndParts = timeEnd.split(':');
  84. int hourEnd = int.parse(timeEndParts[0]);
  85. int minuteEnd = int.parse(timeEndParts[1]);
  86. selectedEndTime = TimeOfDay(hour: hourEnd, minute: minuteEnd);
  87. createdCompanyName = item.visitCompany ?? '';
  88. createdPhoneNumber = item.visitMobile ?? '';
  89. createdName = item.visitName ?? '';
  90. createdRole = item.visitRole ?? '';
  91. }
  92. }
  93. // send edit private meeting
  94. Status statusEditPrivateMeeting = Status.empty;
  95. String? messageEditPrivateMeeting;
  96. Map? errorsEditPrivateMeeting;
  97. Future<Status> editPrivateMeeting({
  98. required int id,
  99. required int locationId,
  100. required int subjectId,
  101. required int managerId,
  102. required String fromHour,
  103. required String toHour,
  104. required String dateMeeting,
  105. required String visitorName,
  106. required String visitorMobile,
  107. required String visitorRole,
  108. required String visitorCompany,
  109. }) async {
  110. statusEditPrivateMeeting = Status.loading;
  111. notifyListeners();
  112. try {
  113. final result = await privateMeetingApi.editPrivateMeetingApi(
  114. id: id,
  115. locationId: locationId,
  116. subjectId: subjectId,
  117. managerId: managerId,
  118. fromHour: fromHour,
  119. toHour: toHour,
  120. dateMeeting: dateMeeting,
  121. visitorCompany: visitorCompany,
  122. visitorMobile: visitorMobile,
  123. visitorName: visitorName,
  124. visitorRole: visitorRole);
  125. if (result.isOk) {
  126. statusEditPrivateMeeting = Status.ready;
  127. messageEditPrivateMeeting = result.message;
  128. } else if (result.isOk == false) {
  129. // print(result.isOk);
  130. errorsEditPrivateMeeting = result.errors;
  131. messageEditPrivateMeeting = result.message;
  132. statusEditPrivateMeeting = Status.error;
  133. } else {
  134. statusEditPrivateMeeting = Status.error;
  135. }
  136. notifyListeners();
  137. } catch (e) {
  138. statusEditPrivateMeeting = Status.error;
  139. // print(e);
  140. }
  141. notifyListeners();
  142. // print(statusEditPrivateMeeting);
  143. return statusEditPrivateMeeting;
  144. }
  145. }