feat: date range picker
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:enaklo_pos/core/components/date_range_picker.dart';
|
||||
import 'package:enaklo_pos/core/extensions/build_context_ext.dart';
|
||||
import 'package:enaklo_pos/core/utils/helper_pdf_service.dart';
|
||||
import 'package:enaklo_pos/core/utils/permession_handler.dart';
|
||||
@@ -12,7 +13,6 @@ import 'package:enaklo_pos/presentation/report/widgets/inventory_report_widget.d
|
||||
import 'package:enaklo_pos/presentation/report/widgets/profit_loss_widget.dart';
|
||||
import 'package:enaklo_pos/presentation/sales/pages/sales_page.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:enaklo_pos/core/components/custom_date_picker.dart';
|
||||
import 'package:enaklo_pos/core/constants/colors.dart';
|
||||
import 'package:enaklo_pos/core/extensions/date_time_ext.dart';
|
||||
import 'package:enaklo_pos/core/utils/date_formatter.dart';
|
||||
@@ -55,60 +55,99 @@ class _ReportPageState extends State<ReportPage> {
|
||||
);
|
||||
}
|
||||
|
||||
onDateChanged(DateTime? startDate, DateTime? endDate) {
|
||||
setState(() {
|
||||
fromDate = startDate ?? fromDate;
|
||||
toDate = endDate ?? toDate;
|
||||
});
|
||||
context.read<ReportBloc>().add(
|
||||
ReportEvent.get(startDate: fromDate, endDate: toDate),
|
||||
);
|
||||
if (selectedMenu == 0) {
|
||||
context.read<SummaryBloc>().add(
|
||||
SummaryEvent.getSummary(fromDate, toDate),
|
||||
);
|
||||
}
|
||||
|
||||
if (selectedMenu == 2) {
|
||||
context.read<ItemSalesReportBloc>().add(
|
||||
ItemSalesReportEvent.getItemSales(
|
||||
startDate: fromDate, endDate: toDate),
|
||||
);
|
||||
}
|
||||
|
||||
if (selectedMenu == 3) {
|
||||
context.read<ProductSalesBloc>().add(
|
||||
ProductSalesEvent.getProductSales(
|
||||
fromDate,
|
||||
toDate,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
if (selectedMenu == 4) {
|
||||
context.read<PaymentMethodReportBloc>().add(
|
||||
PaymentMethodReportEvent.getPaymentMethodReport(
|
||||
startDate: fromDate,
|
||||
endDate: toDate,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
if (selectedMenu == 5) {
|
||||
context.read<ProfitLossBloc>().add(
|
||||
ProfitLossEvent.getProfitLoss(
|
||||
fromDate,
|
||||
toDate,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
if (selectedMenu == 6) {
|
||||
context.read<InventoryReportBloc>().add(
|
||||
InventoryReportEvent.get(
|
||||
startDate: fromDate,
|
||||
endDate: toDate,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
String searchDateFormatted =
|
||||
'${fromDate.toFormattedDate2()} to ${toDate.toFormattedDate2()}';
|
||||
'${fromDate.toFormattedDate2()} - ${toDate.toFormattedDate2()}';
|
||||
return Scaffold(
|
||||
backgroundColor: AppColors.background,
|
||||
body: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
ReportTitle(
|
||||
searchDateFormatted: searchDateFormatted,
|
||||
actionWidget: [
|
||||
SizedBox(
|
||||
width: 300,
|
||||
child: CustomDatePicker(
|
||||
prefix: const Text('From: '),
|
||||
initialDate: fromDate,
|
||||
onDateSelected: (selectedDate) {
|
||||
fromDate = selectedDate;
|
||||
context.read<ReportBloc>().add(
|
||||
ReportEvent.get(startDate: fromDate, endDate: toDate),
|
||||
);
|
||||
setState(() {});
|
||||
},
|
||||
),
|
||||
),
|
||||
const SpaceWidth(12.0),
|
||||
SizedBox(
|
||||
width: 300,
|
||||
child: CustomDatePicker(
|
||||
prefix: const Text('To: '),
|
||||
initialDate: toDate,
|
||||
onDateSelected: (selectedDate) {
|
||||
toDate = selectedDate;
|
||||
context.read<ReportBloc>().add(
|
||||
ReportEvent.get(startDate: fromDate, endDate: toDate),
|
||||
);
|
||||
setState(() {});
|
||||
// context.read<TransactionReportBloc>().add(
|
||||
// TransactionReportEvent.getReport(
|
||||
// startDate:
|
||||
// DateFormatter.formatDateTime(
|
||||
// fromDate),
|
||||
// endDate: DateFormatter.formatDateTime(
|
||||
// toDate)),
|
||||
// );
|
||||
// context.read<ItemSalesReportBloc>().add(
|
||||
// ItemSalesReportEvent.getItemSales(
|
||||
// startDate:
|
||||
// DateFormatter.formatDateTime(
|
||||
// fromDate),
|
||||
// endDate: DateFormatter.formatDateTime(
|
||||
// toDate)),
|
||||
// );
|
||||
},
|
||||
InkWell(
|
||||
onTap: () {
|
||||
DateRangePickerModal.show(
|
||||
context: context,
|
||||
initialEndDate: toDate,
|
||||
initialStartDate: fromDate,
|
||||
primaryColor: AppColors.primary,
|
||||
onChanged: onDateChanged,
|
||||
);
|
||||
},
|
||||
child: Container(
|
||||
padding:
|
||||
EdgeInsets.symmetric(horizontal: 12.0, vertical: 8.0),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(6.0),
|
||||
border: Border.all(
|
||||
color: AppColors.stroke,
|
||||
)),
|
||||
child: Icon(
|
||||
Icons.calendar_month_outlined,
|
||||
color: AppColors.primary,
|
||||
size: 28,
|
||||
),
|
||||
),
|
||||
),
|
||||
const SpaceWidth(12.0),
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
import 'package:enaklo_pos/core/extensions/build_context_ext.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:enaklo_pos/core/extensions/date_time_ext.dart';
|
||||
|
||||
import '../../../core/constants/colors.dart';
|
||||
|
||||
class ReportTitle extends StatelessWidget {
|
||||
final List<Widget>? actionWidget;
|
||||
const ReportTitle({super.key, this.actionWidget});
|
||||
final String searchDateFormatted;
|
||||
const ReportTitle(
|
||||
{super.key, this.actionWidget, required this.searchDateFormatted});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -41,7 +42,7 @@ class ReportTitle extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
Text(
|
||||
DateTime.now().toFormattedDate2(),
|
||||
searchDateFormatted,
|
||||
style: TextStyle(
|
||||
color: AppColors.grey,
|
||||
fontSize: 14,
|
||||
|
||||
@@ -98,8 +98,8 @@ class _SalesPageState extends State<SalesPage> {
|
||||
},
|
||||
onDateRangeChanged: (start, end) {
|
||||
setState(() {
|
||||
startDate = start;
|
||||
endDate = end;
|
||||
startDate = start ?? startDate;
|
||||
endDate = end ?? endDate;
|
||||
});
|
||||
|
||||
context.read<OrderLoaderBloc>().add(
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import 'package:enaklo_pos/core/components/components.dart';
|
||||
import 'package:enaklo_pos/core/components/date_range_picker.dart';
|
||||
import 'package:enaklo_pos/core/constants/colors.dart';
|
||||
import 'package:enaklo_pos/core/extensions/build_context_ext.dart';
|
||||
import 'package:enaklo_pos/core/extensions/date_time_ext.dart';
|
||||
import 'package:enaklo_pos/presentation/sales/blocs/order_loader/order_loader_bloc.dart';
|
||||
import 'package:enaklo_pos/presentation/sales/dialog/filter_dialog.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
|
||||
@@ -12,7 +12,7 @@ class SalesTitle extends StatelessWidget {
|
||||
final DateTime startDate;
|
||||
final DateTime endDate;
|
||||
final Function(String) onChanged;
|
||||
final void Function(DateTime start, DateTime end) onDateRangeChanged;
|
||||
final void Function(DateTime? start, DateTime? end) onDateRangeChanged;
|
||||
|
||||
const SalesTitle(
|
||||
{super.key,
|
||||
@@ -119,13 +119,12 @@ class SalesTitle extends StatelessWidget {
|
||||
),
|
||||
SpaceWidth(12),
|
||||
GestureDetector(
|
||||
onTap: () => showDialog(
|
||||
onTap: () => DateRangePickerModal.show(
|
||||
context: context,
|
||||
builder: (context) => SalesFilterDialog(
|
||||
startDate: startDate,
|
||||
endDate: endDate,
|
||||
onDateRangeChanged: onDateRangeChanged,
|
||||
),
|
||||
initialStartDate: startDate,
|
||||
initialEndDate: endDate,
|
||||
primaryColor: AppColors.primary,
|
||||
onChanged: onDateRangeChanged,
|
||||
),
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(12),
|
||||
|
||||
Reference in New Issue
Block a user