from django.db import models from django.utils import timezone from django.contrib.auth.models import User class UserModel(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='token_of') refresh_token = models.CharField(max_length=120, null=True, blank=True) gmb_account_id = models.CharField(max_length=30, null=True, blank=True) access_token = models.CharField(max_length=255, null=True, blank=True) expiry = models.DateTimeField(null=True, blank=True) def __str__(self): return self.user.username ORGANIZATION_TYPE = [ ('ET', 'EnTrust'), ('SC', 'SignatureCare'), ] class Location(models.Model): location_id = models.CharField(max_length=50, primary_key=True) care_name = models.CharField(max_length=50, null=True, blank=True) location_name = models.CharField(max_length=120) website_url = models.URLField() review_site_url = models.URLField(null=True, blank=True) owner = models.ForeignKey(User, on_delete=models.CASCADE, null=True) organization = models.CharField(max_length=2, choices=ORGANIZATION_TYPE, default="SC") def __str__(self): return self.care_name if self.care_name else self.location_name @property def managers(self): return self.locationmanager_set.all() @property def all_facebook_review(self): return self.facebookpage.facebookreview_set.all() @property def all_google_review(self): return self.review_set.all() @property def last_week_pos_google_review_count(self): end_date = timezone.now() - timezone.timedelta(days=7) return self.review_set.filter(create_time__gte=end_date, star_rating__gte=4).count() @property def last_week_pos_facebook_review_count(self): end_date = timezone.now() - timezone.timedelta(days=7) return self.facebookpage.facebookreview_set.filter(create_time__gte=end_date, recommendation_type=True).count() @property def last_week_pos_yelp_review_count(self): end_date = timezone.now() - timezone.timedelta(days=7) return self.yelplocation.yelpreview_set.filter(date_posted__gte=end_date, rating__gte=4).count() @property def last_week_neg_google_review_count(self): end_date = timezone.now() - timezone.timedelta(days=7) return self.review_set.filter(create_time__gte=end_date, star_rating__lte=3).count() @property def last_week_neg_facebook_review_count(self): end_date = timezone.now() - timezone.timedelta(days=7) return self.facebookpage.facebookreview_set.filter(create_time__gte=end_date, recommendation_type=False).count() @property def last_week_neg_yelp_review_count(self): end_date = timezone.now() - timezone.timedelta(days=7) return self.yelplocation.yelpreview_set.filter(date_posted__gte=end_date, rating__lte=3).count() class LocationManager(models.Model): name = models.CharField(max_length=255) email = models.EmailField() location = models.ForeignKey(Location, on_delete=models.CASCADE) def __str__(self): return f"{self.name} - {self.location.care_name}"