from django.db import models from django.urls import reverse from django.utils.text import slugify from .base import validate_image_size, get_prose_editor_field, PartnerCategory from .images import ImageReference class CloudProvider(ImageReference): name = models.CharField(max_length=100) slug = models.SlugField(unique=True) description = get_prose_editor_field() 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) 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}) @property def get_logo(self): """Returns the logo from the library""" if self.image_library and self.image_library.image: return self.image_library.image return None class ConsultingPartner(ImageReference): name = models.CharField(max_length=200) slug = models.SlugField(unique=True) description = get_prose_editor_field() 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) # Partner category (hardcoded choices as requested) category = models.CharField( max_length=20, choices=PartnerCategory.choices, default=PartnerCategory.CONSULTING, help_text="Category of the partner", ) 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 f"{self.name} ({self.get_category_display()})" def get_category_display_badge(self): return f"Servala {self.get_category_display()} Partner" 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}) @property def get_logo(self): """Returns the logo from the library""" if self.image_library and self.image_library.image: return self.image_library.image return None