Warning, /pim/itinerary/src/app/BoatEditor.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2023 Volker Krause <vkrause@kde.org>
0003     SPDX-License-Identifier: LGPL-2.0-or-later
0004 */
0005 
0006 import QtQuick
0007 import QtQuick.Layouts
0008 import QtQuick.Controls as QQC2
0009 import org.kde.kirigami as Kirigami
0010 import org.kde.kirigamiaddons.formcard as FormCard
0011 import org.kde.i18n.localeData
0012 import org.kde.kitinerary
0013 import org.kde.itinerary
0014 
0015 EditorPage {
0016     id: root
0017     title: i18n("Edit Boat Trip")
0018 
0019     isValidInput: departureTerminalName.text !== "" && arrivalTerminalName.text !== "" && departureTimeEdit.hasValue
0020         && (!arrivalTimeEdit.hasValue || departureTimeEdit.value < arrivalTimeEdit.value)
0021 
0022     function apply(reservation) {
0023         let trip = reservation.reservationFor;
0024         if (departureTimeEdit.isModified)
0025             trip = Util.setDateTimePreserveTimezone(trip, "departureTime", departureTimeEdit.value);
0026         if (arrivalTimeEdit.isModified)
0027             trip = Util.setDateTimePreserveTimezone(trip, "arrivalTime", departureTimeEdit.value);
0028 
0029         let dep = trip.departureBoatTerminal;
0030         dep.name = departureTerminalName.text;
0031         departureAddress.save(dep);
0032         trip.departureBoatTerminal = dep;
0033 
0034         let arr = trip.arrivalBoatTerminal;
0035         arr.name = arrivalTerminalName.text;
0036         arrivalAddress.save(arr);
0037         trip.arrivalBoatTerminal = arr;
0038 
0039         let newRes = reservation;
0040         newRes.reservationFor = trip;
0041         bookingEdit.apply(newRes);
0042         return newRes;
0043     }
0044 
0045     ColumnLayout {
0046         spacing: 0
0047 
0048         CardPageTitle {
0049             emojiIcon: "🛳️"
0050             text: i18n("Boat")
0051         }
0052 
0053         FormCard.FormHeader {
0054             title: i18nc("Boat departure", "Departure")
0055         }
0056 
0057         FormCard.FormCard {
0058             FormDateTimeEditDelegate {
0059                 id: departureTimeEdit
0060                 text: i18nc("Boat departure", "Departure Time")
0061                 obj: reservation.reservationFor
0062                 propertyName: "departureTime"
0063                 status: Kirigami.MessageType.Error
0064                 statusMessage: departureTimeEdit.hasValue ? '' : i18n("Departure time has to be set.")
0065             }
0066             FormCard.FormDelegateSeparator {}
0067             FormCard.FormTextFieldDelegate {
0068                 id: departureTerminalName
0069                 label: i18nc("boat terminal", "Terminal Name")
0070                 text: reservation.reservationFor.departureBoatTerminal.name
0071                 status: Kirigami.MessageType.Error
0072                 statusMessage: text === "" ? i18n("Departure terminal must not be empty.") : ""
0073             }
0074             FormCard.FormDelegateSeparator {}
0075             FormPlaceEditorDelegate {
0076                 id: departureAddress
0077                 place: {
0078                     if (root.batchId || !root.reservation.reservationFor.departureBoatTerminal.address.isEmpty || root.reservation.reservationFor.departureBoatTerminal.geo.isValid)
0079                         return reservation.reservationFor.departureBoatTerminal;
0080                     return cityAtTime(root.reservation.reservationFor.departureTime);
0081                 }
0082             }
0083         }
0084 
0085         FormCard.FormHeader {
0086             title: i18nc("Boat arrival", "Arrival")
0087         }
0088 
0089         FormCard.FormCard {
0090             FormDateTimeEditDelegate {
0091                 id: arrivalTimeEdit
0092                 text: i18nc("Boat arrival", "Arrival Time")
0093                 obj: reservation.reservationFor
0094                 propertyName: "arrivalTime"
0095                 initialValue: {
0096                     let d = new Date(departureTimeEdit.value);
0097                     d.setHours(d.getHours() + 8);
0098                     return d;
0099                 }
0100                 status: Kirigami.MessageType.Error
0101                 statusMessage: {
0102                     if (arrivalTimeEdit.hasValue && arrivalTimeEdit.value < departureTimeEdit.value)
0103                         return i18n("Arrival time has to be after the departure time.")
0104                     return '';
0105                 }
0106             }
0107             FormCard.FormDelegateSeparator {}
0108             FormCard.FormTextFieldDelegate {
0109                 id: arrivalTerminalName
0110                 label: i18nc("boat terminal", "Terminal Name")
0111                 text: reservation.reservationFor.arrivalBoatTerminal.name
0112                 status: Kirigami.MessageType.Error
0113                 statusMessage: text === "" ? i18n("Arrival terminal must not be empty.") : ""
0114             }
0115             FormCard.FormDelegateSeparator {}
0116             FormPlaceEditorDelegate {
0117                 id: arrivalAddress
0118                 place: {
0119                     if (root.batchId || !root.reservation.reservationFor.arrivalBoatTerminal.address.isEmpty || root.reservation.reservationFor.arrivalBoatTerminal.geo.isValid)
0120                         return reservation.reservationFor.arrivalBoatTerminal;
0121                     let p = cityAtTime(root.reservation.reservationFor.departureTime);
0122                     let addr = p.address;
0123                     addr.addressLocality = undefined;
0124                     addr.addressRegion = undefined;
0125                     p.address = addr;
0126                     return p;
0127                 }
0128             }
0129         }
0130 
0131         BookingEditorCard {
0132             id: bookingEdit
0133             item: root.reservation
0134             defaultCurrency: Country.fromAlpha2(departureAddress.currentCountry).currencyCode
0135         }
0136     }
0137 }