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 }