Schedules
This commit is contained in:
parent
679e3ee6bb
commit
ec1274b6b5
|
|
@ -102,6 +102,7 @@ class _ScheduleEditState extends State<ScheduleEdit> {
|
||||||
return ScrollableListView(
|
return ScrollableListView(
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
FormCard(
|
FormCard(
|
||||||
|
isLast: schedule.template.isEmpty,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
DecoratedFormField(
|
DecoratedFormField(
|
||||||
keyboardType: TextInputType.text,
|
keyboardType: TextInputType.text,
|
||||||
|
|
@ -123,6 +124,15 @@ class _ScheduleEditState extends State<ScheduleEdit> {
|
||||||
child: Text(localization.lookup(entry.value)),
|
child: Text(localization.lookup(entry.value)),
|
||||||
))
|
))
|
||||||
.toList()),
|
.toList()),
|
||||||
|
DatePicker(
|
||||||
|
labelText: localization.nextRun,
|
||||||
|
onSelected: (date, _) {
|
||||||
|
viewModel.onChanged(
|
||||||
|
schedule.rebuild((b) => b..nextRun = date));
|
||||||
|
},
|
||||||
|
selectedDate: schedule.nextRun,
|
||||||
|
firstDate: DateTime.now(),
|
||||||
|
),
|
||||||
AppDropdownButton<String>(
|
AppDropdownButton<String>(
|
||||||
labelText: localization.frequency,
|
labelText: localization.frequency,
|
||||||
value: schedule.frequencyId,
|
value: schedule.frequencyId,
|
||||||
|
|
@ -140,104 +150,99 @@ class _ScheduleEditState extends State<ScheduleEdit> {
|
||||||
.toList()),
|
.toList()),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
FormCard(children: [
|
if (schedule.template.isNotEmpty) ...[
|
||||||
DatePicker(
|
FormCard(children: [
|
||||||
labelText: localization.nextSendDate,
|
AppDropdownButton<DateRange>(
|
||||||
onSelected: (date, _) {
|
labelText: localization.dateRange,
|
||||||
viewModel.onChanged(
|
blankValue: null,
|
||||||
schedule.rebuild((b) => b..nextRun = date));
|
value: parameters.dateRange.isNotEmpty
|
||||||
},
|
? DateRange.valueOf(parameters.dateRange)
|
||||||
selectedDate: schedule.nextRun,
|
: null,
|
||||||
firstDate: DateTime.now(),
|
onChanged: (dynamic value) {
|
||||||
),
|
final updated = schedule.rebuild(
|
||||||
AppDropdownButton<DateRange>(
|
(b) => b..parameters.dateRange = value.toString());
|
||||||
labelText: localization.dateRange,
|
viewModel.onChanged(updated);
|
||||||
blankValue: null,
|
},
|
||||||
value: parameters.dateRange.isNotEmpty
|
items: DateRange.values
|
||||||
? DateRange.valueOf(parameters.dateRange)
|
.map((dateRange) => DropdownMenuItem<DateRange>(
|
||||||
: null,
|
child: Text(
|
||||||
onChanged: (dynamic value) {
|
localization.lookup(dateRange.toString())),
|
||||||
final updated = schedule.rebuild(
|
value: dateRange,
|
||||||
(b) => b..parameters.dateRange = value.toString());
|
))
|
||||||
viewModel.onChanged(updated);
|
.toList(),
|
||||||
},
|
),
|
||||||
items: DateRange.values
|
AppDropdownButton<String>(
|
||||||
.map((dateRange) => DropdownMenuItem<DateRange>(
|
labelText: localization.status,
|
||||||
child: Text(
|
blankValue: null,
|
||||||
localization.lookup(dateRange.toString())),
|
value: parameters.status,
|
||||||
value: dateRange,
|
onChanged: (dynamic value) {
|
||||||
))
|
viewModel.onChanged(schedule
|
||||||
.toList(),
|
.rebuild((b) => b..parameters.status = value));
|
||||||
),
|
},
|
||||||
AppDropdownButton<String>(
|
items: [
|
||||||
labelText: localization.status,
|
kStatementStatusAll,
|
||||||
blankValue: null,
|
kStatementStatusPaid,
|
||||||
value: parameters.status,
|
kStatementStatusUnpaid,
|
||||||
onChanged: (dynamic value) {
|
]
|
||||||
viewModel.onChanged(schedule
|
.map((value) => DropdownMenuItem<String>(
|
||||||
.rebuild((b) => b..parameters.status = value));
|
child: Text(localization.lookup(value)),
|
||||||
},
|
value: value,
|
||||||
items: [
|
))
|
||||||
kStatementStatusAll,
|
.toList(),
|
||||||
kStatementStatusPaid,
|
),
|
||||||
kStatementStatusUnpaid,
|
|
||||||
]
|
|
||||||
.map((value) => DropdownMenuItem<String>(
|
|
||||||
child: Text(localization.lookup(value)),
|
|
||||||
value: value,
|
|
||||||
))
|
|
||||||
.toList(),
|
|
||||||
),
|
|
||||||
SizedBox(height: 20),
|
|
||||||
BoolDropdownButton(
|
|
||||||
label: localization.showAgingTable,
|
|
||||||
value: parameters.showAgingTable,
|
|
||||||
onChanged: (value) {
|
|
||||||
viewModel.onChanged(schedule.rebuild(
|
|
||||||
(b) => b..parameters.showAgingTable = value));
|
|
||||||
}),
|
|
||||||
BoolDropdownButton(
|
|
||||||
label: localization.showPaymentsTable,
|
|
||||||
value: parameters.showPaymentsTable,
|
|
||||||
onChanged: (value) {
|
|
||||||
viewModel.onChanged(schedule.rebuild(
|
|
||||||
(b) => b..parameters.showPaymentsTable = value));
|
|
||||||
}),
|
|
||||||
]),
|
|
||||||
FormCard(
|
|
||||||
isLast: true,
|
|
||||||
children: [
|
|
||||||
ClientPicker(
|
|
||||||
key: ValueKey('__client_picker_${_clientClearedAt}__'),
|
|
||||||
isRequired: false,
|
|
||||||
clientId: null,
|
|
||||||
clientState: state.clientState,
|
|
||||||
onSelected: (value) {
|
|
||||||
if (!parameters.clients.contains(value.id)) {
|
|
||||||
viewModel.onChanged(schedule.rebuild(
|
|
||||||
(b) => b..parameters.clients.add(value.id)));
|
|
||||||
}
|
|
||||||
setState(() {
|
|
||||||
_clientClearedAt = DateTime.now().toIso8601String();
|
|
||||||
});
|
|
||||||
}),
|
|
||||||
SizedBox(height: 20),
|
SizedBox(height: 20),
|
||||||
if (parameters.clients.isEmpty)
|
BoolDropdownButton(
|
||||||
HelpText(localization.allClients),
|
label: localization.showAgingTable,
|
||||||
for (var clientId in parameters.clients)
|
value: parameters.showAgingTable,
|
||||||
ListTile(
|
onChanged: (value) {
|
||||||
title:
|
viewModel.onChanged(schedule.rebuild(
|
||||||
Text(state.clientState.get(clientId).displayName),
|
(b) => b..parameters.showAgingTable = value));
|
||||||
trailing: IconButton(
|
}),
|
||||||
icon: Icon(Icons.clear),
|
BoolDropdownButton(
|
||||||
onPressed: () {
|
label: localization.showPaymentsTable,
|
||||||
viewModel.onChanged(schedule.rebuild(
|
value: parameters.showPaymentsTable,
|
||||||
(b) => b..parameters.clients.remove(clientId)));
|
onChanged: (value) {
|
||||||
},
|
viewModel.onChanged(schedule.rebuild(
|
||||||
|
(b) => b..parameters.showPaymentsTable = value));
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
FormCard(
|
||||||
|
isLast: true,
|
||||||
|
children: [
|
||||||
|
ClientPicker(
|
||||||
|
key:
|
||||||
|
ValueKey('__client_picker_${_clientClearedAt}__'),
|
||||||
|
isRequired: false,
|
||||||
|
clientId: null,
|
||||||
|
clientState: state.clientState,
|
||||||
|
onSelected: (value) {
|
||||||
|
if (!parameters.clients.contains(value.id)) {
|
||||||
|
viewModel.onChanged(schedule.rebuild(
|
||||||
|
(b) => b..parameters.clients.add(value.id)));
|
||||||
|
}
|
||||||
|
setState(() {
|
||||||
|
_clientClearedAt =
|
||||||
|
DateTime.now().toIso8601String();
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
SizedBox(height: 20),
|
||||||
|
if (parameters.clients.isEmpty)
|
||||||
|
HelpText(localization.allClients),
|
||||||
|
for (var clientId in parameters.clients)
|
||||||
|
ListTile(
|
||||||
|
title:
|
||||||
|
Text(state.clientState.get(clientId).displayName),
|
||||||
|
trailing: IconButton(
|
||||||
|
icon: Icon(Icons.clear),
|
||||||
|
onPressed: () {
|
||||||
|
viewModel.onChanged(schedule.rebuild((b) =>
|
||||||
|
b..parameters.clients.remove(clientId)));
|
||||||
|
},
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
],
|
||||||
],
|
)
|
||||||
)
|
],
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ mixin LocalizationsProvider on LocaleCodeAware {
|
||||||
static final Map<String, Map<String, String>> _localizedValues = {
|
static final Map<String, Map<String, String>> _localizedValues = {
|
||||||
'en': {
|
'en': {
|
||||||
// STARTER: lang key - do not remove comment
|
// STARTER: lang key - do not remove comment
|
||||||
|
'next_run': 'Next Run',
|
||||||
'all_clients': 'All Clients',
|
'all_clients': 'All Clients',
|
||||||
'show_aging_table': 'Show Aging Table',
|
'show_aging_table': 'Show Aging Table',
|
||||||
'show_payments_table': 'Show Payments Table',
|
'show_payments_table': 'Show Payments Table',
|
||||||
|
|
@ -94529,6 +94530,10 @@ String get allClients =>
|
||||||
_localizedValues[localeCode]['all_clients'] ??
|
_localizedValues[localeCode]['all_clients'] ??
|
||||||
_localizedValues['en']['all_clients'];
|
_localizedValues['en']['all_clients'];
|
||||||
|
|
||||||
|
String get nextRun =>
|
||||||
|
_localizedValues[localeCode]['next_run'] ??
|
||||||
|
_localizedValues['en']['next_run'];
|
||||||
|
|
||||||
// STARTER: lang field - do not remove comment
|
// STARTER: lang field - do not remove comment
|
||||||
|
|
||||||
String lookup(String key) {
|
String lookup(String key) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue