Payment terms

This commit is contained in:
Hillel Coren 2020-05-26 11:56:45 +03:00
parent 41e8e237a9
commit 4217e5ca49
1 changed files with 20 additions and 33 deletions

View File

@ -3,7 +3,9 @@ import 'package:flutter/services.dart';
import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/data/models/entities.dart'; import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/models/payment_term_model.dart'; import 'package:invoiceninja_flutter/data/models/payment_term_model.dart';
import 'package:invoiceninja_flutter/redux/payment_term/payment_term_selectors.dart';
import 'package:invoiceninja_flutter/ui/app/entity_dropdown.dart'; import 'package:invoiceninja_flutter/ui/app/entity_dropdown.dart';
import 'package:invoiceninja_flutter/ui/app/forms/app_dropdown_button.dart';
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart'; import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_vm.dart'; import 'package:invoiceninja_flutter/ui/client/edit/client_edit_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/completers.dart';
@ -80,6 +82,7 @@ class ClientEditSettingsState extends State<ClientEditSettings> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
final localization = AppLocalization.of(context); final localization = AppLocalization.of(context);
final viewModel = widget.viewModel; final viewModel = widget.viewModel;
final state = viewModel.state;
final client = viewModel.client; final client = viewModel.client;
return ListView( return ListView(
@ -109,41 +112,25 @@ class ClientEditSettingsState extends State<ClientEditSettings> {
onSelected: (SelectableEntity language) => viewModel.onChanged( onSelected: (SelectableEntity language) => viewModel.onChanged(
client.rebuild((b) => b..settings.languageId = language?.id)), client.rebuild((b) => b..settings.languageId = language?.id)),
), ),
PopupMenuButton<PaymentTermEntity>( AppDropdownButton<String>(
padding: EdgeInsets.zero, showBlank: true,
initialValue: null, labelText: localization.paymentTerm,
itemBuilder: (BuildContext context) => (<int>[] items: memoizedDropdownPaymentTermList(
..addAll(kPaymentTerms) state.paymentTermState.map, state.paymentTermState.list)
..addAll(viewModel.company.settings.customPaymentTerms .map((paymentTermId) {
.map((paymentTerm) => paymentTerm.numDays)) final paymentTerm = state.paymentTermState.map[paymentTermId];
..sort((a, b) => a.abs() - b.abs())) return DropdownMenuItem<String>(
.map((int numDays) => child: Text(paymentTerm.name),
PaymentTermEntity().rebuild((b) => b..numDays = numDays)) value: paymentTerm.numDays.toString(),
.map((paymentTerm) => PopupMenuItem<PaymentTermEntity>( );
value: paymentTerm, }).toList(),
child: value: '${client.settings.defaultPaymentTerms}',
Text(paymentTerm.getPaymentTerm(localization.net)), onChanged: (dynamic numDays) {
)) print('## onChanged: $numDays');
.toList(),
onSelected: (paymentTerm) {
viewModel.onChanged(client.rebuild((b) => b viewModel.onChanged(client.rebuild((b) => b
..settings.defaultPaymentTerms = paymentTerm == null ..settings.defaultPaymentTerms =
? null numDays == null ? null : '$numDays'));
: paymentTerm.numDays.toString()));
_paymentTermsController.text =
paymentTerm.getPaymentTerm(localization.net);
}, },
child: InkWell(
child: IgnorePointer(
child: TextFormField(
controller: _paymentTermsController,
decoration: InputDecoration(
labelText: localization.paymentTerms,
suffixIcon: const Icon(Icons.arrow_drop_down),
),
),
),
),
), ),
DecoratedFormField( DecoratedFormField(
controller: _taskRateController, controller: _taskRateController,