website/hub/services/models/providers.py

103 lines
3.3 KiB
Python
Raw Normal View History

2025-05-23 16:04:33 +02:00
from django.db import models
from django.urls import reverse
from django.utils.text import slugify
from django_prose_editor.fields import ProseEditorField
from .base import validate_image_size
2025-07-04 17:26:09 +02:00
from .images import ImageReference
2025-05-23 16:04:33 +02:00
2025-07-04 17:26:09 +02:00
class CloudProvider(ImageReference):
2025-05-23 16:04:33 +02:00
name = models.CharField(max_length=100)
slug = models.SlugField(unique=True)
description = ProseEditorField()
website = models.URLField()
linkedin = models.URLField(blank=True)
phone = models.CharField(max_length=25, blank=True, null=True)
email = models.EmailField(max_length=254, blank=True, null=True)
address = models.TextField(max_length=250, blank=True, null=True)
2025-07-04 17:26:09 +02:00
# Original logo field - keep temporarily for migration
2025-05-23 16:04:33 +02:00
logo = models.ImageField(
upload_to="cloud_provider_logos/",
validators=[validate_image_size],
null=True,
blank=True,
)
order = models.IntegerField(default=0)
is_featured = models.BooleanField(default=False)
disable_listing = models.BooleanField(default=False)
class Meta:
ordering = ["order"]
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.name)
super().save(*args, **kwargs)
def get_absolute_url(self):
return reverse("services:provider_detail", kwargs={"slug": self.slug})
2025-07-04 17:26:09 +02:00
@property
def get_logo(self):
"""Returns the logo from library or falls back to legacy logo"""
if self.image_library and self.image_library.image:
return self.image_library.image
return self.logo
2025-05-23 16:04:33 +02:00
2025-07-04 17:26:09 +02:00
class ConsultingPartner(ImageReference):
2025-05-23 16:04:33 +02:00
name = models.CharField(max_length=200)
slug = models.SlugField(unique=True)
description = ProseEditorField()
2025-07-04 17:26:09 +02:00
# Original logo field - keep temporarily for migration
2025-05-23 16:04:33 +02:00
logo = models.ImageField(
upload_to="partner_logos/",
validators=[validate_image_size],
null=True,
blank=True,
)
website = models.URLField(blank=True)
linkedin = models.URLField(blank=True)
phone = models.CharField(max_length=25, blank=True, null=True)
email = models.EmailField(max_length=254, blank=True, null=True)
address = models.TextField(max_length=250, blank=True, null=True)
services = models.ManyToManyField(
"services.Service", related_name="consulting_partners", blank=True
)
cloud_providers = models.ManyToManyField(
CloudProvider, related_name="consulting_partners", blank=True
)
order = models.IntegerField(default=0)
is_featured = models.BooleanField(default=False)
disable_listing = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
ordering = ["order"]
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.name)
super().save(*args, **kwargs)
def get_absolute_url(self):
return reverse("services:partner_detail", kwargs={"slug": self.slug})
2025-07-04 17:26:09 +02:00
@property
def get_logo(self):
"""Returns the logo from library or falls back to legacy logo"""
if self.image_library and self.image_library.image:
return self.image_library.image
return self.logo