Time tracking across day boundary miscalculates #533
This commit is contained in:
parent
241897dbc0
commit
5035a62154
|
|
@ -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());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue