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')
String get searchKey;
@nullable
String get operator;
@nullable
String get value;
// ignore: unused_element

View File

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

View File

@ -182,7 +182,7 @@ class _TransactionRuleEditState extends State<TransactionRuleEdit> {
child: Text(localization.lookup(rule.operator)),
),
Expanded(
child: Text(rule.value),
child: Text(rule.value ?? ''),
),
SizedBox(
width: 100,
@ -322,7 +322,9 @@ class __RuleCriteriaState extends State<_RuleCriteria> {
void onDonePressed() {
if (_criteria.searchKey.isEmpty ||
_criteria.operator.isEmpty ||
_criteria.value.isEmpty) {
(_criteria.value.isEmpty &&
_criteria.operator !=
TransactionRuleCriteriaEntity.STRING_OPERATOR_IS_EMPTY)) {
return;
}
@ -422,17 +424,19 @@ class __RuleCriteriaState extends State<_RuleCriteria> {
),
],
),
DecoratedFormField(
label: localization.value,
initialValue: _criteria.value,
keyboardType: TextInputType.text,
onChanged: (value) {
setState(() {
_criteria = _criteria.rebuild((b) => b..value = value);
});
},
onSavePressed: (context) => onDonePressed(),
)
if (_criteria.operator !=
TransactionRuleCriteriaEntity.STRING_OPERATOR_IS_EMPTY)
DecoratedFormField(
label: localization.value,
initialValue: _criteria.value,
keyboardType: TextInputType.text,
onChanged: (value) {
setState(() {
_criteria = _criteria.rebuild((b) => b..value = value);
});
},
onSavePressed: (context) => onDonePressed(),
)
],
),
actions: [

View File

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

View File

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

View File

@ -27,6 +27,7 @@ class _StubViewState extends State<StubView> {
return ViewScaffold(
isFilter: widget.isFilter,
entity: stub,
onBackPressed: () => viewModel.onBackPressed(),
body: ScrollableListView(
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/localization.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:invoiceninja_flutter/redux/stub/stub_actions.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
@ -42,6 +44,7 @@ class StubViewVM {
@required this.isSaving,
@required this.isLoading,
@required this.isDirty,
@required this.onBackPressed,
});
factory StubViewVM.fromStore(Store<AppState> store) {
@ -64,6 +67,9 @@ class StubViewVM {
isDirty: stub.isNew,
stub: stub,
onRefreshed: (context) => _handleRefresh(context),
onBackPressed: () {
store.dispatch(UpdateCurrentRoute(StubScreen.route));
},
onEntityAction: (BuildContext context, EntityAction action) =>
handleEntitiesActions([stub], action, autoPop: true),
);
@ -74,6 +80,7 @@ class StubViewVM {
final CompanyEntity company;
final Function(BuildContext, EntityAction) onEntityAction;
final Function(BuildContext) onRefreshed;
final Function onBackPressed;
final bool isSaving;
final bool isLoading;
final bool isDirty;