#ARC-27 Fixes reviews bugs

remotes/origin/setup
Mukhtar 10 years ago
parent 833491f8c1
commit 6c9ec6bf64
  1. 215
      chat/templates/chat_customer.html
  2. 2
      chat/views.py
  3. 47
      projects/templates/project_detail.html
  4. 2
      projects/views.py
  5. 2
      ratings/templates/templatetags/ratings_widget.html
  6. 1
      ratings/templatetags/specializtions_tags.py
  7. 44
      templates/registration/login.html
  8. 16
      users/views.py
  9. 6
      work_sell/templates/worksell_detail.html

@ -237,6 +237,69 @@
var socket = new SocketHandler();
var form = document.getElementById('message_form');
var csrftoken = getCookie('csrftoken');
function getStages(orderId){
$.ajax({
url: '/api/stages/',
type: 'GET',
data: {csrfmiddlewaretoken: csrftoken, 'order': orderId},
dataType: 'json',
success: function (json) {
var stageCount = json.results.length;
if (stageCount == 0){
stageCountVal = 1;
}else{
stageCountVal = stageCount;
}
var htmlInbox = "";
var htmlInboxStage = '<p class="textStepss">Какое кол-во этапов подразумевает работа? ' +
'<input type="text" id="countStage" value="'+ stageCountVal +'"size="3"/></p>';
if (stageCount == 0){
htmlInboxStage += '<div class="numberStepp box-sizing" id="stage1">' +
'<p>Этап <span class="stage-span-id">1</span></p><form class="new-stages-form" id="stage-form">' +
'<label for="">Название</label><input class="form-control" name="name" type="text" />' +
'<label for="">Цена</label><input class="form-control" name="cost" type="text" />' +
'<input class="form-control" name="order" type="text" value="'+ orderId +'" class="orderStagesInput"/> />' +
'<label for="">Срок</label><input class="form-control" name="term" type="text" />' +
'<label for="">Результат</label><input class="form-control" name="result" type="text" />' +
'</form></div>';
}
var statusNotAgreed = true;
$.each(json.results, function (i, v) {
if (v.status == "not_agreed") {
htmlInbox += '<div class="numberStepp box-sizing">' +
'<p>Этап</p><form class="update-stages-form" id="stage-form-'+ v.pos +'">' +
'<label for="">Название</label><input class="form-control" type="text" name="name" value="'+ v.name +'" />' +
'<label for="">Цена</label><input class="form-control" type="text" name="cost" value="'+ v.cost +'" />' +
'<input class="form-control" type="hidden" name="order" value="'+ v.order +'" />' +
'<label for="">Срок</label><input class="form-control" type="text" name="term" value="'+ v.term +'" />' +
'<label for="">Результат</label><input class="form-control" type="text" name="result" value="'+ v.result +'" />' +
'</form></div>';
} else {
statusNotAgreed = false;
htmlInboxStage = "";
htmlInbox += '<div class="numberStepp box-sizing"><div class="insetNumStepp">' +
'<p class="titleNumStepp"><span>Этап ' + v.pos + '</span>' + v.name + '</p>' +
'<p class="textNumStepp">Результаты этапа:' + v.result + '</p><div>' +
'<p>до 16.03.2015</p><span>' + v.cost + '<i class="fa fa-rub"></i></span></div></div></div>';
}
});
if (statusNotAgreed) {
htmlInbox += '<div class="box-sizing disTab" style="text-align:center;"><div class="checkbox"><input type="checkbox" style="opacity:1">Перейти в режим безопасной сделки' +
'</div></div><div class="textAreaBlock2 box-sizing disTab">' +
'<a href="#" data-order-id="' + orderId + '" id="addStagesForm">отправить на согласование</a> </div>';
}
htmlInbox = htmlInboxStage + htmlInbox;
$("#order-stages").html(htmlInbox);
}
});
}
setTimeout(function(){
$(".user-block").first().trigger('click');
}, 10);
@ -245,7 +308,8 @@
$(".order-block").first().trigger('click');
}, 100);
$("#order-stages").on('click', "#addStagesForm", function(){
$("#order-stages").on('click', "#addStagesForm", function(e){
e.preventDefault();
$(".new-stages-form").each(function(i,v){
console.log($(this).serialize());
@ -259,6 +323,7 @@
dataType: 'json',
success: function (json) {
console.log(json);
},
error: function(e){
console.log('error');
@ -267,6 +332,30 @@
});
});
$(".update-stages-form").each(function(i,v){
$.ajax({
url: '/api/stages/' + currentStageId + '/',
type: 'PUT',
beforeSend: function(xhr){
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'))
},
data: $(this).serialize(),
dataType:'json',
success: function(json){
console.log(json);
},
})
});
var currentOrderId = $(this).attr('data-order-id');
currentOrderId = parseInt(currentOrderId);
getStages(currentOrderId);
});
$('#order-stages-tab').on('change', '#countStage', function(){
@ -317,65 +406,67 @@
}
});
$.ajax({
url: '/api/stages/',
type: 'GET',
data: {csrfmiddlewaretoken: csrftoken, 'order': orderId},
dataType: 'json',
success: function (json) {
var stageCount = json.results.length;
if (stageCount == 0){
stageCountVal = 1;
}else{
stageCountVal = stageCount;
}
var htmlInbox = "";
var htmlInboxStage = '<p class="textStepss">Какое кол-во этапов подразумевает работа? ' +
'<input type="text" id="countStage" value="'+ stageCountVal +'"size="3"/></p>';
if (stageCount == 0){
htmlInboxStage += '<div class="numberStepp box-sizing" id="stage1">' +
'<p>Этап <span class="stage-span-id">1</span></p><form class="new-stages-form" id="stage-form">' +
'<label for="">Название</label><input class="form-control" name="name" type="text" />' +
'<label for="">Цена</label><input class="form-control" name="cost" type="text" />' +
'<input class="form-control" name="order" type="text" value="'+ orderId +'" class="orderStagesInput"/> />' +
'<label for="">Срок</label><input class="form-control" name="term" type="text" />' +
'<label for="">Результат</label><input class="form-control" name="result" type="text" />' +
'</form></div>';
}
var statusNotAgreed = true;
$.each(json.results, function (i, v) {
if (v.status == "not_agreed") {
htmlInbox += '<div class="numberStepp box-sizing">' +
'<p>Этап</p><form class="update-stages-form" id="stage-form-'+ v.pos +'">' +
'<label for="">Название</label><input class="form-control" type="text" value="'+ v.name +'" />' +
'<label for="">Цена</label><input class="form-control" type="text" value="'+ v.cost +'" />' +
'<input class="form-control" type="hidden" value="'+ v.order +'" />' +
'<label for="">Срок</label><input class="form-control" type="text" value="'+ v.term +'" />' +
'<label for="">Результат</label><input class="form-control" type="text" value="'+ v.result +'" />' +
'</form></div>';
} else {
statusNotAgreed = false;
htmlInboxStage = "";
htmlInbox += '<div class="numberStepp box-sizing"><div class="insetNumStepp">' +
'<p class="titleNumStepp"><span>Этап ' + v.pos + '</span>' + v.name + '</p>' +
'<p class="textNumStepp">Результаты этапа:' + v.result + '</p><div>' +
'<p>до 16.03.2015</p><span>' + v.cost + '<i class="fa fa-rub"></i></span></div></div></div>';
}
});
if (statusNotAgreed) {
htmlInbox += '<div class="box-sizing disTab" style="text-align:center;"><div class="checkbox"><input type="checkbox" style="opacity:1">Перейти в режим безопасной сделки' +
'</div></div><div class="textAreaBlock2 box-sizing disTab">' +
'<a href="javascript:void()" id="addStagesForm">отправить на согласование</a> </div>';
}
htmlInbox = htmlInboxStage + htmlInbox;
$("#order-stages").html(htmlInbox);
}
});
getStages(orderId);
{# $.ajax({#}
{# url: '/api/stages/',#}
{# type: 'GET',#}
{# data: {csrfmiddlewaretoken: csrftoken, 'order': orderId},#}
{# dataType: 'json',#}
{# success: function (json) {#}
{# var stageCount = json.results.length;#}
{# if (stageCount == 0){#}
{# stageCountVal = 1;#}
{# }else{#}
{# stageCountVal = stageCount;#}
{# }#}
{##}
{# var htmlInbox = "";#}
{##}
{# var htmlInboxStage = '<p class="textStepss">Какое кол-во этапов подразумевает работа? ' +#}
{# '<input type="text" id="countStage" value="'+ stageCountVal +'"size="3"/></p>';#}
{##}
{# if (stageCount == 0){#}
{# htmlInboxStage += '<div class="numberStepp box-sizing" id="stage1">' +#}
{# '<p>Этап <span class="stage-span-id">1</span></p><form class="new-stages-form" id="stage-form">' +#}
{# '<label for="">Название</label><input class="form-control" name="name" type="text" />' +#}
{# '<label for="">Цена</label><input class="form-control" name="cost" type="text" />' +#}
{# '<input class="form-control" name="order" type="hidden" value="'+ orderId +'" class="orderStagesInput"/> />' +#}
{# '<label for="">Срок</label><input class="form-control" name="term" type="text" />' +#}
{# '<label for="">Результат</label><input class="form-control" name="result" type="text" />' +#}
{# '</form></div>';#}
{# }#}
{# var statusNotAgreed = true;#}
{# $.each(json.results, function (i, v) {#}
{# if (v.status == "not_agreed") {#}
{# htmlInbox += '<div class="numberStepp box-sizing">' +#}
{# '<p>Этап</p><form class="update-stages-form" id="stage-form-'+ v.pos +'">' +#}
{# '<label for="">Название</label><input class="form-control" type="text" value="'+ v.name +'" />' +#}
{# '<label for="">Цена</label><input class="form-control" type="text" value="'+ v.cost +'" />' +#}
{# '<input class="form-control" type="hidden" value="'+ v.order +'" />' +#}
{# '<label for="">Срок</label><input class="form-control" type="text" value="'+ v.term +'" />' +#}
{# '<label for="">Результат</label><input class="form-control" type="text" value="'+ v.result +'" />' +#}
{# '</form></div>';#}
{# } else {#}
{# statusNotAgreed = false;#}
{# htmlInboxStage = "";#}
{# htmlInbox += '<div class="numberStepp box-sizing"><div class="insetNumStepp">' +#}
{# '<p class="titleNumStepp"><span>Этап ' + v.pos + '</span>' + v.name + '</p>' +#}
{# '<p class="textNumStepp">Результаты этапа:' + v.result + '</p><div>' +#}
{# '<p>до 16.03.2015</p><span>' + v.cost + '<i class="fa fa-rub"></i></span></div></div></div>';#}
{##}
{# }#}
{# });#}
{##}
{# if (statusNotAgreed) {#}
{# htmlInbox += '<div class="box-sizing disTab" style="text-align:center;"><div class="checkbox"><input type="checkbox" style="opacity:1">Перейти в режим безопасной сделки' +#}
{# '</div></div><div class="textAreaBlock2 box-sizing disTab">' +#}
{# '<a href="javascript:void()" data-order-id="'+ orderId +'" id="addStagesForm">отправить на согласование</a> </div>';#}
{# }#}
{# htmlInbox = htmlInboxStage + htmlInbox;#}
{# $("#order-stages").html(htmlInbox);#}
{# }#}
{# });#}
});
@ -452,6 +543,10 @@
});
var userId = '{{ request.user.pk }}';
var SocketHandler = function () {
var url = 'ws://127.0.0.1:8888/chat/' + userId + '/';

@ -54,7 +54,7 @@ class ChatUserView(View):
'created')
if request.user.is_owner_team():
team_orders = request.user.team.team_orders.all()
team_orders = request.user.team.orders.all()
self.template_name = 'chat_contractor.html'
return render(request, self.template_name, {'orders': orders,

@ -1,7 +1,8 @@
{% extends 'partials/base.html' %}
{% load humanize %}
{% load thumbnail %}
{% load specializtions_tags %}
{% block content %}
{% include 'partials/header.html' %}
@ -314,7 +315,6 @@
<form action="{% url 'projects:detail' pk=project.pk %}" method="POST" enctype="multipart/form-data" novalidate>
{% csrf_token %}
<input type="hidden" name="next" value="{% url 'projects:detail' pk=project.pk %}">
@ -416,10 +416,6 @@
{% elif request.user.is_customer %}
<div class="exBigBlock disTab">
<div class="col-lg-12">
<p class="titleEx">Исполнители</p>
@ -450,61 +446,47 @@
</div>
{% for answer_p in project.answers.all %}
<div class="candidateBlock disTab">
<div class="candidate">
<div class="col-lg-4">
<a href="#" class="aLinkExe">
<div class="imgExecutor">
<img src="img/profile.jpg" alt="execitor-image">
{% thumbnail answer_p.author.avatar "126x125" crop="center" as im %}
<img src="{{ im.url }}" alt="execitor-image">
{% endthumbnail %}
</div>
</a>
<p class="nameExecutor">
<a href="#">Иванов Петр Иванович [ivanov_petr]</a>
<a href="#">{{ answer_p.author.get_full_name }} [{{ answer_p.author.username }}]</a>
</p>
<p class="navv2">На сайте 8 лет и 3 месяца</p>
<div class="statusUser">Свободен</div>
</div>
<div class="col-lg-3 retts">
<ul class="rettList restList2">
<li>Рейтинг: <span> 1245</span></li>
<li>Безопасные сделки: <span> 5</span></li>
<li>
<a href="javascript:void(0)">Отзывы:
<span> + 385</span>
<small> 0</small>
<mark> - 0</mark>
</a>
</li>
</ul>
{% ratings_widget answer_p.author.pk 'restList2' %}
{% if answer_p.author.cro %}
<div class="sroUser sroExecutor">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
</div>
{% endif %}
</div>
<div class="col-lg-2 listCens">
<p>Цена:
<span> 35 000</span>
<span> {{ answer_p.budget }}</span>
<i class="fa fa-rub"></i>
</p>
<p>
Срок: <span>3 недели</span>
Срок: <span>{{ answer_p.term }} of {{ answer_p.term_type }}</span>
</p>
<p>Опубликован: 22.04.2016</p>
<p>Опубликован: {{ answer_p.created | date:"M d, Y" }}</p>
</div>
<div class="col-lg-3 retts">
<a href="javascript:void(0)" class="candLink candLink1">
Кандидат
</a>
<a href="javascript:void(0)" class="candLink candLink2">
<a href="{% url 'chat:chat-user' %}" class="candLink candLink2">
предложить проект
</a>
<a href="javascript:void(0)" class="candLink candLink3">
@ -581,6 +563,7 @@
</div>
</div>
</div>
{% endfor %}
{% endif %}

@ -175,7 +175,7 @@ class ProjectFilterView(BaseMixin, View):
'<pre>{realty_form}</pre>'
).format(realty_form=pformat(realty_form.errors)))
# import code; code.interact(local=dict(globals(), **locals()))
paginator = Paginator(projects.all(), settings.PAGE_SIZE)
page = request.GET.get('page')

@ -1,4 +1,4 @@
<ul class="rettList">
<ul class="rettList {{ class_name }}">
<li><a href="javascript:void(0)">Рейтинг: <span> {{ ratings }}</span></a></li>
<li><a href="javascript:void(0)">Безопасные сделки: <span> 0</span></a></li>
<li>

@ -30,6 +30,7 @@ def ratings_widget(context, user_id, class_name=None):
ratings = User.objects.get(pk=user_id).rating
return {
'ratings': ratings,
'class_name': class_name
}
@register.inclusion_tag("templatetags/ratings_widget.html", takes_context=True)

@ -1,24 +1,32 @@
{% extends 'partials/base.html' %}
{% block content %}
<div class="col-lg-12">
<p class="titleScore">Вход на сайт</p>
</div>
<div class="form-regestration">
{{ form.errors }}
<form method="post">{% csrf_token %}
<div class="col-lg-12 select-reg">
<input type="text" name="{{ form.username.name }}" class="box-sizing email-reg" placeholder="Электронная почта">
</div>
<div class="col-lg-12 select-reg">
<input type="password" name="{{ form.password.name }}" class="box-sizing pass-reg" placeholder="Пароль">
</div>
<div class="col-lg-12 select-reg">
<button class="reg-sub">Вход</button>
</div>
{% include 'partials/header.html' %}
<div class="container mainScore">
<div class="row">
<div class="col-lg-12">
<p class="titleScore">Вход на сайт</p>
</div>
<div class="form-regestration">
{{ form.errors }}
<form method="post">{% csrf_token %}
<div class="col-lg-12 select-reg">
<input type="text" name="{{ form.username.name }}" class="box-sizing email-reg"
placeholder="Электронная почта">
</div>
<div class="col-lg-12 select-reg">
<input type="password" name="{{ form.password.name }}" class="box-sizing pass-reg" placeholder="Пароль">
</div>
<div class="col-lg-12 select-reg">
<button class="reg-sub">Вход</button>
</div>
</form>
</form>
</div>
{% include 'partials/footer.html' %}
</div>
</div>
</div>
{% endblock %}
a

@ -226,13 +226,13 @@ class ContractorFilterView(BaseMixin, View):
if get_teams:
teams = Team.objects.filter(Q(users__cro=cro) | Q(owner__cro=cro))
teams = Team.objects.filter(Q(contractors__cro=cro) | Q(owner__cro=cro))
if specialization:
teams = teams.filter(
(
Q(users__contractor_specializations__lft__gte=specialization.lft)
& Q(users__contractor_specializations__rght__lte=specialization.rght)
Q(contractors__contractor_specializations__lft__gte=specialization.lft)
& Q(contractors__contractor_specializations__rght__lte=specialization.rght)
) | (
Q(owner__contractor_specializations__lft__gte=specialization.lft)
& Q(owner__contractor_specializations__rght__lte=specialization.rght)
@ -242,8 +242,8 @@ class ContractorFilterView(BaseMixin, View):
if location:
teams = teams.filter(
(
Q(users__location__lft__gte=location.lft)
& Q(users__location__rght__lte=location.rght)
Q(contractors__location__lft__gte=location.lft)
& Q(contractors__location__rght__lte=location.rght)
) | (
Q(owner__location__lft__gte=location.lft)
& Q(owner__location__rght__lte=location.rght)
@ -252,19 +252,19 @@ class ContractorFilterView(BaseMixin, View):
if work_type:
teams = teams.filter(
Q(users__orders__project__work_type=work_type)
Q(contractors__orders__project__work_type=work_type)
| Q(owner__orders__project__work_type=work_type),
)
if build_classif:
teams = teams.filter(
Q(users__orders__project__realty__building_classification=build_classif)
Q(contractors__orders__project__realty__building_classification=build_classif)
| Q(owner__orders__project__realty__building_classification=build_classif),
)
if constr_type:
teams = teams.filter(
Q(users__orders__project__realty__construction_type=constr_type)
Q(contractors__orders__project__realty__construction_type=constr_type)
| Q(owner__orders__project__realty__construction_type=constr_type),
)

@ -65,8 +65,8 @@
<div class="arroww next3"></div>
<div class="swiper-container gallery-top">
<div class="swiper-wrapper">
<div class="swiper-slide" style="background-image:url('{% static object.img.url %}')"></div>
шь
<div class="swiper-slide" style="background-image:url('{% static object.get_cover.url %}')"></div>
{% for photo in object.photos.all %}
<div class="swiper-slide" style="background-image:url('{% static photo.img.url %}')"></div>
{% endfor %}
@ -74,7 +74,7 @@
</div>
<div class="swiper-container gallery-thumbs">
<div class="swiper-wrapper">
<div class="swiper-slide is-selected" style="background-image:url('{% static object.img.url %}')"></div>
<div class="swiper-slide is-selected" style="background-image:url('{% static object.get_cover.url %}')"></div>
{% for photo in object.photos.all %}
<div class="swiper-slide" style="background-image:url('{% static photo.img.url %}')"></div>
{% endfor %}

Loading…
Cancel
Save