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
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'^switch/(?P<url>.*)/(?P<action>.*)$', 'conference_switch'),
url(r'^search/$', 'search_conf'),
url(r'^(?P<url>.*)/$', 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.signals import post_save, pre_save
from django.contrib.contenttypes import generic
from django.utils import translation
from exposition.manager import ClientManager
from hvad.models import TranslatableModel, TranslatedFields, TranslationManager
from functions.translate import fill_with_signal
@ -172,6 +173,15 @@ class Conference(TranslatableModel, EventMixin, ExpoMixin):
def tags(self):
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):
if self.photogallery:
return self.photogallery

@ -4,6 +4,7 @@ from django.http import HttpResponseRedirect, HttpResponse
from django.core.context_processors import csrf
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.views.generic import ListView, FormView
#models and forms
from models import Service
from forms import ServiceForm, ServiceDeleteForm
@ -114,3 +115,30 @@ def get_city(request):
return render_to_response('checkbox_option.html', {'options': cities})
else:
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 views import CallBackListView, VisitListView, TranslationListView, AdvertisingListView, \
ParticipationListView, RemoteListView,TicketsListView
from service.admin import ServiceControlList, ServiceControl
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'^delete/(?P<url>.*)/$', 'service_delete'),
url(r'^change/(?P<url>.*)/$', 'service_change'),
@ -17,6 +20,6 @@ urlpatterns = patterns('service.admin',
url(r'order/tickets/$', TicketsListView.as_view()),
#ajax
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:
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):
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 %}
{% block bot_scripts %}
<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>
<script src="{% static 'custom_js/find_events.js' %}"></script>
{% endblock %}

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