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