// ignore_for_file: non_constant_identifier_names import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'package:collection/collection.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:jiffy/jiffy.dart'; //import 'package:supabase_flutter/supabase_flutter.dart'; import "package:tp5/core/utils.dart"; import "package:tp5/csv/csv_data.dart"; class CrewFilter { String? college; String? ac; String? tlc; String? fname; String? lname; String? searchname; CrewFilter({ this.college, this.ac, this.tlc, this.fname, this.lname, this.searchname, }); CrewFilter copyWith({ ValueGetter? college, ValueGetter? ac, ValueGetter? tlc, ValueGetter? fname, ValueGetter? lname, ValueGetter? searchname, }) { return CrewFilter( college: college != null ? college() : this.college, ac: ac != null ? ac() : this.ac, tlc: tlc != null ? tlc() : this.tlc, fname: fname != null ? fname() : this.fname, lname: lname != null ? lname() : this.lname, searchname: searchname != null ? searchname() : this.searchname, ); } Map toMap() { return { 'college': college, 'ac': ac, 'tlc': tlc, 'fname': fname, 'lname': lname, 'searchname': searchname, }; } factory CrewFilter.fromMap(Map map) { return CrewFilter( college: map['college'], ac: map['ac'], tlc: map['tlc'], fname: map['fname'], lname: map['lname'], searchname: map['searchname'], ); } String toJson() => json.encode(toMap()); factory CrewFilter.fromJson(String source) => CrewFilter.fromMap(json.decode(source)); @override String toString() { return 'CrewFilter(college: $college, ac: $ac, tlc: $tlc, fname: $fname, lname: $lname, searchname: $searchname)'; } @override bool operator ==(Object other) { if (identical(this, other)) return true; return other is CrewFilter && other.college == college && other.ac == ac && other.tlc == tlc && other.fname == fname && other.lname == lname && other.searchname == searchname; } @override int get hashCode { return college.hashCode ^ ac.hashCode ^ tlc.hashCode ^ fname.hashCode ^ lname.hashCode ^ searchname.hashCode; } } class FlightFilter { String? al; String? fnum; String? date; String? dep; String? arr; Jiffy? jdep; Jiffy? jarr; String? tlc; String? reg; FlightFilter( {this.al, this.fnum, this.date, this.dep, this.arr, this.jdep, this.jarr, this.tlc, this.reg}); @override bool operator ==(Object other) { if (identical(this, other)) return true; return other is FlightFilter && other.al == al && other.fnum == fnum && other.date == date && other.dep == dep && other.arr == arr && other.jdep == jdep && other.jarr == jarr && other.tlc == tlc && other.reg == reg; } FlightFilter copyWith({ ValueGetter? al, ValueGetter? fnum, ValueGetter? date, ValueGetter? dep, ValueGetter? arr, ValueGetter? jdep, ValueGetter? jarr, ValueGetter? tlc, ValueGetter? reg, }) { return FlightFilter( al: al != null ? al() : this.al, fnum: fnum != null ? fnum() : this.fnum, date: date != null ? date() : this.date, dep: dep != null ? dep() : this.dep, arr: arr != null ? arr() : this.arr, jdep: jdep != null ? jdep() : this.jdep, jarr: jarr != null ? jarr() : this.jarr, tlc: tlc != null ? tlc() : this.tlc, reg: reg != null ? reg() : this.reg, ); } Map toMap() { return { 'al': al, 'fnum': fnum, 'date': date, 'dep': dep, 'arr': arr, 'jdep': jdep?.toString(), 'jarr': jarr?.toString(), 'tlc': tlc, 'reg': reg, }; } factory FlightFilter.fromMap(Map map) { return FlightFilter( al: map['al'], fnum: map['fnum'], date: map['date'], dep: map['dep'], arr: map['arr'], jdep: map['jdep'] != null ? Jiffy.parse(map['jdep']) : null, jarr: map['jarr'] != null ? Jiffy.parse(map['jarr']) : null, tlc: map['tlc'], reg: map['reg'], ); } String toJson() => json.encode(toMap()); factory FlightFilter.fromJson(String source) => FlightFilter.fromMap(json.decode(source)); @override String toString() { return 'FlightFilter(al: $al, fnum: $fnum, date: $date, dep: $dep, arr: $arr, jdep: $jdep, jarr: $jarr, tlc: $tlc, reg: $reg)'; } @override int get hashCode { return al.hashCode ^ fnum.hashCode ^ date.hashCode ^ dep.hashCode ^ arr.hashCode ^ jdep.hashCode ^ jarr.hashCode ^ tlc.hashCode ^ reg.hashCode; } } final pnlegByTlcProvider = Provider. /*autoDispose.*/ family, String>((ref, tlc) => ref .watch(dataProvider) .pnleg .where((leg) => leg.tlc == tlc) .sortedBy((e) => e.jdep?.dateTime ?? Jiffy.parse(e.depdate ?? "01/01/2001", pattern: "dd/MM/yyyy", isUtc: true) .dateTime) .toList()); final pnlegProvider = Provider.autoDispose.family, FlightFilter>( (ref, flightFilter) => ref .watch(dataProvider) .pnleg .where((leg) => (leg.al == (flightFilter.al ?? leg.al)) && (leg.fnum == (flightFilter.fnum ?? leg.fnum)) && // (leg.jdep?.yMd == // (flightFilter.date ?? leg.jdep?.yMd)) && //format yyyy-MM-dd (leg.dep == (flightFilter.dep ?? leg.dep)) && (leg.arr == (flightFilter.arr ?? leg.arr)) && (flightFilter.jdep == null || (leg.jdep != null && flightFilter.jdep != null && flightFilter.jdep!.isBetween(leg.jdep!.subtract(hours: 5), leg.jdep!.add(hours: 5)))) && (flightFilter.jarr == null || (leg.jarr != null && flightFilter.jarr != null && flightFilter.jarr!.isBetween(leg.jarr!.subtract(hours: 5), leg.jarr!.add(hours: 5)))) && (leg.tlc == (flightFilter.tlc ?? leg.tlc))) .toList()); /* final pnlegInterval = Provider((ref) { final pnleg = ref.watch(dataProvider).pnleg; return pnleg.where((leg) => leg.jdep != null && leg.jarr != null).toList(); }); final pnlegDates = Provider((ref) { final pnleg = ref.watch(dataProvider).pnleg; return pnleg.fold( {}, (t, e) => [...t, e.jdep?.startOf(Unit.day)] .whereNotNull() .sortedBy((k) => k.millisecondsSinceEpoch.toString()) .toSet()); }); final pnlegTlcs = Provider((ref) { final data = ref.watch(dataProvider); final pnleg = data.pnleg; final qualif = data.qualif; return pnleg.fold({}, (t, e) => {...t, e.tlc}).sortedBy((k) => qualif.firstWhereOrNull((q) => q.tlc == k)?.lname ?? "zzzzzzzzzzzzz"); }); */ class PnlegMeta { PnlegMeta({required this.tlcs, required this.dates}); final List tlcs; final List dates; } final pnlegMeta = Provider((ref) { print("data: start analyzing pnleg"); final now = Jiffy.now(); final pnlegs = ref.watch(dataProvider).pnleg; final qualif = ref.watch(dataProvider).qualif; Set tlcs = {}; Set dates = {}; for (Pnleg pnleg in pnlegs) { tlcs.add(pnleg.tlc ?? ""); dates.add(pnleg.jdep?.startOf(Unit.day) ?? Jiffy.parse(pnleg.date ?? "01/01/1970", pattern: "dd/MM/yyyy", isUtc: true)); } final restlcs = tlcs.sortedBy((k) => qualif.firstWhereOrNull((q) => q.tlc == k)?.lname ?? "zzzzzzzzzzzzz"); final resdates = dates.sortedBy((k) => k.millisecondsSinceEpoch.toString()); print( "data: end analyzing pnleg ${Duration(milliseconds: Jiffy.now().millisecondsSinceEpoch - now.millisecondsSinceEpoch).inSeconds} sec"); return PnlegMeta(tlcs: restlcs, dates: resdates); }); final aclegProvider = Provider.autoDispose.family, FlightFilter>( (ref, flightFilter) => ref .watch(dataProvider) .acleg .where((leg) => (leg.FN_CARRIER == (flightFilter.al ?? leg.FN_CARRIER)) && (leg.FN_NUMBER == (flightFilter.fnum ?? leg.FN_NUMBER)) && // (leg.jdep?.yMd == // (flightFilter.date ?? leg.jdep?.yMd)) && //format yyyy-MM-dd (leg.DEP_AP_ACTUAL == (flightFilter.dep ?? leg.DEP_AP_ACTUAL)) && (leg.DEP_AP_SCHED == (flightFilter.dep ?? leg.DEP_AP_SCHED)) && (leg.ARR_AP_ACTUAL == (flightFilter.arr ?? leg.ARR_AP_ACTUAL)) && (leg.ARR_AP_SCHED == (flightFilter.arr ?? leg.ARR_AP_SCHED)) && (flightFilter.jdep == null || (leg.jdep != null && flightFilter.jdep != null && flightFilter.jdep!.isBetween(leg.jdep!.subtract(hours: 5), leg.jdep!.add(hours: 5)))) && (flightFilter.jarr == null || (leg.jarr != null && flightFilter.jarr != null && flightFilter.jarr!.isBetween(leg.jarr!.subtract(hours: 5), leg.jarr!.add(hours: 5)))) && (leg.AC_REGISTRATION == (flightFilter.reg ?? leg.AC_REGISTRATION))) .toList()); final qualifProvider = Provider.family, CrewFilter>( (ref, crewFilter) => ref .watch(dataProvider) .qualif .where((x) => (((crewFilter.tlc ?? x.tlc) == x.tlc && (crewFilter.college ?? x.college) == x.college && (crewFilter.ac ?? x.ac) == x.ac && (crewFilter.lname ?? x.lname ?? "").capitalize() == (x.lname ?? "").capitalize() && (crewFilter.fname ?? x.fname ?? "").capitalize() == (x.fname ?? "").capitalize() && //search like (crewFilter.searchname == null || (x.fname ?? "") .capitalize() .contains(crewFilter.searchname!.capitalize())) && (crewFilter.searchname == null || (x.lname ?? "") .capitalize() .contains(crewFilter.searchname!.capitalize()))))) .toList()); final dataProvider = StateNotifierProvider((ref) { return DataNotifier(); }); class DataState { List qualif; List pnleg; List acleg; Jiffy? qualifupdate; Jiffy? pnlegupdate; Jiffy? aclegupdate; DataState({ this.qualif = const [], this.pnleg = const [], this.acleg = const [], this.qualifupdate, this.pnlegupdate, this.aclegupdate, }); DataState copyWith({ List? qualif, List? pnleg, List? acleg, Jiffy? qualifupdate, Jiffy? pnlegupdate, Jiffy? aclegupdate, }) { return DataState( qualif: qualif ?? this.qualif, pnleg: pnleg ?? this.pnleg, acleg: acleg ?? this.acleg, qualifupdate: qualifupdate ?? this.qualifupdate, pnlegupdate: pnlegupdate ?? this.pnlegupdate, aclegupdate: aclegupdate ?? this.aclegupdate, ); } @override String toString() { return 'DataState(qualif: $qualif, pnleg: $pnleg, acleg: $acleg, qualifupdate: $qualifupdate, pnlegupdate: $pnlegupdate, aclegupdate: $aclegupdate)'; } @override bool operator ==(Object other) { if (identical(this, other)) return true; return other is DataState && listEquals(other.qualif, qualif) && listEquals(other.pnleg, pnleg) && listEquals(other.acleg, acleg) && other.qualifupdate == qualifupdate && other.pnlegupdate == pnlegupdate && other.aclegupdate == aclegupdate; } @override int get hashCode { return qualif.hashCode ^ pnleg.hashCode ^ acleg.hashCode ^ qualifupdate.hashCode ^ pnlegupdate.hashCode ^ aclegupdate.hashCode; } } class DataNotifier extends StateNotifier { DataNotifier() : super(DataState()) { loadAll(); _timer = Timer.periodic(const Duration(seconds: 10), (timer) async { //update file and load // final response = await Supabase.instance.client.storage.from('your_bucket_name').; print("data: timer tick, check csv files"); // print(acleg.where((x) => x.pad_booked != null).map((x) => x.pad_booked)); await loadAll(); }); } @override void dispose() { _timer.cancel(); super.dispose(); } loadAll() async { if (pnlegmoistime != pnlegmoisupdate) await loadPnlegsmois(); if (aclegtime != aclegupdate) await loadAclegs(); if (pnleg3time != pnleg3update) await loadPnlegs3(); if (qualiftime != qualifupdate) await loadQualif(); } late Timer _timer; Jiffy? qualifupdate; String get qualiffile => PathTo().csvFile("exportlicence.txt"); Jiffy? get qualiftime => File(qualiffile).existsSync() ? Jiffy.parseFromDateTime( File(PathTo().csvFile("exportlicence.txt")).lastModifiedSync()) : null; List qualif = []; loadQualif() async { print("data: qualif update ${qualiftime?.dateTime}"); final txt = await File(qualiffile).readAsString(); qualif = CsvData.csv2list(txt).map((e) => Qualif.fromList(e)).toList(); qualifupdate = qualiftime; state = state.copyWith(qualifupdate: qualifupdate, qualif: qualif); } Jiffy? aclegupdate; String get aclegfile => PathTo().csvFile("secondprgtype.zip"); Jiffy? get aclegtime => File(aclegfile).existsSync() ? Jiffy.parseFromDateTime( File(PathTo().csvFile("secondprgtype.zip")).lastModifiedSync()) : null; List acleg = []; loadAclegs() async { print("data: acleg update ${aclegtime?.dateTime}"); final txt = await CsvData.extractTextFileFromZip(aclegfile, "secondprgtype.txt"); acleg = CsvData.csv2list(txt) .map((e) => Acleg.fromList(e)) .where((leg) => //only flights of Tunisair (leg.EMPLOYER_CABIN == "TU" || leg.EMPLOYER_COCKPIT == "TU" || leg.AC_OWNER == "TU")) .sortedBy((e) => e.jdep!.dateTime) .toList(); aclegupdate = aclegtime; state = state.copyWith(aclegupdate: aclegupdate, acleg: acleg); //print(acleg); } List get pnleg { if (pnlegmoistime != null && pnleg3time != null && pnlegmoistime!.isSameOrBefore(pnleg3time!)) { return pnlegmois; } else if (pnlegmoistime != null && pnleg3time != null && pnlegmoistime!.isAfter(pnleg3time!)) { final dates3tlc3 = pnleg3.fold( [], (p, e) => p.contains([e.date, e.tlc]) ? p : p ..add([e.date, e.tlc])); return pnlegmois .where((x) => !dates3tlc3.contains([x.date, x.tlc])) .toList() ..addAll(pnleg3); //pnleg3 dabord } else if (pnlegmoistime == null && pnleg3time != null) { return pnleg3; } else if (pnlegmoistime != null && pnleg3time == null) { return pnlegmois; } else { return []; } } Jiffy? pnlegmoisupdate; String get pnlegmoisfile => PathTo().csvFile("ExportPGRGPNmois.zip"); Jiffy? get pnlegmoistime => File(pnlegmoisfile).existsSync() ? Jiffy.parseFromDateTime( File(PathTo().csvFile("ExportPGRGPNmois.zip")).lastModifiedSync()) : null; List pnlegmois = []; loadPnlegsmois() async { print("data: pnlegmois update ${pnlegmoistime?.dateTime}"); final txt = await CsvData.extractTextFileFromZip( pnlegmoisfile, "ExportPGRGPNmois.txt"); pnlegmois = CsvData.csv2list(txt).map((e) => Pnleg.fromList(e)).toList(); pnlegmoisupdate = pnlegmoistime; state = state.copyWith(pnlegupdate: pnlegmoisupdate, pnleg: pnleg); //print(pnlegmois); } Jiffy? pnleg3update; String get pnleg3file => PathTo().csvFile("exportPGRGPN.zip"); Jiffy? get pnleg3time => File(pnleg3file).existsSync() ? Jiffy.parseFromDateTime( File(PathTo().csvFile("ExportPGRGPNmois.zip")).lastModifiedSync()) : null; List pnleg3 = []; loadPnlegs3() async { print("data: pnleg3 update ${pnleg3time?.dateTime}"); final txt = await CsvData.extractTextFileFromZip(pnleg3file, "exportPGRGPN.txt"); pnleg3 = CsvData.csv2list(txt).map((e) => Pnleg.fromList(e)).toList(); pnleg3update = pnleg3time; state = state.copyWith(pnlegupdate: pnleg3update, pnleg: pnleg); //print(pnleg3); } } class Qualif { String? tlc; String? lname; String? mname; String? fname; String? date; String? ac; String? college; String? base; Qualif({ this.tlc, this.lname, this.mname, this.fname, this.date, this.ac, this.college, this.base, }); Qualif copyWith({ String? tlc, String? lname, String? mname, String? fname, String? date, String? ac, String? college, String? base, }) { return Qualif( tlc: tlc ?? this.tlc, lname: lname ?? this.lname, mname: mname ?? this.mname, fname: fname ?? this.fname, date: date ?? this.date, ac: ac ?? this.ac, college: college ?? this.college, base: base ?? this.base, ); } Map toMap() { return { 'tlc': tlc, 'lname': lname, 'mname': mname, 'fname': fname, 'date': date, 'ac': ac, 'college': college, 'base': base, }; } factory Qualif.fromList(List datalist) { return Qualif( tlc: datalist[0], lname: datalist[1], mname: datalist[2], fname: datalist[3], date: datalist[4], ac: datalist[5], college: datalist[6], base: datalist[7]); } factory Qualif.fromMap(Map map) { return Qualif( tlc: map['tlc'] != null ? map['tlc'] as String : null, lname: map['lname'] != null ? map['lname'] as String : null, mname: map['mname'] != null ? map['mname'] as String : null, fname: map['fname'] != null ? map['fname'] as String : null, date: map['date'] != null ? map['date'] as String : null, ac: map['ac'] != null ? map['ac'] as String : null, college: map['college'] != null ? map['college'] as String : null, base: map['base'] != null ? map['base'] as String : null, ); } String toJson() => json.encode(toMap()); factory Qualif.fromJson(String source) => Qualif.fromMap(json.decode(source) as Map); @override String toString() { return 'Qualif(tlc: $tlc, lname: $lname, mname: $mname, fname: $fname, date: $date, ac: $ac, college: $college, base: $base)'; } @override bool operator ==(covariant Qualif other) { if (identical(this, other)) return true; return other.tlc == tlc && other.lname == lname && other.mname == mname && other.fname == fname && other.date == date && other.ac == ac && other.college == college && other.base == base; } @override int get hashCode { return tlc.hashCode ^ lname.hashCode ^ mname.hashCode ^ fname.hashCode ^ date.hashCode ^ ac.hashCode ^ college.hashCode ^ base.hashCode; } } class Pnleg { String? date; Jiffy? get jdate => date != null ? Jiffy.parse(date ?? "01/01/1970", pattern: "dd/MM/yyyy", isUtc: true) : null; String? tlc; String? actype; String? al; String? fnum; String? depdate; String? deptime; String? arrdate; String? arrtime; String? dep; String? arr; String? label; String? type; Jiffy? get jdep => deptime != null ? "$depdate $deptime".parseddmmyyyyhhmm() : null; Jiffy? get jarr => arrtime != null ? "$arrdate $arrtime".parseddmmyyyyhhmm() : null; Pnleg({ this.date, this.tlc, this.actype, this.al, this.fnum, this.depdate, this.deptime, this.arrdate, this.arrtime, this.dep, this.arr, this.label, this.type, }); Pnleg copyWith({ String? date, String? tlc, String? actype, String? al, String? fnum, String? depdate, String? deptime, String? arrdate, String? arrtime, String? dep, String? arr, String? label, String? type, }) { return Pnleg( date: date ?? this.date, tlc: tlc ?? this.tlc, actype: actype ?? this.actype, al: al ?? this.al, fnum: fnum ?? this.fnum, depdate: depdate ?? this.depdate, deptime: deptime ?? this.deptime, arrdate: arrdate ?? this.arrdate, arrtime: arrtime ?? this.arrtime, dep: dep ?? this.dep, arr: arr ?? this.arr, label: label ?? this.label, type: type ?? this.type, ); } Map toMap() { return { 'date': date, 'tlc': tlc, 'actype': actype, 'al': al, 'fnum': fnum, 'depdate': depdate, 'deptime': deptime, 'arrdate': arrdate, 'arrtime': arrtime, 'dep': dep, 'arr': arr, 'label': label, 'type': type, }; } factory Pnleg.fromList(List datalist) { return Pnleg( date: datalist[0], tlc: datalist[1], actype: datalist[2], al: datalist[3], fnum: datalist[4], depdate: datalist[5], deptime: datalist[6], arrdate: datalist[7], arrtime: datalist[8], dep: datalist[9], arr: datalist[10], label: datalist[11], type: datalist[12]); } factory Pnleg.fromMap(Map map) { return Pnleg( date: map['date'] != null ? map['date'] as String : null, tlc: map['tlc'] != null ? map['tlc'] as String : null, actype: map['actype'] != null ? map['actype'] as String : null, al: map['al'] != null ? map['al'] as String : null, fnum: map['fnum'] != null ? map['fnum'] as String : null, depdate: map['depdate'] != null ? map['depdate'] as String : null, deptime: map['deptime'] != null ? map['deptime'] as String : null, arrdate: map['arrdate'] != null ? map['arrdate'] as String : null, arrtime: map['arrtime'] != null ? map['arrtime'] as String : null, dep: map['dep'] != null ? map['dep'] as String : null, arr: map['arr'] != null ? map['arr'] as String : null, label: map['label'] != null ? map['label'] as String : null, type: map['type'] != null ? map['type'] as String : null, ); } String toJson() => json.encode(toMap()); factory Pnleg.fromJson(String source) => Pnleg.fromMap(json.decode(source) as Map); @override String toString() { return 'Pnleg(date: $date, tlc: $tlc, actype: $actype, al: $al, fnum: $fnum, depdate: $depdate, deptime: $deptime, arrdate: $arrdate, arrtime: $arrtime, dep: $dep, arr: $arr, label: $label, type: $type)'; } @override bool operator ==(covariant Pnleg other) { if (identical(this, other)) return true; return other.date == date && other.tlc == tlc && other.actype == actype && other.al == al && other.fnum == fnum && other.depdate == depdate && other.deptime == deptime && other.arrdate == arrdate && other.arrtime == arrtime && other.dep == dep && other.arr == arr && other.label == label && other.type == type; } @override int get hashCode { return date.hashCode ^ tlc.hashCode ^ actype.hashCode ^ al.hashCode ^ fnum.hashCode ^ depdate.hashCode ^ deptime.hashCode ^ arrdate.hashCode ^ arrtime.hashCode ^ dep.hashCode ^ arr.hashCode ^ label.hashCode ^ type.hashCode; } } //enum flt_status { sched, delayed, taxiout, enroute, landed, arrived } class Acleg { String? LEG_NO; String? FN_CARRIER; String? FN_NUMBER; String? FN_SUFFIX; String? DAY_OF_ORIGIN; String? AC_OWNER; String? AC_SUBTYPE; String? AC_VERSION; String? AC_REGISTRATION; String? DEP_AP_ACTUAL; String? DEP_AP_SCHED; String? DEP_DT_EST; Jiffy? get jdepest => (DEP_DT_EST == null) ? null : DEP_DT_EST!.parseyyyymmddhhmm(); String? DEP_SCHED_DT; Jiffy? get jdepsched => (DEP_SCHED_DT == null) ? null : DEP_SCHED_DT!.parseyyyymmddhhmm(); String? ARR_AP_ACTUAL; String? ARR_AP_SCHED; String? ARR_DT_EST; Jiffy? get jarrest => (ARR_DT_EST == null) ? null : ARR_DT_EST!.parseyyyymmddhhmm(); String? ARR_SCHED_DT; Jiffy? get jarrsched => (ARR_SCHED_DT == null) ? null : ARR_SCHED_DT!.parseyyyymmddhhmm(); String? SLOT_TIME_ACTUAL; Jiffy? get slot => (SLOT_TIME_ACTUAL == null) ? null : SLOT_TIME_ACTUAL!.parseyyyymmddhhmm(); String? LEG_TYPE; String? STATUS; String? EMPLOYER_COCKPIT; String? EMPLOYER_CABIN; String? CYCLES; String? DELAY_CODE_01; String? DELAY_CODE_02; String? DELAY_CODE_03; String? DELAY_CODE_04; String? DELAY_TIME_01; String? DELAY_TIME_02; String? DELAY_TIME_03; String? DELAY_TIME_04; String? SUBDELAY_CODE_01; String? SUBDELAY_CODE_02; String? SUBDELAY_CODE_03; String? SUBDELAY_CODE_04; List get delaycode => [ DELAY_CODE_01, DELAY_CODE_02, DELAY_CODE_03, DELAY_CODE_04 ].whereNotNull().toList(); List get delaysubcode => [ SUBDELAY_CODE_01, SUBDELAY_CODE_02, SUBDELAY_CODE_03, SUBDELAY_CODE_04 ].whereNotNull().toList(); List get delaytime => [ DELAY_TIME_01 == null ? null : Duration(minutes: int.parse(DELAY_TIME_01!)), DELAY_TIME_02 == null ? null : Duration(minutes: int.parse(DELAY_TIME_02!)), DELAY_TIME_03 == null ? null : Duration(minutes: int.parse(DELAY_TIME_03!)), DELAY_TIME_04 == null ? null : Duration(minutes: int.parse(DELAY_TIME_04!)) ].whereNotNull().toList(); String? PAX_BOOKED_C; String? PAX_BOOKED_Y; String? get pax_booked => (PAX_BOOKED_C != null || PAX_BOOKED_Y != null) ? "C${PAX_BOOKED_C ?? 0}/Y${PAX_BOOKED_Y ?? 0}" : null; String? PAX_BOOKED_TRS_C; String? PAX_BOOKED_TRS_Y; String? get pax_trs => (PAX_BOOKED_TRS_C != null || PAX_BOOKED_TRS_Y != null) ? "C${PAX_BOOKED_TRS_C ?? 0}/Y${PAX_BOOKED_TRS_Y ?? 0}" : null; String? PAD_BOOKED_C; String? PAD_BOOKED_Y; String? get pad_booked => (PAD_BOOKED_C != null || PAD_BOOKED_Y != null) ? "C${PAD_BOOKED_C ?? 0}/Y${PAD_BOOKED_Y ?? 0}" : null; String? OFFBLOCK_DT_A; String? AIRBORNE_DT_A; String? LANDING_DT_A; String? ONBLOCK_DT_A; List get blocks_a => [ (OFFBLOCK_DT_A ?? "").parseyyyymmddhhmm(), (AIRBORNE_DT_A ?? "").parseyyyymmddhhmm(), (LANDING_DT_A ?? "").parseyyyymmddhhmm(), (ONBLOCK_DT_A ?? "").parseyyyymmddhhmm() ]; String get flt_status { if (blocks[3] != null) { return "Arrived"; } else if (blocks[2] != null) { return "Landed"; } else if (blocks[1] != null) { return "Inflight"; } else if (blocks[0] != null) { return "Taxiout"; } else if (jdepest != null && jarrsched != null && jdepest!.isAfter(jdepsched!)) { return "Delayed"; } else { return "Sched"; } } String? OFFBLOCK_DT_F; String? AIRBORNE_DT_F; String? LANDING_DT_F; String? ONBLOCK_DT_F; List get blocks_f => [ (OFFBLOCK_DT_F ?? "").parseyyyymmddhhmm(), (AIRBORNE_DT_F ?? "").parseyyyymmddhhmm(), (LANDING_DT_F ?? "").parseyyyymmddhhmm(), (ONBLOCK_DT_F ?? "").parseyyyymmddhhmm() ]; String? OFFBLOCK_DT_M; String? AIRBORNE_DT_M; String? LANDING_DT_M; String? ONBLOCK_DT_M; List get blocks_m => [ (OFFBLOCK_DT_M ?? "").parseyyyymmddhhmm(), (AIRBORNE_DT_M ?? "").parseyyyymmddhhmm(), (LANDING_DT_M ?? "").parseyyyymmddhhmm(), (ONBLOCK_DT_M ?? "").parseyyyymmddhhmm() ]; List get blocks => [ blocks_m[0] ?? blocks_a[0] ?? blocks_f[0], blocks_m[1] ?? blocks_a[1] ?? blocks_f[1], blocks_m[2] ?? blocks_a[2] ?? blocks_f[2], blocks_m[3] ?? blocks_a[3] ?? blocks_f[3] ]; Jiffy? get jdep => blocks[0] ?? jdepest ?? jdepsched; Jiffy? get jarr => blocks[3] ?? blocks[2]?.add(minutes: 5) ?? (eet == null ? null : blocks[1]?.addDuration(eet!).add(minutes: 8)) ?? (eet == null ? null : blocks[0]?.add(minutes: 5).addDuration(eet!).add(minutes: 8)) ?? (eet == null ? null : jdep?.addDuration(eet!).add(minutes: 8).add(minutes: 5)) ?? jarrest ?? jarrsched; String? EET; Duration? get eet => EET == null ? null : Duration(minutes: int.parse(EET!)); Acleg({ this.LEG_NO, this.FN_CARRIER, this.FN_NUMBER, this.FN_SUFFIX, this.DAY_OF_ORIGIN, this.AC_OWNER, this.AC_SUBTYPE, this.AC_VERSION, this.AC_REGISTRATION, this.DEP_AP_ACTUAL, this.DEP_AP_SCHED, this.DEP_DT_EST, this.DEP_SCHED_DT, this.ARR_AP_ACTUAL, this.ARR_AP_SCHED, this.ARR_DT_EST, this.ARR_SCHED_DT, this.SLOT_TIME_ACTUAL, this.LEG_TYPE, this.STATUS, this.EMPLOYER_COCKPIT, this.EMPLOYER_CABIN, this.CYCLES, this.DELAY_CODE_01, this.DELAY_CODE_02, this.DELAY_CODE_03, this.DELAY_CODE_04, this.DELAY_TIME_01, this.DELAY_TIME_02, this.DELAY_TIME_03, this.DELAY_TIME_04, this.SUBDELAY_CODE_01, this.SUBDELAY_CODE_02, this.SUBDELAY_CODE_03, this.SUBDELAY_CODE_04, this.PAX_BOOKED_C, this.PAX_BOOKED_Y, this.PAX_BOOKED_TRS_C, this.PAX_BOOKED_TRS_Y, this.PAD_BOOKED_C, this.PAD_BOOKED_Y, this.OFFBLOCK_DT_A, this.AIRBORNE_DT_A, this.LANDING_DT_A, this.ONBLOCK_DT_A, this.OFFBLOCK_DT_F, this.AIRBORNE_DT_F, this.LANDING_DT_F, this.ONBLOCK_DT_F, this.OFFBLOCK_DT_M, this.AIRBORNE_DT_M, this.LANDING_DT_M, this.ONBLOCK_DT_M, this.EET, }); Acleg copyWith({ String? LEG_NO, String? FN_CARRIER, String? FN_NUMBER, String? FN_SUFFIX, String? DAY_OF_ORIGIN, String? AC_OWNER, String? AC_SUBTYPE, String? AC_VERSION, String? AC_REGISTRATION, String? DEP_AP_ACTUAL, String? DEP_AP_SCHED, String? DEP_DT_EST, String? DEP_SCHED_DT, String? ARR_AP_ACTUAL, String? ARR_AP_SCHED, String? ARR_DT_EST, String? ARR_SCHED_DT, String? SLOT_TIME_ACTUAL, String? LEG_TYPE, String? STATUS, String? EMPLOYER_COCKPIT, String? EMPLOYER_CABIN, String? CYCLES, String? DELAY_CODE_01, String? DELAY_CODE_02, String? DELAY_CODE_03, String? DELAY_CODE_04, String? DELAY_TIME_01, String? DELAY_TIME_02, String? DELAY_TIME_03, String? DELAY_TIME_04, String? SUBDELAY_CODE_01, String? SUBDELAY_CODE_02, String? SUBDELAY_CODE_03, String? SUBDELAY_CODE_04, String? PAX_BOOKED_C, String? PAX_BOOKED_Y, String? PAX_BOOKED_TRS_C, String? PAX_BOOKED_TRS_Y, String? PAD_BOOKED_C, String? PAD_BOOKED_Y, String? OFFBLOCK_DT_A, String? AIRBORNE_DT_A, String? LANDING_DT_A, String? ONBLOCK_DT_A, String? OFFBLOCK_DT_F, String? AIRBORNE_DT_F, String? LANDING_DT_F, String? ONBLOCK_DT_F, String? OFFBLOCK_DT_M, String? AIRBORNE_DT_M, String? LANDING_DT_M, String? ONBLOCK_DT_M, String? EET, }) { return Acleg( LEG_NO: LEG_NO ?? this.LEG_NO, FN_CARRIER: FN_CARRIER ?? this.FN_CARRIER, FN_NUMBER: FN_NUMBER ?? this.FN_NUMBER, FN_SUFFIX: FN_SUFFIX ?? this.FN_SUFFIX, DAY_OF_ORIGIN: DAY_OF_ORIGIN ?? this.DAY_OF_ORIGIN, AC_OWNER: AC_OWNER ?? this.AC_OWNER, AC_SUBTYPE: AC_SUBTYPE ?? this.AC_SUBTYPE, AC_VERSION: AC_VERSION ?? this.AC_VERSION, AC_REGISTRATION: AC_REGISTRATION ?? this.AC_REGISTRATION, DEP_AP_ACTUAL: DEP_AP_ACTUAL ?? this.DEP_AP_ACTUAL, DEP_AP_SCHED: DEP_AP_SCHED ?? this.DEP_AP_SCHED, DEP_DT_EST: DEP_DT_EST ?? this.DEP_DT_EST, DEP_SCHED_DT: DEP_SCHED_DT ?? this.DEP_SCHED_DT, ARR_AP_ACTUAL: ARR_AP_ACTUAL ?? this.ARR_AP_ACTUAL, ARR_AP_SCHED: ARR_AP_SCHED ?? this.ARR_AP_SCHED, ARR_DT_EST: ARR_DT_EST ?? this.ARR_DT_EST, ARR_SCHED_DT: ARR_SCHED_DT ?? this.ARR_SCHED_DT, SLOT_TIME_ACTUAL: SLOT_TIME_ACTUAL ?? this.SLOT_TIME_ACTUAL, LEG_TYPE: LEG_TYPE ?? this.LEG_TYPE, STATUS: STATUS ?? this.STATUS, EMPLOYER_COCKPIT: EMPLOYER_COCKPIT ?? this.EMPLOYER_COCKPIT, EMPLOYER_CABIN: EMPLOYER_CABIN ?? this.EMPLOYER_CABIN, CYCLES: CYCLES ?? this.CYCLES, DELAY_CODE_01: DELAY_CODE_01 ?? this.DELAY_CODE_01, DELAY_CODE_02: DELAY_CODE_02 ?? this.DELAY_CODE_02, DELAY_CODE_03: DELAY_CODE_03 ?? this.DELAY_CODE_03, DELAY_CODE_04: DELAY_CODE_04 ?? this.DELAY_CODE_04, DELAY_TIME_01: DELAY_TIME_01 ?? this.DELAY_TIME_01, DELAY_TIME_02: DELAY_TIME_02 ?? this.DELAY_TIME_02, DELAY_TIME_03: DELAY_TIME_03 ?? this.DELAY_TIME_03, DELAY_TIME_04: DELAY_TIME_04 ?? this.DELAY_TIME_04, SUBDELAY_CODE_01: SUBDELAY_CODE_01 ?? this.SUBDELAY_CODE_01, SUBDELAY_CODE_02: SUBDELAY_CODE_02 ?? this.SUBDELAY_CODE_02, SUBDELAY_CODE_03: SUBDELAY_CODE_03 ?? this.SUBDELAY_CODE_03, SUBDELAY_CODE_04: SUBDELAY_CODE_04 ?? this.SUBDELAY_CODE_04, PAX_BOOKED_C: PAX_BOOKED_C ?? this.PAX_BOOKED_C, PAX_BOOKED_Y: PAX_BOOKED_Y ?? this.PAX_BOOKED_Y, PAX_BOOKED_TRS_C: PAX_BOOKED_TRS_C ?? this.PAX_BOOKED_TRS_C, PAX_BOOKED_TRS_Y: PAX_BOOKED_TRS_Y ?? this.PAX_BOOKED_TRS_Y, PAD_BOOKED_C: PAD_BOOKED_C ?? this.PAD_BOOKED_C, PAD_BOOKED_Y: PAD_BOOKED_Y ?? this.PAD_BOOKED_Y, OFFBLOCK_DT_A: OFFBLOCK_DT_A ?? this.OFFBLOCK_DT_A, AIRBORNE_DT_A: AIRBORNE_DT_A ?? this.AIRBORNE_DT_A, LANDING_DT_A: LANDING_DT_A ?? this.LANDING_DT_A, ONBLOCK_DT_A: ONBLOCK_DT_A ?? this.ONBLOCK_DT_A, OFFBLOCK_DT_F: OFFBLOCK_DT_F ?? this.OFFBLOCK_DT_F, AIRBORNE_DT_F: AIRBORNE_DT_F ?? this.AIRBORNE_DT_F, LANDING_DT_F: LANDING_DT_F ?? this.LANDING_DT_F, ONBLOCK_DT_F: ONBLOCK_DT_F ?? this.ONBLOCK_DT_F, OFFBLOCK_DT_M: OFFBLOCK_DT_M ?? this.OFFBLOCK_DT_M, AIRBORNE_DT_M: AIRBORNE_DT_M ?? this.AIRBORNE_DT_M, LANDING_DT_M: LANDING_DT_M ?? this.LANDING_DT_M, ONBLOCK_DT_M: ONBLOCK_DT_M ?? this.ONBLOCK_DT_M, EET: EET ?? this.EET, ); } Map toMap() { return { 'LEG_NO': LEG_NO, 'FN_CARRIER': FN_CARRIER, 'FN_NUMBER': FN_NUMBER, 'FN_SUFFIX': FN_SUFFIX, 'DAY_OF_ORIGIN': DAY_OF_ORIGIN, 'AC_OWNER': AC_OWNER, 'AC_SUBTYPE': AC_SUBTYPE, 'AC_VERSION': AC_VERSION, 'AC_REGISTRATION': AC_REGISTRATION, 'DEP_AP_ACTUAL': DEP_AP_ACTUAL, 'DEP_AP_SCHED': DEP_AP_SCHED, 'DEP_DT_EST': DEP_DT_EST, 'DEP_SCHED_DT': DEP_SCHED_DT, 'ARR_AP_ACTUAL': ARR_AP_ACTUAL, 'ARR_AP_SCHED': ARR_AP_SCHED, 'ARR_DT_EST': ARR_DT_EST, 'ARR_SCHED_DT': ARR_SCHED_DT, 'SLOT_TIME_ACTUAL': SLOT_TIME_ACTUAL, 'LEG_TYPE': LEG_TYPE, 'STATUS': STATUS, 'EMPLOYER_COCKPIT': EMPLOYER_COCKPIT, 'EMPLOYER_CABIN': EMPLOYER_CABIN, 'CYCLES': CYCLES, 'DELAY_CODE_01': DELAY_CODE_01, 'DELAY_CODE_02': DELAY_CODE_02, 'DELAY_CODE_03': DELAY_CODE_03, 'DELAY_CODE_04': DELAY_CODE_04, 'DELAY_TIME_01': DELAY_TIME_01, 'DELAY_TIME_02': DELAY_TIME_02, 'DELAY_TIME_03': DELAY_TIME_03, 'DELAY_TIME_04': DELAY_TIME_04, 'SUBDELAY_CODE_01': SUBDELAY_CODE_01, 'SUBDELAY_CODE_02': SUBDELAY_CODE_02, 'SUBDELAY_CODE_03': SUBDELAY_CODE_03, 'SUBDELAY_CODE_04': SUBDELAY_CODE_04, 'PAX_BOOKED_C': PAX_BOOKED_C, 'PAX_BOOKED_Y': PAX_BOOKED_Y, 'PAX_BOOKED_TRS_C': PAX_BOOKED_TRS_C, 'PAX_BOOKED_TRS_Y': PAX_BOOKED_TRS_Y, 'PAD_BOOKED_C': PAD_BOOKED_C, 'PAD_BOOKED_Y': PAD_BOOKED_Y, 'OFFBLOCK_DT_A': OFFBLOCK_DT_A, 'AIRBORNE_DT_A': AIRBORNE_DT_A, 'LANDING_DT_A': LANDING_DT_A, 'ONBLOCK_DT_A': ONBLOCK_DT_A, 'OFFBLOCK_DT_F': OFFBLOCK_DT_F, 'AIRBORNE_DT_F': AIRBORNE_DT_F, 'LANDING_DT_F': LANDING_DT_F, 'ONBLOCK_DT_F': ONBLOCK_DT_F, 'OFFBLOCK_DT_M': OFFBLOCK_DT_M, 'AIRBORNE_DT_M': AIRBORNE_DT_M, 'LANDING_DT_M': LANDING_DT_M, 'ONBLOCK_DT_M': ONBLOCK_DT_M, 'EET': EET, }; } factory Acleg.fromList(List datalist) { //print(datalist); if (datalist.length >= 54) { return Acleg( LEG_NO: datalist[0], FN_CARRIER: datalist[1], FN_NUMBER: datalist[2], FN_SUFFIX: datalist[3], DAY_OF_ORIGIN: datalist[4], AC_OWNER: datalist[5], AC_SUBTYPE: datalist[6], AC_VERSION: datalist[7], AC_REGISTRATION: datalist[8], DEP_AP_ACTUAL: datalist[9], DEP_AP_SCHED: datalist[10], DEP_DT_EST: datalist[11], DEP_SCHED_DT: datalist[12], ARR_AP_ACTUAL: datalist[13], ARR_AP_SCHED: datalist[14], ARR_DT_EST: datalist[15], ARR_SCHED_DT: datalist[16], SLOT_TIME_ACTUAL: datalist[17], LEG_TYPE: datalist[18], STATUS: datalist[19], EMPLOYER_COCKPIT: datalist[20], EMPLOYER_CABIN: datalist[21], CYCLES: datalist[22], DELAY_CODE_01: datalist[23], DELAY_CODE_02: datalist[24], DELAY_CODE_03: datalist[25], DELAY_CODE_04: datalist[26], DELAY_TIME_01: datalist[27], DELAY_TIME_02: datalist[28], DELAY_TIME_03: datalist[29], DELAY_TIME_04: datalist[30], SUBDELAY_CODE_01: datalist[31], SUBDELAY_CODE_02: datalist[32], SUBDELAY_CODE_03: datalist[33], SUBDELAY_CODE_04: datalist[34], PAX_BOOKED_C: datalist[35], PAX_BOOKED_Y: datalist[36], PAX_BOOKED_TRS_C: datalist[37], PAX_BOOKED_TRS_Y: datalist[38], PAD_BOOKED_C: datalist[39], PAD_BOOKED_Y: datalist[40], OFFBLOCK_DT_A: datalist[41], AIRBORNE_DT_A: datalist[42], LANDING_DT_A: datalist[43], ONBLOCK_DT_A: datalist[44], OFFBLOCK_DT_F: datalist[45], AIRBORNE_DT_F: datalist[46], LANDING_DT_F: datalist[47], ONBLOCK_DT_F: datalist[48], OFFBLOCK_DT_M: datalist[49], AIRBORNE_DT_M: datalist[50], LANDING_DT_M: datalist[51], ONBLOCK_DT_M: datalist[52], EET: datalist[53]); } else { return Acleg(); } } factory Acleg.fromMap(Map map) { return Acleg( LEG_NO: map['LEG_NO'] != null ? map['LEG_NO'] as String : null, FN_CARRIER: map['FN_CARRIER'] != null ? map['FN_CARRIER'] as String : null, FN_NUMBER: map['FN_NUMBER'] != null ? map['FN_NUMBER'] as String : null, FN_SUFFIX: map['FN_SUFFIX'] != null ? map['FN_SUFFIX'] as String : null, DAY_OF_ORIGIN: map['DAY_OF_ORIGIN'] != null ? map['DAY_OF_ORIGIN'] as String : null, AC_OWNER: map['AC_OWNER'] != null ? map['AC_OWNER'] as String : null, AC_SUBTYPE: map['AC_SUBTYPE'] != null ? map['AC_SUBTYPE'] as String : null, AC_VERSION: map['AC_VERSION'] != null ? map['AC_VERSION'] as String : null, AC_REGISTRATION: map['AC_REGISTRATION'] != null ? map['AC_REGISTRATION'] as String : null, DEP_AP_ACTUAL: map['DEP_AP_ACTUAL'] != null ? map['DEP_AP_ACTUAL'] as String : null, DEP_AP_SCHED: map['DEP_AP_SCHED'] != null ? map['DEP_AP_SCHED'] as String : null, DEP_DT_EST: map['DEP_DT_EST'] != null ? map['DEP_DT_EST'] as String : null, DEP_SCHED_DT: map['DEP_SCHED_DT'] != null ? map['DEP_SCHED_DT'] as String : null, ARR_AP_ACTUAL: map['ARR_AP_ACTUAL'] != null ? map['ARR_AP_ACTUAL'] as String : null, ARR_AP_SCHED: map['ARR_AP_SCHED'] != null ? map['ARR_AP_SCHED'] as String : null, ARR_DT_EST: map['ARR_DT_EST'] != null ? map['ARR_DT_EST'] as String : null, ARR_SCHED_DT: map['ARR_SCHED_DT'] != null ? map['ARR_SCHED_DT'] as String : null, SLOT_TIME_ACTUAL: map['SLOT_TIME_ACTUAL'] != null ? map['SLOT_TIME_ACTUAL'] as String : null, LEG_TYPE: map['LEG_TYPE'] != null ? map['LEG_TYPE'] as String : null, EMPLOYER_COCKPIT: map['EMPLOYER_COCKPIT'] != null ? map['EMPLOYER_COCKPIT'] as String : null, EMPLOYER_CABIN: map['EMPLOYER_CABIN'] != null ? map['EMPLOYER_CABIN'] as String : null, // CYCLES: map['CYCLES'] != null ? map['CYCLES'] as String : null, DELAY_CODE_01: map['DELAY_CODE_01'] != null ? map['DELAY_CODE_01'] as String : null, DELAY_CODE_02: map['DELAY_CODE_02'] != null ? map['DELAY_CODE_02'] as String : null, DELAY_CODE_03: map['DELAY_CODE_03'] != null ? map['DELAY_CODE_03'] as String : null, DELAY_CODE_04: map['DELAY_CODE_04'] != null ? map['DELAY_CODE_04'] as String : null, DELAY_TIME_01: map['DELAY_TIME_01'] != null ? map['DELAY_TIME_01'] as String : null, DELAY_TIME_02: map['DELAY_TIME_02'] != null ? map['DELAY_TIME_02'] as String : null, DELAY_TIME_03: map['DELAY_TIME_03'] != null ? map['DELAY_TIME_03'] as String : null, DELAY_TIME_04: map['DELAY_TIME_04'] != null ? map['DELAY_TIME_04'] as String : null, SUBDELAY_CODE_01: map['SUBDELAY_CODE_01'] != null ? map['SUBDELAY_CODE_01'] as String : null, SUBDELAY_CODE_02: map['SUBDELAY_CODE_02'] != null ? map['SUBDELAY_CODE_02'] as String : null, SUBDELAY_CODE_03: map['SUBDELAY_CODE_03'] != null ? map['SUBDELAY_CODE_03'] as String : null, SUBDELAY_CODE_04: map['SUBDELAY_CODE_04'] != null ? map['SUBDELAY_CODE_04'] as String : null, PAX_BOOKED_C: map['PAX_BOOKED_C'] != null ? map['PAX_BOOKED_C'] as String : null, PAX_BOOKED_Y: map['PAX_BOOKED_Y'] != null ? map['PAX_BOOKED_Y'] as String : null, PAX_BOOKED_TRS_C: map['PAX_BOOKED_TRS_C'] != null ? map['PAX_BOOKED_TRS_C'] as String : null, PAX_BOOKED_TRS_Y: map['PAX_BOOKED_TRS_Y'] != null ? map['PAX_BOOKED_TRS_Y'] as String : null, PAD_BOOKED_C: map['PAD_BOOKED_C'] != null ? map['PAD_BOOKED_C'] as String : null, PAD_BOOKED_Y: map['PAD_BOOKED_Y'] != null ? map['PAD_BOOKED_Y'] as String : null, OFFBLOCK_DT_A: map['OFFBLOCK_DT_A'] != null ? map['OFFBLOCK_DT_A'] as String : null, AIRBORNE_DT_A: map['AIRBORNE_DT_A'] != null ? map['AIRBORNE_DT_A'] as String : null, LANDING_DT_A: map['LANDING_DT_A'] != null ? map['LANDING_DT_A'] as String : null, ONBLOCK_DT_A: map['ONBLOCK_DT_A'] != null ? map['ONBLOCK_DT_A'] as String : null, OFFBLOCK_DT_F: map['OFFBLOCK_DT_F'] != null ? map['OFFBLOCK_DT_F'] as String : null, AIRBORNE_DT_F: map['AIRBORNE_DT_F'] != null ? map['AIRBORNE_DT_F'] as String : null, LANDING_DT_F: map['LANDING_DT_F'] != null ? map['LANDING_DT_F'] as String : null, ONBLOCK_DT_F: map['ONBLOCK_DT_F'] != null ? map['ONBLOCK_DT_F'] as String : null, OFFBLOCK_DT_M: map['OFFBLOCK_DT_M'] != null ? map['OFFBLOCK_DT_M'] as String : null, AIRBORNE_DT_M: map['AIRBORNE_DT_M'] != null ? map['AIRBORNE_DT_M'] as String : null, LANDING_DT_M: map['LANDING_DT_M'] != null ? map['LANDING_DT_M'] as String : null, ONBLOCK_DT_M: map['ONBLOCK_DT_M'] != null ? map['ONBLOCK_DT_M'] as String : null, EET: map['EET'] != null ? map['EET'] as String : null, ); } String toJson() => json.encode(toMap()); factory Acleg.fromJson(String source) => Acleg.fromMap(json.decode(source) as Map); @override String toString() { return 'Acleg(LEG_NO: $LEG_NO, FN_CARRIER: $FN_CARRIER, FN_NUMBER: $FN_NUMBER, FN_SUFFIX: $FN_SUFFIX, DAY_OF_ORIGIN: $DAY_OF_ORIGIN, AC_OWNER: $AC_OWNER, AC_SUBTYPE: $AC_SUBTYPE, AC_VERSION: $AC_VERSION, AC_REGISTRATION: $AC_REGISTRATION, DEP_AP_ACTUAL: $DEP_AP_ACTUAL, DEP_AP_SCHED: $DEP_AP_SCHED, DEP_DT_EST: $DEP_DT_EST, DEP_SCHED_DT: $DEP_SCHED_DT, ARR_AP_ACTUAL: $ARR_AP_ACTUAL, ARR_AP_SCHED: $ARR_AP_SCHED, ARR_DT_EST: $ARR_DT_EST, ARR_SCHED_DT: $ARR_SCHED_DT, SLOT_TIME_ACTUAL: $SLOT_TIME_ACTUAL, LEG_TYPE: $LEG_TYPE, EMPLOYER_COCKPIT: $EMPLOYER_COCKPIT, EMPLOYER_CABIN: $EMPLOYER_CABIN, CYCLES: $CYCLES, DELAY_CODE_01: $DELAY_CODE_01, DELAY_CODE_02: $DELAY_CODE_02, DELAY_CODE_03: $DELAY_CODE_03, DELAY_CODE_04: $DELAY_CODE_04, DELAY_TIME_01: $DELAY_TIME_01, DELAY_TIME_02: $DELAY_TIME_02, DELAY_TIME_03: $DELAY_TIME_03, DELAY_TIME_04: $DELAY_TIME_04, SUBDELAY_CODE_01: $SUBDELAY_CODE_01, SUBDELAY_CODE_02: $SUBDELAY_CODE_02, SUBDELAY_CODE_03: $SUBDELAY_CODE_03, SUBDELAY_CODE_04: $SUBDELAY_CODE_04, PAX_BOOKED_C: $PAX_BOOKED_C, PAX_BOOKED_Y: $PAX_BOOKED_Y, PAX_BOOKED_TRS_C: $PAX_BOOKED_TRS_C, PAX_BOOKED_TRS_Y: $PAX_BOOKED_TRS_Y, PAD_BOOKED_C: $PAD_BOOKED_C, PAD_BOOKED_Y: $PAD_BOOKED_Y, OFFBLOCK_DT_A: $OFFBLOCK_DT_A, AIRBORNE_DT_A: $AIRBORNE_DT_A, LANDING_DT_A: $LANDING_DT_A, ONBLOCK_DT_A: $ONBLOCK_DT_A, OFFBLOCK_DT_F: $OFFBLOCK_DT_F, AIRBORNE_DT_F: $AIRBORNE_DT_F, LANDING_DT_F: $LANDING_DT_F, ONBLOCK_DT_F: $ONBLOCK_DT_F, OFFBLOCK_DT_M: $OFFBLOCK_DT_M, AIRBORNE_DT_M: $AIRBORNE_DT_M, LANDING_DT_M: $LANDING_DT_M, ONBLOCK_DT_M: $ONBLOCK_DT_M, EET: $EET)'; } @override bool operator ==(covariant Acleg other) { if (identical(this, other)) return true; return other.LEG_NO == LEG_NO && other.FN_CARRIER == FN_CARRIER && other.FN_NUMBER == FN_NUMBER && other.FN_SUFFIX == FN_SUFFIX && other.DAY_OF_ORIGIN == DAY_OF_ORIGIN && other.AC_OWNER == AC_OWNER && other.AC_SUBTYPE == AC_SUBTYPE && other.AC_VERSION == AC_VERSION && other.AC_REGISTRATION == AC_REGISTRATION && other.DEP_AP_ACTUAL == DEP_AP_ACTUAL && other.DEP_AP_SCHED == DEP_AP_SCHED && other.DEP_DT_EST == DEP_DT_EST && other.DEP_SCHED_DT == DEP_SCHED_DT && other.ARR_AP_ACTUAL == ARR_AP_ACTUAL && other.ARR_AP_SCHED == ARR_AP_SCHED && other.ARR_DT_EST == ARR_DT_EST && other.ARR_SCHED_DT == ARR_SCHED_DT && other.SLOT_TIME_ACTUAL == SLOT_TIME_ACTUAL && other.LEG_TYPE == LEG_TYPE && other.EMPLOYER_COCKPIT == EMPLOYER_COCKPIT && other.EMPLOYER_CABIN == EMPLOYER_CABIN && other.CYCLES == CYCLES && other.DELAY_CODE_01 == DELAY_CODE_01 && other.DELAY_CODE_02 == DELAY_CODE_02 && other.DELAY_CODE_03 == DELAY_CODE_03 && other.DELAY_CODE_04 == DELAY_CODE_04 && other.DELAY_TIME_01 == DELAY_TIME_01 && other.DELAY_TIME_02 == DELAY_TIME_02 && other.DELAY_TIME_03 == DELAY_TIME_03 && other.DELAY_TIME_04 == DELAY_TIME_04 && other.SUBDELAY_CODE_01 == SUBDELAY_CODE_01 && other.SUBDELAY_CODE_02 == SUBDELAY_CODE_02 && other.SUBDELAY_CODE_03 == SUBDELAY_CODE_03 && other.SUBDELAY_CODE_04 == SUBDELAY_CODE_04 && other.PAX_BOOKED_C == PAX_BOOKED_C && other.PAX_BOOKED_Y == PAX_BOOKED_Y && other.PAX_BOOKED_TRS_C == PAX_BOOKED_TRS_C && other.PAX_BOOKED_TRS_Y == PAX_BOOKED_TRS_Y && other.PAD_BOOKED_C == PAD_BOOKED_C && other.PAD_BOOKED_Y == PAD_BOOKED_Y && other.OFFBLOCK_DT_A == OFFBLOCK_DT_A && other.AIRBORNE_DT_A == AIRBORNE_DT_A && other.LANDING_DT_A == LANDING_DT_A && other.ONBLOCK_DT_A == ONBLOCK_DT_A && other.OFFBLOCK_DT_F == OFFBLOCK_DT_F && other.AIRBORNE_DT_F == AIRBORNE_DT_F && other.LANDING_DT_F == LANDING_DT_F && other.ONBLOCK_DT_F == ONBLOCK_DT_F && other.OFFBLOCK_DT_M == OFFBLOCK_DT_M && other.AIRBORNE_DT_M == AIRBORNE_DT_M && other.LANDING_DT_M == LANDING_DT_M && other.ONBLOCK_DT_M == ONBLOCK_DT_M && other.EET == EET; } @override int get hashCode { return LEG_NO.hashCode ^ FN_CARRIER.hashCode ^ FN_NUMBER.hashCode ^ FN_SUFFIX.hashCode ^ DAY_OF_ORIGIN.hashCode ^ AC_OWNER.hashCode ^ AC_SUBTYPE.hashCode ^ AC_VERSION.hashCode ^ AC_REGISTRATION.hashCode ^ DEP_AP_ACTUAL.hashCode ^ DEP_AP_SCHED.hashCode ^ DEP_DT_EST.hashCode ^ DEP_SCHED_DT.hashCode ^ ARR_AP_ACTUAL.hashCode ^ ARR_AP_SCHED.hashCode ^ ARR_DT_EST.hashCode ^ ARR_SCHED_DT.hashCode ^ SLOT_TIME_ACTUAL.hashCode ^ LEG_TYPE.hashCode ^ EMPLOYER_COCKPIT.hashCode ^ EMPLOYER_CABIN.hashCode ^ CYCLES.hashCode ^ DELAY_CODE_01.hashCode ^ DELAY_CODE_02.hashCode ^ DELAY_CODE_03.hashCode ^ DELAY_CODE_04.hashCode ^ DELAY_TIME_01.hashCode ^ DELAY_TIME_02.hashCode ^ DELAY_TIME_03.hashCode ^ DELAY_TIME_04.hashCode ^ SUBDELAY_CODE_01.hashCode ^ SUBDELAY_CODE_02.hashCode ^ SUBDELAY_CODE_03.hashCode ^ SUBDELAY_CODE_04.hashCode ^ PAX_BOOKED_C.hashCode ^ PAX_BOOKED_Y.hashCode ^ PAX_BOOKED_TRS_C.hashCode ^ PAX_BOOKED_TRS_Y.hashCode ^ PAD_BOOKED_C.hashCode ^ PAD_BOOKED_Y.hashCode ^ OFFBLOCK_DT_A.hashCode ^ AIRBORNE_DT_A.hashCode ^ LANDING_DT_A.hashCode ^ ONBLOCK_DT_A.hashCode ^ OFFBLOCK_DT_F.hashCode ^ AIRBORNE_DT_F.hashCode ^ LANDING_DT_F.hashCode ^ ONBLOCK_DT_F.hashCode ^ OFFBLOCK_DT_M.hashCode ^ AIRBORNE_DT_M.hashCode ^ LANDING_DT_M.hashCode ^ ONBLOCK_DT_M.hashCode ^ EET.hashCode; } }