finishing digitalglarus booking
This commit is contained in:
parent
80095ed1aa
commit
447ddc7c2e
7 changed files with 137 additions and 24 deletions
|
|
@ -16,8 +16,9 @@ from .mixins import Ordereable
|
|||
|
||||
class MembershipType(models.Model):
|
||||
|
||||
STANDARD = 'standard'
|
||||
MEMBERSHIP_TYPES = (
|
||||
('standard', 'Standard'),
|
||||
(STANDARD, 'Standard'),
|
||||
|
||||
)
|
||||
name = models.CharField(choices=MEMBERSHIP_TYPES, max_length=20)
|
||||
|
|
@ -63,7 +64,7 @@ class Membership(models.Model):
|
|||
active = models.BooleanField(default=True)
|
||||
|
||||
@classmethod
|
||||
def is_digitalglarus_member(cls, user):
|
||||
def is_digitalglarus_active_member(cls, user):
|
||||
past_month = (datetime.today() - relativedelta(months=1)).month
|
||||
has_booking_current_month = Q(membershiporder__customer__user=user,
|
||||
membershiporder__created_at__month=datetime.today().month)
|
||||
|
|
@ -158,6 +159,14 @@ class Booking(models.Model):
|
|||
total_free_days = months * TWO_DAYS + free_days_this_month
|
||||
return total_free_days
|
||||
|
||||
@staticmethod
|
||||
def membership_required_booking_months(start_date, end_date):
|
||||
start_month = start_date.month
|
||||
end_month = end_date.month
|
||||
months = abs(start_month - (end_month + 12) if end_month < start_month
|
||||
else end_month - start_month)
|
||||
return months
|
||||
|
||||
@classmethod
|
||||
def booking_price(cls, user, start_date, end_date):
|
||||
|
||||
|
|
@ -178,13 +187,34 @@ class Booking(models.Model):
|
|||
free_days = cls.get_ramaining_free_days(user, start_date, end_date)
|
||||
final_booking_price = normal_price - (free_days * price_per_day)
|
||||
|
||||
return normal_price, final_booking_price, free_days
|
||||
# Calculating membership required months price for booking
|
||||
required_membership_months = 0
|
||||
membership_booking_price = 0.0
|
||||
if BookingOrder.user_has_not_bookings(user):
|
||||
today = datetime.today().date()
|
||||
membership_price = MembershipType.objects.get(name=MembershipType.STANDARD).price
|
||||
required_membership_months = cls.membership_required_booking_months(today, end_date)
|
||||
membership_booking_price = membership_price * required_membership_months
|
||||
|
||||
# Add required membership months to final prices
|
||||
final_booking_price += membership_booking_price
|
||||
|
||||
return normal_price, final_booking_price, free_days,\
|
||||
required_membership_months, membership_booking_price
|
||||
|
||||
|
||||
class BookingOrder(Ordereable, models.Model):
|
||||
booking = models.OneToOneField(Booking)
|
||||
original_price = models.FloatField()
|
||||
special_month_price = models.FloatField()
|
||||
membership_required_months = models.IntegerField(default=0)
|
||||
membership_required_months_price = models.FloatField(default=0)
|
||||
|
||||
|
||||
@classmethod
|
||||
def user_has_not_bookings(cls, user):
|
||||
return cls.objects.filter(customer__user=user).exists()
|
||||
|
||||
|
||||
def booking_days(self):
|
||||
return (self.booking.end_date - self.booking.start_date).days + 1
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue