From 99a795f7d2d7304904395782d2bf0acec9931b2c Mon Sep 17 00:00:00 2001 From: Adam Borbas Date: Wed, 26 Nov 2025 09:01:09 +0100 Subject: [PATCH 1/2] Remove booking payment status from UI --- .../Networking/Model/Bookings/Booking.swift | 9 ----- .../Model/Bookings/StoredBookingFilters.swift | 6 ---- Modules/Sources/Yosemite/Model/Model.swift | 1 - .../BookingFiltersViewModel.swift | 35 +------------------ .../BookingListContainerViewModel.swift | 2 -- .../BookingList/BookingListView.swift | 1 - .../BookingPaymentStatus+Helpers.swift | 33 ----------------- .../Booking Details/HeaderContent.swift | 2 -- .../Bookings/Booking Details/HeaderView.swift | 1 - 9 files changed, 1 insertion(+), 89 deletions(-) delete mode 100644 WooCommerce/Classes/Bookings/BookingList/BookingPaymentStatus+Helpers.swift diff --git a/Modules/Sources/Networking/Model/Bookings/Booking.swift b/Modules/Sources/Networking/Model/Bookings/Booking.swift index 886a02e4d7a..e7f647cd6a8 100644 --- a/Modules/Sources/Networking/Model/Bookings/Booking.swift +++ b/Modules/Sources/Networking/Model/Bookings/Booking.swift @@ -239,12 +239,3 @@ public enum BookingAttendanceStatus: String, CaseIterable, Codable { case noShow = "no-show" case unknown } - -/// Represents the payment status for a booking. -/// To be decoded from booking response once available. -public enum BookingPaymentStatus: String, CaseIterable, Codable { - case paid - case unpaid - case refunded - case unknown -} diff --git a/Modules/Sources/Yosemite/Model/Bookings/StoredBookingFilters.swift b/Modules/Sources/Yosemite/Model/Bookings/StoredBookingFilters.swift index dd8f178e7bf..ea7a9717569 100644 --- a/Modules/Sources/Yosemite/Model/Bookings/StoredBookingFilters.swift +++ b/Modules/Sources/Yosemite/Model/Bookings/StoredBookingFilters.swift @@ -17,7 +17,6 @@ public struct StoredBookingFilters: Codable, Equatable, GeneratedFakeable { public let teamMembers: [BookingTeamMemberFilter] public let products: [BookingProductFilter] public let attendanceStatuses: [BookingAttendanceStatus] - public let paymentStatuses: [BookingPaymentStatus] public let customers: [BookingCustomerFilter] public let dateRange: BookingDateRangeFilter? public let numberOfActiveFilters: Int @@ -25,13 +24,11 @@ public struct StoredBookingFilters: Codable, Equatable, GeneratedFakeable { public init(teamMembers: [BookingTeamMemberFilter], products: [BookingProductFilter], attendanceStatuses: [BookingAttendanceStatus], - paymentStatuses: [BookingPaymentStatus], customers: [BookingCustomerFilter], dateRange: BookingDateRangeFilter?) { self.teamMembers = teamMembers self.products = products self.attendanceStatuses = attendanceStatuses - self.paymentStatuses = paymentStatuses self.customers = customers self.dateRange = dateRange self.numberOfActiveFilters = { @@ -48,9 +45,6 @@ public struct StoredBookingFilters: Codable, Equatable, GeneratedFakeable { if customers.isNotEmpty { total += 1 } - if paymentStatuses.isNotEmpty { - total += 1 - } if dateRange != nil { total += 1 } diff --git a/Modules/Sources/Yosemite/Model/Model.swift b/Modules/Sources/Yosemite/Model/Model.swift index e1a756e59f4..a877cdcaa3b 100644 --- a/Modules/Sources/Yosemite/Model/Model.swift +++ b/Modules/Sources/Yosemite/Model/Model.swift @@ -34,7 +34,6 @@ public typealias BookingPaymentInfo = Networking.BookingPaymentInfo public typealias BookingProductInfo = Networking.BookingProductInfo public typealias BookingResource = Networking.BookingResource public typealias BookingAttendanceStatus = Networking.BookingAttendanceStatus -public typealias BookingPaymentStatus = Networking.BookingPaymentStatus public typealias CreateBlazeCampaign = Networking.CreateBlazeCampaign public typealias FallibleCancelable = Hardware.FallibleCancelable public typealias CommentStatus = Networking.CommentStatus diff --git a/WooCommerce/Classes/Bookings/BookingFilters/BookingFiltersViewModel.swift b/WooCommerce/Classes/Bookings/BookingFilters/BookingFiltersViewModel.swift index ef21f0e7bc4..4c537df781d 100644 --- a/WooCommerce/Classes/Bookings/BookingFilters/BookingFiltersViewModel.swift +++ b/WooCommerce/Classes/Bookings/BookingFilters/BookingFiltersViewModel.swift @@ -11,7 +11,6 @@ final class BookingFiltersViewModel: FilterListViewModel { private let productFilterViewModel: FilterTypeViewModel private let customerFilterViewModel: FilterTypeViewModel private let attendanceStatusFilterViewModel: FilterTypeViewModel - private let paymentStatusFilterViewModel: FilterTypeViewModel private let dateTimeFilterViewModel: FilterTypeViewModel @@ -21,14 +20,12 @@ final class BookingFiltersViewModel: FilterListViewModel { productFilterViewModel = BookingListFilter.product(siteID: siteID).createViewModel(filters: filter) customerFilterViewModel = BookingListFilter.customer(siteID: siteID).createViewModel(filters: filter) attendanceStatusFilterViewModel = BookingListFilter.attendanceStatus.createViewModel(filters: filter) - paymentStatusFilterViewModel = BookingListFilter.paymentStatus.createViewModel(filters: filter) dateTimeFilterViewModel = BookingListFilter.dateTime.createViewModel(filters: filter) filterTypeViewModels = [ teamMemberFilterViewModel, productFilterViewModel, attendanceStatusFilterViewModel, - paymentStatusFilterViewModel, customerFilterViewModel, dateTimeFilterViewModel ] @@ -39,14 +36,12 @@ final class BookingFiltersViewModel: FilterListViewModel { let products = (productFilterViewModel.selectedValue as? MultipleFilterSelection)?.items as? [BookingProductFilter] ?? [] let customers = (customerFilterViewModel.selectedValue as? MultipleFilterSelection)?.items as? [BookingCustomerFilter] ?? [] let attendanceStatuses = (attendanceStatusFilterViewModel.selectedValue as? MultipleFilterSelection)?.items as? [BookingAttendanceStatus] ?? [] - let paymentStatuses = (paymentStatusFilterViewModel.selectedValue as? MultipleFilterSelection)?.items as? [BookingPaymentStatus] ?? [] let dateRange = dateTimeFilterViewModel.selectedValue as? BookingDateRangeFilter let numberOfActiveFilters = filterTypeViewModels.numberOfActiveFilters return Filters(teamMembers: teamMembers, products: products, attendanceStatuses: attendanceStatuses, - paymentStatuses: paymentStatuses, customers: customers, dateRange: dateRange, numberOfActiveFilters: numberOfActiveFilters) @@ -78,7 +73,6 @@ final class BookingFiltersViewModel: FilterListViewModel { productFilterViewModel.selectedValue = BookingProductFilter?.none customerFilterViewModel.selectedValue = CustomerFilter?.none attendanceStatusFilterViewModel.selectedValue = BookingAttendanceStatus?.none - paymentStatusFilterViewModel.selectedValue = BookingPaymentStatus?.none dateTimeFilterViewModel.selectedValue = BookingDateRangeFilter?.none } @@ -89,7 +83,6 @@ final class BookingFiltersViewModel: FilterListViewModel { let teamMembers: [BookingTeamMemberFilter] let products: [BookingProductFilter] let attendanceStatuses: [BookingAttendanceStatus] - let paymentStatuses: [BookingPaymentStatus] let customers: [BookingCustomerFilter] let dateRange: BookingDateRangeFilter? @@ -99,7 +92,6 @@ final class BookingFiltersViewModel: FilterListViewModel { teamMembers = [] products = [] attendanceStatuses = [] - paymentStatuses = [] customers = [] dateRange = nil numberOfActiveFilters = 0 @@ -108,14 +100,12 @@ final class BookingFiltersViewModel: FilterListViewModel { init(teamMembers: [BookingTeamMemberFilter], products: [BookingProductFilter], attendanceStatuses: [BookingAttendanceStatus], - paymentStatuses: [BookingPaymentStatus], customers: [BookingCustomerFilter], dateRange: BookingDateRangeFilter?, numberOfActiveFilters: Int) { self.teamMembers = teamMembers self.products = products self.attendanceStatuses = attendanceStatuses - self.paymentStatuses = paymentStatuses self.customers = customers self.dateRange = dateRange self.numberOfActiveFilters = numberOfActiveFilters @@ -124,8 +114,7 @@ final class BookingFiltersViewModel: FilterListViewModel { var readableString: String { var readable: [String] = teamMembers.map { $0.name } + products.map { $0.name } + - attendanceStatuses.map { $0.localizedTitle } + - paymentStatuses.map { $0.localizedTitle } + attendanceStatuses.map { $0.localizedTitle } readable += customers.map { $0.name } @@ -144,7 +133,6 @@ final class BookingFiltersViewModel: FilterListViewModel { startDateBefore: dateRange?.endDate?.ISO8601Format(), startDateAfter: dateRange?.startDate?.ISO8601Format(), attendanceStatuses: attendanceStatuses.map { $0.rawValue }, - paymentStatuses: paymentStatuses.map { $0.rawValue } ) } } @@ -157,7 +145,6 @@ extension BookingFiltersViewModel { case teamMember(siteID: Int64) case product(siteID: Int64) case attendanceStatus - case paymentStatus case customer(siteID: Int64) case dateTime } @@ -174,8 +161,6 @@ private extension BookingFiltersViewModel.BookingListFilter { return Localization.rowTitleCustomer case .attendanceStatus: return Localization.rowTitleAttendanceStatus - case .paymentStatus: - return Localization.rowTitlePaymentStatus case .dateTime: return Localization.rowTitleDateTime } @@ -202,11 +187,6 @@ extension BookingFiltersViewModel.BookingListFilter { return FilterTypeViewModel(title: title, listSelectorConfig: .multiSelectStaticOptions(options: options), selectedValue: MultipleFilterSelection(items: filters.attendanceStatuses)) - case .paymentStatus: - let options: [BookingPaymentStatus?] = [.paid, .unpaid, .refunded] - return FilterTypeViewModel(title: title, - listSelectorConfig: .multiSelectStaticOptions(options: options), - selectedValue: MultipleFilterSelection(items: filters.paymentStatuses)) case .dateTime: return FilterTypeViewModel(title: title, listSelectorConfig: .bookingDateTime, @@ -234,19 +214,6 @@ extension BookingAttendanceStatus: FilterType { } } -extension BookingPaymentStatus: FilterType { - var description: String { localizedTitle } - - var isActive: Bool { - switch self { - case .paid, .unpaid, .refunded: - return true - case .unknown: - return false - } - } -} - extension BookingProductFilter: FilterType { /// The user-facing description of the filter value. var description: String { name } diff --git a/WooCommerce/Classes/Bookings/BookingList/BookingListContainerViewModel.swift b/WooCommerce/Classes/Bookings/BookingList/BookingListContainerViewModel.swift index 6c6a5a2e4d2..a5bf4ca30f9 100644 --- a/WooCommerce/Classes/Bookings/BookingList/BookingListContainerViewModel.swift +++ b/WooCommerce/Classes/Bookings/BookingList/BookingListContainerViewModel.swift @@ -139,7 +139,6 @@ private extension BookingListContainerViewModel { teamMembers: storedFilters.teamMembers, products: storedFilters.products, attendanceStatuses: storedFilters.attendanceStatuses, - paymentStatuses: storedFilters.paymentStatuses, customers: storedFilters.customers, dateRange: storedFilters.dateRange, numberOfActiveFilters: storedFilters.numberOfActiveFilters @@ -170,7 +169,6 @@ private extension BookingListContainerViewModel { teamMembers: filters.teamMembers, products: filters.products, attendanceStatuses: filters.attendanceStatuses, - paymentStatuses: filters.paymentStatuses, customers: filters.customers, dateRange: filters.dateRange ) diff --git a/WooCommerce/Classes/Bookings/BookingList/BookingListView.swift b/WooCommerce/Classes/Bookings/BookingList/BookingListView.swift index 825186419f9..9a22eb48c7a 100644 --- a/WooCommerce/Classes/Bookings/BookingList/BookingListView.swift +++ b/WooCommerce/Classes/Bookings/BookingList/BookingListView.swift @@ -159,7 +159,6 @@ private extension BookingListView { HStack { BookingBadgeView(booking.attendanceStatus) - BookingBadgeView(booking.bookingStatus) Spacer() } } diff --git a/WooCommerce/Classes/Bookings/BookingList/BookingPaymentStatus+Helpers.swift b/WooCommerce/Classes/Bookings/BookingList/BookingPaymentStatus+Helpers.swift deleted file mode 100644 index 6f11b154132..00000000000 --- a/WooCommerce/Classes/Bookings/BookingList/BookingPaymentStatus+Helpers.swift +++ /dev/null @@ -1,33 +0,0 @@ -import Foundation -import enum Yosemite.BookingPaymentStatus - -extension BookingPaymentStatus { - var localizedTitle: String { - switch self { - case .paid: - NSLocalizedString( - "bookingPaymentStatus.title.paid", - value: "Paid", - comment: "Status of a paid booking" - ) - case .unpaid: - NSLocalizedString( - "bookingPaymentStatus.title.unpaid", - value: "Unpaid", - comment: "Status of an unpaid booking" - ) - case .refunded: - NSLocalizedString( - "bookingPaymentStatus.title.refunded", - value: "Refunded", - comment: "Status of a refunded booking" - ) - case .unknown: - NSLocalizedString( - "bookingPaymentStatus.title.unknown", - value: "Unknown", - comment: "Status of a booking with unexpected payment status" - ) - } - } -} diff --git a/WooCommerce/Classes/ViewModels/Booking Details/HeaderContent.swift b/WooCommerce/Classes/ViewModels/Booking Details/HeaderContent.swift index 83817addc7e..0891a9aae89 100644 --- a/WooCommerce/Classes/ViewModels/Booking Details/HeaderContent.swift +++ b/WooCommerce/Classes/ViewModels/Booking Details/HeaderContent.swift @@ -10,7 +10,6 @@ extension BookingDetailsViewModel { final class HeaderContent: ObservableObject { @Published private(set) var bookingDate: String = "" @Published private(set) var attendanceStatus: BookingAttendanceStatus = .unknown - @Published private(set) var bookingStatus: BookingStatus = .unknown @Published private(set) var serviceLine: String = "" @Published private(set) var customerLine: String = "" @@ -23,7 +22,6 @@ extension BookingDetailsViewModel { serviceLine = booking.productName ?? "" customerLine = booking.customerName attendanceStatus = booking.attendanceStatus - bookingStatus = booking.bookingStatus } } } diff --git a/WooCommerce/Classes/ViewRelated/Bookings/Booking Details/HeaderView.swift b/WooCommerce/Classes/ViewRelated/Bookings/Booking Details/HeaderView.swift index b4091d817de..ecdd5d60f79 100644 --- a/WooCommerce/Classes/ViewRelated/Bookings/Booking Details/HeaderView.swift +++ b/WooCommerce/Classes/ViewRelated/Bookings/Booking Details/HeaderView.swift @@ -23,7 +23,6 @@ extension BookingDetailsView { } HStack { BookingBadgeView(content.attendanceStatus) - BookingBadgeView(content.bookingStatus) } .padding(.top, Layout.headerBadgesAdditionalTopPadding) } From d9a3f0e951fc9cf39ea3c1211fe4e3d8611465c4 Mon Sep 17 00:00:00 2001 From: Adam Borbas Date: Wed, 26 Nov 2025 10:32:13 +0100 Subject: [PATCH 2/2] Update tests --- .../Stores/AppSettingsStoreTests+BookingFilters.swift | 6 ------ .../ViewRelated/Bookings/BookingDetailsViewModelTests.swift | 1 - 2 files changed, 7 deletions(-) diff --git a/Modules/Tests/YosemiteTests/Stores/AppSettingsStoreTests+BookingFilters.swift b/Modules/Tests/YosemiteTests/Stores/AppSettingsStoreTests+BookingFilters.swift index 61deeaa5aa5..d7d7e9afa3c 100644 --- a/Modules/Tests/YosemiteTests/Stores/AppSettingsStoreTests+BookingFilters.swift +++ b/Modules/Tests/YosemiteTests/Stores/AppSettingsStoreTests+BookingFilters.swift @@ -56,7 +56,6 @@ struct AppSettingsStoreTests_BookingFilters { teamMembers: [BookingTeamMemberFilter(resourceID: 100, name: "Team Member 1")], products: [BookingProductFilter(productID: 1, name: "Product 1")], attendanceStatuses: [.booked, .noShow], - paymentStatuses: [.unpaid, .paid], customers: [BookingCustomerFilter(customerID: 10, name: "Customer 1")], dateRange: nil ) @@ -97,7 +96,6 @@ struct AppSettingsStoreTests_BookingFilters { teamMembers: [BookingTeamMemberFilter(resourceID: 100, name: "Team Member 1")], products: [BookingProductFilter(productID: 1, name: "Product 1")], attendanceStatuses: [.booked], - paymentStatuses: [.unpaid], customers: [BookingCustomerFilter(customerID: 10, name: "Customer 1")], dateRange: nil ) @@ -106,7 +104,6 @@ struct AppSettingsStoreTests_BookingFilters { teamMembers: [BookingTeamMemberFilter(resourceID: 200, name: "Team Member 2")], products: [BookingProductFilter(productID: 2, name: "Product 2")], attendanceStatuses: [.noShow], - paymentStatuses: [.paid, .refunded], customers: [], dateRange: nil ) @@ -162,7 +159,6 @@ struct AppSettingsStoreTests_BookingFilters { teamMembers: [BookingTeamMemberFilter(resourceID: 100, name: "Team Member 1")], products: [BookingProductFilter(productID: 1, name: "Product 1")], attendanceStatuses: [], - paymentStatuses: [.unpaid], customers: [BookingCustomerFilter(customerID: 10, name: "Customer 1")], dateRange: nil ) @@ -171,7 +167,6 @@ struct AppSettingsStoreTests_BookingFilters { teamMembers: [], products: [], attendanceStatuses: [.booked], - paymentStatuses: [.paid], customers: [BookingCustomerFilter(customerID: 20, name: "Customer 2")], dateRange: nil ) @@ -221,7 +216,6 @@ struct AppSettingsStoreTests_BookingFilters { teamMembers: [BookingTeamMemberFilter(resourceID: 100, name: "Team Member 1")], products: [], attendanceStatuses: [.booked], - paymentStatuses: [.refunded], customers: [], dateRange: nil ) diff --git a/WooCommerce/WooCommerceTests/ViewRelated/Bookings/BookingDetailsViewModelTests.swift b/WooCommerce/WooCommerceTests/ViewRelated/Bookings/BookingDetailsViewModelTests.swift index fa4439ccd74..0809dcecc20 100644 --- a/WooCommerce/WooCommerceTests/ViewRelated/Bookings/BookingDetailsViewModelTests.swift +++ b/WooCommerce/WooCommerceTests/ViewRelated/Bookings/BookingDetailsViewModelTests.swift @@ -349,7 +349,6 @@ final class BookingDetailsViewModelTests: XCTestCase { return } XCTAssertEqual(headerContent.attendanceStatus.localizedTitle, "Checked-in") - XCTAssertEqual(headerContent.bookingStatus.localizedTitle, "Paid") } func test_init_whenBookingHasAttendanceStatus_updatesAttendanceContentWithCorrectLocalizedString() {