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)