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.
 
 
 
 
 
 

166 líneas
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. }