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 }