initial commit
This commit is contained in:
@@ -63,14 +63,15 @@ class BookingApi {
|
||||
addPair('come4', 'leave4');
|
||||
addPair('come5', 'leave5');
|
||||
|
||||
final absence =
|
||||
(row['code']?.toString().trim().isEmpty ?? true) ? null : row['code'].toString();
|
||||
final code = (row['code']?.toString().trim().isEmpty ?? true)
|
||||
? null
|
||||
: row['code'].toString().trim();
|
||||
|
||||
out.add(WorkDay(
|
||||
date: d,
|
||||
intervals: intervals,
|
||||
targetMinutes: target,
|
||||
absenceType: absence,
|
||||
code: code,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart' as http;
|
||||
|
||||
/// Lädt die tägliche Sollzeit (HH:MM:SS pro Wochentag) aus der API.
|
||||
/// Gibt eine Map<int,int> zurück: key = DateTime.weekday (1..7), value = Minuten.
|
||||
class DailyWorkingApi {
|
||||
final String host;
|
||||
final String path;
|
||||
final http.Client client;
|
||||
|
||||
const DailyWorkingApi({
|
||||
required this.client,
|
||||
this.host = 'api.windesign.at',
|
||||
this.path = '/workinghours.php',
|
||||
});
|
||||
|
||||
Future<Map<int, int>> getDailyMinutes() async {
|
||||
final uri = Uri.https(host, path, {
|
||||
'module': 'dailyworking',
|
||||
'function': 'getList',
|
||||
});
|
||||
|
||||
final res = await client
|
||||
.get(uri, headers: {'Accept': 'application/json'})
|
||||
.timeout(const Duration(seconds: 15));
|
||||
|
||||
if (res.statusCode != 200) {
|
||||
throw Exception('HTTP ${res.statusCode}: ${res.body}');
|
||||
}
|
||||
|
||||
final map = jsonDecode(res.body) as Map<String, dynamic>;
|
||||
final list = (map['entries'] as List?) ?? const [];
|
||||
if (list.isEmpty) return _defaultPlan();
|
||||
|
||||
final row = (list.first as Map).cast<String, dynamic>();
|
||||
|
||||
int parseHMS(String? s) {
|
||||
if (s == null) return 0;
|
||||
final parts = s.split(':');
|
||||
if (parts.length != 3) return 0;
|
||||
final h = int.tryParse(parts[0]) ?? 0;
|
||||
final m = int.tryParse(parts[1]) ?? 0;
|
||||
return h * 60 + m; // Sekunden ignoriert
|
||||
}
|
||||
|
||||
return {
|
||||
DateTime.monday: parseHMS(row['monday'] as String?),
|
||||
DateTime.tuesday: parseHMS(row['tuesday'] as String?),
|
||||
DateTime.wednesday: parseHMS(row['wednesday'] as String?),
|
||||
DateTime.thursday: parseHMS(row['thursday'] as String?),
|
||||
DateTime.friday: parseHMS(row['friday'] as String?),
|
||||
DateTime.saturday: parseHMS(row['saturday'] as String?),
|
||||
DateTime.sunday: parseHMS(row['sunday'] as String?),
|
||||
};
|
||||
}
|
||||
|
||||
Map<int, int> _defaultPlan() => {
|
||||
DateTime.monday: 8 * 60,
|
||||
DateTime.tuesday: 8 * 60,
|
||||
DateTime.wednesday: 8 * 60,
|
||||
DateTime.thursday: 8 * 60,
|
||||
DateTime.friday: 8 * 60,
|
||||
DateTime.saturday: 0,
|
||||
DateTime.sunday: 0,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user