feat: item sales report

This commit is contained in:
efrilm
2025-08-06 12:06:34 +07:00
parent fd254c22fd
commit 2a457ea5f6
9 changed files with 809 additions and 203 deletions
@@ -1,6 +1,6 @@
import 'package:bloc/bloc.dart';
import 'package:enaklo_pos/data/models/response/item_sales_response_model.dart';
import 'package:enaklo_pos/data/datasources/order_item_remote_datasource.dart';
import 'package:enaklo_pos/data/datasources/analytic_remote_datasource.dart';
import 'package:enaklo_pos/data/models/response/sales_analytic_response_model.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'item_sales_report_event.dart';
@@ -9,12 +9,14 @@ part 'item_sales_report_bloc.freezed.dart';
class ItemSalesReportBloc
extends Bloc<ItemSalesReportEvent, ItemSalesReportState> {
final OrderItemRemoteDatasource datasource;
final AnalyticRemoteDatasource datasource;
ItemSalesReportBloc(this.datasource) : super(const _Initial()) {
on<_GetItemSales>((event, emit) async {
emit(const _Loading());
final result = await datasource.getItemSalesByRangeDate(
event.startDate, event.endDate);
final result = await datasource.getSales(
dateFrom: event.startDate,
dateTo: event.endDate,
);
result.fold((l) => emit(_Error(l)), (r) => emit(_Loaded(r.data!)));
});
}
@@ -19,19 +19,20 @@ mixin _$ItemSalesReportEvent {
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function() started,
required TResult Function(String startDate, String endDate) getItemSales,
required TResult Function(DateTime startDate, DateTime endDate)
getItemSales,
}) =>
throw _privateConstructorUsedError;
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? started,
TResult? Function(String startDate, String endDate)? getItemSales,
TResult? Function(DateTime startDate, DateTime endDate)? getItemSales,
}) =>
throw _privateConstructorUsedError;
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function()? started,
TResult Function(String startDate, String endDate)? getItemSales,
TResult Function(DateTime startDate, DateTime endDate)? getItemSales,
required TResult orElse(),
}) =>
throw _privateConstructorUsedError;
@@ -120,7 +121,8 @@ class _$StartedImpl implements _Started {
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function() started,
required TResult Function(String startDate, String endDate) getItemSales,
required TResult Function(DateTime startDate, DateTime endDate)
getItemSales,
}) {
return started();
}
@@ -129,7 +131,7 @@ class _$StartedImpl implements _Started {
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? started,
TResult? Function(String startDate, String endDate)? getItemSales,
TResult? Function(DateTime startDate, DateTime endDate)? getItemSales,
}) {
return started?.call();
}
@@ -138,7 +140,7 @@ class _$StartedImpl implements _Started {
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function()? started,
TResult Function(String startDate, String endDate)? getItemSales,
TResult Function(DateTime startDate, DateTime endDate)? getItemSales,
required TResult orElse(),
}) {
if (started != null) {
@@ -189,7 +191,7 @@ abstract class _$$GetItemSalesImplCopyWith<$Res> {
_$GetItemSalesImpl value, $Res Function(_$GetItemSalesImpl) then) =
__$$GetItemSalesImplCopyWithImpl<$Res>;
@useResult
$Res call({String startDate, String endDate});
$Res call({DateTime startDate, DateTime endDate});
}
/// @nodoc
@@ -212,11 +214,11 @@ class __$$GetItemSalesImplCopyWithImpl<$Res>
startDate: null == startDate
? _value.startDate
: startDate // ignore: cast_nullable_to_non_nullable
as String,
as DateTime,
endDate: null == endDate
? _value.endDate
: endDate // ignore: cast_nullable_to_non_nullable
as String,
as DateTime,
));
}
}
@@ -227,9 +229,9 @@ class _$GetItemSalesImpl implements _GetItemSales {
const _$GetItemSalesImpl({required this.startDate, required this.endDate});
@override
final String startDate;
final DateTime startDate;
@override
final String endDate;
final DateTime endDate;
@override
String toString() {
@@ -261,7 +263,8 @@ class _$GetItemSalesImpl implements _GetItemSales {
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function() started,
required TResult Function(String startDate, String endDate) getItemSales,
required TResult Function(DateTime startDate, DateTime endDate)
getItemSales,
}) {
return getItemSales(startDate, endDate);
}
@@ -270,7 +273,7 @@ class _$GetItemSalesImpl implements _GetItemSales {
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? started,
TResult? Function(String startDate, String endDate)? getItemSales,
TResult? Function(DateTime startDate, DateTime endDate)? getItemSales,
}) {
return getItemSales?.call(startDate, endDate);
}
@@ -279,7 +282,7 @@ class _$GetItemSalesImpl implements _GetItemSales {
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function()? started,
TResult Function(String startDate, String endDate)? getItemSales,
TResult Function(DateTime startDate, DateTime endDate)? getItemSales,
required TResult orElse(),
}) {
if (getItemSales != null) {
@@ -322,11 +325,11 @@ class _$GetItemSalesImpl implements _GetItemSales {
abstract class _GetItemSales implements ItemSalesReportEvent {
const factory _GetItemSales(
{required final String startDate,
required final String endDate}) = _$GetItemSalesImpl;
{required final DateTime startDate,
required final DateTime endDate}) = _$GetItemSalesImpl;
String get startDate;
String get endDate;
DateTime get startDate;
DateTime get endDate;
/// Create a copy of ItemSalesReportEvent
/// with the given fields replaced by the non-null parameter values.
@@ -341,7 +344,7 @@ mixin _$ItemSalesReportState {
TResult when<TResult extends Object?>({
required TResult Function() initial,
required TResult Function() loading,
required TResult Function(List<ItemSales> itemSales) loaded,
required TResult Function(SalesAnalyticData itemSales) loaded,
required TResult Function(String message) error,
}) =>
throw _privateConstructorUsedError;
@@ -349,7 +352,7 @@ mixin _$ItemSalesReportState {
TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? initial,
TResult? Function()? loading,
TResult? Function(List<ItemSales> itemSales)? loaded,
TResult? Function(SalesAnalyticData itemSales)? loaded,
TResult? Function(String message)? error,
}) =>
throw _privateConstructorUsedError;
@@ -357,7 +360,7 @@ mixin _$ItemSalesReportState {
TResult maybeWhen<TResult extends Object?>({
TResult Function()? initial,
TResult Function()? loading,
TResult Function(List<ItemSales> itemSales)? loaded,
TResult Function(SalesAnalyticData itemSales)? loaded,
TResult Function(String message)? error,
required TResult orElse(),
}) =>
@@ -454,7 +457,7 @@ class _$InitialImpl implements _Initial {
TResult when<TResult extends Object?>({
required TResult Function() initial,
required TResult Function() loading,
required TResult Function(List<ItemSales> itemSales) loaded,
required TResult Function(SalesAnalyticData itemSales) loaded,
required TResult Function(String message) error,
}) {
return initial();
@@ -465,7 +468,7 @@ class _$InitialImpl implements _Initial {
TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? initial,
TResult? Function()? loading,
TResult? Function(List<ItemSales> itemSales)? loaded,
TResult? Function(SalesAnalyticData itemSales)? loaded,
TResult? Function(String message)? error,
}) {
return initial?.call();
@@ -476,7 +479,7 @@ class _$InitialImpl implements _Initial {
TResult maybeWhen<TResult extends Object?>({
TResult Function()? initial,
TResult Function()? loading,
TResult Function(List<ItemSales> itemSales)? loaded,
TResult Function(SalesAnalyticData itemSales)? loaded,
TResult Function(String message)? error,
required TResult orElse(),
}) {
@@ -571,7 +574,7 @@ class _$LoadingImpl implements _Loading {
TResult when<TResult extends Object?>({
required TResult Function() initial,
required TResult Function() loading,
required TResult Function(List<ItemSales> itemSales) loaded,
required TResult Function(SalesAnalyticData itemSales) loaded,
required TResult Function(String message) error,
}) {
return loading();
@@ -582,7 +585,7 @@ class _$LoadingImpl implements _Loading {
TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? initial,
TResult? Function()? loading,
TResult? Function(List<ItemSales> itemSales)? loaded,
TResult? Function(SalesAnalyticData itemSales)? loaded,
TResult? Function(String message)? error,
}) {
return loading?.call();
@@ -593,7 +596,7 @@ class _$LoadingImpl implements _Loading {
TResult maybeWhen<TResult extends Object?>({
TResult Function()? initial,
TResult Function()? loading,
TResult Function(List<ItemSales> itemSales)? loaded,
TResult Function(SalesAnalyticData itemSales)? loaded,
TResult Function(String message)? error,
required TResult orElse(),
}) {
@@ -651,7 +654,7 @@ abstract class _$$LoadedImplCopyWith<$Res> {
_$LoadedImpl value, $Res Function(_$LoadedImpl) then) =
__$$LoadedImplCopyWithImpl<$Res>;
@useResult
$Res call({List<ItemSales> itemSales});
$Res call({SalesAnalyticData itemSales});
}
/// @nodoc
@@ -671,9 +674,9 @@ class __$$LoadedImplCopyWithImpl<$Res>
}) {
return _then(_$LoadedImpl(
null == itemSales
? _value._itemSales
? _value.itemSales
: itemSales // ignore: cast_nullable_to_non_nullable
as List<ItemSales>,
as SalesAnalyticData,
));
}
}
@@ -681,15 +684,10 @@ class __$$LoadedImplCopyWithImpl<$Res>
/// @nodoc
class _$LoadedImpl implements _Loaded {
const _$LoadedImpl(final List<ItemSales> itemSales) : _itemSales = itemSales;
const _$LoadedImpl(this.itemSales);
final List<ItemSales> _itemSales;
@override
List<ItemSales> get itemSales {
if (_itemSales is EqualUnmodifiableListView) return _itemSales;
// ignore: implicit_dynamic_type
return EqualUnmodifiableListView(_itemSales);
}
final SalesAnalyticData itemSales;
@override
String toString() {
@@ -701,13 +699,12 @@ class _$LoadedImpl implements _Loaded {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$LoadedImpl &&
const DeepCollectionEquality()
.equals(other._itemSales, _itemSales));
(identical(other.itemSales, itemSales) ||
other.itemSales == itemSales));
}
@override
int get hashCode =>
Object.hash(runtimeType, const DeepCollectionEquality().hash(_itemSales));
int get hashCode => Object.hash(runtimeType, itemSales);
/// Create a copy of ItemSalesReportState
/// with the given fields replaced by the non-null parameter values.
@@ -722,7 +719,7 @@ class _$LoadedImpl implements _Loaded {
TResult when<TResult extends Object?>({
required TResult Function() initial,
required TResult Function() loading,
required TResult Function(List<ItemSales> itemSales) loaded,
required TResult Function(SalesAnalyticData itemSales) loaded,
required TResult Function(String message) error,
}) {
return loaded(itemSales);
@@ -733,7 +730,7 @@ class _$LoadedImpl implements _Loaded {
TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? initial,
TResult? Function()? loading,
TResult? Function(List<ItemSales> itemSales)? loaded,
TResult? Function(SalesAnalyticData itemSales)? loaded,
TResult? Function(String message)? error,
}) {
return loaded?.call(itemSales);
@@ -744,7 +741,7 @@ class _$LoadedImpl implements _Loaded {
TResult maybeWhen<TResult extends Object?>({
TResult Function()? initial,
TResult Function()? loading,
TResult Function(List<ItemSales> itemSales)? loaded,
TResult Function(SalesAnalyticData itemSales)? loaded,
TResult Function(String message)? error,
required TResult orElse(),
}) {
@@ -793,9 +790,9 @@ class _$LoadedImpl implements _Loaded {
}
abstract class _Loaded implements ItemSalesReportState {
const factory _Loaded(final List<ItemSales> itemSales) = _$LoadedImpl;
const factory _Loaded(final SalesAnalyticData itemSales) = _$LoadedImpl;
List<ItemSales> get itemSales;
SalesAnalyticData get itemSales;
/// Create a copy of ItemSalesReportState
/// with the given fields replaced by the non-null parameter values.
@@ -874,7 +871,7 @@ class _$ErrorImpl implements _Error {
TResult when<TResult extends Object?>({
required TResult Function() initial,
required TResult Function() loading,
required TResult Function(List<ItemSales> itemSales) loaded,
required TResult Function(SalesAnalyticData itemSales) loaded,
required TResult Function(String message) error,
}) {
return error(message);
@@ -885,7 +882,7 @@ class _$ErrorImpl implements _Error {
TResult? whenOrNull<TResult extends Object?>({
TResult? Function()? initial,
TResult? Function()? loading,
TResult? Function(List<ItemSales> itemSales)? loaded,
TResult? Function(SalesAnalyticData itemSales)? loaded,
TResult? Function(String message)? error,
}) {
return error?.call(message);
@@ -896,7 +893,7 @@ class _$ErrorImpl implements _Error {
TResult maybeWhen<TResult extends Object?>({
TResult Function()? initial,
TResult Function()? loading,
TResult Function(List<ItemSales> itemSales)? loaded,
TResult Function(SalesAnalyticData itemSales)? loaded,
TResult Function(String message)? error,
required TResult orElse(),
}) {
@@ -4,7 +4,7 @@ part of 'item_sales_report_bloc.dart';
class ItemSalesReportEvent with _$ItemSalesReportEvent {
const factory ItemSalesReportEvent.started() = _Started;
const factory ItemSalesReportEvent.getItemSales({
required String startDate,
required String endDate,
required DateTime startDate,
required DateTime endDate,
}) = _GetItemSales;
}
@@ -4,7 +4,7 @@ part of 'item_sales_report_bloc.dart';
class ItemSalesReportState with _$ItemSalesReportState {
const factory ItemSalesReportState.initial() = _Initial;
const factory ItemSalesReportState.loading() = _Loading;
const factory ItemSalesReportState.loaded(List<ItemSales> itemSales) =
const factory ItemSalesReportState.loaded(SalesAnalyticData itemSales) =
_Loaded;
const factory ItemSalesReportState.error(String message) = _Error;
}