Schedules

This commit is contained in:
Hillel Coren 2023-02-16 14:50:07 +02:00
parent 679e3ee6bb
commit ec1274b6b5
2 changed files with 106 additions and 96 deletions

View File

@ -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)));
},
),
), ),
), ],
], )
) ],
], ],
); );
}, },

View File

@ -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) {