models.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. from django.db import models
  2. from django.utils import timezone
  3. from django.contrib.auth.models import User
  4. class UserModel(models.Model):
  5. user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='token_of')
  6. refresh_token = models.CharField(max_length=120, null=True, blank=True)
  7. gmb_account_id = models.CharField(max_length=30, null=True, blank=True)
  8. access_token = models.CharField(max_length=255, null=True, blank=True)
  9. expiry = models.DateTimeField(null=True, blank=True)
  10. def __str__(self):
  11. return self.user.username
  12. class Location(models.Model):
  13. location_id = models.CharField(max_length=50, primary_key=True)
  14. care_name = models.CharField(max_length=50, null=True, blank=True)
  15. location_name = models.CharField(max_length=120)
  16. website_url = models.URLField()
  17. review_site_url = models.URLField(null=True, blank=True)
  18. owner = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
  19. def __str__(self):
  20. return self.care_name if self.care_name else self.location_name
  21. @property
  22. def managers(self):
  23. return self.locationmanager_set.all()
  24. @property
  25. def all_facebook_review(self):
  26. return self.facebookpage.facebookreview_set.all()
  27. @property
  28. def all_google_review(self):
  29. return self.review_set.all()
  30. @property
  31. def last_week_pos_google_review_count(self):
  32. end_date = timezone.now() - timezone.timedelta(days=7)
  33. return self.review_set.filter(create_time__gte=end_date, star_rating__gte=4).count()
  34. @property
  35. def last_week_pos_facebook_review_count(self):
  36. end_date = timezone.now() - timezone.timedelta(days=7)
  37. return self.facebookpage.facebookreview_set.filter(create_time__gte=end_date, recommendation_type=True).count()
  38. @property
  39. def last_week_pos_yelp_review_count(self):
  40. end_date = timezone.now() - timezone.timedelta(days=7)
  41. return self.yelplocation.yelpreview_set.filter(date_posted__gte=end_date, rating__gte=4).count()
  42. @property
  43. def last_week_neg_google_review_count(self):
  44. end_date = timezone.now() - timezone.timedelta(days=7)
  45. return self.review_set.filter(create_time__gte=end_date, star_rating__lte=3).count()
  46. @property
  47. def last_week_neg_facebook_review_count(self):
  48. end_date = timezone.now() - timezone.timedelta(days=7)
  49. return self.facebookpage.facebookreview_set.filter(create_time__gte=end_date, recommendation_type=False).count()
  50. @property
  51. def last_week_neg_yelp_review_count(self):
  52. end_date = timezone.now() - timezone.timedelta(days=7)
  53. return self.yelplocation.yelpreview_set.filter(date_posted__gte=end_date, rating__lte=3).count()
  54. class LocationManager(models.Model):
  55. name = models.CharField(max_length=255)
  56. email = models.EmailField()
  57. location = models.ForeignKey(Location, on_delete=models.CASCADE)
  58. def __str__(self):
  59. return f"{self.name} - {self.location.care_name}"