Skip to content

Instantly share code, notes, and snippets.

@Bashta
Last active November 21, 2017 14:22
Show Gist options
  • Save Bashta/c334a387a5a1c454fb1e446a85e67f05 to your computer and use it in GitHub Desktop.
Save Bashta/c334a387a5a1c454fb1e446a85e67f05 to your computer and use it in GitHub Desktop.
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]
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment