Transaction rules

This commit is contained in:
Hillel Coren 2022-11-22 20:52:24 +02:00
parent f38b2583e1
commit 6e11c069cd
7 changed files with 42 additions and 22 deletions

View File

@ -220,9 +220,9 @@ abstract class TransactionRuleCriteriaEntity
@BuiltValueField(wireName: 'search_key') @BuiltValueField(wireName: 'search_key')
String get searchKey; String get searchKey;
@nullable
String get operator; String get operator;
@nullable
String get value; String get value;
// ignore: unused_element // ignore: unused_element

View File

@ -293,15 +293,15 @@ class _$TransactionRuleCriteriaEntitySerializer
'search_key', 'search_key',
serializers.serialize(object.searchKey, serializers.serialize(object.searchKey,
specifiedType: const FullType(String)), specifiedType: const FullType(String)),
'value', 'operator',
serializers.serialize(object.value, serializers.serialize(object.operator,
specifiedType: const FullType(String)), specifiedType: const FullType(String)),
]; ];
Object value; Object value;
value = object.operator; value = object.value;
if (value != null) { if (value != null) {
result result
..add('operator') ..add('value')
..add(serializers.serialize(value, ..add(serializers.serialize(value,
specifiedType: const FullType(String))); specifiedType: const FullType(String)));
} }
@ -861,7 +861,7 @@ class _$TransactionRuleCriteriaEntity extends TransactionRuleCriteriaEntity {
BuiltValueNullFieldError.checkNotNull( BuiltValueNullFieldError.checkNotNull(
searchKey, 'TransactionRuleCriteriaEntity', 'searchKey'); searchKey, 'TransactionRuleCriteriaEntity', 'searchKey');
BuiltValueNullFieldError.checkNotNull( BuiltValueNullFieldError.checkNotNull(
value, 'TransactionRuleCriteriaEntity', 'value'); operator, 'TransactionRuleCriteriaEntity', 'operator');
} }
@override @override
@ -947,9 +947,9 @@ class TransactionRuleCriteriaEntityBuilder
new _$TransactionRuleCriteriaEntity._( new _$TransactionRuleCriteriaEntity._(
searchKey: BuiltValueNullFieldError.checkNotNull( searchKey: BuiltValueNullFieldError.checkNotNull(
searchKey, 'TransactionRuleCriteriaEntity', 'searchKey'), searchKey, 'TransactionRuleCriteriaEntity', 'searchKey'),
operator: operator, operator: BuiltValueNullFieldError.checkNotNull(
value: BuiltValueNullFieldError.checkNotNull( operator, 'TransactionRuleCriteriaEntity', 'operator'),
value, 'TransactionRuleCriteriaEntity', 'value')); value: value);
replace(_$result); replace(_$result);
return _$result; return _$result;
} }

View File

@ -182,7 +182,7 @@ class _TransactionRuleEditState extends State<TransactionRuleEdit> {
child: Text(localization.lookup(rule.operator)), child: Text(localization.lookup(rule.operator)),
), ),
Expanded( Expanded(
child: Text(rule.value), child: Text(rule.value ?? ''),
), ),
SizedBox( SizedBox(
width: 100, width: 100,
@ -322,7 +322,9 @@ class __RuleCriteriaState extends State<_RuleCriteria> {
void onDonePressed() { void onDonePressed() {
if (_criteria.searchKey.isEmpty || if (_criteria.searchKey.isEmpty ||
_criteria.operator.isEmpty || _criteria.operator.isEmpty ||
_criteria.value.isEmpty) { (_criteria.value.isEmpty &&
_criteria.operator !=
TransactionRuleCriteriaEntity.STRING_OPERATOR_IS_EMPTY)) {
return; return;
} }
@ -422,6 +424,8 @@ class __RuleCriteriaState extends State<_RuleCriteria> {
), ),
], ],
), ),
if (_criteria.operator !=
TransactionRuleCriteriaEntity.STRING_OPERATOR_IS_EMPTY)
DecoratedFormField( DecoratedFormField(
label: localization.value, label: localization.value,
initialValue: _criteria.value, initialValue: _criteria.value,

View File

@ -26,6 +26,7 @@ class _TransactionRuleViewState extends State<TransactionRuleView> {
return ViewScaffold( return ViewScaffold(
isFilter: widget.isFilter, isFilter: widget.isFilter,
entity: transactionRule, entity: transactionRule,
onBackPressed: () => viewModel.onBackPressed(),
body: ScrollableListView( body: ScrollableListView(
children: <Widget>[], children: <Widget>[],
), ),

View File

@ -2,6 +2,8 @@ import 'dart:async';
import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/ui/transaction_rule/transaction_rule_screen.dart';
import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
@ -47,6 +49,7 @@ class TransactionRuleViewVM {
@required this.isSaving, @required this.isSaving,
@required this.isLoading, @required this.isLoading,
@required this.isDirty, @required this.isDirty,
@required this.onBackPressed,
}); });
factory TransactionRuleViewVM.fromStore(Store<AppState> store) { factory TransactionRuleViewVM.fromStore(Store<AppState> store) {
@ -71,6 +74,9 @@ class TransactionRuleViewVM {
isDirty: transactionRule.isNew, isDirty: transactionRule.isNew,
transactionRule: transactionRule, transactionRule: transactionRule,
onRefreshed: (context) => _handleRefresh(context), onRefreshed: (context) => _handleRefresh(context),
onBackPressed: () {
store.dispatch(UpdateCurrentRoute(TransactionRuleScreen.route));
},
onEntityAction: (BuildContext context, EntityAction action) => onEntityAction: (BuildContext context, EntityAction action) =>
handleEntitiesActions([transactionRule], action, autoPop: true), handleEntitiesActions([transactionRule], action, autoPop: true),
); );
@ -80,6 +86,7 @@ class TransactionRuleViewVM {
final TransactionRuleEntity transactionRule; final TransactionRuleEntity transactionRule;
final CompanyEntity company; final CompanyEntity company;
final Function(BuildContext, EntityAction) onEntityAction; final Function(BuildContext, EntityAction) onEntityAction;
final Function onBackPressed;
final Function(BuildContext) onRefreshed; final Function(BuildContext) onRefreshed;
final bool isSaving; final bool isSaving;
final bool isLoading; final bool isLoading;

View File

@ -27,6 +27,7 @@ class _StubViewState extends State<StubView> {
return ViewScaffold( return ViewScaffold(
isFilter: widget.isFilter, isFilter: widget.isFilter,
entity: stub, entity: stub,
onBackPressed: () => viewModel.onBackPressed(),
body: ScrollableListView( body: ScrollableListView(
children: <Widget>[ children: <Widget>[
], ],

View File

@ -4,6 +4,8 @@ import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/ui/stub/stub_screen.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/redux/stub/stub_actions.dart'; import 'package:invoiceninja_flutter/redux/stub/stub_actions.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
@ -42,6 +44,7 @@ class StubViewVM {
@required this.isSaving, @required this.isSaving,
@required this.isLoading, @required this.isLoading,
@required this.isDirty, @required this.isDirty,
@required this.onBackPressed,
}); });
factory StubViewVM.fromStore(Store<AppState> store) { factory StubViewVM.fromStore(Store<AppState> store) {
@ -64,6 +67,9 @@ class StubViewVM {
isDirty: stub.isNew, isDirty: stub.isNew,
stub: stub, stub: stub,
onRefreshed: (context) => _handleRefresh(context), onRefreshed: (context) => _handleRefresh(context),
onBackPressed: () {
store.dispatch(UpdateCurrentRoute(StubScreen.route));
},
onEntityAction: (BuildContext context, EntityAction action) => onEntityAction: (BuildContext context, EntityAction action) =>
handleEntitiesActions([stub], action, autoPop: true), handleEntitiesActions([stub], action, autoPop: true),
); );
@ -74,6 +80,7 @@ class StubViewVM {
final CompanyEntity company; final CompanyEntity company;
final Function(BuildContext, EntityAction) onEntityAction; final Function(BuildContext, EntityAction) onEntityAction;
final Function(BuildContext) onRefreshed; final Function(BuildContext) onRefreshed;
final Function onBackPressed;
final bool isSaving; final bool isSaving;
final bool isLoading; final bool isLoading;
final bool isDirty; final bool isDirty;