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.

89 lines
2.8KB

  1. import 'package:bloc/bloc.dart';
  2. import 'package:equatable/equatable.dart';
  3. import 'package:farm_tpf/presentation/screens/task/models/employee.dart';
  4. import 'package:farm_tpf/utils/formatter.dart';
  5. import 'package:flutter/material.dart';
  6. import 'package:get/get.dart';
  7. import '../../../../data/api/app_exception.dart';
  8. import '../../../../data/repository/repository.dart';
  9. import '../../../../models/item_dropdown.dart';
  10. import '../../../../utils/utils.dart';
  11. import '../../../custom_widgets/widget_utils.dart';
  12. import '../models/task_request.dart';
  13. part 'create_task_state.dart';
  14. class CreateTaskCubit extends Cubit<CreateTaskState> {
  15. CreateTaskCubit() : super(CreateTaskInitial());
  16. final repository = Repository();
  17. final formKey = GlobalKey<FormState>();
  18. final titleNameCtl = TextEditingController();
  19. final detailCtl = TextEditingController();
  20. var deadline = ValueNotifier(DateTime.now());
  21. var employeeRaws = <Employee>[];
  22. var employees = ValueNotifier(<ItemDropDown>[]);
  23. var selectedPEmployee = ValueNotifier('');
  24. // var existedCreateTask = UpdateCreateTask();
  25. void dispose() {
  26. titleNameCtl.dispose();
  27. detailCtl.dispose();
  28. }
  29. Future<void> preparedData({required int cropId}) async {
  30. try {
  31. await Future.delayed(const Duration(seconds: 0));
  32. emit(CreateTaskLoading());
  33. employeeRaws = await repository.getEmployeesByCropId(cropId);
  34. employees.value = employeeRaws
  35. .map(
  36. (e) => ItemDropDown(key: e.id?.toString(), value: e.name),
  37. )
  38. .toList();
  39. emit(CreateTaskPrepareDataSuccessful());
  40. } catch (e) {
  41. emit(CreateTaskFailure(AppException.handleError(e)));
  42. }
  43. }
  44. Future<void> onSubmit(int cropId) async {
  45. if (formKey.currentState!.validate()) {
  46. if (selectedPEmployee.value.isEmpty) {
  47. Utils.showSnackBarWarning(message: 'Vui lòng chọn nhân viên');
  48. return;
  49. }
  50. if (titleNameCtl.text.trim().isEmpty) {
  51. Utils.showSnackBarWarning(message: 'Vui lòng nhập tiêu đề');
  52. return;
  53. } else if (detailCtl.text.trim().isEmpty) {
  54. Utils.showSnackBarWarning(message: 'Vui lòng nhập nội dung');
  55. return;
  56. }
  57. var requestTask = RequestTask();
  58. requestTask
  59. ..cropId = cropId
  60. ..title = titleNameCtl.text
  61. ..detail = detailCtl.text
  62. ..userAssignedId = int.tryParse(selectedPEmployee.value)
  63. ..deadline = deadline.value.convertLocalDateTimeToStringUtcDateTime();
  64. print(requestTask.toJson());
  65. UtilWidget.showLoading();
  66. await repository.createTask(
  67. (success) {
  68. UtilWidget.hideDialog();
  69. Get.back(result: 'ok');
  70. Utils.showSnackBarSuccess();
  71. },
  72. (errorMessage) {
  73. UtilWidget.hideDialog();
  74. Utils.showSnackBarError();
  75. },
  76. item: requestTask,
  77. );
  78. }
  79. }
  80. }