mirror of
https://github.com/Rushilwiz/HiLo.git
synced 2025-04-18 10:50:17 -04:00
160 lines
6.1 KiB
Python
Executable File
160 lines
6.1 KiB
Python
Executable File
from django.db import models
|
|
|
|
import os
|
|
from django.utils import timezone
|
|
import pytz
|
|
|
|
|
|
from django.core.files import File
|
|
|
|
from django.conf import settings
|
|
from django.templatetags.static import static
|
|
from django.utils.text import slugify
|
|
|
|
|
|
from PIL import Image, ImageDraw, ImageFont
|
|
|
|
# Create your models here.
|
|
|
|
class Location (models.Model):
|
|
name = models.CharField(max_length=20, blank=True, null=True)
|
|
insta = models.CharField(max_length=20, blank=True, null=True)
|
|
|
|
slug = models.CharField(max_length=20, blank=True, null=True)
|
|
|
|
hero = models.ImageField(default="hero.png", upload_to='heros')
|
|
hero_mobile = models.ImageField(default="hero-mobile.png", upload_to='heros')
|
|
|
|
results = models.ImageField(default="results.png", upload_to='results')
|
|
results_mobile = models.ImageField(default="results-mobile.png", upload_to='results')
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
def save(self, *args, **kwargs):
|
|
def drawPic (input, output, font, x, y, text):
|
|
img = Image.open(input)
|
|
draw = ImageDraw.Draw(img)
|
|
draw.text((x,y), text, font=font, fill=(255,255,255))
|
|
img.save(output)
|
|
|
|
self.slug = slugify(self.name)
|
|
self.hero = f'heros/hero-{self.slug}.png'
|
|
self.hero_mobile = f'heros/hero-{self.slug}-mobile.png'
|
|
if self.insta != None and self.insta != '' and self.insta[0] != '@':
|
|
self.insta = '@' + self.insta
|
|
|
|
self.results = f'results/results-{self.slug}.png'
|
|
self.results_mobile = f'results/results-{self.slug}-mobile.png'
|
|
super().save(*args, **kwargs)
|
|
|
|
output = f'{settings.PROJECT_PATH}/media/heros/hero-{self.slug}.png'
|
|
mobile_output = f'{settings.PROJECT_PATH}/media/heros/hero-{self.slug}-mobile.png'
|
|
|
|
font = ImageFont.truetype(settings.PROJECT_PATH + static("css/fonts/Hanson-Bold.ttf"), 42)
|
|
drawPic(settings.PROJECT_PATH + static("css/res/hero.png"), output, font, 945, 140, self.slug.upper())
|
|
drawPic(output, output, font, 945, 210, self.slug.upper())
|
|
drawPic(output, output, font, 945, 270, self.slug.upper())
|
|
drawPic(output, output, font, 625, 762, self.slug.upper())
|
|
drawPic(output, output, font, 625, 825, self.slug.upper())
|
|
drawPic(output, output, font, 625, 895, self.slug.upper())
|
|
font = ImageFont.truetype(settings.PROJECT_PATH + static("css/fonts/Hanson-Bold.ttf"), 65)
|
|
drawPic(settings.PROJECT_PATH + static("css/res/hero-mobile.png"), mobile_output, font, 600, 290, self.slug.upper())
|
|
drawPic(mobile_output, mobile_output, font, 600, 390, self.slug.upper())
|
|
drawPic(mobile_output, mobile_output, font, 600, 490, self.slug.upper())
|
|
drawPic(mobile_output, mobile_output, font, 100, 1370, self.slug.upper())
|
|
drawPic(mobile_output, mobile_output, font, 100, 1470, self.slug.upper())
|
|
drawPic(mobile_output, mobile_output, font, 100, 1570, self.slug.upper())
|
|
mobile_img = Image.open(mobile_output)
|
|
mobile_img.resize((1920, 1080))
|
|
mobile_img.save(mobile_output)
|
|
|
|
output = f'{settings.PROJECT_PATH}/media/results/results-{self.slug}.png'
|
|
mobile_output = f'{settings.PROJECT_PATH}/media/results/results-{self.slug}-mobile.png'
|
|
font = ImageFont.truetype(settings.PROJECT_PATH + static("css/fonts/FuturaPTMedium.otf"), 60)
|
|
|
|
if self.insta != None and self.insta != '':
|
|
drawPic (settings.PROJECT_PATH + static("css/res/results.png"), output, font, 735, 805, self.insta)
|
|
drawPic (settings.PROJECT_PATH + static("css/res/results-mobile.png"), mobile_output, font, 360, 1380, self.insta)
|
|
else:
|
|
img = Image.open(settings.PROJECT_PATH + static("css/res/results-noinsta.png"))
|
|
img.save(output)
|
|
img = Image.open(settings.PROJECT_PATH + static("css/res/results-mobile-noinsta.png"))
|
|
img.save(mobile_output)
|
|
|
|
|
|
|
|
class Poll (models.Model):
|
|
location = models.OneToOneField(Location, on_delete=models.CASCADE)
|
|
|
|
ask_hi = models.BooleanField(default=True)
|
|
hi_text = models.CharField(max_length=100, blank=True, null=True, default='What was the <span class="hi">Hi</span> of this week?')
|
|
|
|
ask_lo = models.BooleanField(default=True)
|
|
lo_text = models.CharField(max_length=100, blank=True, null=True, default='What was the <span class="lo">Lo</span> of this week?')
|
|
|
|
ask_emotion = models.BooleanField(default=True)
|
|
emotion_text = models.CharField(max_length=100, blank=True, null=True, default="how are you feeling today?")
|
|
|
|
ask_name = models.BooleanField(default=True)
|
|
name_text = models.CharField(max_length=100, blank=True, null=True, default="what's your name?")
|
|
|
|
ask_place = models.BooleanField(default=True)
|
|
place_text = models.CharField(max_length=100, blank=True, null=True, default="where are you from?")
|
|
|
|
ask_question = models.BooleanField(default=False)
|
|
question_text = models.CharField(max_length=100, blank=True, null=True)
|
|
|
|
pub_date = models.DateTimeField('date published', blank=True, null=True)
|
|
|
|
def __str__(self):
|
|
return f"{self.location.name}'s Poll"
|
|
|
|
def __save__(self, *args, **kwargs):
|
|
self.pub_date = timezone.now()
|
|
super().save(self, *args, **kwargs)
|
|
|
|
|
|
EMOTION_CHOICES= [
|
|
('happy', 'Happy'),
|
|
('meh', 'Meh'),
|
|
('sad', 'Sad'),
|
|
]
|
|
|
|
class Answer (models.Model):
|
|
poll = models.ForeignKey(Poll, on_delete=models.CASCADE)
|
|
hi = models.CharField(max_length=200, blank=True, null=True)
|
|
lo = models.CharField(max_length=200, blank=True, null=True)
|
|
emotion = models.CharField(max_length=8, default='meh', choices=EMOTION_CHOICES, blank=True, null=True)
|
|
name = models.CharField(max_length=100, blank=True, null=True)
|
|
place = models.CharField(max_length=100, blank=True, null=True)
|
|
current_question = models.CharField(max_length=100, blank=True, null=True)
|
|
question = models.CharField(max_length=200, blank=True, null=True)
|
|
time = models.DateTimeField('time answered', blank=True, null=True)
|
|
|
|
def save(self, *args, **kwargs):
|
|
self.time = timezone.now()
|
|
if self.hi == '':
|
|
self.hi = "Not stated"
|
|
|
|
if self.lo == '':
|
|
self.lo = "Not stated"
|
|
|
|
if self.name == '':
|
|
self.name = "Anonymous"
|
|
|
|
if self.place == '':
|
|
self.place = "Somewhere"
|
|
|
|
if self.question == '':
|
|
self.question = "Not stated"
|
|
|
|
if self.current_question == '':
|
|
self.current_question = self.poll.question_text
|
|
|
|
super().save(self, *args, **kwargs)
|
|
|
|
|
|
def __str__(self):
|
|
return f"{self.name}'s response on {self.poll.location.name} at {self.time.strftime('%m/%d/%Y, %H:%M:%S')}"
|