#ARC-16 add templates for chats

remotes/origin/setup
Mukhtar 10 years ago
parent b04a8a4557
commit 21e198be86
  1. 4
      common/templatetags/common_tags.py
  2. 20
      projects/templates/comparison.html
  3. 43
      projects/templates/customer_project_detail.html
  4. 67
      projects/templates/project_detail.html
  5. 11
      projects/templates/templatetags/ratings_widget.html
  6. 2
      projects/templatetags/projects_tags.py
  7. 2
      projects/urls.py
  8. 11
      projects/views.py
  9. 12
      specializations/templates/templatetags/specializations_widget.html
  10. 1
      users/mixins.py
  11. 5
      users/models.py
  12. 12
      users/templates/contractor_chat.html
  13. 66
      users/templates/contractor_profile_edit.html
  14. 447
      users/templates/customer_chat.html
  15. 12
      users/urls.py
  16. 22
      users/views.py

@ -31,4 +31,8 @@ def to_str(val):
return str(val)
@register.filter
def multiply(string, times):
return string * times
# import code; code.interact(local=dict(globals(), **locals()))

@ -25,21 +25,17 @@
<th>Безопасные сделки</th>
<th>Решение</th>
</tr>
{% for cand in object.candidates.all %}
<tr>
<td>1</td>
<td>{{ forloop.counter }}</td>
<td>
{{ cand.answer.user.get_full_name }}
{{ cand.answer.contractor.get_full_name }}
</td>
<td>{{ cand.answer.cost }} <i class="fa fa-rub"></i></td>
<td>{{ cand.answer.budget }} <i class="fa fa-rub"></i></td>
<td>
{{ cand.answer.term }}<br> <span>недели</span>
{{ cand.answer.term }}<br> <span>{{ cand.answer.term_type }}</span>
</td>
<td>
@ -48,20 +44,22 @@
<td>
<ul>
<li><span>23 560</span></li>
<li><span>0</span></li>
<li>
<span>+385</span>
<span>+0</span>
0
<small> - 0</small>
</li>
{% if cand.answer.contractor.cro %}
<li>
СРО
</li>
{% endif %}
</ul>
</td>
<td>
<span>5</span><br>
<span>0</span><br>
Готов работать по безопасной сделке
</td>

@ -16,9 +16,9 @@
<img src="{% static 'img/profile.jpg' %}" alt="execitor-image">
</div></a>
<p class="nameExecutor">
<a href="#">{{ project.user.get_full_name }} [ivanov_petr]</a>
<a href="#">{{ project.contractor.get_full_name }} [ivanov_petr]</a>
</p>
<p class="navv2">На сайте {{ object.created | naturaltime }}</p>
<p class="navv2">На сайте {{ project.contractor.created | naturaltime }}</p>
<ul class="rettList restList3">
<li>
<a href="javascript:void(0)">Отзывы:
@ -122,7 +122,7 @@
<div class="candidate">
<div class="col-lg-4">
<a href="#" class="aLinkExe"><div class="imgExecutor">
<img src="img/profile.jpg" alt="execitor-image">
<img src="{% static 'img/profile.jpg' %}" alt="execitor-image">
</div></a>
<p class="nameExecutor">
<a href="#"> {{ answer.contractor.get_full_name }} []</a>
@ -158,6 +158,7 @@
<p>Опубликован: {{ answer.created }}</p>
</div>
<div class="col-lg-3 retts">
<a href="{% url 'projects:add-candidate' answer_id=answer.id project_id=project.id %}" class="candLink candLink1">
Кандидат
</a>
@ -178,24 +179,24 @@
</div>
</div>
<div class="commBlock44 disTab">
<div class="comm44 disTab">
<div class="col-lg-10 col-lg-offset-1">
<p class="nameComm">
Иванов Петр Иванович
</p>
<span class="dateComm44">
13.0.2016 / 21:05
</span>
<div class="stars box-sizing">
<span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star" aria-hidden="true"></span>
</div>
<p class="textComm44">Lorem ipsum dolor sit amet</p>
</div>
</div>
{# <div class="comm44 disTab">#}
{# <div class="col-lg-10 col-lg-offset-1">#}
{# <p class="nameComm">#}
{# Иванов Петр Иванович#}
{# </p>#}
{# <span class="dateComm44">#}
{# 13.0.2016 / 21:05#}
{# </span>#}
{# <div class="stars box-sizing">#}
{# <span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>#}
{# <span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>#}
{# <span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>#}
{# <span class="glyphicon glyphicon-star" aria-hidden="true"></span>#}
{# <span class="glyphicon glyphicon-star" aria-hidden="true"></span>#}
{# </div>#}
{# <p class="textComm44">Lorem ipsum dolor sit amet</p>#}
{# </div>#}
{# </div>#}
</div>
</div>
{% endfor %}

@ -15,24 +15,24 @@
<div class="doneBlock new-done disTab">
<div class="triangle1"></div>
<div class="col-lg-12 new-p">
<p>{{ project.price | intcomma }} <i class="fa fa-rub"></i></p>
<p>{{ project.budget | intcomma }} <i class="fa fa-rub"></i></p>
</div>
<div class="col-lg-4">
<a href="#" class="aLinkExe"><div class="imgExecutor">
<img src="img/profile.jpg" alt="execitor-image">
<img src="{% static 'img/profile.jpg' %}" alt="execitor-image">
</div></a>
<p class="nameExecutor">
<a href="#">{{ project.user.get_full_name }} [ivanov_petr]</a>
<a href="#">{{ project.customer.get_full_name }} [{{ project.customer }}]</a>
</p>
<p class="navv2">На сайте {{ project.created | naturaltime }}</p>
</div>
<div class="col-lg-3 retts">
<ul class="rettList restList2">
<li>Рейтинг: <span> 1245</span></li>
<li>Безопасные сделки: <span> 5</span></li>
<li>Рейтинг: <span> 0</span></li>
<li>Безопасные сделки: <span> 0</span></li>
<li>
<a href="javascript:void(0)">Отзывы:
<span> + 385</span>
<span> + 0</span>
<small> 0</small>
<mark> - 0</mark>
</a>
@ -47,6 +47,7 @@
<div class="insetSpec">
<span>Интерьеры</span>
</div>
<div class="insetSpec">
<span>Визуализация/3D</span>
</div>
@ -112,7 +113,6 @@
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Стоимость</p>
<input type="text" class="box-sizing" name="{{ form.budget.name }}"/>
</div>
</div>
@ -175,12 +175,12 @@
<div class="candidate can-new">
<div class="col-lg-4">
<a href="#" class="aLinkExe"><div class="imgExecutor">
<img src="img/profile.jpg" alt="execitor-image">
<img src="{% static 'img/profile.jpg' %}" alt="execitor-image">
</div></a>
<p class="nameExecutor">
<a href="#">{{ answer.user.get_full_name }} [ivanov_petr]</a>
<a href="#">{{ answer.contractor.get_full_name }} [{{ answer.contractor }}]</a>
</p>
<p class="navv2">На сайте 8 лет и 3 месяца</p>
<p class="navv2">{{ answer.contractor.created }}</p>
</div>
<div class="col-lg-3 retts">
<ul class="rettList restList2">
@ -194,18 +194,21 @@
</a>
</li>
</ul>
{% if answer.contractor.cro %}
<div class="sroUser sroExecutor">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
</div>
{% endif %}
</div>
<div class="col-lg-2 listCens">
<p>Цена:
<span> {{ answer.cost }}</span>
<span> {{ answer.budget }}</span>
<i class="fa fa-rub"></i>
</p>
<p>
Срок: <span>{{ answer.term }} недели</span>
Срок: <span>{{ answer.term }} {{ answer.term_type }}</span>
</p>
<p>Опубликован: {{ answer.created }}</p>
</div>
@ -215,26 +218,26 @@
</a>
</div>
<div class="commBlock44 comm-new disTab">
<div class="comm44 disTab">
<div class="col-lg-10 col-lg-offset-1">
<p class="nameComm">
Иванов Петр Иванович
</p>
<span class="dateComm44">
13.0.2016 / 21:05
</span>
<div class="stars box-sizing">
<span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star" aria-hidden="true"></span>
</div>
<p class="textComm44">
Text
</p>
</div>
</div>
{# <div class="comm44 disTab">#}
{# <div class="col-lg-10 col-lg-offset-1">#}
{# <p class="nameComm">#}
{# Иванов Петр Иванович#}
{# </p>#}
{# <span class="dateComm44">#}
{# 13.0.2016 / 21:05#}
{# </span>#}
{# <div class="stars box-sizing">#}
{# <span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>#}
{# <span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>#}
{# <span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>#}
{# <span class="glyphicon glyphicon-star" aria-hidden="true"></span>#}
{# <span class="glyphicon glyphicon-star" aria-hidden="true"></span>#}
{# </div>#}
{# <p class="textComm44">#}
{# Text#}
{# </p>#}
{# </div>#}
{# </div>#}
</div>
</div>
{% endfor %}

@ -11,4 +11,15 @@
</li>
</ul>
{#<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>#}

@ -3,7 +3,7 @@ from django import template
register = template.Library()
@register.inclusion_tag("templatetags/ratings_widget.html", takes_context=True)
def ratings_widget(context, user_id):
def ratings_widget(context, user_id, class_name=None):
ratings = user_id
return {
'ratings': ratings,

@ -3,7 +3,6 @@ from django.views.generic import TemplateView
from .views import (
add_candidate,
ChatView,
ContractorProjectAnswerView,
CustomerProjectCreateView,
CustomerProjectDeleteView,
@ -32,6 +31,5 @@ urlpatterns = [
urls.url(r'^candidate/add/(?P<answer_id>(\d+))/(?P<project_id>(\d+))/$', add_candidate, name='add-candidate'),
urls.url(r'^candidate/comparison/(?P<pk>\d+)$', ProjectComparisonView.as_view(), name='comparison'),
# urls.url(r'^portfolio/create/$', PortfolioCreateView.as_view(), name='portfolio-create'),
urls.url(r'chat/$', ChatView.as_view(), name='chat'),
urls.url(r'offerorder/(?P<answer_id>(\d+))/(?P<project_id>(\d+))/$', OfferOrderView.as_view(), name='offer-order'),
]

@ -99,6 +99,7 @@ class ProjectsView(ListView):
class ProjectView(BaseMixin, View):
template_name = 'project_detail.html'
customer_template_name = 'customer_project_detail.html'
form_class = ContractorProjectAnswerForm
def get(self, request, *args, **kwargs):
project = get_object_or_404(Project, pk=kwargs.get('pk'))
@ -109,6 +110,8 @@ class ProjectView(BaseMixin, View):
if request.user.is_authenticated() and request.user.is_customer():
return render(request, self.customer_template_name, context)
else:
form = self.form_class()
context.update({'form': form})
return render(request, self.template_name, context)
@ -166,7 +169,6 @@ class ContractorProjectAnswerView(BaseMixin, View):
answer.contractor = request.user
answer.project = project
answer.save()
order = Order.objects.create(project=project)
return HttpResponseRedirect(reverse('projects:detail', kwargs={'pk': project.pk}))
@ -251,13 +253,6 @@ def add_candidate(request, answer_id, project_id):
return HttpResponseRedirect(reverse('projects:detail',args=[project_id]))
class ChatView(View):
template_name = 'chat.html'
def get(self, request, *args, **kwargs):
return render(request, self.template_name)
class OfferOrderView(View):
template_name = 'chattest.html'

@ -7,3 +7,15 @@
</div>
{% endfor %}
</div>
{# <div class="dashedCol4 dashedCol44 dashedColColor">#}
{# <p class="specUser">#}
{# Специализации:#}
{# </p>#}
{# <div class="insetSpec">#}
{# <span>Интерьеры</span>#}
{# </div>#}
{# #}
{# <div class="insetSpec">#}
{# <span>Визуализация/3D</span>#}
{# </div>#}
{# </div>#}

@ -5,7 +5,6 @@ from django.contrib import messages
class CheckForUserMixin(object):
def dispatch(self, request, *args, **kwargs):
messages.info(request,str(request.user))
if request.user.is_authenticated():
pk = kwargs.get('pk')
if pk:

@ -117,7 +117,10 @@ class User(AbstractBaseUser, PermissionsMixin):
def get_full_name(self):
return self.first_name + ' ' + self.last_name
def get_profile_image(self):
return self.avatar
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = UserManager()

@ -1,10 +1,9 @@
{% extends 'partials/base.html' %}
{% load staticfiles %}
{% load common_tags %}
{% block content %}
{% include 'partials/header.html' %}
{% load staticfiles %}
{% load humanize %}
<div class="container mainScore">
{% include 'partials/header.html' %}
<div class="container mainScore">
<div class="row">
<div class="col-lg-12 allProjects">
<h1>Чат</h1>
@ -577,8 +576,7 @@
</div>
</div>
</div>
{% include 'partials/footer.html' %}
{% include 'partials/footer.html' %}
</div>
</div>
{% endblock %}

@ -1,23 +1,14 @@
{% extends 'partials/base.html' %}
{% load staticfiles %}
{% load common_tags %}
{% block content %}
{% include 'partials/header.html' %}
{% include 'partials/header2.html' %}
<div class="container mainScore">
<div class="row">
<form method="post" enctype="multipart/form-data">{% csrf_token %}
<div class="projectsBlock disTab">
<div class="col-lg-12">
{% load mptt_tags %}
{% recursetree nodes %}
<li>
{{ node.name }}
{% if not node.is_leaf_node %}
---
{{ children }}
{% endif %}
</li>
{% endrecursetree %}
{% load mptt_tags %}
{{ form.errors }}
<div class="col-lg-3 divCol3">
<div class="avatar">
@ -40,25 +31,16 @@
<input type="text" value="{{ form.patronym.value }}" name="{{ form.patronym.name }}" class="box-sizing inp-edit">
</div>
<div class="col-lg-4">
{# <p class="name-edit-p">Специализация: {{ form.location}}</p>#}
{# <p class="name-edit-p">{{ form.contractor_specializations }}</p>#}
<p class="name-edit-p">Специализация:</p>
<div class="polsF1 pols-edit disTab">
{% for spec in form.instance.contractor_specializations.all %}
<h4>{{ spec }}</h4>
{% endfor %}
<div class="polsF1 pols-edit disTab">
<select class="selectpicker4">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
<select class="selectpicker4">
{% for sp in nodes %}
<option value="{{ sp.pk }}" {% if spec.pk == sp.pk %}selected{% endif %}>{{ "-"|multiply:sp.level }}{{ sp }}</option>
{% endfor %} }
</select>
<select class="selectpicker4">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
{% endfor %}
<a href="javascript:void(0)" class="add-edit" id="add-edit-spec">
Добавить еще
@ -67,15 +49,16 @@
</div>
</div>
<div class="col-lg-4">
<p class="name-edit-p">Местоположение: {{ form.location.value }}</p>
<p class="name-edit-p">Местоположение:</p>
<div class="polsF1 pols-edit disTab">
<select id="location-country">
</select>
<select id="location-region">
</select>
<select id="location-city">
<select id="location-city" data-id="{{ orm.location.value }}" name="{{ form.location.name }}">
</select>
</div>
</div>
@ -147,6 +130,8 @@
<script type="text/javascript">
$(function(){
var variable = {{ }}
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
@ -190,28 +175,37 @@
size: 4,
width: '117px'
});
$.ajax({
url: '/api/location',
url: '/api/locations',
type: 'GET',
data:{ csrfmiddlewaretoken : csrftoken},
dataType:'json',
'success': function(json){
console.log(json.results);
var out = ''
var outCountry = '';
var outCity, outCountry,outRegion;
outCity = outCountry = outRegion = '';
$.each(json.results, function(i,v){
if (v.type == 'country'){
outCountry += '<option value="' + v.id + '">' + v.name + '</option>';
}
if (v.type == 'region'){
outRegion += '<option value="' + v.id + '">' + v.name + '</option>';
}
if (v.type == 'town') {
out += '<option value="' + v.id + '">' + v.name + '</option>';
outCity += '<option value="' + v.id + '">' + v.name + '</option>';
}
});
$('#location-country').html(outCountry);
$('#location-city').html(out);
$('#location-city').html(outCity);
$('#location-region').html(outRegion);
$('#location-country').addClass("selectpicker4");
$('#location-city').addClass("selectpicker4");
$('#location-region').addClass("selectpicker4");
$('.selectpicker4').selectpicker({
style: 'btn-info',

@ -0,0 +1,447 @@
{% extends 'partials/base.html' %}
{% load staticfiles %}
{% load common_tags %}
{% block content %}
{% include 'partials/header.html' %}
<div class="container mainScore">
<div class="row">
<div class="col-lg-12 allProjects">
<h1>Чат</h1>
</div>
<div class="btnReadyBlock disTab">
<div class="triangle1"></div>
<div class="col-lg-6 col-lg-offset-3 tabsChat">
<div class="profileTabs2">
<ul class="nav nav-tabs nav-justified">
<li role="presentation" class="active">
<a href="#tab1" data-toggle="tab">Личные</a>
</li>
<li role="presentation">
<a href="#tab3" data-toggle="tab">Исполнители</a>
</li>
</ul>
</div>
</div>
</div>
<div class="tab-content">
<div class="chatBlock disTab tab-pane fade in active" id="tab1">
<div class="col-lg-3 wrMessages">
<div class="messageBlock box-sizing disTab">
<p>Заказы</p>
<div class="orderBlock box-sizing">
<span class="dimovChat"></span>
<p class="titleOB">
Дизай-проект квартиры на набережной 200 m2
</p>
<div class="hideOBB">
<p class="pOB">
<span>Испонитель:</span> Группа Икс
</p>
<ul class="listChat1">
<li>Иванов Петр Иванович</li>
<li>Сергей Пенкин</li>
<li>Александ Смирнов</li>
<li>Иванов Петр</li>
</ul>
<p class="pOB">
<span>Чаты:</span> Иванов, Петров, Пенкин
</p>
<a href="javascript:void(0)" class="linkChat11">
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
Полное описание заказа
</a>
</div>
</div>
<div class="orderBlock box-sizing">
<span class="dimovChat"></span>
<p class="titleOB">
Дизай-проект квартиры на набережной 200 m2
</p>
<div class="hideOBB">
<p class="pOB">
<span>Испонитель:</span> Группа Икс
</p>
<ul class="listChat1">
<li>Иванов Петр Иванович</li>
<li>Сергей Пенкин</li>
<li>Александ Смирнов</li>
<li>Иванов Петр</li>
</ul>
<p class="pOB">
<span>Чаты:</span> Иванов, Петров, Пенкин
</p>
<a href="javascript:void(0)" class="linkChat11">
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
Полное описание заказа
</a>
</div>
</div>
<div class="orderBlock box-sizing">
<span class="dimovChat"></span>
<p class="titleOB">
Дизай-проект квартиры на набережной 200 m2
</p>
<div class="hideOBB">
<p class="pOB">
<span>Испонитель:</span> Группа Икс
</p>
<ul class="listChat1">
<li>Иванов Петр Иванович</li>
<li>Сергей Пенкин</li>
<li>Александ Смирнов</li>
<li>Иванов Петр</li>
</ul>
<p class="pOB">
<span>Чаты:</span> Иванов, Петров, Пенкин
</p>
<a href="javascript:void(0)" class="linkChat11">
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
Полное описание заказа
</a>
</div>
</div>
</div>
</div>
<div class="col-lg-6 commChat">
<div class="col-lg-12 insetCommChat">
<div class="topCommChat">
<p class="nameCommChat">
Иванов Петр Иванович
</p>
<span>
13.0.2016 / 21:05
</span>
</div>
<p class="textCommChat">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo.
</p>
</div>
<div class="col-lg-12 insetCommChat youChat">
<div class="topCommChat">
<p class="nameCommChat greenNCC">
Вы
</p>
<span>
13.0.2016 / 21:05
</span>
</div>
<p class="textCommChat">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo.
</p>
</div>
<div class="col-lg-12 insetCommChat">
<div class="topCommChat">
<p class="nameCommChat">
Иванов Петр Иванович
</p>
<span>
13.0.2016 / 21:05
</span>
</div>
<p class="textCommChat">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo.
</p>
</div>
<div class="col-lg-12 insetCommChat youChat">
<div class="topCommChat">
<p class="nameCommChat greenNCC">
Вы
</p>
<span>
13.0.2016 / 21:05
</span>
</div>
<p class="textCommChat">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo.
</p>
</div>
<div class="col-lg-12 insetCommChat youChat">
<div class="topCommChat">
<p class="nameCommChat greenNCC">
Вы
</p>
<span>
13.0.2016 / 21:05
</span>
</div>
<p class="textCommChat">
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</p>
</div>
<textarea id="chat" class="box-sizing"></textarea>
<div class="bunChat">
<div class="setChat box-sizing">
<p>Прикрепить файл</p>
<span>
Не более 10 файлов с общим объемом 500мб
</span>
</div>
<a href="javascript:void(0)">отправить</a>
</div>
</div>
<div class="col-lg-3 wrChat1">
<div class="messageBlock box-sizing disTab">
<p>Контакты</p>
<div class="message">
<div class="imgMess">
<img src="img/mess.png" alt="mess-image">
</div>
<p class="nameMess">
<a href="#">Иванов Петр Иванович</a>
</p>
<a href="javascript:void(0)" class="conMess">Контакты</a>
</div>
</div>
<div class="col-lg-12 startChat">
<div class="insetSC1">
Начало:
<span>Срок сдачи:</span>
</div>
<div class="insetSC2">
13.0.2016
<span>13.0.2016</span>
</div>
</div>
<div class="col-lg-12 documentsChat">
<p>Входящие документы</p>
<ul>
<li>
Архитерурное 2.jpg
<span>7мб</span>
<div></div>
</li>
<li>
Архитерурное 2.jpg
<span>7мб</span>
<div></div>
</li>
<li>
Архитерурное 2.jpg
<span>7мб</span>
<div></div>
</li>
</ul>
<a href="javascript:void(0)">
Распечатать с помощью ресурса
</a>
</div>
<div class="textAreaBlock2 box-sizing disTab">
<p>Для заметок</p>
<textarea id="chat2"></textarea>
<a href="javascript:void()">сохранить</a>
</div>
<div class="closeChat closeChat1">
<a href="javascript:void(0)">
Закрыть проект<br>и оставить отзыв
</a>
</div>
<div class="closeChat closeChat2">
<a href="javascript:void(0)">
Закрыть проект<br>и оставить отзыв
</a>
</div>
</div>
</div>
<div class="chatBlock disTab tab-pane fade" id="tab3">
<div class="col-lg-3 wrMessages">
<div class="messageBlock box-sizing disTab">
<p>Заказы</p>
<div class="orderBlock box-sizing orAct">
<span class="dimovChat"></span>
<p class="titleOB">
Дизай-проект квартиры на набережной 200 m2
</p>
<div class="hideOBB disTab">
<p class="pOB">
<span>Заказчик:</span> Группа Икс
</p>
<ul class="listChat1">
<li>Иванов Петр Иванович</li>
<li>Сергей Пенкин</li>
</ul>
<a href="javascript:void(0)" class="linkChat11">
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
Полное описание заказа
</a>
</div>
</div>
<div class="orderBlock box-sizing">
<span class="dimovChat"></span>
<p class="titleOB">
Дизай-проект квартиры на набережной 200 m2
</p>
<div class="hideOBB disTab">
<p class="pOB">
<span>Заказчик:</span> Группа Икс
</p>
<ul class="listChat1">
<li>Иванов Петр Иванович</li>
<li>Сергей Пенкин</li>
</ul>
<a href="javascript:void(0)" class="linkChat11">
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
Полное описание заказа
</a>
</div>
</div>
<div class="orderBlock box-sizing">
<span class="dimovChat"></span>
<p class="titleOB">
Дизай-проект квартиры на набережной 200 m2
</p>
<div class="hideOBB disTab">
<p class="pOB">
<span>Заказчик:</span> Группа Икс
</p>
<ul class="listChat1">
<li>Иванов Петр Иванович</li>
<li>Сергей Пенкин</li>
</ul>
<a href="javascript:void(0)" class="linkChat11">
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
Полное описание заказа
</a>
</div>
</div>
</div>
</div>
<div class="col-lg-6 commChat">
<div class="col-lg-12 insetCommChat">
<div class="topCommChat">
<p class="nameCommChat">
Иванов Петр Иванович
</p>
<span>
13.0.2016 / 21:05
</span>
</div>
<p class="textCommChat">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo.
</p>
</div>
<div class="col-lg-12 insetCommChat youChat">
<div class="topCommChat">
<p class="nameCommChat greenNCC">
Вы
</p>
<span>
13.0.2016 / 21:05
</span>
</div>
<p class="textCommChat">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo.
</p>
</div>
<div class="col-lg-12 insetCommChat">
<div class="topCommChat">
<p class="nameCommChat">
Иванов Петр Иванович
</p>
<span>
13.0.2016 / 21:05
</span>
</div>
<p class="textCommChat">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo.
</p>
</div>
<div class="col-lg-12 insetCommChat youChat">
<div class="topCommChat">
<p class="nameCommChat greenNCC">
Вы
</p>
<span>
13.0.2016 / 21:05
</span>
</div>
<p class="textCommChat">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo.
</p>
</div>
<div class="col-lg-12 insetCommChat youChat">
<div class="topCommChat">
<p class="nameCommChat greenNCC">
Вы
</p>
<span>
13.0.2016 / 21:05
</span>
</div>
<p class="textCommChat">
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
</p>
</div>
<textarea id="chat" class="box-sizing"></textarea>
<div class="bunChat">
<div class="setChat box-sizing">
<p>Прикрепить файл</p>
<span>
Не более 10 файлов с общим объемом 500мб
</span>
</div>
<a href="javascript:void(0)">отправить</a>
</div>
</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 class="numberStepp box-sizing">
<div class="insetNumStepp">
<p class="titleNumStepp">
<span>Этап 1</span>Название этапа
</p>
<p class="textNumStepp">
Результаты этапа: Готовый чертеж 1
</p>
<div>
<p>до 16.03.2015</p>
<span>30 000 <i class="fa fa-rub"></i></span>
</div>
</div>
</div>
<div class="numberStepp box-sizing">
<div class="insetNumStepp">
<p class="titleNumStepp">
<span>Этап 2</span>Название этапа
</p>
<p class="textNumStepp">
Результаты этапа: Готовый чертеж 1
</p>
<div>
<p>до 16.03.2015</p>
<span>30 000 <i class="fa fa-rub"></i></span>
</div>
</div>
</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">
Резервирование заказчиком суммы оплаты по заказ. Деньги перечисляются и хранятся на сайте.
</p>
<ul>
<li>Сумма еще не зарезервирована</li>
<li>Сумма за этап1, Зарезервирована</li>
</ul>
</div>
<div class="stepssBlock box-sizing disTab">
<p class="titleStepss">3 / Выполнение работы</p>
<p class="textStepss">
Процесс выполнения задания в заказе до получения заказчиком итогового результата работы.
</p>
</div>
</div>
</div>
</div>
{% include 'partials/footer.html' %}
</div>
</div>
{% endblock %}

@ -12,6 +12,8 @@ from .views import (
CustomerProfileTrashedProjectsView,
ContractorFinancialInfoEdit,
CustomerProfileEditView,
CustomerChat,
ContractorChat,
# UserDetailView,
# UserInfoListView,
UserListView,
@ -32,9 +34,11 @@ urlpatterns = [
# urls.url(r'^profile/$', UserDetailView.as_view(), name='user-detail'),
urls.url(r'^$', UserListView.as_view(), name='users_list'),
# urls.url(r'^info$', UserInfoListView.as_view(), name='users_info_list'),
urls.url(r'contractors/$', ContractorListView.as_view(), name='contractor-list' ),
urls.url(r'contractors/$', ContractorListView.as_view(), name='contractor-list'),
# urls.url(r'^(?P<pk>\d+)/$', UserView.as_view(), name='user_view'),
urls.url(r'contractors/(?P<pk>\d+)/edit/$', ContractorProfileEditView.as_view(), name='contractor-edit' ),
urls.url(r'customers/(?P<pk>\d+)/edit/$', CustomerProfileEditView.as_view(), name='customers-edit' ),
urls.url(r'contractors/(?P<pk>\d+)/financialinfo/edit/$', ContractorFinancialInfoEdit.as_view(), name='contractor-financical' ),
urls.url(r'contractors/(?P<pk>\d+)/edit/$', ContractorProfileEditView.as_view(), name='contractor-edit'),
urls.url(r'customers/(?P<pk>\d+)/edit/$', CustomerProfileEditView.as_view(), name='customers-edit'),
urls.url(r'customer/chat/$', CustomerChat.as_view(), name='customer-chat'),
urls.url(r'contractor/chat/$', ContractorChat.as_view(), name='contractor-chat'),
urls.url(r'contractors/(?P<pk>\d+)/financialinfo/edit/$', ContractorFinancialInfoEdit.as_view(), name='contractor-financical'),
]

@ -6,6 +6,7 @@ from django.views.generic.base import TemplateView
from django.core.urlresolvers import reverse
from archilance.mixins import BaseMixin
from common.utils import get_or_none
from specializations.models import Specialization
from .models import User, ContractorFinancialInfo
from .mixins import CheckForUserMixin
@ -98,14 +99,16 @@ class ContractorProfileEditView(CheckForUserMixin, View):
def get(self, request, *args, **kwargs):
instance = get_object_or_404(User, pk=request.user.pk)
form = self.form_class(instance=instance)
nodes = Specialization.objects.all()
root = get_or_none(Specialization,name='_root')
nodes = root.get_descendants('lft')
return render(request,self.template_name, {'form': form , 'nodes': nodes})
def post(self, request, *args, **kwargs):
instance = request.user
form = self.form_class(request.POST, request.FILES, instance=instance)
if form.is_valid():
import code; code.interact(local=dict(globals(), **locals()))
# import code; code.interact(local=dict(globals(), **locals()))
instance = form.save(commit=False)
instance.save()
messages.info(request, 'Данные успешно отредактированы')
@ -135,3 +138,18 @@ class ContractorFinancialInfoEdit(CheckForUserMixin, View):
return redirect(reverse('users:contractor-financical', kwargs={'pk': request.user.pk}))
return render(request, self.template_name,{'form': form})
class CustomerChat(View):
template_name = 'customer_chat.html'
def get(self, request, *args, **kwargs):
return render(request, self.template_name)
class ContractorChat(View):
template_name = 'contractor_chat.html'
def get(self, request, *args, **kwargs):
return render(request, self.template_name)

Loading…
Cancel
Save