add object manager to booking

This commit is contained in:
Ruidy Nemausat 2020-04-07 11:42:49 +02:00
parent 9a9bc57a34
commit 43aa651e92
4 changed files with 23 additions and 16 deletions

View file

@ -82,13 +82,6 @@ def synchronize_calendars(place):
reservation = get_calendar_reservations(place)
place = get_object_or_404(Place, name=place.name)
# After refactoring models, Move this method to the Booking model and get price later by calling Booking method
# price = get_reservation_price(
# place,
# reservation['start'],
# reservation['end']
# )
start = reservation['start']
end = reservation['end']
@ -101,19 +94,17 @@ def synchronize_calendars(place):
guest=guest
)
if not db_booking.exists():
Booking.objects.create(
Booking.objects.create_booking(
place=place,
guest=guest,
start=start,
end=end,
# price=price
end=end
)
else:
db_booking.place = place,
db_booking.guest = guest,
db_booking.start = start,
db_booking.end = end,
# db_booking.price = price
db_booking.end = end
def get_bookings(place):

View file

@ -4,6 +4,19 @@ from rental.models.guest import Guest
from rental.models.place import Place
class BookingManager(models.Manager):
""" BookingManager is the interface through which database query operations
are provided to Django models.
"""
def create_booking(self, **kwargs):
""" create_booking creates a Booking instance. """
booking = self.create(**kwargs)
booking.price = booking.get_price()
return booking
class Booking(models.Model):
class Meta:
verbose_name = 'Réservation'
@ -11,6 +24,8 @@ class Booking(models.Model):
def __str__(self):
return "Réservation du {} par {}".format(self.place, self.guest)
objects = BookingManager()
place = models.ForeignKey(Place, on_delete=models.CASCADE)
guest = models.ForeignKey(Guest, on_delete=models.CASCADE)
message = models.TextField(blank=True)
@ -18,7 +33,7 @@ class Booking(models.Model):
end = models.DateField()
price = models.DecimalField(max_digits=6, decimal_places=2, null=True)
def price(self):
def get_price(self):
""" Compute booking price as a function of place and dates """
if type(self.start) == str:

View file

@ -12,6 +12,7 @@ class BookingTestCase(TestCase):
name='TX',
price=100
)
self.guest = Guest.objects.create(
name="Ruidy",
email="r@mail.com",
@ -23,11 +24,11 @@ class BookingTestCase(TestCase):
def test_BookingPrice(self):
# place = Place.objects.get(name='TX')
booking = Booking.objects.create(
booking = Booking.objects.create_booking(
place=self.place,
start=self.start,
end=self.end,
guest=self.guest
)
self.assertEqual(booking.price(), 600)
self.assertEqual(booking.price, 600)

View file

@ -83,7 +83,7 @@ def handle_reservation_form(request, context={}, init_template='rental/reservati
available = check_availability(place, start, end)
price = get_reservation_price(place, start, end)
if available:
reservation = Booking.objects.create(
reservation = Booking.objects.create_booking(
guest=guest,
place=place,
message=message,