diff --git a/assets/icons/killogram.svg b/assets/icons/killogram.svg
deleted file mode 100644
index 695689c..0000000
--- a/assets/icons/killogram.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/assets/vec/killogram.svg.vec b/assets/vec/killogram.svg.vec
deleted file mode 100644
index 72a627f..0000000
Binary files a/assets/vec/killogram.svg.vec and /dev/null differ
diff --git a/packages/chicken/lib/data/models/response/segmentation_model/segmentation_model.dart b/packages/chicken/lib/data/models/response/segmentation_model/segmentation_model.dart
index 6efce7b..86122c3 100644
--- a/packages/chicken/lib/data/models/response/segmentation_model/segmentation_model.dart
+++ b/packages/chicken/lib/data/models/response/segmentation_model/segmentation_model.dart
@@ -6,7 +6,7 @@ part 'segmentation_model.g.dart';
@freezed
abstract class SegmentationModel with _$SegmentationModel {
- const factory SegmentationModel({String? key, Buyer? buyer, DateTime? date, int? weight}) =
+ const factory SegmentationModel({String? key, Buyer? buyer, DateTime? date, int? weight,String? result}) =
_SegmentationModel;
factory SegmentationModel.fromJson(Map json) =>
diff --git a/packages/chicken/lib/data/models/response/segmentation_model/segmentation_model.freezed.dart b/packages/chicken/lib/data/models/response/segmentation_model/segmentation_model.freezed.dart
index 74e1a86..2f106c3 100644
--- a/packages/chicken/lib/data/models/response/segmentation_model/segmentation_model.freezed.dart
+++ b/packages/chicken/lib/data/models/response/segmentation_model/segmentation_model.freezed.dart
@@ -16,7 +16,7 @@ T _$identity(T value) => value;
/// @nodoc
mixin _$SegmentationModel {
- String? get key; Buyer? get buyer; DateTime? get date; int? get weight;
+ String? get key; Buyer? get buyer; DateTime? get date; int? get weight; String? get result;
/// Create a copy of SegmentationModel
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@@ -29,16 +29,16 @@ $SegmentationModelCopyWith get copyWith => _$SegmentationMode
@override
bool operator ==(Object other) {
- return identical(this, other) || (other.runtimeType == runtimeType&&other is SegmentationModel&&(identical(other.key, key) || other.key == key)&&(identical(other.buyer, buyer) || other.buyer == buyer)&&(identical(other.date, date) || other.date == date)&&(identical(other.weight, weight) || other.weight == weight));
+ return identical(this, other) || (other.runtimeType == runtimeType&&other is SegmentationModel&&(identical(other.key, key) || other.key == key)&&(identical(other.buyer, buyer) || other.buyer == buyer)&&(identical(other.date, date) || other.date == date)&&(identical(other.weight, weight) || other.weight == weight)&&(identical(other.result, result) || other.result == result));
}
@JsonKey(includeFromJson: false, includeToJson: false)
@override
-int get hashCode => Object.hash(runtimeType,key,buyer,date,weight);
+int get hashCode => Object.hash(runtimeType,key,buyer,date,weight,result);
@override
String toString() {
- return 'SegmentationModel(key: $key, buyer: $buyer, date: $date, weight: $weight)';
+ return 'SegmentationModel(key: $key, buyer: $buyer, date: $date, weight: $weight, result: $result)';
}
@@ -49,7 +49,7 @@ abstract mixin class $SegmentationModelCopyWith<$Res> {
factory $SegmentationModelCopyWith(SegmentationModel value, $Res Function(SegmentationModel) _then) = _$SegmentationModelCopyWithImpl;
@useResult
$Res call({
- String? key, Buyer? buyer, DateTime? date, int? weight
+ String? key, Buyer? buyer, DateTime? date, int? weight, String? result
});
@@ -66,13 +66,14 @@ class _$SegmentationModelCopyWithImpl<$Res>
/// Create a copy of SegmentationModel
/// with the given fields replaced by the non-null parameter values.
-@pragma('vm:prefer-inline') @override $Res call({Object? key = freezed,Object? buyer = freezed,Object? date = freezed,Object? weight = freezed,}) {
+@pragma('vm:prefer-inline') @override $Res call({Object? key = freezed,Object? buyer = freezed,Object? date = freezed,Object? weight = freezed,Object? result = freezed,}) {
return _then(_self.copyWith(
key: freezed == key ? _self.key : key // ignore: cast_nullable_to_non_nullable
as String?,buyer: freezed == buyer ? _self.buyer : buyer // ignore: cast_nullable_to_non_nullable
as Buyer?,date: freezed == date ? _self.date : date // ignore: cast_nullable_to_non_nullable
as DateTime?,weight: freezed == weight ? _self.weight : weight // ignore: cast_nullable_to_non_nullable
-as int?,
+as int?,result: freezed == result ? _self.result : result // ignore: cast_nullable_to_non_nullable
+as String?,
));
}
/// Create a copy of SegmentationModel
@@ -95,13 +96,14 @@ $BuyerCopyWith<$Res>? get buyer {
@JsonSerializable()
class _SegmentationModel implements SegmentationModel {
- const _SegmentationModel({this.key, this.buyer, this.date, this.weight});
+ const _SegmentationModel({this.key, this.buyer, this.date, this.weight, this.result});
factory _SegmentationModel.fromJson(Map json) => _$SegmentationModelFromJson(json);
@override final String? key;
@override final Buyer? buyer;
@override final DateTime? date;
@override final int? weight;
+@override final String? result;
/// Create a copy of SegmentationModel
/// with the given fields replaced by the non-null parameter values.
@@ -116,16 +118,16 @@ Map toJson() {
@override
bool operator ==(Object other) {
- return identical(this, other) || (other.runtimeType == runtimeType&&other is _SegmentationModel&&(identical(other.key, key) || other.key == key)&&(identical(other.buyer, buyer) || other.buyer == buyer)&&(identical(other.date, date) || other.date == date)&&(identical(other.weight, weight) || other.weight == weight));
+ return identical(this, other) || (other.runtimeType == runtimeType&&other is _SegmentationModel&&(identical(other.key, key) || other.key == key)&&(identical(other.buyer, buyer) || other.buyer == buyer)&&(identical(other.date, date) || other.date == date)&&(identical(other.weight, weight) || other.weight == weight)&&(identical(other.result, result) || other.result == result));
}
@JsonKey(includeFromJson: false, includeToJson: false)
@override
-int get hashCode => Object.hash(runtimeType,key,buyer,date,weight);
+int get hashCode => Object.hash(runtimeType,key,buyer,date,weight,result);
@override
String toString() {
- return 'SegmentationModel(key: $key, buyer: $buyer, date: $date, weight: $weight)';
+ return 'SegmentationModel(key: $key, buyer: $buyer, date: $date, weight: $weight, result: $result)';
}
@@ -136,7 +138,7 @@ abstract mixin class _$SegmentationModelCopyWith<$Res> implements $SegmentationM
factory _$SegmentationModelCopyWith(_SegmentationModel value, $Res Function(_SegmentationModel) _then) = __$SegmentationModelCopyWithImpl;
@override @useResult
$Res call({
- String? key, Buyer? buyer, DateTime? date, int? weight
+ String? key, Buyer? buyer, DateTime? date, int? weight, String? result
});
@@ -153,13 +155,14 @@ class __$SegmentationModelCopyWithImpl<$Res>
/// Create a copy of SegmentationModel
/// with the given fields replaced by the non-null parameter values.
-@override @pragma('vm:prefer-inline') $Res call({Object? key = freezed,Object? buyer = freezed,Object? date = freezed,Object? weight = freezed,}) {
+@override @pragma('vm:prefer-inline') $Res call({Object? key = freezed,Object? buyer = freezed,Object? date = freezed,Object? weight = freezed,Object? result = freezed,}) {
return _then(_SegmentationModel(
key: freezed == key ? _self.key : key // ignore: cast_nullable_to_non_nullable
as String?,buyer: freezed == buyer ? _self.buyer : buyer // ignore: cast_nullable_to_non_nullable
as Buyer?,date: freezed == date ? _self.date : date // ignore: cast_nullable_to_non_nullable
as DateTime?,weight: freezed == weight ? _self.weight : weight // ignore: cast_nullable_to_non_nullable
-as int?,
+as int?,result: freezed == result ? _self.result : result // ignore: cast_nullable_to_non_nullable
+as String?,
));
}
diff --git a/packages/chicken/lib/data/models/response/segmentation_model/segmentation_model.g.dart b/packages/chicken/lib/data/models/response/segmentation_model/segmentation_model.g.dart
index 82835b2..d10cb35 100644
--- a/packages/chicken/lib/data/models/response/segmentation_model/segmentation_model.g.dart
+++ b/packages/chicken/lib/data/models/response/segmentation_model/segmentation_model.g.dart
@@ -16,6 +16,7 @@ _SegmentationModel _$SegmentationModelFromJson(Map json) =>
? null
: DateTime.parse(json['date'] as String),
weight: (json['weight'] as num?)?.toInt(),
+ result: json['result'] as String?,
);
Map _$SegmentationModelToJson(_SegmentationModel instance) =>
@@ -24,6 +25,7 @@ Map _$SegmentationModelToJson(_SegmentationModel instance) =>
'buyer': instance.buyer,
'date': instance.date?.toIso8601String(),
'weight': instance.weight,
+ 'result': instance.result,
};
_Buyer _$BuyerFromJson(Map json) => _Buyer(
diff --git a/packages/chicken/lib/data/repositories/chicken_repository.dart b/packages/chicken/lib/data/repositories/chicken_repository.dart
index 35697da..fe9d23d 100644
--- a/packages/chicken/lib/data/repositories/chicken_repository.dart
+++ b/packages/chicken/lib/data/repositories/chicken_repository.dart
@@ -152,5 +152,5 @@ abstract class ChickenRepository {
Future editSegmentation({required String token, required SegmentationModel model});
- Future deleteSegmentation({required String token, required String key});
+ Future deleteSegmentation({required String token, required String key});
}
diff --git a/packages/chicken/lib/data/repositories/chicken_repository_imp.dart b/packages/chicken/lib/data/repositories/chicken_repository_imp.dart
index 42d6c75..a0c19c9 100644
--- a/packages/chicken/lib/data/repositories/chicken_repository_imp.dart
+++ b/packages/chicken/lib/data/repositories/chicken_repository_imp.dart
@@ -469,11 +469,14 @@ class ChickenRepositoryImpl implements ChickenRepository {
}
@override
- Future deleteSegmentation({required String token, required String key}) async {
- await _httpClient.delete(
+ Future deleteSegmentation({required String token, required String key}) async {
+ var res = await _httpClient.delete(
'/app-segmentation/0/',
queryParameters: {'key': key},
headers: {'Authorization': 'Bearer $token'},
+ fromJson: (json) => SegmentationModel.fromJson(json),
);
+
+ return res.data;
}
}
diff --git a/packages/chicken/lib/presentation/pages/buy_out_of_province/view.dart b/packages/chicken/lib/presentation/pages/buy_out_of_province/view.dart
index d7a2881..41f7b84 100644
--- a/packages/chicken/lib/presentation/pages/buy_out_of_province/view.dart
+++ b/packages/chicken/lib/presentation/pages/buy_out_of_province/view.dart
@@ -31,7 +31,7 @@ class BuyOutOfProvincePage extends GetView {
return RPaginatedListView(
listType: ListType.separated,
resource: data.value,
- hasMore:data.value.data?.next!=null ,
+ hasMore: data.value.data?.next != null,
padding: EdgeInsets.fromLTRB(8, 8, 8, 80),
itemBuilder: (context, index) {
var item = data.value.data!.results![index];
@@ -356,17 +356,10 @@ class BuyOutOfProvincePage extends GetView {
},
),
- RTextField(
+ UnitTextField(
controller: controller.carcassWeightController,
- label: 'وزن',
- filled: true,
- suffixIcon: Padding(
- padding: const EdgeInsets.symmetric(horizontal: 8),
- child: Assets.vec.killogramSvg.svg(),
- ),
- filledColor: AppColor.bgLight,
- keyboardType: TextInputType.number,
- borderColor: AppColor.darkGreyLight,
+ hint: 'وزن',
+ unit: 'کیلوگرم',
inputFormatters: [
FilteringTextInputFormatter.digitsOnly,
SeparatorInputFormatter(),
@@ -589,10 +582,8 @@ class BuyOutOfProvincePage extends GetView {
},
height: 40,
),
-
],
),
);
}
-
}
diff --git a/packages/chicken/lib/presentation/pages/segmentation/logic.dart b/packages/chicken/lib/presentation/pages/segmentation/logic.dart
index 250bfae..5d11df4 100644
--- a/packages/chicken/lib/presentation/pages/segmentation/logic.dart
+++ b/packages/chicken/lib/presentation/pages/segmentation/logic.dart
@@ -1,4 +1,5 @@
import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
import 'package:rasadyar_auth/data/utils/safe_call.dart';
import 'package:rasadyar_chicken/data/models/response/roles_products/roles_products.dart';
import 'package:rasadyar_chicken/data/models/response/segmentation_model/segmentation_model.dart';
@@ -75,10 +76,8 @@ class SegmentationLogic extends GetxController {
void clearForm() {
weightController.text = '0';
- isSubmitButtonEnabled.value = false;
- selectedProduct.value = null;
selectedSegment.value = null;
- formKey.currentState?.reset();
+
}
void validateForm() {
@@ -142,6 +141,7 @@ class SegmentationLogic extends GetxController {
Future deleteSegmentation(String key) async {
await safeCall(
+ showError: true,
call: () => rootLogic.chickenRepository.deleteSegmentation(
token: rootLogic.tokenService.accessToken.value!,
key: key,
@@ -152,6 +152,7 @@ class SegmentationLogic extends GetxController {
Future editSegment() async {
var res = true;
safeCall(
+ showError: true,
call: () async => await rootLogic.chickenRepository.editSegmentation(
token: rootLogic.tokenService.accessToken.value!,
model: SegmentationModel(
diff --git a/packages/chicken/lib/presentation/pages/segmentation/view.dart b/packages/chicken/lib/presentation/pages/segmentation/view.dart
index 2cf5101..c0cf686 100644
--- a/packages/chicken/lib/presentation/pages/segmentation/view.dart
+++ b/packages/chicken/lib/presentation/pages/segmentation/view.dart
@@ -17,7 +17,7 @@ class SegmentationPage extends GetView {
routes: controller.routesName,
onSearchChanged: (data) => controller.setSearchValue(data),
filteringWidget: filterBottomSheet(),
- isBase: true,
+ hasBack: false,
widgets: [
Expanded(
child: ObxValue((data) {
@@ -41,7 +41,8 @@ class SegmentationPage extends GetView {
child: itemListWidget(item),
secondChild: itemListExpandedWidget(item, index),
labelColor: AppColor.blueLight,
- labelIcon: Assets.vec.timerSvg.path,
+ labelIconColor: AppColor.customGrey,
+ labelIcon: Assets.vec.convertCubeSvg.path,
);
}, controller.isExpandedList);
},
@@ -51,11 +52,10 @@ class SegmentationPage extends GetView {
}, controller.segmentationList),
),
],
-
+ floatingActionButtonLocation: FloatingActionButtonLocation.startFloat,
floatingActionButton: RFab.add(
onPressed: () {
- //TODO
- //Get.bottomSheet(addOrEditSaleBottomSheet(), isScrollControlled: true);
+ Get.bottomSheet(addOrEditBottomSheet(), isScrollControlled: true);
},
),
);
@@ -221,7 +221,7 @@ class SegmentationPage extends GetView {
Widget addOrEditBottomSheet([bool isOnEdit = false]) {
return BaseBottomSheet(
- height: 500.h,
+ height: 300.h,
child: SingleChildScrollView(
child: Form(
key: controller.formKey,
@@ -244,18 +244,14 @@ class SegmentationPage extends GetView {
child: Column(
spacing: 12,
children: [
- RTextField(
+ UnitTextField(
+ hint: 'وزن',
+ unit: 'کیلوگرم',
controller: controller.weightController,
- label: 'وزن',
- keyboardType: TextInputType.number,
- borderColor: AppColor.darkGreyLight,
- filledColor: AppColor.bgLight,
- filled: true,
inputFormatters: [
FilteringTextInputFormatter.digitsOnly,
SeparatorInputFormatter(),
],
-
validator: (value) {
if (value == null) {
return 'لطفاً وزن لاشه را وارد کنید';
@@ -295,13 +291,13 @@ class SegmentationPage extends GetView {
: null,
height: 40,
);
- }, controller.isSaleSubmitButtonEnabled);
+ }, controller.isSubmitButtonEnabled);
}
Widget _productDropDown() {
return Obx(() {
return OverlayDropdownWidget(
- items: controller.rolesProductsModel,
+ items: controller.rootLogic.rolesProductsModel,
height: 56,
hasDropIcon: false,
background: Colors.white,
@@ -321,7 +317,7 @@ class SegmentationPage extends GetView {
Text(item?.name ?? 'انتخاب محصول'),
Spacer(),
Text(
- 'موجودی:${controller.rootLogic.inventoryModel.value?.totalRemainWeight.separatedByComma ?? 0}',
+ 'موجودی: ${controller.rootLogic.inventoryModel.value?.totalRemainWeight.separatedByComma ?? 0} کیلوگرم',
),
],
),
diff --git a/packages/chicken/lib/presentation/widget/list_item/list_item.dart b/packages/chicken/lib/presentation/widget/list_item/list_item.dart
index 9b54657..fd65df6 100644
--- a/packages/chicken/lib/presentation/widget/list_item/list_item.dart
+++ b/packages/chicken/lib/presentation/widget/list_item/list_item.dart
@@ -193,7 +193,10 @@ class ListItem2 extends StatelessWidget {
width: 16.w,
height: 16.h,
//TODO
- colorFilter: ColorFilter.mode(labelIconColor ?? AppColor.mediumGreyDarkActive, BlendMode.srcIn),
+ colorFilter: ColorFilter.mode(
+ labelIconColor ?? AppColor.mediumGreyDarkActive,
+ BlendMode.srcIn,
+ ),
),
),
),
diff --git a/packages/core/lib/infrastructure/remote/dio_remote.dart b/packages/core/lib/infrastructure/remote/dio_remote.dart
index 96ba77a..c5160ab 100644
--- a/packages/core/lib/infrastructure/remote/dio_remote.dart
+++ b/packages/core/lib/infrastructure/remote/dio_remote.dart
@@ -6,7 +6,6 @@ class DioRemote implements IHttpClient {
late Dio dio;
final AppInterceptor interceptors;
-
DioRemote({this.baseUrl, required this.interceptors});
@override
@@ -90,6 +89,7 @@ class DioRemote implements IHttpClient {
Map? headers,
ProgressCallback? onSendProgress,
ProgressCallback? onReceiveProgress,
+ T Function(Map json)? fromJson,
}) async {
final response = await dio.put(
path,
@@ -100,6 +100,11 @@ class DioRemote implements IHttpClient {
onReceiveProgress: onReceiveProgress,
cancelToken: ApiHandler.globalCancelToken,
);
+
+ if (fromJson != null && response.data is Map) {
+ response.data = fromJson(response.data);
+ return DioResponse(response);
+ }
return DioResponse(response);
}
@@ -109,6 +114,7 @@ class DioRemote implements IHttpClient {
dynamic data,
Map? queryParameters,
Map? headers,
+ T Function(Map json)? fromJson,
}) async {
final response = await dio.delete(
path,
diff --git a/packages/core/lib/presentation/common/app_color.dart b/packages/core/lib/presentation/common/app_color.dart
index c309e7e..0b589f9 100644
--- a/packages/core/lib/presentation/common/app_color.dart
+++ b/packages/core/lib/presentation/common/app_color.dart
@@ -149,6 +149,7 @@ class AppColor {
static const Color mediumGreyDarker = Color(
0xFF323232,
); // #323232 rgb(50, 50, 50)
+ static const Color customGrey = Color(0xFF808081); // #808081 rgb(128, 128, 129)
//endregion
//region ---Light Grey Colors ---
diff --git a/packages/core/lib/presentation/common/assets.gen.dart b/packages/core/lib/presentation/common/assets.gen.dart
index 07d012e..59e9001 100644
--- a/packages/core/lib/presentation/common/assets.gen.dart
+++ b/packages/core/lib/presentation/common/assets.gen.dart
@@ -143,9 +143,6 @@ class $AssetsIconsGen {
/// File path: assets/icons/key.svg
SvgGenImage get key => const SvgGenImage('assets/icons/key.svg');
- /// File path: assets/icons/killogram.svg
- SvgGenImage get killogram => const SvgGenImage('assets/icons/killogram.svg');
-
/// File path: assets/icons/liveStock.svg
SvgGenImage get liveStock => const SvgGenImage('assets/icons/liveStock.svg');
@@ -285,7 +282,6 @@ class $AssetsIconsGen {
inside,
inspection,
key,
- killogram,
liveStock,
lock,
logout,
@@ -468,9 +464,6 @@ class $AssetsVecGen {
/// File path: assets/vec/key.svg.vec
SvgGenImage get keySvg => const SvgGenImage.vec('assets/vec/key.svg.vec');
- /// File path: assets/vec/killogram.svg.vec
- SvgGenImage get killogramSvg => const SvgGenImage.vec('assets/vec/killogram.svg.vec');
-
/// File path: assets/vec/liveStock.svg.vec
SvgGenImage get liveStockSvg => const SvgGenImage.vec('assets/vec/liveStock.svg.vec');
@@ -610,7 +603,6 @@ class $AssetsVecGen {
insideSvg,
inspectionSvg,
keySvg,
- killogramSvg,
liveStockSvg,
lockSvg,
logoutSvg,
diff --git a/packages/core/lib/utils/network/safe_call_utils.dart b/packages/core/lib/utils/network/safe_call_utils.dart
index 19e354a..c0005a3 100644
--- a/packages/core/lib/utils/network/safe_call_utils.dart
+++ b/packages/core/lib/utils/network/safe_call_utils.dart
@@ -110,6 +110,11 @@ bool _isRetryableError(dynamic error) {
String _getErrorMessage(dynamic error) {
if (error is DioException) {
+ final responseData = error.response?.data;
+ if (responseData is Map && responseData['result'] != null) {
+ return responseData['result'].toString();
+ }
+
switch (error.type) {
case DioExceptionType.connectionTimeout:
return 'خطا در اتصال - زمان اتصال تمام شد';