diff --git a/projects/migrations/0005_auto_20160812_1931.py b/projects/migrations/0005_auto_20160812_1931.py new file mode 100644 index 0000000..243034b --- /dev/null +++ b/projects/migrations/0005_auto_20160812_1931.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-08-12 16:31 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0004_merge'), + ] + + operations = [ + migrations.AlterModelOptions( + name='candidate', + options={'ordering': ('position',), 'verbose_name': 'Кандидат', 'verbose_name_plural': 'Кандидаты'}, + ), + ] diff --git a/projects/models.py b/projects/models.py index 0c6cfc7..169ec72 100644 --- a/projects/models.py +++ b/projects/models.py @@ -206,9 +206,10 @@ class Candidate(models.Model): position = models.PositiveIntegerField(default=0) def __str__(self): - return self.answer.user.get_full_name() + return str(self.answer.pk) class Meta: + ordering = ('position',) verbose_name = 'Кандидат' verbose_name_plural = 'Кандидаты' diff --git a/projects/templates/comparison.html b/projects/templates/comparison.html index 8d4cf33..1181df2 100644 --- a/projects/templates/comparison.html +++ b/projects/templates/comparison.html @@ -4,44 +4,47 @@ {% block content %} {% include 'partials/header.html' %} - -
-
-
-

Сравнение кандидатов по проекту

-
- -
-
-

{{ object }}

- - - - - - - - - - - + +
+
+
+

Сравнение кандидатов по проекту

+
+ +
+
+

{{ object }}

+
КандидатЦенаСрокОписаниеРейтинги/отзывыБезопасные сделкиРешение
+ + + + + + + + + + + + + {% for cand in object.candidates.all %} - - + + - + - + - + - + - + - + {% endfor %} -
КандидатЦенаСрокОписаниеРейтинги/отзывыБезопасные сделкиРешение
{{ forloop.counter }}
{{ cand.position }} - {{ cand.answer.contractor.get_full_name }} + {{ cand.answer.author.username }} {{ cand.answer.budget }} {{ cand.answer.term }}
{{ cand.answer.term_type }}
  • 0
  • @@ -51,32 +54,82 @@ - 0 {% if cand.answer.contractor.cro %} -
  • - СРО -
  • +
  • + СРО +
  • {% endif %}
0
Готов работать по безопасной сделке
+
+
+ +
+
+
-
- + + +
+ {% include 'partials/footer.html' %} -
- + + +{% endblock %} +{% block js_block %} + + {% endblock %} diff --git a/projects/urls.py b/projects/urls.py index 7ad4a16..3325fc0 100644 --- a/projects/urls.py +++ b/projects/urls.py @@ -3,6 +3,7 @@ from django.views.generic import TemplateView from .views import ( add_candidate, + sort_candidates, contractor_portfolio_create, ContractorPortfolioTrashView, ContractorPortfolioUpdateView, @@ -34,6 +35,7 @@ urlpatterns = [ urls.url(r'^portfolio/(?P\d+)/edit/$', ContractorPortfolioUpdateView.as_view(), name='contractor-portfolio-edit'), urls.url(r'^candidate/add/(?P(\d+))/(?P(\d+))/$', add_candidate, name='add-candidate'), + urls.url(r'^candidate/comparison/sort/$', sort_candidates, name='comparison-sort'), urls.url(r'^candidate/comparison/(?P\d+)/$', ProjectComparisonView.as_view(), name='comparison'), urls.url(r'^offerorder/(?P(\d+))/(?P(\d+))/$', OfferOrderView.as_view(), name='offer-order'), diff --git a/projects/views.py b/projects/views.py index 5434cde..1622c0a 100644 --- a/projects/views.py +++ b/projects/views.py @@ -11,11 +11,14 @@ from django.views.generic import ListView, DetailView, CreateView, View, UpdateV from django.views.generic.base import ContextMixin from pprint import pprint, pformat import json -import pydash as _; _.map = _.map_; _.filter = _.filter_ +import pydash as _; + +_.map = _.map_; +_.filter = _.filter_ import re from .mixins import LastAccessMixin -from .models import Project, ProjectFile, Portfolio, PortfolioPhoto,Candidate, Answer, AnswerFile, Realty, Order +from .models import Project, ProjectFile, Portfolio, PortfolioPhoto, Candidate, Answer, AnswerFile, Realty, Order from archilance.mixins import BaseMixin from users.models import User, Team from work_sell.models import Picture @@ -57,8 +60,10 @@ class ProjectDetailWithContractorAnswerView(BaseMixin, View): team = None answer = None - try: team = contractor.team - except Team.DoesNotExist: pass + try: + team = contractor.team + except Team.DoesNotExist: + pass if team: answer = team.answers.first() @@ -69,7 +74,7 @@ class ProjectDetailWithContractorAnswerView(BaseMixin, View): if got_answer: context.update({'answer': answer}) else: - if request.GET.get('answer_as_team') == 'on': # TODO: Check for actual possibility to answer as a team + if request.GET.get('answer_as_team') == 'on': # TODO: Check for actual possibility to answer as a team context.update({'answer_as_team': True}) form = self.form_class(request=request, answer_as_team=True) else: @@ -84,7 +89,7 @@ class ProjectDetailWithContractorAnswerView(BaseMixin, View): context = self.get_context_data(**kwargs) answer_as_team = None - if request.POST.get('answer_as_team') == 'on': # TODO: Check for actual possibility to answer as a team + if request.POST.get('answer_as_team') == 'on': # TODO: Check for actual possibility to answer as a team answer_as_team = True if answer_as_team: @@ -255,7 +260,8 @@ class CustomerProjectCreateView(BaseMixin, View): return render(request, self.template_name, context) def post(self, request, *args, **kwargs): - form = self.form_class(request.POST, request=request) # Passing `request.FILES` seems unnecessary here. Files are added manually below + form = self.form_class(request.POST, + request=request) # Passing `request.FILES` seems unnecessary here. Files are added manually below form.is_valid() realty = form.cleaned_data.get('realty') @@ -284,7 +290,7 @@ class CustomerProjectCreateView(BaseMixin, View): realty.save() realty_form.save_m2m() - project.realty = realty # Connect a realty with a project + project.realty = realty # Connect a realty with a project project.save() messages.info(request, 'Проект успешно создан') @@ -350,7 +356,8 @@ class CustomerProjectEditView(BaseMixin, View): if form.is_valid() and realty_form.is_valid(): project = form.save(commit=False) project.customer = request.user - project.files = form.cleaned_data.get('files') # TODO: Should we somehow get rid of this explicit assignment? + project.files = form.cleaned_data.get( + 'files') # TODO: Should we somehow get rid of this explicit assignment? project.save() form.save_m2m() @@ -366,7 +373,7 @@ class CustomerProjectEditView(BaseMixin, View): realty.save() realty_form.save_m2m() - project.realty = realty # Connect a realty with a project + project.realty = realty # Connect a realty with a project project.save() messages.info(request, 'Проект успешно отредактирован') @@ -393,7 +400,7 @@ class CustomerProjectEditView(BaseMixin, View): class ContractorPortfolioTrashView(View): form_class = ContractorPortfolioTrashForm - def post(self,request, *args, **kwargs): + def post(self, request, *args, **kwargs): form = self.form_class(_.merge({}, request.POST, kwargs), request=request) if form.is_valid(): portfolio = form.cleaned_data.get('pk') @@ -405,6 +412,7 @@ class ContractorPortfolioTrashView(View): redirect_to = request.POST.get('next') return redirect(redirect_to) + class CustomerProjectTrashView(View): form_class = CustomerProjectTrashForm @@ -492,7 +500,23 @@ def add_candidate(request, answer_id, project_id): answer = Answer.objects.get(pk=answer_id) project = Project.objects.get(pk=project_id) candidate = Candidate.objects.create(answer=answer, project=project) - return HttpResponseRedirect(reverse('projects:detail',args=[project_id])) + return HttpResponseRedirect(reverse('projects:detail', args=[project_id])) + + +def sort_candidates(request): + if request.is_ajax(): + items = request.POST.getlist('items[]') + i = 1 + for item in items: + candidate = Candidate.objects.get(pk=item) + candidate.position = i + candidate.save() + i += 1 + + data = { + 'success': 'ok', + } + return HttpResponse(json.dumps(data), content_type='application/json') class OfferOrderView(View): @@ -536,9 +560,10 @@ class ContractorPortfolioUpdateView(UpdateView): from django.views.generic import DeleteView + + class PortfolioDelete(DeleteView): model = Portfolio success_url = reverse_lazy('users:contractor-profile') - # import code; code.interact(local=dict(globals(), **locals())) diff --git a/users/templates/contractor_profile.html b/users/templates/contractor_profile.html index 1b2d16a..a0217b7 100644 --- a/users/templates/contractor_profile.html +++ b/users/templates/contractor_profile.html @@ -201,13 +201,14 @@ {% for ws in user.work_sell.all %}
- + {% thumbnail ws.get_cover "224x224" crop="center" as im %}
{% endthumbnail %} +
diff --git a/work_sell/templates/worksell_edit.html b/work_sell/templates/worksell_edit.html index 9592bc5..ef67592 100644 --- a/work_sell/templates/worksell_edit.html +++ b/work_sell/templates/worksell_edit.html @@ -83,9 +83,10 @@ {{ form.building_classification}}
-
- +
+ {% form.ins %}
+