Warning, /pim/itinerary/src/app/FlightEditor.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2018 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 import QtQuick 0008 import QtQuick.Layouts 0009 import QtQuick.Controls as QQC2 0010 import org.kde.kirigami as Kirigami 0011 import org.kde.kirigamiaddons.formcard as FormCard 0012 import org.kde.kitinerary 0013 import org.kde.itinerary 0014 0015 EditorPage { 0016 id: root 0017 title: i18n("Edit Flight") 0018 0019 isValidInput: departureTime.hasValue && (!arrivalTime.hasValue || departureTime.value < arrivalTime.value) 0020 0021 function apply(reservation) { 0022 var flight = reservation.reservationFor; 0023 if (boardingTime.isModified) 0024 flight = Util.setDateTimePreserveTimezone(flight, "boardingTime", boardingTime.value); 0025 0026 let airport = flight.departureAirport; 0027 airport.name = departureAirportName.text; 0028 flight.departureAirport = airport; 0029 flight.departureGate = departureGate.text; 0030 flight.departureTerminal = departureTerminal.text; 0031 if (departureTime.isModified) 0032 flight = Util.setDateTimePreserveTimezone(flight, "departureTime", departureTime.value); 0033 0034 airport = flight.arrivalAirport; 0035 airport.name = arrivalAirportName.text; 0036 flight.arrivalAirport = airport; 0037 flight.arrivalTerminal = arrivalTerminal.text; 0038 if (arrivalTime.isModified) 0039 flight = Util.setDateTimePreserveTimezone(flight, "arrivalTime", arrivalTime.value); 0040 0041 var newRes = reservation; 0042 newRes.airplaneSeat = seat.text; 0043 newRes.reservationFor = flight; 0044 bookingEdit.apply(newRes); 0045 return newRes; 0046 } 0047 0048 ColumnLayout { 0049 spacing: 0 0050 0051 QQC2.Label { 0052 text: "✈️" 0053 horizontalAlignment: Text.AlignHCenter 0054 0055 font { 0056 family: "emoji" 0057 pointSize: 40 0058 } 0059 0060 Layout.fillWidth: true 0061 Layout.alignment: Qt.AlignHCenter 0062 } 0063 0064 Kirigami.Heading { 0065 text: reservation.reservationFor.airline.iataCode + " " + reservation.reservationFor.flightNumber 0066 wrapMode: Text.WordWrap 0067 horizontalAlignment: Text.AlignHCenter 0068 0069 Layout.fillWidth: true 0070 Layout.maximumWidth: Kirigami.Units.gridUnit * 26 0071 Layout.alignment: Qt.AlignHCenter 0072 } 0073 0074 FormCard.FormHeader { 0075 title: i18nc("flight departure", "Departure - %1", reservation.reservationFor.departureAirport.iataCode) 0076 } 0077 0078 FormCard.FormCard { 0079 FormCard.FormTextFieldDelegate { 0080 id: departureAirportName 0081 label: i18n("Airport") 0082 text: reservation.reservationFor.departureAirport.name 0083 } 0084 FormCard.FormDelegateSeparator {} 0085 FormCard.FormTextFieldDelegate { 0086 id: departureTerminal 0087 text: reservation.reservationFor.departureTerminal 0088 label: i18nc("flight departure terminal", "Terminal") 0089 } 0090 FormCard.FormDelegateSeparator {} 0091 FormDateTimeEditDelegate { 0092 id: departureTime 0093 text: i18nc("flight departure time", "Time") 0094 obj: reservation.reservationFor 0095 propertyName: "departureTime" 0096 initialValue: reservation.reservationFor.departureDay 0097 status: Kirigami.MessageType.Error 0098 statusMessage: departureTime.hasValue ? '' : i18nc("flight departure", "Departure time has to be set.") 0099 } 0100 FormCard.FormDelegateSeparator {} 0101 FormCard.FormTextFieldDelegate { 0102 id: departureGate 0103 text: reservation.reservationFor.departureGate 0104 label: i18nc("flight departure gate", "Gate") 0105 } 0106 FormCard.FormDelegateSeparator {} 0107 FormDateTimeEditDelegate { 0108 id: boardingTime 0109 text: i18n("Boarding time") 0110 obj: reservation.reservationFor 0111 propertyName: "boardingTime" 0112 initialValue: { 0113 let d = new Date(departureTime.value); 0114 d.setTime(d.getTime() - 30 * 60 * 1000); 0115 return d; 0116 } 0117 status: Kirigami.MessageType.Warning 0118 statusMessage: { 0119 if (boardingTime.hasValue && boardingTime.value > departureTime.value) 0120 return i18nc("flight departure", "Boarding time has to be before the departure time.") 0121 return ''; 0122 } 0123 } 0124 } 0125 0126 FormCard.FormHeader { 0127 title: i18nc("flight arrival", "Arrival - %1", reservation.reservationFor.arrivalAirport.iataCode) 0128 } 0129 0130 FormCard.FormCard { 0131 FormCard.FormTextFieldDelegate { 0132 id: arrivalAirportName 0133 label: i18n("Airport") 0134 text: reservation.reservationFor.arrivalAirport.name 0135 } 0136 FormCard.FormDelegateSeparator {} 0137 FormCard.FormTextFieldDelegate { 0138 id: arrivalTerminal 0139 text: reservation.reservationFor.arrivalTerminal 0140 label: i18nc("flight arrival terminal", "Terminal") 0141 } 0142 FormCard.FormDelegateSeparator {} 0143 FormDateTimeEditDelegate { 0144 id: arrivalTime 0145 text: i18nc("flight arrival time", "Time") 0146 obj: reservation.reservationFor 0147 propertyName: "arrivalTime" 0148 initialValue: { 0149 let d = new Date(departureTime.value); 0150 d.setTime(d.getTime() + 120 * 60 * 1000); 0151 return d; 0152 } 0153 status: Kirigami.MessageType.Error 0154 statusMessage: { 0155 if (arrivalTime.hasValue && arrivalTime.value < departureTime.value) 0156 return i18nc("flight arrival", "Arrival time has to be after the departure time.") 0157 return ''; 0158 } 0159 } 0160 } 0161 0162 FormCard.FormHeader { 0163 title: i18n("Seat") 0164 } 0165 0166 // TODO the below is per reservation, not per batch, so add a selector for that! 0167 FormCard.FormCard { 0168 FormCard.FormTextFieldDelegate { 0169 id: seat 0170 label: i18n("Seat") 0171 text: reservation.airplaneSeat 0172 } 0173 } 0174 0175 BookingEditorCard { 0176 id: bookingEdit 0177 item: root.reservation 0178 } 0179 } 0180 }