Skip to content

Commit

Permalink
Merge dd409a8 into 91a1d63
Browse files Browse the repository at this point in the history
  • Loading branch information
albertms10 committed Dec 26, 2022
2 parents 91a1d63 + dd409a8 commit f8b4e4c
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 29 deletions.
11 changes: 4 additions & 7 deletions lib/src/model/booking/booking.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'package:cabin_booking/utils/time_of_day_extension.dart';
import 'package:intl/intl.dart';

import '../date/date_range_item.dart';
import 'recurring_booking.dart';

abstract class _JsonFields {
static const description = 'de';
Expand All @@ -20,17 +21,14 @@ abstract class Booking extends DateRangeItem {
/// The ID of the booked Cabin.
String? cabinId;

/// The ID of the recurring booking, if this [Booking] is part of a series of
/// The [RecurringBooking] reference, if this [Booking] is part of a series of
/// recurring bookings.
String? recurringBookingId;
RecurringBooking? recurringBooking;

/// The occurrence number this [Booking] appears in the list of recurring
/// bookings. E.g., the 2nd occurrence out of 5.
int? recurringNumber;

/// The total times the recurring booking occurs.
int? recurringTotalTimes;

/// Creates a new [Booking].
Booking({
super.id,
Expand All @@ -39,9 +37,8 @@ abstract class Booking extends DateRangeItem {
this.description,
this.isLocked = false,
this.cabinId,
this.recurringBookingId,
this.recurringBooking,
this.recurringNumber,
this.recurringTotalTimes,
});

/// Creates a new [Booking] from a JSON Map.
Expand Down
11 changes: 5 additions & 6 deletions lib/src/model/booking/booking_manager.dart
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,9 @@ class BookingManager with ChangeNotifier {
return allBookingsOn(booking.dateOnly!)
.where(
(comparingBooking) =>
(comparingBooking.recurringBookingId == null ||
comparingBooking.recurringBookingId !=
booking.recurringBookingId) &&
(comparingBooking.recurringBooking?.id == null ||
comparingBooking.recurringBooking?.id !=
booking.recurringBooking?.id) &&
comparingBooking.id != booking.id,
)
.firstWhereOrNull(
Expand Down Expand Up @@ -272,8 +272,7 @@ class BookingManager with ChangeNotifier {
bookings.firstWhere((booking) => booking.id == id);

RecurringBooking recurringBookingFromId(String? id) => recurringBookings
.firstWhere((recurringBooking) => recurringBooking.id == id)
..recurringBookingId = id;
.firstWhere((recurringBooking) => recurringBooking.id == id);

List<Booking> searchBookings(String query, {int? limit}) {
final results = <Booking>[];
Expand Down Expand Up @@ -323,7 +322,7 @@ class BookingManager with ChangeNotifier {
recurringBookings
.firstWhere(
(comparingRecurringBooking) =>
recurringBooking.recurringBookingId ==
recurringBooking.recurringBooking.id ==
comparingRecurringBooking.id ||
recurringBooking.id == comparingRecurringBooking.id,
)
Expand Down
16 changes: 10 additions & 6 deletions lib/src/model/booking/recurring_booking.dart
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,13 @@ class RecurringBooking extends Booking {
);
}

/// Override getter from [Booking] to prevent a circular reference to this
/// [RecurringBooking] at instantiation.
@override
RecurringBooking get recurringBooking => this;

static bool isRecurringBooking(Booking? booking) =>
booking is RecurringBooking || booking!.recurringBookingId != null;
booking is RecurringBooking || booking!.recurringBooking?.id != null;

@override
Map<String, dynamic> toJson() => {
Expand Down Expand Up @@ -143,13 +148,13 @@ class RecurringBooking extends Booking {
}

SingleBooking asSingleBooking({bool linked = true}) => SingleBooking(
id: linked ? '$id-0' : (recurringBookingId ?? id),
id: linked ? '$id-0' : id,
startDate: startDate,
endDate: endDate,
description: description,
isLocked: isLocked,
cabinId: cabinId,
recurringBookingId: linked ? id : null,
recurringBooking: linked ? this : null,
);

List<SingleBooking> get bookings {
Expand All @@ -163,9 +168,8 @@ class RecurringBooking extends Booking {
runBookings.add(
movedBooking
..id = '$id-$count'
..recurringBookingId = id
..recurringNumber = count
..recurringTotalTimes = occurrences,
..recurringBooking = this
..recurringNumber = count,
);

runDate = runDate.add(periodicityDuration);
Expand Down
3 changes: 1 addition & 2 deletions lib/src/model/booking/single_booking.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,8 @@ class SingleBooking extends Booking {
super.description,
super.isLocked,
super.cabinId,
super.recurringBookingId,
super.recurringBooking,
super.recurringNumber,
super.recurringTotalTimes,
});

SingleBooking.fromJson(super.other) : super.fromJson();
Expand Down
4 changes: 2 additions & 2 deletions lib/widgets/booking/booking_card.dart
Original file line number Diff line number Diff line change
Expand Up @@ -163,8 +163,8 @@ class _BookingCardInfo extends StatelessWidget {
children: [
if (isRecurring)
Tooltip(
message:
'${booking.recurringNumber}/${booking.recurringTotalTimes}',
message: '${booking.recurringNumber}/'
'${booking.recurringBooking?.occurrences}',
child: Padding(
padding: const EdgeInsetsDirectional.only(end: 4),
child: Icon(Icons.repeat, size: 16, color: theme.hintColor),
Expand Down
10 changes: 4 additions & 6 deletions lib/widgets/booking/booking_preview_panel_action_bar.dart
Original file line number Diff line number Diff line change
Expand Up @@ -88,11 +88,9 @@ class _BookingPreviewEditIconButton extends StatelessWidget {
final editedBooking = await showDialog<Booking>(
context: context,
builder: (context) => BookingDialog(
booking: (booking.recurringBookingId == null
? booking
: cabinManager
.cabinFromId(cabin.id)
.recurringBookingFromId(booking.recurringBookingId!))
booking: (booking.recurringBooking != null
? booking.recurringBooking!
: booking)
..cabinId = cabin.id,
),
);
Expand Down Expand Up @@ -171,7 +169,7 @@ class _BookingPreviewDeleteIconButton extends StatelessWidget {
if (RecurringBooking.isRecurringBooking(booking)) {
cabinManager.removeRecurringBookingById(
cabin.id,
booking.recurringBookingId,
booking.recurringBooking?.id,
);
} else {
cabinManager.removeSingleBookingById(cabin.id, booking.id);
Expand Down

0 comments on commit f8b4e4c

Please sign in to comment.