|
|
@@ -1,7 +1,7 @@
|
|
|
import 'dart:convert';
|
|
|
|
|
|
-import 'package:icalserver/data.dart';
|
|
|
import 'package:icalserver/icalendar.dart';
|
|
|
+import 'package:jiffy/jiffy.dart';
|
|
|
import 'package:supabase/supabase.dart';
|
|
|
import 'package:shelf/shelf.dart';
|
|
|
|
|
|
@@ -34,19 +34,17 @@ class CalendarHandler {
|
|
|
|
|
|
final supabase = getSupabaseClient(request);
|
|
|
|
|
|
- //get licence_csv table into variable
|
|
|
- final licences = (await supabase.from('licences_csv').select());
|
|
|
//print(licencesCsv);
|
|
|
|
|
|
// Execute the query
|
|
|
final rosterlist =
|
|
|
- await supabase.rpc('get_crew_roster', params: {'_tlc': username});
|
|
|
+ await supabase.rpc('get_roster_ical', params: {'__tlc': username});
|
|
|
|
|
|
// Handle the response
|
|
|
final requester =
|
|
|
- licences.firstWhere((e) => e['tlc'] == username, orElse: () => {});
|
|
|
+ (await supabase.from('licences').select().eq('tlc', username));
|
|
|
print(
|
|
|
- 'TLC: $username ... EVENTS: ${rosterlist.length} ... Name: ${requester['lname']}, ${requester['fname']}');
|
|
|
+ 'TLC: $username ... EVENTS: ${rosterlist.length} ... Name: ${requester[0]['lname']}, ${requester[0]['fname']}');
|
|
|
|
|
|
// Create an iCalendar object
|
|
|
final ical = ICalendar();
|
|
|
@@ -54,160 +52,103 @@ class CalendarHandler {
|
|
|
if (rosterlist is List) {
|
|
|
for (var i = 0; i < rosterlist.length; i++) {
|
|
|
final event = rosterlist[i];
|
|
|
- final pnleg = Pnleg(
|
|
|
- date: event['date'],
|
|
|
- tlc: username,
|
|
|
- actype: event['actype'],
|
|
|
- al: event['al'],
|
|
|
- fnum: event['fnum'],
|
|
|
- dep: event['dep'],
|
|
|
- arr: event['des'],
|
|
|
- depdate: event['ddep'],
|
|
|
- deptime: event['hdep'],
|
|
|
- arrdate: event['ddes'],
|
|
|
- arrtime: event['hdes'],
|
|
|
- label: event['label'],
|
|
|
- type: event['type']);
|
|
|
- final List<List<String>> crewlist = [];
|
|
|
- for (var j = 0; j < (event['crew'] as List).length; j++) {
|
|
|
- final crewmember = event['crew'][j] as String;
|
|
|
- final crewmemberDataAc = licences.firstWhere(
|
|
|
- (e) => (e['tlc'] == crewmember) && (e['ac'] == pnleg.ac),
|
|
|
- orElse: () => {});
|
|
|
- final crewmemberData = licences
|
|
|
- .firstWhere((e) => e['tlc'] == crewmember, orElse: () => {});
|
|
|
- crewlist.add([
|
|
|
- '${([
|
|
|
- "F",
|
|
|
- "G"
|
|
|
- ].contains(event['crewtype'][j]) ? "DH " : null) ?? (crewmemberDataAc["college"] ?? "--")}',
|
|
|
- '${crewmemberData["lname"] ?? "------"}',
|
|
|
- '${crewmemberData["fname"] ?? "Unknown"}'
|
|
|
- ]);
|
|
|
- }
|
|
|
- final crewlistdisplay = (crewlist
|
|
|
- ..sort((a, b) {
|
|
|
- const order = {
|
|
|
- 'CP': 0,
|
|
|
- 'FO': 1,
|
|
|
- 'PU': 2,
|
|
|
- 'SE': 3,
|
|
|
- 'ST': 4,
|
|
|
- 'JU': 5
|
|
|
- };
|
|
|
- return (order[a[0]] ?? 6).compareTo(order[b[0]] ?? 6);
|
|
|
- }))
|
|
|
- .map((e) => "${e[0]}: ${e[1]}, ${e[2]}")
|
|
|
- .join("\n");
|
|
|
- switch (pnleg.dutytype) {
|
|
|
+ switch (event["_dutytype"]) {
|
|
|
case "flight":
|
|
|
ical.addEvent(
|
|
|
- summary: "${pnleg.dep}-${pnleg.arr}",
|
|
|
+ summary: "${event["dep"]}-${event["des"]}",
|
|
|
description: """
|
|
|
-Flight from ${pnleg.dep} to ${pnleg.arr}
|
|
|
-Flight number: ${pnleg.al}${pnleg.fnum}
|
|
|
-Aircraft type: ${pnleg.actype}
|
|
|
+Flight ${event["al"]}${event["fnum"]} from ${event["dep"]} to ${event["des"]}
|
|
|
+A/C: ${event["_reg"] ?? "---"}/${event["actype"]}
|
|
|
+${event["_version"] != null ? "Ver: ${event["_version"]}" : ""} ${(event["_paxy"] != null || event["_paxc"] != null) ? "/ PAX: ${event["_paxc"] != null ? "C${event["_paxc"]}" : ""} Y${event["_paxy"] ?? "0"}" : ""}
|
|
|
|
|
|
-Departure time: ${pnleg.jdep?.Hm}
|
|
|
-Arrival time: ${pnleg.jarr?.Hm}
|
|
|
|
|
|
-Crew:
|
|
|
-$crewlistdisplay
|
|
|
-"""
|
|
|
- .replaceAll("\n", "\\n"),
|
|
|
- startTime: pnleg.jdep!.dateTime,
|
|
|
- endTime: pnleg.jarr!.dateTime,
|
|
|
- attendees: event['crew'],
|
|
|
- );
|
|
|
- break;
|
|
|
- case "dhflight":
|
|
|
- ical.addEvent(
|
|
|
- summary: "DH ${pnleg.dep}-${pnleg.arr}",
|
|
|
- description: """
|
|
|
-DH Flight from ${pnleg.dep} to ${pnleg.arr}
|
|
|
-Flight number: ${pnleg.al}${pnleg.fnum}
|
|
|
-Aircraft type: ${pnleg.actype}
|
|
|
-
|
|
|
-Departure time: ${pnleg.jdep?.Hm}
|
|
|
-Arrival time: ${pnleg.jarr?.Hm}
|
|
|
+Dep/Arr time: ${Jiffy.parse(event["_hdep"], isUtc: true).Hm} - ${Jiffy.parse(event["_hdes"], isUtc: true).Hm}
|
|
|
+${event["_hdep_sched"] != null ? "Sched Dep time: ${Jiffy.parse(event["_hdep_sched"], isUtc: true).format(pattern: "dd MMM yyyy HH:mm")}" : ""}
|
|
|
+${event["_delay"] != null ? "Delay codes: ${(event["_delay"] as List<dynamic>).map((e) {
|
|
|
+ final f = (e ?? "")
|
|
|
+ .split('|')
|
|
|
+ .map((j) => j == "" ? null : j)
|
|
|
+ .toList();
|
|
|
+ return "${(f[1]) ?? (f[0]) ?? '--'}:${((f[2]) ?? '0000').padLeft(4, '0')}";
|
|
|
+ })}" : ""}
|
|
|
|
|
|
Crew:
|
|
|
-$crewlistdisplay
|
|
|
+${(event["crew"] as List<dynamic>).map((e) {
|
|
|
+ final f = (e ?? "").split('|').toList();
|
|
|
+ return " ${f[0]}: ${f[2]}, ${f[3]} (${f[1]})";
|
|
|
+ }).join("\n")}
|
|
|
"""
|
|
|
.replaceAll("\n", "\\n"),
|
|
|
- startTime: pnleg.jdep!.dateTime,
|
|
|
- endTime: pnleg.jarr!.dateTime,
|
|
|
- attendees: event['crew'],
|
|
|
+ startTime: Jiffy.parse(event["_hdep"], isUtc: true).dateTime,
|
|
|
+ endTime: Jiffy.parse(event["_hdes"]).dateTime,
|
|
|
+ attendees: [],
|
|
|
);
|
|
|
break;
|
|
|
- case "dhlimo":
|
|
|
+ case "dhflight" || "dhlimo":
|
|
|
ical.addEvent(
|
|
|
- summary: "${pnleg.dep}-${pnleg.arr}",
|
|
|
+ summary: "DH ${event["dep"]}-${event["des"]}",
|
|
|
description: """
|
|
|
-DH Limo from ${pnleg.dep} to ${pnleg.arr}
|
|
|
+DH ${event["_dutytype"] == "dhflight" ? "Flight" : "Limo"} ${event["al"]}${event["fnum"]} from ${event["dep"]} to ${event["des"]}
|
|
|
+${event["_dutytype"] == "dhflight" ? "A/C: ${event["_reg"] ?? "---"}/${event["actype"]}" : ""}
|
|
|
+${event["_version"] != null ? "Ver: ${event["_version"]}" : ""} ${(event["_paxy"] != null || event["_paxc"] != null) ? "/ PAX: ${event["_paxc"] != null ? "C${event["_paxc"]}" : ""} Y${event["_paxy"] ?? "0"}" : ""}
|
|
|
|
|
|
-Departure time: ${pnleg.jdep?.Hm}
|
|
|
-Arrival time: ${pnleg.jarr?.Hm}
|
|
|
+
|
|
|
+Dep/Arr time: ${Jiffy.parse(event["_hdep"], isUtc: true).Hm} - ${Jiffy.parse(event["_hdes"], isUtc: true).Hm}
|
|
|
+${event["_hdep_sched"] != null ? "Sched Dep time: ${Jiffy.parse(event["_hdep_sched"], isUtc: true).format(pattern: "dd MMM yyyy HH:mm")}" : ""}
|
|
|
+${event["_delay"] != null ? "Delay codes: ${(event["_delay"] as List<dynamic>).map((e) {
|
|
|
+ final f = (e ?? "")
|
|
|
+ .split('|')
|
|
|
+ .map((j) => j == "" ? null : j)
|
|
|
+ .toList();
|
|
|
+ return "${(f[1]) ?? (f[0]) ?? '--'}:${((f[2]) ?? '0000').padLeft(4, '0')}";
|
|
|
+ })}" : ""}
|
|
|
|
|
|
Crew:
|
|
|
-$crewlistdisplay
|
|
|
+${(event["crew"] as List<dynamic>).map((e) {
|
|
|
+ final f = (e ?? "").split('|').toList();
|
|
|
+ return " ${f[0]}: ${f[2]}, ${f[3]} (${f[1]})";
|
|
|
+ }).join("\n")}
|
|
|
"""
|
|
|
.replaceAll("\n", "\\n"),
|
|
|
- startTime: pnleg.jdep!.dateTime,
|
|
|
- endTime: pnleg.jarr!.dateTime,
|
|
|
- attendees: event['crew'],
|
|
|
+ startTime: Jiffy.parse(event["_hdep"], isUtc: true).dateTime,
|
|
|
+ endTime: Jiffy.parse(event["_hdes"]).dateTime,
|
|
|
+ attendees: [],
|
|
|
);
|
|
|
break;
|
|
|
- case "standby":
|
|
|
+ case "standby" || "ground":
|
|
|
ical.addEvent(
|
|
|
- summary: "STDBY ${pnleg.label}",
|
|
|
+ summary:
|
|
|
+ "${event["_dutytype"] == "standby" ? "STDBY" : ""} ${event["label"]}",
|
|
|
description: """
|
|
|
-Stand By ${pnleg.label} at ${pnleg.dep}
|
|
|
+${event["_dutytype"] == "standby" ? "STDBY" : ""} ${event["label"]} @ ${event["dep"]}
|
|
|
+Start/End time: ${Jiffy.parse(event["_hdep"], isUtc: true).Hm} - ${Jiffy.parse(event["_hdes"], isUtc: true).Hm}
|
|
|
|
|
|
-Start time: ${pnleg.jdep?.Hm}
|
|
|
-End time: ${pnleg.jarr?.Hm}
|
|
|
+Attendee:
|
|
|
+${(event["crew"] as List<dynamic>).map((e) {
|
|
|
+ final f = (e ?? "").split('|').toList();
|
|
|
+ return " ${f[0]}: ${f[2]}, ${f[3]} (${f[1]})";
|
|
|
+ }).join("\n")}
|
|
|
"""
|
|
|
.replaceAll("\n", "\\n"),
|
|
|
- startTime: pnleg.jdep!.dateTime,
|
|
|
- endTime: pnleg.jarr!.dateTime,
|
|
|
- attendees: event['crew'],
|
|
|
+ startTime: Jiffy.parse(event["_hdep"], isUtc: true).dateTime,
|
|
|
+ endTime: Jiffy.parse(event["_hdes"]).dateTime,
|
|
|
+ attendees: [],
|
|
|
);
|
|
|
break;
|
|
|
- case "ground":
|
|
|
+ case "day":
|
|
|
ical.addEvent(
|
|
|
- summary: "${pnleg.label}",
|
|
|
+ summary: "${event["label"]}",
|
|
|
description: """
|
|
|
-${pnleg.label} at ${pnleg.dep}
|
|
|
-
|
|
|
-Start time: ${pnleg.jdep?.Hm}
|
|
|
-End time: ${pnleg.jarr?.Hm}
|
|
|
-
|
|
|
-Attendee:
|
|
|
-$crewlistdisplay
|
|
|
+${event["label"]} @ ${event["dep"] ?? ""}
|
|
|
|
|
|
"""
|
|
|
.replaceAll("\n", "\\n"),
|
|
|
- startTime: pnleg.jdep!.dateTime,
|
|
|
- endTime: pnleg.jarr!.dateTime,
|
|
|
- attendees: event['crew'],
|
|
|
+ startTime: Jiffy.parse(event["_hdep"]).dateTime,
|
|
|
+ endTime: Jiffy.parse(event["_hdep"]).dateTime,
|
|
|
+ attendees: [],
|
|
|
+ allday: true,
|
|
|
);
|
|
|
break;
|
|
|
- case "day":
|
|
|
- ical.addEvent(
|
|
|
- summary: "${pnleg.label}",
|
|
|
- description: """
|
|
|
-${pnleg.label} at ${pnleg.dep}
|
|
|
-
|
|
|
-Attendee:
|
|
|
-$crewlistdisplay
|
|
|
-
|
|
|
-"""
|
|
|
- .replaceAll("\n", "\\n"),
|
|
|
- startTime: pnleg.jdate!.dateTime,
|
|
|
- endTime: pnleg.jdate!.dateTime,
|
|
|
- attendees: event['crew'],
|
|
|
- allday: true);
|
|
|
- break;
|
|
|
default:
|
|
|
}
|
|
|
}
|