You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
5.0 KiB
111 lines
5.0 KiB
# -*- 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
|
|
|
|
|
|
|