Time tracking across day boundary miscalculates #533

This commit is contained in:
Hillel Coren 2022-12-26 20:08:20 +02:00
parent 241897dbc0
commit 5035a62154
2 changed files with 27 additions and 5 deletions

View File

@ -7,10 +7,12 @@ import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart'; import 'package:built_value/serializer.dart';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:diacritic/diacritic.dart'; import 'package:diacritic/diacritic.dart';
import 'package:flutter_redux/flutter_redux.dart';
// Project imports: // Project imports:
import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/main_app.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/redux/task_status/task_status_selectors.dart'; import 'package:invoiceninja_flutter/redux/task_status/task_status_selectors.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart';
@ -106,10 +108,26 @@ abstract class TaskTime implements Built<TaskTime, TaskTimeBuilder> {
Duration get duration => (endDate ?? DateTime.now()).difference(startDate); Duration get duration => (endDate ?? DateTime.now()).difference(startDate);
List<dynamic> get asList => <dynamic>[ List<dynamic> get asList {
(startDate.millisecondsSinceEpoch / 1000).floor(), final startTime = (startDate.millisecondsSinceEpoch / 1000).floor();
endDate != null ? (endDate.millisecondsSinceEpoch / 1000).floor() : 0 var endTime =
]; endDate != null ? (endDate.millisecondsSinceEpoch / 1000).floor() : 0;
final store = StoreProvider.of<AppState>(navigatorKey.currentContext);
final company = store.state.company;
// Handle the end time being before the start time
if (!company.showTaskEndDate && endTime != 0) {
const oneDay = 24 * 60 * 60;
if (endTime < startTime) {
endTime += oneDay;
} else if (endTime - startTime > oneDay) {
endTime -= oneDay;
}
}
return <dynamic>[startTime, endTime];
}
TaskTime get stop => rebuild((b) => b..endDate = DateTime.now().toUtc()); TaskTime get stop => rebuild((b) => b..endDate = DateTime.now().toUtc());

View File

@ -126,6 +126,10 @@ class TimeEditDetailsState extends State<TimeEditDetails> {
final company = viewModel.company; final company = viewModel.company;
final showEndDate = company.showTaskEndDate; final showEndDate = company.showTaskEndDate;
// Handle the end time being before the start time
final times = _taskTime.asList;
final duration = Duration(seconds: times[1] - times[0]);
return AlertDialog( return AlertDialog(
content: SingleChildScrollView( content: SingleChildScrollView(
child: Column( child: Column(
@ -203,7 +207,7 @@ class TimeEditDetailsState extends State<TimeEditDetails> {
selectedDuration: selectedDuration:
(_taskTime.startDate == null || _taskTime.endDate == null) (_taskTime.startDate == null || _taskTime.endDate == null)
? null ? null
: _taskTime.duration, : duration,
), ),
], ],
), ),