JourneyJoker/auction/models.py

81 lines
2.5 KiB
Python
Raw Normal View History

from django.contrib.gis.db import models
2021-04-19 10:51:50 +00:00
from django.utils import timezone
from django.conf import settings
from clients.models import ClientProfile
from partners.models import Establishment, RoomCategory
from dateutil.relativedelta import relativedelta
import uuid
2021-04-18 06:12:15 +00:00
class LengthChoices(models.IntegerChoices):
ANY = 0
SHORT = 1
LONG = 2
class Inquiry(models.Model):
uuid = models.UUIDField(default=uuid.uuid4, unique=True)
client = models.ForeignKey(ClientProfile, models.PROTECT, null=True, blank=True)
destination_name = models.CharField(max_length=128)
destination_coords = models.PointField()
destination_radius = models.IntegerField()
arrival = models.DateField()
2021-04-18 06:12:15 +00:00
min_nights = models.IntegerField(default=0, choices=LengthChoices.choices)
budget = models.DecimalField(max_digits=10, decimal_places=2)
adults = models.IntegerField()
children = models.IntegerField()
2021-03-24 09:44:52 +00:00
comment = models.TextField(null=True, blank=True)
2021-04-19 10:51:50 +00:00
activated = models.DateTimeField(null=True, blank=True)
gateway = models.CharField(max_length=128, null=True, blank=True)
@property
def is_paid(self):
2021-03-24 06:43:47 +00:00
if not self.invoice:
return False
2021-03-24 06:43:47 +00:00
return self.invoice.is_paid
2021-04-19 10:51:50 +00:00
def process_payment(self):
self.activated = timezone.now()
self.save()
@property
def expiry(self):
if self.activated:
return self.activated + relativedelta(days=settings.INQUIRY_RUNTIME)
@property
def expired(self):
return self.expiry and (self.expiry < timezone.now())
2021-04-19 10:51:50 +00:00
@property
def active(self):
try:
return bool(self.activated) and not self.expired
2021-04-19 10:51:50 +00:00
except:
return False
2021-03-24 09:44:52 +00:00
@property
def accepted(self):
try:
return Offer.objects.get(inquiry=self, accepted__isnull=False)
except Offer.DoesNotExist:
return False
2021-03-24 09:44:52 +00:00
class Offer(models.Model):
uuid = models.UUIDField(default=uuid.uuid4, unique=True)
inquiry = models.ForeignKey(Inquiry, models.PROTECT)
roomcategory = models.ForeignKey(RoomCategory, models.PROTECT)
departure = models.DateField()
2021-03-24 09:44:52 +00:00
comment = models.TextField(null=True, blank=True)
accepted = models.DateTimeField(null=True, blank=True)
hidden = models.BooleanField(default=False)
@property
def establishment(self):
return self.roomcategory.establishment
@property
def nights(self):
return (self.departure - self.inquiry.arrival).days