Reports
This commit is contained in:
parent
a5feba40c6
commit
fca0ea24db
|
|
@ -21,6 +21,7 @@ import 'package:invoiceninja_flutter/redux/static/static_state.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/auth/auth_state.dart';
|
import 'package:invoiceninja_flutter/redux/auth/auth_state.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/company/company_state.dart';
|
import 'package:invoiceninja_flutter/redux/company/company_state.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/dashboard/dashboard_state.dart';
|
import 'package:invoiceninja_flutter/redux/dashboard/dashboard_state.dart';
|
||||||
|
import 'package:invoiceninja_flutter/redux/reports/reports_state.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart';
|
import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/product/product_state.dart';
|
import 'package:invoiceninja_flutter/redux/product/product_state.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/client/client_state.dart';
|
import 'package:invoiceninja_flutter/redux/client/client_state.dart';
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:invoiceninja_flutter/data/models/dashboard_model.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
|
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
|
||||||
|
|
||||||
class ViewReports extends AbstractNavigatorAction implements PersistUI {
|
class ViewReports extends AbstractNavigatorAction implements PersistUI {
|
||||||
|
|
@ -11,3 +12,19 @@ class ViewReports extends AbstractNavigatorAction implements PersistUI {
|
||||||
final bool force;
|
final bool force;
|
||||||
final String report;
|
final String report;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class UpdateReportSettings implements PersistUI {
|
||||||
|
UpdateReportSettings({
|
||||||
|
this.report,
|
||||||
|
this.dateRange,
|
||||||
|
this.customStartDate,
|
||||||
|
this.customEndDate,
|
||||||
|
this.currencyId,
|
||||||
|
});
|
||||||
|
|
||||||
|
final String report;
|
||||||
|
final DateRange dateRange;
|
||||||
|
final String customStartDate;
|
||||||
|
final String customEndDate;
|
||||||
|
final String currencyId;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
import 'package:invoiceninja_flutter/redux/company/company_actions.dart';
|
||||||
|
import 'package:invoiceninja_flutter/redux/reports/reports_actions.dart';
|
||||||
|
import 'package:invoiceninja_flutter/redux/reports/reports_state.dart';
|
||||||
|
|
||||||
|
ReportsUIState reportsUIReducer(ReportsUIState state, dynamic action) {
|
||||||
|
if (action is UpdateReportSettings) {
|
||||||
|
return state.rebuild((b) => b
|
||||||
|
..report = action.report ?? state.report
|
||||||
|
..dateRange = action.dateRange ?? state.dateRange
|
||||||
|
..customStartDate = action.customStartDate ?? state.customStartDate
|
||||||
|
..customEndDate = action.customEndDate ?? state.customEndDate
|
||||||
|
..currencyId = action.currencyId ?? state.currencyId);
|
||||||
|
} else if (action is SelectCompany) {
|
||||||
|
//return state.rebuild((b) => b..currencyId = action.company.jcurrencyId);
|
||||||
|
// TODO re-enable
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
@ -10,6 +10,7 @@ abstract class ReportsUIState
|
||||||
implements Built<ReportsUIState, ReportsUIStateBuilder> {
|
implements Built<ReportsUIState, ReportsUIStateBuilder> {
|
||||||
factory ReportsUIState() {
|
factory ReportsUIState() {
|
||||||
return _$ReportsUIState._(
|
return _$ReportsUIState._(
|
||||||
|
report: kReportActivity,
|
||||||
dateRange: DateRange.last30Days,
|
dateRange: DateRange.last30Days,
|
||||||
customStartDate: '',
|
customStartDate: '',
|
||||||
customEndDate: convertDateTimeToSqlDate(),
|
customEndDate: convertDateTimeToSqlDate(),
|
||||||
|
|
@ -19,6 +20,8 @@ abstract class ReportsUIState
|
||||||
|
|
||||||
ReportsUIState._();
|
ReportsUIState._();
|
||||||
|
|
||||||
|
String get report;
|
||||||
|
|
||||||
DateRange get dateRange;
|
DateRange get dateRange;
|
||||||
|
|
||||||
String get customStartDate;
|
String get customStartDate;
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,9 @@ class _$ReportsUIStateSerializer
|
||||||
Iterable<Object> serialize(Serializers serializers, ReportsUIState object,
|
Iterable<Object> serialize(Serializers serializers, ReportsUIState object,
|
||||||
{FullType specifiedType = FullType.unspecified}) {
|
{FullType specifiedType = FullType.unspecified}) {
|
||||||
final result = <Object>[
|
final result = <Object>[
|
||||||
|
'report',
|
||||||
|
serializers.serialize(object.report,
|
||||||
|
specifiedType: const FullType(String)),
|
||||||
'dateRange',
|
'dateRange',
|
||||||
serializers.serialize(object.dateRange,
|
serializers.serialize(object.dateRange,
|
||||||
specifiedType: const FullType(DateRange)),
|
specifiedType: const FullType(DateRange)),
|
||||||
|
|
@ -49,6 +52,10 @@ class _$ReportsUIStateSerializer
|
||||||
iterator.moveNext();
|
iterator.moveNext();
|
||||||
final dynamic value = iterator.current;
|
final dynamic value = iterator.current;
|
||||||
switch (key) {
|
switch (key) {
|
||||||
|
case 'report':
|
||||||
|
result.report = serializers.deserialize(value,
|
||||||
|
specifiedType: const FullType(String)) as String;
|
||||||
|
break;
|
||||||
case 'dateRange':
|
case 'dateRange':
|
||||||
result.dateRange = serializers.deserialize(value,
|
result.dateRange = serializers.deserialize(value,
|
||||||
specifiedType: const FullType(DateRange)) as DateRange;
|
specifiedType: const FullType(DateRange)) as DateRange;
|
||||||
|
|
@ -73,6 +80,8 @@ class _$ReportsUIStateSerializer
|
||||||
}
|
}
|
||||||
|
|
||||||
class _$ReportsUIState extends ReportsUIState {
|
class _$ReportsUIState extends ReportsUIState {
|
||||||
|
@override
|
||||||
|
final String report;
|
||||||
@override
|
@override
|
||||||
final DateRange dateRange;
|
final DateRange dateRange;
|
||||||
@override
|
@override
|
||||||
|
|
@ -86,11 +95,15 @@ class _$ReportsUIState extends ReportsUIState {
|
||||||
(new ReportsUIStateBuilder()..update(updates)).build();
|
(new ReportsUIStateBuilder()..update(updates)).build();
|
||||||
|
|
||||||
_$ReportsUIState._(
|
_$ReportsUIState._(
|
||||||
{this.dateRange,
|
{this.report,
|
||||||
|
this.dateRange,
|
||||||
this.customStartDate,
|
this.customStartDate,
|
||||||
this.customEndDate,
|
this.customEndDate,
|
||||||
this.currencyId})
|
this.currencyId})
|
||||||
: super._() {
|
: super._() {
|
||||||
|
if (report == null) {
|
||||||
|
throw new BuiltValueNullFieldError('ReportsUIState', 'report');
|
||||||
|
}
|
||||||
if (dateRange == null) {
|
if (dateRange == null) {
|
||||||
throw new BuiltValueNullFieldError('ReportsUIState', 'dateRange');
|
throw new BuiltValueNullFieldError('ReportsUIState', 'dateRange');
|
||||||
}
|
}
|
||||||
|
|
@ -117,6 +130,7 @@ class _$ReportsUIState extends ReportsUIState {
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
if (identical(other, this)) return true;
|
if (identical(other, this)) return true;
|
||||||
return other is ReportsUIState &&
|
return other is ReportsUIState &&
|
||||||
|
report == other.report &&
|
||||||
dateRange == other.dateRange &&
|
dateRange == other.dateRange &&
|
||||||
customStartDate == other.customStartDate &&
|
customStartDate == other.customStartDate &&
|
||||||
customEndDate == other.customEndDate &&
|
customEndDate == other.customEndDate &&
|
||||||
|
|
@ -126,7 +140,9 @@ class _$ReportsUIState extends ReportsUIState {
|
||||||
@override
|
@override
|
||||||
int get hashCode {
|
int get hashCode {
|
||||||
return $jf($jc(
|
return $jf($jc(
|
||||||
$jc($jc($jc(0, dateRange.hashCode), customStartDate.hashCode),
|
$jc(
|
||||||
|
$jc($jc($jc(0, report.hashCode), dateRange.hashCode),
|
||||||
|
customStartDate.hashCode),
|
||||||
customEndDate.hashCode),
|
customEndDate.hashCode),
|
||||||
currencyId.hashCode));
|
currencyId.hashCode));
|
||||||
}
|
}
|
||||||
|
|
@ -134,6 +150,7 @@ class _$ReportsUIState extends ReportsUIState {
|
||||||
@override
|
@override
|
||||||
String toString() {
|
String toString() {
|
||||||
return (newBuiltValueToStringHelper('ReportsUIState')
|
return (newBuiltValueToStringHelper('ReportsUIState')
|
||||||
|
..add('report', report)
|
||||||
..add('dateRange', dateRange)
|
..add('dateRange', dateRange)
|
||||||
..add('customStartDate', customStartDate)
|
..add('customStartDate', customStartDate)
|
||||||
..add('customEndDate', customEndDate)
|
..add('customEndDate', customEndDate)
|
||||||
|
|
@ -146,6 +163,10 @@ class ReportsUIStateBuilder
|
||||||
implements Builder<ReportsUIState, ReportsUIStateBuilder> {
|
implements Builder<ReportsUIState, ReportsUIStateBuilder> {
|
||||||
_$ReportsUIState _$v;
|
_$ReportsUIState _$v;
|
||||||
|
|
||||||
|
String _report;
|
||||||
|
String get report => _$this._report;
|
||||||
|
set report(String report) => _$this._report = report;
|
||||||
|
|
||||||
DateRange _dateRange;
|
DateRange _dateRange;
|
||||||
DateRange get dateRange => _$this._dateRange;
|
DateRange get dateRange => _$this._dateRange;
|
||||||
set dateRange(DateRange dateRange) => _$this._dateRange = dateRange;
|
set dateRange(DateRange dateRange) => _$this._dateRange = dateRange;
|
||||||
|
|
@ -168,6 +189,7 @@ class ReportsUIStateBuilder
|
||||||
|
|
||||||
ReportsUIStateBuilder get _$this {
|
ReportsUIStateBuilder get _$this {
|
||||||
if (_$v != null) {
|
if (_$v != null) {
|
||||||
|
_report = _$v.report;
|
||||||
_dateRange = _$v.dateRange;
|
_dateRange = _$v.dateRange;
|
||||||
_customStartDate = _$v.customStartDate;
|
_customStartDate = _$v.customStartDate;
|
||||||
_customEndDate = _$v.customEndDate;
|
_customEndDate = _$v.customEndDate;
|
||||||
|
|
@ -194,6 +216,7 @@ class ReportsUIStateBuilder
|
||||||
_$ReportsUIState build() {
|
_$ReportsUIState build() {
|
||||||
final _$result = _$v ??
|
final _$result = _$v ??
|
||||||
new _$ReportsUIState._(
|
new _$ReportsUIState._(
|
||||||
|
report: report,
|
||||||
dateRange: dateRange,
|
dateRange: dateRange,
|
||||||
customStartDate: customStartDate,
|
customStartDate: customStartDate,
|
||||||
customEndDate: customEndDate,
|
customEndDate: customEndDate,
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import 'package:invoiceninja_flutter/redux/company/company_state.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/dashboard/dashboard_actions.dart';
|
import 'package:invoiceninja_flutter/redux/dashboard/dashboard_actions.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/dashboard/dashboard_reducer.dart';
|
import 'package:invoiceninja_flutter/redux/dashboard/dashboard_reducer.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/group/group_actions.dart';
|
import 'package:invoiceninja_flutter/redux/group/group_actions.dart';
|
||||||
|
import 'package:invoiceninja_flutter/redux/reports/reports_reducer.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart';
|
import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
|
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/ui/ui_state.dart';
|
import 'package:invoiceninja_flutter/redux/ui/ui_state.dart';
|
||||||
|
|
@ -47,6 +48,7 @@ UIState uiReducer(UIState state, dynamic action) {
|
||||||
..invoiceUIState.replace(invoiceUIReducer(state.invoiceUIState, action))
|
..invoiceUIState.replace(invoiceUIReducer(state.invoiceUIState, action))
|
||||||
..dashboardUIState
|
..dashboardUIState
|
||||||
.replace(dashboardUIReducer(state.dashboardUIState, action))
|
.replace(dashboardUIReducer(state.dashboardUIState, action))
|
||||||
|
..reportsUIState.replace(reportsUIReducer(state.reportsUIState, action))
|
||||||
// STARTER: reducer - do not remove comment
|
// STARTER: reducer - do not remove comment
|
||||||
..userUIState.replace(userUIReducer(state.userUIState, action))
|
..userUIState.replace(userUIReducer(state.userUIState, action))
|
||||||
..taxRateUIState.replace(taxRateUIReducer(state.taxRateUIState, action))
|
..taxRateUIState.replace(taxRateUIReducer(state.taxRateUIState, action))
|
||||||
|
|
|
||||||
|
|
@ -53,8 +53,9 @@ class ReportsScreen extends StatelessWidget {
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
AppDropdownButton(
|
AppDropdownButton(
|
||||||
labelText: localization.report,
|
labelText: localization.report,
|
||||||
value: null,
|
value: state.uiState.reportsUIState.report,
|
||||||
onChanged: (dynamic value) => null,
|
onChanged: (dynamic value) =>
|
||||||
|
viewModel.onSettingsChanged(value),
|
||||||
items: [
|
items: [
|
||||||
kReportActivity,
|
kReportActivity,
|
||||||
kReportAging,
|
kReportAging,
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:flutter_redux/flutter_redux.dart';
|
import 'package:flutter_redux/flutter_redux.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
||||||
|
import 'package:invoiceninja_flutter/redux/reports/reports_actions.dart';
|
||||||
|
import 'package:invoiceninja_flutter/redux/reports/reports_state.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/reports/reports_screen.dart';
|
import 'package:invoiceninja_flutter/ui/reports/reports_screen.dart';
|
||||||
import 'package:redux/redux.dart';
|
import 'package:redux/redux.dart';
|
||||||
|
|
||||||
|
|
@ -25,14 +27,24 @@ class ReportsScreenBuilder extends StatelessWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class ReportsScreenVM {
|
class ReportsScreenVM {
|
||||||
ReportsScreenVM({@required this.state});
|
ReportsScreenVM({
|
||||||
|
@required this.state,
|
||||||
|
@required this.onSettingsChanged,
|
||||||
|
});
|
||||||
|
|
||||||
final AppState state;
|
final AppState state;
|
||||||
|
final Function(String report) onSettingsChanged;
|
||||||
|
|
||||||
static ReportsScreenVM fromStore(Store<AppState> store) {
|
static ReportsScreenVM fromStore(Store<AppState> store) {
|
||||||
final state = store.state;
|
final state = store.state;
|
||||||
|
|
||||||
return ReportsScreenVM(
|
return ReportsScreenVM(
|
||||||
state: state,
|
state: state,
|
||||||
|
onSettingsChanged: (String report) {
|
||||||
|
store.dispatch(UpdateReportSettings(
|
||||||
|
report: report,
|
||||||
|
));
|
||||||
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue