#ARC-18 Add stages and update stages for customer

remotes/origin/setup
Mukhtar 10 years ago
parent 0dfbce1186
commit 3e2cc8c348
  1. 7
      api/views.py
  2. 3
      archilance/settings/base.py
  3. 133
      chat/templates/chat_customer.html
  4. 41
      chat/templates/test1.html
  5. 4
      chat/views.py
  6. 11
      projects/serializers.py
  7. 1
      users/templates/contractor_profile.html

@ -1,6 +1,6 @@
from django.db.models import Q from django.db.models import Q
from rest_framework.viewsets import ModelViewSet from rest_framework.viewsets import ModelViewSet
from rest_framework import permissions
from projects.models import Project, Realty, Stage from projects.models import Project, Realty, Stage
from projects.serializers import ProjectSerializer, RealtySerializer, StageSerializer from projects.serializers import ProjectSerializer, RealtySerializer, StageSerializer
@ -27,6 +27,11 @@ class StageViewSet(ModelViewSet):
queryset = Stage.objects.all() queryset = Stage.objects.all()
serializer_class = StageSerializer serializer_class = StageSerializer
filter_class = StageFilterSet filter_class = StageFilterSet
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
# def put(self, request, *args, **kwargs):
# # import code; code.interact(local=dict(globals(), **locals()))
# return super().update(request, *args, **kwargs)
class ProjectViewSet(ModelViewSet): class ProjectViewSet(ModelViewSet):

@ -238,9 +238,10 @@ REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [ 'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly', 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly',
# 'rest_framework.permissions.DjangoModelPermissions',
], ],
'PAGE_SIZE': 10, 'PAGE_SIZE': 100,
'DEFAULT_FILTER_BACKENDS': ('rest_framework_filters.backends.DjangoFilterBackend',), # djangorestframework-filters 'DEFAULT_FILTER_BACKENDS': ('rest_framework_filters.backends.DjangoFilterBackend',), # djangorestframework-filters
} }

@ -156,7 +156,7 @@
<div id="message-chat-order-space"> <div id="message-chat-order-space">
</div> </div>
<form id="chat-order-add"> <form id="chat-order-add" style="display:none;">
<input type="hidden" name="senderId" id="senderId" value="{{ request.user.pk }}"/> <input type="hidden" name="senderId" id="senderId" value="{{ request.user.pk }}"/>
<input type="hidden" name="recipentId" id="recipentId" value=""/> <input type="hidden" name="recipentId" id="recipentId" value=""/>
<input type="hidden" name="orderId" id="orderId" value=""/> <input type="hidden" name="orderId" id="orderId" value=""/>
@ -174,43 +174,47 @@
</div> </div>
<div class="col-lg-3 wrTAB"> <div class="col-lg-3 wrstepschat">
<p>Этапы работы</p> <p>Этапы работы</p>
<div class="stepssBlock box-sizing disTab"> <div class="stepssBlock box-sizing disTab">
<p class="titleStepss">1 / Согласование условий</p> <p class="titleStepss">1 / Согласование условий</p>
<p class="textStepss"> <p class="textStepss">
Обсуджение задания и условий выполнения работы. Подтверждение заказа исполнителем. Обсуджение задания и условий выполнения работы. Подтверждение заказа исполнителем.
</p> </p>
<p></p> <p></p>
<p class="textStepss">
Какое кол-во этапов подразумевает работа? <input type="text" id="countStage" size="3" /> </div>
</p> <div class="stepssBlock box-sizing disTab">
<p class="textStepss">
</div> Какое кол-во этапов подразумевает работа? <input type="text" id="countStage" size="3"/>
<div id="formsetStage" class="numberStepp box-sizing"> </p>
<div class="insetNumStepp" id="stage1"> <div id="formsetStage" class="numberStepp box-sizing" style="display: none;">
<p class="titleNumStepp"> <div class="insetNumStepp" id="stage1">
<span>Этап </span> <p class="titleNumStepp">
</p> <span>Этап </span>
<div class="textAreaBlock2 box-sizing disTab"> </p>
<form> <div class="textAreaBlock2 box-sizing disTab">
<input type="text" value="Название этапа" /> <form class="new-stages-form">
<input type="text" value="Результат этапа" /> <label>Название</label>
<input type="text" value="Срок этапа" /> <input type="text" name="name" />
<input type="text" value="Цена этапа" /> <label>Результат</label>
<input type="text" value="" class="orderStagesInput" /> <input type="text" name="result" />
</form> <label>Стоимость</label>
<input type="text" name="cost" />
<input type="hidden" name="order" class="orderStagesInput"/>
</form>
</div>
</div> </div>
</div>
<div class="textAreaBlock2 box-sizing disTab"> <div class="textAreaBlock2 box-sizing disTab">
<a href="javascript:void()">сохранить</a> <a href="javascript:void()" id="addStagesForm">сохранить</a>
</div> </div>
</div> </div>
<div class="textAreaBlock2 FFD box-sizing disTab"> </div>
<a href="javascript:void()">согласовать</a> <div class="textAreaBlock2 FFD box-sizing disTab">
</div> <a href="javascript:void()">согласовать</a>
</div>
<div id="order-stages"></div> <div id="order-stages"></div>
@ -241,23 +245,48 @@
var csrftoken = getCookie('csrftoken'); var csrftoken = getCookie('csrftoken');
$('#countStage').on('change', function(e){ $("#addStagesForm").on('click',function(){
$(".stages_form").each(function(){ $(".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(e);
}
});
});
});
$('#countStage').on('change', function (e) {
$(".stages_form").each(function () {
$(this).remove(); $(this).remove();
}); });
var countStage = parseInt($(this).val()); var countStage = parseInt($(this).val());
var limitCount = countStage + 1; var limitCount = countStage + 1;
for(var i=2;i<limitCount;i++){ for (var i = 2; i < limitCount; i++) {
var stageCopy = $("#stage1").clone().attr("id","stage" + i).addClass("stages_form"); var stageCopy = $("#stage1").clone().attr("id", "stage" + i).addClass("stages_form");
$("#stage1").after(stageCopy); $("#stage1").after(stageCopy);
} }
}); });
$('.order-block').on('click', function () { $('.order-block').on('click', function () {
$('.order-block').each(function(){ $("#chat-order-add").css("display", "block");
$(this).removeClass('orAct'); $("#formsetStage").css("display","block");
$('.order-block').each(function () {
$(this).removeClass('orAct');
}); });
$(this).addClass('orAct'); $(this).addClass('orAct');
var orderId = $(this).attr('data-id'); var orderId = $(this).attr('data-id');
var recipentId = $(this).attr('data-recipent-id'); var recipentId = $(this).attr('data-recipent-id');
@ -281,8 +310,8 @@
className = ''; className = '';
} }
inbox.innerHTML += '<div class="col-lg-12 insetCommChat '+ className +'"><div class="topCommChat">' + inbox.innerHTML += '<div class="col-lg-12 insetCommChat ' + className + '"><div class="topCommChat">' +
'<p class="nameCommChat">'+ senderName +'</p><span>'+ v.created +'</span></div>' + '<p class="nameCommChat">' + senderName + '</p><span>' + v.created + '</span></div>' +
'<p class="textCommChat">' + v.text + '</p></div>'; '<p class="textCommChat">' + v.text + '</p></div>';
}); });
} }
@ -296,10 +325,22 @@
success: function (json) { success: function (json) {
var htmlInbox = ""; var htmlInbox = "";
$.each(json.results, function (i, v) { $.each(json.results, function (i, v) {
htmlInbox += '<div class="numberStepp box-sizing"><div class="insetNumStepp">' + if (v.status == "not_agreed") {
'<p class="titleNumStepp"><span>Этап '+ v.pos +'</span>'+ v.name +'</p>' + htmlInbox += '<div class="numberStepp box-sizing">' +
'<p class="textNumStepp">Результаты этапа:'+ v.result+'</p><div>' + '<p>Этап</p><form class="update-stages-form" id="stage-form-'+ v.pos +'">' +
'<p>до 16.03.2015</p><span>'+ v.cost +'<i class="fa fa-rub"></i></span></div></div></div>'; '<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 {
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>';
}
}); });
$("#order-stages").html(htmlInbox); $("#order-stages").html(htmlInbox);
} }

@ -1,10 +1,33 @@
<h1>Test page </h1> {% extends 'partials/base.html' %}
{% block content %}
<h1>Test page </h1>
{% endblock %}
{% block js_block %}
<script type="text/javascript">
$(function () {
<form method="post" action=""> $.ajax({
{{ formset.management_form }} url: '/api/stages/4/',
<table> type: 'PUT',
{% for form in formset %} beforeSend: function (xhr) {
{{ form }} xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'))
{% endfor %} },
</table>
</form> data: {
name: 'Test name.HA HA HA nnnnnn ',
cost: 100,
result: 'Результат',
order: 1,
},
dataType: 'json',
success: function (json) {
console.log(json);
},
error: function(e){
console.log(e);
}
});
});
</script>
{% endblock %}

@ -53,6 +53,4 @@ class ChatUserView(View):
def test(request): def test(request):
ArticleFormSet = formset_factory(ArticleForm, extra=2) return render(request, 'test1.html')
formset = ArticleFormSet()
return render(request, 'test1.html', {'formset': formset})

@ -80,6 +80,17 @@ class StageSerializer(ModelSerializer):
) )
# def update(self, inst, validated_data):
# import code; code.interact(local=dict(globals(), **locals()))
# inst.id = validated_data.get('id',inst.id)
# inst.name = validated_data.get('name', inst.name)
# inst.cost = validated_data.get('cost', inst.cost)
# inst.order = validated_data.get('order', inst.order)
# inst.result = validated_data.get('result', inst.result)
# inst.save()
# return inst
class ProjectSerializer(ModelSerializer): class ProjectSerializer(ModelSerializer):
customer = UserSerializer() customer = UserSerializer()
specialization = SpecializationSerializer() specialization = SpecializationSerializer()

@ -287,6 +287,7 @@
<div class="col-lg-12 wr-inset-pluss"> <div class="col-lg-12 wr-inset-pluss">
<div class="pluss-block"> <div class="pluss-block">
{{ contractor.contractor_resume.text }} {{ contractor.contractor_resume.text }}
</div> </div>
<div class="gal-pluss"> <div class="gal-pluss">
<div class="inset-gp"> <div class="inset-gp">

Loading…
Cancel
Save