#ARC-18 add stages forms for contractors

remotes/origin/setup
Mukhtar 10 years ago
parent c8e216f428
commit 2d968c670b
  1. 2
      api/views.py
  2. 14
      assets/css/extra.css
  3. 99
      chat/templates/chat_contractor.html
  4. 114
      chat/templates/chat_customer.html
  5. 1
      projects/filters.py
  6. 1
      projects/serializers.py
  7. 8
      templates/partials/base.html

@ -40,7 +40,7 @@ class NoteViewSet(ModelViewSet):
queryset = Notes.objects.all()
serializer_class = NoteSerializer
filter_class = NoteFilterSet
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
class MessageViewSet(ModelViewSet):
queryset = Message.objects.all()

@ -68,3 +68,17 @@
.textAreaBlock2 input[type="text"] {
margin: 0;
}
.stepssBlock ul li.reserved::before {
background: rgba(0, 0, 0, 0) url("../img/reserved2.png") no-repeat scroll center center / cover ;
height: 16px;
width: 17px;
}
.stepssBlock ul li.unreserved::before {
background: rgba(0, 0, 0, 0) url("../img/reserved.png") no-repeat scroll center center / cover ;
height: 14px;
width: 13px;
}

@ -97,7 +97,7 @@
<span class="dimovChat"></span>
<p class="titleOB">{{ order }}</p>
<div class="hideOBB">
<p class="pOB"><span>Испонитель:</span> {{ request.user.get_full_name }}</p>
<p class="pOB"><span>Исполнитель:</span> {{ request.user.get_full_name }}</p>
<p class="pOB"><span>Чаты:</span> Иванов, Петров</p>
<a href="javascript:void(0)" class="linkChat11">
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
@ -137,14 +137,28 @@
</div>
<div id="order-stages"></div>
<div class="textAreaBlock2 FFD box-sizing disTab">
<a id="approve-stages" href="javascript:void()">согласовать</a>
<div class="stepssBlock box-sizing disTab">
<p class="titleStepss">2 / Резервирование</p>
<p class="textStepss">
Резервирование заказчиком суммы оплаты по заказ. Деньги перечисляются и хранятся на
сайте.
</p>
<ul class="stages-paid"></ul>
</div>
<div class="textAreaBlock2 box-sizing disTab">
<ul class="notes-block">
</ul>
<p>Для заметок</p>
<textarea id="chat2"></textarea>
<a href="javascript:void()">сохранить</a>
<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="javascript:void()" id="add-note-button">сохранить</a>
</form>
</div>
</div>
</div>
@ -198,9 +212,6 @@
</div>
<div id="order-stages"></div>
<div class="textAreaBlock2 FFD box-sizing disTab">
<a href="javascript:void()">согласовать</a>
</div>
<div class="stepssBlock box-sizing disTab">
<p class="titleStepss">2 / Резервирование</p>
<p class="textStepss">
@ -297,16 +308,25 @@
$("#approve-stages").on('click', function(){
$(".stage-block-approve").each(function(){
var stageId = $(this).attr('data-id');
alert(stageId);
});
});
// Вытащить сообщения для чата заказа
$('.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');
$("#chat-contractor-order #orderId").val(orderId);
$("#add-form-order-note #orderNote").val(orderId);
$("#chat-contractor-order #recipentOrderId").val(recipentId);
$("#add-form-order-note #recipentNote").val(recipentId);
var inbox = document.getElementById('message-chat-order-space');
inbox.innerHTML = '';
@ -330,6 +350,21 @@
}
});
$.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/stages/',
@ -339,18 +374,52 @@
success: function (json) {
console.log(json.results);
var htmlInbox = "";
$.each(json.results, function (i, v) {
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>до 16.03.2015</p><span>'+ v.cost +'<i class="fa fa-rub"></i></span></div></div></div>';
});
var stagesReservedHtml = "";
if (json.results.length > 0) {
$.each(json.results, function (i, v) {
if(v.is_paid){
stagesReservedHtml += '<li class="reserved">Сумма за этап '+ i +'.Зарезервирована.</li>';
}else{
stagesReservedHtml += '<li class="unreserved">Сумма за этап '+ i +'.Не зарезервирована.</li>';
}
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.status+'</p><span>' + v.cost + '<i class="fa fa-rub"></i></span></div></div></div>';
});
htmlInbox += '<div class="textAreaBlock2 FFD box-sizing disTab"><a id="approve-stages" href="javascript:void()">согласовать</a></div>';
}
$("#order-stages").html(htmlInbox);
$(".stages-paid").html(stagesReservedHtml);
}
});
});
$('#add-note-button').on('click', function(){
$.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);
}
});
});
// Вытащить сообщения для конактов
$('.user-block').on('click', function () {
var userId = $(this).attr('data-id');

@ -127,7 +127,7 @@
</div>
<div class="col-lg-3 wrstepschat">
<div class="col-lg-3 wrstepschat" id="order-stages-tab">
<p>Этапы работы</p>
<div class="stepssBlock box-sizing disTab">
<p class="titleStepss">1 / Согласование условий</p>
@ -136,37 +136,35 @@
</p>
</div>
<div class="stepssBlock box-sizing disTab">
<p class="textStepss">
Какое кол-во этапов подразумевает работа? <input type="text" id="countStage" size="3"/>
</p>
<div id="formsetStage" class="numberStepp box-sizing" style="display: none;">
<div class="insetNumStepp" id="stage1">
<p class="titleNumStepp">
<span>Этап </span>
</p>
<div class="textAreaBlock2 box-sizing disTab">
<form class="new-stages-form">
<label>Название</label>
<input type="text" name="name" />
<label>Результат</label>
<input type="text" name="result" />
<label>Стоимость</label>
<input type="text" name="cost" />
<input type="hidden" name="order" class="orderStagesInput"/>
</form>
</div>
</div>
<div class="textAreaBlock2 box-sizing disTab">
<a href="javascript:void()" id="addStagesForm">отправить на согласование</a>
</div>
</div>
</div>
<div class="textAreaBlock2 FFD box-sizing disTab">
<a href="javascript:void()">согласовать</a>
</div>
{# <div class="stepssBlock box-sizing disTab">#}
{# <p class="textStepss">#}
{# Какое кол-во этапов подразумевает работа? <input type="text" id="countStage" size="3"/>#}
{# </p>#}
{# <div id="formsetStage" class="numberStepp box-sizing" style="display: none;">#}
{# <div class="insetNumStepp" id="stage1">#}
{# <p class="titleNumStepp">#}
{# <span>Этап </span>#}
{# </p>#}
{# <div class="textAreaBlock2 box-sizing disTab">#}
{# <form class="new-stages-form">#}
{# <label>Название</label>#}
{# <input type="text" name="name" />#}
{# <label>Результат</label>#}
{# <input type="text" name="result" />#}
{# <label>Стоимость</label>#}
{# <input type="text" name="cost" />#}
{# <input type="hidden" name="order" class="orderStagesInput"/>#}
{# </form>#}
{# </div>#}
{# </div>#}
{##}
{# </div>#}
{##}
{# </div>#}
{# <div class="textAreaBlock2 FFD box-sizing disTab">#}
{# <a href="javascript:void()">согласовать</a>#}
{# </div>#}
<div id="order-stages"></div>
@ -241,8 +239,11 @@
var csrftoken = getCookie('csrftoken');
$("#addStagesForm").on('click',function(){
$(".new-stages-form").each(function(i,v){
$("#order-stages").on('click', "#addStagesForm", function(){
$(".new-stages-form").each(function(i,v){
console.log($(this).serialize());
alert($(this).serialize());
$.ajax({
url: '/api/stages/',
type: 'POST',
@ -255,6 +256,7 @@
console.log(json);
},
error: function(e){
console.log('error');
console.log(e);
}
});
@ -262,19 +264,20 @@
});
});
$('#countStage').on('change', function (e) {
$(".stages_form").each(function () {
$(this).remove();
});
$('#order-stages-tab').on('change', '#countStage', function(){
var countStage = parseInt($(this).val());
var updateFormStages = $(".update-stages-form");
alert(updateFormStages.length);
alert(typeof updateFormStages.length);
var limitCount = countStage + 1;
for (var i = 2; i < limitCount; i++) {
var stageCopy = $("#stage1").clone().attr("id", "stage" + i).addClass("stages_form");
$("#stage1").after(stageCopy);
}
});
$('.order-block').on('click', function () {
$("#chat-order-add").css("display", "block");
$("#formsetStage").css("display","block");
@ -319,8 +322,29 @@
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 = "";
console.log(json.results.length);
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">' +
@ -332,6 +356,8 @@
'<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>' +
@ -339,6 +365,13 @@
}
});
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);
}
});
@ -483,7 +516,6 @@
textareaMessage.value = "";
}
}
</script>

@ -65,6 +65,7 @@ class StageFilterSet(FilterSet):
status = AllLookupsFilter()
pos = AllLookupsFilter()
order = RelatedFilter('projects.filters.OrderFilterSet')
is_paid = AllLookupsFilter()
class Meta:
model = Stage

@ -76,6 +76,7 @@ class StageSerializer(ModelSerializer):
'result',
'pos',
'status',
'is_paid',
)

@ -60,14 +60,16 @@
<script src='{% static "lib/jquery.fileupload/js/jquery.fileupload.js" %}'></script>
<script src='{% static "lib/jquery.fileupload/js/jquery.fileupload-process.js" %}'></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.4.1/jquery.jgrowl.min.js"></script>
{#<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>#}
{#<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.4.1/jquery.jgrowl.min.js"></script>#}
<script src='{% static "my-libs.js" %}'></script>
<script src='{% static "js/main.js" %}'></script> <!-- Файл верстальщика -->
<script src='{% static "index.js" %}'></script> <!-- Файл программистов -->
{% block js_block %}{% endblock %}
{% block js_block %}
{% endblock %}
</body>
</html>

Loading…
Cancel
Save