time_progress_tracker/lib/models/time_progress.dart
Andreas Fahrecker 763cf9d627 Created DatePickerBtn and Started Using it in ProgressCreationScreen
Signed-off-by: Andreas Fahrecker <AndreasFahrecker@gmail.com>
2021-02-11 17:05:23 +01:00

96 lines
2.5 KiB
Dart

import 'package:meta/meta.dart';
import 'package:time_progress_tracker/models/app_exceptions.dart';
import 'package:time_progress_tracker/persistence/time_progress_entity.dart';
import 'package:time_progress_tracker/uuid.dart';
@immutable
class TimeProgress {
final String id;
final String name;
final DateTime startTime;
final DateTime endTime;
TimeProgress(this.name, this.startTime, this.endTime, {String id})
: id = id ?? Uuid().generateV4() {
if (this.name == null || this.name == "")
throw new TimeProgressInvalidNameException(this.name);
if (!this.startTime.isBefore(this.endTime))
throw new TimeProgressStartTimeIsNotBeforeEndTimeException(
startTime, endTime);
}
factory TimeProgress.initialDefault() {
int thisYear = DateTime.now().year;
return TimeProgress(
"Initial Name", DateTime(thisYear - 1), DateTime(thisYear + 1));
}
TimeProgress copyWith(
{String id, String name, DateTime startTime, DateTime endTime}) {
return TimeProgress(
name ?? this.name,
startTime ?? this.startTime,
endTime ?? this.endTime,
id: id ?? this.id,
);
}
int daysBehind() {
return DateTime.now().difference(startTime).inDays;
}
int daysLeft() {
return endTime.difference(DateTime.now()).inDays;
}
int allDays() {
return endTime.difference(startTime).inDays;
}
double percentDone() {
return this.daysBehind() / (this.allDays() / 100) / 100;
}
bool hasStarted() {
return DateTime.now().millisecondsSinceEpoch >
startTime.millisecondsSinceEpoch;
}
bool hasEnded() {
return DateTime.now().millisecondsSinceEpoch >
endTime.millisecondsSinceEpoch;
}
@override
int get hashCode =>
id.hashCode ^ name.hashCode ^ startTime.hashCode ^ endTime.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is TimeProgress &&
runtimeType == other.runtimeType &&
id == other.id &&
name == other.name &&
startTime == other.startTime &&
endTime == other.endTime;
@override
String toString() {
return "TimeProgress{id: $id, name: $name, startTime: $startTime, endTime: $endTime}";
}
TimeProgressEntity toEntity() {
return TimeProgressEntity(id, name, startTime, endTime);
}
static TimeProgress fromEntity(TimeProgressEntity entity) {
return TimeProgress(
entity.name,
entity.startTime,
entity.endTime,
id: entity.id ?? Uuid().generateV4(),
);
}
}