Linked service improvements

remotes/origin/1203
Ivan Kovalkovskyi 10 years ago
parent c09c058905
commit e5fd4682f3
  1. 24
      service/admin.py
  2. 19
      service/forms.py
  3. 7
      service/management/commands/create_linked_services.py
  4. 24
      service/models.py
  5. 303
      templates/admin/service/linked_service.html
  6. 155
      templates/admin/service/test_add.html

@ -143,35 +143,13 @@ class ServiceControl(FormMixin, DetailView):
context['form'] = self.get_form(self.form_class)
return context
from .forms import _ServiceForm
class ServiceAddView(FormView):
form_class = _ServiceForm
template_name = 'admin/service/test_add.html'
success_url = '/'
def get(self, request, *args, **kwargs):
data = request.GET
form = self.form_class(data)
if form.is_valid():
countries = form.cleaned_data['countries']
types = form.cleaned_data['type']
expos = form.cleaned_data['expos']
confs = form.cleaned_data['confs']
is_all_cnt = form.cleaned_data['all_counties']
raise
else:
pass
from django.shortcuts import get_object_or_404
from django.views.generic import UpdateView, ListView, DeleteView
from django.db.models import F
from django.core.urlresolvers import reverse
from .forms import LinkedServiceForm
from .models import LinkedService
from exposition.models import Exposition
from conference.models import Conference

@ -149,14 +149,6 @@ class ServiceControlForm(forms.Form):
for item in self.event])
class _ServiceForm(forms.Form):
type = forms.MultipleChoiceField(choices=[(x, x) for x in Service.type], widget=forms.CheckboxSelectMultiple)
countries = forms.MultipleChoiceField(choices=[(x.id,x.name) for x in Country.objects.language().all()])
all_counties = forms.BooleanField(widget=forms.CheckboxInput)
expos = forms.CharField(widget=forms.HiddenInput)
confs = forms.CharField(widget=forms.HiddenInput)
from .models import LinkedService
from django.db.models.query import EmptyQuerySet
@ -168,20 +160,23 @@ class LinkedServiceForm(forms.ModelForm):
class Meta:
model = LinkedService
fields = ['countries', 'all_countries', 'expositions', 'conferences']
fields = ['countries', 'exclude_countries', 'expositions', 'conferences']
help_text = {
'exclude_countries': u'При отсутствии стран этот флаг значит ВСЕ страны!'
}
def clean_countries(self):
return list(set(self.cleaned_data['countries']))
return list(set(self.cleaned_data.get('countries')))
def clean_expositions(self):
expositions = EmptyQuerySet()
if self.cleaned_data['expositions']:
if self.cleaned_data.get('expositions'):
expositions = Exposition.objects.language().filter(id__in=list(set(self.cleaned_data['expositions'].split(','))))
return expositions
def clean_conferences(self):
conferences = EmptyQuerySet()
if self.cleaned_data['conferences']:
if self.cleaned_data.get('conferences'):
conferences = Conference.objects.language().filter(id__in=list(set(self.cleaned_data['conferences'].split(','))))
return conferences

@ -15,11 +15,10 @@ class Command(BaseCommand):
linked = LinkedService()
linked.service = service
linked.save()
if Country.objects.language().filter(services=getattr(Country.services, service.url)).count() == Country.objects.language().count():
linked.all_countries = True
if Country.objects.language().filter(services=getattr(Country.services, service.url)).count() > 180:
linked.exclude_countries = True
linked.countries = Country.objects.language().exclude(services=getattr(Country.services, service.url))
else:
linked.countries = Country.objects.language().filter(services=getattr(Country.services, service.url))
linked.expositions = Exposition.objects.language().filter(services=getattr(Exposition.services, service.url))
linked.conferences = Conference.objects.language().filter(services=getattr(Conference.services, service.url))
linked.save()

@ -209,25 +209,29 @@ from django.db.models import F
class LinkedService(models.Model):
service = models.ForeignKey(Service, blank=False)
countries = models.ManyToManyField(Country, blank=True)
all_countries = models.BooleanField(default=False)
expositions = models.ManyToManyField(Exposition, blank=True)
conferences = models.ManyToManyField(Conference, blank=True)
countries = models.ManyToManyField(Country, blank=True, verbose_name=u"Страны")
exclude_countries = models.BooleanField(default=False, verbose_name=u"Исключить страны")
expositions = models.ManyToManyField(Exposition, blank=True, verbose_name= u"Выставки")
conferences = models.ManyToManyField(Conference, blank=True, verbose_name=u'Конференции')
def update_countries_flag(self):
if self.all_countries:
Country.objects.language().update(services=F('services').bitor(getattr(Country.services, self.service.url)))
if self.exclude_countries:
'filter all countries except selected and set flag to true'
Country.objects.language().exclude(id__in=[c.id for c in self.countries.all()]).update(services=F('services').bitor(getattr(Country.services, self.service.url)))
'set another flags to false'
Country.objects.language().filter(id__in=[c.id for c in self.countries.all()]).update(services=F('services').bitand(~getattr(Country.services, self.service.url)))
else:
'if not exclude, filter all selected countries and set flag to true'
self.countries.update(services=F('services').bitor(getattr(Country.services, self.service.url)))
Country.objects.exclude(id__in=[c.id for c in self.countries.all()]).update(services=F('services').bitand(~getattr(Country.services, self.service.url)))
def update_expositions_flag(self):
self.expositions.update(services=F('services').bitor(getattr(Exposition.services, self.service.url)))
Exposition.objects.exclude(id__in=[c.id for c in self.expositions.all()]).update(services=F('services').bitand(~getattr(Exposition.services, self.service.url)))
self.expositions.update(services=F('services').bitor(getattr(Exposition.services, self.service.url)))
Exposition.objects.exclude(id__in=[c.id for c in self.expositions.all()]).update(services=F('services').bitand(~getattr(Exposition.services, self.service.url)))
def update_conferences_flag(self):
self.conferences.update(services=F('services').bitor(getattr(Conference.services, self.service.url)))
Conference.objects.exclude(id__in=[c.id for c in self.conferences.all()]).update(services=F('services').bitand(~getattr(Conference.services, self.service.url)))
self.conferences.update(services=F('services').bitor(getattr(Conference.services, self.service.url)))
Conference.objects.exclude(id__in=[c.id for c in self.conferences.all()]).update(services=F('services').bitand(~getattr(Conference.services, self.service.url)))
def update_all_flags(self):
self.update_countries_flag()

@ -1,162 +1,143 @@
{% extends 'base.html' %}
{% load static %}
{% block scripts %}
{# selects #}
<link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/>
<style >
ul{
list-style: none;
}
</style>
<script src="{% static 'js/select/select2.js' %}"></script>
<script>
$(document).ready(function () {
console.log(1);
$('#id_expositions').select2({
placeholder: "Expositions",
width: 'element',
multiple: true,
ajax: {
url: "/admin/exposition/search/",
dataType: "json",
quietMillis: 200,
multiple: true,
data: function (term, page) {
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 = [];
var values = element.val();
element.val("");
$(values.split(",")).each(function (i) {
var item = this.split(':');
data.push({
id: item[0],
text: item[1]
});
});
console.log("initselection data: " );
console.log( data);
callback(data);
}
});
$('#id_conferences').select2({
placeholder: "Conferences",
width: 'element',
multiple: true,
ajax: {
url: "/admin/conference/search/",
dataType: "json",
quietMillis: 200,
multiple: true,
data: function (term, page) {
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 = [];
var values = element.val();
element.val("");
$(values.split(",")).each(function (i) {
var item = this.split(':');
data.push({
id: item[0],
text: item[1]
});
});
callback(data);
}
});
});
</script>
{% endblock %}
{% block body %}
{# Uses multilang.html template for translated fields #}
<form class="form-horizontal" method="post" action="" >{% csrf_token %}
{{ form.errors }}
<div class="form-group">
<label class="col-sm-2 control-label">Type:</label>
<div id = 'types' class="col-sm-10">
{{ form.type }}{{ form.type.errors }}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Countries:</label>
<div class="col-sm-10">
{{ form.countries }}{{ form.countries.errors }}
</div>
</div>
<div class="row">
<label class="col-sm-4 control-label">All:</label>
<div class="col-sm-8">
{{ form.all_countries }}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Expos:</label>
<div class="col-sm-10">
{{ form.expositions }}{{ form.expositions.errors }}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Conferences:</label>
<div class="col-sm-10">
{{ form.conferences }}{{ form.conferences.errors }}
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-6 col-sm-4">
<button type="submit" class="btn btn-default">Submit</button>
<button type="reset" class="btn">Reset</button>
</div>
</div>
</form>
{% extends 'base.html' %}
{% load static %}
{% block scripts %}
{# selects #}
<link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/>
<style>
ul {
list-style: none;
}
</style>
<script src="{% static 'js/select/select2.js' %}"></script>
<script>
$(document).ready(function () {
console.log(1);
$('#id_expositions').select2({
placeholder: "Expositions",
width: 'element',
multiple: true,
ajax: {
url: "/admin/exposition/search/",
dataType: "json",
quietMillis: 200,
multiple: true,
data: function (term, page) {
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 = [];
var values = element.val();
element.val("");
$(values.split(",")).each(function (i) {
var item = this.split(':');
data.push({
id: item[0],
text: item[1]
});
});
console.log("initselection data: ");
console.log(data);
callback(data);
}
});
$('#id_conferences').select2({
placeholder: "Conferences",
width: 'element',
multiple: true,
ajax: {
url: "/admin/conference/search/",
dataType: "json",
quietMillis: 200,
multiple: true,
data: function (term, page) {
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 = [];
var values = element.val();
element.val("");
$(values.split(",")).each(function (i) {
var item = this.split(':');
data.push({
id: item[0],
text: item[1]
});
});
callback(data);
}
});
});
</script>
{% endblock %}
{% block body %}
{# Uses multilang.html template for translated fields #}
<form class="form-horizontal" method="post" action="">{% csrf_token %}
<div class="box span8">
<div class="box-header well">
<h2><i class="icon-pencil"></i> Основная информация</h2>
</div>
{% for f in form %}
<div class="control-group {% if f.errors %}error{% endif %}">
<label class="control-label"><b>{{ f.label }}:</b></label>
<div class="controls">{{ f }}
<span class="help-inline">{{ f.errors }}</span>
</div>
</div>
{% endfor %}
<div class="controls">
<button type="submit" class="btn btn-large btn-primary">Submit</button>
<button type="reset" class="btn btn-large">Reset</button>
</div>
</div>
</div>
</form>
{% endblock %}

@ -1,155 +0,0 @@
{% extends 'base.html' %}
{% load static %}
{% block scripts %}
{# selects #}
<link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/>
<style >
ul{
list-style: none;
}
</style>
<script src="{% static 'js/select/select2.js' %}"></script>
<script>
$(document).ready(function () {
$('#id_expos').select2({
placeholder: "Expositions",
width: 'element',
multiple: true,
ajax: {
url: "/admin/exposition/search/",
dataType: "json",
quietMillis: 200,
multiple: true,
data: function (term, page) {
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);
}
});
$('#id_confs').select2({
placeholder: "Conferences",
width: 'element',
multiple: true,
ajax: {
url: "/admin/conference/search/",
dataType: "json",
quietMillis: 200,
multiple: true,
data: function (term, page) {
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 %}
{% block body %}
{# Uses multilang.html template for translated fields #}
<form class="form-horizontal" method="get" action="" >
{{ form.errors }}
<div class="form-group">
<label class="col-sm-2 control-label">Type:</label>
<div id = 'types' class="col-sm-10">
{{ form.type }}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Countries:</label>
<div class="col-sm-10">
{{ form.countries }}
</div>
</div>
<div class="row">
<label class="col-sm-4 control-label">All:</label>
<div class="col-sm-8">
{{ form.all_counties }}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Expos:</label>
<div class="col-sm-10">
{{ form.expos }}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Conferences:</label>
<div class="col-sm-10">
{{ form.confs }}
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">Submit</button>
<button type="reset" class="btn">Reset</button>
</div>
</div>
</form>
{% endblock %}
Loading…
Cancel
Save