Files
shoppy/web/models.py
T

120 lines
3.7 KiB
Python

from io import BytesIO
from django.core.files.base import ContentFile
from django.db import models
from django.utils.text import gettext_lazy as _
from PIL import Image
from config.models import SingletonModel
class WebSettings(SingletonModel):
web_title = models.CharField(
max_length=32, blank=False, verbose_name=_("título de la web")
)
web_description = models.CharField(
max_length=128, blank=True, default="", verbose_name=_("descripción de la web")
)
logo = models.ImageField(
blank=True, null=True, upload_to="assets", verbose_name=_("logo de la web")
)
business_name = models.CharField(
max_length=128,
blank=True,
null=True,
verbose_name=_("nombre de negocio"),
help_text=_("nombre fiscal del comercio"),
)
business_vat_id = models.CharField(
max_length=16, blank=True, null=True, verbose_name=_("CIF del negocio")
)
business_brand = models.CharField(
max_length=64,
blank=True,
null=True,
verbose_name=_("marca de negocio"),
help_text=_("marca o nombre comercial que se va a mostrar en la web"),
)
business_address = models.CharField(
max_length=64, blank=True, null=True, verbose_name=_("dirección de negocio")
)
business_state = models.CharField(
max_length=32,
blank=True,
null=True,
verbose_name=_("unidad territorial del negocio"),
)
business_zip = models.CharField(
max_length=16,
blank=True,
null=True,
verbose_name=_("código postal del negocio"),
)
business_phone = models.CharField(
max_length=16,
blank=True,
null=True,
verbose_name=_("número de teléfono de contacto"),
)
business_email = models.EmailField(
max_length=80, blank=True, null=True, verbose_name=_("e-mail de contacto")
)
business_email_2 = models.EmailField(
max_length=80,
blank=True,
null=True,
verbose_name=_("e-mail secundario de contacto"),
)
bg_color = models.CharField(
max_length=9,
default="",
blank=True,
null=True,
verbose_name=_("color de fondo"),
)
theme_color = models.CharField(
max_length=9, default="", blank=True, null=True, verbose_name=_("color de tema")
)
logo_256 = models.ImageField(
upload_to="assets", blank=True, null=True, verbose_name=_("logo 256x256")
)
logo_128 = models.ImageField(
upload_to="assets", blank=True, null=True, verbose_name=_("logo 128x128")
)
logo_64 = models.ImageField(
upload_to="assets", blank=True, null=True, verbose_name=_("logo 64x64")
)
logo_32 = models.ImageField(
upload_to="assets", blank=True, null=True, verbose_name=_("logo 32x32")
)
theme_colors = models.JSONField(
default=dict, verbose_name=_("colores del tema"), blank=True
)
def get_resized_logo(self, size):
width, height = size
image = Image.open(self.logo)
image = image.resize(size, Image.Resampling.LANCZOS)
buffer = BytesIO()
image.save(fp=buffer, format="PNG")
return ContentFile(buffer.getvalue(), name=f"logo_{width}.png")
def save(self, *args, **kwargs):
if self.logo:
self.logo_32 = self.get_resized_logo((32, 32))
self.logo_64 = self.get_resized_logo((64, 64))
self.logo_128 = self.get_resized_logo((128, 128))
self.logo_256 = self.get_resized_logo((256, 256))
super().save(*args, **kwargs)
class Meta:
verbose_name = _("ajustes de la web")
verbose_name_plural = _("ajustes de la web")