# -*- coding: utf-8 -*- from django.db import models from django.conf import settings from hvad.models import TranslatableModel, TranslatedFields, TranslationManager from city.models import City from country.models import Country from django.core.urlresolvers import reverse_lazy from django.utils.translation import get_language import copy from django.utils.translation import ugettext as _ # types of catalog _country = 1 _city = 2 class Specialist(models.Model): name = models.CharField(max_length=255, verbose_name=_(u"Полное имя"), blank=False) languages = models.CharField(max_length=255, verbose_name=_(u"Языки")) city = models.ForeignKey(City, on_delete=models.PROTECT, verbose_name=_(u"Город"), blank=True) country = models.ForeignKey(Country, on_delete=models.PROTECT, verbose_name=_(u"Страна")) photo = models.ImageField(verbose_name=_(u"Фото"), upload_to="specialist_catalog/specialist_photo/", blank=True) def __unicode__(self): return u"%s" % self.name class SpecialistCatalog(TranslatableModel): _country = 1 _city = 2 price = models.IntegerField(verbose_name=_(u"Цена"), default=200) currency = models.CharField(max_length=255, verbose_name=_(u"Валюта"), default=u"EUR") logo = models.ImageField(db_column= "logo_preview", verbose_name=_(u"Логотип"), blank=True, upload_to='specialist_catalog/logo_preview/') place_photo = models.ImageField(verbose_name=_(u"Фото для города"), blank=True, upload_to='specialist_catalog/place_photo/') specialists = models.ManyToManyField(Specialist, verbose_name=_(u"Специалисты"), blank=True) city = models.ForeignKey(City, on_delete=models.PROTECT, verbose_name=_(u"Город"), blank=True, null=True) country = models.ForeignKey(Country, on_delete=models.PROTECT, verbose_name=_(u"Страна"), blank=False) type = models.PositiveSmallIntegerField(verbose_name=_(u"Тип(Страна/Город)"), default=2) objects = TranslationManager() translations = TranslatedFields( title=models.CharField(max_length=255, verbose_name=_(u"Заголовок")), main_descr=models.CharField(max_length=1000, verbose_name=_(u"Краткое описание")), benefits=models.CharField(max_length=2000, verbose_name=_(u"Преимущества")), big_cities=models.TextField(verbose_name=_(u"Крупные города"), blank=True) ) def __init__(self, *args, **kwargs): super(SpecialistCatalog, self).__init__(*args, **kwargs) self.cache_fields = ['title', 'main_descr', 'benefits'] self.is_new = True def get_absolute_url(self): global _country, _city if self.type == _country: return reverse_lazy('spec_catalog_country', kwargs={'slug': self.country.url}) return reverse_lazy('spec_catalog_city', kwargs={'slug': self.city.url}) def save(self, *args, **kwargs): super(SpecialistCatalog, self).save(*args, **kwargs) self.initial_language = get_language()[:2] or 'ru' new_values = {field: getattr(self, field) for field in self.cache_fields} langs = [code for code, _ in settings.LANGUAGES] if self.is_new: for lang in langs: if lang not in self.get_available_languages(): self.translate(lang) for key, value in new_values.items(): setattr(self, key, value) self.save_translations(self) else: translations = {obj.language_code: obj for obj in list(self.translations.all())} for lang in langs: if lang is not self.initial_language: tr = translations[lang] for key, value in new_values.items(): #if u'%s' % getattr(tr, key) is u'%s' % self.var_cache[key]: setattr(tr, key, value) tr.save() self.lazy_translation_getter(self.initial_language) self.var_cache = {var: copy.copy(getattr(self, var)) for var in self.cache_fields} self.is_new = False return self def __unicode__(self): return self.lazy_translation_getter('title', unicode(self.pk)) def place(self): if self.type == _country: return self.country elif self.type == _city: return self.city else: return None class Feedback(models.Model): company = models.CharField(max_length=255, verbose_name=_(u"Название компании")) name = models.CharField(max_length=100, verbose_name=_(u"Имя")) text = models.CharField(max_length=5000, verbose_name=_(u"Текст отзыва")) logo = models.ImageField(verbose_name=_(u"Логотип компании"), upload_to='specialist_catalog/feedback_logo/', blank=True) catalog = models.ForeignKey(SpecialistCatalog, verbose_name=_(u"Страница"), blank=False) def __unicode__(self): return "Feedback from %s" % self.company