diff --git a/projects/templates/project_detail.html b/projects/templates/project_detail.html
index 13e19ce..876ad00 100644
--- a/projects/templates/project_detail.html
+++ b/projects/templates/project_detail.html
@@ -281,7 +281,7 @@
{% if answer.term_type == 'project' %}
Срок: За проект
- {% else %}
+ {% elif answer.term and answer.term_type %}
Срок: {% morph answer.term TERM_TYPE_MORPHS|get:answer.term_type %}
{% endif %}
@@ -845,7 +845,7 @@
{% if answer.term_type == 'project' %}
Срок: За проект
- {% else %}
+ {% elif answer.term and answer.term_type %}
Срок: {% morph answer.term TERM_TYPE_MORPHS|get:answer.term_type %}
{% endif %}
@@ -1037,7 +1037,7 @@
{% if answer.term_type == 'project' %}
Срок: За проект
- {% else %}
+ {% elif answer.term and answer.term_type %}
Срок: {% morph answer.term TERM_TYPE_MORPHS|get:answer.term_type %}
{% endif %}
diff --git a/users/helpers.py b/users/helpers.py
new file mode 100644
index 0000000..0760446
--- /dev/null
+++ b/users/helpers.py
@@ -0,0 +1,21 @@
+def get_projects_grouped(contractor):
+ private_open_projects = tuple(a.project for a in contractor.contractor_answers.filter(project__state='active', rejected=False))
+
+ try:
+ team_open_projects = tuple(a.project for a in contractor.team.answers.filter(project__state='active', rejected=False))
+ except:
+ team_open_projects = ()
+
+ private_archived_projects = tuple(a.project for a in contractor.contractor_answers.filter(project__state='active', rejected=True))
+
+ try:
+ team_archived_projects = tuple(a.project for a in contractor.team.answers.filter(project__state='active', rejected=True))
+ except:
+ team_archived_projects = ()
+
+ return {
+ 'private_open_projects': private_open_projects,
+ 'team_open_projects': team_open_projects,
+ 'private_archived_projects': private_archived_projects,
+ 'team_archived_projects': team_archived_projects,
+ }
diff --git a/users/templates/contractor_office_open_projects.html b/users/templates/contractor_office_open_projects.html
index f20eab9..a0bea10 100644
--- a/users/templates/contractor_office_open_projects.html
+++ b/users/templates/contractor_office_open_projects.html
@@ -26,7 +26,7 @@
Открытые проекты
- 0 / {{ open_project_count }}
+ {{ open_project_count }}
diff --git a/users/templates/contractor_profile.html b/users/templates/contractor_profile.html
index 7248a1d..7324aaf 100644
--- a/users/templates/contractor_profile.html
+++ b/users/templates/contractor_profile.html
@@ -819,75 +819,6 @@
- // Load portfolio specialization choices by work type ---------------------------
-
-
- //;(function() {
- // var $specSelectContainer = $('.-spec-select-container.-for-portfolios').first()
- // var $specSelects = $specSelectContainer.find('.-spec-select')
- //
- // var $chosenSpecId = $specSelectContainer.find('.-chosen-spec-id').first()
- //
- // var $specSelect1 = $specSelectContainer.find('.-spec-select-level-1').first()
- // var $specSelect2 = $specSelectContainer.find('.-spec-select-level-2').first()
- // var $specSelect3 = $specSelectContainer.find('.-spec-select-level-3').first()
- // var $specSelect4 = $specSelectContainer.find('.-spec-select-level-4').first()
- // var specSelects = [$specSelect1, $specSelect2, $specSelect3, $specSelect4]
- //
- // var $workTypeSelect = $('.-project-work-type-select-field').first()
- //
- // var workTypeId = Number($workTypeSelect.find('option:selected').first().val()) || 1
- // reinitSpecializationsByWorkType($specSelects, workTypeId)
- //
- // var chosenSpecId = $chosenSpecId.val()
- //
- // if (chosenSpecId)
- // updateSpecializationWidgets(chosenSpecId, $specSelectContainer, $chosenSpecId, specSelects)
- //
- // $workTypeSelect.on('change', function($evt) {
- // var $that = $(this)
- // var workTypeId = Number($that.val())
- // reinitSpecializationsByWorkType($specSelects, workTypeId)
- // })
- //}())
-
-
-
- // Load "work_sell" specialization choices by work type ---------------------------
-
-
- //;(function() {
- // var $specSelectContainer = $('.-spec-select-container.-for-work-sell').first()
- // var $specSelects = $specSelectContainer.find('.-spec-select')
- //
- // var $chosenSpecId = $specSelectContainer.find('.-chosen-spec-id').first()
- //
- // var $specSelect1 = $specSelectContainer.find('.-spec-select-level-1').first()
- // var $specSelect2 = $specSelectContainer.find('.-spec-select-level-2').first()
- // var $specSelect3 = $specSelectContainer.find('.-spec-select-level-3').first()
- // var $specSelect4 = $specSelectContainer.find('.-spec-select-level-4').first()
- // var specSelects = [$specSelect1, $specSelect2, $specSelect3, $specSelect4]
- //
- // var $workTypeSelect = $('.-project-work-type-select-field').first()
- //
- // var workTypeId = Number($workTypeSelect.find('option:selected').first().val()) || 1
- // reinitSpecializationsByWorkType($specSelects, workTypeId)
- //
- // var chosenSpecId = $chosenSpecId.val()
- //
- // if (chosenSpecId)
- // updateSpecializationWidgets(chosenSpecId, $specSelectContainer, $chosenSpecId, specSelects)
- //
- // $workTypeSelect.on('change', function($evt) {
- // var $that = $(this)
- // var workTypeId = Number($that.val())
- // reinitSpecializationsByWorkType($specSelects, workTypeId)
- // })
- //}())
-
-
-
-
//-----------------------------------------------------------------
@@ -963,6 +894,10 @@
success: function (data) {
if (data.status == 'ok') {
location.reload();
+ } else if (data.status == 'no') {
+ $.each(data.form_errors, function (k, v) {
+ $('.error-' + k).html(v).show();
+ });
}
},
diff --git a/users/templates/partials/contractor_profile_tabs.html b/users/templates/partials/contractor_profile_tabs.html
index ee6f40c..c81a007 100644
--- a/users/templates/partials/contractor_profile_tabs.html
+++ b/users/templates/partials/contractor_profile_tabs.html
@@ -1,3 +1,6 @@
+{% load user_tags %}
+
+
{% url 'users:contractor-office' as contractor_office_url %}
{% url 'users:contractor-office-open-projects' as contractor_office_open_projects_url %}
{% url 'users:contractor-office-chat-projects' as contractor_office_chat_projects_url %}
@@ -18,8 +21,8 @@
в процессе обсуждения
-
0
-
{{ all_project_count }}
+{#
0
#}
+
{{ contractor|get_project_message_count }}
diff --git a/users/templates/partials/customer_profile_info_block.html b/users/templates/partials/customer_profile_info_block.html
index 9438eb7..d7b35ad 100644
--- a/users/templates/partials/customer_profile_info_block.html
+++ b/users/templates/partials/customer_profile_info_block.html
@@ -1,4 +1,5 @@
{% load specializtions_tags %}
+{% load user_tags %}
{% load thumbnail %}
@@ -58,8 +59,8 @@
Текущие проекты
-
0
-
{{ answer_message_count }}
+{#
0
#}
+
{{ customer|get_project_message_count }}
{% endif %}
diff --git a/users/templates/worksell_create_form.html b/users/templates/worksell_create_form.html
index 714526d..e319598 100644
--- a/users/templates/worksell_create_form.html
+++ b/users/templates/worksell_create_form.html
@@ -6,13 +6,13 @@
{% csrf_token %}
-
Название заказа {{ worksell_form.name.errors.as_text }}
+
Название заказа {{ worksell_form.name.errors.as_text }}
-
Подробно опишите задание {{ worksell_form.description.errors.as_text }}
+
Подробно опишите задание {{ worksell_form.description.errors.as_text }}
diff --git a/users/templatetags/user_tags.py b/users/templatetags/user_tags.py
index 4130f67..a8f7e44 100644
--- a/users/templatetags/user_tags.py
+++ b/users/templatetags/user_tags.py
@@ -1,6 +1,8 @@
-import math
-from django import template
from chat.models import NewMessage
+from django import template
+from django.core.paginator import Page
+from django.db.models import Count
+import math
register = template.Library()
@@ -84,3 +86,13 @@ def get_new_count_for_team(current_user, team_id, order_id=None):
return count
+@register.filter
+def get_project_message_count(user):
+ if user.is_customer():
+ projects = user.customer_projects.filter(state='active').exclude(order__contractor__isnull=True, order__team__isnull=True)
+ # elif user.is_contractor():
+ # # projects = user.customer_projects.filter(state='active').exclude(order__contractor__isnull=True, order__team__isnull=True)
+
+ return projects.aggregate(message_count=Count('answers__messages'))['message_count']
+ else:
+ return '' # TODO
diff --git a/users/views.py b/users/views.py
index a8094b5..6aa0d5a 100644
--- a/users/views.py
+++ b/users/views.py
@@ -31,6 +31,8 @@ from specializations.models import Specialization
from work_sell.forms import WorkSellForm
from work_sell.models import WorkSell, Picture
+from .helpers import get_projects_grouped
+
from .forms import (
ContractorFilterForm,
CustomerProfileProjectRealtyForm,
@@ -40,33 +42,6 @@ from .forms import (
)
-def get_projects_grouped(contractor):
- private_open_projects = tuple(a.project for a in contractor.contractor_answers.filter(project__state='active', rejected=False))
-
- try:
- team_open_projects = tuple(a.project for a in contractor.team.answers.filter(project__state='active', rejected=False))
- except:
- team_open_projects = ()
-
- private_archived_projects = tuple(a.project for a in contractor.contractor_answers.filter(project__state='active', rejected=True))
-
- try:
- team_archived_projects = tuple(a.project for a in contractor.team.answers.filter(project__state='active', rejected=True))
- except:
- team_archived_projects = ()
-
- return {
- 'private_open_projects': private_open_projects,
- 'team_open_projects': team_open_projects,
- 'private_archived_projects': private_archived_projects,
- 'team_archived_projects': team_archived_projects,
- }
-
-
-def get_project_messages(projects):
- return projects.aggregate(message_count=Count('answers__messages'))['message_count']
-
-
class UserProfileEditView(BaseMixin, View):
form_class = UserProfileEditForm
template_name = 'user_profile_edit.html'
@@ -220,7 +195,6 @@ class ContractorFilterView(BaseMixin, View):
build_classif = form.cleaned_data.get('building_classification')
constr_type = form.cleaned_data.get('construction_type')
-
party_types = form.cleaned_data.get('party_types')
last_party_types = form.cleaned_data.get('last_party_types')
@@ -459,10 +433,6 @@ class ContractorOfficeView(BaseMixin, DetailView):
context['open_project_count'] = len(private_open_projects) + len(team_open_projects)
context['archived_project_count'] = len(private_archived_projects) + len(team_archived_projects)
- context['all_project_count'] = \
- len(private_open_projects) + len(private_archived_projects) + \
- len(team_open_projects) + len(team_archived_projects)
-
compl_proj = tuple(o.project for o in team.orders.filter(status='completed'))
team_invitation_exclude_contractor_ids = tuple(itertools.chain((contractor.pk,), tuple(c.pk for c in contractor.team.contractors.all())))
@@ -513,11 +483,6 @@ class ContractorChatProjectsView(View):
context['open_project_count'] = len(private_open_projects) + len(team_open_projects)
context['archived_project_count'] = len(private_archived_projects) + len(team_archived_projects)
- context['all_project_count'] = \
- len(private_open_projects) + len(private_archived_projects) + \
- len(team_open_projects) + len(team_archived_projects)
-
-
team_ids = []
if request.user.is_owner_team():
team_ids.append(request.user.team.pk)
@@ -568,10 +533,6 @@ class ContractorOfficeProjectsView(BaseMixin, View):
context['open_project_count'] = len(private_open_projects) + len(team_open_projects)
context['archived_project_count'] = len(private_archived_projects) + len(team_archived_projects)
- context['all_project_count'] = \
- len(private_open_projects) + len(private_archived_projects) + \
- len(team_open_projects) + len(team_archived_projects)
-
if request.GET.get('owner') == 'private':
if request.GET.get('archived') == 'on':
projects = private_archived_projects
@@ -711,9 +672,6 @@ class CustomerProfileCurrentProjectsView(BaseMixin, View):
customer = get_object_or_404(User.customer_objects, pk=kwargs.get('pk'))
projects = customer.customer_projects.filter(state='active').exclude(order__contractor__isnull=True, order__team__isnull=True)
- answer_message_count = get_project_messages(projects)
- context['answer_message_count'] = answer_message_count
-
# trashed_projects = customer.customer_projects.filter(state='trashed')
paginator = Paginator(projects, settings.PAGE_SIZE)