|
|
|
|
@ -1,5 +1,6 @@ |
|
|
|
|
{% extends 'partials/base.html' %} |
|
|
|
|
|
|
|
|
|
{% load staticfiles %} |
|
|
|
|
{% load project_tags %} |
|
|
|
|
{% load specializtions_tags %} |
|
|
|
|
{% load thumbnail %} |
|
|
|
|
@ -16,137 +17,107 @@ |
|
|
|
|
|
|
|
|
|
{% include 'partials/contractor_profile_tabs.html' %} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="projectsBlock disTab"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- Tab2 (chat order block)--> |
|
|
|
|
<div class="chatBlock disTab tab-pane"> |
|
|
|
|
<div class="col-lg-3 wrMessages"> |
|
|
|
|
<div class="messageBlock box-sizing disTab"> |
|
|
|
|
<p>Заказы</p> |
|
|
|
|
{% for order in orders %} |
|
|
|
|
<div class="orderBlock box-sizing order-block" data-project-id="{{ order.id }}" |
|
|
|
|
id="orderBlock{{ order.order.id }}" |
|
|
|
|
data-secure-deal="{% if order.order.secure %}true{% else %}false{% endif %}" |
|
|
|
|
{% if order.order.contractor %} |
|
|
|
|
data-recipent-id="{{ order.order.contractor.pk }}" |
|
|
|
|
{% else %} |
|
|
|
|
data-recipent-id="{{ order.order.team.owner.pk }}" |
|
|
|
|
{% endif %} data-id="{{ order.order.id }}"> |
|
|
|
|
<span class="dimovChat"></span> |
|
|
|
|
<p class="titleOB">{{ order }}</p> |
|
|
|
|
<div class="hideOBB"> |
|
|
|
|
<p class="pOB"> |
|
|
|
|
<span>Исполнитель:</span> |
|
|
|
|
{% if order.order.contractor %} |
|
|
|
|
{{ order.order.contractor.get_full_name }} |
|
|
|
|
{% else %} |
|
|
|
|
{{ order.order.team.name }} |
|
|
|
|
{% endif %} |
|
|
|
|
</p> |
|
|
|
|
<a href="#" class="linkChat11 full-order-info"> |
|
|
|
|
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span> |
|
|
|
|
Полное описание заказа |
|
|
|
|
</a> |
|
|
|
|
</div> |
|
|
|
|
<!-- Tab2 chat order block --> |
|
|
|
|
<div class="chatBlock disTab tab-pane" id="tab2"> |
|
|
|
|
<div class="col-lg-3 wrMessages"> |
|
|
|
|
<div class="messageBlock box-sizing disTab"> |
|
|
|
|
<p>Заказы</p> |
|
|
|
|
{% for order in orders %} |
|
|
|
|
<div class="orderBlock box-sizing order-block" data-project-id="{{ order.project.id }}" |
|
|
|
|
id="orderBlock{{ order.id }}" data-recipent-id="{{ order.project.customer.pk }}" data-id="{{ order.id }}"> |
|
|
|
|
<span class="dimovChat"></span> |
|
|
|
|
<p class="titleOB">{{ order }}</p> |
|
|
|
|
<div class="hideOBB"> |
|
|
|
|
<p class="pOB"><span>Исполнитель:</span> {{ request.user.get_full_name }}</p> |
|
|
|
|
|
|
|
|
|
<a href="#" class="linkChat11 full-order-info"> |
|
|
|
|
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span> |
|
|
|
|
Полное описание заказа |
|
|
|
|
</a> |
|
|
|
|
</div> |
|
|
|
|
{% endfor %} |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
{% endfor %} |
|
|
|
|
</div> |
|
|
|
|
<div class="col-lg-6 commChat"> |
|
|
|
|
<div id="message-chat-order-space"></div> |
|
|
|
|
<form id="chat-order-add"> |
|
|
|
|
<input type="hidden" name="senderId" id="senderId" value="{{ request.user.pk }}"/> |
|
|
|
|
<input type="hidden" name="recipentId" id="recipentId"> |
|
|
|
|
<input type="hidden" name="orderId" id="orderId"> |
|
|
|
|
<textarea id="chat" class="box-sizing"></textarea> |
|
|
|
|
<p class="errorEmptyMessage" style="color: red;display:none;">Пустое сообщение нельзя |
|
|
|
|
отправить</p> |
|
|
|
|
<div class="bunChat"> |
|
|
|
|
<div class="setChat box-sizing upload"> |
|
|
|
|
</div> |
|
|
|
|
<div class="col-lg-6 commChat"> |
|
|
|
|
<div id="message-chat-order-space"></div> |
|
|
|
|
<form id="chat-order-add"> |
|
|
|
|
<input type="hidden" id="orderId" name="orderId"> |
|
|
|
|
<input type="hidden" id="senderId" name="senderId" value="{{ request.user.pk }}"> |
|
|
|
|
<input type="hidden" id="recipentId" name="recipentId" value=""> |
|
|
|
|
<textarea id="chat" class="box-sizing"></textarea> |
|
|
|
|
<p class="errorEmptyMessage" style="color: red;display:none;">Пустое сообщение нельзя отправить</p> |
|
|
|
|
<div class="bunChat"> |
|
|
|
|
<div class="setChat box-sizing upload"> |
|
|
|
|
<input type="file" name="file" id="upload-document-order"> |
|
|
|
|
<p>Прикрепить файл</p> |
|
|
|
|
</div> |
|
|
|
|
<div id="document-send-order"></div> |
|
|
|
|
<a href="#" id="order-chat-add-message">отправить</a> |
|
|
|
|
</div> |
|
|
|
|
</form> |
|
|
|
|
</div> |
|
|
|
|
<div class="col-lg-3 wrstepschat" id="order-stages-tab"> |
|
|
|
|
<p>Этапы работы</p> |
|
|
|
|
<div class="stepssBlock box-sizing disTab"> |
|
|
|
|
<p class="titleStepss">1 / Согласование условий</p> |
|
|
|
|
<p class="textStepss"> |
|
|
|
|
Обсуджение задания и условий выполнения работы. Подтверждение заказа исполнителем. |
|
|
|
|
</p> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<div id="order-stages" class="stepssBlock"></div> |
|
|
|
|
|
|
|
|
|
<div class="stepssBlock box-sizing disTab" id="reserveSpace" style="display:none;"> |
|
|
|
|
<p class="titleStepss">2 / Резервирование</p> |
|
|
|
|
<p class="textStepss"> |
|
|
|
|
Резервирование заказчиком суммы оплаты по заказ. |
|
|
|
|
Деньги перечисляются и хранятся насайте. |
|
|
|
|
</p> |
|
|
|
|
<ul class="stages-paid"></ul> |
|
|
|
|
|
|
|
|
|
<div class="textAreaBlock2 FFD box-sizing disTab"> |
|
|
|
|
<a href="#" id="reserve-button" data-order-id="">Зарезервировать</a> |
|
|
|
|
</div> |
|
|
|
|
<div id="document-send-order"></div> |
|
|
|
|
|
|
|
|
|
<a href="#" id="order-chat-add-message">отправить</a> |
|
|
|
|
</div> |
|
|
|
|
</form> |
|
|
|
|
</div> |
|
|
|
|
<div class="col-lg-3 wrstepschat"> |
|
|
|
|
<p>Этапы работы</p> |
|
|
|
|
<div class="stepssBlock box-sizing disTab"> |
|
|
|
|
<p class="titleStepss">1 / Согласование условий</p> |
|
|
|
|
<p class="textStepss"> |
|
|
|
|
Обсуждение задания и условий выполнения работы. |
|
|
|
|
Подтверждение заказа исполнителем. |
|
|
|
|
</p> |
|
|
|
|
</div> |
|
|
|
|
<div id="order-stages"></div> |
|
|
|
|
|
|
|
|
|
<div class="stepssBlock box-sizing disTab" id="reserveSpace" style="display:none;"> |
|
|
|
|
<p class="titleStepss">2 / Резервирование</p> |
|
|
|
|
<p class="textStepss"> |
|
|
|
|
Резервирование заказчиком суммы оплаты по заказ. |
|
|
|
|
Деньги перечисляются и хранятся на сайте. |
|
|
|
|
</p> |
|
|
|
|
<ul class="stages-paid"></ul> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<!-- Зарезервировать средства (модальное окно)--> |
|
|
|
|
{% include 'reverse_stage_modal.html' %} |
|
|
|
|
<!-- Конец блока --> |
|
|
|
|
|
|
|
|
|
<div class="stepssBlock box-sizing disTab" id="completeWork"> |
|
|
|
|
<p class="titleStepss">3 / Выполнение работы</p> |
|
|
|
|
<p class="textStepss"> |
|
|
|
|
Процесс выполнения задания в заказе до получения |
|
|
|
|
заказчиком итогового результата работы. |
|
|
|
|
</p> |
|
|
|
|
<div id="stagesWork" class="stages-work"></div> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<div class="closeChat closeChat1" id="leaveReview" style="display: none;"> |
|
|
|
|
<a href="#" data-toggle="modal" data-target="#review-add"> |
|
|
|
|
Закрыть проект<br>и оставить отзыв |
|
|
|
|
</a> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<div class="col-lg-12 documentsChat"> |
|
|
|
|
<p>Входящие документы</p> |
|
|
|
|
<ul id="documentOrderSpace"></ul> |
|
|
|
|
{# <a href="javascript:void(0)">#} |
|
|
|
|
{# Распечатать с помощью ресурса#} |
|
|
|
|
{# </a>#} |
|
|
|
|
</div> |
|
|
|
|
<div class="stepssBlock box-sizing disTab" id="completeWork"> |
|
|
|
|
<p class="titleStepss">3 / Выполнение работы</p> |
|
|
|
|
<p class="textStepss"> |
|
|
|
|
Процесс выполнения задания в заказе до получения |
|
|
|
|
заказчиком итогового результата работы. |
|
|
|
|
</p> |
|
|
|
|
<div id="stagesWork" class="stages-work textAreaBlock2"> |
|
|
|
|
|
|
|
|
|
<div class="textAreaBlock2 box-sizing disTab"> |
|
|
|
|
<p>Для заметок</p> |
|
|
|
|
<textarea id="chat2"></textarea> |
|
|
|
|
<a href="#">сохранить</a> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<!-- Review add --> |
|
|
|
|
{% include 'review_add_modal.html' %} |
|
|
|
|
<!-- --> |
|
|
|
|
|
|
|
|
|
<!-- Arbitration add --> |
|
|
|
|
{% include 'arbitration_modal.html' %} |
|
|
|
|
<!-- --> |
|
|
|
|
|
|
|
|
|
<!-- order-info --> |
|
|
|
|
{% include 'order_info.html' %} |
|
|
|
|
<!-- --> |
|
|
|
|
|
|
|
|
|
<div class="closeChat closeChat1" id="leaveReview" style="display: none;"> |
|
|
|
|
<a href="#" data-toggle="modal" data-target="#review-add"> |
|
|
|
|
Закрыть проект<br>и оставить отзыв |
|
|
|
|
</a> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<!-- Review add --> |
|
|
|
|
{% include 'review_add_modal.html' %} |
|
|
|
|
<!-- --> |
|
|
|
|
<!-- Arbitration add --> |
|
|
|
|
{% include 'arbitration_modal.html' %} |
|
|
|
|
<!-- --> |
|
|
|
|
<div class="textAreaBlock2 box-sizing disTab"> |
|
|
|
|
<ul class="notes-block"> |
|
|
|
|
</ul> |
|
|
|
|
<p>Для заметок</p> |
|
|
|
|
<form id="add-form-order-note"> |
|
|
|
|
<textarea id="chat2" name="text"></textarea> |
|
|
|
|
<input type="hidden" name="order" id="orderNote" value=""/> |
|
|
|
|
<input type="hidden" name="sender" id="senderNote" value="{{ request.user.pk }}"/> |
|
|
|
|
<input type="hidden" name="recipent" id="recipentNote" value=""/> |
|
|
|
|
<a href="#" id="add-note-button">сохранить</a> |
|
|
|
|
</form> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<!-- End block (chat order block) --> |
|
|
|
|
</div> |
|
|
|
|
<!-- End block Tab2--> |
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
@ -156,8 +127,10 @@ |
|
|
|
|
{% endblock %} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{% block js_block %} |
|
|
|
|
<script type="text/javascript"> |
|
|
|
|
<script type="text/javascript"> |
|
|
|
|
var userId = {{ request.user.pk }}; |
|
|
|
|
var domain = '{{ request.META.HTTP_HOST }}'; |
|
|
|
|
var port = '{{ request.META.SERVER_PORT }}'; |
|
|
|
|
@ -169,159 +142,223 @@ |
|
|
|
|
var currentChatUser = {{ request.user.pk }}; |
|
|
|
|
var form = document.getElementById('message_form'); |
|
|
|
|
|
|
|
|
|
$('body').on('focus',".term-picker", function(){ |
|
|
|
|
$(this).datepicker({ |
|
|
|
|
{# minDate: 0,#} |
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
}) |
|
|
|
|
setTimeout(function () { |
|
|
|
|
$(".team-order-block").first().trigger('click'); |
|
|
|
|
}, 1000); |
|
|
|
|
|
|
|
|
|
var url = '/chat/create/'; |
|
|
|
|
//Загрузка документов |
|
|
|
|
$('#upload-document-team').fileupload({ |
|
|
|
|
url: url, |
|
|
|
|
formData: { |
|
|
|
|
sender: $("#team-chat-form #senderId").val(), |
|
|
|
|
recipent: $("#team-chat-form #recipentId").val(), |
|
|
|
|
team: $("#team-chat-form #teamId").val(), |
|
|
|
|
order: $("#team-chat-form #orderId").val(), |
|
|
|
|
}, |
|
|
|
|
crossDomain: false, |
|
|
|
|
beforeSend: function (xhr, settings) { |
|
|
|
|
$('#progress .progress-bar').css( |
|
|
|
|
'width', |
|
|
|
|
'0%' |
|
|
|
|
); |
|
|
|
|
if (!csrfSafeMethod(settings.type)) { |
|
|
|
|
xhr.setRequestHeader("X-CSRFToken", csrftoken); |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
dataType: 'json', |
|
|
|
|
done: function (e, data) { |
|
|
|
|
$.each(data.result.files, function (index, file) { |
|
|
|
|
var currentValue = $("#documentSendIds").val(); |
|
|
|
|
currentValue += file.id + ';'; |
|
|
|
|
$("#documentSendIds").val(currentValue); |
|
|
|
|
var htmlImg = '<p>' + file.name + '</p>'; |
|
|
|
|
var document_send = $(htmlImg).appendTo("#document-send"); |
|
|
|
|
}); |
|
|
|
|
}, |
|
|
|
|
fail: function(e){ |
|
|
|
|
console.log(e); |
|
|
|
|
}, |
|
|
|
|
progressall: function (e, data) { |
|
|
|
|
var progress = parseInt(data.loaded / data.total * 100, 10); |
|
|
|
|
$('#progress .progress-bar').css( |
|
|
|
|
'width', |
|
|
|
|
progress + '%' |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
}).prop('disabled', !$.support.fileInput) |
|
|
|
|
.parent().addClass($.support.fileInput ? undefined : 'disabled'); |
|
|
|
|
|
|
|
|
|
$("#reserve-button").on("click",function(e) { |
|
|
|
|
// Согласование этапов |
|
|
|
|
$("#order-stages").on('click', "#approve-stages", function (e) { |
|
|
|
|
e.preventDefault(); |
|
|
|
|
$("#reserve-stage-modal").modal('show'); |
|
|
|
|
var orderId = $(this).attr('data-order-id'); |
|
|
|
|
$(".stage-block-approve").each(function () { |
|
|
|
|
var stageId = $(this).attr('data-id'); |
|
|
|
|
$.ajax({ |
|
|
|
|
url: '/api/stages/', |
|
|
|
|
type: 'GET', |
|
|
|
|
data: {csrfmiddlewaretoken: csrftoken, 'order': orderId}, |
|
|
|
|
url: '/api/stages/' + stageId + '/', |
|
|
|
|
type: 'PATCH', |
|
|
|
|
beforeSend: function (xhr) { |
|
|
|
|
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')) |
|
|
|
|
}, |
|
|
|
|
data: "status=in_process", |
|
|
|
|
dataType: 'json', |
|
|
|
|
success: function (json) { |
|
|
|
|
var outputValues = ''; |
|
|
|
|
var totalSum = 0; |
|
|
|
|
var stagesIds = ''; |
|
|
|
|
var notPaidCount = 0; |
|
|
|
|
$.each(json.results, function (i, v) { |
|
|
|
|
if((v.status == 'in_process') && (!v.is_paid)) { |
|
|
|
|
totalSum += parseInt(v.cost); |
|
|
|
|
notPaidCount +=1; |
|
|
|
|
outputValues += '<option data-stage-sum="' + v.cost + '" value="' + v.id + '">' + v.name + '</option>'; |
|
|
|
|
stagesIds += v.id + ';' |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
console.log(json); |
|
|
|
|
|
|
|
|
|
$("#stagesSelect").html(outputValues); |
|
|
|
|
$(".totalSum").text(totalSum); |
|
|
|
|
}, |
|
|
|
|
error: function (e) { |
|
|
|
|
console.log('error'); |
|
|
|
|
console.log(e); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
if(json.results.length>notPaidCount && notPaidCount>0){ |
|
|
|
|
$("#choiceWayOrder").hide(); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
var orderId = $(this).attr('data-order-id'); |
|
|
|
|
|
|
|
|
|
$("#choiceWayOrder").val(totalSum); |
|
|
|
|
$("#ordermodalId").val(orderId); |
|
|
|
|
socket.send_stages_approve({ |
|
|
|
|
"format_type": "approve_stages", |
|
|
|
|
"data": { |
|
|
|
|
"sender_id": $(this).attr('data-sender-id'), |
|
|
|
|
"recipent_id": $(this).attr('data-recipent-id'), |
|
|
|
|
"order_id": orderId, |
|
|
|
|
"msg": "Исполнитель согласовал этапы для заказа " + orderId, |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
$("#stages-pay-form #stageSumPay").val(totalSum); |
|
|
|
|
$("#stages-pay-form #stagesIds").val(stagesIds); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
$("#choiceWayOrder").attr('data-stages-ids',stagesIds); |
|
|
|
|
$(".team-chat-user").on('click', function (e) { |
|
|
|
|
e.stopPropagation(); |
|
|
|
|
var recipentId = $(this).attr('data-id'); |
|
|
|
|
$("#team-chat-form #recipentId").val(recipentId); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
$(".team-order-block").on('click', function () { |
|
|
|
|
$('.team-order-block').each(function () { |
|
|
|
|
$(this).removeClass('orAct'); |
|
|
|
|
}); |
|
|
|
|
$(this).addClass('orAct'); |
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
var teamId = $(this).attr('data-team-id'); |
|
|
|
|
var orderId = $(this).attr('data-order-id'); |
|
|
|
|
$("#team-chat-form #teamId").val(teamId); |
|
|
|
|
$("#team-chat-form #orderId").val(orderId); |
|
|
|
|
|
|
|
|
|
$("#tab2").on("change","input[name=choice_way]:radio", function(e){ |
|
|
|
|
var sumStage = $("#stagesSelect").find('option:selected').attr('data-stage-sum'); |
|
|
|
|
var currIdStage = $("#stagesSelect").find('option:selected').val(); |
|
|
|
|
$("#choiceWayStage").val(sumStage); |
|
|
|
|
var currValue = $(this).val(); |
|
|
|
|
$("#stages-pay-form #stageSumPay").val(currValue); |
|
|
|
|
var selectId = ($(this).attr('id')); |
|
|
|
|
if (selectId == 'choiceWayOrder'){ |
|
|
|
|
$("#stages-pay-form #stagesIds").val($(this).attr('data-stages-ids')); |
|
|
|
|
$("#stagesSelect").prop('disabled', 'disabled'); |
|
|
|
|
}else { |
|
|
|
|
$("#stages-pay-form #stagesIds").val(currIdStage); |
|
|
|
|
$("#stagesSelect").prop('disabled', false); |
|
|
|
|
} |
|
|
|
|
var inbox = document.getElementById('message-chat-team-space'); |
|
|
|
|
inbox.innerHTML = ''; |
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
$.ajax({ |
|
|
|
|
url: '/api/message', |
|
|
|
|
type: 'GET', |
|
|
|
|
data: {csrfmiddlewaretoken: csrftoken, 'team': teamId, 'order': orderId}, |
|
|
|
|
dataType: 'json', |
|
|
|
|
success: function (json) { |
|
|
|
|
$.each(json.results, function (i, v) { |
|
|
|
|
var senderName = 'Вы'; |
|
|
|
|
var className = 'youChat'; |
|
|
|
|
if (v.sender.id !== currentChatUser) { |
|
|
|
|
senderName = v.sender.username; |
|
|
|
|
className = ''; |
|
|
|
|
} |
|
|
|
|
inbox.innerHTML += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' + |
|
|
|
|
'<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' + |
|
|
|
|
'<p class="textCommChat">' + v.text + '</p></div>'; |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
$("#tab2").on("change","#stagesSelect", function(e){ |
|
|
|
|
var sumStage = $(this).find('option:selected').attr("data-stage-sum"); |
|
|
|
|
$("#choiceWayStage").val(sumStage); |
|
|
|
|
$("#stages-pay-form #stageSumPay").val(sumStage); |
|
|
|
|
$(".stageSum").text(sumStage); |
|
|
|
|
$("#stages-pay-form #stagesIds").val($(this).val()); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
//Получить заказы |
|
|
|
|
function getStages(orderId, senderId, recipentId, secureOrder) { |
|
|
|
|
// Вытащить сообщения для чата заказа |
|
|
|
|
$('.order-block').on('click', function () { |
|
|
|
|
$('.order-block').each(function () { |
|
|
|
|
$(this).removeClass('orAct'); |
|
|
|
|
}); |
|
|
|
|
$(this).addClass('orAct'); |
|
|
|
|
var orderId = $(this).attr('data-id'); |
|
|
|
|
var recipentId = $(this).attr('data-recipent-id'); |
|
|
|
|
var projectId = $(this).attr('data-project-id'); |
|
|
|
|
|
|
|
|
|
$("#chat-order-add #orderId").val(orderId); |
|
|
|
|
$("#add-form-order-note #orderNote").val(orderId); |
|
|
|
|
$("#orderArbitrationId").val(orderId); |
|
|
|
|
$("#projectReviewId").val(projectId); |
|
|
|
|
|
|
|
|
|
$("#chat-order-add #recipentId").val(recipentId); |
|
|
|
|
$("#targetCustomerId").val(recipentId); |
|
|
|
|
$("#add-form-order-note #recipentNote").val(recipentId); |
|
|
|
|
|
|
|
|
|
var inbox = document.getElementById('message-chat-order-space'); |
|
|
|
|
inbox.innerHTML = ''; |
|
|
|
|
|
|
|
|
|
$.ajax({ |
|
|
|
|
url: '/api/message', |
|
|
|
|
type: 'GET', |
|
|
|
|
data: {csrfmiddlewaretoken: csrftoken, 'order': orderId, 'team__isnull': 'true'}, |
|
|
|
|
dataType: 'json', |
|
|
|
|
success: function (json) { |
|
|
|
|
$.each(json.results, function (i, v) { |
|
|
|
|
var senderName = 'Вы'; |
|
|
|
|
var className = 'youChat'; |
|
|
|
|
if (v.sender.id !== currentChatUser) { |
|
|
|
|
senderName = v.sender.username; |
|
|
|
|
className = ''; |
|
|
|
|
} |
|
|
|
|
inbox.innerHTML += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' + |
|
|
|
|
'<p class="nameCommChat">' + senderName + '</p> <span>' + v.created + '</span></div>' + |
|
|
|
|
'<p class="textCommChat">' + v.text + '</p></div>'; |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
$.ajax({ |
|
|
|
|
url: '/api/note/', |
|
|
|
|
type: 'GET', |
|
|
|
|
data: {csrfmiddlewaretoken: csrftoken, 'order': orderId}, |
|
|
|
|
dataType: 'json', |
|
|
|
|
success: function (json) { |
|
|
|
|
console.log(json.results); |
|
|
|
|
var noteHtmlInbox = ''; |
|
|
|
|
$.each(json.results, function (i, v) { |
|
|
|
|
noteHtmlInbox += '<li>' + v.text + '<li>'; |
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
$(".notes-block").html(noteHtmlInbox); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
$.ajax({ |
|
|
|
|
url:'/api/orders/' + orderId + '/', |
|
|
|
|
type: 'GET', |
|
|
|
|
data:{csrfmiddlewaretoken: csrftoken}, |
|
|
|
|
dataType: 'json', |
|
|
|
|
|
|
|
|
|
}).then(function(data){ |
|
|
|
|
var htmlInbox = ""; |
|
|
|
|
var stagesReservedHtml = ""; |
|
|
|
|
var stagesPaidProcess = []; |
|
|
|
|
var stagesInWork = []; |
|
|
|
|
var stagesResults = data.stages; |
|
|
|
|
var stageCount = stagesResults.length; |
|
|
|
|
if (stageCount == 0) { |
|
|
|
|
$("#reserveSpace").hide(); |
|
|
|
|
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 orderStagesInput" name="order" type="hidden" value="' + orderId + '"/>' + |
|
|
|
|
'<label for="">Срок</label><input class="term-picker form-control datepicker" name="term" type="text" />' + |
|
|
|
|
'<label for="">Результат</label><input class="form-control" name="result" type="text" />' + |
|
|
|
|
'<input class="form-control" name="pos" value="1" type="hidden" />' + |
|
|
|
|
'</form></div>'; |
|
|
|
|
} |
|
|
|
|
var statusNotAgreed = true; |
|
|
|
|
var stagesInWork = []; |
|
|
|
|
var stagesPaidProcess = []; |
|
|
|
|
var stagesCompleted = []; |
|
|
|
|
var stagePaidCount = 0; |
|
|
|
|
var stagesReservedHtml = ""; |
|
|
|
|
|
|
|
|
|
var statusNotAgreed = false; |
|
|
|
|
var stagesCompleted = []; |
|
|
|
|
if (stagesResults.length > 0) { |
|
|
|
|
$.each(stagesResults, function (i, v) { |
|
|
|
|
if (v.status == "completed"){ |
|
|
|
|
stagesCompleted.push(v); |
|
|
|
|
} |
|
|
|
|
if(v.status == "not_agreed"){ |
|
|
|
|
statusNotAgreed = true; |
|
|
|
|
} |
|
|
|
|
if(!data.secure){ |
|
|
|
|
if(v.status == "in_process") { |
|
|
|
|
if(v.status == "in_process"){ |
|
|
|
|
stagesInWork.push(v); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
}else if ((v.status == "in_process") && (v.is_paid)){ |
|
|
|
|
stagesInWork.push(v); |
|
|
|
|
} else if ((v.status == "in_process") && (v.is_paid)){ |
|
|
|
|
stagesPaidProcess.push(v); |
|
|
|
|
stagesInWork.push(v); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(v.is_paid){ |
|
|
|
|
stagePaidCount +=1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (v.status == "not_agreed") { |
|
|
|
|
htmlInbox += '<div class="numberStepp box-sizing">' + |
|
|
|
|
'<p>Этап</p><form class="update-stages-form" data-stage-id="' + v.id + '" 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 orderStagesInput" type="hidden" name="order" value="' + v.order + '"/>' + |
|
|
|
|
'<label for="">Срок</label><input class="term-picker form-control datepicker" 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 = ""; |
|
|
|
|
var statusName = ''; |
|
|
|
|
if (v.status == 'completed'){ |
|
|
|
|
statusName = 'Завершен'; |
|
|
|
|
} |
|
|
|
|
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>до '+ v.term +'</p><span>' + v.cost + '<i class="fa fa-rub"></i></span>' + |
|
|
|
|
'</div><div><p>'+ statusName +'</p></div></div></div>'; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
if(data.secure) { |
|
|
|
|
if (v.is_paid) { |
|
|
|
|
stagesReservedHtml += '<li class="reserved">Сумма за этап ' + v.pos + '.Зарезервирована.</li>'; |
|
|
|
|
@ -329,73 +366,88 @@ |
|
|
|
|
stagesReservedHtml += '<li class="unreserved">Сумма за этап ' + v.pos + '.Не зарезервирована.</li>'; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
var statusName = ''; |
|
|
|
|
if (v.status == 'completed'){ |
|
|
|
|
statusName = 'Завершен'; |
|
|
|
|
} |
|
|
|
|
htmlInbox += '<div data-id="' + v.id + '" class="numberStepp box-sizing stage-block-approve"><div class="insetNumStepp">' + |
|
|
|
|
'<p class="titleNumStepp"><span>Этап ' + v.pos + '</span>' + v.name + '</p>' + |
|
|
|
|
'<p class="textNumStepp">Результаты этапа:' + v.result + '</p><div>' + |
|
|
|
|
'<p> до ' + v.term + '</p><span>' + v.cost + ' <i class="fa fa-rub"></i></span></div><div><p>'+ statusName +'</p></div></div></div>'; |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
if (stagesResults.length == stagePaidCount && data.secure){ |
|
|
|
|
$("#reserve-button").parent().hide(); |
|
|
|
|
}else { |
|
|
|
|
$("#reserve-button").parent().show(); |
|
|
|
|
if (statusNotAgreed) { |
|
|
|
|
htmlInbox += '<div class="textAreaBlock2 FFD box-sizing disTab">' + |
|
|
|
|
'<a id="approve-stages" data-sender-id="{{ request.user.pk }}" data-recipent-id="' + recipentId + '"' + |
|
|
|
|
' data-order-id="' + orderId + '" href="#">согласовать</a></div>'; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (statusNotAgreed) { |
|
|
|
|
if(!data.secure) { |
|
|
|
|
htmlInbox += '<div class="box-sizing disTab">' + |
|
|
|
|
'<div class="checkbox"><input name="secure" id="secureOrder" type="checkbox" style="opacity:1">' + |
|
|
|
|
'Перейти в режим безопасной сделки</div></div>'; |
|
|
|
|
} |
|
|
|
|
$("#order-stages").html(htmlInbox); |
|
|
|
|
$(".stages-paid").html(stagesReservedHtml); |
|
|
|
|
|
|
|
|
|
htmlInbox +='<div class="textAreaBlock2 box-sizing disTab">' + |
|
|
|
|
'<a href="#" data-sender-id="' + senderId +'" ' + |
|
|
|
|
'data-recipent-id="' + recipentId +'" data-order-id="' + orderId + '" ' + |
|
|
|
|
'id="addStagesForm">отправить на согласование</a> </div>'; |
|
|
|
|
}else if((stagesResults.length>0) && (data.secure)){ |
|
|
|
|
$("#reserveSpace").show(); |
|
|
|
|
} |
|
|
|
|
htmlInbox = htmlInboxStage + htmlInbox; |
|
|
|
|
$("#order-stages").html(htmlInbox); |
|
|
|
|
$("#completeWork").hide(); |
|
|
|
|
if(data.secure) { |
|
|
|
|
$("#reserveSpace").show(); |
|
|
|
|
} else { |
|
|
|
|
$("#reserveSpace").hide(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(stagesInWork.length > 0){ |
|
|
|
|
if (stagesInWork.length > 0){ |
|
|
|
|
$("#completeWork").show(); |
|
|
|
|
var stage = stagesInWork[0]; |
|
|
|
|
var stageWork = '<div class="numberStepp box-sizing">' + |
|
|
|
|
'<div class="insetNumStepp"><div><p>В работе '+ stage.name +'</p></div> ' + |
|
|
|
|
'<div class="insetNumStepp"><div><p>В работе '+ stage.name +'</p></div>' + |
|
|
|
|
'<div><p>Результат этапа : '+ stage.result +'</p></div>' + |
|
|
|
|
'<div><p>Срок сдачи '+ stage.term +'</p><span>' + stage.cost + '<i class="fa fa-rub"></i></span></div>' + |
|
|
|
|
'</div></div>'; |
|
|
|
|
'<div><p>Срок сдачи '+ stage.term +' <span>' + stage.cost + '<i class="fa fa-rub"></i></span></p></div></div></div>'; |
|
|
|
|
|
|
|
|
|
if (stage.close_contractor){ |
|
|
|
|
stageWork += '<div class="textAreaBlock2 FFD box-sizing disTab"><a href="#" class="closeStage" data-order-id="'+ orderId + '" data-sender-id="{{ request.user.pk }}"' + |
|
|
|
|
' data-recipent-id="'+ recipentId + '" data-stage-id="'+ stage.id+'">Закрыть этап '+ stage.pos +'</a></div>'; |
|
|
|
|
if(!stage.close_contractor){ |
|
|
|
|
stageWork += '<div class="textAreaBlock2 FFD box-sizing disTab"><a href="#" class="closeStage" data-sender-id="{{ request.user.pk }}" data-recipent-id="'+ recipentId+'"' + |
|
|
|
|
' data-order-id="'+ data.id +'" data-stage-id="'+ stage.id +'">Завершить этап</a></div>'; |
|
|
|
|
}else{ |
|
|
|
|
stageWork += '<div><p>Этап ожидает завершения статуса от заказчика</p><div>'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (data.secure){ |
|
|
|
|
if (data.secure) { |
|
|
|
|
stageWork += '<div class="textAreaBlock2 FFD box-sizing disTab"><a href="#" data-toggle="modal" data-target="#arbitration-add">Обратитьсяв арбитраж</a></div>'; |
|
|
|
|
} |
|
|
|
|
$("#stagesWork").html(stageWork); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!data.secure){ |
|
|
|
|
$("#reserveSpace").hide(); |
|
|
|
|
} |
|
|
|
|
}else{ |
|
|
|
|
$("#completeWork").hide(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if((stagesCompleted.length == stagesResults.length) && (stagesCompleted.length > 0)){ |
|
|
|
|
$("#leaveReview").show(); |
|
|
|
|
console.log("Все этапы завершены"); |
|
|
|
|
}else { |
|
|
|
|
$("#leaveReview").hide(); |
|
|
|
|
if(stagesCompleted.length == stagesResults.length && stagesCompleted.length>0){ |
|
|
|
|
$("#leaveReview").show(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (data.status == 'completed'){ |
|
|
|
|
$("#leaveReview").hide(); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
$(".stages-paid").html(stagesReservedHtml); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
//Добавить заметку. |
|
|
|
|
$('#add-note-button').on('click', function (e) { |
|
|
|
|
e.preventDefault(); |
|
|
|
|
$.ajax({ |
|
|
|
|
url: '/api/note/', |
|
|
|
|
type: 'POST', |
|
|
|
|
beforeSend: function (xhr) { |
|
|
|
|
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')) |
|
|
|
|
}, |
|
|
|
|
data: $("#add-form-order-note").serialize(), |
|
|
|
|
dataType: 'json', |
|
|
|
|
success: function (json) { |
|
|
|
|
console.log(json); |
|
|
|
|
$("#add-form-order-note #chat2").val(""); |
|
|
|
|
|
|
|
|
|
}, |
|
|
|
|
error: function (e) { |
|
|
|
|
console.log('error'); |
|
|
|
|
console.log(e); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
//Закрыть этап |
|
|
|
|
$('#tab2').on('click','.closeStage', function(e){ |
|
|
|
|
e.preventDefault(); |
|
|
|
|
var stageId = $(this).attr('data-stage-id'); |
|
|
|
|
@ -406,16 +458,17 @@ |
|
|
|
|
beforeSend: function (xhr) { |
|
|
|
|
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')) |
|
|
|
|
}, |
|
|
|
|
data: {close_customer: true, status: 'completed'}, |
|
|
|
|
data: "close_contractor=True", |
|
|
|
|
dataType: 'json', |
|
|
|
|
success: function (json) { |
|
|
|
|
|
|
|
|
|
socket.send_stages_approve({ |
|
|
|
|
"format_type": "approve_stages", |
|
|
|
|
"data": { |
|
|
|
|
"sender_id": _this.attr('data-sender-id'), |
|
|
|
|
"recipent_id": _this.attr('data-recipent-id'), |
|
|
|
|
"order_id": _this.attr('data-order-id'), |
|
|
|
|
"msg": "Заказчик закрыл этап " + json.name, |
|
|
|
|
"msg": "Исполнитель завершил этап " + json.name, |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
console.log(json); |
|
|
|
|
@ -427,206 +480,34 @@ |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
// Добавление этапов |
|
|
|
|
$("#order-stages").on('click', "#addStagesForm", function (e) { |
|
|
|
|
e.preventDefault(); |
|
|
|
|
var currentOrderId = $(this).attr('data-order-id'); |
|
|
|
|
var secureOrderEl = $("#secureOrder"); |
|
|
|
|
if(secureOrderEl.length > 0) { |
|
|
|
|
var secOrderVal = false; |
|
|
|
|
if (secureOrderEl.prop('checked')) { |
|
|
|
|
secOrderVal = true; |
|
|
|
|
} |
|
|
|
|
$.ajax({ |
|
|
|
|
url: '/api/orders/' + currentOrderId + '/', |
|
|
|
|
type: 'PATCH', |
|
|
|
|
beforeSend: function (xhr) { |
|
|
|
|
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')) |
|
|
|
|
}, |
|
|
|
|
data: {secure: secOrderVal}, |
|
|
|
|
dataType: 'json', |
|
|
|
|
success: function (json){ |
|
|
|
|
}, |
|
|
|
|
error: function(e){ |
|
|
|
|
console.log(e); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$(".new-stages-form").each(function (i, v) { |
|
|
|
|
$.ajax({ |
|
|
|
|
url: '/api/stages/', |
|
|
|
|
type: 'POST', |
|
|
|
|
beforeSend: function (xhr) { |
|
|
|
|
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')) |
|
|
|
|
}, |
|
|
|
|
data: $(this).serialize(), |
|
|
|
|
dataType: 'json', |
|
|
|
|
success: function (json) { |
|
|
|
|
console.log(json); |
|
|
|
|
|
|
|
|
|
}, |
|
|
|
|
error: function (e) { |
|
|
|
|
console.log('error'); |
|
|
|
|
console.log(e); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
$(".update-stages-form").each(function (i, v) { |
|
|
|
|
var currentStageId = parseInt($(this).attr('data-stage-id')); |
|
|
|
|
$.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); |
|
|
|
|
}, |
|
|
|
|
error: function (e) { |
|
|
|
|
console.log('error'); |
|
|
|
|
console.log(e); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var currentRecipentId = $(this).attr('data-recipent-id'); |
|
|
|
|
var secureOrder = true |
|
|
|
|
|
|
|
|
|
socket.send_stages_approve({ |
|
|
|
|
"format_type": "approve_stages", |
|
|
|
|
//Добавить сообщение для исполнителей в группе |
|
|
|
|
$("#add-team-chat-message").on('click', function () { |
|
|
|
|
var chatMessage = $("#team-chat-form #chatText").val(); |
|
|
|
|
var recipentId = $("#team-chat-form #recipentId").val(); |
|
|
|
|
var senderId = $("#team-chat-form #senderId").val(); |
|
|
|
|
var teamId = $("#team-chat-form #teamId").val(); |
|
|
|
|
var orderId = $("#team-chat-form #orderId").val(); |
|
|
|
|
|
|
|
|
|
var documentSendIds = $("#documentSendIds").val(); |
|
|
|
|
console.log(documentSendIds); |
|
|
|
|
var teamDocumentIds = documentSendIds.split(';'); |
|
|
|
|
teamDocumentIds.pop(); |
|
|
|
|
console.log(teamDocumentIds); |
|
|
|
|
socket.add_team_message({ |
|
|
|
|
"format_type": "add_message_team", |
|
|
|
|
"data": { |
|
|
|
|
"sender_id": userId, |
|
|
|
|
"recipent_id": currentRecipentId, |
|
|
|
|
"order_id": currentOrderId, |
|
|
|
|
"msg": "Этапы для заказа "+ currentOrderId +"изменены", |
|
|
|
|
"sender_id": senderId, |
|
|
|
|
"recipent_id": recipentId, |
|
|
|
|
"chat_message": chatMessage, |
|
|
|
|
"team_id": teamId, |
|
|
|
|
"order_id": orderId, |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
{# setTimeout(function () {#} |
|
|
|
|
{# getStages(currentOrderId,userId,currentRecipentId,secureOrder);#} |
|
|
|
|
{##} |
|
|
|
|
{# }, 1000);#} |
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
//Изменение счетчика |
|
|
|
|
$('#order-stages-tab').on('change', '#countStage', function () { |
|
|
|
|
var countStage = parseInt($(this).val()); |
|
|
|
|
var currentCountStage = $(".numberStepp").length; |
|
|
|
|
if ((countStage<1) || isNaN(countStage)) { |
|
|
|
|
countStage = 1; |
|
|
|
|
$('#order-stages-tab #countStage').val(currentCountStage); |
|
|
|
|
}else { |
|
|
|
|
if (countStage > currentCountStage) { |
|
|
|
|
for (var jj = currentCountStage; jj < countStage; jj++) { |
|
|
|
|
var pos = jj + 1; |
|
|
|
|
var lastFormStage = $(".numberStepp").last(); |
|
|
|
|
var orderId = lastFormStage.find('.orderStagesInput').val(); |
|
|
|
|
var addFormTemplate = '<div class="numberStepp box-sizing" id="stage1">' + |
|
|
|
|
'<p>Этап <span class="stage-span-id">' + pos + '</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 orderStagesInput" name="order" type="hidden" value="' + orderId + '" />' + |
|
|
|
|
'<label for="">Срок</label><input class="term-picker form-control datepicker" name="term" type="text" />' + |
|
|
|
|
'<label for="">Результат</label><input class="form-control" name="result" type="text" />' + |
|
|
|
|
'<input class="form-control" name="pos" value="' + pos + '" type="hidden" />' |
|
|
|
|
'</form></div>'; |
|
|
|
|
lastFormStage.after(addFormTemplate); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} else if (countStage < currentCountStage) { |
|
|
|
|
var ii = currentCountStage; |
|
|
|
|
$($(".numberStepp").get().reverse()).each(function () { |
|
|
|
|
var currenFormName = ($(this).find('form').attr('class')); |
|
|
|
|
if (ii > countStage) { |
|
|
|
|
$(this).remove(); |
|
|
|
|
} |
|
|
|
|
ii--; |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
// Для заказов все вытащить |
|
|
|
|
$('.order-block').on('click', function () { |
|
|
|
|
$("#chat-order-add").css("display", "block"); |
|
|
|
|
$("#formsetStage").css("display", "block"); |
|
|
|
|
|
|
|
|
|
$('.order-block').each(function () { |
|
|
|
|
$(this).removeClass('orAct'); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
$(this).addClass('orAct'); |
|
|
|
|
var orderId = $(this).attr('data-id'); |
|
|
|
|
var projectId = $(this).attr('data-project-id'); |
|
|
|
|
var recipentId = $(this).attr('data-recipent-id'); |
|
|
|
|
var secureOrder = $(this).attr('data-secure-deal'); |
|
|
|
|
secureOrder = Boolean(secureOrder); |
|
|
|
|
$("#chat-order-add #orderId").val(orderId); |
|
|
|
|
$("#orderArbitrationId").val(orderId); |
|
|
|
|
$("#projectReviewId").val(projectId); |
|
|
|
|
$("#reserve-button").attr('data-order-id', orderId); |
|
|
|
|
$("#targetContractorId").val(recipentId); |
|
|
|
|
$("#chat-order-add #recipentId").val(recipentId); |
|
|
|
|
$(".orderStagesInput").val(orderId); |
|
|
|
|
var inbox = document.getElementById('message-chat-order-space'); |
|
|
|
|
var docList = document.getElementById('documentOrderSpace'); |
|
|
|
|
inbox.innerHTML = ''; |
|
|
|
|
docList.innerHTML = ''; |
|
|
|
|
|
|
|
|
|
$.ajax({ |
|
|
|
|
url:'/api/documents', |
|
|
|
|
type: 'GET', |
|
|
|
|
data:{ |
|
|
|
|
csrfmiddlewaretoken: csrftoken, |
|
|
|
|
'order': orderId |
|
|
|
|
}, |
|
|
|
|
dataType: 'json', |
|
|
|
|
success: function (json){ |
|
|
|
|
console.log(json); |
|
|
|
|
|
|
|
|
|
$.each(json.results, function (i, v) { |
|
|
|
|
docList.innerHTML += '<li style="word-break: break-all;"><a class="file-link" href="'+ v.file_url +'">'+ v.file+'</a></li>'; |
|
|
|
|
}); |
|
|
|
|
}, |
|
|
|
|
error: function(e){ |
|
|
|
|
console.log(e); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
$.ajax({ |
|
|
|
|
url: '/api/message', |
|
|
|
|
type: 'GET', |
|
|
|
|
data: {csrfmiddlewaretoken: csrftoken, 'order': orderId,'team__isnull': 'true'}, |
|
|
|
|
dataType: 'json', |
|
|
|
|
success: function (json) { |
|
|
|
|
$.each(json.results, function (i, v) { |
|
|
|
|
var senderName = 'Вы'; |
|
|
|
|
var className = 'youChat'; |
|
|
|
|
|
|
|
|
|
if (v.sender.id !== currentChatUser) { |
|
|
|
|
senderName = v.sender.username; |
|
|
|
|
className = ''; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' + |
|
|
|
|
'<p class="nameCommChat">' + senderName + '</p><span>' + v.created + '</span></div>' + |
|
|
|
|
'<p class="textCommChat">' + v.text + '</p></div>'; |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
getStages(orderId,userId,recipentId, secureOrder); |
|
|
|
|
$("#team-chat-form #chatText").val(""); |
|
|
|
|
$("#document-send").html(""); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
var userId = '{{ request.user.pk }}'; |
|
|
|
|
|
|
|
|
|
</script> |
|
|
|
|
{% endblock %} |
|
|
|
|
|
|
|
|
|
|