Services controling. Start working

remotes/origin/1203
Kotiuk Nazarii 11 years ago
parent 700c4051a4
commit 22b010d372
  1. 19
      conference/admin.py
  2. 1
      conference/admin_urls.py
  3. 10
      conference/models.py
  4. 28
      service/admin.py
  5. 5
      service/admin_urls.py
  6. 27
      service/forms.py
  7. 13
      service/models.py
  8. 47
      static/custom_js/find_events.js
  9. 70
      templates/admin/service/control.html
  10. 39
      templates/admin/service/control_list.html
  11. 45
      templates/admin/settings/main_page.html
  12. 4
      templates/client/search/indexes/conference/conference_text.txt

@ -295,4 +295,21 @@ class ConferenceListView(AdminListView):
model = Conference model = Conference
def upload_conference_photo(request, conf_id): def upload_conference_photo(request, conf_id):
return upload_photo(request, conf_id, Conference) return upload_photo(request, conf_id, Conference)
from django.utils import translation
from haystack.query import SearchQuerySet
import json
from exposition.admin import get_by_lang
def search_conf(request):
term = request.GET['term'].capitalize()
lang = translation.get_language()
if not term:
qs = SearchQuerySet().models(Conference).order_by('text')[:30]
else:
qs = SearchQuerySet().models(Conference).autocomplete(content_auto=term).order_by('text')[:30]
result = [{'id': item.pk, 'label': get_by_lang(item, 'name', lang)} for item in qs]
return HttpResponse(json.dumps(result), content_type='application/json')

@ -9,6 +9,7 @@ urlpatterns = patterns('conference.admin',
#url(r'^change/(?P<url>.*)/$', 'conference_change'), #url(r'^change/(?P<url>.*)/$', 'conference_change'),
url(r'^switch/(?P<url>.*)/(?P<action>.*)$', 'conference_switch'), url(r'^switch/(?P<url>.*)/(?P<action>.*)$', 'conference_switch'),
url(r'^search/$', 'search_conf'),
url(r'^(?P<url>.*)/$', ConferenceView.as_view()), url(r'^(?P<url>.*)/$', ConferenceView.as_view()),
url(r'^$', ConferenceView.as_view()), url(r'^$', ConferenceView.as_view()),

@ -5,6 +5,7 @@ from django.db import models
from django.db.models import Q from django.db.models import Q
from django.db.models.signals import post_save, pre_save from django.db.models.signals import post_save, pre_save
from django.contrib.contenttypes import generic from django.contrib.contenttypes import generic
from django.utils import translation
from exposition.manager import ClientManager from exposition.manager import ClientManager
from hvad.models import TranslatableModel, TranslatedFields, TranslationManager from hvad.models import TranslatableModel, TranslatedFields, TranslationManager
from functions.translate import fill_with_signal from functions.translate import fill_with_signal
@ -172,6 +173,15 @@ class Conference(TranslatableModel, EventMixin, ExpoMixin):
def tags(self): def tags(self):
return self.tag.language().all() return self.tag.language().all()
def get_index_text(self):
translation.activate('ru')
translations = self.translations.all()
names = ' '.join([tr.name for tr in translations])
titles = ' '.join([tr.main_title for tr in translations])
themes = ' '.join([' '.join(theme.get_all_names()) for theme in self.theme.all()])
tags = ' '.join([' '.join(tag.get_all_names()) for tag in self.tag.all()])
return names + ' ' + titles + ' ' + themes + ' ' + tags
def get_gallery(self): def get_gallery(self):
if self.photogallery: if self.photogallery:
return self.photogallery return self.photogallery

@ -4,6 +4,7 @@ from django.http import HttpResponseRedirect, HttpResponse
from django.core.context_processors import csrf from django.core.context_processors import csrf
from django.conf import settings from django.conf import settings
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.views.generic import ListView, FormView
#models and forms #models and forms
from models import Service from models import Service
from forms import ServiceForm, ServiceDeleteForm from forms import ServiceForm, ServiceDeleteForm
@ -114,3 +115,30 @@ def get_city(request):
return render_to_response('checkbox_option.html', {'options': cities}) return render_to_response('checkbox_option.html', {'options': cities})
else: else:
return HttpResponse('error') return HttpResponse('error')
class ServiceControlList(ListView):
model = Service
template_name = 'admin/service/control_list.html'
paginate_by = 20
from django.views.generic.detail import SingleObjectMixin
from django.views.generic.edit import FormMixin
from django.views.generic import DetailView
from service.forms import ServiceControlForm
class ServiceControl(FormMixin, DetailView):
form_class = ServiceControlForm
template_name = 'admin/service/control.html'
model = Service
def get_form(self, form_class):
obj = self.object
data = obj.get_current_state()
return form_class(data)
def get_context_data(self, **kwargs):
context = super(ServiceControl, self).get_context_data(**kwargs)
context['form'] = self.get_form(self.form_class)
return context

@ -2,8 +2,11 @@
from django.conf.urls import patterns, include, url from django.conf.urls import patterns, include, url
from views import CallBackListView, VisitListView, TranslationListView, AdvertisingListView, \ from views import CallBackListView, VisitListView, TranslationListView, AdvertisingListView, \
ParticipationListView, RemoteListView,TicketsListView ParticipationListView, RemoteListView,TicketsListView
from service.admin import ServiceControlList, ServiceControl
urlpatterns = patterns('service.admin', urlpatterns = patterns('service.admin',
url(r'^control/list/$', ServiceControlList.as_view()),
url(r'^control/(?P<pk>.*)/$', ServiceControl.as_view()),
url(r'^add.*/$', 'service_add'), url(r'^add.*/$', 'service_add'),
url(r'^delete/(?P<url>.*)/$', 'service_delete'), url(r'^delete/(?P<url>.*)/$', 'service_delete'),
url(r'^change/(?P<url>.*)/$', 'service_change'), url(r'^change/(?P<url>.*)/$', 'service_change'),
@ -17,6 +20,6 @@ urlpatterns = patterns('service.admin',
url(r'order/tickets/$', TicketsListView.as_view()), url(r'order/tickets/$', TicketsListView.as_view()),
#ajax #ajax
url(r'^get_city/$', 'get_city'), url(r'^get_city/$', 'get_city'),
#url(r'^get_country/$', 'get_country'), #url(r'^get_country/$', 'get_country'),
) )

@ -121,4 +121,29 @@ class ServiceDeleteForm(forms.ModelForm):
class Meta: class Meta:
model = Service model = Service
fields = ('url',) fields = ('url',)
from country.models import Area, Country
from exposition.models import Exposition
from conference.models import Conference
class ServiceControlForm(forms.Form):
event = [{'verbose': 'Выставки', 'model': Exposition, 'id': 1},
{'verbose': 'Конференции', 'model': Conference, 'id': 2}]
region = forms.ChoiceField(required=False, label='Регион',
choices=[('', '')]+[(item.id, item.name)
for item in list(Area.objects.all())])
country = forms.MultipleChoiceField(required=False, label='Страны',
choices=[('', '')]+[(item.id, item.name)
for item in list(Country.objects.all())])
country_all = forms.BooleanField()
expositions = forms.CharField(label=u'Выставки', widget=forms.HiddenInput(), required=False)
conferences = forms.CharField(label=u'Конференции', widget=forms.HiddenInput(), required=False)
def __init__(self, *args, **kwargs):
super(ServiceControlForm, self).__init__(*args, **kwargs)
self.fields['event_type'] = forms.MultipleChoiceField(required=False, label = 'Тип события',
widget=forms.CheckboxSelectMultiple(),
choices=[(item['id'], item['verbose'])
for item in self.event])

@ -47,6 +47,19 @@ class Service(TranslatableModel):
def get_price(self): def get_price(self):
pr = self.price pr = self.price
def get_current_state(self):
"""
uses for control form
:return:
"""
state = {'event_type':[1, 2],
'region': [],
'country':[],
'country_all': True,
'expositions': [],
'conferences': []}
return state

@ -0,0 +1,47 @@
function make_event_select(id, url, placeholder){
$(id).select2({
placeholder: placeholder,
multiple: true,
ajax: {
url: url,
width: '550px',
dataType: "json",
quietMillis: 200,
multiple: true,
data: function(term, page, theme){
return {term: term,
page: page};
},
results: function (data) {
var results = [];
$.each(data, function(index, item){
results.push({
id: item.id,
text: item.label
});
});
return {results: results};
}
},
initSelection : function(element, callback) {
var data = [];
$(element.val().split(",")).each(function(i) {
var item = this.split(':');
data.push({
id: item[0],
text: item[1]
});
});
callback(data);
}
});
}
$(document).ready(function(){
make_event_select('#id_expositions', '/admin/exposition/search/', 'Выставки');
make_event_select('#id_conferences', '/admin/conference/search/', 'Конференции');
});

@ -0,0 +1,70 @@
{% extends 'base.html' %}
{% load static %}
{% block scripts %}
{# selects #}
<link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/>
<script src="{% static 'js/select/select2.js' %}"></script>
{% endblock %}
{% block body %}
<form method="post" class="form-horizontal" name="form" id="main_form"> {% csrf_token %}
<fieldset>
<legend><i class="icon-edit"></i>Управление услугой {{ object.name }}</legend>
<div class="box span8" >
<div class="box-header well">
<h2><i class="icon-pencil"></i></h2>
</div>
<div class="box-content">
{# event_type #}
<div class="control-group {% if form.event_type.errors %}error{% endif %}">
<label class="control-label">{{ form.event_type.label }}:</label>
<div class="controls">
{{ form.event_type }}
</div>
</div>
{# region #}
<div class="control-group {% if form.region.errors %}error{% endif %}">
<label class="control-label">{{ form.region.label }}:</label>
<div class="controls">{{ form.region }}
<span class="help-inline">{{ form.region.errors }}</span>
</div>
</div>
{# country #}
<div class="control-group {% if form.country.errors %}error{% endif %}">
<label class="control-label">{{ form.country.label }}:</label>
<div class="controls">{{ form.country }}
<span class="help-inline">{{ form.country.errors }}</span>
</div>
</div>
{# expositions #}
<div class="control-group {% if form.expositions.errors %}error{% endif %}">
<label class="control-label">{{ form.expositions.label }}:</label>
<div class="controls">{{ form.expositions }}
<span class="help-inline">{{ form.expositions.errors }}</span>
</div>
</div>
{# conferences #}
<div class="control-group {% if form.conferences.errors %}error{% endif %}">
<label class="control-label">{{ form.conferences.label }}:</label>
<div class="controls">{{ form.conferences }}
<span class="help-inline">{{ form.conferences.errors }}</span>
</div>
</div>
</div>
</div>
</fieldset>
</form>
{% endblock %}
{% block bot_scripts %}
<script src="{% static 'custom_js/find_events.js' %}"></script>
{% endblock %}

@ -0,0 +1,39 @@
{% extends 'admin_list.html' %}
{% block body %}
<div class="box span8">
<div class="box-header well">
<h2><i class="icon-arrow-down"></i>Список услуг</h2>
</div>
<div class="box-content">
<table class="table table-hover">
<thead>
<tr>
<th>id</th>
<th>Название</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
{% for item in object_list %}
<tr>
<td>{{ item.id }}</td>
<td>{{ item.name }}</td>
<td>
<a class="btn-small btn-info" href="/admin/service/control/{{ item.id }}/">
Управлять
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{# pagination #}
{% include 'admin/includes/admin_pagination.html' with page_obj=object_list %}
</div>
{% endblock %}

@ -89,48 +89,5 @@
{% endblock %} {% endblock %}
{% block bot_scripts %} {% block bot_scripts %}
<script> <script src="{% static 'custom_js/find_events.js' %}"></script>
$(document).ready(function(){
$('#id_expositions').select2({
placeholder: "Выставки",
multiple: true,
ajax: {
url: "/admin/exposition/search/",
width: '550px',
dataType: "json",
quietMillis: 200,
multiple: true,
data: function(term, page, theme){
return {term: term,
page: page};
},
results: function (data) {
var results = [];
$.each(data, function(index, item){
results.push({
id: item.id,
text: item.label
});
});
return {results: results};
}
},
initSelection : function(element, callback) {
var data = [];
$(element.val().split(",")).each(function(i) {
var item = this.split(':');
data.push({
id: item[0],
text: item[1]
});
});
callback(data);
}
});
});
</script>
{% endblock %} {% endblock %}

@ -1,3 +1 @@
{% for text in object.get_index_text %} {{ object.get_index_text }}
{{ text }}
{% endfor %}
Loading…
Cancel
Save