models.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. ORGANIZATION_TYPE = [
  13. ('ET', 'EnTrust'),
  14. ('SC', 'SignatureCare'),
  15. ]
  16. class Location(models.Model):
  17. location_id = models.CharField(max_length=50, primary_key=True)
  18. care_name = models.CharField(max_length=50, null=True, blank=True)
  19. location_name = models.CharField(max_length=120)
  20. website_url = models.URLField()
  21. review_site_url = models.URLField(null=True, blank=True)
  22. owner = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
  23. organization = models.CharField(max_length=2, choices=ORGANIZATION_TYPE, default="SC")
  24. def __str__(self):
  25. return self.care_name if self.care_name else self.location_name
  26. @property
  27. def managers(self):
  28. return self.locationmanager_set.all()
  29. @property
  30. def all_facebook_review(self):
  31. return self.facebookpage.facebookreview_set.all()
  32. @property
  33. def all_google_review(self):
  34. return self.review_set.all()
  35. @property
  36. def last_week_pos_google_review_count(self):
  37. end_date = timezone.now() - timezone.timedelta(days=7)
  38. return self.review_set.filter(create_time__gte=end_date, star_rating__gte=4).count()
  39. @property
  40. def last_week_pos_facebook_review_count(self):
  41. end_date = timezone.now() - timezone.timedelta(days=7)
  42. return self.facebookpage.facebookreview_set.filter(create_time__gte=end_date, recommendation_type=True).count()
  43. @property
  44. def last_week_pos_yelp_review_count(self):
  45. end_date = timezone.now() - timezone.timedelta(days=7)
  46. return self.yelplocation.yelpreview_set.filter(date_posted__gte=end_date, rating__gte=4).count()
  47. @property
  48. def last_week_neg_google_review_count(self):
  49. end_date = timezone.now() - timezone.timedelta(days=7)
  50. return self.review_set.filter(create_time__gte=end_date, star_rating__lte=3).count()
  51. @property
  52. def last_week_neg_facebook_review_count(self):
  53. end_date = timezone.now() - timezone.timedelta(days=7)
  54. return self.facebookpage.facebookreview_set.filter(create_time__gte=end_date, recommendation_type=False).count()
  55. @property
  56. def last_week_neg_yelp_review_count(self):
  57. end_date = timezone.now() - timezone.timedelta(days=7)
  58. return self.yelplocation.yelpreview_set.filter(date_posted__gte=end_date, rating__lte=3).count()
  59. class LocationManager(models.Model):
  60. name = models.CharField(max_length=255)
  61. email = models.EmailField()
  62. location = models.ForeignKey(Location, on_delete=models.CASCADE)
  63. def __str__(self):
  64. return f"{self.name} - {self.location.care_name}"