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.

88 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.getEmployees();
  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. } else if (titleNameCtl.text.trim().isEmpty) {
  50. Utils.showSnackBarWarning(message: 'Vui lòng nhập tiêu đề');
  51. return;
  52. } else if (detailCtl.text.trim().isEmpty) {
  53. Utils.showSnackBarWarning(message: 'Vui lòng nhập nội dung');
  54. return;
  55. }
  56. var requestTask = RequestTask();
  57. requestTask
  58. ..cropId = cropId
  59. ..title = titleNameCtl.text
  60. ..detail = detailCtl.text
  61. ..userAssignedId = int.tryParse(selectedPEmployee.value)
  62. ..deadline = deadline.value.convertLocalDateTimeToStringUtcDateTime();
  63. print(requestTask.toJson());
  64. UtilWidget.showLoading();
  65. await repository.createTask(
  66. (success) {
  67. UtilWidget.hideDialog();
  68. Get.back(result: 'ok');
  69. Utils.showSnackBarSuccess();
  70. },
  71. (errorMessage) {
  72. UtilWidget.hideDialog();
  73. Utils.showSnackBarError();
  74. },
  75. item: requestTask,
  76. );
  77. }
  78. }
  79. }