remotes/origin/PR-39
ArturBaybulatov 9 years ago
parent 3c4d2954db
commit b32c568480
  1. 6
      projects/templates/project_detail.html
  2. 21
      users/helpers.py
  3. 2
      users/templates/contractor_office_open_projects.html
  4. 73
      users/templates/contractor_profile.html
  5. 7
      users/templates/partials/contractor_profile_tabs.html
  6. 5
      users/templates/partials/customer_profile_info_block.html
  7. 4
      users/templates/worksell_create_form.html
  8. 16
      users/templatetags/user_tags.py
  9. 46
      users/views.py

@ -281,7 +281,7 @@
<p>
{% if answer.term_type == 'project' %}
Срок: <span>За проект</span>
{% else %}
{% elif answer.term and answer.term_type %}
Срок: <span>{% morph answer.term TERM_TYPE_MORPHS|get:answer.term_type %}</span>
{% endif %}
</p>
@ -845,7 +845,7 @@
<p>
{% if answer.term_type == 'project' %}
Срок: <span>За проект</span>
{% else %}
{% elif answer.term and answer.term_type %}
Срок: <span>{% morph answer.term TERM_TYPE_MORPHS|get:answer.term_type %}</span>
{% endif %}
</p>
@ -1037,7 +1037,7 @@
<p>
{% if answer.term_type == 'project' %}
Срок: <span>За проект</span>
{% else %}
{% elif answer.term and answer.term_type %}
Срок: <span>{% morph answer.term TERM_TYPE_MORPHS|get:answer.term_type %}</span>
{% endif %}
</p>

@ -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,
}

@ -26,7 +26,7 @@
<div class="btn-group valProject2" role="group">
<a href="#" data-param-name="archived" data-default onclick="return false" class="btn btn-default -nav">
Открытые проекты
<span><mark>0</mark> / <span>{{ open_project_count }}</span></span>
<span><mark>{{ open_project_count }}</mark><!-- / <span>0</span>--></span>
</a>
<a href="#" data-param-name="archived" data-param-val="on" onclick="return false" class="btn btn-default -nav">

@ -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();
});
}
},

@ -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 @@
<span class="desPresent">в процессе обсуждения</span>
<div class="roundsCount">
<div class="countR">0</div>
<div class="countG">{{ all_project_count }}</div>
{# <div class="countR">0</div>#}
<div class="countG">{{ contractor|get_project_message_count }}</div>
</div>
</li>

@ -1,4 +1,5 @@
{% load specializtions_tags %}
{% load user_tags %}
{% load thumbnail %}
@ -58,8 +59,8 @@
<a href="{{ b }}">Текущие проекты</a>
<div class="roundsCount">
<div class="countR">0</div>
<div class="countG">{{ answer_message_count }}</div>
{# <div class="countR">0</div>#}
<div class="countG">{{ customer|get_project_message_count }}</div>
</div>
</li>
{% endif %}

@ -6,13 +6,13 @@
{% csrf_token %}
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Название заказа <span style="color: red">{{ worksell_form.name.errors.as_text }}</span></p>
<p>Название заказа <span style="color: red" class="error-{{ worksell_form.name.html_name }}">{{ worksell_form.name.errors.as_text }}</span></p>
<input type="text" class="box-sizing" name="{{ worksell_form.name.html_name }}"
value="{{ worksell_form.name.value }}">
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Подробно опишите задание <span style="color: red">{{ worksell_form.description.errors.as_text }}</span></p>
<p>Подробно опишите задание <span style="color: red" class="error-{{ worksell_form.description.html_name }}">{{ worksell_form.description.errors.as_text }}</span></p>
<textarea name="{{ worksell_form.description.html_name }}" id="text-new">{{ worksell_form.description.value }}</textarea>
</div>

@ -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

@ -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)

Loading…
Cancel
Save