Compare commits
3 Commits
65ba81f311
...
bc95336a19
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bc95336a19 | ||
|
|
d58198e7f0 | ||
|
|
b5593d10eb |
@ -11,6 +11,6 @@ class InventoryAnalyticLoaderState with _$InventoryAnalyticLoaderState {
|
|||||||
factory InventoryAnalyticLoaderState.initial() =>
|
factory InventoryAnalyticLoaderState.initial() =>
|
||||||
InventoryAnalyticLoaderState(
|
InventoryAnalyticLoaderState(
|
||||||
inventoryAnalytic: InventoryAnalytic.empty(),
|
inventoryAnalytic: InventoryAnalytic.empty(),
|
||||||
failureOptionInventoryAnalytic: None(),
|
failureOptionInventoryAnalytic: none(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,55 @@
|
|||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart';
|
||||||
|
|
||||||
|
import '../../../domain/analytic/analytic.dart';
|
||||||
|
import '../../../domain/analytic/repositories/i_analytic_repository.dart';
|
||||||
|
|
||||||
|
part 'payment_method_analytic_loader_event.dart';
|
||||||
|
part 'payment_method_analytic_loader_state.dart';
|
||||||
|
part 'payment_method_analytic_loader_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class PaymentMethodAnalyticLoaderBloc
|
||||||
|
extends
|
||||||
|
Bloc<
|
||||||
|
PaymentMethodAnalyticLoaderEvent,
|
||||||
|
PaymentMethodAnalyticLoaderState
|
||||||
|
> {
|
||||||
|
final IAnalyticRepository _repository;
|
||||||
|
PaymentMethodAnalyticLoaderBloc(this._repository)
|
||||||
|
: super(PaymentMethodAnalyticLoaderState.initial()) {
|
||||||
|
on<PaymentMethodAnalyticLoaderEvent>(_onPaymentMethodAnalyticLoaderEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onPaymentMethodAnalyticLoaderEvent(
|
||||||
|
PaymentMethodAnalyticLoaderEvent event,
|
||||||
|
Emitter<PaymentMethodAnalyticLoaderState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
fetched: (e) async {
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isFetching: true,
|
||||||
|
failureOptionPaymentMethodAnalytic: none(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
final result = await _repository.getPaymentMethod(
|
||||||
|
dateFrom: DateTime.now().subtract(const Duration(days: 30)),
|
||||||
|
dateTo: DateTime.now(),
|
||||||
|
);
|
||||||
|
|
||||||
|
var data = result.fold(
|
||||||
|
(f) =>
|
||||||
|
state.copyWith(failureOptionPaymentMethodAnalytic: optionOf(f)),
|
||||||
|
(paymentMethodAnalytic) =>
|
||||||
|
state.copyWith(paymentMethodAnalytic: paymentMethodAnalytic),
|
||||||
|
);
|
||||||
|
|
||||||
|
emit(data.copyWith(isFetching: false));
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,410 @@
|
|||||||
|
// coverage:ignore-file
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||||
|
|
||||||
|
part of 'payment_method_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
|
||||||
|
);
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$PaymentMethodAnalyticLoaderEvent {
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function() fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function()? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function()? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $PaymentMethodAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
factory $PaymentMethodAnalyticLoaderEventCopyWith(
|
||||||
|
PaymentMethodAnalyticLoaderEvent value,
|
||||||
|
$Res Function(PaymentMethodAnalyticLoaderEvent) then,
|
||||||
|
) =
|
||||||
|
_$PaymentMethodAnalyticLoaderEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
PaymentMethodAnalyticLoaderEvent
|
||||||
|
>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$PaymentMethodAnalyticLoaderEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends PaymentMethodAnalyticLoaderEvent
|
||||||
|
>
|
||||||
|
implements $PaymentMethodAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
_$PaymentMethodAnalyticLoaderEventCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$FetchedImplCopyWith<$Res> {
|
||||||
|
factory _$$FetchedImplCopyWith(
|
||||||
|
_$FetchedImpl value,
|
||||||
|
$Res Function(_$FetchedImpl) then,
|
||||||
|
) = __$$FetchedImplCopyWithImpl<$Res>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$FetchedImplCopyWithImpl<$Res>
|
||||||
|
extends _$PaymentMethodAnalyticLoaderEventCopyWithImpl<$Res, _$FetchedImpl>
|
||||||
|
implements _$$FetchedImplCopyWith<$Res> {
|
||||||
|
__$$FetchedImplCopyWithImpl(
|
||||||
|
_$FetchedImpl _value,
|
||||||
|
$Res Function(_$FetchedImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$FetchedImpl implements _Fetched {
|
||||||
|
const _$FetchedImpl();
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'PaymentMethodAnalyticLoaderEvent.fetched()';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType && other is _$FetchedImpl);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => runtimeType.hashCode;
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({required TResult Function() fetched}) {
|
||||||
|
return fetched();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({TResult? Function()? fetched}) {
|
||||||
|
return fetched?.call();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function()? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched();
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Fetched implements PaymentMethodAnalyticLoaderEvent {
|
||||||
|
const factory _Fetched() = _$FetchedImpl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$PaymentMethodAnalyticLoaderState {
|
||||||
|
PaymentMethodAnalytic get paymentMethodAnalytic =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
Option<AnalyticFailure> get failureOptionPaymentMethodAnalytic =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
bool get isFetching => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$PaymentMethodAnalyticLoaderStateCopyWith<PaymentMethodAnalyticLoaderState>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $PaymentMethodAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
factory $PaymentMethodAnalyticLoaderStateCopyWith(
|
||||||
|
PaymentMethodAnalyticLoaderState value,
|
||||||
|
$Res Function(PaymentMethodAnalyticLoaderState) then,
|
||||||
|
) =
|
||||||
|
_$PaymentMethodAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
PaymentMethodAnalyticLoaderState
|
||||||
|
>;
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
PaymentMethodAnalytic paymentMethodAnalytic,
|
||||||
|
Option<AnalyticFailure> failureOptionPaymentMethodAnalytic,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
$PaymentMethodAnalyticCopyWith<$Res> get paymentMethodAnalytic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$PaymentMethodAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends PaymentMethodAnalyticLoaderState
|
||||||
|
>
|
||||||
|
implements $PaymentMethodAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
_$PaymentMethodAnalyticLoaderStateCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? paymentMethodAnalytic = null,
|
||||||
|
Object? failureOptionPaymentMethodAnalytic = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
paymentMethodAnalytic: null == paymentMethodAnalytic
|
||||||
|
? _value.paymentMethodAnalytic
|
||||||
|
: paymentMethodAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as PaymentMethodAnalytic,
|
||||||
|
failureOptionPaymentMethodAnalytic:
|
||||||
|
null == failureOptionPaymentMethodAnalytic
|
||||||
|
? _value.failureOptionPaymentMethodAnalytic
|
||||||
|
: failureOptionPaymentMethodAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<AnalyticFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
$PaymentMethodAnalyticCopyWith<$Res> get paymentMethodAnalytic {
|
||||||
|
return $PaymentMethodAnalyticCopyWith<$Res>(_value.paymentMethodAnalytic, (
|
||||||
|
value,
|
||||||
|
) {
|
||||||
|
return _then(_value.copyWith(paymentMethodAnalytic: value) as $Val);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$PaymentMethodAnalyticLoaderStateImplCopyWith<$Res>
|
||||||
|
implements $PaymentMethodAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
factory _$$PaymentMethodAnalyticLoaderStateImplCopyWith(
|
||||||
|
_$PaymentMethodAnalyticLoaderStateImpl value,
|
||||||
|
$Res Function(_$PaymentMethodAnalyticLoaderStateImpl) then,
|
||||||
|
) = __$$PaymentMethodAnalyticLoaderStateImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
PaymentMethodAnalytic paymentMethodAnalytic,
|
||||||
|
Option<AnalyticFailure> failureOptionPaymentMethodAnalytic,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$PaymentMethodAnalyticCopyWith<$Res> get paymentMethodAnalytic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$PaymentMethodAnalyticLoaderStateImplCopyWithImpl<$Res>
|
||||||
|
extends
|
||||||
|
_$PaymentMethodAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
_$PaymentMethodAnalyticLoaderStateImpl
|
||||||
|
>
|
||||||
|
implements _$$PaymentMethodAnalyticLoaderStateImplCopyWith<$Res> {
|
||||||
|
__$$PaymentMethodAnalyticLoaderStateImplCopyWithImpl(
|
||||||
|
_$PaymentMethodAnalyticLoaderStateImpl _value,
|
||||||
|
$Res Function(_$PaymentMethodAnalyticLoaderStateImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? paymentMethodAnalytic = null,
|
||||||
|
Object? failureOptionPaymentMethodAnalytic = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_$PaymentMethodAnalyticLoaderStateImpl(
|
||||||
|
paymentMethodAnalytic: null == paymentMethodAnalytic
|
||||||
|
? _value.paymentMethodAnalytic
|
||||||
|
: paymentMethodAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as PaymentMethodAnalytic,
|
||||||
|
failureOptionPaymentMethodAnalytic:
|
||||||
|
null == failureOptionPaymentMethodAnalytic
|
||||||
|
? _value.failureOptionPaymentMethodAnalytic
|
||||||
|
: failureOptionPaymentMethodAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<AnalyticFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$PaymentMethodAnalyticLoaderStateImpl
|
||||||
|
implements _PaymentMethodAnalyticLoaderState {
|
||||||
|
const _$PaymentMethodAnalyticLoaderStateImpl({
|
||||||
|
required this.paymentMethodAnalytic,
|
||||||
|
required this.failureOptionPaymentMethodAnalytic,
|
||||||
|
this.isFetching = false,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final PaymentMethodAnalytic paymentMethodAnalytic;
|
||||||
|
@override
|
||||||
|
final Option<AnalyticFailure> failureOptionPaymentMethodAnalytic;
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final bool isFetching;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'PaymentMethodAnalyticLoaderState(paymentMethodAnalytic: $paymentMethodAnalytic, failureOptionPaymentMethodAnalytic: $failureOptionPaymentMethodAnalytic, isFetching: $isFetching)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$PaymentMethodAnalyticLoaderStateImpl &&
|
||||||
|
(identical(other.paymentMethodAnalytic, paymentMethodAnalytic) ||
|
||||||
|
other.paymentMethodAnalytic == paymentMethodAnalytic) &&
|
||||||
|
(identical(
|
||||||
|
other.failureOptionPaymentMethodAnalytic,
|
||||||
|
failureOptionPaymentMethodAnalytic,
|
||||||
|
) ||
|
||||||
|
other.failureOptionPaymentMethodAnalytic ==
|
||||||
|
failureOptionPaymentMethodAnalytic) &&
|
||||||
|
(identical(other.isFetching, isFetching) ||
|
||||||
|
other.isFetching == isFetching));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(
|
||||||
|
runtimeType,
|
||||||
|
paymentMethodAnalytic,
|
||||||
|
failureOptionPaymentMethodAnalytic,
|
||||||
|
isFetching,
|
||||||
|
);
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$PaymentMethodAnalyticLoaderStateImplCopyWith<
|
||||||
|
_$PaymentMethodAnalyticLoaderStateImpl
|
||||||
|
>
|
||||||
|
get copyWith =>
|
||||||
|
__$$PaymentMethodAnalyticLoaderStateImplCopyWithImpl<
|
||||||
|
_$PaymentMethodAnalyticLoaderStateImpl
|
||||||
|
>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _PaymentMethodAnalyticLoaderState
|
||||||
|
implements PaymentMethodAnalyticLoaderState {
|
||||||
|
const factory _PaymentMethodAnalyticLoaderState({
|
||||||
|
required final PaymentMethodAnalytic paymentMethodAnalytic,
|
||||||
|
required final Option<AnalyticFailure> failureOptionPaymentMethodAnalytic,
|
||||||
|
final bool isFetching,
|
||||||
|
}) = _$PaymentMethodAnalyticLoaderStateImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
PaymentMethodAnalytic get paymentMethodAnalytic;
|
||||||
|
@override
|
||||||
|
Option<AnalyticFailure> get failureOptionPaymentMethodAnalytic;
|
||||||
|
@override
|
||||||
|
bool get isFetching;
|
||||||
|
|
||||||
|
/// Create a copy of PaymentMethodAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$PaymentMethodAnalyticLoaderStateImplCopyWith<
|
||||||
|
_$PaymentMethodAnalyticLoaderStateImpl
|
||||||
|
>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
part of 'payment_method_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PaymentMethodAnalyticLoaderEvent with _$PaymentMethodAnalyticLoaderEvent {
|
||||||
|
const factory PaymentMethodAnalyticLoaderEvent.fetched() = _Fetched;
|
||||||
|
}
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
part of 'payment_method_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PaymentMethodAnalyticLoaderState with _$PaymentMethodAnalyticLoaderState {
|
||||||
|
const factory PaymentMethodAnalyticLoaderState({
|
||||||
|
required PaymentMethodAnalytic paymentMethodAnalytic,
|
||||||
|
required Option<AnalyticFailure> failureOptionPaymentMethodAnalytic,
|
||||||
|
@Default(false) bool isFetching,
|
||||||
|
}) = _PaymentMethodAnalyticLoaderState;
|
||||||
|
|
||||||
|
factory PaymentMethodAnalyticLoaderState.initial() =>
|
||||||
|
PaymentMethodAnalyticLoaderState(
|
||||||
|
paymentMethodAnalytic: PaymentMethodAnalytic.empty(),
|
||||||
|
failureOptionPaymentMethodAnalytic: none(),
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -0,0 +1,49 @@
|
|||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:injectable/injectable.dart';
|
||||||
|
|
||||||
|
import '../../../domain/analytic/analytic.dart';
|
||||||
|
import '../../../domain/analytic/repositories/i_analytic_repository.dart';
|
||||||
|
|
||||||
|
part 'product_analytic_loader_event.dart';
|
||||||
|
part 'product_analytic_loader_state.dart';
|
||||||
|
part 'product_analytic_loader_bloc.freezed.dart';
|
||||||
|
|
||||||
|
@injectable
|
||||||
|
class ProductAnalyticLoaderBloc
|
||||||
|
extends Bloc<ProductAnalyticLoaderEvent, ProductAnalyticLoaderState> {
|
||||||
|
final IAnalyticRepository _repository;
|
||||||
|
ProductAnalyticLoaderBloc(this._repository)
|
||||||
|
: super(ProductAnalyticLoaderState.initial()) {
|
||||||
|
on<ProductAnalyticLoaderEvent>(_onProductAnalyticLoaderEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onProductAnalyticLoaderEvent(
|
||||||
|
ProductAnalyticLoaderEvent event,
|
||||||
|
Emitter<ProductAnalyticLoaderState> emit,
|
||||||
|
) {
|
||||||
|
return event.map(
|
||||||
|
fetched: (e) async {
|
||||||
|
emit(
|
||||||
|
state.copyWith(
|
||||||
|
isFetching: true,
|
||||||
|
failureOptionProductAnalytic: none(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
final result = await _repository.getProduct(
|
||||||
|
dateFrom: DateTime.now().subtract(const Duration(days: 30)),
|
||||||
|
dateTo: DateTime.now(),
|
||||||
|
);
|
||||||
|
|
||||||
|
var data = result.fold(
|
||||||
|
(f) => state.copyWith(failureOptionProductAnalytic: optionOf(f)),
|
||||||
|
(productAnalytic) => state.copyWith(productAnalytic: productAnalytic),
|
||||||
|
);
|
||||||
|
|
||||||
|
emit(data.copyWith(isFetching: false));
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,400 @@
|
|||||||
|
// coverage:ignore-file
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint
|
||||||
|
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||||
|
|
||||||
|
part of 'product_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
|
||||||
|
final _privateConstructorUsedError = UnsupportedError(
|
||||||
|
'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models',
|
||||||
|
);
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$ProductAnalyticLoaderEvent {
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({
|
||||||
|
required TResult Function() fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function()? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function()? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $ProductAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
factory $ProductAnalyticLoaderEventCopyWith(
|
||||||
|
ProductAnalyticLoaderEvent value,
|
||||||
|
$Res Function(ProductAnalyticLoaderEvent) then,
|
||||||
|
) =
|
||||||
|
_$ProductAnalyticLoaderEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
ProductAnalyticLoaderEvent
|
||||||
|
>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ProductAnalyticLoaderEventCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends ProductAnalyticLoaderEvent
|
||||||
|
>
|
||||||
|
implements $ProductAnalyticLoaderEventCopyWith<$Res> {
|
||||||
|
_$ProductAnalyticLoaderEventCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of ProductAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$FetchedImplCopyWith<$Res> {
|
||||||
|
factory _$$FetchedImplCopyWith(
|
||||||
|
_$FetchedImpl value,
|
||||||
|
$Res Function(_$FetchedImpl) then,
|
||||||
|
) = __$$FetchedImplCopyWithImpl<$Res>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$FetchedImplCopyWithImpl<$Res>
|
||||||
|
extends _$ProductAnalyticLoaderEventCopyWithImpl<$Res, _$FetchedImpl>
|
||||||
|
implements _$$FetchedImplCopyWith<$Res> {
|
||||||
|
__$$FetchedImplCopyWithImpl(
|
||||||
|
_$FetchedImpl _value,
|
||||||
|
$Res Function(_$FetchedImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of ProductAnalyticLoaderEvent
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$FetchedImpl implements _Fetched {
|
||||||
|
const _$FetchedImpl();
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'ProductAnalyticLoaderEvent.fetched()';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType && other is _$FetchedImpl);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => runtimeType.hashCode;
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult when<TResult extends Object?>({required TResult Function() fetched}) {
|
||||||
|
return fetched();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? whenOrNull<TResult extends Object?>({TResult? Function()? fetched}) {
|
||||||
|
return fetched?.call();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeWhen<TResult extends Object?>({
|
||||||
|
TResult Function()? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched();
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult map<TResult extends Object?>({
|
||||||
|
required TResult Function(_Fetched value) fetched,
|
||||||
|
}) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult? mapOrNull<TResult extends Object?>({
|
||||||
|
TResult? Function(_Fetched value)? fetched,
|
||||||
|
}) {
|
||||||
|
return fetched?.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
@optionalTypeArgs
|
||||||
|
TResult maybeMap<TResult extends Object?>({
|
||||||
|
TResult Function(_Fetched value)? fetched,
|
||||||
|
required TResult orElse(),
|
||||||
|
}) {
|
||||||
|
if (fetched != null) {
|
||||||
|
return fetched(this);
|
||||||
|
}
|
||||||
|
return orElse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _Fetched implements ProductAnalyticLoaderEvent {
|
||||||
|
const factory _Fetched() = _$FetchedImpl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$ProductAnalyticLoaderState {
|
||||||
|
ProductAnalytic get productAnalytic => throw _privateConstructorUsedError;
|
||||||
|
Option<AnalyticFailure> get failureOptionProductAnalytic =>
|
||||||
|
throw _privateConstructorUsedError;
|
||||||
|
bool get isFetching => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
|
/// Create a copy of ProductAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
$ProductAnalyticLoaderStateCopyWith<ProductAnalyticLoaderState>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class $ProductAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
factory $ProductAnalyticLoaderStateCopyWith(
|
||||||
|
ProductAnalyticLoaderState value,
|
||||||
|
$Res Function(ProductAnalyticLoaderState) then,
|
||||||
|
) =
|
||||||
|
_$ProductAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
ProductAnalyticLoaderState
|
||||||
|
>;
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
ProductAnalytic productAnalytic,
|
||||||
|
Option<AnalyticFailure> failureOptionProductAnalytic,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
$ProductAnalyticCopyWith<$Res> get productAnalytic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class _$ProductAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
$Val extends ProductAnalyticLoaderState
|
||||||
|
>
|
||||||
|
implements $ProductAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
_$ProductAnalyticLoaderStateCopyWithImpl(this._value, this._then);
|
||||||
|
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Val _value;
|
||||||
|
// ignore: unused_field
|
||||||
|
final $Res Function($Val) _then;
|
||||||
|
|
||||||
|
/// Create a copy of ProductAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? productAnalytic = null,
|
||||||
|
Object? failureOptionProductAnalytic = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_value.copyWith(
|
||||||
|
productAnalytic: null == productAnalytic
|
||||||
|
? _value.productAnalytic
|
||||||
|
: productAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as ProductAnalytic,
|
||||||
|
failureOptionProductAnalytic: null == failureOptionProductAnalytic
|
||||||
|
? _value.failureOptionProductAnalytic
|
||||||
|
: failureOptionProductAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<AnalyticFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
)
|
||||||
|
as $Val,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create a copy of ProductAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
$ProductAnalyticCopyWith<$Res> get productAnalytic {
|
||||||
|
return $ProductAnalyticCopyWith<$Res>(_value.productAnalytic, (value) {
|
||||||
|
return _then(_value.copyWith(productAnalytic: value) as $Val);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract class _$$ProductAnalyticLoaderStateImplCopyWith<$Res>
|
||||||
|
implements $ProductAnalyticLoaderStateCopyWith<$Res> {
|
||||||
|
factory _$$ProductAnalyticLoaderStateImplCopyWith(
|
||||||
|
_$ProductAnalyticLoaderStateImpl value,
|
||||||
|
$Res Function(_$ProductAnalyticLoaderStateImpl) then,
|
||||||
|
) = __$$ProductAnalyticLoaderStateImplCopyWithImpl<$Res>;
|
||||||
|
@override
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
ProductAnalytic productAnalytic,
|
||||||
|
Option<AnalyticFailure> failureOptionProductAnalytic,
|
||||||
|
bool isFetching,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
$ProductAnalyticCopyWith<$Res> get productAnalytic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
class __$$ProductAnalyticLoaderStateImplCopyWithImpl<$Res>
|
||||||
|
extends
|
||||||
|
_$ProductAnalyticLoaderStateCopyWithImpl<
|
||||||
|
$Res,
|
||||||
|
_$ProductAnalyticLoaderStateImpl
|
||||||
|
>
|
||||||
|
implements _$$ProductAnalyticLoaderStateImplCopyWith<$Res> {
|
||||||
|
__$$ProductAnalyticLoaderStateImplCopyWithImpl(
|
||||||
|
_$ProductAnalyticLoaderStateImpl _value,
|
||||||
|
$Res Function(_$ProductAnalyticLoaderStateImpl) _then,
|
||||||
|
) : super(_value, _then);
|
||||||
|
|
||||||
|
/// Create a copy of ProductAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
@override
|
||||||
|
$Res call({
|
||||||
|
Object? productAnalytic = null,
|
||||||
|
Object? failureOptionProductAnalytic = null,
|
||||||
|
Object? isFetching = null,
|
||||||
|
}) {
|
||||||
|
return _then(
|
||||||
|
_$ProductAnalyticLoaderStateImpl(
|
||||||
|
productAnalytic: null == productAnalytic
|
||||||
|
? _value.productAnalytic
|
||||||
|
: productAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as ProductAnalytic,
|
||||||
|
failureOptionProductAnalytic: null == failureOptionProductAnalytic
|
||||||
|
? _value.failureOptionProductAnalytic
|
||||||
|
: failureOptionProductAnalytic // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Option<AnalyticFailure>,
|
||||||
|
isFetching: null == isFetching
|
||||||
|
? _value.isFetching
|
||||||
|
: isFetching // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
class _$ProductAnalyticLoaderStateImpl implements _ProductAnalyticLoaderState {
|
||||||
|
const _$ProductAnalyticLoaderStateImpl({
|
||||||
|
required this.productAnalytic,
|
||||||
|
required this.failureOptionProductAnalytic,
|
||||||
|
this.isFetching = false,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
final ProductAnalytic productAnalytic;
|
||||||
|
@override
|
||||||
|
final Option<AnalyticFailure> failureOptionProductAnalytic;
|
||||||
|
@override
|
||||||
|
@JsonKey()
|
||||||
|
final bool isFetching;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'ProductAnalyticLoaderState(productAnalytic: $productAnalytic, failureOptionProductAnalytic: $failureOptionProductAnalytic, isFetching: $isFetching)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) ||
|
||||||
|
(other.runtimeType == runtimeType &&
|
||||||
|
other is _$ProductAnalyticLoaderStateImpl &&
|
||||||
|
(identical(other.productAnalytic, productAnalytic) ||
|
||||||
|
other.productAnalytic == productAnalytic) &&
|
||||||
|
(identical(
|
||||||
|
other.failureOptionProductAnalytic,
|
||||||
|
failureOptionProductAnalytic,
|
||||||
|
) ||
|
||||||
|
other.failureOptionProductAnalytic ==
|
||||||
|
failureOptionProductAnalytic) &&
|
||||||
|
(identical(other.isFetching, isFetching) ||
|
||||||
|
other.isFetching == isFetching));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(
|
||||||
|
runtimeType,
|
||||||
|
productAnalytic,
|
||||||
|
failureOptionProductAnalytic,
|
||||||
|
isFetching,
|
||||||
|
);
|
||||||
|
|
||||||
|
/// Create a copy of ProductAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$$ProductAnalyticLoaderStateImplCopyWith<_$ProductAnalyticLoaderStateImpl>
|
||||||
|
get copyWith =>
|
||||||
|
__$$ProductAnalyticLoaderStateImplCopyWithImpl<
|
||||||
|
_$ProductAnalyticLoaderStateImpl
|
||||||
|
>(this, _$identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class _ProductAnalyticLoaderState
|
||||||
|
implements ProductAnalyticLoaderState {
|
||||||
|
const factory _ProductAnalyticLoaderState({
|
||||||
|
required final ProductAnalytic productAnalytic,
|
||||||
|
required final Option<AnalyticFailure> failureOptionProductAnalytic,
|
||||||
|
final bool isFetching,
|
||||||
|
}) = _$ProductAnalyticLoaderStateImpl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
ProductAnalytic get productAnalytic;
|
||||||
|
@override
|
||||||
|
Option<AnalyticFailure> get failureOptionProductAnalytic;
|
||||||
|
@override
|
||||||
|
bool get isFetching;
|
||||||
|
|
||||||
|
/// Create a copy of ProductAnalyticLoaderState
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
_$$ProductAnalyticLoaderStateImplCopyWith<_$ProductAnalyticLoaderStateImpl>
|
||||||
|
get copyWith => throw _privateConstructorUsedError;
|
||||||
|
}
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
part of 'product_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class ProductAnalyticLoaderEvent with _$ProductAnalyticLoaderEvent {
|
||||||
|
const factory ProductAnalyticLoaderEvent.fetched() = _Fetched;
|
||||||
|
}
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
part of 'product_analytic_loader_bloc.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class ProductAnalyticLoaderState with _$ProductAnalyticLoaderState {
|
||||||
|
const factory ProductAnalyticLoaderState({
|
||||||
|
required ProductAnalytic productAnalytic,
|
||||||
|
required Option<AnalyticFailure> failureOptionProductAnalytic,
|
||||||
|
@Default(false) bool isFetching,
|
||||||
|
}) = _ProductAnalyticLoaderState;
|
||||||
|
|
||||||
|
factory ProductAnalyticLoaderState.initial() => ProductAnalyticLoaderState(
|
||||||
|
productAnalytic: ProductAnalytic.empty(),
|
||||||
|
failureOptionProductAnalytic: none(),
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -8,6 +8,9 @@ class ApiPath {
|
|||||||
static const String profitLossAnalytic = '/api/v1/analytics/profit-loss';
|
static const String profitLossAnalytic = '/api/v1/analytics/profit-loss';
|
||||||
static const String categoryAnalytic = '/api/v1/analytics/categories';
|
static const String categoryAnalytic = '/api/v1/analytics/categories';
|
||||||
static const String dashboardAnalytic = '/api/v1/analytics/dashboard';
|
static const String dashboardAnalytic = '/api/v1/analytics/dashboard';
|
||||||
|
static const String productAnalytic = '/api/v1/analytics/products';
|
||||||
|
static const String paymentMethodAnalytic =
|
||||||
|
'/api/v1/analytics/paymentMethods';
|
||||||
|
|
||||||
// Inventory
|
// Inventory
|
||||||
static const String inventoryReportDetail =
|
static const String inventoryReportDetail =
|
||||||
|
|||||||
@ -9,4 +9,6 @@ part 'entities/profit_loss_analytic_entity.dart';
|
|||||||
part 'entities/category_analytic_entity.dart';
|
part 'entities/category_analytic_entity.dart';
|
||||||
part 'entities/inventory_analytic_entity.dart';
|
part 'entities/inventory_analytic_entity.dart';
|
||||||
part 'entities/dashboard_analytic_entity.dart';
|
part 'entities/dashboard_analytic_entity.dart';
|
||||||
|
part 'entities/product_analytic_entity.dart';
|
||||||
|
part 'entities/payment_method_analytic_entity.dart';
|
||||||
part 'failures/analytic_failure.dart';
|
part 'failures/analytic_failure.dart';
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,64 @@
|
|||||||
|
part of '../analytic.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PaymentMethodAnalytic with _$PaymentMethodAnalytic {
|
||||||
|
const factory PaymentMethodAnalytic({
|
||||||
|
required String organizationId,
|
||||||
|
required String outletId,
|
||||||
|
required String dateFrom,
|
||||||
|
required String dateTo,
|
||||||
|
required String groupBy,
|
||||||
|
required PaymentMethodSummary summary,
|
||||||
|
required List<PaymentMethodItem> data,
|
||||||
|
}) = _PaymentMethodAnalytic;
|
||||||
|
|
||||||
|
factory PaymentMethodAnalytic.empty() => PaymentMethodAnalytic(
|
||||||
|
organizationId: '',
|
||||||
|
outletId: '',
|
||||||
|
dateFrom: '',
|
||||||
|
dateTo: '',
|
||||||
|
groupBy: '',
|
||||||
|
summary: PaymentMethodSummary.empty(),
|
||||||
|
data: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PaymentMethodItem with _$PaymentMethodItem {
|
||||||
|
const factory PaymentMethodItem({
|
||||||
|
required String paymentMethodId,
|
||||||
|
required String paymentMethodName,
|
||||||
|
required String paymentMethodType,
|
||||||
|
required num totalAmount,
|
||||||
|
required int orderCount,
|
||||||
|
required int paymentCount,
|
||||||
|
required double percentage,
|
||||||
|
}) = _PaymentMethodItem;
|
||||||
|
|
||||||
|
factory PaymentMethodItem.empty() => const PaymentMethodItem(
|
||||||
|
paymentMethodId: '',
|
||||||
|
paymentMethodName: '',
|
||||||
|
paymentMethodType: '',
|
||||||
|
totalAmount: 0,
|
||||||
|
orderCount: 0,
|
||||||
|
paymentCount: 0,
|
||||||
|
percentage: 0.0,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PaymentMethodSummary with _$PaymentMethodSummary {
|
||||||
|
const factory PaymentMethodSummary({
|
||||||
|
required num totalAmount,
|
||||||
|
required int totalOrders,
|
||||||
|
required int totalPayments,
|
||||||
|
required double averageOrderValue,
|
||||||
|
}) = _PaymentMethodSummary;
|
||||||
|
|
||||||
|
factory PaymentMethodSummary.empty() => const PaymentMethodSummary(
|
||||||
|
totalAmount: 0,
|
||||||
|
totalOrders: 0,
|
||||||
|
totalPayments: 0,
|
||||||
|
averageOrderValue: 0.0,
|
||||||
|
);
|
||||||
|
}
|
||||||
45
lib/domain/analytic/entities/product_analytic_entity.dart
Normal file
45
lib/domain/analytic/entities/product_analytic_entity.dart
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
part of '../analytic.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class ProductAnalytic with _$ProductAnalytic {
|
||||||
|
const factory ProductAnalytic({
|
||||||
|
required String organizationId,
|
||||||
|
required String outletId,
|
||||||
|
required String dateFrom,
|
||||||
|
required String dateTo,
|
||||||
|
required List<ProductAnalyticData> data,
|
||||||
|
}) = _ProductAnalytic;
|
||||||
|
|
||||||
|
factory ProductAnalytic.empty() => const ProductAnalytic(
|
||||||
|
organizationId: '',
|
||||||
|
outletId: '',
|
||||||
|
dateFrom: '',
|
||||||
|
dateTo: '',
|
||||||
|
data: [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class ProductAnalyticData with _$ProductAnalyticData {
|
||||||
|
const factory ProductAnalyticData({
|
||||||
|
required String productId,
|
||||||
|
required String productName,
|
||||||
|
required String categoryId,
|
||||||
|
required String categoryName,
|
||||||
|
required int quantitySold,
|
||||||
|
required double revenue,
|
||||||
|
required double averagePrice,
|
||||||
|
required int orderCount,
|
||||||
|
}) = _ProductAnalyticData;
|
||||||
|
|
||||||
|
factory ProductAnalyticData.empty() => const ProductAnalyticData(
|
||||||
|
productId: '',
|
||||||
|
productName: '',
|
||||||
|
categoryId: '',
|
||||||
|
categoryName: '',
|
||||||
|
quantitySold: 0,
|
||||||
|
revenue: 0.0,
|
||||||
|
averagePrice: 0.0,
|
||||||
|
orderCount: 0,
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -27,4 +27,14 @@ abstract class IAnalyticRepository {
|
|||||||
required DateTime dateFrom,
|
required DateTime dateFrom,
|
||||||
required DateTime dateTo,
|
required DateTime dateTo,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Future<Either<AnalyticFailure, ProductAnalytic>> getProduct({
|
||||||
|
required DateTime dateFrom,
|
||||||
|
required DateTime dateTo,
|
||||||
|
});
|
||||||
|
|
||||||
|
Future<Either<AnalyticFailure, PaymentMethodAnalytic>> getPaymentMethod({
|
||||||
|
required DateTime dateFrom,
|
||||||
|
required DateTime dateTo,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,3 +10,5 @@ part 'dto/profit_loss_analytic_dto.dart';
|
|||||||
part 'dto/category_analytic_dto.dart';
|
part 'dto/category_analytic_dto.dart';
|
||||||
part 'dto/inventory_analytic_dto.dart';
|
part 'dto/inventory_analytic_dto.dart';
|
||||||
part 'dto/dashboard_analytic_dto.dart';
|
part 'dto/dashboard_analytic_dto.dart';
|
||||||
|
part 'dto/product_analytic_dto.dart';
|
||||||
|
part 'dto/payment_method_analytic_dto.dart';
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -517,3 +517,123 @@ Map<String, dynamic> _$$DashboardRecentSaleDtoImplToJson(
|
|||||||
'discount': instance.discount,
|
'discount': instance.discount,
|
||||||
'net_sales': instance.netSales,
|
'net_sales': instance.netSales,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
_$ProductAnalyticDtoImpl _$$ProductAnalyticDtoImplFromJson(
|
||||||
|
Map<String, dynamic> json,
|
||||||
|
) => _$ProductAnalyticDtoImpl(
|
||||||
|
organizationId: json['organization_id'] as String,
|
||||||
|
outletId: json['outlet_id'] as String,
|
||||||
|
dateFrom: json['date_from'] as String,
|
||||||
|
dateTo: json['date_to'] as String,
|
||||||
|
data: (json['data'] as List<dynamic>)
|
||||||
|
.map((e) => ProductAnalyticDataDto.fromJson(e as Map<String, dynamic>))
|
||||||
|
.toList(),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$$ProductAnalyticDtoImplToJson(
|
||||||
|
_$ProductAnalyticDtoImpl instance,
|
||||||
|
) => <String, dynamic>{
|
||||||
|
'organization_id': instance.organizationId,
|
||||||
|
'outlet_id': instance.outletId,
|
||||||
|
'date_from': instance.dateFrom,
|
||||||
|
'date_to': instance.dateTo,
|
||||||
|
'data': instance.data,
|
||||||
|
};
|
||||||
|
|
||||||
|
_$ProductAnalyticDataDtoImpl _$$ProductAnalyticDataDtoImplFromJson(
|
||||||
|
Map<String, dynamic> json,
|
||||||
|
) => _$ProductAnalyticDataDtoImpl(
|
||||||
|
productId: json['product_id'] as String,
|
||||||
|
productName: json['product_name'] as String,
|
||||||
|
categoryId: json['category_id'] as String,
|
||||||
|
categoryName: json['category_name'] as String,
|
||||||
|
quantitySold: (json['quantity_sold'] as num).toInt(),
|
||||||
|
revenue: (json['revenue'] as num).toDouble(),
|
||||||
|
averagePrice: (json['average_price'] as num).toDouble(),
|
||||||
|
orderCount: (json['order_count'] as num).toInt(),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$$ProductAnalyticDataDtoImplToJson(
|
||||||
|
_$ProductAnalyticDataDtoImpl instance,
|
||||||
|
) => <String, dynamic>{
|
||||||
|
'product_id': instance.productId,
|
||||||
|
'product_name': instance.productName,
|
||||||
|
'category_id': instance.categoryId,
|
||||||
|
'category_name': instance.categoryName,
|
||||||
|
'quantity_sold': instance.quantitySold,
|
||||||
|
'revenue': instance.revenue,
|
||||||
|
'average_price': instance.averagePrice,
|
||||||
|
'order_count': instance.orderCount,
|
||||||
|
};
|
||||||
|
|
||||||
|
_$PaymentMethodAnalyticDtoImpl _$$PaymentMethodAnalyticDtoImplFromJson(
|
||||||
|
Map<String, dynamic> json,
|
||||||
|
) => _$PaymentMethodAnalyticDtoImpl(
|
||||||
|
organizationId: json['organization_id'] as String?,
|
||||||
|
outletId: json['outlet_id'] as String?,
|
||||||
|
dateFrom: json['date_from'] as String?,
|
||||||
|
dateTo: json['date_to'] as String?,
|
||||||
|
groupBy: json['group_by'] as String?,
|
||||||
|
summary: json['summary'] == null
|
||||||
|
? null
|
||||||
|
: PaymentMethodSummaryDto.fromJson(
|
||||||
|
json['summary'] as Map<String, dynamic>,
|
||||||
|
),
|
||||||
|
data: (json['data'] as List<dynamic>?)
|
||||||
|
?.map((e) => PaymentMethodItemDto.fromJson(e as Map<String, dynamic>))
|
||||||
|
.toList(),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$$PaymentMethodAnalyticDtoImplToJson(
|
||||||
|
_$PaymentMethodAnalyticDtoImpl instance,
|
||||||
|
) => <String, dynamic>{
|
||||||
|
'organization_id': instance.organizationId,
|
||||||
|
'outlet_id': instance.outletId,
|
||||||
|
'date_from': instance.dateFrom,
|
||||||
|
'date_to': instance.dateTo,
|
||||||
|
'group_by': instance.groupBy,
|
||||||
|
'summary': instance.summary,
|
||||||
|
'data': instance.data,
|
||||||
|
};
|
||||||
|
|
||||||
|
_$PaymentMethodItemDtoImpl _$$PaymentMethodItemDtoImplFromJson(
|
||||||
|
Map<String, dynamic> json,
|
||||||
|
) => _$PaymentMethodItemDtoImpl(
|
||||||
|
paymentMethodId: json['payment_method_id'] as String?,
|
||||||
|
paymentMethodName: json['payment_method_name'] as String?,
|
||||||
|
paymentMethodType: json['payment_method_type'] as String?,
|
||||||
|
totalAmount: json['total_amount'] as num?,
|
||||||
|
orderCount: (json['order_count'] as num?)?.toInt(),
|
||||||
|
paymentCount: (json['payment_count'] as num?)?.toInt(),
|
||||||
|
percentage: (json['percentage'] as num?)?.toDouble(),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$$PaymentMethodItemDtoImplToJson(
|
||||||
|
_$PaymentMethodItemDtoImpl instance,
|
||||||
|
) => <String, dynamic>{
|
||||||
|
'payment_method_id': instance.paymentMethodId,
|
||||||
|
'payment_method_name': instance.paymentMethodName,
|
||||||
|
'payment_method_type': instance.paymentMethodType,
|
||||||
|
'total_amount': instance.totalAmount,
|
||||||
|
'order_count': instance.orderCount,
|
||||||
|
'payment_count': instance.paymentCount,
|
||||||
|
'percentage': instance.percentage,
|
||||||
|
};
|
||||||
|
|
||||||
|
_$PaymentMethodSummaryDtoImpl _$$PaymentMethodSummaryDtoImplFromJson(
|
||||||
|
Map<String, dynamic> json,
|
||||||
|
) => _$PaymentMethodSummaryDtoImpl(
|
||||||
|
totalAmount: json['total_amount'] as num?,
|
||||||
|
totalOrders: (json['total_orders'] as num?)?.toInt(),
|
||||||
|
totalPayments: (json['total_payments'] as num?)?.toInt(),
|
||||||
|
averageOrderValue: (json['average_order_value'] as num?)?.toDouble(),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$$PaymentMethodSummaryDtoImplToJson(
|
||||||
|
_$PaymentMethodSummaryDtoImpl instance,
|
||||||
|
) => <String, dynamic>{
|
||||||
|
'total_amount': instance.totalAmount,
|
||||||
|
'total_orders': instance.totalOrders,
|
||||||
|
'total_payments': instance.totalPayments,
|
||||||
|
'average_order_value': instance.averageOrderValue,
|
||||||
|
};
|
||||||
|
|||||||
@ -154,4 +154,60 @@ class AnalyticRemoteDataProvider {
|
|||||||
return DC.error(AnalyticFailure.serverError(e));
|
return DC.error(AnalyticFailure.serverError(e));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<DC<AnalyticFailure, ProductAnalyticDto>> fetchProduct({
|
||||||
|
required String outletId,
|
||||||
|
required DateTime dateFrom,
|
||||||
|
required DateTime dateTo,
|
||||||
|
}) async {
|
||||||
|
try {
|
||||||
|
final response = await _apiClient.get(
|
||||||
|
ApiPath.productAnalytic,
|
||||||
|
params: {
|
||||||
|
'date_from': dateFrom.toServerDate,
|
||||||
|
'date_to': dateTo.toServerDate,
|
||||||
|
},
|
||||||
|
headers: getAuthorizationHeader(),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (response.data['data'] == null) {
|
||||||
|
return DC.error(AnalyticFailure.empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
final dto = ProductAnalyticDto.fromJson(response.data['data']);
|
||||||
|
|
||||||
|
return DC.data(dto);
|
||||||
|
} on ApiFailure catch (e, s) {
|
||||||
|
log('fetchProductError', name: _logName, error: e, stackTrace: s);
|
||||||
|
return DC.error(AnalyticFailure.serverError(e));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<DC<AnalyticFailure, PaymentMethodAnalyticDto>> fetchPaymentMethod({
|
||||||
|
required String outletId,
|
||||||
|
required DateTime dateFrom,
|
||||||
|
required DateTime dateTo,
|
||||||
|
}) async {
|
||||||
|
try {
|
||||||
|
final response = await _apiClient.get(
|
||||||
|
ApiPath.paymentMethodAnalytic,
|
||||||
|
params: {
|
||||||
|
'date_from': dateFrom.toServerDate,
|
||||||
|
'date_to': dateTo.toServerDate,
|
||||||
|
},
|
||||||
|
headers: getAuthorizationHeader(),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (response.data['data'] == null) {
|
||||||
|
return DC.error(AnalyticFailure.empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
final dto = PaymentMethodAnalyticDto.fromJson(response.data['data']);
|
||||||
|
|
||||||
|
return DC.data(dto);
|
||||||
|
} on ApiFailure catch (e, s) {
|
||||||
|
log('fetchPaymentMethodError', name: _logName, error: e, stackTrace: s);
|
||||||
|
return DC.error(AnalyticFailure.serverError(e));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,85 @@
|
|||||||
|
part of '../analytic_dtos.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PaymentMethodAnalyticDto with _$PaymentMethodAnalyticDto {
|
||||||
|
const PaymentMethodAnalyticDto._();
|
||||||
|
|
||||||
|
const factory PaymentMethodAnalyticDto({
|
||||||
|
@JsonKey(name: 'organization_id') String? organizationId,
|
||||||
|
@JsonKey(name: 'outlet_id') String? outletId,
|
||||||
|
@JsonKey(name: 'date_from') String? dateFrom,
|
||||||
|
@JsonKey(name: 'date_to') String? dateTo,
|
||||||
|
@JsonKey(name: 'group_by') String? groupBy,
|
||||||
|
@JsonKey(name: 'summary') PaymentMethodSummaryDto? summary,
|
||||||
|
@JsonKey(name: 'data') List<PaymentMethodItemDto>? data,
|
||||||
|
}) = _PaymentMethodAnalyticDto;
|
||||||
|
|
||||||
|
factory PaymentMethodAnalyticDto.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$PaymentMethodAnalyticDtoFromJson(json);
|
||||||
|
|
||||||
|
PaymentMethodAnalytic toDomain() {
|
||||||
|
return PaymentMethodAnalytic(
|
||||||
|
organizationId: organizationId ?? '',
|
||||||
|
outletId: outletId ?? '',
|
||||||
|
dateFrom: dateFrom ?? '',
|
||||||
|
dateTo: dateTo ?? '',
|
||||||
|
groupBy: groupBy ?? '',
|
||||||
|
summary: summary?.toDomain() ?? PaymentMethodSummary.empty(),
|
||||||
|
data: data?.map((e) => e.toDomain()).toList() ?? [],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PaymentMethodItemDto with _$PaymentMethodItemDto {
|
||||||
|
const PaymentMethodItemDto._();
|
||||||
|
|
||||||
|
const factory PaymentMethodItemDto({
|
||||||
|
@JsonKey(name: 'payment_method_id') String? paymentMethodId,
|
||||||
|
@JsonKey(name: 'payment_method_name') String? paymentMethodName,
|
||||||
|
@JsonKey(name: 'payment_method_type') String? paymentMethodType,
|
||||||
|
@JsonKey(name: 'total_amount') num? totalAmount,
|
||||||
|
@JsonKey(name: 'order_count') int? orderCount,
|
||||||
|
@JsonKey(name: 'payment_count') int? paymentCount,
|
||||||
|
@JsonKey(name: 'percentage') double? percentage,
|
||||||
|
}) = _PaymentMethodItemDto;
|
||||||
|
|
||||||
|
factory PaymentMethodItemDto.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$PaymentMethodItemDtoFromJson(json);
|
||||||
|
|
||||||
|
PaymentMethodItem toDomain() {
|
||||||
|
return PaymentMethodItem(
|
||||||
|
paymentMethodId: paymentMethodId ?? '',
|
||||||
|
paymentMethodName: paymentMethodName ?? '',
|
||||||
|
paymentMethodType: paymentMethodType ?? '',
|
||||||
|
totalAmount: totalAmount ?? 0,
|
||||||
|
orderCount: orderCount ?? 0,
|
||||||
|
paymentCount: paymentCount ?? 0,
|
||||||
|
percentage: percentage ?? 0.0,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class PaymentMethodSummaryDto with _$PaymentMethodSummaryDto {
|
||||||
|
const PaymentMethodSummaryDto._();
|
||||||
|
|
||||||
|
const factory PaymentMethodSummaryDto({
|
||||||
|
@JsonKey(name: 'total_amount') num? totalAmount,
|
||||||
|
@JsonKey(name: 'total_orders') int? totalOrders,
|
||||||
|
@JsonKey(name: 'total_payments') int? totalPayments,
|
||||||
|
@JsonKey(name: 'average_order_value') double? averageOrderValue,
|
||||||
|
}) = _PaymentMethodSummaryDto;
|
||||||
|
|
||||||
|
factory PaymentMethodSummaryDto.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$PaymentMethodSummaryDtoFromJson(json);
|
||||||
|
|
||||||
|
PaymentMethodSummary toDomain() {
|
||||||
|
return PaymentMethodSummary(
|
||||||
|
totalAmount: totalAmount ?? 0,
|
||||||
|
totalOrders: totalOrders ?? 0,
|
||||||
|
totalPayments: totalPayments ?? 0,
|
||||||
|
averageOrderValue: averageOrderValue ?? 0.0,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
55
lib/infrastructure/analytic/dto/product_analytic_dto.dart
Normal file
55
lib/infrastructure/analytic/dto/product_analytic_dto.dart
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
part of '../analytic_dtos.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class ProductAnalyticDto with _$ProductAnalyticDto {
|
||||||
|
const ProductAnalyticDto._();
|
||||||
|
|
||||||
|
const factory ProductAnalyticDto({
|
||||||
|
@JsonKey(name: 'organization_id') required String organizationId,
|
||||||
|
@JsonKey(name: 'outlet_id') required String outletId,
|
||||||
|
@JsonKey(name: 'date_from') required String dateFrom,
|
||||||
|
@JsonKey(name: 'date_to') required String dateTo,
|
||||||
|
required List<ProductAnalyticDataDto> data,
|
||||||
|
}) = _ProductAnalyticDto;
|
||||||
|
|
||||||
|
factory ProductAnalyticDto.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$ProductAnalyticDtoFromJson(json);
|
||||||
|
|
||||||
|
ProductAnalytic toDomain() => ProductAnalytic(
|
||||||
|
organizationId: organizationId,
|
||||||
|
outletId: outletId,
|
||||||
|
dateFrom: dateFrom,
|
||||||
|
dateTo: dateTo,
|
||||||
|
data: data.map((e) => e.toDomain()).toList(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class ProductAnalyticDataDto with _$ProductAnalyticDataDto {
|
||||||
|
const ProductAnalyticDataDto._();
|
||||||
|
|
||||||
|
const factory ProductAnalyticDataDto({
|
||||||
|
@JsonKey(name: 'product_id') required String productId,
|
||||||
|
@JsonKey(name: 'product_name') required String productName,
|
||||||
|
@JsonKey(name: 'category_id') required String categoryId,
|
||||||
|
@JsonKey(name: 'category_name') required String categoryName,
|
||||||
|
@JsonKey(name: 'quantity_sold') required int quantitySold,
|
||||||
|
required double revenue,
|
||||||
|
@JsonKey(name: 'average_price') required double averagePrice,
|
||||||
|
@JsonKey(name: 'order_count') required int orderCount,
|
||||||
|
}) = _ProductAnalyticDataDto;
|
||||||
|
|
||||||
|
factory ProductAnalyticDataDto.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$ProductAnalyticDataDtoFromJson(json);
|
||||||
|
|
||||||
|
ProductAnalyticData toDomain() => ProductAnalyticData(
|
||||||
|
productId: productId,
|
||||||
|
productName: productName,
|
||||||
|
categoryId: categoryId,
|
||||||
|
categoryName: categoryName,
|
||||||
|
quantitySold: quantitySold,
|
||||||
|
revenue: revenue,
|
||||||
|
averagePrice: averagePrice,
|
||||||
|
orderCount: orderCount,
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -142,4 +142,58 @@ class AnalyticRepository implements IAnalyticRepository {
|
|||||||
return left(const AnalyticFailure.unexpectedError());
|
return left(const AnalyticFailure.unexpectedError());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<Either<AnalyticFailure, ProductAnalytic>> getProduct({
|
||||||
|
required DateTime dateFrom,
|
||||||
|
required DateTime dateTo,
|
||||||
|
}) async {
|
||||||
|
try {
|
||||||
|
User currentUser = await _authLocalDataProvider.currentUser();
|
||||||
|
|
||||||
|
final result = await _dataProvider.fetchProduct(
|
||||||
|
outletId: currentUser.outletId,
|
||||||
|
dateFrom: dateFrom,
|
||||||
|
dateTo: dateTo,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (result.hasError) {
|
||||||
|
return left(result.error!);
|
||||||
|
}
|
||||||
|
|
||||||
|
final auth = result.data!.toDomain();
|
||||||
|
|
||||||
|
return right(auth);
|
||||||
|
} catch (e, s) {
|
||||||
|
log('getProductError', name: _logName, error: e, stackTrace: s);
|
||||||
|
return left(const AnalyticFailure.unexpectedError());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<Either<AnalyticFailure, PaymentMethodAnalytic>> getPaymentMethod({
|
||||||
|
required DateTime dateFrom,
|
||||||
|
required DateTime dateTo,
|
||||||
|
}) async {
|
||||||
|
try {
|
||||||
|
User currentUser = await _authLocalDataProvider.currentUser();
|
||||||
|
|
||||||
|
final result = await _dataProvider.fetchPaymentMethod(
|
||||||
|
outletId: currentUser.outletId,
|
||||||
|
dateFrom: dateFrom,
|
||||||
|
dateTo: dateTo,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (result.hasError) {
|
||||||
|
return left(result.error!);
|
||||||
|
}
|
||||||
|
|
||||||
|
final auth = result.data!.toDomain();
|
||||||
|
|
||||||
|
return right(auth);
|
||||||
|
} catch (e, s) {
|
||||||
|
log('getPaymentMethodError', name: _logName, error: e, stackTrace: s);
|
||||||
|
return left(const AnalyticFailure.unexpectedError());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,6 +15,10 @@ import 'package:apskel_owner_flutter/application/analytic/dashboard_analytic_loa
|
|||||||
as _i516;
|
as _i516;
|
||||||
import 'package:apskel_owner_flutter/application/analytic/inventory_analytic_loader/inventory_analytic_loader_bloc.dart'
|
import 'package:apskel_owner_flutter/application/analytic/inventory_analytic_loader/inventory_analytic_loader_bloc.dart'
|
||||||
as _i785;
|
as _i785;
|
||||||
|
import 'package:apskel_owner_flutter/application/analytic/payment_method_analytic_loader/payment_method_analytic_loader_bloc.dart'
|
||||||
|
as _i552;
|
||||||
|
import 'package:apskel_owner_flutter/application/analytic/product_analytic_loader/product_analytic_loader_bloc.dart'
|
||||||
|
as _i221;
|
||||||
import 'package:apskel_owner_flutter/application/analytic/profit_loss_loader/profit_loss_loader_bloc.dart'
|
import 'package:apskel_owner_flutter/application/analytic/profit_loss_loader/profit_loss_loader_bloc.dart'
|
||||||
as _i11;
|
as _i11;
|
||||||
import 'package:apskel_owner_flutter/application/analytic/sales_loader/sales_loader_bloc.dart'
|
import 'package:apskel_owner_flutter/application/analytic/sales_loader/sales_loader_bloc.dart'
|
||||||
@ -179,6 +183,14 @@ extension GetItInjectableX on _i174.GetIt {
|
|||||||
gh.factory<_i516.DashboardAnalyticLoaderBloc>(
|
gh.factory<_i516.DashboardAnalyticLoaderBloc>(
|
||||||
() => _i516.DashboardAnalyticLoaderBloc(gh<_i477.IAnalyticRepository>()),
|
() => _i516.DashboardAnalyticLoaderBloc(gh<_i477.IAnalyticRepository>()),
|
||||||
);
|
);
|
||||||
|
gh.factory<_i221.ProductAnalyticLoaderBloc>(
|
||||||
|
() => _i221.ProductAnalyticLoaderBloc(gh<_i477.IAnalyticRepository>()),
|
||||||
|
);
|
||||||
|
gh.factory<_i552.PaymentMethodAnalyticLoaderBloc>(
|
||||||
|
() => _i552.PaymentMethodAnalyticLoaderBloc(
|
||||||
|
gh<_i477.IAnalyticRepository>(),
|
||||||
|
),
|
||||||
|
);
|
||||||
gh.factory<_i775.LoginFormBloc>(
|
gh.factory<_i775.LoginFormBloc>(
|
||||||
() => _i775.LoginFormBloc(gh<_i49.IAuthRepository>()),
|
() => _i775.LoginFormBloc(gh<_i49.IAuthRepository>()),
|
||||||
);
|
);
|
||||||
|
|||||||
@ -409,7 +409,7 @@ class _ProfileHeaderState extends State<ProfileHeader>
|
|||||||
size: 16,
|
size: 16,
|
||||||
color: AppColor.textWhite.withOpacity(0.9),
|
color: AppColor.textWhite.withOpacity(0.9),
|
||||||
),
|
),
|
||||||
const SpaceHeight(6),
|
const SpaceWidth(6),
|
||||||
Text(
|
Text(
|
||||||
widget.user.role.toTitleCase,
|
widget.user.role.toTitleCase,
|
||||||
style: AppStyle.md.copyWith(
|
style: AppStyle.md.copyWith(
|
||||||
|
|||||||
@ -311,7 +311,7 @@ class ReportRoute extends _i18.PageRouteInfo<void> {
|
|||||||
static _i18.PageInfo page = _i18.PageInfo(
|
static _i18.PageInfo page = _i18.PageInfo(
|
||||||
name,
|
name,
|
||||||
builder: (data) {
|
builder: (data) {
|
||||||
return const _i13.ReportPage();
|
return _i18.WrappedRoute(child: const _i13.ReportPage());
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user