|
|
|
|
@ -2,16 +2,14 @@ |
|
|
|
|
import pytils |
|
|
|
|
import ast |
|
|
|
|
import json |
|
|
|
|
import datetime |
|
|
|
|
from django import forms |
|
|
|
|
from django.db.models import Q |
|
|
|
|
from django.utils import translation |
|
|
|
|
from django.utils.translation import ugettext_lazy as _ |
|
|
|
|
from haystack.query import EmptySearchQuerySet, SearchQuerySet |
|
|
|
|
from country.models import Area |
|
|
|
|
from exposition.models import Exposition |
|
|
|
|
from conference.models import Conference |
|
|
|
|
from seminar.models import Seminar |
|
|
|
|
from webinar.models import Webinar |
|
|
|
|
from company.models import Company |
|
|
|
|
from theme.models import Theme, Tag |
|
|
|
|
from country.models import Country |
|
|
|
|
@ -236,17 +234,17 @@ class AbstactSearchForm(forms.Form): |
|
|
|
|
sqs = sqs.filter(place_filter) |
|
|
|
|
|
|
|
|
|
return sqs#.order_by('data_begin') |
|
|
|
|
import datetime |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ExpositionSearchForm(AbstactSearchForm): |
|
|
|
|
search_url = '/expo/search/' |
|
|
|
|
autocomplete_url = '/search-form/autosearch/exposition/' |
|
|
|
|
title = _(u'ПОИСК СОБЫТИЙ') |
|
|
|
|
models = [Exposition] |
|
|
|
|
|
|
|
|
|
th = forms.MultipleChoiceField(label=_(u'Тематика'), choices=[(item.id, item.name) for item in Theme.active.all()], |
|
|
|
|
th = forms.MultipleChoiceField(label=_(u'Тематика'), choices=[(item.id, item.name) for item in Theme.active.expo_themes()], |
|
|
|
|
required=False, widget=forms.CheckboxSelectMultiple()) |
|
|
|
|
tg = forms.CharField(label=_(u'Теги'), required=False, widget=forms.CheckboxSelectMultiple()) |
|
|
|
|
#co = forms.CharField(label=_(u'Страна'), required=False, widget=forms.CheckboxSelectMultiple()) |
|
|
|
|
|
|
|
|
|
area = forms.MultipleChoiceField(label=_(u'Регион'), |
|
|
|
|
choices=[(item.id, item.name) for item in Area.objects.language().all()], |
|
|
|
|
@ -268,7 +266,7 @@ class ExpositionSearchForm(AbstactSearchForm): |
|
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs): |
|
|
|
|
super(ExpositionSearchForm, self).__init__(*args, **kwargs) |
|
|
|
|
self.theme_classes = {item.id:item.generate_search_class() for item in Theme.objects.all()} |
|
|
|
|
self.theme_classes = {item.id:item.generate_search_class() for item in Theme.objects.language().all()} |
|
|
|
|
|
|
|
|
|
def search(self): |
|
|
|
|
|
|
|
|
|
@ -335,109 +333,6 @@ class ExpositionSearchForm(AbstactSearchForm): |
|
|
|
|
return sqs.order_by('data_begin') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PlaceSearchForm(AbstactSearchForm): |
|
|
|
|
search_url = '/places/search/' |
|
|
|
|
autocomplete_url = '/search-form/autosearch/place/' |
|
|
|
|
title = _(u'ПОИСК МЕСТ') |
|
|
|
|
models = [PlaceExposition, PlaceConference] |
|
|
|
|
# place fields |
|
|
|
|
area = forms.MultipleChoiceField(label=_(u'Регион'), choices=[(item.id, item.name) for item in list(Area.objects.language().all())], |
|
|
|
|
required=False, widget=forms.CheckboxSelectMultiple()) |
|
|
|
|
co = forms.MultipleChoiceField(label=_(u'Страна'), required=False, widget=forms.CheckboxSelectMultiple(), |
|
|
|
|
choices=[(item.id, item.name) for item in list(Country.objects.expo_countries())] |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
ci = forms.MultipleChoiceField(label=_(u'Город'), required=False, widget=forms.CheckboxSelectMultiple(), |
|
|
|
|
choices=[(item.id, item.name) for item in list(City.used.expo_cities())] |
|
|
|
|
) |
|
|
|
|
# |
|
|
|
|
place_type = forms.MultipleChoiceField(label=_(u'Тип'), required=False, choices=[]) |
|
|
|
|
|
|
|
|
|
def get_place_type_display(self): |
|
|
|
|
return _(u'Не важно') |
|
|
|
|
def search(self): |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CompanySearchForm(AbstactSearchForm): |
|
|
|
|
search_url = '/members/search/' |
|
|
|
|
autocomplete_url = '/search-form/autosearch/company/' |
|
|
|
|
title = _(u'ПОИСК УЧАСТНИКОВ') |
|
|
|
|
models = [Company] |
|
|
|
|
th = forms.MultipleChoiceField(label=_(u'Тематика'), choices=[(item.id, item.name) for item in Theme.objects.all()], |
|
|
|
|
required=False, widget=forms.CheckboxSelectMultiple()) |
|
|
|
|
tg = forms.CharField(label=_(u'Теги'), required=False, widget=forms.CheckboxSelectMultiple()) |
|
|
|
|
|
|
|
|
|
area = forms.MultipleChoiceField(label=_(u'Регион'), choices=[(item.id, item.name) for item in Area.objects.language().all()], |
|
|
|
|
required=False, widget=forms.CheckboxSelectMultiple()) |
|
|
|
|
co = forms.MultipleChoiceField(label=_(u'Страна'), required=False, widget=forms.CheckboxSelectMultiple(), |
|
|
|
|
choices=[(item.id, item.name) for item in Country.objects.expo_countries()] |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
ci = forms.MultipleChoiceField(label=_(u'Город'), required=False, widget=forms.CheckboxSelectMultiple(), |
|
|
|
|
choices=[(item.id, item.name) for item in City.used.expo_cities()] |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs): |
|
|
|
|
super(CompanySearchForm, self).__init__(*args, **kwargs) |
|
|
|
|
self.theme_classes = {item.id:item.generate_search_class() for item in list(Theme.objects.language().all())} |
|
|
|
|
|
|
|
|
|
def search(self): |
|
|
|
|
q = self.cleaned_data.get('q') |
|
|
|
|
w = self.cleaned_data.get('w') |
|
|
|
|
th = self.cleaned_data.get('th') |
|
|
|
|
tg = self.cleaned_data.get('tg') |
|
|
|
|
c = self.cleaned_data.get('c') |
|
|
|
|
city = self.cleaned_data.get('city') |
|
|
|
|
|
|
|
|
|
sqs = SearchQuerySet().models(Company) |
|
|
|
|
|
|
|
|
|
if q: |
|
|
|
|
|
|
|
|
|
sqs = sqs.auto_query(q) |
|
|
|
|
|
|
|
|
|
if w: |
|
|
|
|
sqs = sqs.filter(where__contains=w) |
|
|
|
|
if th: |
|
|
|
|
|
|
|
|
|
sqs = sqs.filter(theme__in=th) |
|
|
|
|
if tg: |
|
|
|
|
sqs = sqs.filter(tag__in=tg) |
|
|
|
|
if c: |
|
|
|
|
sqs = sqs.filter(country__in=c) |
|
|
|
|
if city: |
|
|
|
|
sqs = sqs.filter(country__in=c) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return sqs |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class EventSearchForm(forms.Form): |
|
|
|
|
q = forms.CharField(label=_(u'Поиск'), required=False) |
|
|
|
|
w = forms.CharField(label=_(u'Где'), required=False) |
|
|
|
|
fr = forms.DateField(required=False, |
|
|
|
|
widget=forms.DateInput(attrs={'class': 'date', 'id': 'dateFrom', |
|
|
|
|
'placeholder': _(u'дд.мм.гггг')})) |
|
|
|
|
to = forms.DateField(required=False, |
|
|
|
|
widget=forms.DateInput(attrs={'class': 'date', 'id': 'dateTo', |
|
|
|
|
'placeholder': _(u'дд.мм.гггг')})) |
|
|
|
|
|
|
|
|
|
def search(self): |
|
|
|
|
|
|
|
|
|
if not self.is_valid(): |
|
|
|
|
return EmptySearchQuerySet() |
|
|
|
|
q = self.cleaned_data.get('q') |
|
|
|
|
w = self.cleaned_data.get('w') |
|
|
|
|
|
|
|
|
|
if not q and not w: |
|
|
|
|
return EmptySearchQuerySet() |
|
|
|
|
sqs = SearchQuerySet().models(Exposition, Conference, Seminar, Webinar) |
|
|
|
|
|
|
|
|
|
if q: |
|
|
|
|
sqs = sqs.auto_query(q) |
|
|
|
|
if w: |
|
|
|
|
sqs = sqs.filter(where__contains=w) |
|
|
|
|
|
|
|
|
|
return sqs |
|
|
|
|
|
|
|
|
|
|