diff --git a/assets/index.js b/assets/index.js index 12a62af..1aea79f 100644 --- a/assets/index.js +++ b/assets/index.js @@ -229,6 +229,34 @@ function initContractorSelect($select) { +// Order offer project select --------------------------------------------- + + +var projectSelectOptions = { + language: 'ru', + placeholder: 'Выберите проект', // Required by `allowClear` + allowClear: true, +} + +function initProjectSelect($select, customerId) { + return $.ajax({url: '/api/projects/?customer=' + customerId, method: 'GET', dataType: 'json'}) + .then(function(res) { + var projects = res.results + + $select.select2(_.merge(projectSelectOptions, { + data: _.map(function(project) { + return { + id: project.id, + text: project.name, + origItem: project, + } + }, projects), + })) + }) +} + + + diff --git a/chat/views.py b/chat/views.py index 3b93839..cef04f0 100644 --- a/chat/views.py +++ b/chat/views.py @@ -55,7 +55,7 @@ class ChatUserView(LoginRequiredMixin, View): contacts_users = User.objects.filter(pk__in=users_ids) chat_messages = Message.objects.filter(Q(sender=request.user.pk) | Q(recipent=request.user.pk)) - orders = request.user.projects.select_related('order').exclude(order__contractor__isnull=True, order__team__isnull=True) + orders = request.user.customer_projects.select_related('order').exclude(order__contractor__isnull=True, order__team__isnull=True) transaction = Transaction.objects.get_or_create(customer=request.user, type='reservation', complete=False) self.template_name = 'chat_customer.html' return render(request, self.template_name, {'contacts_users': contacts_users, diff --git a/projects/forms.py b/projects/forms.py index 01f57f1..e16d95c 100644 --- a/projects/forms.py +++ b/projects/forms.py @@ -276,7 +276,7 @@ class CustomerProjectTrashForm(forms.Form): self.req = kwargs.pop('req') super().__init__(*args, **kwargs) - self.fields['pk'].queryset = self.req.user.projects.filter(state='active') + self.fields['pk'].queryset = self.req.user.customer_projects.filter(state='active') class ContractorPortfolioTrashForm(forms.Form): @@ -296,7 +296,7 @@ class CustomerProjectRestoreForm(forms.Form): self.req = kwargs.pop('req') super().__init__(*args, **kwargs) - self.fields['pk'].queryset = self.req.user.projects.filter(state='trashed') + self.fields['pk'].queryset = self.req.user.customer_projects.filter(state='trashed') class CustomerProjectDeleteForm(forms.Form): @@ -306,7 +306,7 @@ class CustomerProjectDeleteForm(forms.Form): self.req = kwargs.pop('req') super().__init__(*args, **kwargs) - self.fields['pk'].queryset = self.req.user.projects.filter(Q(state='active') | Q(state='trashed')) + self.fields['pk'].queryset = self.req.user.customer_projects.filter(Q(state='active') | Q(state='trashed')) # import code; code.interact(local=dict(globals(), **locals())) diff --git a/projects/migrations/0027_auto_20160907_1658.py b/projects/migrations/0027_auto_20160907_1658.py new file mode 100644 index 0000000..97a9673 --- /dev/null +++ b/projects/migrations/0027_auto_20160907_1658.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-09-07 13:58 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0026_auto_20160906_1621'), + ] + + operations = [ + migrations.AlterField( + model_name='project', + name='customer', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='customer_projects', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/projects/models.py b/projects/models.py index 0c0b805..ccf519c 100644 --- a/projects/models.py +++ b/projects/models.py @@ -91,7 +91,7 @@ class Project(models.Model, HitCountMixin): created = models.DateTimeField(default=timezone.now) cro = models.BooleanField(default=False) currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES) - customer = models.ForeignKey(User, related_name='projects') # Related name should've been "customer_projects" + customer = models.ForeignKey(User, related_name='customer_projects') deal_type = models.CharField(max_length=20, default='secure_deal', choices=DEAL_TYPES) name = models.CharField(max_length=255) price_and_term_required = models.BooleanField(default=False) diff --git a/projects/templates/chattest.html b/projects/templates/chattest.html index f0261f3..2ab5cc3 100644 --- a/projects/templates/chattest.html +++ b/projects/templates/chattest.html @@ -3,7 +3,7 @@
Исполнители
diff --git a/projects/urls.py b/projects/urls.py index bbf00a8..e220158 100644 --- a/projects/urls.py +++ b/projects/urls.py @@ -3,25 +3,25 @@ from django.views.generic import TemplateView from .views import ( add_candidate, + ArbitrationCreateView, CandidateDeleteView, contractor_portfolio_create, ContractorAnswerArchiveView, ContractorPortfolioTrashView, ContractorPortfolioUpdateView, + CustomerOfferOrderView, CustomerProjectCreateView, CustomerProjectDeleteView, CustomerProjectEditView, CustomerProjectRestoreView, CustomerProjectTrashView, - OfferOrderView, + PortfolioDetail, ProjectAnswerCreateMessageView, ProjectComparisonView, ProjectDetailWithAnswerView, ProjectFilterView, RejectProjectAnswerView, sort_candidates, - PortfolioDetail, - ArbitrationCreateView, ) app_name = 'projects' @@ -51,7 +51,7 @@ urlpatterns = [ urls.url(r'^candidate/comparison/sort/$', sort_candidates, name='comparison-sort'), urls.url(r'^candidate/comparison/(?P
-
+ {% endif %}
+ {{ team.name }} {# TODO #}
@@ -186,14 +195,16 @@
- {% endif %}
+ {% if contractor.avatar %}
+ {% thumbnail contractor.avatar "126x125" crop="center" as avatar %}
+
+ {% endif %}
- {{ contractor.get_full_name }} [{{ contractor.username }}] + {{ contractor.get_full_name }} [{{ contractor.username }}]
Есть допуск СРО
@@ -392,3 +409,52 @@