2021-03-21 15:50:50 +00:00
|
|
|
from django.contrib.gis.db import models
|
2021-04-19 10:51:50 +00:00
|
|
|
from django.utils import timezone
|
2021-04-20 06:36:59 +00:00
|
|
|
from django.conf import settings
|
2021-03-21 15:50:50 +00:00
|
|
|
|
2021-03-24 06:43:05 +00:00
|
|
|
from clients.models import ClientProfile
|
2021-04-20 06:36:59 +00:00
|
|
|
from partners.models import Establishment, RoomCategory
|
|
|
|
|
|
|
|
from dateutil.relativedelta import relativedelta
|
2021-03-21 15:50:50 +00:00
|
|
|
|
2021-04-08 11:38:10 +00:00
|
|
|
import uuid
|
|
|
|
|
2021-04-18 06:12:15 +00:00
|
|
|
class LengthChoices(models.IntegerChoices):
|
|
|
|
ANY = 0
|
|
|
|
SHORT = 1
|
|
|
|
LONG = 2
|
|
|
|
|
2021-03-21 15:50:50 +00:00
|
|
|
class Inquiry(models.Model):
|
2021-04-08 11:38:10 +00:00
|
|
|
uuid = models.UUIDField(default=uuid.uuid4, unique=True)
|
2021-04-08 09:30:19 +00:00
|
|
|
client = models.ForeignKey(ClientProfile, models.PROTECT, null=True, blank=True)
|
2021-03-21 15:50:50 +00:00
|
|
|
destination_name = models.CharField(max_length=128)
|
|
|
|
destination_coords = models.PointField()
|
|
|
|
destination_radius = models.IntegerField()
|
2021-03-24 09:52:56 +00:00
|
|
|
arrival = models.DateField()
|
2021-04-18 06:12:15 +00:00
|
|
|
min_nights = models.IntegerField(default=0, choices=LengthChoices.choices)
|
2021-03-21 15:50:50 +00:00
|
|
|
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)
|
2021-04-18 10:02:17 +00:00
|
|
|
gateway = models.CharField(max_length=128, null=True, blank=True)
|
2021-03-21 15:50:50 +00:00
|
|
|
|
2021-03-24 06:43:05 +00:00
|
|
|
@property
|
|
|
|
def is_paid(self):
|
2021-03-24 06:43:47 +00:00
|
|
|
if not self.invoice:
|
2021-03-24 06:43:05 +00:00
|
|
|
return False
|
|
|
|
|
2021-03-24 06:43:47 +00:00
|
|
|
return self.invoice.is_paid
|
2021-03-24 06:43:05 +00:00
|
|
|
|
2021-04-19 10:51:50 +00:00
|
|
|
def process_payment(self):
|
|
|
|
self.activated = timezone.now()
|
|
|
|
self.save()
|
|
|
|
|
2021-04-20 06:36:59 +00:00
|
|
|
@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:
|
2021-04-20 06:36:59 +00:00
|
|
|
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):
|
2021-04-20 11:37:36 +00:00
|
|
|
try:
|
|
|
|
return Offer.objects.get(inquiry=self, accepted__isnull=False)
|
|
|
|
except Offer.DoesNotExist:
|
|
|
|
return False
|
2021-03-24 09:44:52 +00:00
|
|
|
|
2021-03-24 06:43:05 +00:00
|
|
|
class Offer(models.Model):
|
2021-04-20 06:36:59 +00:00
|
|
|
uuid = models.UUIDField(default=uuid.uuid4, unique=True)
|
2021-03-24 06:43:05 +00:00
|
|
|
inquiry = models.ForeignKey(Inquiry, models.PROTECT)
|
2021-04-20 06:36:59 +00:00
|
|
|
roomcategory = models.ForeignKey(RoomCategory, models.PROTECT)
|
|
|
|
departure = models.DateField()
|
2021-03-24 09:44:52 +00:00
|
|
|
comment = models.TextField(null=True, blank=True)
|
2021-04-20 11:37:36 +00:00
|
|
|
accepted = models.DateTimeField(null=True, blank=True)
|
2021-04-20 06:36:59 +00:00
|
|
|
hidden = models.BooleanField(default=False)
|
|
|
|
|
|
|
|
@property
|
|
|
|
def establishment(self):
|
|
|
|
return self.roomcategory.establishment
|
|
|
|
|
|
|
|
@property
|
|
|
|
def nights(self):
|
|
|
|
return (self.departure - self.inquiry.arrival).days
|