import 'package:flutter/material.dart'; import 'package:rasadyar_chicken/data/models/response/segmentation_model/segmentation_model.dart'; import 'package:rasadyar_chicken/presentation/pages/steward/segmentation/widgets/cu_bottom_sheet.dart'; import 'package:rasadyar_chicken/presentation/widget/base_page/view.dart'; import 'package:rasadyar_chicken/presentation/widget/filter_bottom_sheet.dart'; import 'package:rasadyar_core/core.dart'; import 'logic.dart'; class SegmentationPage extends GetView { final today = Jalali.now(); final oneDayAgo = Jalali.now().addDays(-1); final twoDaysAgo = Jalali.now().addDays(-2); @override Widget build(BuildContext context) { return ChickenBasePage( routes: controller.routesName, onSearchChanged: (data) => controller.setSearchValue(data), onFilterTap: () { Get.bottomSheet(filterBottomSheet()); }, onRefresh: controller.onRefresh, hasBack: false, child: Stack( children: [ Positioned.fill( child: ObxValue((data) { return RPaginatedListView( onLoadMore: () async => controller.getAllSegmentation(true), hasMore: data.value.data?.next != null, listType: ListType.separated, resource: data.value, padding: EdgeInsets.fromLTRB(8, 8, 8, 80), itemBuilder: (context, index) { var item = data.value.data!.results![index]; return ObxValue((val) { return ExpandableListItem2( selected: val.value == index, onTap: () => controller.toggleExpansion(index: index), index: index, child: itemListWidget(item), secondChild: itemListExpandedWidget(item, index), labelColor: AppColor.blueLight, labelIconColor: AppColor.customGrey, labelIcon: Assets.vec.convertCubeSvg.path, ); }, controller.expandedListIndex); }, itemCount: data.value.data?.results?.length ?? 0, separatorBuilder: (context, index) => SizedBox(height: 8.h), ); }, controller.segmentationList), ), Positioned( right: 10, bottom: 90.h, child: RFab.add( onPressed: () { Get.bottomSheet( addOrEditBottomSheet(controller), isScrollControlled: true, ignoreSafeArea: false, ).whenComplete(() { controller.clearForm(); //defaultShowSuccessMessage('با موفقیت ثبت شد'); }); }, ), ), ], ), ); } Widget filterBottomSheet() => filterBottomSheetWidget( fromDate: controller.fromDateFilter, onChangedFromDate: (jalali) => controller.fromDateFilter.value = jalali, toDate: controller.toDateFilter, onChangedToDate: (jalali) => controller.toDateFilter.value = jalali, onSubmit: () => controller.getAllSegmentation(), ); Row itemListWidget(SegmentationModel item) { return Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ SizedBox(width: 12), Expanded( flex: 3, child: Column( mainAxisAlignment: MainAxisAlignment.center, spacing: 4, children: [ Text( item.toGuild != null ? 'قطعه‌بند' : 'مباشر', textAlign: TextAlign.center, style: AppFonts.yekan14.copyWith(color: AppColor.blueNormal), ), Text( item.date?.formattedJalaliDate ?? 'N/A', textAlign: TextAlign.center, style: AppFonts.yekan12.copyWith(color: AppColor.bgDark), ), ], ), ), SizedBox(width: 4), Expanded( flex: 5, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( item.toGuild != null ? item.toGuild?.user?.fullname ?? 'N/A' : item.buyer?.fullname ?? 'N/A', textAlign: TextAlign.center, style: AppFonts.yekan14.copyWith(color: AppColor.blueNormal), ), SizedBox(height: 2), Text( item.toGuild != null ? item.toGuild?.guildsName ?? 'N/A' : item.buyer?.shop ?? 'N/A', textAlign: TextAlign.center, style: AppFonts.yekan14.copyWith(color: AppColor.bgDark), ), ], ), ), SizedBox(width: 4), Expanded( flex: 2, child: Column( spacing: 4, mainAxisAlignment: MainAxisAlignment.center, children: [ Text( item.weight.separatedByCommaFa.addKg, textAlign: TextAlign.center, textDirection: TextDirection.ltr, style: AppFonts.yekan14Bold.copyWith(color: AppColor.blueNormal), ), Text( item.saleType == "governmental" ? 'دولتی' : 'آزاد', textAlign: TextAlign.center, textDirection: TextDirection.ltr, style: AppFonts.yekan14Bold.copyWith( color: item.saleType == "governmental" ? AppColor.blueNormal : AppColor.greenNormal, ), ), ], ), ), ], ); } Container itemListExpandedWidget(SegmentationModel item, int index) { return Container( padding: EdgeInsets.symmetric(horizontal: 8), decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(8)), child: Column( spacing: 8, children: [ Container( height: 32, padding: EdgeInsets.symmetric(horizontal: 8), decoration: ShapeDecoration( color: AppColor.blueLight, shape: RoundedRectangleBorder( side: BorderSide(width: 1, color: AppColor.blueLightHover), borderRadius: BorderRadius.circular(8), ), ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( spacing: 3, children: [ Text( DateTimeExtensions(item.date)?.toJalali().formatter.wN ?? 'N/A', style: AppFonts.yekan14.copyWith(color: AppColor.textColor), ), Text( '${DateTimeExtensions(item.date)?.toJalali().formatter.d} ${DateTimeExtensions(item.date)?.toJalali().formatter.mN ?? 'N/A'}', style: AppFonts.yekan14.copyWith(color: AppColor.blueNormal), ), ], ), Text( '${DateTimeExtensions(item.date)?.toJalali().formatter.y}', style: AppFonts.yekan20.copyWith(color: AppColor.textColor), ), Text( '${DateTimeExtensions(item.date)?.toJalali().formatter.tHH}:${DateTimeExtensions(item.date)?.toJalali().formatter.tMM ?? 'N/A'}', style: AppFonts.yekan14.copyWith(color: AppColor.textColor), ), ], ), ), buildRow( title: 'مشخصات خریدار', value: item.toGuild != null ? item.toGuild?.user?.fullname ?? 'N/A' : item.buyer?.fullname ?? 'N/A', ), buildRow( title: 'تلفن خریدار', value: item.toGuild != null ? item.toGuild?.user?.mobile ?? 'N/A' : item.buyer?.mobile ?? 'N/A', ), buildRow( title: 'نام واحد', value: item.toGuild != null ? item.toGuild?.guildsName ?? 'N/A' : item.buyer?.shop ?? 'N/A', ), buildRow(title: 'ماهیت', value: item.toGuild != null ? 'قطعه‌بند' : 'مباشر'), buildRow(title: 'نوع فروش', value: item.saleType == "governmental" ? 'دولتی' : 'آزاد'), buildRow(title: 'انبار فروش', value: item.quota == "governmental" ? 'دولتی' : 'آزاد'), buildRow( title: 'تاریخ تولید گوشت', value: item.productionDate?.toJalali.formatCompactDate() ?? 'ندارد', ), buildRow( title: 'وزن قطعه‌بندی', value: item.weight!.separatedByCommaFa, valueLabel: 'کیلوگرم', ), Row( mainAxisAlignment: MainAxisAlignment.center, spacing: 16.w, children: [ RElevated( text: 'ویرایش', width: 150.w, height: 40.h, onPressed: () { controller.setEditData(item); Get.bottomSheet( addOrEditBottomSheet(controller, isOnEdit: true), isScrollControlled: true, ignoreSafeArea: false, ).whenComplete(() { controller.clearForm(); }); }, textStyle: AppFonts.yekan20.copyWith(color: Colors.white), backgroundColor: AppColor.greenNormal, ), ROutlinedElevated( text: 'حذف', textStyle: AppFonts.yekan20.copyWith(color: AppColor.redNormal), width: 150.w, height: 40.h, onPressed: () { buildDeleteDialog( onConfirm: () async { controller.toggleExpansion(); controller.deleteSegmentation(item.key!); }, onRefresh: () => controller.onRefresh(), ); }, borderColor: AppColor.redNormal, ), ], ), ], ), ); } }