From 1d1b95df789b2c4b618462d42826c6d30d94a0ef Mon Sep 17 00:00:00 2001 From: Seghey Shishman Date: Fri, 23 Sep 2016 00:29:02 +0300 Subject: [PATCH 1/4] css edited --- assets/css/main.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/css/main.css b/assets/css/main.css index a48b044..a45a03f 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -5693,7 +5693,7 @@ input[type="radio"]:checked + span { font-weight: normal; line-height: 1.42857143; color: #333333; - white-space: nowrap; + /*white-space: nowrap;*/ } .select2-results .select2-result-label:hover{ background-color: #f2f2f2; From bf6659c7bd9385a2822735a89f68a75f3e741f7d Mon Sep 17 00:00:00 2001 From: PekopT Date: Fri, 23 Sep 2016 13:44:20 +0300 Subject: [PATCH 2/4] css fix --- assets/css/main.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/assets/css/main.css b/assets/css/main.css index a45a03f..6a00ed6 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -921,6 +921,10 @@ footer:after { margin-right: 0; } +.desPro li a:hover { + text-decoration: underline !important; +} + .textPro { width: 100%; float: left; From b32c5684809e0ba8469e07817741930cac6a12e8 Mon Sep 17 00:00:00 2001 From: ArturBaybulatov Date: Fri, 23 Sep 2016 14:42:13 +0300 Subject: [PATCH 3/4] Fixes --- projects/templates/project_detail.html | 6 +- users/helpers.py | 21 ++++++ .../contractor_office_open_projects.html | 2 +- users/templates/contractor_profile.html | 73 +------------------ .../partials/contractor_profile_tabs.html | 7 +- .../partials/customer_profile_info_block.html | 5 +- users/templates/worksell_create_form.html | 4 +- users/templatetags/user_tags.py | 16 +++- users/views.py | 46 +----------- 9 files changed, 55 insertions(+), 125 deletions(-) create mode 100644 users/helpers.py 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) From bbc95c360d256eee9fe4ad7c4fcd0b4449505a5d Mon Sep 17 00:00:00 2001 From: PekopT Date: Fri, 23 Sep 2016 15:30:28 +0300 Subject: [PATCH 4/4] css fix --- assets/css/main.css | 50 ++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/assets/css/main.css b/assets/css/main.css index 6a00ed6..875b06c 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -12,7 +12,7 @@ font-style: normal; } -@font-face { +@font-face { font-family: 'pfdintextcomppro-regular'; src: url('../fonts/PFDinTextCompPro-Regular/PFDinTextCompPro-Regular.eot?#iefix') format('embedded-opentype'), url('../fonts/PFDinTextCompPro-Regular/PFDinTextCompPro-Regular.woff') format('woff'), url('../fonts/PFDinTextCompPro-Regular/PFDinTextCompPro-Regular.ttf') format('truetype'), url('../fonts/PFDinTextCompPro-Regular/PFDinTextCompPro-Regular.svg#PFDinTextCompPro-Regular') format('svg'); font-weight: normal; @@ -177,7 +177,7 @@ a, a:hover, a:focus, a:active { padding: 30px 0px 27px 40px; font-family: 'pfbeausanspro-reg', sans-serif; } - + .reg, .reg:link, .reg:visited { color: #fb1818; font-size: 16px; @@ -791,7 +791,7 @@ footer:after { border-radius: 40px; font-size: 15px; font-family: 'Arial-MT-Regular', sans-serif; -} +} .valProject button:focus, .valProject button:active, @@ -804,7 +804,7 @@ footer:after { .valProject2 button span mark { background: none; - color: #ff2c2c; + color: #ff2c2c; } .valProject2 button > span { @@ -1248,7 +1248,7 @@ footer:after { .polsF1 .dropdown-menu li a:focus { outline: none !important; - background: none; + background: none; } /*.searchF1 { @@ -1397,9 +1397,9 @@ input[type="checkbox"] + span { .sro input[type="checkbox"] { opacity: 0; } - + input[type="checkbox"]:checked + span { - background-position: 0 -23px; + background-position: 0 -23px; } .sro p { @@ -1768,7 +1768,7 @@ input[type="checkbox"]:checked + span { } .divCol9 { - padding: 20px 0; + padding: 20px 0; } .nameUser, .cityUser, .navv { @@ -2024,7 +2024,7 @@ input[type="checkbox"]:checked + span { } .addWork a:link, .addWork a:visited, .addWork a { - color: #5a5a5a; + color: #5a5a5a; } .addWork:before { @@ -2785,7 +2785,7 @@ input[type="checkbox"]:checked + span { -webkit-transition: all 0.3s ease-out; -moz-transition: all 0.3s ease-out; transition: all 0.3s ease-out; - cursor: move; + cursor: move; } .compTable tr:hover { @@ -2987,7 +2987,7 @@ input[type="checkbox"]:checked + span { } .compTable tr td:nth-child(7) span { - color: #43b476; + color: #43b476; font-size: 14px; font-weight: bold; font-family: Arial, Verdana, Helvetica, sans-serif; @@ -3227,7 +3227,7 @@ input[type="checkbox"]:checked + span { position: relative; cursor: pointer; } - + .gallery-thumbs .swiper-slide.is-selected:after { content: ''; position: absolute; @@ -3464,8 +3464,8 @@ input[type="checkbox"]:checked + span { text-transform: uppercase; } -.textAreaBlock2 a:not(.cke_button, .cke_combo_button, .cke_path_item), -.textAreaBlock2 a:link:not(.cke_button, .cke_combo_button, .cke_path_item), +.textAreaBlock2 a:not(.cke_button, .cke_combo_button, .cke_path_item), +.textAreaBlock2 a:link:not(.cke_button, .cke_combo_button, .cke_path_item), .textAreaBlock2 a:visited:not(.cke_button, .cke_combo_button, .cke_path_item) { font-family: 'pfdintextcomppro-regular', sans-serif; letter-spacing: 2px; @@ -3671,7 +3671,7 @@ input[type="checkbox"]:checked + span { .startChat { float: left; margin: 0 0 0 0; -} +} .insetSC1 { width: 100%; @@ -4498,7 +4498,7 @@ label { display: block; position: relative; } - + input[type="checkbox"] + span { position: absolute; left: 0; @@ -4508,9 +4508,9 @@ input[type="checkbox"] + span { background: url('../img/check.png') no-repeat; cursor: pointer; } - + input[type="checkbox"]:checked + span { - background-position: 0 -23px; + background-position: 0 -23px; } .text-block { @@ -4931,9 +4931,9 @@ input[type="radio"] + span { .inset-mb input[type="radio"] { opacity: 0; } - + input[type="radio"]:checked + span { - background-position: 0 -23px; + background-position: 0 -23px; } .inset-mb p { @@ -5327,7 +5327,7 @@ input[type="radio"]:checked + span { .dog-new label { float: left; - margin: 14px 0 0 39px; + margin: 14px 0 0 39px; } .dog-new p { @@ -5337,7 +5337,7 @@ input[type="radio"]:checked + span { position: relative; color: #8a8989; font-style: italic; - margin: 16px 0 0 12px; + margin: 16px 0 0 12px; } .make-new label { @@ -5487,7 +5487,7 @@ input[type="radio"]:checked + span { .titleFFE { margin: 30px 0 -10px 0; -} +} .new-doubt { margin-bottom: 18px; @@ -5981,7 +5981,7 @@ a.linkS2[data-target="#withdraw-money"]{ margin-top: 0px; } .changeBlock { - min-height: 500px; + min-height: 450px; display: table; padding: 143px 20px 120px 20px; } @@ -6065,7 +6065,7 @@ input[type="radio"]{ margin: auto; } .menuUser ul:nth-child(3) li a{ - padding: 16px 0px 16px 0px !important; + padding: 16px 0px 16px 0px !important; text-align: center; } .addWork, .upload2, .documentsChat a{