diff --git a/trademark/migrations/0002_nice_glyph.py b/trademark/migrations/0002_nice_glyph.py new file mode 100644 index 0000000..0c15c20 --- /dev/null +++ b/trademark/migrations/0002_nice_glyph.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('trademark', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='nice', + name='glyph', + field=models.CharField(default='', max_length=255), + preserve_default=False, + ), + ] diff --git a/trademark/models.py b/trademark/models.py index 4fccd83..a3702ae 100644 --- a/trademark/models.py +++ b/trademark/models.py @@ -2,6 +2,7 @@ from django.db import models from django.db.models.signals import post_save, pre_save from django.dispatch import receiver +from django.db import connection from django.utils.translation import ugettext_lazy as _ @@ -14,6 +15,9 @@ from datetime import date from datetime import timedelta # from .cms_appconfig import TrademarkConfig +from collections import defaultdict +import re + TrademarkAPI = TrademarkSearchAPI() class Owner(models.Model): @@ -37,6 +41,7 @@ class Nice(models.Model): nice_id = models.IntegerField() title = models.CharField(max_length=255) description = models.TextField() + glyph = models.CharField(max_length=255) class Meta: verbose_name = _('nice') @@ -49,6 +54,54 @@ class Nice(models.Model): def __str__(self): return self.title + @property + def popular_products(self): + ids = [str(pid) for pid in Product.objects.filter(nice_id=self.nice_id).values_list('id', flat=True)] + cursor = connection.cursor() + query = "SELECT product_id, count(trademark_id) FROM trademark_trademark_products WHERE product_id IN (%s) GROUP BY product_id ORDER BY count(trademark_id) DESC" % ','.join(ids) + cursor.execute(query) + top_ids = [result[0] for result in cursor.fetchall() if result[1] > 10] + products = Product.objects.filter(id__in=top_ids) + + return sorted(products, key=lambda p: top_ids.index(p.pk)) + + @property + def popular_products_alphabet(self): + alphabet = defaultdict(lambda : defaultdict(list)) + for product in self.popular_products: + letter = product.title[0].upper() + first_word = product.title.split(' ')[0] + + # if title_sense: + alphabet[letter][first_word.capitalize()].append(product) + # elif not alphabet[letter][first_word.capitalize()]: + # alphabet[letter][first_word.capitalize()] = [] + + for letter, words in alphabet.items(): + for first_word, products in words.items(): + if len(products) == 1: + del alphabet[letter][first_word] + product = products.pop() + words = product.title + alphabet[letter][words] = product.id + else: + words = [] + for product in alphabet[letter][first_word]: + title = re.sub("[\(\[].*?[\)\]]", "", product.title) + title_sense = title.replace(first_word, '').strip() + if title_sense: + words.append(title_sense) + # words = [product.title for product in alphabet[letter][first_word]] + + alphabet[letter][first_word] = ', '.join(set(words)) + letter_items = alphabet[letter] + alphabet[letter] = sorted(letter_items.items(), key=lambda x: type(x[1]), reverse=True) + # alphabet[letter] = letter_items.items() + + print alphabet + return sorted(alphabet.items()) + + class Product(models.Model): title = models.TextField() diff --git a/trademark/templates/trademark/form.html b/trademark/templates/trademark/form.html index 7e74eae..6db8c8b 100644 --- a/trademark/templates/trademark/form.html +++ b/trademark/templates/trademark/form.html @@ -2,7 +2,7 @@
Исключительные права на эти товарные знаки не продлили, поэтому их регистрация возможна после проведения полного поиска.
-{{ nice.description }}
+ +Каждый товарный знак регистрируется в отношении определённых товаров и услуг, распределенных по классам. Всего таких классов на сегодняшний день 45 (34 — товаров и 11 — услуг), они установлены Международной классификацией товаров и услуг для регистрации знаков (МКТУ).
+МКТУ — это сокращенное название Международной классификации товаров и услуг (International (Nice) Classification of Goods and Services for the Purposes of the Registration of Marks), учрежденной Соглашением о классификациях (Ниццкое соглашение), предназначенной для регистрации товарных знаков.
+ +По принципу действия коды МКТУ (МКТиУ) сроднимы с кодами ОКВЭД (Общероссийский классификатор видов экономической деятельности).
+{{ nice.description }}
+Примеры {% if nice.nice_id > 38 %}услуг{% else %}товаров{% endif %} из класса:
+«{{ product.title }}» — это категория {% if nice.nice_id > 38 %}услуг{% else %}товаров{% endif %} в классе {{ nice.nice_id }} по классификации МКТУ, который описывает {{ nice.title|lower }}.
+{{ nice.description }}
+Каждый товарный знак регистрируется в отношении определённых товаров и услуг, распределенных по классам. Всего таких классов на сегодняшний день 45 (34 — товаров и 11 — услуг), они установлены Международной классификацией товаров и услуг для регистрации знаков (МКТУ).
+Исключительные права на эти товарные знаки не продлили, поэтому их регистрация возможна после проведения полного поиска.
+Эти товарные знаки были зарегистрированы в классе про {{ nice.title|lower }} в категории {% if nice.nice_id > 38 %}услуг{% else %}товаров{% endif %} {{ product.title|lower }}.
+Товарные знаки, зарегистрированные в классе про {{ nice.title|lower }} в категории {% if nice.nice_id > 38 %}услуг{% else %}товаров{% endif %} {{ product.title|lower }}.
+ +
Перед подачей заявки на регистрацию рекомендуем сделать полный поиск.
diff --git a/trademark/templates/trademark/search_detail.html b/trademark/templates/trademark/search_detail.html index 7f449b7..442dd45 100644 --- a/trademark/templates/trademark/search_detail.html +++ b/trademark/templates/trademark/search_detail.html @@ -53,7 +53,7 @@ {% endif %} {% else %} - Зарегистрирован во всех классах + Зарегистрирован во всех классах МКТУ {% endif %} diff --git a/trademark/urls.py b/trademark/urls.py index 729fdc4..bb7c9f3 100644 --- a/trademark/urls.py +++ b/trademark/urls.py @@ -8,6 +8,9 @@ from trademark.landing.api import get_random_list_trademarks urlpatterns = patterns('', url(r'^$', views.IndexView.as_view(), name='index'), + url(r'^nices/$', views.NicesView.as_view(), name='nices-catalog'), + url(r'^nices/(?P