Merge master -> artur

remotes/origin/PR-39
ArturBaybulatov 10 years ago
commit 37dca26024
  1. 8
      assets/css/main.css
  2. 2
      assets/js/chat.js
  3. 5
      projects/forms.py
  4. 5
      reviews/serializers.py
  5. 2
      templates/partials/base.html
  6. 4
      users/templates/partials/contractor_profile_tabs.html
  7. 3
      users/templates/partials/customer_profile_info_block.html
  8. 24
      users/templatetags/user_tags.py
  9. 17
      users/views.py

@ -921,6 +921,10 @@ footer:after {
margin-right: 0; margin-right: 0;
} }
.desPro li a:hover {
text-decoration: underline !important;
}
.textPro { .textPro {
width: 100%; width: 100%;
float: left; float: left;
@ -5693,7 +5697,7 @@ input[type="radio"]:checked + span {
font-weight: normal; font-weight: normal;
line-height: 1.42857143; line-height: 1.42857143;
color: #333333; color: #333333;
white-space: nowrap; /*white-space: nowrap;*/
} }
.select2-results .select2-result-label:hover{ .select2-results .select2-result-label:hover{
background-color: #f2f2f2; background-color: #f2f2f2;
@ -5977,7 +5981,7 @@ a.linkS2[data-target="#withdraw-money"]{
margin-top: 0px; margin-top: 0px;
} }
.changeBlock { .changeBlock {
/*min-height: 650px;*/ min-height: 500px;
display: table; display: table;
padding: 143px 20px 120px 20px; padding: 143px 20px 120px 20px;
} }

@ -781,7 +781,7 @@ function dialog (message, yesCallback, notCallback) {
console.log(json); console.log(json);
$("#review-add").modal('hide'); $("#review-add").modal('hide');
$("#leaveReview").hide(); $("#leaveReview").hide();
var currOrder = json.project; var currOrder = json.order;
var currRecipent = json.target_user; var currRecipent = json.target_user;
socket.send_stages_approve({ socket.send_stages_approve({

@ -85,6 +85,7 @@ class ProjectFilterRealtyForm(forms.ModelForm):
self.fields['construction_type'].required = False self.fields['construction_type'].required = False
self.fields['location'].queryset = Location.objects.root_nodes()[0].get_descendants() self.fields['location'].queryset = Location.objects.root_nodes()[0].get_descendants()
self.fields['building_classification'].queryset = BuildingClassfication.objects.root_nodes()[0].get_descendants()
# self.fields['location'].queryset = Location.objects # Migrate with this enabled # self.fields['location'].queryset = Location.objects # Migrate with this enabled
@ -152,8 +153,8 @@ class CustomerProjectEditForm(forms.ModelForm):
class RealtyForm(forms.ModelForm): class RealtyForm(forms.ModelForm):
building_classification = TreeNodeChoiceField( building_classification = TreeNodeChoiceField(
BuildingClassfication.objects.all(), BuildingClassfication.objects.exclude(name='_root'),
label="", initial='', label="ll", initial='',
widget=forms.Select(attrs={ widget=forms.Select(attrs={
'class': 'selectpicker', 'class': 'selectpicker',
'id': 'realtyBuildingClassificationId' 'id': 'realtyBuildingClassificationId'

@ -7,6 +7,7 @@ from users.serializers import UserSerializer, TeamSerializer
class ReviewSerializer(ModelSerializer): class ReviewSerializer(ModelSerializer):
target_user = serializers.SerializerMethodField(read_only=True) target_user = serializers.SerializerMethodField(read_only=True)
order = serializers.SerializerMethodField(read_only=True)
class Meta: class Meta:
model = Review model = Review
@ -24,8 +25,12 @@ class ReviewSerializer(ModelSerializer):
'target_contractor', 'target_contractor',
'target_team', 'target_team',
'target_user', 'target_user',
'order',
) )
def get_order(self, obj):
return obj.project.order.pk
def get_target_user(self, obj): def get_target_user(self, obj):
if obj.target_customer: if obj.target_customer:
return obj.target_customer.pk return obj.target_customer.pk

@ -84,7 +84,7 @@
var port = '{{ request.META.SERVER_PORT }}'; var port = '{{ request.META.SERVER_PORT }}';
var queryString = '{{ request.get_full_path }}'; var queryString = '{{ request.get_full_path }}';
if ((queryString.indexOf('/chat') != 0) && (queryString.indexOf('/users/contractor-office/510/work-projects') != 0)) { if ((queryString.indexOf('/chat') != 0) && (queryString.indexOf('/users/contractor-office/work-projects') != 0)) {
domain = domain.replace(':' + port, ''); domain = domain.replace(':' + port, '');
var url = 'ws://' + domain + '/chat/' + userId + '/'; var url = 'ws://' + domain + '/chat/' + userId + '/';
var sock = new WebSocket(url); var sock = new WebSocket(url);

@ -5,6 +5,8 @@
{% url 'users:contractor-office-open-projects' as contractor_office_open_projects_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 %} {% url 'users:contractor-office-chat-projects' as contractor_office_chat_projects_url %}
{% load user_tags %}
<div class="profileTabs"> <div class="profileTabs">
<ul class="nav nav-tabs nav-justified"> <ul class="nav nav-tabs nav-justified">
<li role="presentation"> <li role="presentation">
@ -30,7 +32,7 @@
<a href="{{ contractor_office_chat_projects_url }}">Проекты в работе</a> <a href="{{ contractor_office_chat_projects_url }}">Проекты в работе</a>
<div class="roundsCount"> <div class="roundsCount">
<div class="countG">0</div> <div class="countG">{% get_customer_chat_open_projects request.user %}</div>
</div> </div>
</li> </li>
</ul> </ul>

@ -1,6 +1,7 @@
{% load specializtions_tags %} {% load specializtions_tags %}
{% load user_tags %} {% load user_tags %}
{% load thumbnail %} {% load thumbnail %}
{% load user_tags %}
<div class="col-lg-12"> <div class="col-lg-12">
@ -69,7 +70,7 @@
<a href="{{ c }}">Отзывы</a> <a href="{{ c }}">Отзывы</a>
<div class="roundsCount"> <div class="roundsCount">
<div class="countG">0</div> <div class="countG">{% get_reviews_count request.user %}</div>
</div> </div>
</li> </li>
</ul> </ul>

@ -1,9 +1,13 @@
from chat.models import NewMessage from chat.models import NewMessage
from django import template from django import template
from django.core.paginator import Page from django.core.paginator import Page
from django.db.models import Count from django.db.models import Q, Count
import math import math
from reviews.models import Review
from projects.models import Order
register = template.Library() register = template.Library()
@ -86,6 +90,24 @@ def get_new_count_for_team(current_user, team_id, order_id=None):
return count return count
@register.simple_tag
def get_reviews_count(user):
if user.is_customer():
count = Review.objects.filter(target_customer=user).count()
else:
count = Review.objects.filter(target_contractor=user).count()
return count
@register.simple_tag
def get_customer_chat_open_projects(user):
team_ids = []
if user.is_owner_team():
team_ids.append(user.team.pk)
count = Order.objects.filter(Q(contractor=user) | Q(team_id__in=team_ids)).count()
return count
@register.filter @register.filter
def get_project_message_count(user): def get_project_message_count(user):
if user.is_customer(): if user.is_customer():

@ -486,24 +486,9 @@ class ContractorChatProjectsView(View):
team_ids = [] team_ids = []
if request.user.is_owner_team(): if request.user.is_owner_team():
team_ids.append(request.user.team.pk) team_ids.append(request.user.team.pk)
team_orders = request.user.team.orders.all()
else:
teams = Team.objects.filter(contractors__id=request.user.pk).all()
team_orders = Order.objects.filter(team_id__in=[team.pk for team in teams]).all()
orders = Order.objects.filter(Q(contractor=request.user) | Q(team_id__in=team_ids)).all() orders = Order.objects.filter(Q(contractor=request.user) | Q(team_id__in=team_ids)).all()
contractor_contacts = Message.objects.values_list('sender_id', 'recipent_id').filter(
Q(recipent_id=request.user.pk) | Q(sender_id=request.user.pk)).filter(Q(team_id=None)).distinct()
users_ids = []
for msg in contractor_contacts:
a, b = msg
if a != request.user.pk:
users_ids.append(a)
if b != request.user.pk:
users_ids.append(b)
# contacts_users = User.objects.filter(pk__in=users_ids)
chat_messages = Message.objects.filter(Q(sender=request.user.pk) | Q(recipent=request.user.pk)).order_by(
'created')
context['orders'] = orders context['orders'] = orders
return render(request, self.template_name, context) return render(request, self.template_name, context)

Loading…
Cancel
Save