enum BookingState: Int, Comparable { // Booking states, mapped from backend state together with check-in/out status and // payment progress. // // NOTE: Should also include review status, which is currently not yet implemented // on the backend. case Started = 0 case CheckOutStarted = 1 case NeedsCheckOut = 2 case CheckInStarted = 3 case CanCheckIn = 4 case Paid = 5 case PaymentProcessing = 6 case Accepted = 7 case Requested = 8 case RequestNotSent = 9 case Declined = 10 case Cancelled = 11 case CancelledBySystem = 12 case FinishedNoReview = 13 case PaidOutNoReview = 14 case Finished = 15 case PaidOut = 16 case Expired = 17 case Unknown = 18 public static func <(lhs: BookingState, rhs: BookingState) -> Bool { return lhs.rawValue < rhs.rawValue } var isCheckInOutStatusRelevant: Bool { get { switch self { case .Unknown: fallthrough case .Started: fallthrough case .CheckOutStarted: fallthrough case .NeedsCheckOut: fallthrough case .CheckInStarted: fallthrough case .CanCheckIn: fallthrough case .Paid: fallthrough case .Finished: fallthrough case .FinishedNoReview: return true default: return false } } } var localizationKey: String { get { switch self { case .Started: return "started" case .CheckOutStarted: return "checkout_started" case .NeedsCheckOut: return "needs_checkout" case .CheckInStarted: return "checkin_started" case .CanCheckIn: return "can_checkin" case .Paid: return "paid" case .PaymentProcessing: return "payment_processing" case .Accepted: return "accepted" case .Requested: return "requested" case .RequestNotSent: return "request_not_sent" case .Declined: return "declined" case .Cancelled: return "cancelled" case .CancelledBySystem: return "cancelled_by_system" case .FinishedNoReview: return "finished_no_review" case .PaidOutNoReview: return "paid_out_no_review" case .Finished: return "finished" case .PaidOut: return "paid_out" case .Expired: return "expired" case .Unknown: return "unknown" } } } var color: UIColor { get { switch self { // Green case .Started: fallthrough case .CheckInStarted: fallthrough case .CanCheckIn: fallthrough case .CheckOutStarted: fallthrough case .NeedsCheckOut: fallthrough case .Paid: fallthrough case .PaymentProcessing: fallthrough case .Accepted: fallthrough case .Requested: fallthrough case .FinishedNoReview: fallthrough case .PaidOutNoReview: fallthrough case .Finished: fallthrough case .PaidOut: return Colors.green // Red case .RequestNotSent: return Colors.red // Gray case .Cancelled: fallthrough case .Declined: fallthrough case .CancelledBySystem: fallthrough case .Expired: fallthrough case .Unknown: return Colors.gray } } } } enum BookingLoadingGroup { case RenterFuture case RenterHistory case OwnerFuture case OwnerHistory var isRenter: Bool { get { switch self { case .RenterFuture: fallthrough case .RenterHistory: return true case .OwnerFuture: fallthrough case .OwnerHistory: return false } } } var isFuture: Bool { get { switch self { case .RenterFuture: fallthrough case .OwnerFuture: return true case .RenterHistory: fallthrough case .OwnerHistory: return false } } } func getRentalStates() -> [RentalState] { switch self { case .RenterFuture: return [.Requested, .Accepted, .Denied, .PaymentAuthorized, .RentalStarted, .RentalEnded, .NotSend, .Cancelled, .DeclinedBySystem] case .RenterHistory: return [.TransactionDone, .RentalEnded, .Denied, .Cancelled, .Overdue, .DeclinedBySystem] case .OwnerFuture: return [.Requested, .Accepted, .PaymentAuthorized, .RentalStarted, .RentalEnded, .Denied, .Cancelled, .DeclinedBySystem] case .OwnerHistory: return [.TransactionDone, .RentalEnded, .Denied, .Cancelled, .Overdue, .DeclinedBySystem] } } }