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.

112 lines
4.0KB

  1. import 'package:bloc/bloc.dart';
  2. import 'package:equatable/equatable.dart';
  3. import 'package:farm_tpf/presentation/custom_widgets/widget_utils.dart';
  4. import 'package:farm_tpf/presentation/screens/codes/models/stamp_request.dart';
  5. import 'package:farm_tpf/presentation/screens/codes/models/stamp_type.dart';
  6. import 'package:farm_tpf/utils/formatter.dart';
  7. import 'package:flutter/material.dart';
  8. import 'package:get/get.dart';
  9. import '../../../../custom_model/TbCropDTO.dart';
  10. import '../../../../data/api/app_exception.dart';
  11. import '../../../../data/repository/repository.dart';
  12. import '../../../../models/item_dropdown.dart';
  13. import '../../../../utils/utils.dart';
  14. part 'create_stamp_state.dart';
  15. class CreateStampCubit extends Cubit<CreateStampState> {
  16. CreateStampCubit() : super(CreateStampInitial());
  17. final repository = Repository();
  18. final formKey = GlobalKey<FormState>();
  19. final descriptionCtl = TextEditingController();
  20. final quantityCtl = TextEditingController();
  21. final expiredDateCtl = TextEditingController();
  22. final productNameCtl = TextEditingController();
  23. var stampTypeRaws = <StampType>[];
  24. var stampTypes = ValueNotifier(<ItemDropDown>[]);
  25. var selectedStampType = ValueNotifier('');
  26. var plotRaws = <TbCropDTO>[];
  27. var plots = ValueNotifier(<ItemDropDown>[]);
  28. var selectedPlot = ValueNotifier('');
  29. // var existedCreateStamp = UpdateCreateStamp();
  30. void dispose() {
  31. descriptionCtl.dispose();
  32. quantityCtl.dispose();
  33. expiredDateCtl.dispose();
  34. productNameCtl.dispose();
  35. }
  36. Future<void> preparedData() async {
  37. try {
  38. await Future.delayed(const Duration(seconds: 0));
  39. emit(CreateStampLoading());
  40. stampTypeRaws = await repository.stampTypes();
  41. stampTypes.value = stampTypeRaws
  42. .map(
  43. (e) => ItemDropDown(key: e.id?.toString(), value: e.exampleStampName),
  44. )
  45. .toList();
  46. plotRaws = await repository.getPlotsWithoutPaging();
  47. plots.value = plotRaws
  48. .map(
  49. (e) => ItemDropDown(key: e.id?.toString(), value: e.code),
  50. )
  51. .toList();
  52. emit(CreateStampPrepareDataSuccessful());
  53. } catch (e) {
  54. emit(CreateStampFailure(AppException.handleError(e)));
  55. }
  56. }
  57. Future<void> onSubmit() async {
  58. if (formKey.currentState!.validate()) {
  59. var requestStamp = RequestStamp();
  60. var expiredDate = DateTime.now().add(Duration(days: int.tryParse(expiredDateCtl.text) ?? 0));
  61. requestStamp
  62. ..tBCropId = int.tryParse(selectedPlot.value)
  63. ..productName = productNameCtl.text
  64. ..description = descriptionCtl.text
  65. ..quantity = int.tryParse(quantityCtl.text) ?? 0
  66. ..expiredDate = expiredDate.convertLocalDateTimeToStringUtcDateTime()
  67. ..tbExampleStampId = int.tryParse(selectedStampType.value);
  68. if (selectedPlot.value.isEmpty) {
  69. Utils.showSnackBarWarning(message: 'Vui lòng chọn lô');
  70. return;
  71. } else if (descriptionCtl.text.trim().isEmpty) {
  72. Utils.showSnackBarWarning(message: 'Vui lòng nhập mô tả');
  73. return;
  74. } else if (productNameCtl.text.trim().isEmpty) {
  75. Utils.showSnackBarWarning(message: 'Vui lòng nhập tên sản phẩm');
  76. return;
  77. } else if ((int.tryParse(quantityCtl.text) ?? 0) == 0) {
  78. Utils.showSnackBarWarning(message: 'Vui lòng nhập số lượng tem');
  79. return;
  80. } else if ((int.tryParse(expiredDateCtl.text) ?? 0) == 0) {
  81. Utils.showSnackBarWarning(message: 'Vui lòng nhập hạn sử dụng');
  82. return;
  83. } else if (selectedStampType.value.isEmpty) {
  84. Utils.showSnackBarWarning(message: 'Vui lòng nhập mẫu tem');
  85. return;
  86. }
  87. print(requestStamp.toJson());
  88. UtilWidget.showLoading();
  89. await repository.createStamp(
  90. (success) {
  91. UtilWidget.hideDialog();
  92. Get.back(result: 'ok');
  93. Utils.showSnackBarSuccess();
  94. },
  95. (errorMessage) {
  96. UtilWidget.hideDialog();
  97. Utils.showSnackBarError();
  98. },
  99. item: requestStamp,
  100. );
  101. }
  102. }
  103. }